Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1apev5-0008Il-Bi for pgadmin-hackers@arkaria.postgresql.org; Mon, 11 Apr 2016 16:42:36 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1apev4-0006k1-Rg for pgadmin-hackers@arkaria.postgresql.org; Mon, 11 Apr 2016 16:42:34 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1apenY-0004qp-0c for pgadmin-hackers@postgresql.org; Mon, 11 Apr 2016 16:34:48 +0000 Received: from mail-vk0-x232.google.com ([2607:f8b0:400c:c05::232]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1apenF-0006f4-9w for pgadmin-hackers@postgresql.org; Mon, 11 Apr 2016 16:34:46 +0000 Received: by mail-vk0-x232.google.com with SMTP id t129so134266751vkg.2 for ; Mon, 11 Apr 2016 09:34:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:date:message-id:subject:from:to; bh=qbQJO8R/zCSocZGwMM+DWqxubx1vp4ligsTtgAEmTGo=; b=kIGt13GSjpFIE+FliP8FVCK9/MDknaKJCAFhiJafapZvbfguompUnO9wtj3x2rF/CI gPuriyvALBjwAXm+d2O3g/lwb3U//LYHWC6G3/yjEpw7x7irCiaZzPNW9Q3jevzWFIf0 ZaIM6nMKfv4g/hpr9yfzX3FlHy4qIXvRpZS303d8cyWeCHAkQIAq/wRH/L4crgQviwdP xFAdAjI8oXKhCB83eP9vLHjmT5aMCk0JREAspRIZoKpEUhcm5n6w16yubD+fPn9i5ZM5 joHm37TvPy456ULpjjLO8YaSiVYDeISViBnchEQiVy6fQt6ryF4fH39UR5Ygg0dRRXV7 6/3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to; bh=qbQJO8R/zCSocZGwMM+DWqxubx1vp4ligsTtgAEmTGo=; b=CCzhGsOnsIKSCoOfvLr1qiCiVW30BXIUILkrbHlEAGa2zeGzl7dPgAihmaCS/J/qu0 qcLXzekR2n1aBpjBebC/J9Im+Uo8Cvn7hdqDiwu8DrgwOLWzcivud9cwYmyYJOGr5ARw ++ZwCDUv5eg75e5sLkjQu4OM6Ji7Cl+omLObwIi5XCE13nLac+JRgVXMrb99LDY46DD1 0KzBMpJIHgBKJKw10kLuVTURzXZnBvbW1GjZI03NcfGmc4qB50wqhv1JKLORs4JWsZlV P2TA0WKhDDSpoJxPSHC+dsj4aHEb6wKGGN8n8rGcRjtIT7rrollMEzvwQ1jmTAxKNwJs jN5A== X-Gm-Message-State: AD7BkJIcPoAGd8sB64bHbb8J+ZIiv9whpfgbQ9UhwnxdWdvEB/UIEVpLDE1xqHh7C/2TTZ+Hf7jfHDaiVY7dlGBt MIME-Version: 1.0 X-Received: by 10.176.1.79 with SMTP id 73mr11812725uak.50.1460392468119; Mon, 11 Apr 2016 09:34:28 -0700 (PDT) Received: by 10.31.164.75 with HTTP; Mon, 11 Apr 2016 09:34:27 -0700 (PDT) Date: Mon, 11 Apr 2016 22:04:27 +0530 Message-ID: Subject: PATCH: graphical explain From: Sanket Mehta To: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1141482c4d37e60530381eb6 X-Pg-Spam-Score: -1.2 (-) 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 --001a1141482c4d37e60530381eb6 Content-Type: multipart/alternative; boundary=001a1141482c4d37e10530381eb4 --001a1141482c4d37e10530381eb4 Content-Type: text/plain; charset=UTF-8 Hi, PFA the patch for graphical explain feature. It consists of explain.js, __init__.py and demo_explain.html, snap_svg.js and snap_svg-min.js file. Currently I have placed hard coded JSON data in demo_explain.html file to display graphical output; which will be replace by actual output user get from server in JSON format. Use below URL to access graphical output: *http://localhost:5050/misc/explain where 5050 is the port your web server is running on* To test the patch, user can replace plan data (stored in 'data' variable) in demo_explain.html with other valid plan data in JSON format and run the above URL. Please review the patch and provide comments for the same. TODO: Integration of graphical explain into sql editor Regards, Sanket Mehta Sr Software engineer Enterprisedb --001a1141482c4d37e10530381eb4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

PFA the patch for graphical explain= feature.

It consists of explain.js, __init__.py a= nd demo_explain.html, snap_svg.js and snap_svg-min.js file.

<= /div>
Currently I have placed hard coded JSON data in demo_explain.html= file to display graphical output; which will be replace by actual output u= ser get from server in JSON format.

Use below URL = to access graphical output:

http://localhost:5050/misc/explain where 50= 50 is the port your web server is running on

<= /div>
To test the patch, user can replace plan data (stored in 'dat= a' variable) in demo_explain.html with other valid plan data in JSON fo= rmat and run the above URL.

Please review the patc= h and provide comments for the same.

TODO: Integra= tion of graphical explain into sql editor


Regards,Sanket Mehta
Sr Software engineer
Enterprisedb
--001a1141482c4d37e10530381eb4-- --001a1141482c4d37e60530381eb6 Content-Type: text/x-patch; charset=UTF-8; name="graphics_explainv1.patch" Content-Disposition: attachment; filename="graphics_explainv1.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imw7urvu0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2MvX19pbml0X18ucHkgYi93 ZWIvcGdhZG1pbi9taXNjL19faW5pdF9fLnB5CmluZGV4IGY0NjFjYmUuLmQ3 MTVkMGMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL21pc2MvX19pbml0X18u cHkKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9fX2luaXRfXy5weQpAQCAtOSwy NSArOSw0OSBAQAogCiAiIiJBIGJsdWVwcmludCBtb2R1bGUgcHJvdmlkaW5n IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgYXBwbGljYXRpb24uIiIiCiAK LWltcG9ydCBkYXRldGltZQotZnJvbSBmbGFzayBpbXBvcnQgc2Vzc2lvbiwg Y3VycmVudF9hcHAKK2Zyb20gZmxhc2sgaW1wb3J0IHVybF9mb3IsIHJlbmRl cl90ZW1wbGF0ZQogZnJvbSBwZ2FkbWluLnV0aWxzIGltcG9ydCBQZ0FkbWlu TW9kdWxlCiBpbXBvcnQgcGdhZG1pbi51dGlscy5kcml2ZXIgYXMgZHJpdmVy CitpbXBvcnQgY29uZmlnCiAKIE1PRFVMRV9OQU1FID0gJ21pc2MnCiAKK2Ns YXNzIE1pc2NNb2R1bGUoUGdBZG1pbk1vZHVsZSk6CisKKyAgICBkZWYgZ2V0 X293bl9qYXZhc2NyaXB0cyhzZWxmKToKKyAgICAgICAgc2NyaXB0cyA9IFt7 CisgICAgICAgICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5taXNjLmV4cGxh aW4nLAorICAgICAgICAgICAgICAgICdwYXRoJzogdXJsX2ZvcignbWlzYy5z dGF0aWMnLCBmaWxlbmFtZT0nZXhwbGFpbi9qcy9leHBsYWluJyksCisgICAg ICAgICAgICAgICAgJ3ByZWxvYWRlZCc6IEZhbHNlCisgICAgICAgICAgICAg ICAgfSx7CisgICAgICAgICAgICAgICAgJ25hbWUnOiAnc25hcC5zdmcnLAor ICAgICAgICAgICAgICAgICdwYXRoJzogdXJsX2ZvcigKKyAgICAgICAgICAg ICAgICAgICAgJ21pc2Muc3RhdGljJywgZmlsZW5hbWU9J2V4cGxhaW4vanMv JyArICgKKyAgICAgICAgICAgICAgICAgICAgICAgICdzbmFwLnN2ZycgaWYg IGNvbmZpZy5ERUJVRyBlbHNlICdzbmFwLnN2Zy1taW4nCisgICAgICAgICAg ICAgICAgICAgICAgICApKSwKKyAgICAgICAgICAgICAgICAncHJlbG9hZGVk JzogRmFsc2UKKyAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgcmV0dXJu IHNjcmlwdHMKKwogIyBJbml0aWFsaXNlIHRoZSBtb2R1bGUKLWJsdWVwcmlu dCA9IFBnQWRtaW5Nb2R1bGUoTU9EVUxFX05BTUUsIF9fbmFtZV9fLAotICAg ICAgICAgICAgICAgICAgICAgICAgICB1cmxfcHJlZml4PScnKQorYmx1ZXBy aW50ID0gTWlzY01vZHVsZShNT0RVTEVfTkFNRSwgX19uYW1lX18sIHN0YXRp Y191cmxfcGF0aD0iL3N0YXRpYyIpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCiAjIEEgc3BlY2lhbCBVUkwgdXNlZCB0byAicGluZyIgdGhl IHNlcnZlcgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotCiBA Ymx1ZXByaW50LnJvdXRlKCIvcGluZyIsIG1ldGhvZHM9KCdnZXQnLCAncG9z dCcpKQogZGVmIHBpbmcoKToKICAgICAiIiJHZW5lcmF0ZSBhICJQSU5HIiBy ZXNwb25zZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzZXJ2ZXIgaXMgYWxpdmUu IiIiCiAgICAgZHJpdmVyLnBpbmcoKQogCiAgICAgcmV0dXJuICJQSU5HIgor CisjIFRPRE86OiBUaGlzIGlzIGEgZGVtbyB1cmwsIHJlbW92ZSBpdCBsYXRl ci4KK0BibHVlcHJpbnQucm91dGUoIi9leHBsYWluIikKK2RlZiBkZW1vKCk6 CisgICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgnZGVtb19leHBsYWluLmh0 bWwnKQorCitAYmx1ZXByaW50LnJvdXRlKCIvc2FtcGxlIikKK2RlZiBzYW1w bGUoKToKKyAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCdzYW1wbGUuaHRt bCcpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9hZ2dyZWdhdGUucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfYWdncmVnYXRlLnBuZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi42YmZlNzVkOTA5ZjUwOTJjNGQzYmE4OTc4Yzc1ZmJj NTdkN2Y2MDZkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA1NzQKemNtVi1F MD5TLT5QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcxXkBzNjl6VGUm MDAwMDRiMyNjfTJuWXhXCnpkPGJOUzAwMDA5YTdiQm0wMDBmdzAwMGZ3MFlX STdjbU16WjhGV1FoYlc/OTtiYSFFTFdkTF9+Y1A/cGVZamF+Xgp6YUFodVVh JVk/RkpRQEgxMGxQXj1LfiFqZz9VX3cjISFRcz1wTnJSNzZuY2BKQWlFeWZ5 UFV1JEY/NWxnITlgdEUKenJWZG9yakk2TyMqQj1OMVE0fkdUazd1T0RJbVok N1FoRWNxYmJ7MlQhK15Bc05sbnZxen0wdiFPWkNwVmNnK3UpCnpTbDAzb0gt eWxjR3khKUZqMDl1PVVOPiRtTUlYKyZIfGI8YWpQIWd6cHtmPE4ydDM4ZTEo fU9ZeihYKV5aOVNEbQp6YUwkUGImO2NYeDg1dHdjM0QrOX1ZWXdXdFgobjYx dGdMQVpWaEEmQTBaRG94YG19Zl9vJjtMcD0zXnxUWkFtND8KekI4RC11dzJI ayY3N3hMfkdEK0g4WWh7TCstRH5vblJVNjROJG1De3o5WmBaPDQkJXV5RG4o dFV1QkJxaVRFPkAqCnpuZTY+WURWVklUXnxZfHUmMiUrWUt4UTRIIVpLTjgr VWswa3dKS1BqVyY8KD5AJFBqQWU0UkNPblNuJU5yMCg9UAp6WWl8ZkowNFZf aG5MJGNIMEszJiU7c3pfVj1CZ1FEKWNtJCkydnZoczZAKl9pc2RyQmZjOGtE e3lnPTdna3RJVEYKeitQR0Z1MiEwT2VMV2d1PjVMRnAzRDl4b3VyTCFiUXUl YT93ZHtyUnFGSXZpKyt7PVEhJj5hYVYlS1Rhe2RTOzJjCnokNW8zSWhFT1R5 VDM3eDYxcEszMC1KWDRLYkFTN1BrPDU7Ul9TUnVzPmpiR3lDckVBajAhI1g/ UFd1ck95OHIrSApNMDcqcW9NNk48JGY+VlUtJF5aWlcKCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2FwcGVuZC5wbmcgYi93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9hcHBlbmQucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjAxN2EyMDY4YjczNWYxM2NiODlhM2JjYjI4MzJl NTg4MGQxN2RmNTYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExNjIKemNt Vjs1MWE8cH5QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNGlQKXQtczAwMDFXCnpycEdwaiFFZXAoTGNRcm56VWcoJj98SVBn UmxAMHApYk03PT59dHZFWl80WUkrM3xiTT9TaiRtcnJ6PzcpYjVoagp6QDJ9 elcxKmhSbiFSWl5XPDZGaCtWI24oXng4K2QyPVdFQzRhK2FhTmsyZHUxJG5m bTlAOU1TaD45cTNnI3FIJj4Kej9jfWlSPEZON1MhfD4/Qj4pKTtHLW1MMX50 TUJCJD4qaztEPiRkNk9uJnt0fD8maD1TK21gMG9sPGVXSTxJPDFmCnooMmVR WnNwe2pMPS1ycyope14xT2l8Tl4/PGtnWW4ofiNvTWpPZj48QDk0QWI7az9K SGJAMWxFPWhVUjspMSZPJgp6eCF9ciktbz1JOSEtVTx6ZzY3ZW8tXmhwTSYh T2hncVRJaUw8aiRZKD1EX0NDcXdDcVc8anRQciUlMD1ScDQre0QKeitQWnkp c2JvQCg4S3VpKXNMKkp1KW9pWlhha0FpY3dkSHp9bUM8SHYoYVgmN3l1UiRk endPUz5eM2w9cSFOVHN0CnojUDhHOF5WUVkjJGpJPT8kPz9qfEAhOHQtLXJv MXUqWSlBeV9xQElBcj5XK3NzXmBEST95YXhzdWQoVUgjcVk8Kwp6QDNwcTt4 NDclTHgkTS1gXnZCMldpSSg+ezAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJh e3ZHVU5Ce3I7TkJ+QzMKellkIXp+MHpwWWNLfnpZYD9VM3RKNT5YaCY/U3pH ZXFKJExMRD1mR08lU0IqZWsoKD5ZTylpMlczdk9rI0NTWWk0CnpuUmZTSVor OW1mdXlaSUpYWmxkamhqLT9rZDRLMFEmb2VVZVUjZX4oTVp9M2kmYHBoSV5j SzNVKW9SRGsqcXl0Jgp6YVdwPW0qSDVDIURUQ28yIVhnQEAoS3cyeE8oeFRR XnVUTzM+KEluUXR5WWh3V0BkQi1He3xOOCZzYHA9ZTxuXkcKejA8I3YyVyVn b1BEYXI7bWB5QjBuZDhkblUwfldEKEpSWFpXeStIWVYzeDJRJWY8WUZYcC1g OWBqNkA8PDhDaDdnCnoxMDlTO294cF57dkdeZHc4O0x8SEBHa31lR19jVmBr XnljaDdVU3tBan0jUU90ZlpqVDZwV24wOXEwS0o3SV9TYwp6aCFnTVBeOyYx YT1KKHFqOzl5emozYjs4Z29gT181b3lwPXFDYTNUJVUhK0pSTHZvNShFWFBB U3pnajViay1sUCsKek8wbkA9dTlTdyVZTjFkakEoeEJnT1FuMVUpKFZ3TTZf NDJiX0JwdkYqNkNXOFFeZUkyblQ7JUQlaGhWXys4VDR2CnpFSVNWPzQ4eXIw I3EoK1R7azNBYjJEUXopZk9pMnA4Y24kNTZpYUd+ZTB+RnBsfWUpdV49N2p2 OzFNPkZ4S3dQcAp6KHI5ZGdLdF9Ib3clVGFPI3stYWNoVTRVeF9fVUl1U1hO VGhsQHY4VzVVI0RVdDd9VyNCNW93Jk56WWFQTWtKbS0KemArMyNCNXYxSH5L TnFuWihNOC1BZHQ3PXF2UU9XdTtfcDF2cVpjQV5CWXRoemw4NGV1TmZCfTQ1 TllTdD9ydXdKCnpjbFAjUE9XcG0wSDsyKzt0S0J9NWo9SjZCdy1PZTRjWElP blJPKzBhZWZUSlNgdXllVmo/X0JzYmxURmxeWmtTNAp6emxqVz08cUQxY2xs bChSLXtiMmc7JCg2RjAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxNS0Yp fVNNRjtwQHoKekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249 SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoCmNJeHNkWEZmfT9iRnZe IXp0TjtLMjA3KnFvTTZOPCRnMSNBYlVqUDZBCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9ibXBfYW5kLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9hbmQucG5nCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLjY0ZDU4NjlkY2ZjZjlkOTRkMDMxZmEwNjhjZmY5M2Vh OTI5MTgwYjIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwMDYKemNtVjxL MH09ZCpQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3 MDAwNClQKXQtc21EMmtGCnowMDNyZChSNmZsYiMtLWljNk43bmNZMW55SGkq R3tkd1lDKmUxM2pAZlBqRjRmYFdzQ2dNQF5IaGxodVZoPV99ZQp6aTthenFq KmdDR21DJW9ta0MyZCVrJiUmJmo9eiRVbEVJSFFtNmVyYGxIR2Nxc2hPRlhv U2RBVm99UWJXI0dqdl4KenJseksrcj5EODZhO1RgTlBRSz41cyZsS1d0R2xk cHlSQ011dCp1KFk9ZFB9PHlzJnEjdWRsdGFkOEA0R3pPczZXCnp4IWJhYHZT aHtSeDN7O213Q1p1bz9BcDcyZGR9P0l5QH1rdWZWe296eXVJeishR2VSKT9a ZDt2LU5KKnchUzJTIQp6Iyo1Vk0tXlBhRCRjS3tFQDVhYVA7TDNeMCVGMn0z QFoteSM8SUpBcSY3UmBXanBXWHMlKzJ4NSZocThacTJ8JHwKeik2PihZLXR5 KHZsamhXPCl6I0pLKXVwWjleVkhQeT0rfnlgKlFlXih3Jn5pYT5Ec0I8K1M9 KmRzX05YVD4pV3s4CnorfXojVy1Sc2AwP0FeS0Utcm5yc3Q/Yn5nP2NjbEot dUNSYHVpQGUwP0JsVEY7Xk9iKnp2Ym9TQGFEa3E9ZlVVYQp6PWpyTGBAJDFD dT5ndz9EQGJVNVNeNzhXWV5ZaXVmXzRmQW1gMXR0d2BUNzAqe3J+Xn1DOSYl TjAwMDAxYlclPUoKejA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NG9F UUtBMHE7cGZLfnpZYD9VWSRsNkcwUyhiOH0tRGkza2NQCnorT28pXmgkNGJ3 bHRvcXZMP0REe01qZl9uQnFEfk8yP0F+eW1peER6byo5YSpHbX0pTUM/N1p2 e2NgSzhHdns+UQp6dkRxJGtvfm85KHM/UUYod0whTjRrKjUyR0pxd2F4QFdK RXRpVXV+UnJ9ZVNoRD8mVk9jYUsqcGohVnVnYj1zZyMKemZZeyVAZSlEZUtl cztpcXJxayZ5Q1BEX0Qhci1DXk5rNDxHV01SbHhfejBFPT1geFZERV9mbkZq PE9KQz5Qd3VKCnpRIyE9OWxGODRUQkJhKk5SalZPaTlMUDFJQV5uVzItQEBm S3cqMUw8OzhvcGFHYWlwYGhfbD4rTWxCMUc2U0c5Uwp6PSt1JDtCWH00VUJr JlJvPE89PkVgaCsoTzFaRSo+PDxmQER2e0hzRUk8b3UjP25TSGBgfFpOKFNV UlYtJXI+SHQKek5Yb28xcVArJmhZZGdsPjxrSntzdE1IQmtyem9veUtzSl5O Z19jcWxTPSNZQWpwM3pPM0BiUGludUgwKHZAeFBHCnotdGh+KFQhbjJNUyg8 PXgjbmdwZyVQJSM+ZWY5cG90NkE5bWNyTjVIMygteGkkP1J7cEFlUWZRQiY4 X0lzJWN8SAp6RzV2e1FEYyhKeHsySFRnTylpSjQ7ci10Vj57UFI/JUNlbFcq Y1VuYF5+MjsqN3okYyRyTGtieiFRPiUkNiliRiMKemdETWhXMV5yPFghOVhC a3Y2VXk0KkgpZigzSGJlQ15FWS1IQCVLWFNqUUxpSTVNTjt+R2RZbypTOzlW X0ZJPVI/CmNGN3pNaUEwP0BxSWp1PjlXJmkqSDA3KnFvTTZOPCRmPHFmTE84 QGA+CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9ibXBfaGVhcC5w bmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9i bXBfaGVhcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY1N2Q4YzM5 MzI4YmZjODA3NTFjNjBkYjlkM2FiNDM0MWMwZGUzNQpHSVQgYmluYXJ5IHBh dGNoCmxpdGVyYWwgMTEwNgp6Y21WLVkxZy1tdFApPGg7M0t8TGswMDBlMU5K TFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMDAKejAwM3Jk KE5je1dIaSpHb2xfRllAV25gOCkzOH5AfHRLd3ZwJn5jKFVXfHE7N2o9I1o9 SGghVVNrQ05TYm9+YlJnCno8ZVF3dEk9SlBHdTVefk5IYlRBV041QVAjelVF ODY9fXk3dlRFWFg7eW0rZ3U9dn5DPmlNaVdrI3BxKGo+WT5ENQp6WXNjdGwk bjJ1VlY2KEw5WnAtWCglanxFPj94eElUY0ZwWGkhUV5fKj9BeUpHeXVJdnUo ZUghTj9TIz9wemBeYz4Keik5fGQ7Wkh2X0lrPTU+ISkkZ3ZfYW1MNSpsLVRm PiszflhBY0NGVXclKzJ3ait3dGV4RTlseFAmQ2NAYitiWm5hCnpEKD40VkA3 eVohKyQhP2lEKWloY3ghZGZ3PVkwMHZEeWByMWBRMGh7LTZfPTZeUkQzWWBg IykxLVlOZHhEWmJ3QQp6eCRBJHgtfG9XVD96YEBTP2MtcVk8NnAoJEA5Xlli eXpxcWI8WGBqVFUmckl7JG04KHk8ek12V1UmYGF+XzJwbXAKejx6TSphVSg0 azItcm5+Mz0zbn5lVShNejZ7TmBXJj0zbWswXjMmK15eNkgxdz5HUmEtXnpg ZTgqNkg7Mj54Y08zCnpodTctJGBzfDFPPzF1akFoVC1xYG1FY1FRMDAwMDFi VyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NAp6b0VRS0EwJjdW YEt+ellgP1VkX04oP0FyKE5mUStAdUJac1VRUipBKDNrN151aUFfeGx3Yjc8 WFgkVDJXbDQ2encKejNaPG9tZjFUWmdnZH1ZO0dSYD1EO0MkSDM/Qj0mOyZi QGNHcntfZmZNMTIlaVUmc0MoWXV+cHpON1JSQnVPX316Cno5U0hTZz08NDtD KVNIcH1rM0xkZyN3STN6eThscCp1aWQ9K3doSj1VK2s1cn5IR0ZBYzszK2pX SmFUVzZgVXt0Xgp6RUVsYlAtfDhJMktFSG5kXj5eJigtdm11MyY8RTdZPCNH K3dMe1k0UngrRjw7OzM2OzE2UEpIQDVQRS1+I3o9VzsKemlZV3Q7Vk53IzFT ZUJKTjI9UzJjQS1sVWEhWjNebyM4aiNhNV9IK3dAZ1AhKVdpMkdfTDRzS3Yj RzlmbiVXfWctCnpgZVJ0OSR5KSpCSWwlSSpLOT8oR29PRkB4WlFJNFpVeV4w Q0RsMyh5QyhDVygwdlY1IWpfQSF6OGgtfX5tVCokNgp6YTIlKWw1SlhALTcj JHNkX2xlJXZwY2oheW1PI1BmYlVMa28zZGQjQzJwNURuRTsyXkdSZTtLNkc4 emNhZilKZD0KelBTSD4qQ2BENyV2fVR9VVhVS0NkdmNDUSY3NCFBUU1zUDJi MkQpRVdrJkM4UFRNXndxTTckfXFZJVpycSUtR3RSCnpnKHp1VVNUJSFAWUEl PDk1aVlCJTdHbjI4JjFBRHhwITw9SUVYJklsOyFWK2w1VmomX1ktI0QoR3Ek akI9ekBGRQp6KU9GbzxYQF8/STZoX0VeMV9fPXBMVDc5b0JRckM8PUkwbFdN RGokemg/dWNic2YkYSY+KFlAMEF5eVYkaGZhI04KelZIb1gqOEpuOXNfS2V3 eGIzY1J6Yn1gTXB1PG9PV1orYVIoZWdOazRjP2NrMUsqM0V4RDRKbjJNc0xq fmxlMWcyCnpoNDJzPDF3bFlhdkZKa3JFflI5JFdWYFVaMFNyTTklcGVsVGxF NT5EOSVXeU9KPTJAVHUyX0deR2FnWn42YTlaVwpZME16LXtCNiNgQ3J+bSl9 MDcqcW9NNk48JGYpe3tKR3luaHEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2JtcF9pbmRleC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9ibXBfaW5kZXgucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjIzYjk3MzNiNTY3OTI1MzNlNGRiMjVjYTk4OTBhMGEwMTQw YzZmZjkKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExNzIKemNtVjtGMVoo Pz1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAw NEBQKXQtczAwMHtSCnowMDNyZChOY3tXSGkqR29sX0ZZQFduYDgpNDV7TERs YV4kYSZ+YyhVV3xxOzdqPSNaPUhoIVVTa0NOU2JvfmJSZwp6PGVRd3RJPUpQ UHV7TW1aYmp6WXhMJWlyb3p2KWlDPTEjJXNURVhYO3ltK2d1PXZ+Qz5pTWlX ayNwcShqPlk+RDUKellzY3RsJG4ydVZWNihMOVpwLVgoJWp8RT4/eHhJVGNG cFhpIVF8ViNldE9SQStyNWR+ekpSPkY/MGVEZy1OQXhgCnooZH5yTT8lbChL emBeYz4pOXxkO1pRakwmaWA0R2wkQV4qQz8lPkZYbEdYMzcrSHVDbUA4SFVi bC1UZyQlIS0lVQp6QCM0O208SUpBMjtDOExuPkNEYVg8PDZrdihUP1paRTZ2 WEc9Rnk+fS1TWHRyaz49QiteNHUhdClURnVGPzY+RTkKenQ+NSQxKWJwPDNe WEEhPT0rfnpJLVlNeldyQHIzcHgkQSVEKz9ULUw/JjtkNyFyPD1jLWs5cyF4 OVolZz9jLXFZCno8NnAoJEA5TiNHeXpxcWM8WGBGR285eH1YJEsmd0c8TTdK a0BhKjhOJWpFSWktdUMoQ1UoTXo2P0JsVGk9M25tTwp6ejN0XygoZFk4Kz1D YWYxXlk3KXFeNkgxdz5HUmEtXncjUDBAYU10cj45cDdDXzNgUCR7X0tZRz9a KUJuX2c+TW8KemJwUVlXMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTNsamhV M2xqa1ZudyVIXzAwTjlqTF90KFkkTCpCc1F4WmBhCnpoaDI2bnZoQl52TzFv TG8tSm1GdjV8TjVYQkF8X25SeEI4RDdYY01SN0ZAdiMweyskUVZLMV9hP0Jx MWxedWhQVAp6Kl9wSFoleHw3XmV6T0F1Qy1ZQmNrVSVyb3Z3eD92RkkmWXwj RHswRXJvUnpBMj1RY09ibzM/aFg4aXU2a0hwdT4Kej42c3RXSF5rJVhIfUFl WjB2WFkyd0tzXmRPVCl1WWlPSTM/ZG8jcGVyMVd6Kyt1NyZXaX5LNlModExq WHs+dn1UCno7a1NCeylOPkUwcl88Pj12PlN+XjhgPjwod24wSyhvWDBNST8/ VDlmMH0+JT11aCpNfk1uMGMhMEdtaWV0NmQyOAp6NVIpUE1gd0R+d0hYNG5W UlpAMCRXa0AyeUxOeXUrYnM8VUA1Zk5ORTdSXz9HeWVBPDs4WkBXelRNRmJG cHlBaSYKenszPVZpaXRCSSorMVpoJFJJNSNCN0tfRWJFfD1UYjF6ZX1ZI1Va ITBOYzZtZGQ5ayEkUVN8d0lTc0I2K1hkWDtWCnpPdWhSPVpmPXN4K344aH0p MzFnP3EyZHZVSmNVRVZsbmomdyNOJGFwZS17cW5UezQtdlV7VEFhUVo+Ymlv eCNzWgp6JGl+Sz5vUzV1aGNtKFJYVCZAbSMjY1p8KXdOeHh0UU1yOHEkcHIj fG9MfmBpSTJeUH0kSlc7K3F5JCtIa0ojPEIKek8zSz1yZ2ZOaXUlK0FJalZ6 PTlaRGppIzA/STVqRXNubWo2M3xVbFlubDdreFktUSF4OWF+eHdRVyZOTWx9 TG9ICnpLcGAwUDd5OTEqRFRNSTFBSTJFWSFwMnp5RWZ6RD93X3tUWG5WPGk7 akVBdT4xR0xSJTRUOWZuUnZffEAjcDdLbQp6d0FFQHNoezs1JGJje25mRSh+ KHZFZWFHeEJ+PzFNeE9uVzJAcmFuPnI+RnVYLUVNY1gtfGNmaHpQVU57Xjgr UnYKej1KYV9CeDZ4cDVfVWpuQXoySV4hWT9DNUZuTUBgKHhEOWVka3JIPmc7 KWZ9ZSQhUDNCNmZTenlGfT51JVRPXiVNCm1yfUQmeGRWYj83Q3c0T2ItfjB3 Jmd5WCRDUntqP04wMDAwPE1OVU1uTFNUWWRlflZCNgoKbGl0ZXJhbCAwCkhj bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0 aWMvZXhwbGFpbi9pbWcvZXhfYm1wX29yLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9vci5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uYzIyZmMzMWVlZTMyZTUzYWJmNjM0Mjc4ZjlkNTc3 NTExODFmMTVjMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNjg1CnpjbVY7 ZTAjZn5uUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJq NzAwMDMwUCl0LXMwMDAwMAp6MDAzQjZTWX5Ve0hpKkd3bUMlaWp6cmx8LWtD TlNib35mRmVud3ktJnh1PGVZelVJNUNiR3hpYHlSQ0x3IVJOZk4KemNmR05C dEV9azB2VS1XUitob1ApdiRYMkV5MUhAOD9BcDcyZGR9P0l5QH1rdWZWe296 eXVJeishR2VSKT9jS3RJCnp6YF5jfCliOEtMaFRxN0NsR1gzViRNNHxFaUlt dno8SUE0byUlMEBVcDVvQXI8aiRZVyZHRjY3XjNsPUo8PE96Iwp6KFcwaV9e NXhjKD1HM0k7KXVwWjleVkhQeT0rfnlgKlFlXih3Jn5pYT5Ec0MzK15YdV9z X1dhaD4peCNGLU1RQEcKenQ/Yn5nP2NjbEotdUNSYHVrN1FuQDhyTWE8bUIr PyEwX2s2QCQxQ3c/Q2tJRkBBVU5hfE5zQXF4QUZHPzAwMDRXCnpRY2hDPEs8 M3pIMDAwMDlhN2JCbTAwMFhVMDAwWFUwUldudTd5dGtQTUBkOU1SN2w2fClO TjBLVT0jKm1qJG8rMAp6WEd2O1NSd3h3YDYlPl5TS0B4Pjh6NVZ+K2xDVzQw Xkk+JGhZPD0rbCNDQ1M9P0EhX3JHdFhacCZ4T2ZQND1UfjEKekxMdURnJlZo SyNRM2g5e0IrJio4UzZmfmVCcE1MfnAoYiZedm42QFUkMFQybSNiezhaNWNk NCZffk1FRTdPfi05CnpmKj1fNEdfdG58YCokJlVFMHU7WjNBVWlAV3Nfa3Bj TnZwc3hDU0o3RVctdyFCeUooZSp6K0RuRypWIzA2c0Fkbwp6NTdSKHg4OTl6 S3B4PzNwaV99fTNIQ1ZPajFoIz1yOzAkY3NtaXJaMHZUJShKWXxIWHotazVL aVRfMU9nYz4tKyUKeipJMmc9RWQjZ1pyajx0MFohcnZgS2w4QD14fnt2cF9l RFIxcmlMVTwqaExhO0xSNEkxdUJOSlBjNFAwPT5NTzE+CnpeMyV0PXMtcEJW ZkJuJEpQck9veGRNRVFnTWtYVGk1NEk0YmxTJmV8a2ZiTmVheGIkbkdVPClZ Xk47Y2dATzRxaQpURjg4dW8wMDAwME5rdlhYdTBtamZMYkd3WQoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYnJvYWRjYXN0X21vdGlvbi5wbmcg Yi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9icm9h ZGNhc3RfbW90aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOTlm NTc0Nzg4NDJmNjFjZjA1ODI0MzNiNjU5ZDM3ZjBjNTMyZDVjCkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAzMzQKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2 cF5NaipfQDM/ITJTNk9AMXlYTWooTEUwNntQWElIbiFlNjQkY0VYSS1gCnp6 aEROM1hFKU0tOUxAcmQkWUxQdjBtZzE4dithUDQ4YyFGOzVSTE8mQ3RDOXpQ fmRTK0phTW59Y0w1OFYmZXduSAp6blMjMW83bmlKPl4+KlRYKmBRemdNZEQ3 UE96UGFUbyt3PDl1d3BMTCkxRiVXIyFJcWRob01TeGh3cH4wQGNmMDIKemhr TWptUk9mWmNgRVopd2BTO3xpPCplQFFyOGdRXkA5UjExfDZSYzh8QVE5SVJM alNtVU9GZVd0TSklJVpvelBoCnpScGwkJiEqZz9oP29jZ3BqVk1WO0VKP0xX RT1tUGIzYFBjcTJEKmt1eCgwP0pNZ34/VSMjU2FLKzZKYXAxX2w7MApyUnBu NEw8bVJWanJkMntUNys4V2VmSyohPG1fYW4wbmpYM2FzRFopTCl6NCp9USRp Qn1ANDBCIQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfY3RlX3Nj YW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfY3RlX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMWQ3 NzkzNzJmN2ZkMjEyZDIwOTZlNzcwMWIwZjFhZjA1YTUyOTcKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDE5NTUKemNtVjtVMlZENHhQKTxoOzNLfExrMDAw ZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAwMDFxCnp4 IVgyfiFFZXAoTEF+aWt6VWcoJj98SVBnUU5ycH0hcz1KVT5Wd25waVBpOUMk bjB2Iz5+Nn5KbC1UaV4rVk9uTwp6P1NSbmpnVkY3ei1TTWQyQHtaSyprPTU+ Iyo2KiszXjh9fmkyJm0jbnp2KWZFPUArZno5azFoQyNwYDBuPm9jfEcKeklK ZjBKeGFEIW4/MEMtWFBgPjk/en5APVA9WjRZa1lzY3RzJG14flc/XnZwPHJO UUs4bWVEckJKPWdUZiVKOD96CnpAVjNiQnckJF47I196VnBAM3p3TyRrT3Ux IXRTLWY/elBiSSRJa0pgelU7S1U/NmtiPnYmYHx2O3FVamo+en1waQp6cDJ6 UkR2Z3dfJT43QiN4d1hOdSF0TEwxbT1iT0xudzVIfm9yUkpLWDwoaihldilB aE53Q2JMLT5ZY0NZb3YtTWUKenNwcCVjPChpYDluWXJ3PCo2SC1iQDN5WSFv VCVvVHJ7PGZ4PzZhV2NuWVpoKyhlbFRAP1h9R0MjPigpO3hhK2dYCnpANVBE Umpud0olIXx0YGQ/WD1ERCRJMC07dyg3RkE+YXcpenZjPlBqKTlDWlZAM3lE cm53O2E5biZYKDY7K0x9Tgp6dkNgLUJwNSZPQzsrTDE9bSQyIXZ1aiFuUHNE KThvUEM3YXxSOTtkemF5dmFsSiNLPyt0bHo0WjtnK3hJdStabDYKemUwK1Ne KngzTDd8Q1d9UF43OFZkcW9hZUdnc3x6YiFSXkQmPUpHZHxKYTJEciVGND1O VlBSVClUc0ZFciZnSnJBCnpZaFpxdmQjbCFAZXZmLU5nRkxMdnNhOVRBSUMo cTY/IT5MPXUmbjU/ITBwNCM8PyheNmRZO0llUWU5RygjaDgpYwp6bTV8Pytr S2RLNT1kYTc7QHU9c1VVMT9mem0ySCZJamRoSzNveVZHdS07fUI1dWdjQF9r K0YtVS1sfms9bCNBWSEKenJ7PUg3PE03TXkjKSpsRTw+bHFQPzgzKzZASHRG NklhTkRxb05QRmFKYiVaNiNeVWRAPjlOR18jSUVTRHNeX3IxCno/OENoNSE9 fm8wclJKYHI9Qn5UISFvfWg1dkZXanI7RmdIcGxaTUBzaDFgOyg8Km1jdT91 cCkkaDFgPmIrPilaQAp6dC18MiV3KEdLIztnK1EzdCVCVD1xMiNUPztPPyZK dSk2RVF4YSt+ZC18bnBFdSZkez16VTslTj1CfVhSdClKd3IKencoN3lUK3c2 ZWJrJCYyZHA1dnw1PkdRdGM/WEF9N2pvKzF3LTt7bVlrO3Zvaz03QnlhMDAw MDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+TTI+PDV2dV4rWjAxMHFOUyN0bVkw N3c3OzA3dzh2JCFrNlUwMFlmUUxfdChZJEwtVy1SOHdhZAp6MlhNVTMrUGJV T3MmKCZ+MkxlUWNMWF5ZXjIxUVhJcTdXQm9zfCs+OXQ9RmhRTld8ZDRqVShX U0wwZDswaTMyd1UKeiVhRE1lcTU+KzQzX30hKXpWYChAJHZ4cU49WGlTaCFS TiE5RlpyRSt7P0MxTFpFVXtKZT85ZEdZVShfIzV1JCNCCnpoN0I3TGpocDw/ XmhlXlNYM2JsKUJ3RHBAXkspQ0dVSGV9O3s3UDZRNExXeDApUzM5TE9WX1U1 aTAoYWxfVWNYYQp6PkQjYVcwSFhjQ2ZyQURVLXphNFd7Pl5vczdUK0RwVTxe ZWNVfjZZKlhBOERXcm85Nj1JST52N1VedHVZR3krQ0MKenlLcUs8MSEwVUgm N2c+I3RFKCMkbXxRTkcyZHB1Q3sjYW5VeHNNWm9pXnVwMG8te0lYcThZTDBQ ViNhRDdKdT4tCnpIYU5NRF5MN1QjMVJxfV5qWkI/ZE9TdHlIbzgmY3kxJTZZ ZXhqQktyZCU4YWQwKF5XJEdwckxecnV+LXxHdWNrRgp6UHp4NmhYRXd8VTQ0 ZV5VbUNPWmQ+TzN2VXltPmdxZnlaLTFEU3A0UlhUa2A5O0UodypEIUB9WDJO bmN9Z29lPmwKejdCMGt1PVM4KHhHXzl0XlZoKHV2aWNwSlNAZTt7VzhkPGdz Nkd5YUlLZVNqa2NMNnkyZHlFZU5wLThrbTcoIVBfCnpSPDUjNlNiWTkhSG1x NG9sSXhALUhTMEd9cip4eDRDSlUjTE9gOStvTXp4U2VNOVNybjNPT35LcW9g QXtXdEIySwp6bm50IzZ7aiN4Yit2UGgqR0Q8PGwkUm8tMVFFfi1JPyVaVyVX NG18YjZ6VzsqKiYkYyMtTTJzWDAzcnR1VkluPU8KelFwTHM3UWpRJEtndHtL PEJJT1pCZVN+bGZrPmlLKDR+c2RXS0ItQmRreUVFSTVxT3tXe31aTUJiPj9q QnhmKCpICnojQSE2PXdLUV8hTE4lR2IqeUNiRWIoZyhuPGtJPWVJejVlQ3hx YGBqNGt6SE1eeEFjX3Y2JEt9Y3c8X3ZLOU5SbAp6KyVVVWl1e1ROYilAX2lJ eDk7NDxrSF9sOT8lbCZGdnB0MUAzbV87WUckez1KUikhfT5Md3JodF9DRVpS bndGa0gKek9MXzFCNkxkWDlfPEJlKEE+M2U0JDNZNWlrKCFuTEZvI0JSYjE/ fU5FZjxHQ2w0UFkhM0NVYDtDSXolUS1KP2BVCnpmQmYpQzkqc1BHaXBldnZT ZXlpekdUSE5GUEBVQUVYUTYrVG02Wm5oUFlNYk9ZMj9LVk9vQnBfYUVxNiEr N15rWgp6I1ZhVnZEPWFMY2s9TClrYGQ/WDFBWiUlLUAtUmZKLVcxMmZUZGxx JTVpO15+QGB8OVN3NnZfO0pPI2JALW8ydzwKemV6PTdTczs+dnRBe315WWkm Q1NwIWVtWXU/PnwmbGV0NkhZMHApWHBLP1RKaHxIWF5WJUZjKHBmJnliSGx2 UHd6CnpuSmlPc0Q9VHhVbHdeWmlUP2A0QWItRUhyJVlLWCZUV0I7SSVmTTdz V2w1MHZeb2U+WUx2Jm5tTjw3QHhtIXhMRQp6dEN8Kk5zNzFOU1dHYzdaU2p9 dHZZY30/TXskS01NQEowN0g4bG57NTAwMDBiYlZYUW5XTU9uPUklOUhXVlJV NXgKekdCN2JQRWlwMUpGZm1qekZnaTNkSXk1dlpGZn0/YkZnVGVkOXNtRlVD M0hudGJZeCs0V2pid2RXTkJ1MzA1VUshCnBGZkF9U0VpZkB1R0JZfGZHJihS Z0Q9Oy1XRmZodU9SamRGMjAwMm92UERITGtWMWliP0M1WnE0CgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9kZWxldGUucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfZGVsZXRlLnBuZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5jYTA1MWNkNWQwMWVlMmYzYWMxNzc3OWIz NjI5OTlkODJhOTI4NWI1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTI5 CnpjbVYtdjFlV2BXUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7 UjNEZEJqNzAwMDNeUCl0LXNLTERePgp6VFUrUXMybGg9OEhpKkk1YjBeTXlF RDVSTigxOTs8bVo2ZjhsRUlIUSpOO2d1d2RIbEQkTGYkLUxBPmI4cUZDYWUK elgtZEg5JEV0UFhxaSRXcT5TTTwwWXNjdGwkbjAqKj5+K29UK1BpKyt5P0Ap aWlRSytgK2BvVygoZUs+QmZgcmxUCnotTlM9fik5fktKZ3g8eDQtb31RRSli OEtNaHVfR0VrPTU/dCQlKjAyaWtJMig8SUE0biZXeipDcDUpRCo7P1J4Ywp6 Jll6JiRAI0U1dTw8T3p6KH4jIVRxMnwkfDxrWFNvKHhUK21sSUdLKzw8XnR0 KVRIT3RyTE4lZj1HbTAhKlFWJiMKenJ7PnowPkRaXn4qe0o4LW0rOUs2PmU7 c0crcDZvQHg5SHhQPmZOZ0IrXz5yQm4oTi1JP0FeTlMtPnZONHk2b1ZzCno+ ZkBhNC1ARU1MdUk9RXY+ZzFqNTs7LSVEeXpKdyE/ZDdyVzxpNzNadmhMPXlA OCFWbz1EX2Rodit3RChAYVYkdQp6PkI4e3J3KDt4NF42a2EqP1opJSkkWXko Yy1+YSNzMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTNsamhVM2xqa1YKem53 JUhfMDBPbTFMX3QoWSRMKjhiZGxedl8jZjhiRy1QTEwlbmhNY35xI2BtUTJx QkQ3KUZvbVBnYzYyTVFNZGc2CnprM0RuRkZlWE50aGtqckNrb35acHtPMFZu X00qfGUlcy1nN2xzSFJPNFdZfmlnSkZsLStjY1JEc0RuPnReQ0ArQAp6eDQo WipvZ2NaflVueTBAdSllLS1wZi1gM3NFPk5SLWMwUXZlNGplbi1aczBiengy djB5el4zM0wqUVhKOTZuNjcKei18dnJNRUN8OH5NbSowQ2ZjeXIpSUZBaFA/ YHdUWWA/dDVaSnJJaHlUcFJkZ0dGfUJqT253PVMzWiNhUzhiT0t6CnoyKVNJ Mmhoe1E5TVpRbGEtMy1WYHpsTUt8d08xQDZxQERZZzxlP3NxI1ZRaCMkciE1 PmtpRnBqWEQpdFY3dEh8LQp6cytDZSNAP3RmOXBAJWMoSiYzYn5iJDN5dj9e PGkwV2Q/Tk9ZPmF6P0Zvc2RQJjV2TUV1VTVPejx2Nlowe2poPW8Kem9tUSpX Wk9BVH5xS25IQ2E2IUw2RllpQ2NOUWg3QGwzPGZ7c0t6Y1lJTjx6I1orPFEm JXdUZzwxUDlDR1VASTVGCnpBT3s3bm0oR0dsJHJ4RmZkMEJNUCQhRGBJbV9J c0wjaU40ZSY0eElDTk5tYT0zZlZ6ZFh4MGFrYn1KPXhpJXViKgp6Pz81WV5Q QmxRO01AVk8wdVZ8JEdsYGQlSEI3Smh+ViZQR1QwYWclRmtIPTlsaDtxVDh6 V3tsZnJxaHIqYn56cy0KejUtM0ptbDlVOVNyQjY7JGtaP01rajU+biQ9WUMy bXhAYUw2c1lDLUJFVz95bDV6P15fYjR9WT9tWURucyN9enRqCnpfJlRmUE12 VmxeLWEkRFUzRSF3TWhXQjU/OWF0cXpLclJqJGgmYiVfa1VEfmtwK0gjWXAo NkBteVdPP34hSTNIdQp6PUZzNT9MJiRFazE9TnZGSGspb0t5cCR1NkBISmVB MClndSU2NUdOfWQkLXMoKW1LYG4xaUF2ekpCRXB0O1UqTGMKenA7clB2LTxB NGVxIT5nUTJYPGktVUhCeyglYjdab2FFWmtyOHBYbE5oKHtlXihHe1lTTShp Ukl1LVBtPUk5cmF+CnZGO1RRWChSbWtGOSpeaGhpTnRvRl5SSWxGfDdtXiRI MCNGdXM/a0ZVMDAwMDBOa3ZYWHUwbWpmaHdXNjMKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X2ZvcmVpZ25fc2Nhbi5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9mb3JlaWduX3NjYW4ucG5n Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYmE0OWM0ZmJmZDliODcxNDQ0 YzllOGQ1MjhkZWRhM2EzN2RkYTQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs IDE2MDcKemNtVi1OMkR0ZiZQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAx JXcwe3tSM0RkQmo3MDAwOG5QKXQtc0cqTUo5CnpHY19fakp1NSYmRyhKQnlL Ul8tK00/WFZGSXo+ZjBNbipxTU9FRkdTR0VoPU5PLUBLbVBCbF9oTmxpfmdQ ZnRacQp6UClrb3lNcDA1dFFkQiF3VFQ1MH5QRlkkfFRVJFkyVk5oSUxMU1NO MVUwcWFRVWBKJFVSJCpkU1ZxO2lpV0p6YWcKelMhODhlV29CRHVYSXk3IVZy T1l5WD0rYnhhOT9VYE5ebyprWkU8RjZaRCh0NFZRcD94YWRjdkNaJSVZfVZ7 ZFJ8CnphQipkRWEkc3xFV14hfEZhZGNDOGR2MD1kWG1vWE5iOVFOVWIhJkhi YmE7RHJkM0pBbWRufH4tVjFJJmtkd3k3aAp6aWhYfjRiJUI5KmdNKGcqa2Em Y0lkV01GM2hsaE5LaDxKO05ldXwyT2lIcmNLPDlDamQwSUI3R2pFI2Joa0JF KHMKejBJdVZTaioqMHJrcFFzZWdeYGtkbCRlSztseD4jSmtDVD4obTZuUUBt eDdze2dQTlhmcHs5aEpwTkVeOGorJmNTCnpzO2lRb3BOeWNORn0zQktvfH14 THM1SDBkamlqa0l4YXBScnRlS3shcHJ4cHFyPjlFMT1TO29tb354YCl6VWlv ewp6ciRFQiZURU9OfSF0SH4meTw1VE90KkArSCFzeEVCdCsyQUxwU0hWO3gh R1VFPmFueDBWYU0hWiRuSXB4QDNwdEkKellzbHpxJD8ydU4hRU1Vd1pwLVZj enJMdXojYzw4LXFyPTg+JmhEa2I9NSl+VWVhYFRPKENvcCh6bFBFNiFvPE9j CnooKGJeOyRnSXJJaXEhRE0kSGFAKEB5NXUta2sjejImKGc9cSMqeDxUI21k YysqWTI+PClSZnJvdih3Zz0rVlFtMQp6KlJ8RXlzQExueig5RXtoKzBXNj14 N1hVeCgkQmNxK3JybkByYF88PClYfUtrQHcoZ0kpNzg/dCt2fmdCLUBNKTYK enRLc3kkLXI+YUQ7bDx0SnpUV1FHK1NiM3tANWJOYnp+SiU2O04tI0teMnAp bCNeVVlDO14pV1g/I2tvbiRtSCtPCno8bTFXWkBYaDd3LXtJY1M8PmItazw8 YUh3KCZ5JlY9Sk1nPjtNM15tKTkzV3M9allWdV8xb3lfPG1UaG0+R3NefAp6 PmdESTstUmtTcz4tWE80P0JERnw7Typ8PT8oZ2RDPkVIMTdAQTI7T15ZSFpk Xll7N29gdXpGKXxOSCpgYH5xaEgKelBYR1ZfMGQhSk1Rdmc4YiprJTkjMDEw cU5TI3RtWTNsamhVM2xqa1ZudyVIXzAwUmR9TF90KFkkTCpCYVBaTG9UCnoj Jk8/SjZyJHA7RERIfjhxRVhabDY8NUgtNFlsSUZpeU1mX2J5cEhgbSU1O1dP SSZLRGcpfikrR2A1M0doWSpIUgp6WElPYFhTU1d9bkllJnEoKVk9KV4yTkdq Xjs1P2pweHhmM31ANjAqSiVjfnsrYnpIPndAUjsycCp6TVQzeE1ie1oKekxj LVpjKndlKHM+dTwyUF93Sns+JDNDUHpmQjZZPmleTjdvTSNmXyYqRzVITSFW Pm8jSmFodn5qejR1ZTF4cmd4Cnp5ODBVWE9EZW1DSCsjJkl2cjJfUiQkZH5B JWQmTXN1MF4lWlkpNXZobTlgQFpxTnVNfEBDYStNU1hqaThCPFkkTgp6V0Yt Z19Fa21sU0p0S3FfKEkhKDlxXmp5U0xQYDthQVA4RE9FYmJBUml4Uz1pUDFo aEJPPl5xKmthV2F7JDFGdUUKekQrUUhXN1pwM2hGcXtmYSg+NyRJQ2B6djRL LWdYM25eeUUrZTBYKHFjOzZ7Z0ZZRkIqZGg8WndxfnFJPD9Ua15BCnpHTmh0 SE0weGBrazMrY0JARmFCVTdDMTMmSUtZX0VtdGxPV0MhYHl8aEMlYTMwbjhv dTRBI3RPRURIJCppMEpqRAp6djh6Z3NsJE1IS2B+ZGNoNEdSRFdVJF99USZ2 XndzJm99JXkqQktyVGNfO1QkVHI1X3M0Z2F1PUUmd3l7T29YNF8Kej5tY35z bkplRkMhPWxNZURrZFU9TntJSkplfUUlUEF8UyZ6MnRHcGFKamVwU1RWJU9S cktte3MoZ1BxRyhFfGFOCnpGTChqN01zKWxOKDRqaigrNE5NTSspSDdoZkdg NjkpKzFWfCpuXjt6Rn1fRDMhQG99IT9CQXgtNWkrRXBLdCQlVwp6WTgheSk5 cW4zb1lDbUQpSFFoM3dldUtCSjhzLXowbndqWVZzcDA7JDEraVJxSFlZKmc0 QS0xRSFNSGA1KW5vYmoKelA4QXpzRGF6VVc8PW5pSzJxUGRAJDslVEVlbDkz UD5HZ1VOayRPRT5CfnIoYEFUKmtFVCF4czw0I2E0bl9gXkorCnooe1R1cURJ bj9UbylDK3tVPzYzUE1uZlJuR3MwNCZUTmhSdyRFYDlYSEBEZHA2QV9uMVFJ MU40YHgpVldQRFEjZAp6eFckKjklYFpPfTdsZ3pHdTIhcHpOSFdHYlQ1UyRE JTZ8fkN1b3wzNClIcEohUjhtQiNGbCk3RFFIOEcoREhjfWEKenhMPDhUTW1m U1VUKkR8R1VnUiRMckRyaTNqazQ5fVNtVnY5U1dFbjBAZTQ7aD1uSFZoVEFj c0AwMDJvdlBESExrCkZWMW0qKk9OUmdlCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9nYXRoZXJfbW90aW9uLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2dhdGhlcl9tb3Rpb24ucG5nCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2YjcyODI2ODYyMDk4OTY2NDEyYTll ZDkzMjBlZDQ1MTRmZTNlNWEKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDIx OAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXk1qKkB4QnBBJEd3I29vMHJq ajdQVTxRVj0kITlHPHlkLWFUN1k0Pz0KelVCWEwlSmtBMS0kWUxQdjBtZzE4 dithTmtLMkkwTjVRKXBsMkA8VCRvRDIrJTZCcm5lJmM1dmxsdTwybGpWTVY7 CnpFSj9MV0U9bVBiM2BQY3EyRCprdXgoMD9KTWd+P1UjI1NhSys2SmFwMV9s OzBScG40TDxtUlZqcmQye1Q3KzhXZQpiZksqITxtX2FuMG5qWDNhc0RaKUwp ejQqfVEkaUJ9YVY5Y0kKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X2dyb3VwLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2dyb3VwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDVk ZTMxYmMxMjlhOWFiY2Y0YTczZTE5YTQ4NzM5MTM5ZjY2MjcxCkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAxMjI4CnpjbVY7LTFUKmBJUCk8aDszS3xMazAw MGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxVwp6 cnBHcGohRVZhek03YDtEJmhDNTk/b1l0elJsQDBwKWJNNz0/M1VUX2czO30h LXR2eXI/dm1FO3VpXjZycntOb30Kejw2RmgrViNuKF54OC1aYz0oRUE1ZjJD VmVqVHdmaVdPQTBGZ3QxMVUjOXFPVkh1VWh3QGEodG0+OXo5aCNxSCY+Cno/ Y31pUjxGTjdTIXw+P0I/QksySS1tTDF+dE1CQiRiRUchdz1BWUB7biZ7cWA/ Jmg9UipfR3Rla21Bc2U+RHNDNAp6PERCSHhsSHRzWT5EaX5eJld6flNybFFB U0A5NEFiO2s+NUlXeWgqQEBhRGtoKVRITHFxd0wrZWNCd2ped1RJeCEKemlR ZEo5LW91MzUhR2grfHEySWBkPDxGcTMpQHxJcmZhSn1kaUBzM3I9RF9ST3d6 Y0paPElKQXAlYnZVTWdXOWAmCnpkJGRFOSVVcEchT2xPIWxqKWtqY1l0aFdq QHd+cTV6UTY2eSYrXmdIXjF7T0khXlE4QClicktWXnZLQlkkO3Q3YAp6JWtr T1RfMUBuMSpWcHlvO3JHMH4/NUM7YnNIKjNgendXQG8/eWF4c3VkKFVII3FZ PCtAM3BxO3g0NyVMeCRNaSMKekB5XmNqemBeZCspYnoqNEBSRjYkeUdMb1gw MDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6 fjApdDZKS356WWA/VVpSKCtDVVZCKCpkYE5RZlhhNl5+eiF9MU95XnNGXlYt dlE2UG5pQjZnV3B1fm48Swp6KjRsbWo+enhUcE5yWkZFPXtZXzk7QyM0ejtv OzhuPF8hI1VlZzVeaWYjflR2SjBad293T1ZebloobzFeMDI7VnkKenU/KFdZ VVlsKFE0R3I3dndAXnBLSXg7ZTFNU1R2MzwySmY4SXkhMVdKcHtMKjtqdUFg OXNUdXxAZD1pN0dJekIqCnpjYnhgZWElemZZVkF8eiFPKmcwOD9lPjdqSkh6 PjRtaUckKiY+QDVma31jcXhvMTFlcnJhS2YwTjVDdEpBYGt4Zwp6WGpJWjg+ e1FUNkszWWdEPHxhcnU+OytEWSROZUJncWx1JnVWVk8yME12K0szRU9ObGQ8 TVJTWTN5RmttS287dnIKeiVWTFJJYU1aI3Q1UXspa21Rd35+U3dycHRKelp4 ejtTNWVYbl9Kd3w7RTY9TUtKZjg4elhBYkNOflIjQ0RDdCR1Cno1ekNxVGIo ZEh5dl92ZEthZlZwVFE7UzMqRH0lRE9wMzgmb1N7WkUjTHhUPEpnSDJ8JDFx SVVVeHR5eG9sNmxiQgp6QCtWbG41dipKJnRmZThKJU4wdkhlUGB4ai1OaDV9 JmRfSmdgIXxTMVFuTkBDaSZhJUVsP3tuKW5vWD5VZlJFJCYKelN5Jk1TREY3 KjFSPjwkP15KKkUmckxCcl8lWFNeJTtgTXFnWGNsWGxNVWh4K1JqYnZDNSF1 bD8pfkg4WXV4aGJiCnpFa1dmbkdWeTQ4aGNAfGd1JSNtWGF0Q0NiRnl3QnFB eElLUU5tZXVxbTBFMDNpKmx1NmJReW9sdmd7TSlEVzwzRQp6R2B3UHElY1Bu Mys0SjRxSnpVJTBmQUpDQDkzSChvIz5hY0wrNmd7Nkk1PlRjNGRvQmdjT1Nu d0o5flNNLSg2aDEKenxBMFMhYHV5Yzl7JnhPLXpsTU1PSlVsdXpCM2ZmaUFr RmUkOWNoKlM+TXBKRnxJKDdfSXk7ciRMfUpiSW5AVmhSCnokN0VzQEc1Y0kt I2tTMm9lZnF+d3dwPX4yPitgPnotKHVlK0oybyQ7TEkzfiZDM0hudGJZeCs0 V2piU1dXbnB3Pgp6MDVVSyFGZkIxTUVpZkB1R0I3JGNHZGVVaEQ9Oy1XRmZj Zm9CXzAzKDAzfiFxU2FmN3piWShoaVopOW1eYz5wcG4KcUYpJUdLSVZ+X1RS NUNMPEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbkxTVFhAYEdvKWcK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2gucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaC5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYzNWM3NjUzOGMzYTQxOTIwYTdi OTNiOTRiZGY5NzQ0M2RmN2FhNwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTE2OQp6Y21WO0MxYUE5QFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEl dzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMW4KenNib0AoOEZpK3xIaSpIWSM5 blhCP29ZdyNWI2V4cyZoNGgmQDxGfW4zOH5eTnYqYnk8PTg0bnBZPXE1Yll0 aFdqCnpAeGEwRSM+ZWw/JmhwO2dfTV52UHl1SXpLdG13MH0+ZVNUcHJwI3FW enYrSV8/eTFwZmlgRFJ2KllJLTg/MG5BYwp6cHhnMHwpYjVrakAyfXdWT1RY IT8pQF4wVD5xRVFkUGA+QUUkTFgleGFndnFNYSthYTg7QzhgfUh1VWt5QGEo cz0KejxhelYlJE01S34/JmgtYj4le0VpdTxZVGs/QksyTj1mVWdkcDEwX0lA OURNWi1JKFJvbEh9OG4+Zk5sbT9TYmFuCnptRihpTDxJI0BrK15XM3JneVBT UT5Eczk0O0h+ZkYhMHpGX3BHI3peN1o9Qj5iJTJmfmIjXjRSUSRGS2tXOTM2 Ygp6LTliVVE+d3U0WklQY2BZPSt+I2ApfWAjO3lNfGpBKD5fMW8kY1cjQGhV VjB5dS0kWFg1RTBCZ0ptSmlXLW8lOUYKeih4U2MmNCNoaD07S18qSCEtVTx6 ZzY3ZW8ldzFqUil+NCo7eCNyUUw8PE96KStxZHhPIXNnU1k8aiRiIyp8eXVn CnpmNy1mejxJSkFpemslZTxwNXgxJi1pJEBLMDAwMDFiVyU9SjA2XnkwVyZp KkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wIVQ/akt+ellgP1VVPFU1 PHdXbkBwVjhFUXQ1XmpOO2ZTa1ohWl50eFplYT4jM2NpWE1HXnVlNWxiKmAK ekJMQkwoQm5DQE1fe2x6YUtGbCpTYH4wM1c9Z2gxfmJmPz9aNz5vJmk4ei1F YDJNRG4rTG5JVEUoa1VgUGg9bXk8CnpsaSE9MztVT0hzR0I8TiE0PF9nYHRL Yy10LXYmVnNrd3xnPiFOVyg3NiQ2Tkoycn5FTj5EO3F4PGY9ZGREaj9sQwp6 emZ2QVRCKG5LPURPbXRESlNRKCtOPypNdVE7VW1CWl4jZnRDWVFfS2tfcGhq SjBme017YjdPM09mRH1rXiYkT1AKelNRbEJ4V2t1TCF3YlImWWNlJk8lYDVK K0JBbC1ScTZtfihhUE4mbk43VzgwMSEtbW1sTFgtS1UjZnJqTlAtbkIqCnpi Zl5QNklNQz5IST9aVHl4IWooQUJNJEp3Mjg7TjduYG0qbntlZS1DRWlqX2w9 V3wpbTxNIyhDOUc9QyZyZUZ+Xgp6I2lrYD4jcTl0Xmc/b2A1biR1MnE4OX5I UHV1SFFEe1RWcSRldmRyfTlnVzVJcVYlPGshUXBeN2R8e0MmWlN7QnAKejJA RXEjYT0rSndqLWBPRnhFRlJJXl9CTWNnS1BAc0FmMytpQk9xMlBsYDU1NXQ8 a0p9VGk1SURfUEJRb3ZlX0lSCnoyPEd6KUNldyQ5Zys2NU91UCYrVl9hbUNo PVppX3E5M0djV2BqQldZY2w2Xj03TChiYFckQTImblYpUW0pQUM4Pgp6WT1w KSoye3AjUW10VTVVWEIhZ34jZXtKYFEhU2swUyo9Izk1NC0pNCtzezReRHFs UUVWKWVMR3MkaXxyWHIyIzQKenU4SiprI2c8RjBSdCt5MiYxUVFUKHB6ayQp b1JyNnl2YXYrU3JRYihyS2xGbG9mSD4hdGhkfGt6QVVgSUdTYmA5CnpYcE1+ YFVZN3B8eHBAe3xWfFRpQlQ+Pik0cHpjUWhCY31pVzAzfiFxU2FmN3piWSho WWElRXczV2RKZlRGKSVHTAp6R0ElR01SNUNDK0cmNEZoRyVHTVFJeHNMZW5J Iz9vMDAxUilNT2J1WFZSVTZXWkVzfDBXX2JXSUZmbE1LRmdZelMKakY7cEAk SXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZyKn45VwoKbGl0 ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9hbnRpX2pvaW4ucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFz aF9hbnRpX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyYTRl OTM2OWZhNzhjNmZhMTliZjVjNzgxNGY4YTU4NmFlZDU1NjUKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDE1NzEKemNtVis7MkhnM0hQKTxoOzNLfExrMDAw ZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOG5QKXQtczAwMDEpCnp5 bShUTDhIdV51SGkqSFkjOW5YQj9vR2h5VmFEcnImRnJTJEA8Nj1sNjA3MVl2 KmJ2Oz04NG5wYmNAd3lZdGhXagp6QHhhMEUjPmVsPyZocDtnX01edlB5dUl3 SnRtdzB9PmIkK30pWVM4KCVWYiFiJVJ7fkNONUFQeXp2Kzk/P31YRnYKenNM KkphKzN9IztAcktnd2pNVk9zKSRYcH5eOH1+aTM4fkBfc15VPD4+UmlSXnRK UTNFJkZxMkQ/T3d5Xld5Uj1nCnokTE4mU0AyPVckcktzZTNvfmczbmM0Q1U3 IUgraWRAeVlQKXhBZ0dIXllGO0U8JENrJiNgNWdOP2RHeFY8Z28xSAp6dTxg MXs+Kms7OTwofXtCdyhzZSt4YW9mRz1Da2VQdkZGO0I9R20zeipwJSR5dUpH KSg+ZzFqMzxES3Y3d2VSVikKenk2dTdHKk9UU2VsSSEyQz5mQGEwOysqZDF2 JUsoeDxrZ1luKH4jPWp0R3xYWnd9Z1BPVU91dSk2U1FHSiNFXnQ9CnpYMU1l MyRNNUt+XjZrYSg+QkkybiFScDxyPWdfSVFVPm5JejhyTS1HO1ohRz1SOHNa bTtpcHE8c1RVWDl5QGBPMQp6QzRZRDx5PDB9UVkkRD1SREY2VGUrTk8lYFdA aExfTUMzdzQtJDZwKlZxQDsrdmJwUGtsNl5WdjxpRnxMc19FTFAKej5EajJp WUJhLWVMKzMrOGkoRDlLY15RUlQ3U2xkSTttd1FUJVpsTDJpTCotKXZgaUc/ TFBEYShVIT0pbXJfRS1uCnooclReT1o/TjVTdipMS1I9WHxeR2dVJThYI31F K0FKVXI+eXJ7S3dtLV5obylYRHsxOEshalFyI1Nhal40aTNnVQp6Skx1UEAt XllnRCNmOG19VGlqdGAmcGtjTEpVcW9hSklxfk9AYVYkcTtIflQ2dCY0aiU/ Y2NsUilUSExxcX5fQTIKejw7dFZBazhxMXhhLW1OLXV0Klo4b1hQTyEhME96 cD8mSDRnO2tAVjhyUlVZOD9CMlRVLU1Rd2BxVUYoezw8RnQoCnorUEM3Kmpw RUxYO21uS2EqciheI3JyKmJoLW99UkIjRChWM3ExP2NNK2BvWF56SlRQO3BY YiExLW91MzUhaF90dAp6ZlpNJSkrcXsweyY3UzdkcXVzLVUtTkooMHo9R1Bs ZWRFaVg9aGRhPCg0cG5lcHpHUFQ8SUpBdyp0V0hxZXFiO3AKekl7Kkx4MGQh Sk1Rdmc4YiprJTkjMDBDbDRNP2AtfXpqNVVOMDAwU2FOTGgwTDAwMms7MDAy aztNIypiRjAwMDdYCnpOa2w8Wk5YS0pmN3pHMGc3P35KeCR9ekttMDVnVVRS QHsxNip3e0haeG1ZbEN1O1NMayFwKzBXJEIoODNxeXdtagp6RytUZlUhKWMz dkFQNU1jM3AzJWdnTW1SJU5MV052T2J8bmhJMzZ0JGwyWHojYTRwYVBXTVB0 SlZ1NyZiRm9HMEsKejNrI2RQZn0jP09HTHM2RUR2TyVCaE5jIyNYVkpCQVl3 UElodkZJfXlGZDRFSzhKbjF6VkZvRmhVKk5XdzxGPl5ECno5QVh3UXR8aSN6 bU1sekdPZV8kI0hBYXg0Kjx4ZEJYSj08YDxHfCN8PFllUlE7X0J2WmdBdEA/ ZXpDRmhAYnZWdQp6QG4tVTJeMG8ydjQrc3BoS347YzdPUiM1MVhxWmhuUXZ7 UXJqYXkpM1I1VzJOVUxpNUQ7V2x3aEBsMCt1S35We2IKek55I2F4WTNVaTZj PkkjKDlpRStJO3wkYzJZbSpuOWx3VkwtUjlzU0FSOWM0NlFlRlc5PHVHb2dq ZzN0ZVEqe01VCnpPR09Ra1pCdHVSUzY1JE9TSlomZVFxa0RkK3xwVkJ4NVgq MGpqNWZmMUV7NjdxTyteSnI/PEVjcV5HektObFg2KAp6Q1VucHEhOERPKygm VVFuRE8wQ1NGUjJJVkRWYyQhV2hOOHJFYi1hMGI1IU9VJXJsPkZ3WkwocVBr WTI3cm9+SF4KelJ4RiNnZTh0TSpkWE9GelRVTT5jWDNPZHxZdThuKlUkSjUx clhyQTZRMm54YiVocWslNXF7YVJhfklHcnlUTzhjCnpfVV93JWZhbmtkMGRS PWY5NldVUiRsKmdyQHg7cnFxfmwjRFkpLUJ9Yl40NlcqPm1TRlRxSzt2aiRn V2I8KkxvSwp6Pm87IWh4NEN1dSZmUjsyNkFVT3wqVzI5Ul9+Nzkhbit1Tn5L WTI9NjNuKmFrK2RPO3o7XmhVS2R5aypJZFd9VTMKem5xTip7ZCRTa2xpKDdC c1U5QEBzO2x0flhuMGBVYW02aE83TE1BXzxEcXo0X2peUDc+Nyl+ODVUMWZZ YzF4QTMzCnpmJm01cVAyJWdtRkluT0gwMDAwYmJWWFFuV01Pbj1JJTlIV1ZS VTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2Wgp6RmZ9P2JGZ1RlZDlzbUZV QzNIbnRiWXgrNFdqYndkV05CdTMwNVVLIUZmQX1TRWlmQHVHQll8ZkcmKFJn RD07LVcKVkZmaHVPUmpkRjIwMDJvdlBESExrVjFrZ3hRKHBpOAoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZW1pX2pvaW4ucG5nIGIv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9z ZW1pX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNTFmOTk2 NzgzODczYTRhMjdkYjRiOTcxMTM1ZTk1Y2FjOGQ3NDQKR0lUIGJpbmFyeSBw YXRjaApsaXRlcmFsIDE0NTIKemNtWStDU3h9UCk2b24mPGlsQzl3RFdZfWox RVc9PVZHJnNeTXlNYz5WRV9kSVdzZjIlT09RPlZQXjNhPiNlemJpCnpRJFdm cE4tO29XMl5iJj1rXmwqV0I/SmlCX3dgVHlLVlk/T3ZgP0ttPWJuM0s/KVBA ZWYmd3E+dmZPNzBnVFokQgp6YH1xVyQoKCQ3JCV1VnhhVVVvNElXPnlufjQp cnlpd1M/XjhwWkFzeHRoa2hwSnxrVUVuTzB2UyUzPipzJXhQc1MKejJrPDd5 WSYhV1RkVzMhaWFUIXljUU5EbWxvfUhUMzVsN1hPM0M7OGp6fk1sRE92RG1+ bTdPbzdKLXU/bXV4ZnJACnpwVzRaKzh8U3ZyNT1nNzYqSjd4aGFkVEt8OUYt Wm4xej9XPSNFVT9oYSlZa2c3P1ZPfDg4amg+N0IhbTxZbGhCKwp6K2loSUtP Rm1lPXRnQi1LXntjPzM3JGkhZEV9a0M4KllecVpsWDdEaEpGVFQlbXxOZUd7 PE5NdVFIU0daJk5CIV4Kejt2JWszSSFLbX1SPTV+K2xVbjhMJT8pOW5EMGtC KypufFd8e1c0P3t6fWYoTEJKc3ZMN3ZjK3lWKTJHcntaMWluCnpGb051VVMl Sn44dFhFSXopaWt8fDJJLWQ4SU4tdjlldEZyaiMoYHdBT3wyNGRHX1ZJJU1T MncjUCpPcWRsMHNCMwp6N3lobzFeJUFyWDBPY2cwbTteUDg4VTxiPkA2JCtv MDN+QDc7JV52dU1tQEpKPGFXb05KdUFheWdeJXA+R21uc3kKenVHMSpYYjQ7 QllnT1UzOTJ2TyhQJiFLcDZAcD1fU0V5ayZZLTI7bGslNnZDYXk8amomSEUt MGRPVjBiME43KklpCno+QEE2fld1RTs7QyM3ZzU2cz8kU1AlP1FhUjErbi1j YH5rVDh1TlZhKjJ8QG8/bG8pPUtOfk59OGAyY2Qqd3s+MQp6VFRnajxZREZa eWcxT0BEe1VFfVl5eFYjTjR5U2x7Nz9rcmA1bV9UNVhAdWk/YFBeITNFWnho Qz5naEBMQFIrKUcKek8oUGhRdmYzbnpFIz4jbUt3MXV7U3lPVGIjantOISN4 dm5lZ0pLeUVZMWJnbDhYJWhtcXpxOEt4O2okMExNVUpsCno8cUslXzhYLXZ8 NyszUX4pbSlRXmZQfSN3RHFzKWhZeHJaVGJzYHw5dDQjfiVqWlJGTHYrJHNM NFVvPSlzdWk3aAp6Iy1MO355SGl5aCgkVGw1UWQyZHpXQ1JDPnpgVnNRak9v fnM+VVJ9dU8yMUczYn41Pl9zbDtmMXBMM3lwNlkoKjIKelRnfFFQWVZGZGY0 bjJpMXJ5dC1+UiYmRXlFSH5HSWFBWmF8ZXtwPGxkWW0+PChZbSRTeSMxa2JX RmRTIXNsNCM4CnpnKy0mNDZSKT9wPXY8SXJ4S0FrQmBoMjxUTDQtfFpAU0l+ Ujt4WCpXKUEtNjhsXzhKS3c7VX50dzM8KTs1cSVMJgp6TytXVmhtVjk0JlQ/ RV5HRmc/NTErYnBRVXpoVG1RaFZobX4zWjBvKzloPFpDd1IjQFMjZko7PDxa YilvVCMjSnwKeil+UVNnNE0jKGRwdT0zQFBQM0UhY2hjQCp2JEM/VlU8e0F8 O0VhJEMpTXZwaGMzUSZJRDVeYlNNZ303JllZRXchCnorRz1yc3tjWEZ7UFF2 UW5jO0pKSXNFbiRyNGdOSnhgSnBMPElhZkFZYEFoQkFgTzBiR2pZQ3p7Umxo eS13SGt+RAp6dFNybDslOE1mMnN7LWNxeih0MS0hQl5tQmlPOVBwb3Q/P3tB KCEyUDAmLTVmbDVQPmR4PkRaVUxnKlRLX05ydDUKei0yaU9CQHNLWT1KYzBz M2EqezZHMnNfaD81UDEhd3JIelBeaio1PSZQJnBFa2VecHp8eU96OVRwRFVi b0dRakJ4CnpNbyExb3RCQDFleVY7UmMmKD0qVit2PT1LXkBOKWF3dXBmMHhT bThBUElSMGEpKWdefkxEKFZgaXolJUI5bFY8OQp6Tlc5cXgrXiFTLWA4c3g9 TT05TEZuKXBTV1JFTlZac2xEIUI4d3Z9Jk59dzB+USlJcTxfaCo2ZUwlUj5U PHhidEIKekhWS1hfdkpiaUQkUEloUGMzfGtzU2puUy1saD84UV9nbnJkWmFX cCM/LXgjY2cqfVcmcmJvTnlGI2V0QHExRjZwCno5VCo+MGFsaipVMGJ+fmB3 eF9WeGBfbn5ZMW99Oyo9d2VYbXojd1BhIS1XSFUpSzdNVzsra3tLQl5oclRP SVN6awp6UWVtKn03dXY/bCozRWdRZzR0KkloRyEoaVcrYn1EcnplXk09N0BB YUF7LW5NTlFZMklxYFJ8fHlSLTlnPFl7KiMKdCh6Vnc5O1F4Ui1ERzVvS29j e28lK2I3YFR3PiM0MUtZJl91YEdwQzlgVEdYP2JmSUZ0e30pRShMXiVLZQoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9leGNl cHQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfaGFzaF9zZXRvcF9leGNlcHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjc2YzU0NmE0ZGFkZDdmZGFlMzEwZGFmY2VjMmVjZGVmOTY0OWQ0YzUK R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzNzcKemNtVi1uMSlsbmVQKTxo OzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNj5QKXQt czAwMDFxCnp4IVgyfiFFZXAoT35DMTQjX00qPz81NXVHSyltU150S3V4UDxW ZHtjaVBQPzZtQyRCdShhZz45emBeZHUkTTRPfgp6XjR7THx5dUl3SnRtdzB9 PmIkK30pWVM4KHNOX1l5PX1mQHNRXk0rbiliTnpwQE9zWWRnVkY3YSliNmR7 Xk8/TU8KelFqSG1xd3J0cXQlTGwwOTVVYilFdUgjK0I+djdCTVBRSzxeIVJL VmY9I3RnJXB+UE48dXRqcENIRn08QFlMQk1ECnprMmR1MiQ/KXZBQGEocWw+ JGRhbiREK3F6PmcxajM8REJXPm4ocFNhcXs/SU8+YkJ8T285TiR9PWlRZz08 RktkQQp6WDdBezs9LSF5OyttYDBvbDxlVEdtJURYX3duPXVYSk1ydHA/Qks1 Si1tTEhCenEtKyp1Ryg+VXUwR3FuaU01JTIKendCdmQzPURfTFBzX0VMTz0r fiQxLUBBSVRMRndBNTtMRDJOJGNOcz1oMzMoc2psb21zKlFWZGJoVGctMy1O QXo4CnomIUQjRmVDRWBvLU5KKzF6PTdNbmY4QD1jeCRBJUgrcW1WPHB5U00q PmUjbHI/dCotQEwlaV5XbWRzdTI9QVl+Mwp6cDZ9X2peNjF2ISRDfVdxWHZM UkEkRiF4YXNubT4rKztNZih2YkVebztyOCQ5d2VzeDY9Rithd3RaSnlkRlBQ YVkKempxV0c2dkM0Jmt6bXx1aiFuTF5hXlpWNCpAfk4hbGoqO0VMIXxjK25Z P3tfOWkxc0ZXekg1KD8tTyRuVD9BKmNnCno/WilvcnZoQyFzP0JjS1I9ZlEj Nk4kdXNhPUdtM3kpfDJHWmttfXMzY2QmZml6PmUoVnVIQEJgPEk8MWYmVyEy VQp6cnxzWHk7P1J4WiY1UGo1aVJhYSZgdTZWYzxHJCRGcnt+dEM/QV5LUy1u IStgcTIkaD0+KUUjNHpKU31qZSVpWnoKejxJQTRmeU1FZmJlUVJLejl7Pk9W MGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VTAwS2Aq CnpMX3QoWSQ3NWgxOCEkM34wMyNfe24zITJ1KzFReSMoISM7WCNteiZTN1Nl NnUxXmIxVTZmSiFHMClqJXFkP2FaUgp6NWZ1fWM3PnJzLV9scVBTMnVLYjxo KFhnR3VHRUszM2xwPUh3MlVtMW9WPGRmNSkoY3gkfEA/Vlk3aXxQPktkOV8K ek94aWxTZGl2UDMhMlAwUFV8PE4qTCU8ZTloJCpXVzByaH55aktSSnohSWs9 dUxybUdvS218bWJud2VXelRBQVZzCnpPQkM7YFNWT2QhK3R9TEtvOG4zcnM5 R0UjU3skOTZVMGpMTztzKCo7PyYwYT5qYXYoe2krejBrbHRFaGpUPn1EeAp6 YVFYISRqUnBJS2dhWS0xblN3dyNhajghXkd5Pj19KTV4Z2ttez9QeVFlU1hy TD4kbC0pQSlxTXEtMzBhS31tYyoKekRSRSVHcV42fjNXYTg5PFFZZmlwS3wo QSRDcFJ4MnctKTUwUG8pNSZyTFpXIXhDRXpQUDtEcyVZYXRMfmtSKWdmCnoz OXF0cDYrJlVrMDhXREQ9NFBmSzRKdXtqNnteSCZGfFZ3d0cmY3BpM2FDU2tT Uz1QMVRVM2JCMG4kPXNRKkRZUQp6UWQzKTNVdGliSSp3b3pJKVk2TDhGUDNm WT9NUFpXST1pfWlkVjJmJUNycTM7WTRWaCptfDdxSzhpdnBAWlRnSEUKekdp SmAzSiFlYDZrVU0pOHJYSkl8Xlg0eUQyKUN1QzZRcEMmbC1VZG5iMkA4NGRa dTh3JjI7Z1NyT1RHWHdiWFYyCnpiPDl7WDhOXjskM25DfUNVfSN5amRkPUUo YTRtSitBVDNSa0s8eEUoQWFZVUBoTCpxJDgjaXIrWXBMJTZYPSREYQp6VnNF SmprclNJU3Z+MW5CSiRuYTlURl5wX0QyTUcjLW5EeFZZMk0kcGNpO1g0cXlf VHNnTkZfd3Y9OX1RMk0oY1YKekF0SiQ7bUstPjZwb0ZBa2lKciEmM2ptfn0t QFgwSTkodz0pMDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYpJUdMCnpHQSVH TVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJVNldaRXN8 MFdfYldJRmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1CRjAw MDAwTmt2WFh1MG1qZmgjQlhRCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9leGNlcHRf YWxsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTI0ZWQxNmFlYjBk OTNiZDEzMzkwMmIwYjIyMThlNjc0Zjg0NTI4CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxNDAyCnpjbVYtPTElPipGUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDZeUCl0LXMwMDAxcQp6eCFYMn4hRWVw KE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQUD82bUMkQnUoYWc+ OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9KVlTNjswMDU8XjxW QyplT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95Y1lSCnpuWT8mWGpUdy0o WX1uPD8yZExyQHRLdTUyPDZYdDthbSh5WnpVRXJOPVZabWBsR1gyXyM5b0Iz TVJLRHhkWS05agp6a0VYJG9IdVVreUBhKHRuPzYmWGd3KTV9RHFRX3dCPGVs b3tvYXh9Mj8maDxrJTQ2Xjl3Jn4lVT0tLSo9LUl3ZysKenUmMiN0QDk0QVct azlneG1nZC0kP0JLMUp5TEU9UE5wYDlgQCQxQ3c7SThaNXRuY0sleTN3UHEr SHJXVUtISSZDCnp3Vjhnajw5WURyITBGdG8+RHM5MSpRZjJAeUx6IWY+RHNC XyVabEh+aHUrMTc9RnleISFCZ25ocnIqWWYtb3UzNQp6IUdoKF9wdGszSD1H M0khIWhfdHZmIW49KjxqdFBCPndvTHB4YUgyRTxJSkF3KnRXWHZmXyRfP3l6 cXBVJXc2bHwKenBYPXFHQDlESmk9K0B4Sm4kVzlnI2d8MEt3NTY9NilRcGhh YWRwKFB3ZG1tQ19WNFBvXjZiVXQoeXIwMFlOKSZ+CnpuQXQwaD9rQmdnJTd1 WnltV1FPbXdZYyowYF8kRilzalRJV2s9Pzw9PzkjMWxuJHwwYl85bEExWW1i dU0oOSFZaQp6K2A7cWgjX3J+Xz9jfWlSOzstPU0hR1lSST9kN3JOKl9Hd2ls alBIbz5mRVkjdXpjTFdqX2wmRDxrZ1ltKHZSWksKempPb34/P2NjYFkoMmUy RWl7USRNPWhkYjlfVWBaRnpVYkplPWhtZ3stTVFARXk1LVFKPGokWSMqfHl4 aWZaTSEmCnorUGkoQCVid2MxZSVpV3lIa2N+bjAwMDAxYlclPUowNl55MFcm aSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzNZZCF6fgp6MCViYD1LfnpZYFZfK1p+ RmZ4R3ZCUG0qI218MGxhKnFLUHUhb2tWSyV8bl9OKHJ3YGRgLVBWakVxd2R9 ZjxuVDQKekJ4dzs1NiUmXmpqOU9yUmsoODhWa1lvVE1MT19aUzFmKVB9aVBi YGVFcFdlcFoyPT0jeTJGK0Z1ejg8fVN6MU9gCnpqITlsWVFBd0V6cEI1RVdS VylecDc3aChmRW9+K3BUfElwUlkrQiY0dVdEIyQxa3BwbDdJPXNPWjd+TXcw ZzBKXwp6ZVBOMCNeJnpKKjY9T3FINU4mMnxWUUZQO2hBWmA8Y3dmfjlxUSUx MiZmZFdjU0dxdmU7dDB7PTxtfT89TXgrKloKemghemh8RksteypUOTk0cj4q dWNtKGh9ZW43IS1gdEZOaEVXZilNfUVGcmMxckdaMlZDbWNiMkYhWGtsQUdt RENqCnppSCRRT0QhK3o9TWFCYmRGLXU1SE4+MEopN25IPjNuO0gtSE9JbXRI VylAQkBEMjAtMEhZQ0p5YWBXO0ZhQkQjPgp6YGN3LWNUOGZHYk49a0ExMT1X QF51b2VPIzIxJFlAa25rJDZQJGQrbTRCI1lhVlBTM3QoeDYmaVFLPzNaN0te SD8KekRobzVQdEFJTXhpUGQ1V3V8PF9BOVV2eyR3bCF1KkJESG4oNEdyfjtQ MGNNVyY4PS0le2JKU2IoU2Y5O3YjWXpPCnp4M3tsPCFvKjNGQ1FxMzw0TzBz d0sqSkZfcnE3cjtiTE9uc2JMTEwoMWFqeGgjPylnclp+bFVYaXtRNEBjN2Ij KAp6bztydHRWUXlDfk5ZN0xaeDB4K2p4QGBGaHhSJHpacHBLYTxyLTBiMj5P a2FfUnR6bngqUXtOKTk8SFVuMmMpSFcKekdLanNROXo7JVYjP1RWOWFudDU0 YTRpa0pBVDJHRUs8dXB6QWFZVSpoTCZ5SGNqVzlPTmVmenQ1I19MNURaQlVW CnpDQyZUMF93N0cka2hEUEZiTGpBNGdjaFFyXjU5XzxFa3E8M3Yoa2VINTA7 WFlFWVpeI2JwWmV0OHtAb30zMnIzLQp6MDAxUilNT2J1WFZSVTZXVnsmQy1i WSVjQ0ZmbE1LRil9U01GO3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGIK emJWWFFuV01Pbj1JJkUpY1g9WnI8R0I3YlBFaWdHUEZmbWp6R2RlVWhJeHNk WEZmfT9iRnZeIXp0TjtLMjA3KnFvCklNNk48JGY8RCpsV0I+cEYKCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfaW50ZXJzZWN0 LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X2hhc2hfc2V0b3BfaW50ZXJzZWN0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi5mYjUzNmIxMWI2OGZjYTZjMmZlZGExNGE4MDExMDAzNjc4MjA0ZDYy CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzg5CnpjbVYtejEoTiFTUCk8 aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDZ+UCl0 LXMwMDAxcQp6eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8 VmR7Y2lQUD82bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcw fT5iJCt9KVlTOChzTl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZGN2EpYjZk e15PP01PCnpRakhtcXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1QUUs8XiFS S1ZmPSN0ZyVwflBOPHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2QUBhKHFs PiRkYW4kRCtxej5nMWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4kfT1pUWc9 PEZLZEEKelg3QXs7PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpNcnRwP0JL NUotbUxIQnpxLSsqdUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQc19FTE89 K34kMS1AQUlUTEZ3QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRiaFRnLTMt TkF6OAp6JiFEI0ZlQ0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3FtVjxweVNN Kj5lI2xyP3QqLUBMJWleV21kc3UyPUFZfjMKenA2fV9qXjYxdiEkQ31XcVh2 TFJBJEYheGFzbm0+Kys7TWYodmJFXm87cjgkOXdlc3g2PUYrYXd0WkxsQWpf dSNaCnpgdTZVKHZDNE9Wci16NCYhbkxeYV5aVjQqQH5OIWxqKjtFTCF8Yytu WjB5e0BrQ05TZSVVaGIoRTZ+eUxeWDxtJgp6PUNiWU51PFlXbUBhTXNaXzlw Ryt2RjYjODw8XnRyKH4jPWlzJiVNX3NKdClpOzshVj9rPms+ajs/OWllKnIk SGEKelIrIWw8Oz9SeFomNVBqNWlSYWEmaDNobnA/a0RmI3pVYkplPWhtZ3st TVFARXk1LVFKPGokWSMqfHl4aWZaTSEmCnorUGkoQCVid2MxZSVpV3lnQE0x OGhvc1RxNGdMVEMwMERHVFBFIUN0PUdiTmMwMDBTYU5MaDBMMDAyazswMDJr Owp6TSMqYkYwMDA2fk5rbDxaTlhLSmZBUjkwO2ZkQ15aVDl9d3dTbFFUX05Z Y1c9JDtIaD5uaWtTKztSWEFKbWxRMzAKemB+cmVQIWg5clk1ZksjPW1sJXYl TmNXMio5fCVZZUshYCFwOWo/QGVPJCFzVmwoZFgybGJwUFFxN29CNkV5Xms/ CnpzJWo3fDlPQGRIVDE/dEh4X2JLOXc3fnRNVnFqbmgoTD14JU0ySVA/N3k8 UXcjRWlrZEZ1fDRqa1Y4el8kVXBAfAp6bzBeJGhTWCFDbDNRSDk0dDVgI3tu QV9PZSpfK31AN3BQaHNBWColcW9MeVhyKVp6eHc7X2woOzwmOWVsdld0Q3UK entnZ3BrezlPWUFnSyt1PEM1Ozk5Z0BnazJncWVhc0lCfV5ASVd6KzNHfUZr YT0kS2VqcUVjVVFYaGE7KTdTczVJCnojSDNgTGVuQ2xtSn1HZnZ6b2UkNlhK cTJrZj5KMXtXSTtrS0owfnxVQUdhM2RxRURwJnFOVDdYenFrYWFVcj1vKwp6 MSMyTT9WdnI8ZzM8PEJZYXVxXmgkXmNHKz1IX09tQVBwKkk8clMqTFhmZHk+ dFRaPFR5OSVnN2phViVmNUw7QTsKeihnRCZeV205ZDZCdk1tYlM2XlMoKEFk PTYrfDwmRilpMEs5PyhJbGdJeSQ/JGR3UDJOYFhAfUJJQkR7ZnNoQzxJCnow VUN6VEY+Tn1Lb0h9Rlh0WjV4VSNfU29HZFE5aWNvaX4zMCs/Slk3a2REP1ZH WiF3TCltYTE1R1g9d0tyaSZJWQp6Uy1LM2FyTTMlMXdrJSU9MVNASm0/OHor e1QyYClGeT1FPDNPSTxnSlkrNDc+dmMzKylwNDViKUMyKyZXT2BHOWIKej5V JShCXkE/Ym50QFItRyNBWGFGK3FVbj4tYnM9Y3Y9QWY4VllgeGRAN1lWNV9q bTh4ZjhaYyNmeFBGPztsbF9tCnpMYENKbiF6Znh7M0ZnUkFvQyhJWDxsdz1C Ql90KEZeZlgzWTAwN04qKztsZnFYKkI9PDAzfiFxU2FmN3piWShoWQp6YSVF dzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAx UilNT2J1WFZSVTZXWkVzfDAKdldfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9G ZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZ1STJKTgoKbGl0ZXJhbCAw CkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9pbnRlcnNlY3RfYWxs LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X2hhc2hfc2V0b3BfaW50ZXJzZWN0X2FsbC5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMDAxODE1N2Y2NGE1YWU2MDFhMmRiMDhmYjFlNGE1NTMzODVj MzNiOQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTQxNwp6Y21WOzQxJE8k MFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA3 MlApdC1zMDAwMXEKenghWDJ+IUVlcChPfkMxNCNfTSo/PzU1dUdLKW1TXnRL dXhQPFZke2NpUFA/Nm1DJEJ1KGFnPjl6YF5kdSRNNE9+CnpeNHtMfHl1SXdK dG13MH0+YiQrfSlZUzY7MDA1PF48VkMqZU91Kj89IXM+PDhAUlpvX2RkfT5G KGR+PVc/eWNZUgp6blk/JlhqVHctKFl9bjw/MmRMckB0S3U1Mjw2WHQ7YW0o eVp6VUVyTj1WWm1gbEdYMl8jOW9CM01SS0R4ZFktOWoKemtFWCRvSHVVa3lA YSh0bj82Jlhndyk1fURxUV93QjxlbG97b2F4fTI/Jmg8ayU0Nl45dyZ+JVU9 LS0qPS1Jd2crCnp1JjIjdEA5NEFXLWs5Z3htZ2QtJD9CSzFKeUxFPVBOcGA5 YEAkMUN3O0k4WjV0bmNLJXkzd1BxK0hyV1VLSEkmQwp6d1Y4Z2o8OVlEciEw RnRvPkRzOTEqUWYyQHlMeiFmPkRzQl8lWmxIfmh1KzE3PUZ5XiEhQmduaHJy KllmLW91MzUKeiFHaChfcHRrM0g9RzNJISFoX3R2ZiFuPSo8anRQQj53b0xw eGFIMkU8SUpBdyp0V1h2Zl8kXz95enFwVSV3Nmx8CnpwWD1xR0A5REppPStA eEpuJFc5ZyNnfDBLdzU2PTYpUXBoYWFkcChQd2RtbUNfVjRQb142YlV0KHly MDBZVFVxJQp6P2NjYHdfVV5aXyU2RVhMaGxoKjh3WWMqMGBfJEYpc2pUSVdr PT88PT85IzFsP0EqYlJsSEdtRlRia0FAKDkhWXAKej9aKW9ydmhDIXM/QmNL Uj1mUX5mQ2hnXzE9R20zeSl8Mkdaa219czNiKlA0QHlmNXRIdUhAQmA8STwx ZiZXITJVCnpyKyZ7P25BdDFoKDJlMkVpe1EkTT1oZFohPm9rcS1DLTM5Rj0t OCp7KX1gIy14JE5HJDw8T3p6JlkkYnF3JW9wZQp6K3F7MC15TTUhIXA0eio5 K1BaeShmeG5pQXF5dUUwYDJZWF8wZCFKTVF2ZzhiKmslOSMwMTBxTlMjdG1Z MDd3NzsKejA3dzh2JCFrNlUwMExgQ0xfdChZJDc1aDE4ISQzfjAzI197bjMh MnUrMVF5IyghIztYI216JlM3U2U2dTFeYjFVCno2ZkohRzApaiVxZD9hWlI1 ZnV9Yzc+cnRBZXZ5PXZXUlBTNEF3b2NrNCtOd0BZS2hmQ2hBbld2Zk5jUklT aH5aTgp6YG1sTVFpQ0oxa1IqcCR0S35ZSlczNy19ZlJhR14waCF6ZUZPKVlJ RTliRytyMThpRjB2OURAcVhhdnppeiFyRmoKejBjfGtgPkgmJEZmUEc8I0VB PTYjRiVARyZSUzwxdlplZUw8Wkg2b0xwP0ZgXzJCTzhuKjNSQyszfEcyOSkj Mz16Cno7XmdlJj5QRG0lY1plMWJQY0xzRCsqKiliP0NhO1IwQDQhVDc4biRh KD1VaCsxQS05JCZAaUIkYTVFNXlLJGdKYAp6UktnO0dQQlYqJmopeyNrQlB6 ZCFnaGo+IVo4MXdvT2lFNns9QCpwNT1iSVcyX0Rmb05NcklhSEVodlNPWUJu VXEKemEmcShYM3ZnPmVGOFdqcEF6RiV4M3JiM0hgVVRhTkdPIWlgQXFHaTtD WG56ZHVUVWl2clZRWERYa2xTKTJHWEVmCnpVUXd3PWoyNFRrc3d4WEp1JmFQ TilRUXolMzkmXyRDPjxheil3VlRlTkZ1ZCReJGlYNmpaTXVoRXpQWk1TcDh6 dgp6PyRMcHlyTChLTXI/PERTZjVPQmBsT3w3QEl0XjBgQnRYTHZJO1BKNmxH QTMrbm14U30kZTEkfFE7KnIpZEdpLTYKemd4Z1p2MT03KHJiPUlPcXYlNnxS ZFp1RXkmMX5fS3JPVEdYd2JYVGska3I4JGZNOGBFaCZgbmhMKDhod1l1MnVW CnpZcEwlNms8SUh0U35rPiEqcHIodnY7PU0zdzBSMyRPRzdWK1l9cEZadmFK RWNwNDVWJlcmNGh1SWxEO0dmKS0qIwp6SWMjXnpwMXUzOWRjUFomX3hKMlNh UFNhbWZ4UCRka3N9QiNMYENKSEJQZCM2M0ZoY0FvQyhJUF53NlAwcjZlVXcK el5mWDNZMDAwVXs7NyF+M0x0Nmo8MDN+IXFTYWY3emJZKGhZYSVFdzNXZEpm VEYpJUdMR0ElR01SNUNDK0cmNEZoCnpHJUdNUUl4c0xlbkkjP28wMDFSKU1P YnVYVlJVNldaRXN8MFdfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9GZzdiTgpY SDk5YWIlOW1CRjAwMDAwTmt2WFh1MG1qZkNaelVsCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9wX3Vua25vd24ucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRv cF91bmtub3duLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTc4ZmE2 YTFkMzVkOGIyNjY2ZWUzZmZhNTU4M2RiOTY2MmE2N2U0CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxNDkwCnpjbVY7QDF1Z29DUCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDdmUCl0LXMwMDAxcQp6eCFY Mn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQUD82bUMk QnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9KVlTOChz Tl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZGN2EpYjZke15PP01PCnpRakht cXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1QUUs8XiFSS1ZmPSN0ZyVwflBO PHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2QUBhKHFsPiRkYW4kRCtxej5n MWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4kfT1pUWc9PEZLZEEKelg3QXs7 PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpNcnRwP0JLNUotbUxIQnpxLSsq dUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQc19FTE89K34kMS1AQUlUTEZ3 QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRiaFRnLTMtTkF6OAp6JiFEI0Zl Q0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3FtVjxweVNNKj5lI2xyP3QqLUBM JWleV21kc3UyPUFZfjMKenA2fV9qX1VfPjUpd0E1ZGpudUpvKXlLVFN6dSYy PTwmPkQ7I21EYUc9PWtzSXdlc3g2P0FebEwhSD96OHRNY2Q2CnpgfXAkOXYl UnJ+b1Z0cFEoelVWbV9XYS1BXn1vVUZzOyVZRygoJkVHa0A0bHdfdD8oWFAl NzZ2NEJjaXR7UE9TSQp6LVNuJWo9SlZ+dz8maC1YPGdvMUd1a2ghPTxHUSlt UVkrJGNQMTtFdS0pbHdmPCswfTNtRjNveDxrT0pxK15XZDYKeig4aXZ5KypU fj87OyFWP2s+az5qOz85aWUqcihyUEo9YTdQOz9SeFomNVBqNWlSYWEmQDNF Zk1kUERFeXpVYkplCno9aG1ney1NUkczelVyV2Q/NCp3Ujw9XmJ5eTUtUUo8 aiRZIyp8eXhpZlpNISYrUGkoQCVid2MxZSVpV3klVWVkPAp6b144fSZMZXJ2 YHZaRURNMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5D M1lkIXp+MCp5JlQKekt+ellgVl8rWn5GZnhHdkJQbSojbXwwbGEqcUtQdSFv a1ZLJXxuX04ocndgZGAtUFZqRXF3ZH1mPG5UNEJ4dzs1Cno2JSZeamo5Tihk aXpGV2lORGVAVkxETDxzKVEzJEE2U0lgR2o0WUYheW4+PDw2RngxPERrYGRL NUdAPyk4ayQ7Ngp6K0ImKj1gcTtGPHtpMCVFVTxsRGV6IXBTXkRYU08oXj88 flQhTS1yVG1ITG9GT3hlZ2wxd0A7Z25PaiZ8bmNAbWQKejZ6ezg4TCRzTE4q eEsyZjt6fTImU3t4dSs5RyNxOVQjM307MkdRY347cHlkI1RNTSNfZVNIMHRM MGJHPjB8SjleCnpgVU5HODFeYjFCMGAtS01mPFFRTnNaVGpIMF9aZjskZilS O1NXfWA+VXZPd2Q5TUJmaV89TG95V1NvOU1OcWp5agp6YWJVbHNybG5fTzs/ I210RDUrI1lMTSVIY0ghbU56N1VaSCZyMndMKHVxZU57MWdCcTZaN0J0N0Fy TkFhQnhubz8KenVkO0YjTFNmMVBQSi1zPFd+THd3RHJNeXJzPkVuOXVkSip6 SHdDKjJzNiZsZEVmeEA0UkVXfDYobyR0cFpIZ3BQCnpRKElTR1UpUnZzKVpF PEUodSZuRG1UbTZzTkxvNU55U2pVTmRpKGsoT3FAN3JAfDNCVlN8OS0kaFJg dT5Jcz9PdQp6blhgYWtfOGJPPXgkYGpmbjlnNllhTTVEOEVqNjckOVNsb21F blQqSil+cHBrPUctWTVaWmxvRVlXMTQ2YTRvZjYKekFhZFAkMjhLQnNYM1lZ ekMlMGZ8Knw9JSptYVQ5dGI9QEdjWCVkandIZnVZR0oqZiNwT1c9OzN5TFE5 MSljMWhNCno9N3xncGR1R2tyM3R+QGYjP1oyRnxBRmotNytNWihuPkZpakok NVo8QXFJMlVreSoyamNHdXg+KnM8aX1DcitZeQp6emh5RXwzcXd+ZTQofWc3 Yl42UiV2X05qMUdNOW0yZFM/eGVLdDZIcXtDUntITktgVVJ5KWJMbSNTUjc+ UUYtPH0KemlXWD5zeGlvOW1XbjJseXdCK3BCdm4zPVlPWX01R1Q+dDxsZSVp ajNDQWczUDAwMVIpTU9idVhWUlU2V1Z7JkMtCnpiWSVjQ0ZmbE1LRil9U01G O3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249SSZFKWNY PVpyPApzR0I3YlBFaWdHUEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtL MjA3KnFvTTZOPCRmXi1gei0yZWFwCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9pbmRleF9vbmx5X3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5kZXhfb25seV9zY2FuLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzY0Yjc0ZjVlNWU1YWYxYTIwNWIy ZWNlZTllZDE4NDcyN2UxZmUwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA0 OTgKemNtVjxPMFMqMyVQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcw e3tSM0RkQmo3MDAwMU5QKXQtc3xOc0FWCnpiYVhhfCFEZzF4IUgraDJvfmNk MT40fn05VmFEcmsmRiomMT83aDljck5RTGV5QHs+WD44OVREXlZ9LUQtUj1N MAp6RFp0PEUhcjw9MztxUy1lQFd8dXYlSCMwTTxuajZEVShNejZ8Sz94Tz1r bjkmXlZJM3wqNkg+Mz54Y2dBaFQtcWAKeiFOQGQ7MDAwMDFiVyU9SjA2Xnkw VyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NG9FUUtBMFV0PzNLfnpZYD9iTz4y CnpmLW5wUTs3TztWMD9OYl8mSig9PEozNUxeVURxanpDZFN5U1d5dSM8YClA LTA+KnM0MlZHVFF3WGYlbDlAaWNsTAp6TmRPWGV1aXlTeXBDTTQhO09AeSZY e3dTT0lVWHF+WFFzLX02UXZZUzRoS3JBQEw0PTBsfl5mOV9JcEFeWno5QmAK eiRCaGtrSk1mOHNAc0wqVmhMV3BiNFEjaS0yK3JJUSs5LWVQP25vUTBsWUJO SCpsZDghaTdaVkRseT1FXy1JPVViCnowaXdOUnhkaXNsV3U7QSN2biY+IUo5 WjxAT3gjSihva3YyYD0qPWUtMStaIUs9a3JFcjhrdX47ZD1CPVlYPmoyWAp6 M2BeNVo+fnk9aF53JSF6ITxYbUg8QS1CeHJpY1RfZ316TURGME1CfSYkOFV5 ZXRjOWMoRSpZYGshMXliTVpITGoKb0YmUnNPTXt2JCFwWWJqb2BgNVNDOFMh NXBpNForOyZqMGBiMDcqcW9NNk48JGc1I0k9XzVjNj8KCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2luZGV4X3NjYW4ucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5kZXhfc2Nhbi5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ0ZWZmNDI5ZmE5YTM0MDk3NzZl YTg4YTExNDIxNTgyZjZmNDU5OApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTI5OAp6Y21WK3QxP35FWVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEl dzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMXEKenghWDJ+IUVlcChNN2A7QyZo TDU5P15WTC1oU2N6OCRuMHYjPn5HNUptZjcpcCZoM0tIP1dXJUhqQDBndyo2 KiszCnpeOTg1ak9+TDZLdUgjJDk+dGVfMklKZjBjelVPUGw9eWEyb2RZLUFK IVFeSV4oWlA+NEAjPUB8PDYhZ2YkbmZtOAp6QDlETWo/WnhpcXYrP1cxP0Js VFQ+QjhhZl92aEx4PmcxajM8REJXPm4oeWVkPS0hIzwrP1ZhO3ZGNiM3PDxe dHoKejtIfW9fXzNZeFc9R3ZDKjtqWk0+bEkhMkM/ZEchVS1tTEtFenxgc1Yl YzVBQHlAfjRHc18qMiEpOUNaJClSRSlUCnprSylqYz5Ec0IkPWtueSFrbUFt YUA4ZShUK3A2S3Jpc3sqP19VbmkzO2s/YnxeN0dfaD0rfiN7KlFWe0B5WUFh Ngp6XlZ9LW4kJSlee2h+TE1EPUczSWk8bmo2RFUqNSlzJUgjMG8pdXJhc3Fz Wmcle19LWUQ8LXFMU3kycz0yI29fUCYKej0zbmdJeTVgY049RnlfJihWXl96 eGN9Wk0tbyU5NiEtTCR4ZzV9Vm0rYGZScTtPXndrcFg9SlV6fkFvViY3U0pu Cnp3IUdjIytQaSteJSR9eyo+RXB8dTVCZGFBMDAwMDFiVyU9SjA2XnkwVyZp KkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wP0EyNEt+ellgP1VkUEQ1 PlhoM1pLQU47UV9DIypLd3ViTFN0VFR9MV9mTElrd3M3aDhBKE16V21OPj4K elUtIShDIWcxbj5vMVFOR0UpRi1tJnlWLV85WnB+MCVsendrTVg+WTdRdyQr cU9DKnZ2IzlPSVUrRTRWcWRwfEhwCnozPVJ6c2p9UmxIVmBDbyhRQTlGNksw Wk5BT2lvVUlCdEFffE8kYHUzcFFYfWFWc3ZfWFYydFJOR1YlOCpVJTIxUQp6 cElASiE5cDlhaSQhNT84JFEyNU85QT1lRDx0KXNxUjRPJjdOc2BvbmhOMzdm YlJlPzFJVD8jNj1JN0BYcGo9cDMKelJEbyh+WD14Y3FvbkNKTSU0anMxRj1T PD4xNmt3fDlTTmpmdWN5RmJHPDhRKmkhOEZOKDs+djV8N043WFlGYl5qCnpp NmVyYFo7UzdvZysmV212KDRfbmtoTGB5YDJwPGs9ZztTLTckVCZvbXF9NiQ4 aVJxLWZZeGRASkhTRUh2PWQ4Tgp6VXZHMUh2YXFsZzgrTT53Wm5wPFJIYUZX NFFtNW1LSENuO0V5MEp3QT9SSVo+TDNWXjxEWHYpQ21kaXpoY1lFOUMKejdm MGxab3Q8M34zI1o1TDRgOWdOVWVBczMyKmB1TUFXRVN1UnhMUGVjQy10cCpX KzxRQVFURW1Me2xLUnphSUBeCno3Q3ZNVmlYOXhyRzM0ay1LJSZ0RUQlT09x MmttbVh6Mk5jcmQ/NSVROTQydyhfP1NuY0VXI0ZSN21EQCFWekRyIQp6bEYx fjRBdHhzc3ZZU1hHKHlSc2ppP2F3SWkqUENla3ZQTWdWI3dLOSZ5QWcqYjFD VVdDWDs0JjtZR1hmYCRHWVUKenF+aEBsSUwrcXJtbXJFe3VDQV4heFd6UkN4 azltNj5XMSp3Qk5VNHJxIyZOV0VAVUJKRVM3UGtRZldnVGkkJUwmCnp0X3lg Y2wjMW5ZUlVBb1lTZUZpcVRyUGhESD5HT3oyMTlPZGR2MShKZ3BAIXlnPzRl bEZ4Z1lNRVJ7K3FyQ09gcQp6d1dwd211VT07I0tmIzUrOSEhQz1ENjx4fE14 JH14aj55KlAmMU4wX2B2b0wqJFg8XnVTTF9xZz5QKUZMbzBYQE8KeklOQylQ YXp6JVltZGxNQSt+V3ZoJj5mcTNiaCUpJW44alZJKXc9NiFPbkFuN1kzeWJH dVh6QnI2YjMzeD13Nn0jCnowMDFSKU1PYnVYVlJVNldWeyZDLWJZJWNDRmZs TUtGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYgp6YlZYUW5X TU9uPUkmRSljWD1acjxHQjdiUEVpZ0dQRmZtanpHZGVVaEl4c2RYRmZ9P2JG dl4henROO0syMDcqcW8KSU02TjwkZkBqPktTcFdiNAoKbGl0ZXJhbCAwCkhj bVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0 aWMvZXhwbGFpbi9pbWcvZXhfaW5zZXJ0LnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2luc2VydC5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uODYyZDgzNzI3N2M5OWUxN2QyYjY2MjMyZGU3OWZj ZTAxMDc1MmU3YwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA2NQp6Y21W K14xbEllQlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRC ajcwMDAzeVApdC1zQm1nS3wKelRVJDFXITNuQTJhK2Faemw5SXVYSG1hRjhv dTRAfXdkSGxEJDNlWDQlYzU4azt9UXp0TW9QZngkRXROKiNPaDxsCno+VEFk N1h2cGxUI2QmVmE+X19ZJXZjIUE5IUdMd20/QXlKNityNWUwekpUMW5mUDJ5 SitgKW9gKGVCO0RnTWAhWQp6LW8lOTcjZjlGK2hLJHRpLV5ZakYkY1R+RT8l PklaO21uR2MrNDE3ZWpOO0laPGokWDwrd3RTbGtMQSN6PGtPSm0KeihWXnpp cVU2Kyg9RiswJSlzcDdacXZoNjw9RzNJOyl1cGNCXlhBITw9K355YCpRZSYl bWcoNTE+RGoyfis/Vk92CnpzcDtGUT4pTjtJLWtJdiVzX2Zqaj5FTjJ7LW1M ODF5NmZNcT9CMlRVO0h+UThvYkJKYz9CVEJNO0pmUE5vJFRWVAp6P2N1IWE8 Rk1gSnZHMyUqP2RHIVg9Q2trUiEwX2g0QDk0QWQ+OXozYSF0bStCQGEocW4+ JXtXeSNxO2dQXllGK00KeiFMbnJsMDAwNFdRY2hDPEs8M3pIMDAwMDlhN2JC bTAwMFhVMDAwWFUwUldudTd5dGtRaGU8PzFSN2w2fG0wTlN0CnpQIXZYSyZg bEJCMkNKYU9UQSlhfHEoR3JpMnRrTzFUald2QDNJUVZeeEJtWk07N1FLbTUp MzJHSUhNMlU1OUApKwp6Tzd7MWlHbFJrS0gyK3s7UHxFRDJvPGk5eTdSd29S YWJtU3pRa1NvN3dybEc4IXNXVzVabXQ0PlBuNTE9RiZkMikKej5JQmhCeSl2 ODRIdEchTkY2ISNeKUUxIXIocFIzVEpNV35QMCp9K19ebHsxWWNzeiU+RVh5 O1BOcz1ASHswc29TCnpzWjFYcFQ0VGEtd09TcDRUcXpYI0FaNEBaQ1NZVW5n UWhofk9JMkR9c21MR34zSXokZSs0TkhSeD55WUp1dlckYAp6XjxrQnhOKEN3 WCFzbzA2P1F8O0RBV0ErQEh5NXpacVZCJitAbDgkOW94cjVvczB+UkwybU8o bXVBRztrJT09dj0Kej97JjAzdFIwdy1XTytfRj4tVkpAT3huJW41UWReQzR3 ZigwSUFzNUlpbXNDNHRfRVQ+OTRAWistKjhaKzY7dnJFCnpEbUw0T1g2bykl MVRoPkE2KnA+OTlXQC1PNmpNQCpaUU1xcUI5dVpRTWdXNz5wKmkjbSs1Z3VS Z1E2aHhWRHIkeQp6cCZUbWcqVnhpUTdLKCNUcTEmRGk0alZPZTdLMmk7SURq Nns9UV5PaGtIRmBqOX5qOH4rN3R7KiEzWF81NHp9KHYKenp5VlUpPWBefCtt fGA+PEU8dXJENyM/emRwTGJnIXFFY3klNUVtO2ohQygkRFVheXpjU0ozfEFj UzBwYTUyZVV1CnpJPyYtKnd5dnhFTDFYSyRoKz02I0kxbUtCMmJ+UFotOXRU QGg9MCp2NERZe3shb3h6cz9SM1dVNj9gITtgQyFuVwp6MG5ZMWpDbjReMXA2 XmdfcktAN21TK0V8ckl9UzFEYEZUV04hVFcxY0JvZ3M1bHcqLWRgTH5VfEdi eTg/P3BKIWIKejNfMW1zclh5dHprQ2g/UlJxKH03WCojbW8/TU9qOUNlJjNq S0lMTWwrKmpleURJX3VYUnFva2p2V35mRG1kKGNBCmo5NGhtNmxUVXkxfExn biZ4Z0BgRW1eQTkxMDAwMDBOa3ZYWHUwbWpmUyQ7ZUIKCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2pvaW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfam9pbi5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uYzM5MTIzM2M0NDliZGM1YTBkNTJkNTBmNTIyYmQzZTM1 YzY0OWMzNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA5MAp6Y21WLUkx aWt4LVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA0aVApdC1zMDAwMVcKenJwR3BqIUVlcChNWlcxdyEwQSlNPlY/JHNsLVRm ayZnX0hIP1RnZ3p0PjUhTnl5KncxO3Q7Rmk4bXtBQSNwYGopCno+YHVQc1RF WFhKI3BzZ04/Xzc8QFdeMipSJkdFZ3o/WjNoOCFvdSM7KWJyVGNedj0pbihi NGtNKWIheHNfaX5uQAp6VFpnIzN6M2l1ez1jPXNkdUNNOUUjXyE5X0B4SCg5 I200Wn4qN1UpVEh1VWt5QGEodDEhUzJTI0A2RkVnLXJufT4Kej1BV3lxPShE dXl5dUl6eilibzsrKFQxc0hRakhtWnJDWVBYcmxHYE1nfGJHK3MmJFRxdDgk fD9xUV93SD82IylOCnpXJFdkaD5nMWo4PjlwX2J3KHNiKF42YlRnc0E2YGlK RCM8TnVHKD5VdTBIZWIjX3J+Xz9kN3JUOzstPU0hTHtVaQp6PUd2QyEqT1RQ YWttfXMzZCRVNjEpc2ZAVWtLKWdiPkRaQEAhQmd3cnRtNHApO213UVMlOEJS SHIwKExxPSt+eX4Kei1NUDh6ZjRjNjE8PFgoISZZJFlvdyhSNHV5enFxRnpK U31qZSVpV3k8SUE0djxEQlc/bzBpTzc9LS0qXztIfk19CnpzcXBFLUA4LWJY I2Y5QyRnNT1HZndMfFhhMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdV TkJ7cjtOQn5DMwp6WWQhen4wcl5RcEt+ellgP1VVSkMoP0FyKFZeQmJwUm1E TTJsLTJiJUU+JCQ2MStncTtESj9BcHg+Xyk4SEVGMzAKejFxdjx5SSFRWTY1 aTxoPUpuK0pPbjNzSU5kdmVacXR7X35gTWRwVFI0dGU8eXZFaztlI3dNfShj RlVjK0JIdUV4Cnp3WE1DUVF8IThUfDNTQ053flZkQVQ9dmlzQ05HfX4+VXFA TF9aVTZ0ZkJJfHkqXm9oTiY1Jn4kOFhnJmF7c08meAp6KSVXXzE5UlpnbE5p TmokX1RCcHJoIWNfQVpudVBuS1lra2ZkfSlOfmdeN0dZPTgjdHFXUUBPbEpJ amsqMSQjVz4KemdxWit5elctYXNeZGpSKWdFP25uQH12aSFIIT1MPDFtZmpO M3tNPisoPSlTWUN3M0JYYEZ3TnA2ZmUkTTcrO2k2CnpQMFRzfCNpZkFCS3lX en1VZzEmXjxVcXZ5SDMrUyl0dyQrZG9hZ0VmTH1IZG9JRyN3UkQyVmZyN0pn Y1UwT15nKgp6VWtWTHpvR1hyeSM0QFJAbEIwTldzXkgpRl5wNGZmbUFyTjI0 XmhkZnMrT215ODBHVyZmLW9Oe2dqY31JRTREPXQKendmTUtCUUBudDhYMWhG UjF7ek87KzJxKlA0ciNKaEQkeDwmYzZvT2gzVHlGMTZ3SlJlaTJBKk4mTyZD KHlRPkEqCnpUVGRoX1Y4Njx8dUlwNFVNbEF+YWExZ0RlR0dIcUtHcUwmeV40 YnUjJTZAbitlRV54UHFVN3U8WSVmTldIWSQqKwp6UiU8RlJsMT9OeXYhR09L SEh7YUVDWE1vZVN9UFYwfDNqRXd0bnh1bCgrPX5PUFY5UUZXe3Y+PFdWZ0Jz bzBXazgKejAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxNS0YpfVNNRjtw QHpJeTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiCnpiVlhRbldNT249SSZFKWNY PVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIw NypxbwpJTTZOPCRmP2V4REd5bmhxCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9saW1pdC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9saW1pdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uY2MzZWZkNTlkNzA0MzYzNDllNTQxM2Y4YzVkMjY3MzIwMGNkNzRmMApH SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTIzNwp6Y21WO2AxUzxROVApPGg7 M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1z MDAwMVcKenJwR3BqIUVlcChNN2A7QyZoTDU5P15NRi1oU2N6OCRuMHYjPn5H NUptZjcpcCZoM0tIP1dXJUhqQDBndyo2KiszCnpeOTg1ak9+TDZLdUgjJDk+ dGVfMklKZjBjelVOaUk9VUt0JFlzY3VoVmBIZm83d35kJj9Rd0RHYUIkfnVh T0gxcgp6O2NqbC1aRWV8WFl9MEZOaE4peXlqVHltQEh1VWt4QGEodG0+JGRh biRNNU8xXlg8bSs/OFdacHYrZEB4P2Q3clkKej4le0VodWs3S2o/QksyTj0p JDdMVkMmX2M+ZkBhNj5iMj9NbiY7ZT89aThSLTxGTXR8bGpZVHQ+KSktVyV3 XzFfCnpuZGFHKjxrWFNtKH4jPWpzXypFdD0tcnMrKnAlYmFrRSt2YUA4LWJv PGlEPWphTDF+M3ZFRnM8PGdufUJ0bSlnVAp6PkRzOTc7a35ydWRBOD8jeGF4 bzYmV3ojQWl8Tj4+eCRBKUEoMm41QmlSam0rPWhtakApdXJ2PHlVbDU3P0Fe Tk4Keih4Y3xscVVfd2ItXmhwRyMpanQ5cX17QFUtTkF6OCg0cFNNaDF8ZV8t TlNfMnpKVFA7cFlQP3M+KU47RykxJjZtCnpxMiRlOzxJSkF3Knx5cmRlZEVp WDM3d0pYMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5D Mwp6WWQhen4wKnB5U0t+ellgP1VVX081PlhWIVhgYEBFKVIzfU5mfE8qQiRt KXVgQnlTNEB4UUl6OUZQYWRiQ1d5I18KejVReElSLWQodDA7OV5lcHA9TndP K31XS3V6ZDgzZyYkJU1lZ1peempCNnRsdmclSU1nU1MpQCpKZTVjIUwmVlV0 Cno9aDkoZmN0aj19Qn1UYF8kNnBZRmgqJk97aS1gJF5MaCtKI0g5MHZjQn1R SnFuVVdEPik2PiMlOzxoZG1sQnFqJQp6bk5pK05HdU1kblpKJCZzbTBHMSV6 bmgoJW90dkF9WGYqR1U9STUzNz5ZXnBKQWB2WDtiaC11cFQtMVl9cU5wV1UK enJkSkhCdXhkMSFFcjY+IUIwckRfKFhGa20+Q2tEbCtKTGcjP0tJRjFyO2BE ciVrQjA2dUllSG11YVFObylrLTE2Cno+IXJjcV4hYmNuY0tnPl56KlJ6c3Ql VUA8LVZGbVZLM351VFg4LSE7UDI+flZfUkA5ezs5VkhIRjFBPmY0RlJzfAp6 QkE/T0U3dk1HVSM4c1Zuaz1yRHgxXnVGcCghKX1Lcms3IUxoaFojV0Y/KyZX NVE7PmpGfkMpdzleMVFuVXJGQUQKem9kTyFXMilmTUpNUHhyN1BYTW0hYmxL aGVoUHFIenlGQ0UoaFFxbDdPd2k+dkx3R1pwajZnSVZQbyk3QGIjS09oCnpe STQkNXR+aWBOMjIzdXVLTVpWZ2U/Sk98UjRSMTx4VC1nTz8xSmZjNWxiSCY5 YCZkSEMhMmg4WF8zQykoRVQ+Swp6Q0VrVG0kaTtDY2xSV3tVaG01b0V0Wnli K2V6NVUwOU9PPDxeTj18ITZnWGtUPXlJVllYS0B4T2wqUXBgdjZ6OHUKenA7 UWB4bkF8O0M8UElUVUVTX2g5RTB4TD5WWmBESXZwKm1ke25iU2x4dXxsTE4+ dmN+P0lzSSFMR0wwR2Y+PEoqCnpLN3lsc3pJRl5KN2FVaUdZTmRYOEM0OH03 N3cyNlVeK3UhNzZoXylocDNkZGFVfkFgUmckdi15V3JTUH5NJXFoYAp6dk1B UjBFWU0mcDwjTUJiOGA5JX5ZcV9aTkYwUHUqPUdFVnQqbnxGYXtSR2E4MTdI UmoqUGozWTAzfiFxU2FmN3oKemJZKGhZYSVFdzNXZEpmVEYpJUdMR0ElR01S NUNDK0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXCnpaRXN8 MFdfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAw ME5rdlhYdTBtamYtK0dIQwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfbG9ja19yb3dzLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2xvY2tfcm93cy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNDFjMTE0OGJiMTg1Yzg3ODk4YjNmZGRhYTc2YmUzNmExNTcwMzMz NgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTUyMAp6Y21WPE0xclBkKFAp PGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA3OFAp dC1zMXByS0wKellpbjw5WkU8ZEhiI2lqSVdLbzIzVCkxVVh4TXh3Z1g7Rks0 YylEcyl4QCVFM2h7M3ZVUUdSQFV4XllvfWV0eGBqCnpRRzxZaHltZTg5ZmBZ d3hRSFh8eXpJOylOaD17KntRSCtYOzM4fmAwZj5EaShqRTs8cXo9VG5iaipm RGNwXiVTewp6ej0lPThoKjZTfmw5UThAIUgraFltMytkRVFJKGFJbTZuIzRt elM1QW44Y0QlI0YkWXN3ZEk8Z298flNZYio5SWgKenBgcFRfUU8ySDhvfTs2 bHFAPjVBUTktPXUlYzVBeHIlfW5NUUEpdCslQnhZPXM3fWhRUU9CPVMlJiQ/ V3Y5Wmp1CnpRbUNgRFVCdjRCdHBUZEZ3V193Wlc1KCp1d3BEQSM9eEU2NyZi bkJ3eTFMR35TK0JnalpwLVlqelBAJE0/QXA3Mgp6dzhGeU15QH0oIWJLSmd3 fEdoQUsoZUpqeiNONUd4Z3dnS1ohLUlzPUBaUTlQLW99UUUpYjhLTWh1X0dF az01P3QKeiQlKjAyaWtJMig8SUE0biZXeipDcDUpRCo7P1J4YyZZeiYkQCNF NXU8PE96eih+IyFUcTJ8JHw8a1hTbyh4VCttCnpsSUdLKzw8XnR0KVRIT3Ry TE4lZj1HbTAhKlFWJiNyez56MD5EajJ+Kz9WT3ZzcHtGYj5EI0w3K1BDUTVu ZDtyRAp6P0EqQk47Rnt+K3RuJUhhP0FeTlMtPnZmQXJ8ak9rXnhtb0w7SH5R OG9iPXpSP0JUQk07SmZQTm8kVFZUP2N1IWkKejtpfk44dT1MfXQ/ZDdyYjxn ZjRLelV9Nis/Jmg9YTwtcXBrdmhlMT5gUUA/aT0oRzBjdi1hbi1AOURNcT1k PHdYCnohdWFVNkBhKHFzPmJtJnF4YmZANntwejsoPzdIJnAjcmZeTmBSPjJA PyMxKSkkcDchWmBTSE57QHhsQT8hfmdOVgp6fE1BbE9edihiQyljXkYrfE10 aUtfUjBWRCtXKz8zfE08PFN5VXs4RDAwMDRXUWNoQzxLPDN6SDAwMDA5YTdi Qm0KejAwMFhVMDAwWFUwUldudTd5dGtSRT1mY3xSN2w2fGxqJkN5UTVlUnhl SCtfTiVXU3VzKjwhbT0qYEJ1OEI4aUhJCnpDfm1sY3BvandtMWdNTl9oTjA0 QUdeSGt5TXA7X2Z6V2lDO3hweCNpai1Ka2BiTHhaZGhpN0thbmNzUWU9ZWgz PAp6M1l3e1pQek1PTXJjXiRKNURFbD5SM2EtT0YpQGU4eGdyITY2VUFCQyol ZEBaVVNaKWFmKV4xKUxfYFJQMWdNRmAKenJQJGI1QSgwQzRZJDdpP1N5KUs/ TDZfWS1xcWFuYjxNKypJPHwmbVVjQVpiVm5SZX5TTzdzQ24xX2xPMyM/PDVT Cno0MXBuclZTSzx4KTNnXzBBfH5aUiUpMFEleFZTfEs4UitiNl9pKlpJWTs1 Y1VqTk5NTzJESChyYjh5Sm5peVBSLQp6KHRYPUdxI1lzYzdfbD5ldjBBTSg9 clpjWWtmQFh4ajR0MGxuPyplQj14M3lUYn57QTZ0KyRPZGFPIUdtU34wVGUK ejI0e1RFIUM+U0MlfEd0cTVwdlB4MXp0eU1ReDhJfT9edl8/XnFDWEs7dCRP Vm8pO1l5YlB9K1lmaSEpeHZkR288CnpxbzJOZntQRiRzQEwrJWNSQGZ6ekVp bHhfRmhqdUMtQSgmfCpYZU5kZkY2cFgrXkVhdGNjYTU+NEcjQTlLM1VIcQp6 Tmw4aFcwV1B7Jjd1OExHUVlqUVJncShZV2tXbShTNyZlWURifl9IJT1tZF9N PlBpWXczUG1ZS1BRQ1VjND9fSjIKejNZSkV9d3BPWkM2c1JqTG0wSipVe0ZO V016aGQwV1dFWENtI298SXB7MGwjRkh7YGJ4Sk4lcVFNaUZ2bkczP0BfCnp5 UFJINWRzPl58Uy05KExIYUJwWSY4ODAyVyQpOHhGRiQ8IWBSIzQqejJAY3g1 Vyh8TGJSbVo+JXRaekhkVzd0Vwp6LW5NYVZTbT4le0F4anB7cDk+TUVQNnJu UUUyVUI/PlZRb3lteiNtOUFZWX5qZHsrIWIrUWNhaSkqPiR8RzY5MjMKekNM e1J+STZ3ODZRYFV0R3gtYzAhSyE9X3JUWD5QOTBmfVd5UExJQ31NYil7dik0 fCRkKENnYmtpJmooQnome3dDCnpBTVhIRz1wdlR7OG1VQzA9MTFeaTFSe0Rf dTJjKUVCb2dyeTIjeiFtQSM8aEREeGo4IyNZJXB9Wkx5ZUw2VEd4Jgp6Ryok SldVYWVIdHxGeShpQ0lkVkx0WmdLeloyPTh4d0hrSSZtWTNKXjR+Nz41RD05 QFQjSEA+UWt3e2Q9an5NZFYKeiNsV2dYIVRPT0JlbmJ5WExDZEt8IVhpcXNT WDIobXJiZ09HRXUwQH5wb2BqKWw5SmtLNT0pPSVSP2dKX1NpYjt9Cld1aWN5 eW1YJVFlMDAwMDxNTlVNbkxTVFlHckFiMm8KCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X21hdGVyaWFsaXplLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21hdGVyaWFsaXplLnBuZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi5jM2JkMGJiOTBkZDJlZjFjYzFiYWY3Zjkz MjgxN2QxYjZiZGY0NjNiCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjIx CnpjbVY7JDFVbWJQUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7 UjNEZEJqNzAwMDRpUCl0LXMwMDAxXgp6eVVjXkUkYVNYMkhpKkhWJkVBYTEt SUt9UHM/eS1IKVpuR2gtbVRLI3pTIWIkJTxWKEg9fW9gclFeTStuKWJOenAK ekBPc1lkaHR1d0AtfTdzeyo+az95NVViKjMjcHFuYT41fHAmcFJLSGFvMSRg LXB+JGE7O141MlItb3dGPEh1VWh3CnpAYSh0VitxZDE/dyYyfnU+Kms7ODxl dTs4d2QmKVktUHlKMjtoWFIxdio2c3BeNmthVXlgI3NmYj5Hezs7b1p2YQp6 PUNia1gjTjV9ayt8eyQqK1E4QEJtKiZ9Jj9CbFRBKnRPZiN2RllITj0tLSpf O0h9PSt6VTAtQjtNPlRDc2JvQCgKejhTdik3dEpHfVcqMWgxYCRGSkxSdipD Qn09KSZzVnRMZmFUPyY3YEwoWFpMaHVHIUE1cVF6Z08lVmU8SmJHUFN3Cnp4 YSl1OChVMFFKak9wMl4rUzBKeClWc1J1ZiNKLUc9K34jJSUmZ3FneTVQISo9 aG1qKip2MEpLeTQldmErdElrQAp6KVRITHFxdTByKS1eaHBGI2Y5QyRnNjdl byp2elpnJWQ2Sk1zTV5vQjxqJGJuekpUNzwhfFUwJCtSbkd5Jjl+JnUKenA1 eDQoPElBNGEjaXJXMmVjUWMlJj1nYyUwMDAwMWJXJT1KMDZeeTBXJmkqSDMy O2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjAoP25DS356WWA/YjZwKjhiSzVY VV93dyNqR0FJMXJWWHQwQXw/eVVOPlBnNzhiZ3M3TGtxcFBDfHlBUQp6Xn59 aGM7fHlAfXomU2EyQElLc14qPkNSdD9rPG5fUTIoZU5AbGtPZEo5I1dYI3I2 OUt7RHM5dTtTJkdKKTF+RVMKemUyZlRJUkBhYHQ1V0lZfnpXIVEoaztPTH44 JHQrJDMoRXZxNl5UVGZmfGEkbW85X2czUEk+PFU3MXVISEBpcW41Cno/O2ls TUw/UkokOVY2NzFSNFUhI0l6fVdpbk17SlpUdE5gMlFtS0BwdTJONFdhYGBO eFFmWCFvdCMkXntYbXJ+Kwp6O2okPGNgV2FjJj5nXnFqZDsrTXJqKi10NER5 fGIjNmJkKitQdCU1cERRZmk9d1BRM0ljWm49OGcmeHAqQ0tFJHUKeihkYnxi PE5tKGNmKWo8LVlOWXtmR1RCST8pKlQhZ0F1KmZuMWhIRThYdXowa0hVfikj NGs1OWElfSM9ZFhfVWdpCnpJMl43IWFeeVpqV1NuQnhabnR+Pngtc2BMR1A1 XmtVPkw+KVRyQTY7MENAanhlTDAxTytPPTNMVW4hNSo+K3xDOwp6I0BKOF9I Z0ZiWDBuaCNJe1FVVSVge342R0g7K3I8NFRaeElsMD41e1Y5JGNWKnE8cEVL aFlHcyk5TGg1ekhtSUEKeno9PE9vMnRYMXtDUjJDdS1BRXUzM2krcj1KZXwo cVdTay0hT1Fve0ojeW5taE95TiZ0R1AkfGB1QGpiIVdrRUtkCnpGSnleTj40 YClWZWt4WmltR0NLQ2loUXxURSlXRSFzQVE7T3dOfFUrQiRvVmpuRm9iKGBL bSNYTTdtTmZRdVNKYAp6KjJHRWJAKUYpKHhWb0Frbk0kPTxmfjNfVjJ1amZn P005PX5DSjBQWCZyekxidilQJEBXNyRGaC1ydyRhZGxPVVkKemIkRWEweDxB MERhNEVYTztqbC1MZEpDb0stYHZ+YGFNRk9KM3dsI1h2byN1QlEtaTRsSzBL OS1NKTJWJldTcFlpCno+ckdfb15paGg9VUAofF9WLU5NZSlvK2p0KGVQdTVB Sz9IMTAzfiFxU2FmN3piWShoWWElRXczV2RKZlRGKSVHTAp6R0ElR01SNUND K0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVzfDBXX2JX SUZmbE1LRmdZelMKakY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5r dlhYdTBtamZWSjN0KgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf bWVyZ2UucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfbWVyZ2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZDgy OTlmZGNiNzI2MDRkMGM5NzgxNmQzOGVlMjVlYzUxNjk5ZmYKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDExMjcKemNtVi10MWVwN1lQKTxoOzNLfExrMDAw ZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDF6Cnpt QzxIdihhcH5DeXVJd2QhMHBrfF4zJkF3JEg/ITskbmVVX0AhUSs9KjRPcG47 ckZKZj1CY2FhIU5Uc3YjcVlKWQp6PiQkcUAhXkgyISNfKSF6V0t4WThwflBO d3JwR3BqIUVlcChMQT5abiEwQ0lAP31YRnZXNSgpZSRuMCoqPzNkWmAKenB4 ZzA7KGU4fVk/dmQ1KnVIZj90c3A0SjQ+TjIoRWI8T04rJExPUVNWUkR3QyFI K2ljQFd9QSZ3KHNlKl5YPG0mCno9Q2JZT3ZHTUR+PmcxajI7Rns7JG0qP0Et P0JsU2Uld184MW9hbyt9PUdtMyg7Oy1vNG5DOTcoPD0yeiE7SHs/Ngp6WFlB bXZAYVYkRnMmJVc/WjBwfng+ZkVhRDwtcF84a0tAcGU+RHNBYmxgbWVIQ0Jl d0w8a2dhSm9rZzA7VTNqaU8KenAwJFUlP1NiVWVrbTFkWWk+cXZpeWlKfFpW fHVWYXl6cXFZPGlGfElyfCNtdHpzSSskLWZfNj1mQUhxTz0rfiNgCnopfWAm PXlXen09O0srI0kkQXsrQnF+NjdhPUZfOSMkJSk+P2gyNnUwPUZ5XzstTVok fHFVX3diPUZ5PyQmIU93dQp6eDdAI2crcjU5fSZZPDFGZzUlN2RJPztvXzAw MDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+ MHY8XzNLfnpZYD9iR1g1KHJfM0RhR0RufkV6UWMrZi09aHQ/ZWY0Rl9aVDF1 d0YlUihMYl49V1dmS04wCnpGcUAkSz47MS1vYjY5N2AtXyRwfkBPa21QYDwm PFp7cURAK3hFI2s3IVdoJVc1bl5uN1ZxJWhUVVkpdSZPLXd0VAp6R3VIXyQ4 TlY/Kko0Zjd7cFQ5TG1PeTBnVEhTQG9hdnU4TytWOzdoT2FeYjlteWh+bikr QHAqIVo1Kk5ReVdIKnYKeilXZ0xgT09MNTElVEhJSFFDUTtnY3N5PXViIzJZ e29MWEw4ZTZmTmpfTzg0ZkErUCVISCpGak51Z35aNmZ8c1VnCnpLbG05WTVD a21vZytkYDM9eHtqOTAyN0h1VzB2SWdLT31BdG1TckZpTyhjPndOSVpAUiE/ TExXIzFpWjJqM3dESAp6V2ZgT2hwY0tKbUhqfjRXSCgtb3VUYW1ZO1NOdEA/ XyNxZ0pDM0JHRElEUWtiZ2tlKD1sd3YpTlFnSGN2TDlpbFEKejh7NiszISsh dm5SMEl7OU9zOSgrQFAmZGsqP0lyckJRaiprRnNScmxEbUdnej8oJkZ+JWEt S1I9UHpIa05zPXN5CnokYyZgZWdGUWowTkxKKDxHVChvY059PyF8SFhCMWBY QTR+c2AmVis9NEVHWkBjfG5qc2w0V0p6PmRMUzx2N2FUPQp6UGElfWMpZTZX cFJqcj53Mjkwc01gR1BeSlJUJmh1KFAqQVIySCVDeDhec0QkTztlIVdffDxD VCR1TmIyUVhEalkKenctMiR6V0BEeCtsMkROKSpzc0B7MlhPZEQqTl5aSXQ3 dXdubV9xTSN5MnA0VFljKjdDdigtQSQ1JFNlJmMlckIoCnpEekBEXj5GOTlX d003T2diUiklNHVoK3c4SVkob2NWPnkyVFduclpBQ21hREIwMDAwYmJWWFFu V01Pbj1JJTlIVwp6VlJVNXhHQjdiUEVpcDFKRmZtanpGZ2kzZEl5NXZaRmZ9 P2JGZ1RlZDlzbUZVQzNIbnRiWXgrNFdqYndkV05CdTMKdDA1VUshRmZBfVNF aWZAdUdCWXxmRyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJvdlBESExrVjFuJk9Q eVlZXwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVyZ2VfYW50 aV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X21lcmdlX2FudGlfam9pbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uN2E5YWE1MWZjZTlkNzc1ZjE2OWY3MGQxMTU3NjFlOTgxNzU0MWM0 OApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTU5OQp6Y21WLUYyRWg0PVAp PGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA5M1Ap dC1zMDAwMWAKenNOYG1BKGFnPjl5dVIkZHp3TilsP2E8TmspNzEwRiRuVkk+ QFhPMmIrMW1Cby0xWEFhXlZIUHopejxYaztyRzB+Cno/NTMjWnNIKjN4dG1u YlA/IzBGTHc2KkhDeDlocE8/OUk7ZChiNGs1I1A3dyVAVztzVCpWcHgjeW0o VEw4S0p+cAp6aU1pVzBoezBIIyVXdXVATVpXMXchMEEpTT5WPyRzbC1UZmsm Z19ISD9UZ2d6dD41IWEhMEJQZT52cWxUcnJ6PkUKenl5KncxO3Q7Rmk4bXtB QSNwYGopPmB1UHNURVhYSiNwc2dOPy1IeHhFVkpaRHl5bDcxP3hNekRkWS05 YmlsY09rCnopdVlFQCFIK2lkQHlZUCl4QWdHSF5ZRjs7PmJDRmN3ZVJWKV5Y fHNMIVMyUyNAN35fX3F7KDlJPUFZfjNwNn4wbgp6QDlNU2I7K3lIPW85Vz0x PyZxX3N0bXcwfT5iJCt9KVlTOCglVmdeMG8jQH0wPS0hI2A9Q1k+RVg3S0Vg PmZAZDIKejsrKmczdipfS0o9aUhhPTxnbHBFWCFHc0heNmJVIT1DYllPdkYr b3FAI0AyPShyVmtpaU01JTJ0SlE0dD8jSj0jCnojTyZqKj9CY0hNO0h+aUkh TX16dnpsPyptVm40Sj82UyFxUyQoNHExWDFKfV9afEw1Yj9CY0tHKk9UU2Rs SH1CcAp6PGphYDFVPm5JejhyTS1HO1ohRz1SOHNabTtiKXNRcXRSd3dtP2k0 KjxMQkYhPUd2OXkofiNyUmtJJDd9OyM0VUEKenxOcSppaWhIT35uI3heeHUw RmNhcXEqI1c9R3ZDIypfR3drbDxWS0U8STw0aChUP0tLamxPNnchKkR+T3o9 NE9sCnpPcXxZUGRheXZjP3Q7N1RnWTRuMUA4LWJqK15YckBzX0VMUHZgaUd8 QDg1e01QTSo8WnRLTTxBPndtaUpmeFBnOQp6d08xREUtS15AfXRNQkIkPyZI MWIqe0E1JnJ8OCRGKFV4Y0gtbUshIWpwXjhAO0xDfk4kY1cjXmh2MzRJPmZO ZzEKeiZXeiNCak5pekktXlBhQyNmOWU2cXFsXkJ1d0ZqME4peUQ4Z3lHREs9 aGRhJiNmSUwqaDI2dTE9RnlfKSl+NDs+Cnp5WEBZJj1GeT8rK3FtdUV5eW4h VD1GX0M/LU1afUR4YUg4SDw8RnR6Jlk8aHN4OThOUC1vJTk1ekpTfWtmOEA9 ZAp6LU5KKzIhR2gkQHB4ZUJEK1BpK14lJTByOWYheDE9K1Baej8lYncpVXBY JUFSc0dPYyQwMDAwMWJXJT1KMDZeeTAKelcmaSpIMGIpeD5NNGJrXl4wNUVf MDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VTAwTD1BTF90KFkkNzVnXjEmbUF9 CnpmSTw/fCFvPHdOJUVyI2IhTzZ3ViFeRiRTRkNmVDdQPlliVGheUUVveFAr dlhHP1I/MW9WPnpkKEwlYWskT3RoQwp6ZlRFSGpzYWxramxfPTdwcTZ6e0tR VnFmO3EoeE8tTHNMc3pSWXpBKC0jfUh9KDgkPENtN28/PUdqal98UlYhOzcK elRSVC0jZGswNCshZGkmNCNUaU05Myl1WS0oaUkkOFpySFRBQldkeVFeeiFv Wl9WRHJiXkFHU340aCloRyMrRD9NCnpMWGZxMWdAJVRPZHFoTT1NYU9zdSNt Mj1hVkFZYXtxOXJVV0RaO30pSXlvZzNrQ3JyS0UkSy1hbmZATUckPU54JQp6 YyhtanBZdz9Oal5Vd0R2Q0BkOzIhUSs9d0JyUm5nQU9Jb0RhVkJyMjNTP1U8 dnRtLUtKVzhyLVlVfUQ3OGs/RzEKelRDcihxTClIQDBvfUUrZChiM3R9LVA3 Q0dLY1Q7Rzt2YEhobGMhOWIjc0pGJDk7ckZnWExOWWZjRm1rTXlLbH4lCnp4 cFV8QSZCTjMoZjVFfjxLc2AhfUwzJXVMbW4+YVk+Iz07ciUybGlUPVlhSXx1 ZmYhXmNIUjA3UTxhcElIZntweQp6QGhJdW9Ud0NYe1ckVSk+TyV2dlZeaTBA K3NiJU5kVUF5PH0tTTRZbXt7MmVHQSRGakRFPVVoSFRZITR6UFheaW8KeilC JmBtWnUhQU9oZHF1UUokQyM9QUlLfE17UT9XUHtiMFlHb1ZEdUljOH05JSZZ bkF1SkgoJj44ZSRodFVBJVBLCno8TWB6KFNGaER5emozcWlSeDFNbTtJWnd9 P0s4KGM/JWNoMXt7aWthaE58VnI+MD1LY2N8NS1NO0tAX21YJCVEcgp6bSZR PFNkM05YZGk8Y2crVWNZKCFqITBXUC1lM0syfEIxKCZrRG9xJENlfDw0P3Rs NkUrVCtgJj8+fk1MdEw0R2gKelUlJWdhZUUkQzkmdEdELUpibS1fLSNkXjBL bVkjeVByREVzMT1zLXFDZ1QtUiF8PXE/MDAwMGJiVlhRbldNT249CnpJJTlI V1ZSVTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5c21G VUMzSG50Yll4KzRXamJ3ZAp4V05CdTMwNVVLIUZmQX1TRWlmQHVHQll8Zkcm KFJnRD07LVdGZmh1T1JqZEYyMDAyb3ZQREhMa1YxbjV2ckZ7U1oKCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlX2FwcGVuZC5wbmcgYi93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZV9h cHBlbmQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyZmM1NWQ3NmY1 MDQxNDA5MzVkNWZhNDIyZjlhNTA3NTQzMWJiYzMKR0lUIGJpbmFyeSBwYXRj aApsaXRlcmFsIDk4MAp6Y21WO18xMXRRQVApPGg7M0t8TGswMDBlMU5KTFRx MDAxJW8wMDEldzB7e1IzRGRCajcwMDA1SlApdC1zMDAwMDAKejAwM3JkKE5j e1dIaSpGb3NOeFctOyQpVDNhLSVnR3VIKFV2SGc+OHpkWS05eHUwRk15ZXRO TSVncz8/P3ZfcG9yCnpOa0Z7bU1aVzJmd3Jvem09MWpvcHJLc2Vtc3BuSXw+ UlEzKWpsb2x3eUxGa29jJmU9RGlNaVdkI3BgNm49JnJCbgp6cH5QT0kkNiVK c1UyKTZvcXs/RyYmRi1ob1dfciUtK3JFRj55QHxaTj9BKlZCK2B4Z296d04l aT9jS3FHZ1ZGOFgKeiFoXnJUP2NUKE0hb3UhXyliUVRMZ35HJHtpYDRHbCRB KiZDQDVSUk55M3dQPiNfK0QlYWdeQmI7bW5IUyZ5Q0I+CnpAI017KDxqJFlX JkdGXlZweVNidzw8RnF3KHZReTFeMGVjNTxrT0psKFZedGprPj04KTxrZ2JW KGVtY2hyMDNNNgp6dyYjNTEqT1RZZnJMRXVkKTcxMFMpYiF9cnJzJnRGPUd2 OSUqcihSa150dFBRPkRqMn4rP1ZPdnNwe0ZiKnhCXkQKej90PHl1c19OWFQ9 LS0qXitxbWlBbiFOQ1k+KXgjQztoWEg7eTZmTXE/QjJUUzsrKldAdD9jMmg+ ZzFpKzw7KDJpCnp1a0dReT9CbFFPPEZNYEh1O0FlTD8mN2BlPGd4REt6VX0z KT8maC1aPC1oT2QhMCtnQEA5REpnPSl2JmwhdGQmfgp6QDlWYmw+Y2pCdHco I3Q/XjZiVSk/WiklKCRNb15aMVZxPTIwMDAwMWJXJT1KMDZeeTBXJmkqSDMy O2JSYXt2R2YKejY5NTFVNjlFOTRvRVFLQTBrS0kkS356WWA/VVBrZyEkMV47 dilLVVVMVUVVMSNvZ1dBb3VWITc/eWtpaHt4Q18lCnowOFA4dXp6bzkrPWkk RVdkfkAjRXYmJTY1YGpOc3BRUyNKPWFQZEM9TEhTJXxWcGg9cnJ4RWRYYUNE Qn5WKlA/Ngp6T1NvVGlhZ3RLVlEoSCozSzBUKiFrZXpQbjl5KCZSKnxSQnVE NXtqTCQ7Y31vV3duSlFCajB4K2hFIShaRzR8YjIKejU2Snx1cVU2YWkqa0pI QFhOZE47RTtAbXNBU295ZWVMZGxJMkstSGchTz5WZml5YjZSTGZrLTxKU3B3 dDFQT3VICnokQXtZJmNzZWBXeSN9PSM2Qk8jQCFpJmhtSGQ/dWF2KkV0M1d1 UUZOR001VXl6YCklR256ejd5VXF8eVM0UGtoRgp6dEZSaGVFdXg3NypsY1U4 OTtkcUtUaXIjTVhVb2FLNFA0QWtqX2QqRD99dnRuZ3Z5UUNLM0xwSz5CYVYy OzR5NSEKekZjcF4+M2dSbElrZihIQ289WCUmUThKR2BtdHVVP3ZuV2MmR1hr Kz18NTx6PikrSy1iTzFSKE1UdDBfbWJBUWpPCnpidVl3e1ZHQXsqTmlZPWBX VmI2MlFwdkR9cyp4RnR4IUd3QSk9MDhjdVJOYGdJYUchRXApKWZ6c2FEfWFT e1k3OQp6T3ZaSXNYc1dCN1FYcigyaVN7Wmg2R2RLYGoxWDVRaW9FaV97elB4 aHpuIUglNHc+JSYwMDAwPE1OVU1uTFNUWVAKQ2dFZ3hGCgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZV9zZW1pX2pvaW4ucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVyZ2Vfc2Vt aV9qb2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Y2U0ODM5ZTAy ZmQzZjE3YjVmZDhlMzU4ZmYyMDQwNDZjMzhkMjZmCkdJVCBiaW5hcnkgcGF0 Y2gKbGl0ZXJhbCAxMzQ0CnpjbVkrQ1N4ezM0Nz09VHFFbjsxWWIpa3pSd3ZP NXM4eFRTMT1wZHBFQlFTX3M2ezspKFI/I0JKU2o0SnEzUkpCWAp6UURrWVBo IV9AQVIwSXJ4a2RURUM1PWNUNHZXRn59RUh9QVg/b0J8JE9ydCphO3J3VUwl PXc9RlE8YSRUPDZ7NU0Kens4MT4+OyNoMTxsR2o3dSVGb3coSCUlOW9wLXx7 TWlFIyhfYztqUWRFPDEtZSM8N3pJITlsV3hPdERQeDlEKyRGCnphfDlZOysx UEJtTTJnN2UydyZpd29QPm9VY3pXN1I4VVMxSTBLUj51eT5vXl93YkpRT19l KWJ4dWxXQGI8WnZCNAp6b0AxQj4oSFM9OGgpcGE7PlBVcjJ3KnZwNjlqfCZO MyRMVns+ayFscnQ3JnBlRjJAPV9XSzN0NkZMMXpDcksxO2MKekg3bnVBRCE1 R3pRO2x3eCotWml2aW9yIVV4PHRAaTZ2LUlTcTUxQkc0b2Q+NjFsRVROeEor UUg1Wloydj47dyhjCnpyJDspfiZTeDZ1aHtAZnxORy15KDw9P31wbmVgS2x7 XnVfWk03cnFfR281bGY5SmFHO1ZESD9sJlcqX1F6XnFFYAp6KHJEY1BGbCk4 R1plZUFaZnJwND1UJWttU0xaP0ltRTBpdnlhcWNsWXZ6MyNMQU9FRnxlX0Ek QkNGblhROVY3RHYKel83MzQwOGB1TXhkej11e2pZI0wqK05hYE5sa1JWbXck WjRydypvSTxJflRUZFV9KChja2VxRFRgaVBmKHRvQ2JACnpUPz82ZGpNRUpV Um8jckQ3U3dqUlZKVTNtSUg1NzhtNXRjTm0rKj04cXNJeWZKQmhxVXVmU3Ir QFdQO2NGZUFHVQp6T3gxd3VyKjVhalgmSDV4U3FMTyo4WS16RSN4LSkmaUBL dFlLVWh6K21pOXdzYn42b0I2VUBwXk5KcE1VclYqPnEKelpDQX1lcz4qPWA5 NTFzJm5iJjgmTig0KHR3c0lSVldSJGxYckZldCppQUJ9I2NCbyo+Qm4lM2lX YFBTKjdeUTckCnpfOCtRfDNNS3Mtei14eFZOa350Rnc4S15uKW5TLTBoKzk+ Uj4mb0dCMSpLRiEtc0NqJUFxfnwhT3xoem45NWRzPAp6V1EmNFlDTGIhMTRQ NGM2YTFKQlNzLXs+fUxsITAzNHNnd35LMFVXZEpCQmsmXiZsM1Iwfm9qS3h2 KktQVyNncDgKeiViPEpeOFpNPUhOOWp8TGx5Q3FRMXgjZ28hQF9nZXF2eVNq ZVckJndvU29oUjVGNH1XQWVNT3xaU3toV1peb0BICnpqdDx+Y1g9QnQ7MkE0 KSooSyo5M0h1TCtuQlFjM0x7XzNqNHVmRSQ/LWNsMkdfaHg0IWlKSGNYQ1o+ K35oND5kWQp6U0ZkWUp1Qm99Vms+QXx4azNNWiQrdkYzcEBZSF9jQnd4ZmtC b3N0byFqZEF3TCQrPT95YTcrQUA8Kms2Zyg5dyEKenZSQEdebWVCOFl0PDs+ IStzKVQzYW93b2M7OCVGRHRheGQ3QEV8dFg8TUJuS0pAZT9ZKG8qen12ZmFf YylQWk5HCnpzLWk+eiVLYCVmKXZHPlR2MHtaVEBYT18mdWV5Q2BBS0k4NDVH JF5aQSpOUX0+MjhAVmlUWSs2alh4QjB8SWhlKwp6QUdRYkE5aEYzLTxtY3p4 cj5aTTd3VnFQeUkmemJ5bmpiMl52Z3UhWlhHWEUhaGlzfnM1e3Q7IThMaHhk ZDIrSCQKemBhXk0xUDJ7ZDM1MFFBTz0jQSVmIS1seFZAKVdqaSh9NUBQaG0o QChMemQmMnhqKVQ9K3QxR2ZGWFFVVHNOVTMtCnozQ0Z0JlNeVFVtKl8lQGRG YDFQPE5jVmw7dnB5ITJebSZIOVU2fHQkNW1Mek1VO1Vicj1GfEhIU1IzRWFk cXg1RAp6VVNAS1NfMjwxPTtOS0x+YX1wWXl8SCFqc1AyfSZvamt8JjszYiRZ SSZ7emtxSlE7Nz9AZis/KUBUJCE/VnUxdTIKejYqfFIpPD94fnBtSVk+UD9E PV54UHNfKzZvNWg0ciZmWlluWUtYe0grV0llO01OZX5SdWRuUykjPH57OzI4 SGB+CnpwOzd5MGVWNipfKiU5OD91UEBraHEjIWZCQVM/MWpld05venBfbVgl YTdidHtDZ2ZsIUNOZ1lHV0xWZ0BuNX5mKgp0JShsQXFZeUpuRSZDTldPZWVw ZWorNVFmQSttNko5elh3S1o0fFJHMFJQM0lGNygjU2Y+MzxvcERTLWUwCgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9uZXN0ZWQucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVzdGVkLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWM0NzMxNmQ1ZDQxNjNkOTdi OTVjZGE5OWIyZTNhMjA0OTM0MWM1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxMTA4CnpjbVYtYTFncmFyUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAyTgp6IXFBcVAoU0wpe2I5ZDJa WXRmPm08aDhmenlUMHRoI1A3aHQ/WkNuQSFOVHNzIXx1ZXpANVJSTiM+ZWwr JG5WST4KekBXeyZXJUZGU34lPDtfNF4zQmZqJmQlfTkmK15kRl4zdjF1KVlT OVUpJTRmYl57Y010dUNlSCtzXi03ST9ZWDxfCnp2OXN4dG1FVXhFKXxpeyYh TlRwUHNMO2QyKDdlOXYrMWQ1SXp3RjF3eDJ2VVdvcz5uRGkhWTZWOE48U0sp IUM4WAp6PUE3cDlye3dYVzxNNSM0QFNmdUNwNXBERDtxMDhAPzM+YH5vOFJi fS1zaE8kPSRfZiFtQ0AzVHpyMWtMKm8pMjYKemViVTs4K1R4U2MrS1J9XmNG b1UlJkNjPCZ1dzBtcUVVfk92JmQtRiQkYUJ4bmlJU0Rrd1hsY0MjPTY8eGpO Umd5CnorVFc3ZS1qVWhla0x2VGMkalJAaXFHWnxKa0ZCb2cqeFFmMnp3T3VC akpMUyF4VmhgcypvQGB3dG1Fc1cqeU1vTAp6Kk5mfSZ6M0swfCl6XnlNPWFK UmNpUGhETC1zUDZtKVFGZGpFNztxVSUqfW5UczghTD1pTzlyeCFvRj9HJGJ7 MD4KemhTJURUeXRackg7Z3tGZWpASCluTCFLKDYwMDAwMWJXJT1KMDZeeTBX JmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjB0LW4qS356WWA/Yllq MytDVUhoYTBFXlNtMEMtIWZgVVREMmJGe2NBODlSTU1kfWsmIzQ1XzhYYEA2 RAp6TURjQ3d6cG1tcSF6RmhvXjBuUEJuY1UyOF9JQj1XU0VLbks1N0RJNj1A QiNaSSZCaiFuaGg7UlEpXnBXeVV9Y1oKeilBNj9Sb3lHRkw+cUI+cylvUWli ZFZCbHEtRFVAN3c5V2tre1JTNTRiaD1DcVo0Sj5HMjBqa0RTXklKaTRaRjtg Cno4bHJiTzIxaUMmI2cyeyluUkBnITMmYG5sR3NTfihUUngjJDtfKUVPM3hW dGtHV1BXQTwjLTxgIXBDI29EelRHQAp6bS03ZTRDbmwhXkxIUFYtYGZEJjQ0 MjVVRCV8OyMjZz5lNDQ9PVhVe2djcVdWT0EkXkBtWTF1KWQ+fWZ2NjJ0Y3UK emk/NlAmXkQyQCtERG43KDMxTVg7aUk8KCtoO1JNPzY/cVByNms8dWBWbHVZ NSNVd3lqLURaJn5HRCFpd21ZcDNFCnpOdlROIT9lMTFoOFghI344NmA9ZV9I NVNwbCFwfE0kdGVsNGQ5dkFgZWJpZTlJWj5TantyWmc8U3dzPTI3bHUtYwp6 Q3thbG9fVngke0Jxflk2ZW09amlIWHo5fjB0ZGwtSzZJISQ4SVRMfkVPMnkw czBJb31kaWY5dmxUTj1fVnZ6N0wKemlJbUY+R0paX0J7M202WlBKRX04eGNa NW1gT2tlKyFwfDxRI3VYM3c8bX0/fGlsP2BXJGtKTm5kVFRxQyQ9ISZPCnpC K0c/anNwN3g5eGFBbTREWTcyO2dOZjRMXlEmNyVRK2llRnRFMGkqO2lSNTZl dXdxc3hgdUBsOHh7P1dxeWAzRwp6MUxMKVVBXnh3JUojQyRsRy1jUnFFQzJ1 aUMzSG50Yll4KzRXamJTV1ducHc+MDVVSyFGZkIxTUVpZkB1R0I3JGMKekdk ZVVoRD07LVdGZmNmb0JfMDMoMDN+IXFTYWY3emJZKGhpWik5bV5jPnBwbkYp JUdLSVZ+X1RSNUNMPEcmRExlCmFIWStlU0l4c05HbXNQOSkwMDAwPE1OVU1u TFNUWSkhYzFAZwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVz dGVkX2xvb3BfYW50aV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X25lc3RlZF9sb29wX2FudGlfam9pbi5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFjMDc2MzMzNzYxN2Y5ZmZlOGNm MTNiYTBmNDdmNGNiYzIyOGM1ZQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTc0MQp6Y21WOzsxflUxSFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEl dzB7e1IzRGRCajcwMDA5M1ApdC1zMDAwMiQKej4tbnAkPThLTnBkNDFQcll0 Zj5tPGhRdSR5fSNfbSNfeisjQDVJSUwkSD8hPCQ/KGR7QFhPNWMlKzIhNyZo cFJECnpeM2w9cSk2P19TKjdWS0lAeCNSS3RGN2oqdmdvTCk9REU0K3pRNjZi eCRNOGQ/VE5ZREhpKkhzeDlZT0E+NWBWOwp6YmE+VHVkRGZWbDtsUlB8eFZy MWEjcU12LT9uUz1vT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95Y1lSeTFl VkcKenVJSXdVP2Q8TE9LKW1TKHNOeFctO3VAfndVQiZCaCVqezBSPTMycSRX WDAlYCkkaFE7PyFDWTViOW1LdGRlK0l4CnpAWSZoKio0RmdiKlkmQk9kY2x1 MnBea1RTaWBEUCQtQHYrb3NHbUBxa1RzMmc4VDllVkBhKHREJkdFKl5ANkZF Zwp6LXJufVkhZ2tmJGwtfW8+PUpjbExecl9YXms7MWBzPiprLWx6M2kqMz0o RHV5eXVJenopYnJFWGlfWD02KTcqeVIKekB9MSlGbiN8TEIoYmtFPHo7dztk QHleZmomRERJPStLc2ZaVCUoKm4lRiVoIylzM2E3PG1CXzUoYW9kZjs+KXdJ CnpUaUAhSDtfOUwxXnJNLU5FJUVUPDtPVXYkeUB8RCVlJnpGYDxuZl4yPSRQ ZDRxMjErez4tNHdYPENYQzJ3IWVsawp6d31nUE9VT3V4KzZTWlBMI0VedD1Y MUtoeWMtIUhWLXM7cXN5TEd6SnF3RDNLPmcxajApdHxSdThfNyk/KkhJJGoK elI0MTJJUXVYTkohbyUqWnVqJDNiQDdtdnpmdiFTeHI4aytwYzw8fUJAOTRB Qm9OVkckREY2VGUrTk8lVXpVPGxFCnprZithUWNCP3pKUn5FeD9MKWhHcHUt JFowalQhVXAjX3J+Xz9kN3JUOzsrfSpqazRmJmRhKiZ+Kl9Hd2lsSH04bgp6 emkyU3o+WiNZKmpFdWxpPEk8MWYmV3o1SVVEZSl2KVpCWEI8ZWIqbWl0RkMy Oz9SeFomNVBqNWlRdlBNPkY+SkkKeitJWiZhd2JqKiRAOGlEYypyKF4hclI/ Nml6bD8qcFdrQVc1aFM9WVYqVzhISSlRaTs5aHZtP3I8aiRZIyp8eWwqCnpq bm1TRytgZlJAeW5mb2RlJmZyWSsxLTx2alYjKV9lYUZVaHUmR3dCciZZem1h TH48JiZDNz93ejs0T0xleFIyLQp6JGk7Zlh6SEgwTGd6REl+eXRpITcmd3RP KGU4MFBCJEhSRW0pc0QpPmZZc0lYQ2k3OUIwMDAwMWJXJT1KMDZeeTAKelcm aSpIMGIpeD5NNjFhR1hEOSN3MDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VTAw UT8oTF90KFkkNzVnXkBxbSR1CnpuU35WdnVyTTwqO0A4MigmY1ZzVyZCPz5k JDFmbCNCckdCLUNONjxqNC09Y0RsJXpEVzc5SlR7SVNENFgwKGtgeAp6ZlJi UGxXPEBDX1dmZiQxc2o4YEtYZm5nS0N9P1R4PTt8cng4eUZmSER9WTU8T2lZ IXslI3JPaUgmY0BuV0k8QEwKenUoWXphUUx3ZU1jV3tKZ1ZSZHFMRi1MVyl4 dlFIeUQ7YEB8b3Q7QDMmO1lCNENxbTUyOHc3bTdadVcoMGtwV0JsCnpgM0Qz QjFxSnh+cD08RkQ0aGFiZl82fklsM3kpdyQqNWM8TTg1SkU5OHk2NEtnUV9K WUF0NTJlSjI1RmFCXjU9Qgp6ZWBII0VNckt4YVBPZCo7RXFWRE1NbkdJYVZO cjJXUER5RDFLYG12aHRZdHRkRDdMKClxT3ppQHgrYUxBVSFXa1UKekhuWG10 cH13eFYwYk5UWUlLLU8zQXkkVD5yTVY+dE03MmZ9WiVaM1FPTFRoPihTR1Va MEJkUlEjSHl2TXlRakNXCnpmNUpxRjRxaThxbz1ISkxsUiNRSkMmUlQmbkt9 KXNXJWBWbnZ1NGtrSjdATzFgNSt3JjdBezxiQEsoXnwjYyhaQwp6bW4+WmRf UkkzK0RefHs0d1FCWTFSa1BPc0J9TFhRVHFxfEJjU2d8U2IjTmB5bWFnQmgz PnNuXj1kMSRoblg/SigKejZJbChVenpiVHA4UjNeQDhANmwoK09sbz9qLTdw VFNBK0QtP0wkZzFGdSFjeGd8S0RBP21hK1R5bSMhfnhCdE1MCnopZ1YwfVRW UHJ5MXN5eUgoaTYxbjVXKzhxX2tqSmZiS2pBcCQ3WH1QMGA/MTMlY1AqMTww bm82XiNtT3tnJU0oPgp6Jnp3RFg5dVo8dEVrUElCUGg0RGxEVHBFSClNYm8j eHBNV3x3ZD50Q2B1bEYpbiNoMTtPVkk1KkFtMFJDekRxY2IKekxBPyhOVTUy MiRfYl9hXmUqZ1oxaGdmb0QoN0ghcEVzcX4jWHUxRjc+OWdscGElSXFxTG9i MWV8SygjMGhqfkFFCnpfVWFXakVyRiU0LXZHMU4ranM4KyhYfjgoZzxWVSlo bVc3JGV0IUdxPm88Jnl7UWRkIT1pam1UI3M5fmJ1a1V7VAp6YHUqcEpLZH5Y Xj1sfG98YEA0VnR7bEZ9Z2FNXjtWPSk+WHtFQ3VYO3s5M1JUPE53fDlYfjl9 cSRSSmV+bjBfSHgKekMxSGpiIUhOJFBrV3N5b1FIaFVhMDA4PDJpLSVHYVl8 UWB3MDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYpJUdMCnpHQSVHTVI1Q0Mr RyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJVNldaRXN8MFdfYldJ RmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1CRjAwMDAwTmt2 WFh1MG1qZl9gJGBQCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9u ZXN0ZWRfbG9vcF9zZW1pX2pvaW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVzdGVkX2xvb3Bfc2VtaV9qb2luLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGU4YTE3ZDQwOTM0M2VhOTM3 ZTQzZWJiNzZlOGViY2UzY2JlZTQ5CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxNjc5CnpjbVY7QTI1fFhfUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDkzUCl0LXMwMDAyJAp6Pi1ucCQ9OEtOcGQ0MVBy WXRmPm08aFF1JHl9I19tI196KyNANUlJTCRIPyE8JD8oZHtAWE81YyUrMiE3 JmhwUkQKel4zbD1xKTY/X1MqN1ZLSUB4I1JLdEY3aip2Z29MKT1ERTQqelE2 NmJ4JEQyYz8xe1BDSGkqRyt0SjlqcDtLYmJSCnp3WVRjQndDUiRULSprQUBi JFFtOW84aUYwP1lPJEAjS3JEISZGKVJXPjAhcH1jRnBYai10eEVSX05MJFR1 O1RUKQp6PUpuRjxfYDFDN3RnaCQ2I08+X3VgTTwjSkspbVNedEt1eFA8VmR7 Y2lQUD8lLVNtam5AUml4fHF1dWh2PkdyX0UKej8hQ1k1YjltS3RkZStJeEBZ JmgqKjRGZ2IqWSZCT2RjbHUyb3xBVTZ3ZGtuMzxuUWpeemBCOGBwSFEyU0hJ MEU4CnpeenE1Pz82PjlTX319MzY7XlgoYD1KQFhKYG9oOT8pIVVUYj1iaCZD cnN3cGopWXk+MSFGQjhBcFdXV3wpeiRPYQp6KzRTQXNfVVk7USk3Z3Y4KXF2 QzdoVTQ7YDtfI1p4KHxYYT9pTlV+aCZDYz04JisqbVRrPEhiNylZXkAtdXcw e0AKektnIVgwKTc2Y29zTzA0SG9ZQnByPD5KZTt1VXBeaWw7WjI1PUpjYlBr MWdAPTxLTzkoO09VdiR5QHwtSGdWTkxTCno8QDJLQ0B1MSk2bkJNMUA8bnAy MjwoQkw4eDgzOEZAYShwe3dScWQlbGl1cG9tJURZayhXQzMtcDZjWUNAOURJ ewp6IXx0dUc+Qll0RytUVzZhdTBuSUFIPGBTNkA5VmJqPmIzOWF2LTlvN3l1 UiQmLUhAbHhYTGhTUXhWaH11Kz5meGAKemJXKThPPyZoLVg8KzFHSXVraCE9 KlY+Sjs7QzZia0xGVTwmPDxedHIofiM9aXNec2diPExSaV4qbz0oOFFzbVc8 Cno8STwxZiZXITJVcntVP0spIXV5Nis8TTtSb1l2UWg+KXgjNSgyZTJFaXtR JE09aG1nXkA0Q3wzYztATX4penlqYgp6PEckdzlyMG18aCp4IW9SKz0kZkZp UFkxRj1GeV8lKDRwa2NwWD1HUyp4UVpNKHVVbD1mWk0hJitQaShAJWJ3WlkK emxiRFN4bXlJamIpUWo0P2UlaVd5JEhzSzlzYUNKMlJtSCteKDlNWD0lWkow alpwcEBlcHFEJHkjZF5XTFlzPClsCno+ZSNsdXdge197WlAzcXUmKDNfbXlK Kk01YylZZjIqNDIqNiMoPnE7XndgKy0rPGUofTAwMDAxYlclPUowNl55MAp6 VyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DM1lkIXp+MD4oKjFLfnpZYFZfK0Jz ajctY2R0U0VxbW5UWmo8NG1OZlUKelBBK2F2OSRyM3YwWU0+UTVtN081M0F9 b2sqZChQU3JJRUdwJGpIaGBGdUBoYkR9YUVhNShwQFJNVk04alJNcGd4Cnot S0MrYXJMRHNaKlBAYFNyKkJ9V1V9UzchWU5pQWhWS0tLKnYkUjZDKlVEMVVU OTVeeSNtM2dvLWEqMDkkPVNzZgp6cUpgRFgtTk9waXR5WjMxLW1HfFJWUmQo QldrM1YwS0U0UHNLWXRKaTJuMnkzczFfTnBiWnwmJFNhXjc3TkhEcTwKenxB QCVRJE8hK2E9JFAySkt4OGUhQUBLPWBOeSNheEFVJnZCQkdifitCS159ZEdQ QU4jdzFtWHg8bVRsVTZjIWJTCno1WXwjczNYJT5qRTNjQG1zd31GbTJfPmtk bVgpO0BOUUVjWVJufEF1SCNSa2c2Wjh1ZGd0ejNrd2xURHx3cylYdwp6PT4m Jlo3ZFhWYVFNQn4qaEomY1NlJlRKSjBNWEp2RmBRXz5PcXZBTkdJMjZpRW1N JVIpVXh0PWYlSHJiNTEkSXMKekdJPChZJWsmdkRwO342bW9gY1gqJVF8PTd5 IWx7ekFudSNDMElwQG0hYk9ZMGVwI3x+Kj5aJG1TVmRPTW5gYlF3CnpjU2lW dm0yZlJIN3ArPm83JkY5eEszU3Y5aWUkXm13RnRpflVjR0tUKDNhJkpIZzRM Q0M1XiVTdlVVcj9tZXBJZwp6MGQ0VyR4UDhhWVU2XlRYWVdWSXdBVSl3Kl85 RmJVWnlWU3pvQXdfI2NuQ3d3KWJQVmNqdmZRKjNFejdoQmc5VWUKekphemdF aEwtVE42T1chLWE2WChOe1ArY29jKTU3ISUlI2cxZWdYUkElMmtrVyFZXkRT b1dgS3VobERPZV9fZ2E4Cnp3cF9rKF5WViVGQXJgKiE0cF9fR3lCSnotLW47 K2NBKG1WanslRyVHVkImdnJfYkc7IVRoRT85JEVHRSQ9RVh+Mwp6N0pLI2pP JkdlQ2h0SUtWMzRRelN7aV9lSks3UlUpayYoWVZlRTlHUzdRY2ppe3JLKG1f YThyaHtTRn5FI0RZVjwKemV0ekB4Jik/c2VnJVUxWEBEelBte0RQJWB7ZkEh KndxcEY+ZXwlYzdSdShjeWw/QTM+MnYkaiRBeDV5YCF2dGhoCnp1VmhyPkJO ell4YEtPSnAod0J9YTAwMDBiYlZYUW5XTU9uPUklOUhXVlJVNXhHQjdiUEVp cDFKRmZtanpGZ2kzZAp6SXk1dlpGZn0/YkZnVGVkOXNtRlVDM0hudGJZeCs0 V2pid2RXTkJ1MzA1VUshRmZBfVNFaWZAdUdCWXxmRyYoUmcKWkQ9Oy1XRmZo dU9SamRGMjAwMm92UERITGtWMWcrRShHJm14CgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9yZWN1cnNpdmVfdW5pb24ucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfcmVjdXJzaXZlX3VuaW9u LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njk1MmVhNDU0ZTM3MDNk Y2IwODI1MWJkMjI3MzE5M2FhY2FlYjI4CkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCAxMjI0CnpjbVY7KDFVTEpNUCk8aDszS3xMazAwMGUxTkpMVHEwMDEl bzAwMSV3MHt7UjNEZEJqNzAwMDU/UCl0LXMwMDAxcQp6eCFYMn4hRWVwKE1a VzF3ITBBKU0+Vj8kc2wtVGZrJmdfSEg/VGdnenQ+NSFOeXkqdzE7dDtGaTht e0FBI3BgaikKej5gdVBzVEVYWEojcHNnTj9fYHpHLXM7cXN5TEd6SnFoQFEt JSsydz16d04pbD9aVShGKTcxMFcrNFJvT14zbD1xCnopWVNDZztQLSo5TFVO QHhuWT8oc3ozaXV7PWM9c2R1Q005RSNfITlfQHhIKDkhb3UjdyNfLW5HXm1D OypyX1gxMAp6c3ljUzdKRndrIVFqSG1SdDMweWNjNnpadWpLRVRRdXxjSiU8 ZEMqKCp5WVFpIzlvQjNNUktEeHFRX3ZRJTQ0VV4KeldgPyMmY0IodEIrSHJX VUtENlVgd1Y4Z3drMmEwTFF9cHI0QGEodG4/NiZYZncpNX1EXjZiVSE8KzFK S3U8WVdtCnpAYVZ5fD1Yfm5xbyRCTTk+RVdDMj0oRmI5bUYzcnk8a2didi1t Sk9uZkE4ekk+ZilUfS08al5fdmgzcnA8a1hTbAp6KHZSdWZzKFBOT3k2JUdT PjlwektuJntxez1pSGE8PEZNQER0Pm57PzxJI0BkJnlESFhzQz18VHl6cXFj P1opbG8KenZHQ31eQDgtYmorXlhyP3NwOzZLP2N1eloldzV+UGlTZz5nQDgh U2w7PVNuQ3J7fnFCPUczSUAtTVp9SXVIQEJgCno7P1IhaCpRVmRjaFRnQDYt TkorQShWXj8jdD5lKjs7bXdRWilUR3xUZ3h0Vl48PDZrdSZXeiNBaXJ+cUs9 RiszeAp6IUdoZXNmIW5AKzxqdFAkPEckP1B5NmZBeDw8RnF4JlkkWXB3cGNj KzFwb2o1MGQhSk1Rdmc4YiprJTkjMDEwcU4KelMjdG1ZMDd3NzswN3c4diQh azZVMDBJaDBMX3QoWSQ3NWdeMT5eeG5DSj15PCNBI3QtVz9eTXhYWDQ9Rzte dHVACnpRVlRDMXprbmM8a2ckbFQ3X25NTnc/IVE2M24pcCppeFFHakt2RyZw UiEmfClUMlY8Xk1PQilSPCZ0WFo4YkI/WQp6VEd+M2codDcjXmhET0wqdXpG Ri0qdSshPXJ4eHM5KUcjeCp6QC1KZDdve3cldFRrfT8xLXIxTWpWO2hHY0c0 Z0sKekJeZmo8RWJKWT9UQ2lHPEV5T0d3OWk2fj5hSlpLTig+TShhWFBfUkV2 O2YxeiswZz1iYllhIVBWQnJHTmc2YyZ5CnpFJEdIc3hNSkRAQGlxKSM3LSEq VGZuaGwkcTJMNlA/ajlLRjIkRTI2MHgxdHFGTnx+cVBBSXM2aExeVm1ucU1G Wgp6MSF1O1BeNzAwejNManEoZlJmT0pmLX1pVmBobGM8e1IwQW5mXyswbSFA P3RjKEx4TChWXn5DalQ8c2VlNiYofW4Kejh5WGola20hciVhdHZFNmxFN00k USh7dW5lQURBSUdQQlVOV1BeUEhDQmEmOXoqPShpQChUKW1pOzdFMSVoMHU7 CnpJdk47VzxyUUVwbTEkTGwpeEleZ2JAZEdoRWY3RFVJJEZiYHlyTDE1bEFG TGAxdGsmRDN7Q344ajwoMUY+SHleegp6LXskYjUjMWBNeXcpVCFyZ2V7TyVm YSsqP3VKckJkJmdgbDQ/ZHxLSUZjSFp3OzhjTCEoRzAkbUNZTWZXXlBNX3YK eiF0QHpQd3QhT3NjMUpWIyozTyhZeVdNeHIrPEVnQ0FoYllJMGRffC1fJTV2 UG93fj8oQHNnenJtU0tiI2MxUG98Cno5Rkw+JTBfPXspdUxZfjRAZEE4fjl0 SEZWMDdGPlk5Yl9OQGM+bithQzNIbnRiWXgrNFdqYlNXV25wdz4wNVVLIQp6 RmZCMU1FaWZAdUdCNyRjR2RlVWhEPTstV0ZmY2ZvQl8wMygwM34hcVNhZjd6 YlkoaGlaKTltXmM+cHBuRiklR0sKbUlWfl9UUjVDTDxHJkRMZUhZK2VTSXhz Tkdtc1A5KTAwMDA8TU5VTW5MU1RZdHJIeDdlCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9yZWRpc3RyaWJ1dGVfbW90aW9uLnBuZyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3JlZGlzdHJpYnV0 ZV9tb3Rpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2YjcyODI2 ODYyMDk4OTY2NDEyYTllZDkzMjBlZDQ1MTRmZTNlNWEKR0lUIGJpbmFyeSBw YXRjaApsaXRlcmFsIDIxOAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXk1q KkB4QnBBJEd3I29vMHJqajdQVTxRVj0kITlHPHlkLWFUN1k0Pz0KelVCWEwl SmtBMS0kWUxQdjBtZzE4dithTmtLMkkwTjVRKXBsMkA8VCRvRDIrJTZCcm5l JmM1dmxsdTwybGpWTVY7CnpFSj9MV0U9bVBiM2BQY3EyRCprdXgoMD9KTWd+ P1UjI1NhSys2SmFwMV9sOzBScG40TDxtUlZqcmQye1Q3KzhXZQpiZksqITxt X2FuMG5qWDNhc0RaKUwpejQqfVEkaUJ9YVY5Y0kKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X3Jlc3VsdC5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9yZXN1bHQucG5nCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAuLmJmZDdiNTkwNGY5YjMwNDcwOWFjNmFhYjM3ZTI0ZGNj MDZkMjMzYzcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzMjAKemNtVitA MT1zcUNQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3 MDAwNGlQKXQtczAwMDJMCnokPFVVIyg2N1NLZVhofjQhX2JBWChPc3EwWm5A eCh3YjgtSyZ9Z3BPam1xZWQlSUlYTyp2UVMkWVA4O2wpYk1lPgp6PGJ1IWFW WDRAKyM/WVI7Jn1ec0NmNTc5QiZGRW1KKX1HWXVmeGg4JXRJPz55JnxScTRZ UmNfeXoycyVjPn5weF8KelNmU0lBKGQ+bzg8eXhaQ20odUs2cVNKMXs9MjV9 d2prVkVyeXlLMTM/cSNqb2o/TCt+Iz9ZVklATEh3U1RjRldgCnojXiFVaC1J ZHR5a2ptJDh5VyU7eT1VdjM8Y0RtcW8mRnlgezxkTjB4V1RlcXYhUlJ1Iz01 QDtJWnAtWCN1LWNOLQp6P1AwOWlLKW1SQnp+cCskPlZ3ZWppcEokKnoyemdh PFVHM1BSbCg/ZyZnXyljP3E7JnhWWmk0Y3VqRG5qPVZpQ3gKelRFcHBoI3By ZCM9dj0oekVWYm9EeVhKcSQ9enolUldYOWA9KGR8Q0Q8IXM2OFE9UVJxJD8y eFEmfTZYT2FKSnJqCnp4IS1sZj1TalpsZCZURVN6Mnw8LT55Knl3Ui13fk8h MExJLT5TQDJgWXEjS0t6dmUtXj14ZWd2YisrRFYkbT9qagp6PEJaN1dnM2Fy Q3lXeXFVQEsza25FbytMdzAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZH VU5Ce3I7TkJ+QzMKellkIXp+MF5kblFLfnpZYD9OI1loK0NVVCFBJXNMTXNh R2gtTE1fT1psITgjYXBkd0tMbUJSeXk3RndrVVJ6PTA1Cnpee0ROPy1mI3FW THYqSEpJe28wQVZUUU42enhVcW5VQlIkdGBTK3MyYVRUUGgyQFIkWmVAX1Vo cjY/XmVYIz0hdwp6a2lkdStkWXBNMkBwNmI3OXZLfkxZcG1ndyhJazQma0RH eno1cm9EMWRWKEImVzVlNEJgPXExd2x5IzF+K15qTUwKemNzTCNaKjg1Sn5S NVcmPCYrVHU2LUJUezdBfFh8UDt7cXheKnk2JHY/fXprflgqeDdMTG4hZyNY WG9hRmwwdF9nCnpBSVA0NjxBUngxZko3SCM5Pzwjayo5dUVJYiZ1dDtjZzV1 SUNtJkREUU1pPTU8b3MkQkhhRUdwUFJhbCpYLUs2cgp6YWxCbXVtM0FxY2dy QVY+OD1FRS1pcjU8N2peKituRGF6aSZAWDJoITJJbXp3a0JwZGMxT2okO0tO V0smJip2e0sKekhjX0ZwMlQ+Nl9YTCg8Nk1HPVN2MERDNSMwLSNtQXZDK05x Kjl2XmtJSzJsOHZkRk0lRXQ4a252eG5KbzFjNnxjCnomNGN9S3ZLSFd9Vnkw SEBMfmkzc00qejh3UDZ+MXxtfDs3ODlPIXJrQy13UlgzSVQoez1eMSomb0h1 ZmQ1PGhUTQp6PlZ4PCRFe3kxck5Ge3dxezFwVmhEI3A2QzJSbjVvaCU3TDBv bGVCMU58NEZwYGpNUT0jcHcpejk5MEBRdUE1ZG8KeiV6WVB2JGkyWlEmekwl JSR6NkJ0Uih9LUFPWnwxWnNpSVYzI2FYX2FLS3BJP1J0d2o8UyQkYndAXns2 I1RGOzFLCnpyezNSVlg5a3BBRCVZXzBNd0xBKjZ2QS1pVmtmVzNpZUc3QHc7 Pn5wVUMxV2t7MUVwV25AKGk8JEU9eSs2Pk5rSwp6JnFwQXlTYTQtdUh2SF5Y elQwM09IPjxhe297ZWhBeU1qOHckaC1XdHRRJk5acFY5NmtWNE15P0wwQUJi TUdNRHEKeiokeVNjWVkpPSYpMWZIYHY8V29VLTdWSjJVN305SiZgOEkkejh5 WW1gZ0tuWkspTFdGUXBEdyt3UW9gVCQlbT1kCnp6UWolQTRpYThzPFY1MGtE cEZJfWckJTg4LUxOOXtVbTw8fkY/SyVUcCNuPFZ2JF5+cWFJdVBSKiNMX0gw QTdWRAp6M25Pa3E9N3xyfHYtfiZtMlA5MjxKT0FzbjYjeEpMQzNIbnRiWXgr NFdqYlNXV25wdz4wNVVLIUZmQjFNRWlmQHUKekdCNyRjR2RlVWhEPTstV0Zm Y2ZvQl8wMygwM34hcVNhZjd6YlkoaGlaKTltXmM+cHBuRiklR0tJVn5fVFI1 Q0w8CmVHJkRMZUhZK2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RYdE9ydD5u CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zY2FuLnBuZyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NjYW4ucG5n Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5NmRmYjRmZWFiZGQ4NWUwODFi ZjgzMzYzMDQxMjkwNTg2MzNjNWMKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs IDEzMjAKemNtWStDWDs0IUs2b3IjRTQzVSgmT2lYN0cwVG10ZDVEWFltZ1Im RkBhY1daeGl2Jnd3TD4zaGdyQm9xfmxyQGl0CnpMSl5kdUFaV3E1ZncmWmtD PWhgWDc3PkkzVyZzbmpGSnZkSSh4fF5XYkkmPCpANyhYI3owNHFUcHNrSWE0 R2FkZQp6SnchVDR2ODJhR0EtfVhaUio7JHZnVFhVYDR1PXBlRXdoRXxuYTRf Y0o+Jk9NUEhkQ15HTj8lIyhnZUx5Z21vJmkKek4zX2c7d0p+aGY+MFZWKnBR PmErU0kqSTA5OF9sd3Q4NGtYeU9hOFkoVjEmd25ud2JJKXQ+QFZ5TD5+I15z I1FgCnotZXolN24+NGdUTkBZbkkhfE0xUlNyU2AqZU95RG9kOVJLb2lvRyQr RClpSlRBb1ZuRFd9Mm9+S240WSpuRmNpPwp6KDRkNWpOPVBkTGJ0MkhEZyFD ZUNSdFg2LVcrfSUtX09TcDM3Zl5BNTg3YHBWMHRQV1N0fXd8dGZSWVFTRWZY R34KejxwRC05STNfbjVFVnZqbkUxQHxoI0NeI2VsXmJXcDtFMnFpO3trZGVW Qmk1fUYqcSNNOCtwSy03JktYMjA/c1I7Cnoxcjs8WChHUUNDXkFkMVQjVFhG bE9ua3UxMmo9K0wxcXMrTSgjYFVMTUc0cTl0KTFzJSolbnRwT0RhYXN3RHVw Tgp6Vz1SNHJzfkZ0XiZFaDA+WCVmM0UwbkhZUWtOcUc0VSVqN01wMlU3b0Yq PkdaVERZbllsaF9wckk0VT1eT3soazEKejxSSDgoejtYazQzV1hkRF5PYTEq VEFFZDdOenxWJE4mMkxLLWdze3E/MkQ7RzJtTH13Sj9hdX1Gdmt9U0NFbC1a CnpuIVF+PTdJRT0keX1lKHlHaCprRFhkSX5+VXtqVksoRipZeHVxbnh+PjEm X2w9WSZzV1RFYE5xeWkqLStlQTlNZAp6SzN6STZZdXJFRC1WbGd4RDJWZ1Fx NFQpbzx7VWM1MmRCTTRfbnM0cVRAPER2dCMqUyMmNmRmJD96X0pBXjdOZCYK enNjPnwzVD1CSWZBM3BxfG1mQFlndSN7XzhVYihiemI+WHxud2cqIUBVQmJN a2dvVnBacipUZj0kJHlNUVM3Y0h2CnpKbHx5STl1RyVfPzw7dWZobChuei1i M3M5eVJuZ203IWVCQioqQGMraU9WPioqV1VndHhpcjRxSCFRNThzQlleWAp6 K3RebHFDcnFpT3VONmohRkNtXlotUHd9QTRjRWR5diNhY1khKWpGSnhLaDtk I18oZHVxMTwhI3V8X2luVWhSYjcKelp1V3M0P1JtUE0zTGI0OENfNzJWTkN2 KC0wWX4rcDN1fk0meSN6LWh2cTxPUE8jfkhQTHxIZVQtSkJuRGF8LVE/Cnol PFd2NG5VSHU3c2N6IUY/bnIkYHQ4KCsxb0JLV3xQZTV8IXo+bWJTMj09RU44 JHVuQ3p1KT18TnBYSlMrOGsoeQp6c2YtbzBIcz12eihqZWRTN2gxXilOazZF Z2ojSX1qI3xmR1JpXkRzelphYTY9MHQ8U35PZ0MkNTtQeFhaZjkxc0UKek9X VSg2TnpURUQ8ZG9WPzlRczN7WCg7UEApOU1rQXVIeFFraEhwVihEOGZvUG4h V3kmQVA8cERzTEp5UCUzb2gmCnpfY0FZcz9gIXZ8SVl5IXc8MnJALTtALS0y PzAzfDBXPnhpciRPUH18SDVvTmRtKS1NdlEhIXJtKDljKSEjcj1fTQp6Qkhl YXwpfXxlPiElITI3YGxZRHVTPilINE8kdkdxP2JrWXxWJU9feURCSUVLRlIt UCVvelhWPV51fF44MzNveU8KemFaVUw0NVEzQjZrJj19QjwhJCpXOyprY1ZY eUxpQzN5K0FSZ2FrYXo+an4hVTcrVVUqKCVDZXktREhCKzdGSHFICnpQanx9 Uy0qbmRyUlRvaHxSPFg4STlyLWYtTGNFTnt4Pz9pMk9aNC1iKEpxTmFTcFN4 dmMyMnRgNk4qUno+VSl+Twp6M1hpSXopQnswVileXm93XmVeLXtieFZkaGBk N3FOKG5IO3EzJmopdSViO2xrP2NHTUhzUCpsWDw+JEFpNVdgY1YKemtFZ15D UDkoPXowX0s1cCRHTihEeFo+UEhKYTdkM0UmPzkhZzQ8Mk47cjVucWJAKDVV bT10e35IdGpRait4SDNoCmF4SnwlJGVnXnRWTG15ZkkqZFplTVY4Z2V4dHA1 UTB5UmokJAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfc2Vlay5w bmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9z ZWVrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzBmYmQ4ZjUzZmY1 YzJjNzU3YzgxNzNlYjYyYTFiNjA0NTU1ZjM0CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxMzI2CnpjbVYrfTE9MEc2UCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxVwp6cnBHcGohRVZh ek03YDtEJmhDNTk/b1l0elJsQDBwKWJNNz0/M1VUX2czO30hLXR2eXI/dm1F O3VpXjZycntOb30Kejw2RmgrViNuKF54OC1aYz15SH4haE4peXlqVHltQEh1 VWh3QGEodG0+JGRhbiRNNU8xXjZrYSQ9Q2txWSNPJmorCnpwflBQNjwofSV9 b2JUJGo+RU4zMD0oRmhGbmRqVj4/ZDdyTipwJSR4dD9jNWo8a2didztqWmk3 dD9sTnJAYVYkdAp6PUReM1FiQDFsRT5mRWFEPEckbjRrSylqYz5EajJ7KH4j b01qTiMwUz0tOCsyO2s7ZyNCKkRuSyNGfGowJXclK0AKeklHKGtLdUd3KyU+ V0EmKVZEOTV4XlhQLWA7OTJ3TWZiaWZ9QFpWSlE9NiNSQVE/Y0gzMDAwMnor QThTVERDeVdHCno+ZWVGYilFc0BYTCN4em12KkxIXilnU0VCODFtZ3dhR2di QWxgcis9ZGcjfXQ9aFVSXitffm5fcVR0RGktXllnRAp6I0QoVjVxfXtgVytg eGswJGNXcyhmYUsxZ3NvSEx5KFBYXnZnITBgXl5WPn1LPDk3N2dOUTxqJXB3 KHlZJj1sXl4KejVidz9vXlYmLUElP3JRQngxIWYrekJ4dVYwMDAwMWJXJT1K MDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjBfOTBXS356 WWA/YjZ2KCtFNWUrVT5rNiZUZWExaTFCaWhOJFI8KigkUmNYMU1LRlJHSyRK eFZmKyRLVwp6aHl9RiU+JUYtd2lCOTUtR280TiF5YnQjJi0jeilBYjkjRFMm JVp4ITI8fU1VVnVYOyU8Pz4jbHVZWGAqa1FqVWAKemxNTjk9ZVoje2UjS2BF XypnSGEkJGo4VVc8d1hDKSNLZTJ6IXtwP29qT2F5dG0+OFghbDhxNjZzbWUk RSZ5c2loCnp0NyZxWUMha08mbD92YHdEUFRzZVI/b3NMTU50fmlYdGkxbXc3 KCloa3BpTmVvMTBVRFFtNTFETDJXUD89N0JQcgp6T2xIdHBFRWVsP00xX2Mm QlNzMStsZ1hybzEmaFZAM3tpbXxsWDteTjV3cG87KFpadDVYMHdZRWc7SiVP O1p1Q1oKekRIYV55dS1mZlFxVH55M05BZWMwcVN2Y1ltM2ZMblJtXjc4Q0Mj R00+VlJkWik0M3g0Vjw/NHpQaHNoJWFKdC1YCnprMnEyNVQ4JVpmOEBtV3Jv NllNNHJgeD9NTWJJb2RqY3Zgcz9zZDVrU0Byb08kU2g4dyE2X1ZxNmV9TGor QiMxKgp6eklPTks4fTV3Yy02NU0+LTtwOHhvUHE1P0FoNnhOZ1RXb3hwPW8q dGMwLX0/VWJvNi1XTlUqWU4maH1GNU1aS0EKejAwUGx5R3l1VV5FRkp7PDtO WENVUCRIMkNeVy1xSGRGMSErQ3pCKjFRNmBFPkVDfDdQSldlQiROYClZdE5U KU1BCnpBJipaYDYoc203dX4+X3NfdnVzJHkmcH5zJHIwYHRuR3xMVEsyNVFn JHopRVNrUWE1I0ZQd3xSWVBCIUpRaE9GXwp6Kj56YVk8I0t0KnZuLW5qUTZn THFrRlFZM0xoaF9zSk99b29SQVJlaVVyNmo7Rko2eVR2Pnc/KTtXN3VnViky M24KendwNisqT0F3ZEs/TF9iVWR+MS1zSlVoJDVkR1B8MUQqO0lnaUJ5Vnd4 bUBtTUlyO0o4OVh0TWNoPEVINyZ4TT1DCnpGNkBUR3R5eHF+O2p+KDwtb1E8 KlI9ZXBgeHNDaWY8YVg/dUdlOSNiQ2Upc0ZyZTNkQ3B4UzZRQDFTO25lXyFq Ngp6LT94IzY8VFhCTSRMSksoVTVgcT0tbClQfHYpUWFZQ2RsOSZZZ0d2YDJf XzdnYmlJeTlxayMkY0BuaDAlVHF7Y18Kek1XdlBFdTlNPFhtaUJvYCQ2bjk+ Y200bmYwcnd2emIxTDJkMDAxUilNT2J1WFZSVTZXVnsmQy1iWSVjQ0ZmbE1L CnpGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYmJWWFFuV01P bj1JJkUpY1g9WnI8R0I3YlBFaWdHUAprRmZtanpHZGVVaEl4c2RYRmZ9P2JG dl4henROO0syMDcqcW9NNk48JGZfa1F7ZkIqbWgKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X3NldG9wLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3NldG9wLnBuZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5mM2E5YjE5ODNiNWI0N2M5NmFlOTEwZTczYWI0MjYwYWU5 YzI4YjczCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTQzCnpjbVYtLTFj PntJUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAw MDRpUCl0LXMwMDAyRQp6eHpMYFYoMT9yQ2M2IWxqWl8mLWN0O3c+QiMtd00l bk5HcnpKZD41dGV9bWJZbyNDO3c+YjxgMCRqST0pIXRTKVMKej5ZayRGZnJa KH1zJj5xeVNKfUxNPGs2YnktS2cjNnYqWFFgcU5MRUxzcHFAQT9ZT3o/eDQ3 JUJ1PDc4KWpfbD5ECno+KkomODtoVzZNJWFvVmp3enVvQnZneHczPmJrcV56 UU9Lb25iVDtDdyVGNkU9LSF5Oys/VlJ6clJMUDUqU0MxQgp6dWpxUUUqSlEy TldzfD89K0xxfHNueXMkcnM7dWFRc29Ha3EpP2RXd1gyJDd1bjc4S0htRkMh Izw9Mnp0KXtAcT4KemIpVTIyTnRWaH16Mi1IeT0xUlRoYjsjJmJvejE0T3J7 dlg9PGtYU28pfGpOSDxmeTlXVGVSTE92KmJGczwjbzUqCnpVeWkteCh+I3JS a0tNd0VBaDZfdCZGYlVPajxkQXQ3X0g7dCZXeiNBaT5qXldWVlRiIXU7aGZw OyE9dmg7bWVCTwp6Iypla08+V3QwbEshKEVMJThCTEFwZ01gZTUzQSNsKTlt Mk1ofkxQRy1eWWpFI2Y5Ul9uJT1+UC1vbFJFIWhfcXIKemd4dFZfO0shNUd1 eTR9RHBXZWxhQ3FUcVEwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VO QntyO05CfkMzCnpZZCF6fjB4bjVKS356WWA/YkteaStDVVRyVkQ3aHdUcDl1 fjNLJjRlZlExNTVEcGptNGZ+YylrJmBMeyUtbjE+KQp6OFZtJW17JmhEJWt8 bWZLciEoeSomTnBVdz1EZlEoZGxaVUVQM2t8RVFsLXt0d0htY2JJcnkjOTg7 bUJDKFYqQUsKejBjNlROWkx3TnlfRDNpSmtqe1pRVUhIcmxQQjx+Z3k9V0ds diQjRTh1ZzdBdVRJYlBPSngyT2BldCNla0BjVkVRCnoofnA0I1dPMnptOWJD M0FjXz1xUHE0M0lNQU5UKTJCb2N7NnAyWHNnMXFuZ1NSNF81bWxUY19pblM5 RUZYZiYwMgp6aEMzYVNSRXlNRmRRQndIKkVjZkJPJTRFJmRhP0VMKWZTIXwk KS1mQGk4TXNFYk5RWFo/JXd7TzF0KHM9SWRFYXsKejlVeU8pNGBDOE0rOXtT WSQwcmQxeWdOTlRDX35ZZFE9VCtUd3NWRXwjWnZ5bS1hWV9CUUs/ajdQI2N4 YDt+WSNACnoqTmJQeFFlcFJhR2JNbSh3ZFJWOHIlYGBPakY4VnFVcFNLYWBm WnFyMUdSSkYhWE9hTV93KSRLPDxJKSQkNHt8RQp6P1l2JVY3ekx0ckFIc3lY RWQxaWcjX3ZuOU1nNUFWVjx0SmA3RCpwZWA9SHJ1TFBRZGIkYCR4dmU1Tlle dTQlXmoKemZhQ0wtMEp2X0VaTm1kRFMhfmZfU3BwZ3ZgQT1DTndyQnktViZJ OTkzYH5lMG1eejx7MXgwcT9TKFkyaTx7JVIlCnp5NS0pO1NqcjRQRXd0ISVT PntJYUZlT2pTMkE8ZG5lezJBe1doTl9tVnEqezQ1Pz1YMyg4RWshX00mJClf SytwKAp6QkVoWVRQSjx3QyFBOyV2bjllPXhxUThfLWI4dkppI29KN3khTCtr N09HKXQ7dDhZQDFgWF9ZPGRFbmlacCFWN2EKejAwMDBiYlZYUW5XTU9uPUkl OUhXVlJVNXhHQjdiUEVpcDFKRmZtanpGZ2kzZEl5NXZaRmZ9P2JGZ1RlZDlz bUZVCnpDM0hudGJZeCs0V2pid2RXTkJ1MzA1VUshRmZBfVNFaWZAdUdCWXxm RyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJvdgpKUERITGtWMWpecU5gTD9XCgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zb3J0LnBuZyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NvcnQucG5nCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNDZmZDM0YmVlZTA5OGY5OTc1Mjli ZjBiNzcxNGM1MjIzMmEyZGYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEx NTcKemNtWStDZT5sPyM5TEtrR0QwSkdiITx8Yk9RK01lYFBJQnNAWDEzMXVi bSp4JG12WGFhYjsqeUFDYjVKXjx5VUNVCno9P0c2Zm5meiF1PGl9KmhrWXk3 eFczfG5YamlPUl9Ad3NwSFNBVHB5QDh8dF9LQ2pSN2N8T2w0ZUlMIW9aMXAj Kgp6UTdEdWRnLXJCQSljSGRnOHo2Yn1MPncxfExaOTJgOHttIURRe3xubVhg PUFuKiojNUR6TzdVS1pQVU10WFA2SWwKejVmV1d8cE49Y2xYVUp2KyRfMW1G cyYjXkFqKDYydzRRZzdtQ1F6aGhoJG5POGJDTFBReishPGAzdTl5Q0xHJWJi Cno/MTVVNCQma3EpbUJRI342QklUQXVPOUxxTElzU0IpSWtwUF82aXtyUkkx MCYycz9MRHdkaDdaOGZKQE5DSm07IQp6RmQ0dDNJVGZEP1Eray10ZkttKyM2 e3gySG8qalZrVXFERiYmOU9sUiRleDA5ODJTYzVCNzxRaWZXaSZialAzIXIK emFFc3gwJD84Y0JgbksjaUlUVHN0VmlseXtjXlgrZTVlcj5pPHElZzRrJWhv NmZSSjFXNSYqWUU5OSQtMFJFPFd9CnpYKnU8fWIwOEsmUXhud0pnSFUpMHtC T1pvNVElc1lZQVN9LTdmP1AwTVV6bWRnP3FEKnFKcVM2OzN5JHg0RHZNKQp6 c2VxQ3gkVz1xZDM+ZFhUTT9iWHBMUiR9ckJ2OGUzKVhCcjk5eTh4NHFwRilo JjtUUDM0bElzR09CLW17VEZ6JTgKem1xSkpUKGZtPUtuanQxKVItR2klcVl4 IzMze3V5elRgMUhGNCtfeU1mWlZBY21ecHkpdlRVOG0pMTglYHNLbmhqCnoq PHVrc1lVaTFlVk9mSktQcz5ffEFIdVV6dlc+fSY+WHRGbkQjMTI9NWpTRC1s fU8yWHk2QUVBc3Zfd348LWF+PQp6UjxhOSplOUtDKztGZ0dtTEgqQ01iQmdU KjFGR3FSRkcoYmxrSWs8NV9zPShienJyVjBPTkxUe0p2dk5YaiZ3UikKej43 WFpESSNCb0tsOUdMfF9NV3JvcTtDcVREUVJVM1UmYzdMKntiXk9UI0k3YT00 Klp8X19gV0I3ZnQoaDwjbG1MCnp3VlU8anV1SFc9KUVKcW03bjNmZUMtKyMl SEN4dz11RHxte3lZT3lsYEUofEtMKCk7dlZkSGdjUVl9YGplQSRLegp6ZF5H VXxhVERmWk1+SGM5U3l7VT9nX0gwQ2xZP0MpNHZGeF5CPDhIfCQzPzglUCtm enVQZEVBdGhvUnRlR2pecXYKenAyeS0lQ2I1IzZFRWkoZHs8O3gxQFVsOVhq KF5gSC1Dd2ZlWT5kK2VGdXpOdnkzKChnOCM/Um00KSt1WFJaezBTCnplayZM ajImfHZxVFg+aDh6NHArWXU1PSpXYiolWC0lZlg7NlpDZUI5N0Z7Vkpkdkhl WUlMIWdlTyhxelkjZmR+NAp6Z1B8TCV1MWdZek5UbVZZLSNeKml4Kn1WIyl3 N2gwSWZKaH52PGNnLXVBdGdCWlNRZEotK1dTeF5EJFRPT0I0VFYKeiZvdWdI WjwqZ3RFSDRTSzYwTmxzSWxNSXVXQER4TmFqISl1PnRwNzw+MkhOI2QzZ3FA cV4wSnVnQEwhXykzM3UzCnpTRDQwaj08Jj87eWVubERtUnU5S01GaktTeXI8 dXhZMHZPQ217RD4oNGU5eTZWUnZ3Q21nS2Z3eDlxd0tAYmpVUgp6aXM5cTBP Q0hWRi1YSW92RlNjfFIqMigqTHgwaiF0TVhOXiNVJGUmZjJhJClla009JG8l e1VTcj5pJFAkQz9ZNmwKemYpbH5mJD1RK002eVF2N2NpSENkO18/SUdDd0J0 RGpjMzM5R3ZMb35NaX0kLUN4RWN5QmstWnlvIzZUaj1xfWhfClBmZEQ5cUg7 cWBpYCo4Q0FiQDV8RgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf c3VicGxhbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9zdWJwbGFuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l MTNkNzc5NGU5MWZjMDg0MjcwMmIwYjM0YzFhOWI2MTYwN2RjZjkyCkdJVCBi aW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjgzCnpjbVYrZTFeb0puUCk8aDszS3xM azAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAy Twp6IV9ielEoU0wpe2JhPk5kWXRmPm08aEhvI3l9I19sI3FZd3o/IzlVUCRq ST0/JUo5cH5AeSpXaSYoUU1HKGVsJk4Kel5WaXEpdGdoJjx2Rk5GKj1ENH0q elE2NmohUkBsTj41YFY7bjQ5NmN5ejhjQChBbkRjJEhsaityRUh5KU1WRX4o CnpqZSF9R21DP247Yj1CQ0IrdUBidj95MkpKcHlCR0EoYjA+Knk+WV84WnEo T2AmQ3p8KipvVzVIam1nVikmQ1BfcQp6eWx9Q3NTbkJlKXdYbGNDIz02K3Vq O1ckIyp5RGxNO2VZN3V4WFF8WChiSSp6d3JxeH1XS3hZOGIqOUhRaHszNE8K elhsPXt2TCVyIXV6dnglUD5WPyRzbC1UZmsmZ19UTj95Y1lSNVViKm4pJGdq KFlJMnNMdGstVkFrMmR1MiQ/KXY5CnpAOURKaj9aKWxvdkZ6Y2xAYWUrcDsr KkgobWdMb3Y+KXghdiRodXZaQihCPFY9LS0qKyhUP2llcy1Dcm5jJiRDUwp6 PjMtP2pzaFlgTW96N3lxP3Q8XjshMEZoaD8mN19OeUc/SkxMJnZJaGk+cXdF JEc3TyNyc21WNT4pZzVDI2Y5QyUKemdXPTRKK2B4aDUmWTtgQWY4QD1jNFBW MTQwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZ ZCF6fjA9aHs9S356WWAmNk1kPStDVWhfSVQ4aGBRWHpgZXFYdzJrTHk7biln NFhKbWRiRzhhdlRCM0twKHY8JAp6KXB9ZTFfM3AtPzVadTdubk5GViVvMClm Py1ATTF9TXgqKVgoKDNkS3N9IVR4WDtwfXBSKWYpR0c4JGpCd1JkIXcKeiVg WkRVRW1wSU1xY2dnZXVJP19JMCVffjkqKlA1eihZSlFMPlF6PzheeDE3REpx PTt7eCF3VX40Y2RWfCVXSVp+Cnp1JF5YeDVRRHRLMzVjOHllbyYpakVMSk13 VnAqMyZ4SU55WDtiQjRXYHJjck13YkJ0O3luaUl7KSstMT9GZmJZIwp6PDVk d2tpXkNIYjM2c2o0O2dDRHpQKHhnN1RSVU9FXztgMz81KGckSCFWeGJ9TDBx aGY8QlhWejB1YTNxTyokaEgKekhINVZvSUw9PFgzKUIoWmlPdDU9V1doKWZz SjcxPGRobEtwMz1MSG41TnJtQ2c1anhZTDF2bW16Xz42cT9SXkxDCnorYUdC ejN5NiR7cjdVPkpabEFNPlVOakVoWGg9VEY4TmQyYlJ1RnpIO0dUSU8yP2ol TXprOE4lZkVkVyRBVjIydwp6TEA/czxnPVFPRU9WLX09PG1JPjAtd1ctRCsw Nl9NcCpgZSZCbFJJYTw5RzNscFZCamFlU2ZKckk3aT83NUY/VjsKemhiYTZB PjVrYV4hczYxVyp5a19IJVVAJHBCNldffkxPZFF7aXA/KUImM34meDU+PCVP TENLTygkP3sjUVFDPVVCCno8UmVuJktyNUBPWWIpcjdENWxvWWxTcktkdCl8 b0lINig2aUdGZW1eWiFXKT8mczlkUGJWenxNNXM4XmhWSCooXwp6bz5nd0Ft QE13KEdfWFYlZyMhb0h3emY3emwrNj9oeU5EMTgyPW0zZ3tyekdkIWNyTUN3 R00qZDhwVTtWdSlUWUQKemd6JE1KNjNPSnwtdG8hdGV5TE97bSY7SiQhMXtA WjxQflIwQnE0KytyQHV+NUBWODh8KUgrQyheOzlaKmZSNGAyCnomTSV+MXMl OGJ0UVpLYSo5N3N0dTkkc0V2b2oqKmg9NWlfPjhrOCoqdUZ1Zjw8PC1zWTxH RUM7JlZqYkN1U3d3UQp6PUp5PjFROTk3a0EqdTE9X1YoX0FmKyF0el5RY299 JE4hLX1uYnIxRTlfVTJvMDAwMGJiVlhRbldNT249SSU5SFcKelZSVTV4R0I3 YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5c21GVUMzSG50Yll4 KzRXamJ3ZFdOQnUzCnQwNVVLIUZmQX1TRWlmQHVHQll8ZkcmKFJnRD07LVdG Zmh1T1JqZEYyMDAyb3ZQREhMa1Yxb0E+b29vT0EKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X3RpZF9zY2FuLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3RpZF9zY2FuLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi4wYTYwNjNhMWFmMDMxYzYyNjgwMjkxMWZkY2E1 OTg5ODNhZmY3ZDUyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDc0Cnpj bVYtMjFrTC0yUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNE ZEJqNzAwMDRpUCl0LXMwMDAyZAp6O1BJMlQtQE1mOHt7SHtMKjZvP1E7aWJh bD5oYnlUXiFuTjVedkJybCszV1NJI14jSyUtT0FoVjxMdmledD1ufj4Keil+ M2JlJWpFSVI8Pys0UD9ReCNlKSNMTjckPilFayswZj9sKjZRQGQ7cWJ4VkA1 JHJ2WW5qcmMhe294Kz90Ny0jCnp3YjFGWCU7PSVQPEhnfGEjb3E0dGB1KEhE PGF3bW0+RXpxaCRGOWg7a2lNakt4fCgzUGt4UnN0SkIqNW1mcXtYQwp6aGxo QGlqK1R+fHByRHx2dGdPN2V5dkB6Yyt9enlvQGJLWmA7bGFQVnREbE89b0l9 cDFQdVI2dy1vYT8kJTR6RDsKellWRm9+O0xeSjU+RSEwLT1Hb2NWKCRkbiUk akhGSnpfaGZxczthNyluVkYtYnFuP3xXPil3VSY+MztYO1k0UEchCnpfMkVZ Sy1aO3NvWHk0ITgqNEViMCg5cGB0JUVpVVM/ZHxSMSl4Z3hiaU9IWj8pMm1Z Wj0zM0NhbjlrMTUjPlUzTwp6IV42Nnx4eztCUT5nd3Y8JmE9PFF4eFQpPnhW WDV0eDN9S2cqVVlrbiVlJGJ4eX1qaCo8ZVokRz07LUwxbzEzdCgKenUlRGx3 dWRsREFyS04/MWdfTSsoO157VCgwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JS YXt2R1VOQntyO05CfkMzCnpZZCF6fjBxSUZaS356WWA/VVkkbCtFNXNWbTFx IVowcyZkMDVFWEgkT0p6dyZmPjlKdlYtfjx4dHpwciZtSikzIwp6dF40fWRK O0N3SDVhM1F7Y3JQPk9uZko7MEB9O016bnxHNjU2ViVyc1YoTiNAMUR5YUM+ aiU+eWc0KV9WWnRwaV4KejQkUn5uYT1BVDc+KklaMUFMQHNGWmhVd2M5fDs1 cGlCYFk+THx+JjNqXmtyYWJsZWpQNDJgI0Z2NGs5TyRtSSQ7CnpGJU47Kj49 V1QyWSZJcnI5QHJoNkxAKXlKVEQwcitWcEQkT1lxcGBHNXFIPVR3b2JvMWYm N3FoMnxOKilgUk1DdAp6NT5eNT0rZEJiM3JyVnVjbGchU3xGTUx7RGo2YEZ4 U2UmRjFHe1l2QjQ5O2BRRTItN0JebS08PDUhdX0weG90c3wKejxaTz0yT1Bv SHklUjc8UF55ZT9UZDs0R2FHWTNrdFAkKEFKa3w+R3tQMDczdHAtfDwrdClw Kz5CUnxyYTxLeH02CnpwOVBeKGBjOyh9UmFLPzNlNEBOWXZoM2xobWY3RDhZ JE5yRDcwWGdoe2FjcjF4aF5yOz1FeTB9Yk59WjRBRG41Iwp6YDdfWjM1ckxR bkBmViEzVEBjdTNzWVhSWk93PyhxKFUrPWwxcllHIUxJcVRTNHdiMSUpdmAp YypFamxOI3JpRkkKek9STHBWTUclQ2RDZFNuNz9zSE17SSVePTdXWTYjTnhz Jkp2ODBBQWVOPFFXaV9jdlghX2EmeVo1WXplaSFIT0EoCno+OD08RUMqXmc7 bmw1cjlPRyVjWTZCSFM1XkxOcUIrc0c0VW1oRz0lQkolP1AwMDFSKU1PYnVY VlJVNldWeyZDLQp6YlklY0NGZmxNS0YpfVNNRjtwQHpJeTVzbkcmQ3pQSDk5 YWJJR0g2TDAwMDBiYlZYUW5XTU9uPUkmRSljWD1acjwKc0dCN2JQRWlnR1BG Zm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypxb002TjwkZzhtc29x eVBXXwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdW5pcXVlLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Vu aXF1ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I3MDQ4MGJlOGE0 ZjQ5MzY5ZDlhOTc0Y2U5NDYxMjg0ZDFhNDY1NApHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgMTIzOAp6Y21WO3sxUyRLOFApPGg7M0t8TGswMDBlMU5KTFRx MDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMloKeiNLZ1VLY2dJ M1BzflFAfnUmfW8mRGRjNWwoOVhgc3MmJkRTSG52cUsldGw3ZE49bWF5QiE7 UEVRakhtWnJDWVBYCnpydTZhMkBhKHRtPmIwfnVGNTx0UnB+WVQ+dlBTRldw NmNTOT5FV0Iod3QlKVNFQThhNWEtJWlxLUkmTEFSUDVsYgp6LURQRig8LWV4 UFclQkY5dkx6K3B6P0pJVXMmPVk3PkRaXzIrX35vMWwtOHFvKUxkTlImeUFr N2hweVVqYyY8TD0KeilSRXhIaH5MTUM9RnlfUlR0bVY/S2pGLVo9K355VDxh KnR+ZzUlN2R1T1Q2T3ZxSXoxa0s0VX14R14hZk1MM1BZCnpRfEh2QTxqJGJJ SjNHXjZYMVZLcygzNVMrUmFMdzFnVF91eW1kc3RhSDhydDRBLUd+SCV3dUdf TUB6YjhXcztUQQp6V14yKWlMMzR+ZVh3QTs/eX0jfGghUl5Bcj8jMElOJGpS YF8lPC0tPEhxXkRxeXVJdEVzcHFQIT1kUTJtdjlzIzcKeng5aHh9enBOfVcp eiRSMFdfIVM9JUM5Iyk7TmJWZyNPJXFwKjNyQE93VHJFfnlYP05kP1c8OHt2 dlpFUXRrfHpWCnpOfEg1TGdHUFg9ZXk2OVQ7RDFZdGxGRVRSMDAwMDFiVyU9 SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wKnkmVEt+ ellgJjZOOUYob2gpM2hzK1UheHNeYURtJnZVWmFleyVNej50NmQ2TnBOZ1Z3 Z29ZRkloKDMKenk3O2Vtd3NULVdQb0Q4WiYqUz9lWFA+P0Fge25GSTVRQyl+ KC05LXFuNFRQdzhLKF43OWNfO3FYOz55UkdocmtNCnptZ0RaOyF5eHBlI1ZW SzBLOzVTYWcwdEpGYTEzcGtifnYwKTdpRG5zd0FeSXxGY2AhdDZDU1ZHP0Rm Jnw1QTJNYwp6IXl5M2hjLSglPDFyYWJDNHc+WXdKbnkzWEhlVWNDND1ATiFZ PVk2N1h4aUExYmZjOFpJTjBTTyYrfFVnS1JYdmgKelVEJkM0N0RqMllmQn01 TCY7bVYoQFBaJkx5Mkd8ZUJtX15FPHt3Ml9DQ1hgc01+RnExPEIxYH1DJlhl YSUmSXE7CnpPcmFBdG4mdVM1c1N1KT04QWY4VTI8Y3lRQzZeSmg2aXNKWUJ9 JEwqSTJqa2srJU9VZDF7ZD87TE1vTClCZVBHawp6RUw7Ky1RQjBJRm5XMF5i Tj92Nz84VnJ9bEJeQyVLJG5+fGtWbGpiVSN5IVJUbTcoTkR6RVRpRHA8dVd3 NG9Tc1YKellHdHBDbDs5bzk7dGBRdEN0WUdMbW4kaFpJYV9eKHlVN2IxXi0z WDhEd1VMQXhHRXFwLTswcmNVYVA8ODEqN0d3CnpCeXtBPGt2JWNIeGl1T0Fu NX1XOCtiIzIwTHhReiFXX0I5ZDV8ZiZ7dVVkUHJfdW0rKHd+e3VHTiRxIzxL WWFYagp6S3A3NT9CeUFvOyRnJGFjRUYpU3hoTEElKV4lKXt+a0hLOUlERjRh UDdsaHpFMXsyJDFeeEtsdT10c0l5JUdMUDAKeiVVOXNCKHsyfiF2Mksqalp7 MzR8VHtgYVlOb3g9N2Y7QChue0M/SXU3KG1YTSllSDNtZEpLYUFrNm8lPXB2 UGBOCnpuIUJ3fEs3NkgpajZDLTVVRjJZWClYRzJBVjM1YWRPNjtyK0phKCRT NENeczRAfj9kNXMmOGJoI3toQyhEX15KeAp6LWVYZXhIfUtlSDd0IUp8WH1e PU5aMSNmRDs7e3pFdEE1PUo8YCNQRnxJe0JNI0pYTHRFfl52KDAwMVIpTU9i dVgKelZSVTZXVnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAekl5NXNuRyZDelBI OTlhYklHSDZMMDAwMGJiVlhRbldNT249CnpJJkUpY1g9WnI8R0I3YlBFaWdH UEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtLMjA3KnFvTTZOPCRmKEFA bgpBQEJqYisKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Vua25v d24ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfdW5rbm93bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVkNTRm NWM3YjI1Mzk3OGI5Njk5M2VhMjYwODI4YTE0NDM5NTA5NQpHSVQgYmluYXJ5 IHBhdGNoCmxpdGVyYWwgMTA4OAp6Y21WLUcxaSQtPFApPGg7M0t8TGswMDBl MU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0ZlApdC1zMDAwMjUKeiFx QXF1KDJsanliZ1IqWXZDKmMjKDgkZnV4Vz4+Xm96WXtnK0gkJHphSn1QcSNw cmQhPVhrfkVlYTdjfiFzTDBuCno7QlR8c1MpdFJ4JUZ0UyopbyNBIVRnQl4y elVWQHs9cz4mWUtmMn5heVhRdXw9dVc9cFM7RmFMI180VXo+Vj9xbAp6Z1Rt eCN1RyppeCZ9XnNDWm4pcjAhMDlpdzx7K0AtQUZ0eWl2RShWVTxTKEAzR2A4 aEJ4YUJ+KDx3ZCpaT1RGZSQKenpVT1BsPX48JUZTRTE4ciF7ezJXO314dnFS bHcoMyFSTDkqPnlwbXVUQjZmdnl5R2dnPGBKdm5VJkg4PyhDY0tiCnorNn03 V1c1bm95JitMaUE8WWM3TFI+MF45c3AyeFY8VkwqYVhVNkRvJD9CSFo/YEUq dkZ0X0dsI19NcHg9M2QzPgp6UU5aWWZ6VHRoWShQNiNpMSpxWCRwd1Z9fDso cEhTZENCVSgkPFM1OD1eZTEtNjBHQjRzQFNsQCZ9cD5aVVomUEAKeiVqfG97 PjVTOXViKytEaiU8NTtXKm1sNj1pcHVEMSF8MTVNJnx0O3NkZH1eMnk1Sz4o PXhFNjZZUVd9eiRMTX5ACno9d2lwflhVT2JwJUl0ajQ/S1Yze3t7UjMwMGQh Sk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VQp6MDBIXypM X3QoWSRMLVZvU0pGQHoyaz4jWm0kJiY2Nkh5U3lIZWZKSmd3JHooZlJkSTE4 Nm1QJU9lak9jKUdVMC0Kej5UaHAmY1RVR25XQV9MQmpxaV47X2pDNSM9WG93 Z180NUVSMFcoeUNmVz1DNS1pR1dCZFNHeTlfPSVHbGFVcWktCno3KTk9fWFn VFN4SF83QHJVSSt3M1h0Y0t3IXgxU3VePmpLbTZIaCN3b3R4KzZLeVgzcVM9 OGU1WGZsPWpPVlVleAp6Q1kkU0ooREYoP2Yxa1lJR3BqbE0rUTM+T3xNRmsq Tj96WVV4fTtEe2x7RTYmdz5oaGtIfDRpRXk9SUcqdHI4fSYKemlSJClIeHUj JHUyaV5mNHZhXzRxeUNjKT1mRDZMPEtDZlclVWJuS2tSS2dAYXdxc0xBUjUm UE5sRjdwVmkteD1UCnpBQCNBX0cwKStyP2d1IWA4SXNvV1pjJD5yLWc1byFZ RGRSdU94OEVkSSl5YT1mKDg0Y3F0ZmMwMEl0cyp6UGB7dAp6dkdtKi10STUp eHcpeWFZXkpEVTVIQjFARGlYeVVxNlZGOXhwTmh1OWhVblUpSGhzQ3htYFRL MEdvZFl2OUFKPksKenB3TzhWJDIrenB3QChURnApUVVSI2NQPXMmS0Yxbzc1 KkI+bj47VEI7UlQ2TXc7K2JlSHolQEAyK0M0bkBxM3hlCnp4WDEockIwZngt UExmXz5RazllQFNMNDRrZlJIcllqeHt4KlEwUztaTkdLNiNBPW5kNXY/NFQz Y1JDJkJndygpNgp6Jm40P29aKno0SE55K3NMP3dFNFpDdUhRdT9SZlJ9PWRh YDZTeUZOVj9PTW5sT0Z4ZzBLUz13MjAjPlorXlopPD0KekMzSG50Yll4KzRX amJTV1ducHc+MDVVSyFGZkIxTUVpZkB1R0I3JGNHZGVVaEQ9Oy1XRmZjZm9C XzAzKDAzfiFxCnpTYWY3emJZKGhpWik5bV5jPnBwbkYpJUdLSVZ+X1RSNUNM PEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbgpHTFNUWTFuSkBiUQoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdXBkYXRlLnBuZyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3VwZGF0ZS5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ1YzUzZjgzYTA1OTM3MDQ4 NTViYjg0ODg4NzFlOGU4YzliZTcwMQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy YWwgMTA5MAp6Y21WLUkxaWt4LVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8w MDEldzB7e1IzRGRCajcwMDAzI1ApdC1zMDAwMTYKelRVJDFXITNuQTJhK2Fa emw5SXVYSFpyeTRiKjlIYnl5KGxLU1czWEAqUWlkJXMmIXEmPml3KyZXNSgp aCRMTUl0Cno+fjcyS2I8T1BCeU1FaWZmN2B1QDxHcGotekpUMW5mZDlRUGQo clJRIUdlVSo/JWwoS2d3eWNlI0R3MChoMkYtNwp6ak1WUG0kQXttQGg+X0xx O0tfO00lIS0lVUAjRCokOz85aVklJTBAVXA1b0FyPGokWDwrd3RTbGtMQSN6 PGtPSm0KeihWXnppcVU2Kyg9RiswJSlzcDdacXZoNjw9RzNJOyl1cGNCXlhB ITw9K355YCpRZSYlbWcoNTE+RGoyfis/Vk92CnpzcHtGYj5EI0w3K1BDUTVu ZDtyRD9BKkJOO0Z7fit0bkEmbz4pKTtILW4jN0l0P0p7UD9jY2xYO2pab0F5 WHhlZgp6P0JjS087a0BrUXU8aGxzQDhySmk9Q2JiUXYrdzE9QGFEa3A9KEYk WHdlYVl8QGFlK3Y/NiZkaSNQYVJNXlg8bS0KekBXfE07cWpkbFAwMERHVFBF IUN0PUdiTmMwMDBTYU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwNz1Oa2w8Wk5Y UEF5CnotQiNMQTVRUTxlTCNhaDs1dFM7VU1id0FfNTx2KXxmSXhzbTBZZ0N1 RykybXZAQmFjbElwK1hETHpmcT4pbX1Jawp6YHpsfHVfbndLeEA7M2lxSn1+ KyRSNU9IZSpsZX45V19NK0ViKVZWKTsmN1pZckBNUTU3dEY9c0AkcS1ZNnRP S1kKekZXWjxFcV5yemx0SlVnWUhXMHFZOUltZkJqK3N+YiR+KXxOcF8oRF5J MmE1YkMpKEB2TWxqTWVaM3NoRVJyXjRtCnowazlqOSFUbykkTjQwbCpkOzAq SWwrVSs4T3tFZUY1TXVuPlpsNlBIN154OU4obT4xU15Dfm5gaTMjIyFKbm0q Owp6aFYqTHFWWFAwNWdwaFhySTtCRUE1c3owWGxGaXpjRzBkYEh8SS12ZGFm KVVpYGJ4RmpyQ0IhWi1gSyZGYDJfbEcKelc4SGVMXnUzJDR1UUxYQV5udVpY cmoyME9abVVEKypBPUE7VTBJZXBsTlpsMXUoUChkd3FyPXEpS2dyUUtASkNs Cno7Pl5FK3BAPTMpcX1XcylsPSMpOTQwMTRkQ0tfdE8zPVRJemFJcT5id3Q1 KjMlVFBRIVZ7PjRjWFkyd0B2cGk0SAp6NXAlZn43PyUjNGBjbU8jalpHTHRw KlV5QCYzZDB8d15+Tks9b0NlPDFGY0xaLUdLUmZnaVFBUmw3OyU4UHI7JVQK em5VZj0qMDhlZmhVPG8xaEw7QFdLUThecUE3Q35mTEhVc0crcFo2KDNMQX15 NFJaP3RASnZtODMoKENvfDxfUGpICnp8RHZqPVhyVUQ4V0NJIWsmc1IqNWtB fXYhcFNOZko2PElFSj15ciVVbDdlc3Rsfl49I1Z7Vk4yQ3BTUDhyOHdYcgp6 PlQkYXtiQSVqKjVmUXV4byl8PmpacjF7WVJCQS17MUNKKkhvWklDSm5Jb05D RjRMT0pRaSg8KkJgOSZCUTBkaGcKellvKEtEM3E8ZERLMzBKbmpeb2YqTFYt WlIrISMzd3FQeiNFYU9vKW1QTih6Uzk3KzIwIXlwPk4jbSo0RklVPUFmCnoj SGRFeUl1ZGZab0I9cHJqTklgdDxlI1c5TVp4ZCk3eWk9Tik9VTEleEF+dnU0 YH1KUUFPdyRMeCZRekcwNypxbwpJTTZOPCRnNHpeQzFPTmE0CgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF92YWx1ZXNfc2Nhbi5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF92YWx1ZXNfc2Nh bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTViNWFiNDA3OWNiOGUy YzAxNWI0ZjVmMTBhM2RiZjhhYTY0MTBkMwpHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgOTEzCnpjbVY7QzE4KTNAUCk8aDszS3xMazAwMGUxTkpMVHEwMDEl bzAwMSV3MHt7UjNEZEJqNzAwMDRmUCl0LXNpTWlXMAp6aHsxMm8/bUBsak1a VzJFJmhMNTk/QCs/KFI+U0lwKTl7SmFATVh5Q1lSVCt4JUl1V2JAdE5CM2Qo UTJHKGUwJCYKekB1PVNOakAwZ3cqNiorM145ODVqTldiWUR1SCMkOT5vflhO UGA+OT96fkA9UD1aNFlrWXNjdHMkbXh+Vz98UG84CnpyTlFLOG1lSWtGSHUz Nio/Yy1xWDw2IWRZaHg2KShAOGUoWjxYYGphaHhGQCpAWj98ZDxYYHBjaHd8 aUtfVW5oPwp6QEF2MjBFOWx4UT0tTWprK2JabmFEKD40VkA3cFQjPHpMdDhf MzdGdz4pUl5yK2Jad2VEKThKWV55T2RIPkdicEQKelUtamkqX3Y/ckY+eGJM RGlQWSl6X1Redkc9PTFVMUQpUVZhXlZ9LTs8ekxhfl43UHkpX35sPnErJCM5 eVUtfDJZCnpgc3wwIT1KTCt2XjctYXBgfE82eTw/OzMxRCktJGdffXdZYD0z bVI/QCVHJitge3JORDxNOD8yRGFobVNgUnNATQp6PzFzblZAVyRmcntOYFcl PzFzaFJAQjd7PHtONUAzPTNuPlNEZi08aHtebm84O09fbjJEZ053K3p+QW48 K3dBX3sKekRnV2tRKWFtb1MtdERjez1gPmFwMHNzSTIwZCFKTVF2ZzhiKmsl OSMwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfCnowMEZIQExfdChZJEwtYjBh KUxrKjI0RWs/bkZvbVJXX2dHVUt+WF56N2hGSVFxb1BQeVR1T1FOVX1nezsj WWp+dQp6aG0/SnElaHl3TXwxfjVNJi0kLWJmflA5UUFAQylZRCEjJjRCJGRo Sl42LUhSbEs+PFVEWmJAJClIaXxlNmgrYUkKejdsTCNlQWQ9NWp0QyYjTFQ4 KVhrNU07Qk0xZyMtZVZfNk96WEA9dWttbHVMVTBnd31lNndDNk1hQ356aE0z Qz8jCnpYcFU9cVZBMzNuQTBYaWloNEZZTzV+TiVQX2VTM3FNNnBNWk4oSUVz MWdPX1IlKXAhcHEkITRKIUJ+VzBkQXsqVAp6VV9odGk2UHxDUGFsKTEkMjxf Oz1iaTBAWTh3Z0dJPUk4aE9tO3xrJUZkVGwkPS04SEpXa3c4bkdgYkZxSUZ1 dj4KejVte0FMZyY+cDNienBrdSk9KkpSbE8pc1ctTX1jT1g9KChTJitpNmly ZkF4ZEFkNXhwel5xb1cxTEc2ZTdEYylECnpQKyk4dTZIKVJmYCVfQGZNMygj d2M7Qm9qJWptI3R3PzB1LXluKWtYYnVCdERYQS1wYmheYHl4eEhKcjcxMX0l Rwp6LTN+b3w7cihnKWRYMCYoYntzMkF6flNoKyN7O3BNUSlfRjNpOT9WaXV3 Qj4yUHdkVVdTazhXYkt8SkdTRU97cHwKbjhfVGpiQGIpd1FZayE/KntjKEso d1NKaW1TZEo2KDAwMDAwTmt2WFh1MG1qZmloJWt5CgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF93aW5kb3dfYWdncmVnYXRlLnBuZyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3dpbmRvd19hZ2dy ZWdhdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmODU4YmUxY2Vl M2Y1ZDhmMmI2N2Y1NWQ3MzBlNmQzZjQzZTliNDIKR0lUIGJpbmFyeSBwYXRj aApsaXRlcmFsIDIwMjEKemNtWStFWDtqbF43UkNjODNXfW84SUhOKlVxLVpz NExSQ2JJNHojOU5MQEVXTUFQKFJWdFdfSlI3UFZHTlJSa1FoCnpubjxaJis0 bCY5b2cjdlBnYWlebzJubTQlTGRjJX5tVmQkKT5aSStiSXA/fGVJcnA2QmNm WSpueTs8UjVwRX1yWQp6dyNRJkY0KjI4MjVmPUNUdnNUKyFgdElyTEtWbVI4 bkQ3JilMbzgheWl+S183QFcyZWpvYHJ7SVZYZ3c8c3xfM18KeiFrQl5qPFky RUg9I2xBcldJKHF9fDM8RVZHWWotNl50fiM1dU50NmhmUE85NXJ2di0tQU9p cklBVChlUjFoRjcrCno1UWdZZGtVa0J2PFBjQWQzQEtveTlPX2o3e2QjfjJm Q0NtbTtPanwhdyo9XnMwPS1pfXA5fmFlUF9gd2VmRWNyMgp6cEF3YGlmd3Zs ZjM0Kk82WlRxO2tVOTlWeiZ+WXVSUjRfe2s0WDdaZDNTXzlEZWxeJVFybEFR bmU2NHx9S3t5KGkKenQkfjxZPW9NZEdGSGtwJkdfTks0RilobH5CMTJrdVB6 TWRASyEheWkkYmBVWm9+bXw0TWRobzZJI2klRGpPcTxNCno5V3R6a0llTkhp U1Y8aktIO2lmS21YX3p1JU0wZFpyVmdzKUQobT1heT1qcmpWbSpIUl99M1JO M0pNRXYrYE80Zwp6Qm9ZWE8kakhkMz07JXxZQjkwekMlRjtzPlR4STMzdlgt eFVCfmFIbCgoWXRycUB8QCVVKTlxWTQwPURxLWB+SFMKenFwYWQ3JiEwYVpj a2JOOWkoaEh5NzhhSjV4eEE1cGZQamdxREtUT2sxbUpSeHFKcGJ2OW9JczBP VDV1aEpSVXl8CnpxRkxHNUojWG5zKUJGJHNtdkkjM1R0IXQpTz49QTg7X0BI azVJUFBTTUchaGBvUyFycCojSn5NcU4qRUo+cCUjYwp6VXp8Y3NCT3Q9RFAo ekIhVlp7dEc3YWtyaU1UfGxTNituaFQwMiU8R3g+MSNCJHQ7RzlWI19LUjwk XzR6JWFAKj4Kem8qb19eTEt0Tk1RMGI3T1lmPik7am9ZX3hoWm1Pa0FUcCpt SmJDKWA/S0NKd09kPVFzNFFON1FxN0RFbmg4MTt1CnpSZTVFbFZiTUhpSHM4 S3xkamN8NkBsPjUlVHx4a3JEXis5KVdwUjAjSTt0ODNBPipSaSNsP2pTIVlt TX48U0JVJgp6IVVpRDtZI2Y3OEs0Y2h6O2pTc1kjOS1uPUZiOUZUMjszcGo0 WFItUWZRbihgRnBMWiUkT3dXbzItUTVqZnNZc2oKejFfUmFkYHMzUXhOditV OzNKbkdraXFnaDQlQGJPUShLdndgZCpsRjk0TXxOVil9Y0pxQCZ+TF5CZmBH RzFTeTBVCnpFUTgmWjwxcitRQU9FWDlWT342ZiFLflBkND9jU09jejs2dEtV T0FNZWUlSCRqTjFlMzJOJC0qcEhFOG9rMX5FKgp6RT5sZDsmZGV3YElYWElU Izl9d1I9UnxxKl5hPVRLKHlgR1U5JHNEP1c9KGZyVH04PURIbDZOWm9zc2Uz SHIkU1gKeiVjQGN8NXUxSUozNFo/bU98LVBzX1lSPVcmcnBaODRpMFRPSVhT dHhBKEB+NUtzWClnJk9oTnBkIUNubkNPUmNXCnorcHRUc24tSEB7Qm9xcUEk M0B+cF93UXB8PyM1O3A3Wj9BV19melJkPHJfTis4bmNVQEokcUpOb3U4bEko TlZGPgp6NlgpdmNUSlNKVkF3bGRQcSNxZHludiUpMVRDTVZaNEJ1KGpJe3Jy SW5tYzlnSk5eOUZCVFJQMHlgTyhQOTJqVzUKemRXVn1eYVp5byV3WUJ4dDxT WWp9eVdIJEs+LU4zZGVlQTNASXl1PXF4dGZnNiU1fWdTUXlhS3BwJlNOI2ZI QX16CnpXTmApdWFsMjBCPzJkNHZiZUVPM21oM0V7djRAWF4/KkE+WXFwMEQt LWBtVUQrWEpkIVZKa3trY2FZbTx2UEpISgp6TjcleCp5MVJYNEJeTWwlaUkq O2RzPVgxdFJpKUooMlB+b2ZHbkNSNj5nIWlISD1efXcrS0ZITnpPeFV7LWkq YjQKelFKeksjWVB6eUJqOU9kISFpVXNUQk8pbzluPnFRdT1WQmM/JFZCJXdT bkRRNjxDV0goVS1BVzVQZVJ+RFFfVnBWCnpXcEF1NGVAOWpiMyNsWFNpNj1O bWNAam5pPGI1Um5hTW13UHBfSk0pfDJATzllU31AUEU8fkFJZCNSfUBae1Br KQp6NV5IYCNsVCEpWmA1eUxVMV5Jci1yNiV6O1Q5fH5FPForemtTd3J+dFVy bzlAJClmenx3dUV5Ri0jO1NUMWc5SykKej9uampWbVkyVWUjbTxVJmFJSyk+ XzZGfEtyI30hTFptZHE0dClFJSZfK3xlRjl4dSZUezxNNWtibSg9UytUNjct Cnp6bmg+YWghd1lteHxFWTZVU2VJNi0wNSNvbDBXX2lyKkt0RC1iN3Apd3JI aFdSMGkhVkNkRXFPdnolJGwkO01OKgp6NWVVdHRDa3cza01HciQqcnlyM0lj Kk1JTkF9dEl3bXQrUWV3fmtBczRiQ01ZX0FTXm9BVDhtYSZxblVOR3xOaXgK em83Tmt0REkpdDVsISVDaz1xNWZUai0pI15hb3Y7WmAyMXsmY3JuVkBHV3p4 OXVWVF9+e28lUGdvfHFMR3M7YXpCCnotUXNpeXBDbGQzVW96PjFSej5TeSNI TVEoXzJMJHZITngyLVAjU3wtb0Fod1k3TjtPcntBVmV8Smk4UyptdXJffQp6 VXRhP1lhYHR8VURAX1ZKT3p1MnVgYE1TQ0wjdzwjN3BDNGVjSC04JWUqT0ZS djhNSktvbSZtejc/cGtfQ2VUKD4KelU7ajxrZ0I2O1g8JnAmRGMqbmBZQms4 RDBMfUgoezwyQWUpc1pfM3Y9N2RUczcqUzRmQUxvdDFRYDN8Q0ZIMVVhCnpF dj5zcFprVVM7SXZoQjAqVlpmYyoya1IkOCRxTVYmR0ZgOT1CYmBrWVE7SW5i UGNJPGdoS1VsSEMhYyQjTyhfcQp6RjN9X1BpRTtmY3B0Tmd3OT0yKVJ4fkMw OG48YmYtM1NTNE0mJHMzM0NkQF9heDg3PXkmJU4oR3BCdlhyZSMtYVMKemdf e2h3OWslOGhxVWZyXkdpK1h5T0ROZkZvQUtgNXlXKjdYI3B5MDlnS2FSYXJ9 bkwpe1p6S2lheG1PZUwhd2c/CnomITs4QEJ6JSkoRl5zUmJrMmxXODd3N0dC K1NmYjRaKG8zKS15VSFPMEJgUkRkRzQ8TjJWQTxHTldBZGYtKz1lUQpjemtv bH0wcDFffDRHZDVzWWIqYzs5fSpUXmNQdXtSZjdzeG9feTdPXgoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfd29ya3RhYmxlX3NjYW4ucG5nIGIv d2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfd29ya3Rh YmxlX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1MWUwYjNm NGM2MWJhMTY2YjY5YmQ3ZjMyY2IyM2RjODQyODQyOWUKR0lUIGJpbmFyeSBw YXRjaApsaXRlcmFsIDE5NjUKemNtVjtlMlU3VG5QKTxoOzNLfExrMDAwZTFO SkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAwMDFxCnp4IVgy fiFFZXAoTEF+aWt6VWcoJj98SVBnUU5ycH0hcz1KVT5Wd25waVBpOUMkbjB2 Iz5+Nn5KbC1UaV4rVk9uTwp6P1NSbmpnVkY3ei1TTWQyQHtaSyprPTU+Iyo2 KiszXjh9fmkyJm0jbnp2KWZFPUArZno5azFoQyNwYDBuPm9jfEcKeklKZjBK eGFEIW4/MEMtWFBgPjk/en5APVA9WjRZa1lzY3RzJG14flc/fHFCNHJOUUs4 bWVKNWVXJVM5fUBWQ3RHCnp3IylPISpZMn4oP3l8QDYjTUpEdCNxNilkPzVA TWAhT2AhKShDVndlPjhpaSh6UnV6QV92QGQjPlljamtvVm4/bgp6eGJMKmQ9 JFc8V242JjRZdipuYnA8ZFV4SXQtfDd0c297Kkw9JX5FYz5oPFpJeGFwZD09 OWFTS2sqd3A4dEtmPkkKeio2SC1gdzk0cTJ3KFlVVD05UkpLbCg2NTRxfkQw Nj1CMnJkS1QlVW5QZXd5VGx5cldEWkZWfDNJKEkleSNHPFp0CnpXTkwoS2Jj QXR1TF8wbFFRQnxqYmopR2Ajej9gVVRKeEdDT1pmUlUjcGd+dHFNb0ghNjw/ ezBLaUhWOC18TnBTQwp6dSlWIyNSOCY7aCp3fHJWVlYwSmJaKk9uUCVGMVVe U0pkaEJxb2Jvb01AUTQ+Xk9ablVlMCtTUWV2M3N3S35ZRmMKeigmektNTHRu M2psVXoodGI2c1JsTHIyYiVxKXx5c2VgMEZUPUpMK3deNWM9RFZtKEVHS1Rn aSZAQFpPTXdVKGdCCnptOEZBamIpJFFTJnk9Umo8Pys7PHVZRngrVz1+aENM MFZ7NlR5dER3ZHt8QEhlM3NkbXM+fGZAakJhPGhaaUFDPAp6YyhPdVYlSCMw SjxNN0kpdkE+M3VtVUBEV2EoVHomQFFHcTwjXlVjekozeihaQDVQYSEjZFZD cjtPPWx6VGUqanAKemlEYDEjZVYxYHNVfWpUVD83R1MxcHwkRl4jcDBmXjsr P1NKb1VpRCMhfDFaWC08WWY0bSNYSGx6dml5SS1JYkBeCnpsJjlVM3JzUz09 PGcyPmRrKSsjQHFTfXc1PEV5eTktfHArVSRLIyl+PERSbk1vMzd4UnQ+QnJn PWQhQHdtWnsjQQp6c045bUkrSy17eWotYXtRP0JTZlMpXzlXRGNhWVV+a0pF Q0Qocn01O1pIQ1dtZ3dKYigmMWl3bVhNZnBAcDQ5MnsKenpUV012KjZHLUxt RGhUZClPMyF+Wi1+eG5nM00tcSZTYD9xWEBTfn5xMmo1d2VCa1NqMDAwMDFi VyU9SjA2XnkwCnpXJmkqSDBiKXg+TTB1Z3kpWClGYDAxMHFOUyN0bVkwN3c3 OzA3dzh2JCFrNlUwMFktYUxfdChZJEwqQVBSOD5fSgp6I182VV9IY3g2Yypn UlNCSGFyPWBBVGNVSihIdDtzYU8lN2lHJEZlOD9sO2BgdUhHanZISzlOKVAx SD0ydGs2blIKemdPVW18cXJkP3RMP2wyPkFta3x1WVQtRjJERExnaVRDVX00 XkBzYjllYyF3NXtNTlU+e29Rcl57TGFeWlReOShmCnpJXyRtPjtsZlV4SjZ8 TVJlOTVKa2JyQ01WOz54Uzg3T3VKV3k2Yk5jWnRVOHZgJVF2UnEqSVJgSHtU LU1kUnh6KQp6dytuYU5kRHE/ZDI+MEgxe3tzJlNVMz5MPD13YWE7c1hXNEc/ eSYzNWBrUEd0XlpAflpmcT8tS1VeYmgzTCtfeFYKejsxQ0UyP0d4NCk5dTFG KGNub3hpc2I0PTZMam9mc0JoNnMkfDlJM0I1Y0szeihWQGBpPjZuLVM1SSEo QWM4fiFYCnpKaChtYk93XkRkMiMkXig4VlhAQyEtamBMTH5MQX41ZzlSfTRl NCkmWFFQSVU0MkRyZHBMOyRHMWBIY01GYWlkfQp6ejN9Ml9wVTlaODxIbzs0 RUg2KFc2WE8jSW5LVV9gKDBYTWBCMXVYanVPfENLVUs2RFI4TGYjbnZ8QS1h aG9UQFkKekM7aEx1UEBTcXJyY0dtciNmbysocyQpZV9NdmQ0fVJwPilSSCRA engrbl9SaUl6dilxXnIkR2dDOTR6VipKbnIpCnpONXEqblI4YnlwQEdAJV9M KkI1WFEmaUR8dldBfTdzU2IkXkNNc3oqK1RWUTNDaiNqZGE3aWl+dVQ0Y21u SWJtUwp6RzdRTF5JVUk/JU80MngwNjRPMEBkNl9BUyt6WXg9XnZLK340NEZz R3NCYiZiWU8lQyFPbmIrSkRuJTRAcjBTOVIKel5TTWdNTTYlI3IzclNrSUZx N3I3RDNmRl4mTDlnQ05rI15sV0tkYk1nZkUjVE09Yjl4Q0dYRShtUFVVclB5 VD9jCnokb2kxS0grb3NRa3xMNnVDNVBIYThtaH1fZW5fWEpHa3lHdGxmNzI1 Xn5rREtmMnReR0JiSWNMWDJULTRxTl4yZwp6eyE/WjNZVlBHemljRERNViN6 VXRlbUp5JF9CbGdsdFQ3O0sqWWJeSlF6WT5WNGVnUlRsQEdARG4+fmdOQ01D PyUKekJrUmB2dCtITlpDKXw5cSl7YSMrWX5hWTM2aUlXQDEyVzM9dSFrY2dt M3Z3R0ZObVZxYktJS0QyZVkmOEBWVCt2CnpUI2slaExCOUdyZHQqKnMmYz44 KVhjcGZsdiEyUnhGey1wOC17dDQkN2VLLUhufHt+fktOYzRMXmZNRntaYHJ5 SAp6d3dMVkt4eXlqOy1wd30jdFVCeno1WkZeJXkwLXV9bStkUng1Qm4+QURL M0pkJUYyQE11JmIpN1RCa3hVejVAcj8KejxwLXNDZDA3WGM/OWlgPTMhJFE+ d3N0RjIqOE50JDZSTTZKWTRFbTNPaD1EM0hYYmBfQGBKcnUkNGBfJmBRZklm CnozTWo1XlpteHVxYHVkWXFQfkZnUSVCeHEmWkVWYkNEd35kPEk4K1hXTypK KmV1JSlAS3Ree19SSnBGcSRNTmE3dgp6JUZ1N2pwTCVLVVZxMj89S2RNYHgj cTBJOT1yYDdTamkxZk4mZSM4fCZIeGdRMmF2eGJVaXR0NDAzfiFxU2FmN3oK emJZKGhZYSVFdzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoRyVHTVFJeHNM ZW5JIz9vMDAxUilNT2J1WFZSVTZXCnpaRXN8MFdfYldJRmZsTUtGZ1l6U0Y7 cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZvbXZjYwoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhjbHVkZS5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leGNsdWRlLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDYyZWVmNjQxMGQ5MzE1ODU3ZDJl NmQyNDY3NzBlOGI2NWI4ZjQ3CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3 MjUKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3lsYEdYbDQ3 eXwtKUxSXjh8d2l9PHltVHZWd19RclkxCnpMQzM/ZF4qVURoRldMQTF8OWAp d01gS1JFYnZYUTVBLT0oNiU5ZlI5WmhVXzZeNF5wd1MyOGxMV013Xj1IUzU+ PQp6X2lzTFpQMTxAJXdRYFFqaz1LJSpuTmdHMDlKcUFuWSt+Wm0oJGQkZHNa VDJeRX5LUX5lKT9Mc2Q2e0oxTGBrbyMKejhRWUheWHpoQVpTb3JWUHVQKy1t ZHx0QlQtYH5IRllpZj42bmtKUHVOdXFwP1lJT0Q1NkliXjhgclY2K2ReSzww Cnp6a21QVXRYUSFwR0ZxWiFoR2czc3dlKmc0WEshd0lhejVxZV9IZkZTcndi UXVeQUNgMFN8S0BRazdVay0qfmhQTQp6RWhzcTw4Mkk9MT87Qkk2VWhWMW1f dmc+U0BiSW0qamdrfDBORz8yT2Y5UiFUXkA3Q3ByJXpuRXdjNX5WbSVzbHkK elVFUTVOS0M1bCpjM3JxRng4UXsybnJuN0A5P0E0PHclPjUmJmNgM2Bae0ZP T29WOzlIZHhmczwhSk00T3g5PzZtCnplbldmQlckQTRYWT9oellVVUhePGBC djU0UFhoV0RxQEhfY3dlZ3gtYW82RjdBMDVDaldoQEV1M3ViVjVifFZlTQp6 TiVENGc7Yl4tendGPTFMRWJ4ZGQyR1NtMj5+PUVTNCMtJlY+RWFrN2FYQzVS MDdIKlkyR2JkeDQ1bD9YWitMaVEKeldNbVl+KVdzKH1jPXF0PVZ7cml5QXUm Tnc7cHEmVjkkdWNPUG48ZT1RZD5oeXYkJlpoQjtASzlRPEpTKk49dj9lCnpJ bXBEOz01fGJOKnxNfV8mJX54QkZsdUtATV9VSTZTNFhxRXQ4Wng3K2BXNEM/ KUslPXhBKDc/X2MmbSRWNHp7NAp6VnEmNldxaCFSVEF8TlgpRWsxdzNqNDUq XyY2PnQxYm1Cd2BpKi0tNHFQRFdNJTduPz48dDJWez1Dak57VTFWKXcKelYz LWp0VUhVYWl7eHMwKHN3Sil3QmBKdnxzYURCRnNYJlVzJGlVRTAqOHFyMkxr dW1mM0BvalRqa0ZFU3RQQml9CmhjYkspSVh2b2JeJHhOJW50enB+TUp9YU9H MjJXUSVtdnY0Rk8jcTg5SnYjc1oKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4dGVuc2lvbi1zbS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leHRlbnNpb24tc20ucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjQzMmQyZjQ0MjMxYzFmODhlNzg3MDkxMDYwZWZjNTEyNWQ4 MGVmNjQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDQyMwp6Y21lQVNATj8o b2xIeWB1VkJxIWlhMHZwXjB3QiE2Mz93eWxgR2JLfVFHaWN+RTBCSkR2K2Nw NSRRdjZxenJWazcKelczJjlAdnpCaWtgRzVIb3xLLSl1VGljYzItMUdrTkd5 VTB4JW9vPzNmQmVkUGFrMWduSGxyYF47KHp8aXpPfktiCnolbG18MXpqSSQr Yk5+SDJ8TW17bWNNcFI5ezMqSipTPmYzXmA7U2l9ZXxecFFgPXtqRVREZEUk I1F5eSlkdj48JAp6fEtBR3N3eW9jUXdsYkNrYDJ7bUxKaUN6dzxadT52TD4y PlM0PXtFK25RYUdUPGFvTGBoRGNvUT9mMndzUCFNMm8Kejdse2VEUSt+KGN8 OUBCRTg0XjFLeDM2MWJZfEJ1YHFRYi1KNjJEQnhaXzxwNUJFYHB3bmF9Nnd4 cGExJT5lIVZ6CnphaGRVPSpYJkVTRk9wSkUqJjtlKWBxZDMqRHBhVDV1OUpE TFMlM1AoKGspQDxaYmFMelYraCFPZjQ9P2BLSzkycQp6PTNmRUBsNF4tLUxg aDB3TnZjKEhRN1Z2UEZmdVNTJl4wdkRIODJiQEdPI2krd2xYbypIWlpqXkZx cnBGWnh4RCQKby0yOVp4dmBVQnUxNTI8NXBsVEI8MTJjJCpRYDFBJjA1dmRw eTg1fVNiNHE5ZTAxfWsyITJrZE4KCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4dGVuc2lvbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leHRlbnNpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLmUzYzUzMzM0Nzg4M2ZjMWRlYzczYmNiMjFiMzJmYzU0ZTNjMzE3MzIK R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDk5Ngp6Y21WPEEwfmBFX1ApPGg7 M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzB7e1IzQ0BsfEQwMDAwMWI1Y2hf MEl0cCkKej0+UHglYGNPPCVNUTJ6TGZfNkk2Jjl8emRkOTk+LUBhKjJtIUp1 bmg3Til8YlJmfC1ieHx6VmJvU0toYV93KGxHCno7bWMtTDRYVlZjUWpiKVIh SW9OPlVUbTZjZFRsUCspNDhhZVlfRigrIXF2aClmSXEkSSRha0BRTTFEZW1i MnAteQp6Wk5JcGclKlU/Wit8MGVVbVI/USlAI0B5THRBM3U5WEZodjhtZHYw dGJ+QyFPayk0eGNrYzNXc2E0PyphVUQ/cEgKekBhZlgtPDtzfGdQLTxIZWN4 V0xJVE1uK3t5ZSlEcXtRTEwmYDExTW8/RGc+QV5YJUV7O2xrK015NWB4azxK R0MpCnooVj9KXlBhMHFyOSVVUlVaWVhKfWFIYHxFWHNkNz1WO01rdktIYmNp c0Z6bllZOSplQHFzaV5rcTBwK2M7a34hIwp6IT81TVBxdjVsaS0+IzY/cD8x TkFhbGUzbikwTnVEa2difG5NUSR2RXd1cjspJlgoUCVrbExlKCpxd3NibjAo WmUKeiYlbHFCZysqM1MxWlk/ZG51dFRJbXJ7R05mcHlaMmV0a005WENOcVRD dHI5d2loVk9BVjtpTl91NkQoVEsjeGNmCnpUbmB2ITcoYk90dzRgYj1YQ1E+ TGh0PWBpdDx8KCNtdFNGP1c8UVFjbSQ7VD5tMUJaO0cwKlNVeDglV0d0NyY0 Qgp6VjNEK3RiOFJJd2dGM0x1dSNiTl43RzR2PT0qeVZScC1fQGtqbWVvU2Rv YUchelN6V3YhS2BVSFVLQyFNVnVaU2oKemFJQUpWZHBBeUY5dnh5Q2xoJmcr alk4R0dlJHU7a2xZdW91VEAqaVZEP3cpPlk7N0VzZWtWQz9EUlIxZ1pfdFFa Cnp5S3Y5OVpPeVl+ekB9ODRoQkt7X0pIbighbDZmTFZiVG5oRlpmTVNmViQ2 THVsMHFoR0MyKlo/TlA8VHZoQkx+cQp6VUJ8MGMjaXZjY3BnKVJvOThHI1dU KmBQPiRhNn0oVzsyPmFJO2x9V3ordHxmSWVsamxTY0ZTZnJlYVhXWiVmMiMK ek1aI3R+emc/a15PT0FVcGhJMSo0Y3IzVn1RbnM4JmlnWTFAWSNEQFk3SD9i JFQ4VUN0c2JuXzJTJWkyIXJrISloCnohPkVhTUNjdmFteVI/KFchS0s4JHFG PDMrOUJDYUFVSik4PDlYNkxtRXNzMURWLT5aVEwzZTI9OEVQOSloZmF1bQp6 THk+d1hFUnNFZHNERW8oM3ptRSRleGBqc3lJbUcmNz1MT09mb2x+VGNPKiVJ TkVtSiU3aX1CfFlSbjElMDAwNFcKelFjaEM8SzwzekgwMDAwMVZvT0l2MEVo KTBOQntyOzMyO2JSYXt2R2Y2OTUxVTY5RTk0b0VRS0EwMChxUU8rXlJXCnow fi14RzQhJkhCRjh9fWxSIUt4YlIyYjdeVT8zajJ4UztWdkxYYnR3VHp+PjBX PVFoVkEpeUhfRmtMe30xO2h1awp6cGFLQ1FLekA9N3Nge2k5N2kwQHZsMlRT OHcxQzc/UiZHN3k7KTFObTw8T1prQ3tBLWg8Nn1BPENqYkRhUDhxRGUKU1Jf NGU2MDAwMDxNTlVNbkxTVGFYLV5MMzcKCmxpdGVyYWwgMApIY21WP2QwMDAw MQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4dGVuc2lvbnMucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0 aWMvZXhwbGFpbi9pbWcvZXh0ZW5zaW9ucy5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uZWVkN2NhOTdhMzNlZjU5NWY0NDhiODYyMTE2OGQ1MzFmODZk NTFkNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTAxNwp6Y21WPFYwfHh3 d1ApPGg7M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzB7e1IzQ0BsfEQwMDAw MWI1Y2hfMEl0cCkKej0+UHglX2ZTayFNU154WigjXk4zcD9SJk9kK19ZdSRp YmolVF42Um9yQiNibW4hMV81eH0ySmlVSDl8bT1pJHB7CnpSdD43ZXNaeChy a0hNQiZtfGtwfVlrRi1pK1M5cUhvTlRZQ2Z4XnxvSzdjPkg+Qng3bmVNRWpq Zk85dlpuUWd6Zwp6bmFzem8tYHZjLXd3N0tfMHJCZUF3eVM9Z20xalBDSmVK SSRHaj1uJnZ5cSpYVn5+VlNlUSs/R2t6THUpdisoS0MKej8mWnB1aSVARD81 X283SzVMKnRlPEdkfCRFJlRpVWB9cCR0X1UhZlc7UGRSKz4qMiFhLU1aJTR2 ZzZnTTtMKUw9CnprNTN3NDc5TTNCRFErbGZzQm8mfHhvRTMhOClGJGpkX0xY R241ZFVtSEVKY0UkKW1+Yih4SzMqdipFcUI9ZmtrJgp6ek42dUBvIV9wSSpQ KFg3Zz5rPXRmNzZ4UCRkSWo/U1ZlOXVnU0xwbj4mfStsc0YyI0RpUClXail8 aDxNbGg0NDkKem00IXVDUHl9ZEw0VnM4VXRDdiFIdjRNNWNqZWRQUEN9JHVq WjZ7eE5KQm9jWEJ4NCg7KXZrOE1oZF9APTVuSy0jCnpXZih0fE8wPVlFRj1y cnp2eG45MyteeUJMVCRmKkFvQFBJZU4wKyNrV1IrdXJjUU1jSipTRi1zVCZy bmZsVkZqdwp6a2FLTSVHPW47QCQqXy1xSVRsX00hc3lHRyY3bnx8UkVeMSpE fDt9JCk0dGZtaHJ6NkFJYklaQW5xcXt5aSpUJVYKekhoVld0VjsmdTE4SSN0 ZElFX05wemticlljOVZmTUx0UFg8Wll4MSZCNVo5T20zfThWWjdGaVBlczlv LVREeCUxCnp3ezZYe1d4JUZYb3JXezVrfl9rck12ezNWTXN6ZXx0IWArfWdK UjVtSGorWG5ZOSgtO1piKlZoQ3gkYzF1VSpIaAp6Um1HPUd6QFJeaGF2Viox SlkzM25SPipUb3lrO3wrTUxNWmJLKV8rWG9qSEFINW08eXZSO0ZUNSMmMWkr WURMMGsKekpISzZfazR1aHdHbHB8MWkrQykhcGk7SitNflpZSWZAflJ0WjVE NF8zMGpGI1I7Z3EqeTsrMktKKkomPSRpdHxLCnpidGJeMVBySX59Iz0paDt6 TUB9fFRed20wNT8mRCtZOF5KME1KPG0hNmtgPiZuTCY0SEM+ZCVTUD1gKjRk XyQzWAp6Q29HYVpmVCh8S1NfX3RaQjdVWlFLRCU4T1hjJktMN0orTE84K1Jt MGY9QyF7OVQjbUo3VURGRTAwMDAxYlclPUoKejA2XnkwVyZpKkgwYil4Pkw7 IzJkOVlfRUcwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfMDAwTWNObGlydStY RVhCCno2Q3AoUmJjcH19MEIlVntLfnh5aVU2OFIyeiN0MytuUyh0dCEzfmhZ XnZHZzQyRkw9YEVFTk5tMHtNITYteTE7KQp6UXhGYXp2TF9jSypiPF9va0Zn MGQ4SGMjVj1FaGApaCt5Wm1wbGVobmxOWkVkdGdRQGhYMENOZUlXRXB4dyFv eU4KbmRjfnRzcDlUbGlkT3pPQyYtKSp8S0gpM3BEMm5ncjAwMDAwTmt2WFh1 MG1qZjxLTlV6CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leHR0YWJs ZS1zbS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leHR0YWJsZS1zbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNk NDNjYjhhYmFiNmVmMzhkYWYzNGZmNmQ3NTQ0MTUzYTExZGFjZgpHSVQgYmlu YXJ5IHBhdGNoCmxpdGVyYWwgNjEyCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEw dnBeMHdCITYzP3d5bGBHWGw0N2BYI3tMUl43ZCNpYEdgJmkkS217XiMxTwp6 cEhBSSpiP0A9PlhWMEhNZC1tKztqYn4qJFVsYDFKKFEpPSleWFkkOCRBMEdA Xz9mKShUaUItMG9+dTlERWA0aF8KekAzczJPbSg4ZERkSTdtaC1mR056OEp4 SiQoUnVDbD4kbVVTeUxiUW97WVFAO0olMFJuPjlUOSltS0E5ZSpCdi07Cnoh cTlrKnk3c31jXjYzdkFKT0lrT2Q4fD5AKnFAZihjbFlreVd5X1hETTBUcmJv XjxuQXNjVWRoUyMzc3BgXjVGQAp6KlN+dThEbHZKTnk3cHhpXntxUjA5KUox cjw/R2s0JiE0fC1XViVzTlcjIXk/WWFebzhzQT9XN0VMIXlPPEh4c2UKei19 WDx+cy19Nj0oNzFkNHtEbmBTSzVjQVRzOyslVlU5PGJkaUw7JVo2SSl0Vkok ZHJ2JjZfdDU5PXZ3PCtFclRDCnpRd3tSaDR+Pn5HYyVKSl8wMHN3Uk5zd1BL Z1R1Mk1YK1JFVmZrJEw5a29FdiR4MEJnK0sqamA1N3NuOFolZ0c0fQp6T2FA QWY5U3ArOCt9aElDP0NrMnw8fU1CRylCRUVjMHo0dklMez5HcV5RYjgzREpw U19QTTk9cDs/JjlFMFU8JGMKelRxezxyVEE3YFptSEUyQmZ3a284N2hheTs5 JCVsYzN6IyspNitJSzE3SXJQb0VQJkI2K1BhJEVUfEhlcWRffXxUCnotUjtZ I1p7Nk8lVU93YzJ5fjJnPSEpaDg5RGs5Skw/cmtYOFY2N3o0YEI5NihXMill fWk2MHZSZk5vUFFhZzhXUgp6TmkwZFZOLWp6VFFWZDIwaDZjS1pNIUUpdUF3 fnZQQ2RPN0tDZld3M1J0NSRaR2dha0tIMDApfFdUc1VARyNGVGQKY0hHb3VH OEpJeWRvU0dpRzJCPzktKTc4JnFvbGA7KzBMVlFIP0VuQSgKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi41ZDg0MDM1ZmVlYTYyZDUzZDQ1NzQ4MTE3OGIx YmNiZTk2MjJmODU2CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3OTMKemNt ZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3lsYEdYbDQ3OzZLM0xS XjdkI2lgR0dGWmBjJHtgYUVHCnpVdzdTamQtNDl1YDtWVkxlZklwPnZ1QyMr SzMjTH1kR2Z7PWRiM30ycGEwKV89M217M0tjJEMlPD9RPkJ4Wl8qYwp6cnFB QU1KfiU5WVhUSVEjP3duVUBHaFZpeWBKMjcoaHZUdyRXKChpdyZVX1l+KTFI eUZ7cUVobl93TD1oZkIqaTIKejJNLT1UZUU4X21xc05hUTh5WGlWPmlXJX16 ZD4xVFZeR0wkQmpZTF57UyhXVTlvVnQrcHJYbm1TTkZaa20jPSpDCno8akx+ byVrPlRGXm9APlB5Wi12c3Q1Knt6UExmbGNVfF9RVT5hfEIjdVU9SkY/Ykoy Y3ppaXBZXzNQS2FlKk9CJgp6bTglLXNFcWFFQilpa0c/bT47PXc9bFBwQVp7 RUlyYHx7PD56UDxeSERqUEprdVN9WT5fNUooekEzbDhlXnkkO1AKemNrZm9O VClCR24+TiNgZkRYUHFJYlVBRWVvM0VqQnM8Jl9KcmNJbGtLWXpZPT8tNkNT d2NmdF9VJSE2aT8yQGdhCnpiQUgrSyREY29je2AmUm56SWBXRClIajVMQUtr Y2QpN0d0OWxUI1lpd043O1ItdW18Syt3djlMbURNKFRjeTBSbAp6QCNENV8r dXs9blJXLUpEYzMpQUx7OFVZfEh6VnVkcSlCcm9QZyRyaUAkbXdJTztkbW96 KnJMRzd0Ry1CPl8hQHAKeiEmJUBGU3EhOC16fVczJXdqR2RoKzAoQF9NQjtM Q0xWXm47NC1aZHwmbCNPSElkNWQ8JSEjPlV2cXlvXnU4ekBCCnpGO090a3Uj blNwMURCbTlxaHNjUmhNcU10RSlIPnlmdTUxQnB9dyk2JmNacWltYWJqUUBA VnlvUzErNGNNUjw5Nwp6ZCM/S1VvSVJ0ZmJDQWh2Uz1jcVJaRHJzMWB1eHIl RmZPUFE0PnZGOF94SU0lLV9YJDItQGtQSXtDYkNrZkM3I1AKejJVOE9yOHpt enhEPlhBUzR4SXklO2AxbFdjcnNfc3EqPkdXIzV6dSZJQ0Z9Ul5WRz8rcn1Z YFFNWmBxWWtGIW1FCnpHRypHLUBDRnZHKXZOWThIK2VOKHpRbW9DYnhgWTd6 I2V7dkZCWTBUZSZURTdmITxSc2FnOFdSTmkwZFZOLWp6VAp6UVZkMjBoNmNL Wk0hRSl1QXd+dlBDZE83S0NmV3czUnQ1JFpHZ2FrS0gwMCl8V1RzVUBHI0ZU ZEhHb3VHOEpJeWQKVW9TR2lHMkI/OS0pNzgmcW9sYDsrMFF7PE8kXlpaVwoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0dGFibGVzLnBuZyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlcy5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVkZmJkNDU0ZWQzMzcyN2Jk MWRlZWI4N2M2MmY4NjcxZjZhNWEwMwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy YWwgNjYyCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdCITYzP3d5bGBH WGw0N15NUHlMUl43ZCNpYEdgJmkkS217XiMxTwp6cEhBSSpiP0A9PlhWMEhN ZC1tKztqYn4qJFVsYDFKKFEpPSkoMXVUJnVmRHh8X2lwcCllXnRrUj1PNmYp eXpeVncKenJxNzxNS2lEcFBZZEcoPGBwbFIyPyVpdVh7bnJhOXZnRURkakYl Y1NVKjVsZS16eypIam9xdihTRlMmTF55dTs5CnokQkNoNTRZVilTWWBwczUh R29obUZQVHx2UH1BSUFVT3dzNkBxMT52WEFIRT9ePndVJmBTUnQlaFl5ITZU TlYqRAp6VH18dD52OzlVTD9XP0FtdDdnb1l3U044alNGY2A4SVE3fWg9QWVm NUhCSFQoPVB6Nyl7cmRJKC1QZXRFJktxZisKelRDP0o/eDk+X2R0QERrfEoz ZkI9YDFiQUYrfm5RYitTZVJTSD5fQig7XzFfO1JuOz84SEZnYEJFV1VRX3pK PWJnCnpyaSRIOW87LVE7PUZPdT1Qd1g5K1l3UFc8MktueFhhPklxamdNRXZE cH5GfWI8UUw0fkBhI3Eha2klS3Y1bV5rUgp6SjsyIVFXVlJpVXZEd3FiRit9 Mlc/MEh3UUxrPEcyN3hoZFc4WG1CNHpZfmpUVmtzfWJgUVBrPzhaK09AaHR9 bUUKenhEVVIrQFpEaXkkViRfd3UxaGFAZ0JKQXVYVW13JElRZExOV0xtKzJ3 djc/RlckbC1ydmEjcUckX2VlVXQ3bDs2CnpZZnNRUFEjM0l7WFdqd0RQRzdD TEMpSjk3SSEhI2ooOFh0RyhBdWxnWFR6aT9DPHEraEk1JShvYFIlVG9kU0BJ Zwp6RnEhOSp7K1g1WWhFRGtGdih4VXM8IyZKU1kleTBxK0gyM2ZjbD8/aENa QjYyJUMwbDdWY194LWR1Z1d9ZWlHPD4KeillX2Y7bDlhQGZSSUI4b1IzT0Qq V01GOFpZaU9pdlU+SVUjVX1hKSNXbiFYalV9fE14VUA9b3c0bjskNWVvQUlx CmlCfTlYUEMwR01Vd1V2UHhNOG0xK3A9KkV8Nyg4QTVULUdAeUd5d29aSFpz dXcKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvZXhwbGFpbi5qcyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvZXhwbGFpbi5qcwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTMxZDkxCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9qcy9leHBsYWluLmpzCkBAIC0wLDAgKzEsNjM4IEBACitkZWZpbmUg KAorICAncGdhZG1pbi5taXNjLmV4cGxhaW4nLAorICBbJ2pxdWVyeScsICd1 bmRlcnNjb3JlJywgJ3BnYWRtaW4nLCAnYmFja2JvbmUnLCAnc25hcC5zdmcn XSwKKyAgZnVuY3Rpb24oJCwgXywgcGdBZG1pbiwgQmFja2JvbmUsIFNuYXAp IHsKKworcGdBZG1pbiA9IHBnQWRtaW4gfHwgd2luZG93LnBnQWRtaW4gfHwg e307Cit2YXIgcGdFeHBsYWluID0gcGdBZG1pbi5FeHBsYWluOworCisvLyBT bmFwLnN2ZyBwbHVnLWluIHRvIHdyaXRlIG11bHRpdGV4dCBhcyBpbWFnZSBu YW1lCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFw ZXIsIGdsb2IpIHsKKyAgUGFwZXIucHJvdG90eXBlLm11bHRpdGV4dCA9IGZ1 bmN0aW9uICh4LCB5LCB0eHQsIG1heF93aWR0aCwgYXR0cmlidXRlcykgewor ICAgIHZhciBzdmcgPSBTbmFwKCksCisgICAgICAgIGFiYyA9ICJhYmNkZWZn aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla IiwKKyAgICAgICAgaXNXb3JkQnJva2VuID0gZmFsc2UsCisgICAgICAgIHRl bXAgPSBzdmcudGV4dCgwLCAwLCBhYmMpOworCisgICAgdGVtcC5hdHRyKGF0 dHJpYnV0ZXMpOworCisgICAgLyoKKyAgICAgKiBGaW5kIGxldHRlciB3aWR0 aCBpbiBwaXhlbHMgYW5kCisgICAgICogaW5kZXggZnJvbSB3aGVyZSB0aGUg dGV4dCBzaG91bGQgYmUgYnJva2VuCisgICAgICovCisgICAgdmFyIGxldHRl cl93aWR0aCA9IHRlbXAuZ2V0QkJveCgpLndpZHRoIC8gYWJjLmxlbmd0aCwK KyAgICAgICAgd29yZF9icmVha19pbmRleCA9IE1hdGgucm91bmQoKG1heF93 aWR0aCAvIGxldHRlcl93aWR0aCkpIC0gMTsKKworICAgIHN2Zy5yZW1vdmUo KTsKKworICAgIHZhciB3b3JkcyA9IHR4dC5zcGxpdCgiICIpLAorICAgICAg ICB3aWR0aF9zb19mYXIgPSAwLAorICAgICAgICBsaW5lcz1bXSwgY3Vycl9s aW5lID0gJycsCisgICAgICAgIC8qCisgICAgICAgICAqIEZ1bmN0aW9uIHRv IGRpdmlkZSBzdHJpbmcgaW50byBtdWx0aXBsZSBsaW5lcworICAgICAgICAg KiBhbmQgc3RvcmUgdGhlbSBpbiBhbiBhcnJheSBpZiBpdCBzaXplIGNyb3Nz ZXMKKyAgICAgICAgICogdGhlIG1heC13aWR0aCBib3VuZGFyeS4KKyAgICAg ICAgICovCisgICAgICAgIHNwbGl0VGV4dEluTXVsdGlMaW5lID0gZnVuY3Rp b24obGVhZGluZywgc29fZmFyLCBsaW5lKSB7CisgICAgICAgICAgdmFyIGwg PSBsaW5lLmxlbmd0aCwKKyAgICAgICAgICAgICAgcmVzID0gW107CisKKyAg ICAgICAgICBpZiAobCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIHJlczsK KworICAgICAgICAgIGlmIChzb19mYXIgJiYgKHNvX2ZhciArIChsICogbGV0 dGVyX3dpZHRoKSA+IG1heF93aWR0aCkpIHsKKyAgICAgICAgICAgIHJlcy5w dXNoKGxlYWRpbmcpOworICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChz cGxpdFRleHRJbk11bHRpTGluZSgnJywgMCwgbGluZSkpOworICAgICAgICAg IH0gZWxzZSBpZiAoc29fZmFyKSB7CisgICAgICAgICAgICByZXMucHVzaChs ZWFkaW5nICsgJyAnICsgbGluZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGlmIChsZWFkaW5nKQorICAgICAgICAgICAgICAgIHJlcy5w dXNoKGxlYWRpbmcpOworICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4g d29yZF9icmVha19pbmRleCArIDEpCisgICAgICAgICAgICAgICAgcmVzLnB1 c2gobGluZS5zbGljZSgwLCB3b3JkX2JyZWFrX2luZGV4KSArICctJyk7Cisg ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzLnB1c2gobGlu ZSk7CisgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KHNwbGl0VGV4dElu TXVsdGlMaW5lKCcnLCAwLCBsaW5lLnNsaWNlKHdvcmRfYnJlYWtfaW5kZXgp KSk7CisgICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIHJlczsKKyAg ICAgICAgfTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVu Z3RoOyBpKyspIHsKKyAgICAgIHZhciB0bXBBcnIgPSBzcGxpdFRleHRJbk11 bHRpTGluZSgKKyAgICAgICAgICAgIGN1cnJfbGluZSwgd2lkdGhfc29fZmFy LCB3b3Jkc1tpXQorICAgICAgICAgICk7CisKKyAgICAgIGlmIChjdXJyX2xp bmUpIHsKKyAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZSgwLCBsaW5lcy5s ZW5ndGggLSAyKTsKKyAgICAgIH0KKyAgICAgIGxpbmVzID0gbGluZXMuY29u Y2F0KHRtcEFycik7CisgICAgICBjdXJyX2xpbmUgPSBsaW5lc1tsaW5lcy5s ZW5ndGggLSAxXTsKKyAgICAgIHdpZHRoX3NvX2ZhciA9IChjdXJyX2xpbmUu bGVuZ3RoICogbGV0dGVyX3dpZHRoKTsKKyAgICB9CisKKyAgICAvLyBDcmVh dGUgbXVsdGlwbGUgdHNwYW4gZm9yIGVhY2ggc3RyaW5nIGluIGFycmF5Cisg ICAgdmFyIHQgPSB0aGlzLnRleHQoeCx5LGxpbmVzKS5hdHRyKGF0dHJpYnV0 ZXMpOworICAgIHQuc2VsZWN0QWxsKCJ0c3BhbjpudGgtY2hpbGQobisyKSIp LmF0dHIoeworICAgICAgZHk6ICIxLjJlbSIsCisgICAgICB4OiB4CisgICAg fSk7CisgICAgcmV0dXJuIHQ7CisgIH07Cit9KTsKKworaWYgKHBnQWRtaW4u RXhwbGFpbikKKyAgICByZXR1cm4gcGdBZG1pbi5FeHBsYWluOworCit2YXIg cGdFeHBsYWluID0gcGdBZG1pbi5FeHBsYWluID0geworICAgLy8gUHJlZml4 IHBhdGggd2hlcmUgaW1hZ2VzIGFyZSBzdG9yZWQKKyAgIHByZWZpeDogJ3N0 YXRpYy9leHBsYWluL2ltZy8nCit9OworCisvKgorICogQSBtYXAgd2hpY2gg aXMgdXNlZCB0byBmZXRjaCB0aGUgaW1hZ2UgdG8gYmUgZHJhd24gYW5kCisg KiB0ZXh0IHdoaWNoIHdpbGwgYXBwZWFyIGJlbG93IGl0CisgKi8KK3ZhciBp bWFnZU1hcHBlciA9IHsKKyAgICAiQWdncmVnYXRlIiA6IHsKKyAgICAgICAg ImltYWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsICJpbWFnZV90ZXh0IjoiQWdn cmVnYXRlIgorICAgIH0sCisgICAgJ0FwcGVuZCcgOiB7CisgICAgICAgICJp bWFnZSI6ImV4X2FwcGVuZC5wbmciLCJpbWFnZV90ZXh0IjoiQXBwZW5kIgor ICAgIH0sCisgICAgIkJpdG1hcCBJbmRleCBTY2FuIiA6IGZ1bmN0aW9uKGRh dGEpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJpbWFnZSI6 ImV4X2JtcF9pbmRleC5wbmciLCAiaW1hZ2VfdGV4dCI6ZGF0YVsnSW5kZXgg TmFtZSddCisgICAgICAgIH07CisgICAgfSwKKyAgICAiQml0bWFwIEhlYXAg U2NhbiIgOiBmdW5jdGlvbihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoi ZXhfYm1wX2hlYXAucG5nIiwiaW1hZ2VfdGV4dCI6ZGF0YVsnUmVsYXRpb24g TmFtZSddfTsKK30sCisiQml0bWFwQW5kIiA6IHsiaW1hZ2UiOiJleF9ibXBf YW5kLnBuZyIsImltYWdlX3RleHQiOiJCaXRtYXAgQU5EIn0sCisiQml0bWFw T3IiIDogeyJpbWFnZSI6ImV4X2JtcF9vci5wbmciLCJpbWFnZV90ZXh0Ijoi Qml0bWFwIE9SIn0sCisiQ1RFIFNjYW4iIDogeyJpbWFnZSI6ImV4X2N0ZV9z Y2FuLnBuZyIsImltYWdlX3RleHQiOiJDVEUgU2NhbiJ9LAorIkZ1bmN0aW9u IFNjYW4iIDogeyJpbWFnZSI6ImV4X3Jlc3VsdC5wbmciLCJpbWFnZV90ZXh0 IjoiRnVuY3Rpb24gU2NhbiJ9LAorIkZvcmVpZ24gU2NhbiIgOiB7ImltYWdl IjoiZXhfZm9yZWlnbl9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJGb3JlaWdu IFNjYW4ifSwKKyJHYXRoZXIiIDogeyJpbWFnZSI6ImV4X2dhdGhlcl9tb3Rp b24ucG5nIiwiaW1hZ2VfdGV4dCI6IkdhdGhlciJ9LAorIkdyb3VwIiA6IHsi aW1hZ2UiOiJleF9ncm91cC5wbmciLCJpbWFnZV90ZXh0IjoiR3JvdXAifSwK KyJHcm91cEFnZ3JlZ2F0ZSI6IHsiaW1hZ2UiOiJleF9hZ2dyZWdhdGUucG5n IiwiaW1hZ2VfdGV4dCI6Ikdyb3VwIEFnZ3JlZ2F0ZSJ9LAorIkhhc2giIDog eyJpbWFnZSI6ImV4X2hhc2gucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2gifSwK KyJIYXNoIEpvaW4iOiBmdW5jdGlvbihkYXRhKSB7CisgIGlmICghZGF0YVsn Sm9pbiBUeXBlJ10pIHJldHVybiB7ImltYWdlIjoiZXhfam9pbi5wbmciLCJp bWFnZV90ZXh0IjoiSm9pbiJ9OworICBzd2l0Y2goZGF0YVsnSm9pbiBUeXBl J10pIHsKKyAgICBjYXNlICdBbnRpJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9o YXNoX2FudGlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBBbnRpIEpv aW4ifTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9o YXNoX3NlbWlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBTZW1pIEpv aW4ifTsKKyAgICBkZWZhdWx0OiByZXR1cm4geyJpbWFnZSI6ImV4X2hhc2gu cG5nIiwiaW1hZ2VfdGV4dCI6U3RyaW5nKCJIYXNoICIgKyBkYXRhWydKb2lu IFR5cGUnXSArICIgSm9pbiIgKX07CisgIH0KK30sCisiSGFzaEFnZ3JlZ2F0 ZSIgOiB7ImltYWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsImltYWdlX3RleHQi OiJIYXNoIEFnZ3JlZ2F0ZSJ9LAorIkluZGV4IE9ubHkgU2NhbiIgOiBmdW5j dGlvbihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoiZXhfaW5kZXhfb25s eV9zY2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ0luZGV4IE5hbWUnXX07 Cit9LAorIkluZGV4IFNjYW4iIDogZnVuY3Rpb24oZGF0YSkgeworICByZXR1 cm4geyJpbWFnZSI6ImV4X2luZGV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6 ZGF0YVsnSW5kZXggTmFtZSddfTsKK30sCisiSW5kZXggU2NhbiBCYWNrd29y ZCIgOiB7ImltYWdlIjoiZXhfaW5kZXhfc2Nhbi5wbmciLCJpbWFnZV90ZXh0 IjoiSW5kZXggQmFja3dhcmQgU2NhbiJ9LAorIkxpbWl0IiA6IHsiaW1hZ2Ui OiJleF9saW1pdC5wbmciLCJpbWFnZV90ZXh0IjoiTGltaXQifSwKKyJMb2Nr Um93cyIgOiB7ImltYWdlIjoiZXhfbG9ja19yb3dzLnBuZyIsImltYWdlX3Rl eHQiOiJMb2NrIFJvd3MifSwKKyJNYXRlcmlhbGl6ZSIgOiB7ImltYWdlIjoi ZXhfbWF0ZXJpYWxpemUucG5nIiwiaW1hZ2VfdGV4dCI6Ik1hdGVyaWFsaXpl In0sCisiTWVyZ2UgQXBwZW5kIjogeyJpbWFnZSI6ImV4X21lcmdlX2FwcGVu ZC5wbmciLCJpbWFnZV90ZXh0IjoiTWVyZ2UgQXBwZW5kIn0sCisiTWVyZ2Ug Sm9pbiI6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoKGRhdGFbJ0pvaW4g VHlwZSddKSB7CisgICAgY2FzZSAnQW50aSc6IHJldHVybiB7ImltYWdlIjoi ZXhfbWVyZ2VfYW50aV9qb2luLnBuZyIsImltYWdlX3RleHQiOiJNZXJnZSBB bnRpIEpvaW4ifTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1hZ2Ui OiJleF9tZXJnZV9zZW1pX2pvaW4ucG5nIiwiaW1hZ2VfdGV4dCI6Ik1lcmdl IFNlbWkgSm9pbiJ9OworICAgIGRlZmF1bHQ6IHJldHVybiB7ImltYWdlIjoi ZXhfbWVyZ2UucG5nIiwiaW1hZ2VfdGV4dCI6U3RyaW5nKCJNZXJnZSAiICsg ZGF0YVsnSm9pbiBUeXBlJ10gKyAiIEpvaW4iICl9OworICB9Cit9LAorIk1v ZGlmeVRhYmxlIiA6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoIChkYXRh WydPcGVyYXRvbiddKSB7CisgICAgY2FzZSAiaW5zZXJ0IjogcmV0dXJuIHsg ImltYWdlIjoiZXhfaW5zZXJ0LnBuZyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImltYWdlX3RleHQiOiJJbnNlcnQiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB9OworICAgIGNhc2UgInVwZGF0ZSI6IHJldHVybiB7 ImltYWdlIjoiZXhfdXBkYXRlLnBuZyIsImltYWdlX3RleHQiOiJVcGRhdGUi fTsKKyAgICBjYXNlICJEZWxldGUiOiByZXR1cm4geyJpbWFnZSI6ImV4X2Rl bGV0ZS5wbmciLCJpbWFnZV90ZXh0IjoiRGVsZXRlIn07CisgIH0KK30sCisn TmVzdGVkIExvb3AnIDogZnVuY3Rpb24oZGF0YSkgeworICBzd2l0Y2goZGF0 YVsnSm9pbiBUeXBlJ10pIHsKKyAgICBjYXNlICdBbnRpJzogcmV0dXJuIHsi aW1hZ2UiOiJleF9uZXN0ZWRfbG9vcF9hbnRpX2pvaW4ucG5nIiwiaW1hZ2Vf dGV4dCI6Ik5lc3RlZCBMb29wIEFudGkgSm9pbiJ9OworICAgIGNhc2UgJ1Nl bWknOiByZXR1cm4geyJpbWFnZSI6ImV4X25lc3RlZF9sb29wX3NlbWlfam9p bi5wbmciLCJpbWFnZV90ZXh0IjoiTmVzdGVkIExvb3AgU2VtaSBKb2luIn07 CisgICAgZGVmYXVsdDogcmV0dXJuIHsiaW1hZ2UiOiJleF9uZXN0ZWQucG5n IiwiaW1hZ2VfdGV4dCI6Ik5lc3RlZCBMb29wICIgKyBkYXRhWydKb2luIFR5 cGUnXSArICIgSm9pbiJ9OworICB9Cit9LAorIlJlY3Vyc2l2ZSBVbmlvbiIg OiB7ImltYWdlIjoiZXhfcmVjdXJzaXZlX3VuaW9uLnBuZyIsImltYWdlX3Rl eHQiOiJSZWN1cnNpdmUgVW5pb24ifSwKKyJSZXN1bHQiIDogeyJpbWFnZSI6 ImV4X3Jlc3VsdC5wbmciLCJpbWFnZV90ZXh0IjoiUmVzdWx0In0sCisiU2Ft cGxlIFNjYW4iIDogeyJpbWFnZSI6ImV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4 dCI6IlNhbXBsZSBTY2FuIn0sCisiU2NhbiIgOiB7ImltYWdlIjoiZXhfc2Nh bi5wbmciLCJpbWFnZV90ZXh0IjoiU2NhbiJ9LAorIlNlZWsiIDogeyJpbWFn ZSI6ImV4X3NlZWsucG5nIiwiaW1hZ2VfdGV4dCI6IlNlZWsifSwKKyJTZXRP cCIgOiBmdW5jdGlvbihkYXRhKSB7CisgIHZhciBzdHJhdGVneSA9IGRhdGFb J1N0cmF0ZWd5J10sCisgICAgICBjb21tYW5kID0gZGF0YVsnQ29tbWFuZCdd OworCisgIGlmKHN0cmF0ZWd5ID09ICJIYXNoZWQiKSB7CisgICAgaWYoY29t bWFuZC5zdGFydHNXaXRoKCJJbnRlcnNlY3QiKSkgeworICAgICAgaWYoY29t bWFuZCA9PSAiSW50ZXJzZWN0IEFsbCIpCisgICAgICAgIHJldHVybiB7Imlt YWdlIjoiZXhfaGFzaF9zZXRvcF9pbnRlcnNlY3RfYWxsLnBuZyIsImltYWdl X3RleHQiOiJIYXNoZWQgSW50ZXJzZWN0IEFsbCJ9OworICAgICAgcmV0dXJu IHsiaW1hZ2UiOiJleF9oYXNoX3NldG9wX2ludGVyc2VjdC5wbmciLCJpbWFn ZV90ZXh0IjoiSGFzaGVkIEludGVyc2VjdCJ9OworICAgIH0KKyAgICBlbHNl IGlmIChjb21tYW5kLnN0YXJ0c1dpdGgoIkV4Y2VwdCIpKSB7CisgICAgICBp Zihjb21tYW5kID09ICJFeGNlcHQgQWxsIikKKyAgICAgICAgcmV0dXJuIHsi aW1hZ2UiOiJleF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nIiwiaW1hZ2Vf dGV4dCI6Ikhhc2hlZCBFeGNlcHQgQWxsIn07CisgICAgICByZXR1cm4geyJp bWFnZSI6ImV4X2hhc2hfc2V0b3BfZXhjZXB0LnBuZyIsImltYWdlX3RleHQi OiJIYXNoIEV4Y2VwdCJ9OworICAgIH0KKyAgICByZXR1cm4geyJpbWFnZSI6 ImV4X2hhc2hfc2V0b3BfdW5rbm93bi5wbmciLCJpbWFnZV90ZXh0IjoiSGFz aGVkIFNldE9wIFVua25vd24ifTsKKyAgfQorICByZXR1cm4geyJpbWFnZSI6 ImV4X3NldG9wLnBuZyIsImltYWdlX3RleHQiOiJTZXRPcCJ9OworfSwKKyJT ZXEgU2NhbiI6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgcmV0dXJuIHsiaW1hZ2Ui OiJleF9zY2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ1JlbGF0aW9uIE5h bWUnXX07Cit9LAorIlN1YnF1ZXJ5IFNjYW4iIDogeyJpbWFnZSI6ImV4X3N1 YnBsYW4ucG5nIiwiaW1hZ2VfdGV4dCI6IlN1YlF1ZXJ5IFNjYW4ifSwKKyJT b3J0IiA6IHsiaW1hZ2UiOiJleF9zb3J0LnBuZyIsImltYWdlX3RleHQiOiJT b3J0In0sCisiVGlkIFNjYW4iIDogeyJpbWFnZSI6ImV4X3RpZF9zY2FuLnBu ZyIsImltYWdlX3RleHQiOiJUaWQgU2NhbiJ9LAorIlVuaXF1ZSIgOiB7Imlt YWdlIjoiZXhfdW5pcXVlLnBuZyIsImltYWdlX3RleHQiOiJVbmlxdWUifSwK KyJWYWx1ZXMgU2NhbiIgOiB7ImltYWdlIjoiZXhfdmFsdWVzX3NjYW4ucG5n IiwiaW1hZ2VfdGV4dCI6IlZhbHVlcyBTY2FuIn0sCisiV2luZG93QWdnIiA6 IHsiaW1hZ2UiOiJleF93aW5kb3dfYWdncmVnYXRlLnBuZyIsImltYWdlX3Rl eHQiOiJXaW5kb3cgQWdncmVnYXRlIn0sCisiV29ya1RhYmxlIFNjYW4iIDog eyJpbWFnZSI6ImV4X3dvcmt0YWJsZV9zY2FuLnBuZyIsImltYWdlX3RleHQi OiJXb3JrVGFibGUgU2NhbiJ9LAorIlVuZGVmaW5lZCIgOiB7ImltYWdlIjoi ZXhfdW5rbm93bi5wbmciLCJpbWFnZV90ZXh0IjoiVW5kZWZpbmVkIn0sCit9 CisKKy8vIFNvbWUgcHJlZGVmaW5lZCBjb25zdGFudHMgdXNlZCB0byBjYWxj dWxhdGUgaW1hZ2UgbG9jYXRpb24gYW5kIGl0cyBib3JkZXIKK3ZhciBwV0lE VEggPSBwSEVJR0hUID0gMTAwLgorICAgIElNQUdFX1dJRFRIID0gSU1BR0Vf SEVJR0hUID0gNTA7Cit2YXIgb2Zmc2V0WCA9IDIwMCwKKyAgICBvZmZzZXRZ ID0gNjA7Cit2YXIgQVJST1dfV0lEVEggPSAxMCwKKyAgICBBUlJPV19IRUlH SFQgPSAxMDsKK3ZhciBUWFRfQUxMSUdOID0gNSwKKyAgICBUWFRfU0laRSA9 ICIxNXB4IjsKK3ZhciBUT1RBTF9XSURUSCA9IHVuZGVmaW5lZCwKKyAgICBU T1RBTF9IRUlHSFQgPSB1bmRlZmluZWQ7Cit2YXIgeE1hcmdpbiA9IDI1LAor ICAgIHlNYXJnaW4gPSAyNTsKKworLy8gQmFja2JvbmUgbW9kZWwgZm9yIGVh Y2ggcGxhbiBwcm9wZXJ0eSBvZiBpbnB1dCBKU09OIG9iamVjdAordmFyIFBs YW5Nb2RlbCA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CisgICAgZGVmYXVs dHM6IHsKKyAgICAgICAgIk5vZGUgVHlwZSI6IHVuZGVmaW5lZCwKKyAgICAg ICAgIlN0YXJ0dXAgQ29zdCI6IHVuZGVmaW5lZCwKKyAgICAgICAgIlRvdGFs IENvc3QiOiB1bmRlZmluZWQsCisgICAgICAgICJQbGFuIFJvd3MiOiB1bmRl ZmluZWQsCisgICAgICAgICJQbGFuIFdpZHRoIjogdW5kZWZpbmVkLAorICAg ICAgICAiUGxhbnMiOiBbXSwKKyAgICAgICAgbGV2ZWw6IFtdLAorICAgICAg ICAiaW1hZ2UiOiB1bmRlZmluZWQsCisgICAgICAgICJpbWFnZV90ZXh0Ijog dW5kZWZpbmVkLAorICAgICAgICB4cG9zOiB1bmRlZmluZWQsCisgICAgICAg IHlwb3M6IHVuZGVmaW5lZCwKKyAgICAgICAgd2lkdGg6IHBXSURUSCwKKyAg ICAgICAgaGVpZ2h0OiBwSEVJR0hUCisgICAgfSwKKyAgICBwYXJzZTogZnVu Y3Rpb24oZGF0YSkgeworICAgICAgICB2YXIgaWR4ID0gMSwKKyAgICAgICAg ICAgIGx2bCA9IGRhdGEubGV2ZWwgPSBkYXRhLmxldmVsIHx8IFtpZHhdLAor ICAgICAgICAgICAgcGxhbnMgPSBbXSwKKyAgICAgICAgICAgIG5vZGVfdHlw ZSA9IGRhdGFbJ05vZGUgVHlwZSddLAorICAgICAgICAgICAgLy8gQ2FsY3Vs YXRpbmcgcmVsYXRpdmUgeHBvcyBvZiBjdXJyZW50IG5vZGUgZnJvbSB0b3Ag bm9kZQorICAgICAgICAgICAgeHBvcyA9IGRhdGEueHBvcyA9IGRhdGEueHBv cyAtIHBXSURUSCwKKyAgICAgICAgICAgIC8vIENhbGN1bGF0aW5nIHJlbGF0 aXZlIHlwb3Mgb2YgY3VycmVudCBub2RlIGZyb20gdG9wIG5vZGUKKyAgICAg ICAgICAgIHlwb3MgPSBkYXRhLnlwb3MsCisgICAgICAgICAgICBtYXhDaGls ZFdpZHRoID0gMDsKKworICAgICAgICBkYXRhWyd3aWR0aCddID0gcFdJRFRI OworICAgICAgICBkYXRhWydoZWlnaHQnXSA9IHBIRUlHSFQ7CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogY2FsY3VsYXRpbmcgeHBvcywgeXBvcywgd2lk dGggYW5kIGhlaWdodCBpZiBjdXJyZW50IG5vZGUgaXMgYSBzdWJwbGFuCisg ICAgICAgICAqLworICAgICAgICBpZiAoZGF0YVsnUGFyZW50IFJlbGF0aW9u c2hpcCddID09PSAiU3ViUGxhbiIpIHsKKyAgICAgICAgICAgIGRhdGFbJ3dp ZHRoJ10gKz0gKHhNYXJnaW4gKiAyKSArICh4TWFyZ2luIC8gMik7CisgICAg ICAgICAgICBkYXRhWydoZWlnaHQnXSArPSAoeU1hcmdpbiAqIDIpOworICAg ICAgICAgICAgZGF0YVsneXBvcyddICs9IHlNYXJnaW47CisgICAgICAgICAg ICB4cG9zIC09IHhNYXJnaW47CisgICAgICAgICAgICB5cG9zICs9IHlNYXJn aW47CisgICAgICAgIH0KKworICAgICAgICBpZihub2RlX3R5cGUuc3RhcnRz V2l0aCgiKHNsaWNlIikpCisgICAgICAgICAgICBub2RlX3R5cGUgPSBub2Rl X3R5cGUuc3Vic3RyaW5nKDAsNyk7CisKKyAgICAgICAgLy8gR2V0IHRoZSBp bWFnZSBpbmZvcm1hdGlvbiBmb3IgY3VycmVudCBub2RlCisgICAgICAgIHZh ciBtYXBwZXJPYmogPSAoXy5pc0Z1bmN0aW9uKGltYWdlTWFwcGVyW25vZGVf dHlwZV0pICYmCisgICAgICAgICAgICAgICAgaW1hZ2VNYXBwZXJbbm9kZV90 eXBlXS5hcHBseSh1bmRlZmluZWQsIFtkYXRhXSkpIHx8CisgICAgICAgICAg ICAgICAgaW1hZ2VNYXBwZXJbbm9kZV90eXBlXSB8fCAnVW5kZWZpbmVkJzsK KworICAgICAgICBkYXRhWyJpbWFnZSJdID0gbWFwcGVyT2JqWyJpbWFnZSJd OworICAgICAgICBkYXRhWyJpbWFnZV90ZXh0Il0gPSBtYXBwZXJPYmpbImlt YWdlX3RleHQiXTsKKworICAgICAgICAvLyBTdGFydCBjYWxjdWxhdGluZyB4 cG9zLCB5cG9zLCB3aWR0aCBhbmQgaGVpZ2h0IGZvciBjaGlsZCBwbGFucyBp ZiBhbnkKKyAgICAgICAgaWYgKCdQbGFucycgaW4gZGF0YSkgeworCisgICAg ICAgICAgICBkYXRhWyd3aWR0aCddICs9IG9mZnNldFg7CisKKyAgICAgICAg ICAgIF8uZWFjaChkYXRhWydQbGFucyddLCBmdW5jdGlvbihwKSB7CisgICAg ICAgICAgICAgICAgdmFyIGxldmVsID0gXy5jbG9uZShsdmwpLAorICAgICAg ICAgICAgICAgICAgICBwbGFuID0gbmV3IFBsYW5Nb2RlbCgpOworCisgICAg ICAgICAgICAgICAgbGV2ZWwucHVzaChpZHgpOworICAgICAgICAgICAgICAg IHBsYW4uc2V0KHBsYW4ucGFyc2UoXy5leHRlbmQoCisgICAgICAgICAgICAg ICAgICAgIHAsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJsZXZlbCI6 IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgeHBvczogeHBvcyAt IG9mZnNldFgsCisgICAgICAgICAgICAgICAgICAgICAgICB5cG9zOiB5cG9z CisgICAgICAgICAgICAgICAgICAgIH0pKSk7CisKKyAgICAgICAgICAgICAg ICBpZiAobWF4Q2hpbGRXaWR0aCA8IHBsYW4uZ2V0KCd3aWR0aCcpKSB7Cisg ICAgICAgICAgICAgICAgICAgIG1heENoaWxkV2lkdGggPSBwbGFuLmdldCgn d2lkdGgnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg ICB2YXIgY2hpbGRIZWlnaHQgPSBwbGFuLmdldCgnaGVpZ2h0Jyk7CisKKyAg ICAgICAgICAgICAgICBpZiAoaWR4ICE9PSAxKSB7CisgICAgICAgICAgICAg ICAgICAgIGRhdGFbJ2hlaWdodCddID0gZGF0YVsnaGVpZ2h0J10gKyBjaGls ZEhlaWdodCArIG9mZnNldFk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm IChjaGlsZEhlaWdodCA+IGRhdGFbJ2hlaWdodCddKSB7CisgICAgICAgICAg ICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0gY2hpbGRIZWlnaHQ7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHlwb3MgKz0gY2hpbGRI ZWlnaHQgKyBvZmZzZXRZOworCisgICAgICAgICAgICAgICAgcGxhbnMucHVz aChwbGFuKTsKKyAgICAgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAg IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWwgV2lkdGggYW5k IEhlaWdodCBvZiBjdXJyZW50IG5vZGUKKyAgICAgICAgZGF0YVsnd2lkdGgn XSArPSBtYXhDaGlsZFdpZHRoOworICAgICAgICBkYXRhWydQbGFucyddID0g cGxhbnM7CisKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKworICAg IC8qCisgICAgICogUmVxdWlyZWQgdG8gcGFyc2UgYW5kIGluY2x1ZGUgbm9u LWRlZmF1bHQgcGFyYW1zIG9mCisgICAgICogcGxhbiBpbnRvIGJhY2tib25l IG1vZGVsCisgICAgICovCisgICAgdG9KU09OOiBmdW5jdGlvbihub25fcmVj dXJzaXZlKSB7CisgICAgICB2YXIgcmVzID0gQmFja2JvbmUuTW9kZWwucHJv dG90eXBlLnRvSlNPTi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworCisgICAg ICBpZiAobm9uX3JlY3Vyc2l2ZSkgeworICAgICAgICAgICAgZGVsZXRlIHJl c1snUGxhbnMnXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIg cGxhbnMgPSBbXTsKKyAgICAgICAgICAgIF8uZWFjaChyZXNbJ1BsYW5zJ10s IGZ1bmN0aW9uKHApIHsKKyAgICAgICAgICAgICAgcGxhbnMucHVzaChwLnRv SlNPTigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmVzWydQ bGFucyddID0gcGxhbnM7CisgICAgICB9CisgICAgICByZXR1cm4gcmVzOwor ICAgIH0sCisKKyAgICAvLyBEcmF3IGFuIGFycm93IHRvIHBhcmVudCBub2Rl CisgICAgZHJhd1BvbHlMaW5lOiBmdW5jdGlvbihnLCBzdGFydFgsIHN0YXJ0 WSwgZW5kWCwgZW5kWSwgb3B0cywgYXJyb3dPcHRzKSB7CisgICAgICAvLyBD YWxjdWxhdGUgZW5kIHBvaW50IG9mIGZpcnN0IHN0YXJ0aW5nIHN0cmFpZ2h0 IGxpbmUgKHN0YXJ0eDEsIHN0YXJ0eTEpCisgICAgICAvLyBDYWxjdWxhdGUg c3RhcnQgcG9pbnQgb2YgMm5kIHN0cmFpZ2h0IGxpbmUgKGVuZHgxLCBlbmR5 MSkKKyAgICAgIHZhciBtaWRYMSA9IHN0YXJ0WCArICgoZW5kWCAtIHN0YXJ0 WCkgLyAzKSwKKyAgICAgICAgICBtaWRYMiA9IHN0YXJ0WCArICgyICogKChl bmRYIC0gc3RhcnRYKSAvIDMpKTsKKworICAgICAgLy9jcmVhdGUgYXJyb3cg aGVhZAorICAgICAgdmFyIGFycm93ID0gZy5wb2x5Z29uKAorICAgICAgICAg ICAgICAgICAgICBbMCwgQVJST1dfSEVJR0hULAorICAgICAgICAgICAgICAg ICAgICAoQVJST1dfV0lEVEggLyAyKSxBUlJPV19IRUlHSFQsCisgICAgICAg ICAgICAgICAgICAgIChBUlJPV19IRUlHSFQgLyA0KSwgMCwKKyAgICAgICAg ICAgICAgICAgICAgMCwgQVJST1dfV0lEVEhdCisgICAgICAgICAgICAgICAg ICAgICkudHJhbnNmb3JtKCJyOTAiKTsKKyAgICAgIHZhciBtYXJrZXIgPSBh cnJvdy5tYXJrZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg QVJST1dfV0lEVEgsIEFSUk9XX0hFSUdIVCwgMCwgKEFSUk9XX1dJRFRIIC8g MikKKyAgICAgICAgICAgICAgICAgICAgICAgICApLmF0dHIoYXJyb3dPcHRz KTsKKworICAgICAgLy8gRmlyc3Qgc3RyYWlnaHQgbGluZQorICAgICAgZy5s aW5lKAorICAgICAgICBzdGFydFgsIHN0YXJ0WSwgbWlkWDEsIHN0YXJ0WQor ICAgICAgICApLmF0dHIob3B0cyk7CisKKyAgICAgIC8vIERpYWdvbmFsIGxp bmUKKyAgICAgIGcubGluZSgKKyAgICAgICAgbWlkWDEtMSwgc3RhcnRZKzEs IG1pZFgyKzEsIGVuZFkKKyAgICAgICAgKS5hdHRyKG9wdHMpOworCisgICAg ICAvLyBMYXN0IHN0cmFpZ2h0IGxpbmUKKyAgICAgIHZhciBsaW5lID0gZy5s aW5lKAorICAgICAgICAgICAgICAgICAgIG1pZFgyLCBlbmRZLCBlbmRYLCBl bmRZCisgICAgICAgICAgICAgICAgICAgKS5hdHRyKG9wdHMpOworICAgICAg bGluZS5hdHRyKHttYXJrZXJFbmQ6IG1hcmtlcn0pCisgICAgfSwKKworICAg IC8vIERyYXcgaW1hZ2UsIGl0cyBuYW1lIGFuZCBpdHMgdG9vbHRpcAorICAg IGRyYXc6IGZ1bmN0aW9uKHMsIHhwb3MsIHlwb3MsIHBYcG9zLCBwWXBvcywg Z3JhcGhDb250YWluZXIsIHRvb2xUaXBDb250YWluZXIpIHsKKyAgICAgICAg dmFyIGcgPSBzLmcoKTsKKyAgICAgICAgdmFyIHRvb2xUaXBUYWJsZSA9IHt9 OworICAgICAgICB2YXIgY3VycmVudFhwb3MgPSB4cG9zICsgdGhpcy5nZXQo J3hwb3MnKSAsCisgICAgICAgICAgICBjdXJyZW50WXBvcyA9IHlwb3MgKyB0 aGlzLmdldCgneXBvcycpLAorICAgICAgICAgICAgaXNTdWJQbGFuID0gKHRo aXMuZ2V0KCdQYXJlbnQgUmVsYXRpb25zaGlwJykgPT09ICJTdWJQbGFuIik7 CisKKyAgICAgICAgLy8gRHJhdyB0aGUgc3VicGxhbiByZWN0YW5nbGUKKyAg ICAgICAgaWYgKGlzU3ViUGxhbikgeworICAgICAgICAgIGcucmVjdCgKKyAg ICAgICAgICAgIGN1cnJlbnRYcG9zIC0gdGhpcy5nZXQoJ3dpZHRoJykgKyBw V0lEVEggKyB4TWFyZ2luLAorICAgICAgICAgICAgY3VycmVudFlwb3MgLSB5 TWFyZ2luLAorICAgICAgICAgICAgdGhpcy5nZXQoJ3dpZHRoJykgLSB4TWFy Z2luLAorICAgICAgICAgICAgdGhpcy5nZXQoJ2hlaWdodCcpLCA1CisgICAg ICAgICAgKS5hdHRyKHsKKyAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0 NCcsCisgICAgICAgICAgICAgICdzdHJva2VXaWR0aCc6IDEuMiwKKyAgICAg ICAgICAgICAgZmlsbDogJ2dyYXknLAorICAgICAgICAgICAgICBmaWxsT3Bh Y2l0eTogMC4yCisgICAgICAgICAgfSk7CisKKyAgICAgICAgICAvL3Byb3Zp ZGUgc3VicGxhbiBuYW1lCisgICAgICAgICAgdmFyIHRleHQgPSBnLnRleHQo CisgICAgICAgICAgICBjdXJyZW50WHBvcyAgKyBwV0lEVEggLSAoIHRoaXMu Z2V0KCd3aWR0aCcpIC8gMikgLSB4TWFyZ2luLAorICAgICAgICAgICAgY3Vy cmVudFlwb3MgKyBwSEVJR0hUICAtICh0aGlzLmdldCgnaGVpZ2h0JykgLyAy KSAtIHlNYXJnaW4sCisgICAgICAgICAgICB0aGlzLmdldCgnU3VicGxhbiBO YW1lJykKKyAgICAgICAgICApLmF0dHIoeworICAgICAgICAgICAgZm9udFNp emU6IFRYVF9TSVpFLCAidGV4dC1hbmNob3IiOiJzdGFydCIsCisgICAgICAg ICAgICBmaWxsOiAncmVkJworICAgICAgICAgIH0pOworICAgICAgICB9CisK KyAgICAgICAgLy8gRHJhdyB0aGUgYWN0dWFsIGltYWdlIGZvciBjdXJyZW50 IG5vZGUKKyAgICAgICAgdmFyIGltYWdlID0gZy5pbWFnZSgKKyAgICAgICAg ICAgIHBnRXhwbGFpbi5wcmVmaXggKyB0aGlzLmdldCgnaW1hZ2UnKSwKKyAg ICAgICAgICAgIGN1cnJlbnRYcG9zICsgKHBXSURUSCAtIElNQUdFX1dJRFRI KSAvIDIsCisgICAgICAgICAgICBjdXJyZW50WXBvcyArIChwSEVJR0hUIC0g SU1BR0VfSEVJR0hUKSAvIDIsCisgICAgICAgICAgICBJTUFHRV9XSURUSCwK KyAgICAgICAgICAgIElNQUdFX0hFSUdIVAorICAgICAgICApOworCisgICAg ICAgIC8vIERyYXcgdG9vbHRpcAorICAgICAgICB2YXIgaW1hZ2VfZGF0YSA9 IHRoaXMudG9KU09OKCk7CisgICAgICAgIGltYWdlLm1vdXNlb3ZlcihmdW5j dGlvbihldnQpeworCisgICAgICAgICAgLy8gRW1wdHkgdGhlIHRvb2x0aXAg Y29udGVudCBpZiBpdCBoYXMgYW55IGFuZCBhZGQgbmV3IGRhdGEKKyAgICAg ICAgICB0b29sVGlwQ29udGFpbmVyLmVtcHR5KCk7CisgICAgICAgICAgdmFy IHRvb2x0aXAgPSAkKCc8dGFibGU+PC90YWJsZT4nLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbGFzczogInBnYWRtaW4tdG9vbHRpcC10YWJsZSIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0eWxlOiAiYm9yZGVyLWNvbGxhcHNlOiBj b2xsYXBzZTsgYm9yZGVyLXNwYWNpbmc6IDFweDsgdG9wOiBhdXRvOyBsZWZ0 OiBhdXRvOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICAgICApLmFwcGVuZFRvKHRvb2xUaXBDb250YWlu ZXIpOworICAgICAgICAgIF8uZWFjaChpbWFnZV9kYXRhLCBmdW5jdGlvbih2 YWx1ZSxrZXkpIHsKKyAgICAgICAgICAgIGlmKGtleSAhPT0gJ2ltYWdlJyAm JiBrZXkgIT09ICdQbGFucycgJiYKKyAgICAgICAgICAgICAgIGtleSAhPT0g J2xldmVsJyAmJiBrZXkgIT09ICdpbWFnZScgJiYKKyAgICAgICAgICAgICAg IGtleSAhPT0gJ2ltYWdlX3RleHQnICYmIGtleSAhPT0gJ3hwb3MnICYmCisg ICAgICAgICAgICAgICBrZXkgIT09ICd5cG9zJyAmJiBrZXkgIT09ICd3aWR0 aCcgJiYKKyAgICAgICAgICAgICAgIGtleSAhPT0gJ2hlaWdodCcpIHsKKyAg ICAgICAgICAgICAgdG9vbHRpcC5hcHBlbmQoICc8dHI+PHRkIGNsYXNzPSJs YWJlbCI+JyArIGtleSArICc8L3RkPjx0ZCBjbGFzcz0ibGFiZWwiPicgKyB2 YWx1ZSArICc8L3RkPjwvdHI+JyApOworICAgICAgICAgICAgfTsKKyAgICAg ICAgICB9KTsKKworICAgICAgICAgIHZhciB6b29tRmFjdG9yID0gZ3JhcGhD b250YWluZXIuZGF0YSgnem9vbS1mYWN0b3InKTsKKworICAgICAgICAgIC8v IENhbGN1bGF0ZSBjby1vcmRpbmF0ZXMgZm9yIHRvb2x0aXAKKyAgICAgICAg ICB2YXIgdG9vbFRpcFggPSAoKGN1cnJlbnRYcG9zICsgcFdJRFRIKSp6b29t RmFjdG9yIC0gZ3JhcGhDb250YWluZXIuc2Nyb2xsTGVmdCgpKTsKKyAgICAg ICAgICB2YXIgdG9vbFRpcFkgPSAoKGN1cnJlbnRZcG9zICsgcEhFSUdIVCkq em9vbUZhY3RvciAtIGdyYXBoQ29udGFpbmVyLnNjcm9sbFRvcCgpKTsKKwor ICAgICAgICAgIC8vIFJlY2FsY3VsYXRlIHgueSBpZiB0b29sdGlwIGlzIGdv aW5nIG91dCBvZiBzY3JlZW4KKyAgICAgICAgICBpZihkb2N1bWVudC5jaGls ZHJlblswXS5jbGllbnRXaWR0aCA8ICh0b29sVGlwWCArIHRvb2xUaXBDb250 YWluZXJbMF0uY2xpZW50V2lkdGgpKQorICAgICAgICAgICAgdG9vbFRpcFgg LT0gKHRvb2xUaXBDb250YWluZXJbMF0uY2xpZW50V2lkdGggKyAocFdJRFRI Knpvb21GYWN0b3IpKTsKKyAgICAgICAgICBpZihkb2N1bWVudC5jaGlsZHJl blswXS5jbGllbnRIZWlnaHQgPCAodG9vbFRpcFkgKyB0b29sVGlwQ29udGFp bmVyWzBdLmNsaWVudEhlaWdodCkpCisgICAgICAgICAgICB0b29sVGlwWSAt PSAodG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRIZWlnaHQgKyAoKHBIRUlH SFQvMikqem9vbUZhY3RvcikpOworCisgICAgICAgICAgdG9vbFRpcFggPSB0 b29sVGlwWCA8IDAgPyAwIDogKHRvb2xUaXBYKTsKKyAgICAgICAgICB0b29s VGlwWSA9IHRvb2xUaXBZIDwgMCA/IDAgOiAodG9vbFRpcFkpOworCisgICAg ICAgICAgLy8gU2hvdyB0b29sVGlwIGF0IHJlc3BlY3RpdmUgeCx5IGNvb3Jk aW5hdGVzCisgICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5jc3MoeydvcGFj aXR5JzogJzAuOCd9KTsKKyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmNz cygnbGVmdCcsIHRvb2xUaXBYKTsKKyAgICAgICAgICB0b29sVGlwQ29udGFp bmVyLmNzcyggJ3RvcCcsIHRvb2xUaXBZKTsKKyAgICAgICAgfSk7CisKKyAg ICAgICAgLy8gUmVtb3ZlIHRvb2x0aXAgd2hlbiBtb3VzZSBpcyBvdXQgZnJv bSBub2RlJ3MgYXJlYQorICAgICAgICBpbWFnZS5tb3VzZW91dChmdW5jdGlv bigpIHsKKyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmVtcHR5KCk7Cisg ICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5jc3MoeydvcGFjaXR5JzogJzAn fSk7CisgICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5jc3MoJ2xlZnQnLCAw KTsKKyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmNzcyggJ3RvcCcsIDAp OworICAgICAgICB9KTsKKworICAgICAgICAvLyBEcmF3IHRleHQgYmVsb3cg dGhlIG5vZGUKKyAgICAgICAgdmFyIGxhYmVsID0gZy5nKCk7CisgICAgICAg IGcubXVsdGl0ZXh0KAorICAgICAgICAgIGN1cnJlbnRYcG9zICsgKHBXSURU SCAvIDIpLAorICAgICAgICAgIGN1cnJlbnRZcG9zICsgcEhFSUdIVCAtIFRY VF9BTExJR04sCisgICAgICAgICAgdGhpcy5nZXQoJ2ltYWdlX3RleHQnKSwK KyAgICAgICAgICAxNTAsCisgICAgICAgICAgeyJmb250LXNpemUiOiBUWFRf U0laRSAsInRleHQtYW5jaG9yIjoibWlkZGxlIn0KKyAgICAgICAgKTsKKwor ICAgICAgICAvLyBEcmF3IEFycm93IHRvIHBhcmVudCBvbmx5IGl0cyBub3Qg dGhlIGZpcnN0IG5vZGUKKyAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBZ cG9zKSkgeworICAgICAgICAgICAgdmFyIHN0YXJ0eCA9IGN1cnJlbnRYcG9z ICsgcFdJRFRIOworICAgICAgICAgICAgdmFyIHN0YXJ0eSA9IGN1cnJlbnRZ cG9zICsgKHBIRUlHSFQgLyAyKTsKKyAgICAgICAgICAgIHZhciBlbmR4ID0g cFhwb3MgLSBBUlJPV19XSURUSDsKKyAgICAgICAgICAgIHZhciBlbmR5ID0g cFlwb3MgKyAocEhFSUdIVCAvIDIpOworICAgICAgICAgICAgdmFyIHN0YXJ0 X2Nvc3QgPSB0aGlzLmdldCgiU3RhcnR1cCBDb3N0IiksCisgICAgICAgICAg ICAgICAgdG90YWxfY29zdCA9IHRoaXMuZ2V0KCJUb3RhbCBDb3N0Iik7CisK KyAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBhcnJvdyB3aWR0aCBhY2NvcmRp bmcgdG8gY29zdCBvZiBhIHBhcnRpY3VsYXIgcGxhbgorICAgICAgICAgICAg dmFyIGFycm93X3NpemUgPSBNYXRoLnJvdW5kKE1hdGgubG9nKChzdGFydF9j b3N0K3RvdGFsX2Nvc3QpLzIgKyBzdGFydF9jb3N0KSk7CisgICAgICAgICAg ICBhcnJvd19zaXplID0gYXJyb3dfc2l6ZSA8IDEgPyAxIDogYXJyb3dfc2l6 ZSA+IDEwID8gMTAgOiBhcnJvd19zaXplOworCisgICAgICAgICAgICB2YXIg YXJyb3dfdmlld19ib3ggPSBbMCwgMCwgMipBUlJPV19XSURUSCwgMipBUlJP V19IRUlHSFRdOworICAgICAgICAgICAgdmFyIG9wdHMgPSB7c3Ryb2tlOiAi IzAwMDAwMCIsIHN0cm9rZVdpZHRoOiBhcnJvd19zaXplICsgMX0sCisgICAg ICAgICAgICAgICAgc3VicGxhbk9wdHMgPSB7c3Ryb2tlOiAiIzg2NjQ4NiIs IHN0cm9rZVdpZHRoOiBhcnJvd19zaXplICsgMX0sCisgICAgICAgICAgICAg ICAgYXJyb3dPcHRzID0ge3ZpZXdCb3g6IGFycm93X3ZpZXdfYm94LmpvaW4o IiAiKX07CisKKyAgICAgICAgICAgIC8vIERyYXcgYW4gYXJyb3cgZnJvbSBj dXJyZW50IG5vZGUgdG8gaXRzIHBhcmVudAorICAgICAgICAgICAgdGhpcy5k cmF3UG9seUxpbmUoCisgICAgICAgICAgICAgIGcsIHN0YXJ0eCwgc3RhcnR5 LCBlbmR4LCBlbmR5LAorICAgICAgICAgICAgICBpc1N1YlBsYW4gPyBzdWJw bGFuT3B0cyA6IG9wdHMsIGFycm93T3B0cworICAgICAgICAgICAgKTsKKyAg ICAgICAgfQorCisgICAgICAgIHZhciBwbGFucyA9IHRoaXMuZ2V0KCdQbGFu cycpOworCisgICAgICAgIC8vIERyYXcgbm9kZXMgZm9yIGN1cnJlbnQgcGxh bidzIGNoaWxkcmVuCisgICAgICAgIF8uZWFjaChwbGFucywgZnVuY3Rpb24o cCkgeworICAgICAgICAgICAgcC5kcmF3KHMsIHhwb3MsIHlwb3MsIGN1cnJl bnRYcG9zLCBjdXJyZW50WXBvcywgZ3JhcGhDb250YWluZXIsIHRvb2xUaXBD b250YWluZXIpOworICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworLy8gTWFp biBiYWNrYm9uZSBtb2RlbCB0byBzdG9yZSBKU09OIG9iamVjdAordmFyIE1h aW5QbGFuTW9kZWwgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoeworICAgIGRl ZmF1bHRzOiB7CisgICAgICAgICJQbGFuIjogdW5kZWZpbmVkLAorICAgICAg ICB4cG9zOiAwLAorICAgICAgICB5cG9zOiAwLAorICAgIH0sCisgICAgaW5p dGlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2V0KCJQbGFu IiwgbmV3IFBsYW5Nb2RlbCgpKTsKKyAgICB9LAorCisgICAgLy8gUGFyc2Ug dGhlIEpTT04gZGF0YSBhbmQgZmV0Y2ggaXRzIGNoaWxkcmVuIHBsYW5zCisg ICAgcGFyc2U6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICBpZiAoZGF0YSAm JiAnUGxhbicgaW4gZGF0YSkgeworICAgICAgICAgICAgdmFyIHBsYW4gPSB0 aGlzLmdldCgiUGxhbiIpOworICAgICAgICAgICAgcGxhbi5zZXQoCisgICAg ICAgICAgICAgIHBsYW4ucGFyc2UoCisgICAgICAgICAgICAgICAgXy5leHRl bmQoCisgICAgICAgICAgICAgICAgICBkYXRhWydQbGFuJ10sIHsKKyAgICAg ICAgICAgICAgICAgICAgeHBvczogMCwKKyAgICAgICAgICAgICAgICAgICAg eXBvczogMAorICAgICAgICAgICAgICAgICAgfSkpKTsKKworICAgICAgICAg ICAgZGF0YVsneHBvcyddID0gMDsKKyAgICAgICAgICAgIGRhdGFbJ3lwb3Mn XSA9IDA7CisgICAgICAgICAgICBkYXRhWyd3aWR0aCddID0gcGxhbi5nZXQo J3dpZHRoJykgKyAoeE1hcmdpbiAqIDIpOworICAgICAgICAgICAgZGF0YVsn aGVpZ2h0J10gPSBwbGFuLmdldCgnaGVpZ2h0JykgKyAoeU1hcmdpbiAqIDIp OworCisgICAgICAgICAgICBkZWxldGUgZGF0YVsnUGxhbiddOworICAgICAg ICB9CisKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKyAgICB0b0pT T046IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHJlcyA9IEJhY2tib25lLk1v ZGVsLnByb3RvdHlwZS50b0pTT04uYXBwbHkodGhpcywgYXJndW1lbnRzKTsK KworICAgICAgaWYgKHJlcy5QbGFuKSB7CisgICAgICAgIHJlcy5QbGFuID0g cmVzLlBsYW4udG9KU09OKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBy ZXM7CisgICAgfSwKKyAgICBkcmF3OiBmdW5jdGlvbihzLCB4cG9zLCB5cG9z LCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcikgeworICAgICAg ICB2YXIgZyA9IHMuZygpOworCisgICAgICAgIC8vZHJhdyB0aGUgYm9yZGVy CisgICAgICAgIGcucmVjdCgKKwkgICAgICAgIDEwLCAxMCwgdGhpcy5nZXQo J3dpZHRoJykgLSAxMCwgdGhpcy5nZXQoJ2hlaWdodCcpIC0gMTAsIDUKKwkg ICAgKS5hdHRyKHsKKyAgICAgICAgICAgIHN0cm9rZTogJyNGRkVCQ0QnLCAn c3Ryb2tlV2lkdGgnOiAxLjIsCisgICAgICAgICAgICBmaWxsOiAnI0ZGRjhE QycsIGZpbGxPcGFjaXR5OiAwLjUKKyAgICAgICAgfSk7CisKKyAgICAgICAg Ly9GZXRjaCB0b3RhbCB3aWR0aCwgaGVpZ2h0CisgICAgICAgIFRPVEFMX1dJ RFRIID0gdGhpcy5nZXQoJ3dpZHRoJyk7CisgICAgICAgIFRPVEFMX0hFSUdI VCA9IHRoaXMuZ2V0KCdoZWlnaHQnKTsKKyAgICAgICAgdmFyIHBsYW4gPSB0 aGlzLmdldCgnUGxhbicpOworCisgICAgICAgIC8vRHJhdyBleHBsYWluIGdy YXBoCisgICAgICAgIHBsYW4uZHJhdyhnLCB4cG9zLCB5cG9zLCB1bmRlZmlu ZWQsIHVuZGVmaW5lZCwgZ3JhcGhDb250YWluZXIsIHRvb2xUaXBDb250YWlu ZXIpOworICAgIH0KK30pOworCisvLyBQYXJzZSBhbmQgZHJhdyBmdWxsIGdy YXBoaWNhbCBleHBsYWluCitfLmV4dGVuZCgKKyAgICBwZ0V4cGxhaW4sIHsK KyAgICAgICAgLy8gQXNzdW1wdGlvbiBjb250YWluZXIgaXMgYSBqUXVlcnkg b2JqZWN0CisgICAgICAgIERyYXdKU09OUGxhbjogZnVuY3Rpb24oY29udGFp bmVyLCBwbGFuKSB7CisgICAgICAgICAgdmFyIG15X3BsYW5zID0gW107Cisg ICAgICAgICAgY29udGFpbmVyLmVtcHR5KCk7CisgICAgICAgICAgdmFyIGN1 cnJfem9vbV9mYWN0b3IgPSAxLjA7CisKKyAgICAgICAgICB2YXIgem9vbUlu QnRuID0gJCgnPHNwYW4+PC9zcGFuPicsIHsKKyAgICAgICAgICAgICAgICBj bGFzczogJ2V4cGxhaW4tem9vbS1idG4gZXhwbGFpbi16b29tLWluIGJhZGdl JywKKyAgICAgICAgICAgICAgICBzdHlsZTogJ3B1bGwtbGVmdCcKKyAgICAg ICAgICAgICAgICB9KS50ZXh0KCcrJykuYXBwZW5kVG8oY29udGFpbmVyKSwK KyAgICAgICAgICAgICAgem9vbU91dEJ0biA9ICQoJzxzcGFuPjwvc3Bhbj4n LCB7CisgICAgICAgICAgICAgICAgY2xhc3M6ICdleHBsYWluLXpvb20tYnRu IGV4cGxhaW4tem9vbS1vdXQgYmFkZ2UnLAorICAgICAgICAgICAgICAgIHN0 eWxlOiAncHVsbC1sZWZ0JworICAgICAgICAgICAgICAgIH0pLnRleHQoJy0n KS5hcHBlbmRUbyhjb250YWluZXIpOworCisgICAgICAgICAgLy8gTWFpbiBk aXYgdG8gYmUgZHJhd24gYWxsIGltYWdlcyBvbgorICAgICAgICAgIHZhciBw bGFuRGl2ID0gJCgnPGRpdj48L2Rpdj4nLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAge2NsYXNzOiAicGdhZG1pbi1leHBsYWluLWNvbnRhaW5lciIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogIm92ZXJmbG93 OiBhdXRvOyBtYXgtaGVpZ2h0OiA2NTBweDsgd2lkdGg6IDk5JTsifQorICAg ICAgICAgICAgICAgICAgICAgICAgICkuYXBwZW5kVG8oY29udGFpbmVyKTsK KworICAgICAgICAgICAgcGxhbkRpdi5kYXRhKCd6b29tLWZhY3RvcicsIGN1 cnJfem9vbV9mYWN0b3IpOworCisgICAgICAgICAgLy8gRGl2IHRvIGRyYXcg dG9vbC10aXAgb24KKyAgICAgICAgICB2YXIgdG9vbFRpcCA9ICQoJzxkaXY+ PC9kaXY+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpZDogInRv b2xUaXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICJw Z2FkbWluLWV4cGxhaW4tdG9vbFRpcCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHlsZTogInBvc2l0aW9uOiBhYnNvbHV0ZTtwYWRkaW5nOjVw eDsgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7b3BhY2l0eTowO2NvbG9yOiBj b3Juc2lsaztiYWNrZ3JvdW5kLWNvbG9yOiAjMDEwMTI1OyIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg ICApLmFwcGVuZFRvKGNvbnRhaW5lcik7CisgICAgICAgICAgdG9vbFRpcC5l bXB0eSgpOworICAgICAgICAgIHZhciB3ID0gMCwgaCA9IDAsCisgICAgICAg ICAgICAgIHggPSB4TWFyZ2luLCBoID0geU1hcmdpbjsKKworICAgICAgICAg IF8uZWFjaChwbGFuLCBmdW5jdGlvbihwKSB7CisgICAgICAgICAgICB2YXIg bWFpbl9wbGFuID0gbmV3IE1haW5QbGFuTW9kZWwoKTsKKworICAgICAgICAg ICAgLy8gUGFyc2UgSlNPTiBkYXRhIHRvIGJhY2tib25lIG1vZGVsCisgICAg ICAgICAgICBtYWluX3BsYW4uc2V0KG1haW5fcGxhbi5wYXJzZShwKSk7Cisg ICAgICAgICAgICB3ID0gbWFpbl9wbGFuLmdldCgnd2lkdGgnKTsKKyAgICAg ICAgICAgIGggPSBtYWluX3BsYW4uZ2V0KCdoZWlnaHQnKTsKKworICAgICAg ICAgICAgdmFyIHMgPSBTbmFwKHcsIGgpLAorICAgICAgICAgICAgICAgICRz dmcgPSAkKHMubm9kZSkuZGV0YWNoKCk7CisgICAgICAgICAgICBwbGFuRGl2 LmFwcGVuZCgkc3ZnKTsKKworICAgICAgICAgICAgbWFpbl9wbGFuLmRyYXco cywgdyAtIHhNYXJnaW4sIHlNYXJnaW4sICQoJy5wZ2FkbWluLWV4cGxhaW4t Y29udGFpbmVyJyksICQoJy5wZ2FkbWluLWV4cGxhaW4tdG9vbFRpcCcpKTsK KworICAgICAgICAgICAgem9vbUluQnRuLm9uKCdjbGljaycsIGZ1bmN0aW9u KGUpeworICAgICAgICAgICAgICBjdXJyX3pvb21fZmFjdG9yID0gKGN1cnJf em9vbV9mYWN0b3IgPiAyKSA/IDIgOiAoY3Vycl96b29tX2ZhY3RvciArIDAu MTApOworICAgICAgICAgICAgICB2YXIgem9vbUluTWF0cml4ID0gbmV3IFNu YXAubWF0cml4KCk7CisgICAgICAgICAgICAgIHpvb21Jbk1hdHJpeC5zY2Fs ZShjdXJyX3pvb21fZmFjdG9yLCBjdXJyX3pvb21fZmFjdG9yKTsKKworICAg ICAgICAgICAgICAkc3ZnLmZpbmQoJ2cnKS5maXJzdCgpLmF0dHIoe3RyYW5z Zm9ybTogem9vbUluTWF0cml4fSk7CisgICAgICAgICAgICAgICRzdmcuYXR0 cih7J3dpZHRoJzogdyAqIGN1cnJfem9vbV9mYWN0b3IsICdoZWlnaHQnOiBo ICogY3Vycl96b29tX2ZhY3Rvcn0pOworICAgICAgICAgICAgICBwbGFuRGl2 LmRhdGEoJ3pvb20tZmFjdG9yJywgY3Vycl96b29tX2ZhY3Rvcik7CisgICAg ICAgICAgICB9KSwKKworICAgICAgICAgICAgem9vbU91dEJ0bi5vbignY2xp Y2snLCBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgIGN1cnJfem9vbV9m YWN0b3IgPSAoY3Vycl96b29tX2ZhY3RvciA8IDAuMTApID8gMC4xMCA6IChj dXJyX3pvb21fZmFjdG9yIC0gMC4xMCk7CisgICAgICAgICAgICAgIHZhciB6 b29tSW5NYXRyaXggPSBuZXcgU25hcC5tYXRyaXgoKTsKKyAgICAgICAgICAg ICAgem9vbUluTWF0cml4LnNjYWxlKGN1cnJfem9vbV9mYWN0b3IsIGN1cnJf em9vbV9mYWN0b3IpOworCisgICAgICAgICAgICAgICRzdmcuZmluZCgnZycp LmZpcnN0KCkuYXR0cih7dHJhbnNmb3JtOiB6b29tSW5NYXRyaXh9KTsKKyAg ICAgICAgICAgICAgJHN2Zy5hdHRyKHsnd2lkdGgnOiB3ICogY3Vycl96b29t X2ZhY3RvciwgJ2hlaWdodCc6IGggKiBjdXJyX3pvb21fZmFjdG9yfSk7Cisg ICAgICAgICAgICAgIHBsYW5EaXYuZGF0YSgnem9vbS1mYWN0b3InLCBjdXJy X3pvb21fZmFjdG9yKTsKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgfSk7 CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIHJldHVybiBwZ0V4cGxhaW47 Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vanMvc25hcC5zdmctbWluLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9qcy9zbmFwLnN2Zy1taW4uanMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2N2QxOQotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25h cC5zdmctbWluLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8vIFNuYXAuc3ZnIDAu NC4xCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIOKAkyAyMDE1IEFkb2Jl IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor Ly8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl bnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl IGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ Q0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8g ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg b24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp bXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRh dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLworLy8gYnVpbGQ6IDIwMTUt MDQtMTMKKworIWZ1bmN0aW9uKGEpe3ZhciBiLGMsZD0iMC40LjIiLGU9Imhh c093blByb3BlcnR5IixmPS9bXC5cL10vLGc9L1xzKixccyovLGg9IioiLGk9 ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSxqPXtuOnt9fSxrPWZ1bmN0aW9u KCl7Zm9yKHZhciBhPTAsYj10aGlzLmxlbmd0aDtiPmE7YSsrKWlmKCJ1bmRl ZmluZWQiIT10eXBlb2YgdGhpc1thXSlyZXR1cm4gdGhpc1thXX0sbD1mdW5j dGlvbigpe2Zvcih2YXIgYT10aGlzLmxlbmd0aDstLWE7KWlmKCJ1bmRlZmlu ZWQiIT10eXBlb2YgdGhpc1thXSlyZXR1cm4gdGhpc1thXX0sbT1mdW5jdGlv bihhLGQpe2E9U3RyaW5nKGEpO3ZhciBlLGY9YyxnPUFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxoPW0ubGlzdGVuZXJzKGEpLGo9 MCxuPVtdLG89e30scD1bXSxxPWI7cC5maXJzdERlZmluZWQ9ayxwLmxhc3RE ZWZpbmVkPWwsYj1hLGM9MDtmb3IodmFyIHI9MCxzPWgubGVuZ3RoO3M+cjty KyspInpJbmRleCJpbiBoW3JdJiYobi5wdXNoKGhbcl0uekluZGV4KSxoW3Jd LnpJbmRleDwwJiYob1toW3JdLnpJbmRleF09aFtyXSkpO2ZvcihuLnNvcnQo aSk7bltqXTwwOylpZihlPW9bbltqKytdXSxwLnB1c2goZS5hcHBseShkLGcp KSxjKXJldHVybiBjPWYscDtmb3Iocj0wO3M+cjtyKyspaWYoZT1oW3JdLCJ6 SW5kZXgiaW4gZSlpZihlLnpJbmRleD09bltqXSl7aWYocC5wdXNoKGUuYXBw bHkoZCxnKSksYylicmVhaztkbyBpZihqKyssZT1vW25bal1dLGUmJnAucHVz aChlLmFwcGx5KGQsZykpLGMpYnJlYWs7d2hpbGUoZSl9ZWxzZSBvW2Uueklu ZGV4XT1lO2Vsc2UgaWYocC5wdXNoKGUuYXBwbHkoZCxnKSksYylicmVhazty ZXR1cm4gYz1mLGI9cSxwfTttLl9ldmVudHM9aixtLmxpc3RlbmVycz1mdW5j dGlvbihhKXt2YXIgYixjLGQsZSxnLGksayxsLG09YS5zcGxpdChmKSxuPWos bz1bbl0scD1bXTtmb3IoZT0wLGc9bS5sZW5ndGg7Zz5lO2UrKyl7Zm9yKGw9 W10saT0wLGs9by5sZW5ndGg7az5pO2krKylmb3Iobj1vW2ldLm4sYz1bbltt W2VdXSxuW2hdXSxkPTI7ZC0tOyliPWNbZF0sYiYmKGwucHVzaChiKSxwPXAu Y29uY2F0KGIuZnx8W10pKTtvPWx9cmV0dXJuIHB9LG0ub249ZnVuY3Rpb24o YSxiKXtpZihhPVN0cmluZyhhKSwiZnVuY3Rpb24iIT10eXBlb2YgYilyZXR1 cm4gZnVuY3Rpb24oKXt9O2Zvcih2YXIgYz1hLnNwbGl0KGcpLGQ9MCxlPWMu bGVuZ3RoO2U+ZDtkKyspIWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPWEuc3Bs aXQoZiksZT1qLGc9MCxoPWQubGVuZ3RoO2g+ZztnKyspZT1lLm4sZT1lLmhh c093blByb3BlcnR5KGRbZ10pJiZlW2RbZ11dfHwoZVtkW2ddXT17bjp7fX0p O2ZvcihlLmY9ZS5mfHxbXSxnPTAsaD1lLmYubGVuZ3RoO2g+ZztnKyspaWYo ZS5mW2ddPT1iKXtjPSEwO2JyZWFrfSFjJiZlLmYucHVzaChiKX0oY1tkXSk7 cmV0dXJuIGZ1bmN0aW9uKGEpeythPT0rYSYmKGIuekluZGV4PSthKX19LG0u Zj1mdW5jdGlvbihhKXt2YXIgYj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywx KTtyZXR1cm4gZnVuY3Rpb24oKXttLmFwcGx5KG51bGwsW2EsbnVsbF0uY29u Y2F0KGIpLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSkpfX0s bS5zdG9wPWZ1bmN0aW9uKCl7Yz0xfSxtLm50PWZ1bmN0aW9uKGEpe3JldHVy biBhP25ldyBSZWdFeHAoIig/OlxcLnxcXC98XikiK2ErIig/OlxcLnxcXC98 JCkiKS50ZXN0KGIpOmJ9LG0ubnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGIuc3Bs aXQoZil9LG0ub2ZmPW0udW5iaW5kPWZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0 dXJuIHZvaWQobS5fZXZlbnRzPWo9e246e319KTt2YXIgYz1hLnNwbGl0KGcp O2lmKGMubGVuZ3RoPjEpZm9yKHZhciBkPTAsaT1jLmxlbmd0aDtpPmQ7ZCsr KW0ub2ZmKGNbZF0sYik7ZWxzZXtjPWEuc3BsaXQoZik7dmFyIGssbCxuLGQs aSxvLHAscT1bal07Zm9yKGQ9MCxpPWMubGVuZ3RoO2k+ZDtkKyspZm9yKG89 MDtvPHEubGVuZ3RoO28rPW4ubGVuZ3RoLTIpe2lmKG49W28sMV0saz1xW29d Lm4sY1tkXSE9aClrW2NbZF1dJiZuLnB1c2goa1tjW2RdXSk7ZWxzZSBmb3Io bCBpbiBrKWtbZV0obCkmJm4ucHVzaChrW2xdKTtxLnNwbGljZS5hcHBseShx LG4pfWZvcihkPTAsaT1xLmxlbmd0aDtpPmQ7ZCsrKWZvcihrPXFbZF07ay5u Oyl7aWYoYil7aWYoay5mKXtmb3Iobz0wLHA9ay5mLmxlbmd0aDtwPm87bysr KWlmKGsuZltvXT09Yil7ay5mLnNwbGljZShvLDEpO2JyZWFrfSFrLmYubGVu Z3RoJiZkZWxldGUgay5mfWZvcihsIGluIGsubilpZihrLm5bZV0obCkmJmsu bltsXS5mKXt2YXIgcj1rLm5bbF0uZjtmb3Iobz0wLHA9ci5sZW5ndGg7cD5v O28rKylpZihyW29dPT1iKXtyLnNwbGljZShvLDEpO2JyZWFrfSFyLmxlbmd0 aCYmZGVsZXRlIGsubltsXS5mfX1lbHNle2RlbGV0ZSBrLmY7Zm9yKGwgaW4g ay5uKWsubltlXShsKSYmay5uW2xdLmYmJmRlbGV0ZSBrLm5bbF0uZn1rPWsu bn19fSxtLm9uY2U9ZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbigpe3Jl dHVybiBtLnVuYmluZChhLGMpLGIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTty ZXR1cm4gbS5vbihhLGMpfSxtLnZlcnNpb249ZCxtLnRvU3RyaW5nPWZ1bmN0 aW9uKCl7cmV0dXJuIllvdSBhcmUgcnVubmluZyBFdmUgIitkfSwidW5kZWZp bmVkIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4 cG9ydHM9bToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1k P2RlZmluZSgiZXZlIixbXSxmdW5jdGlvbigpe3JldHVybiBtfSk6YS5ldmU9 bX0odGhpcyksZnVuY3Rpb24oYSxiKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg ZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbImV2ZSJdLGZ1bmN0aW9uKGMp e3JldHVybiBiKGEsYyl9KTtlbHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2Yg ZXhwb3J0cyl7dmFyIGM9cmVxdWlyZSgiZXZlIik7bW9kdWxlLmV4cG9ydHM9 YihhLGMpfWVsc2UgYihhLGEuZXZlKX0od2luZG93fHx0aGlzLGZ1bmN0aW9u KGEsYil7dmFyIGM9ZnVuY3Rpb24oYil7dmFyIGM9e30sZD1hLnJlcXVlc3RB bmltYXRpb25GcmFtZXx8YS53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8 fGEubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxhLm9SZXF1ZXN0QW5pbWF0 aW9uRnJhbWV8fGEubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9u KGEpe3NldFRpbWVvdXQoYSwxNil9LGU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rp b24oYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJy YXldIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfSxmPTAs Zz0iTSIrKCtuZXcgRGF0ZSkudG9TdHJpbmcoMzYpLGg9ZnVuY3Rpb24oKXty ZXR1cm4gZysoZisrKS50b1N0cmluZygzNil9LGk9RGF0ZS5ub3d8fGZ1bmN0 aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxqPWZ1bmN0aW9uKGEpe3ZhciBiPXRo aXM7aWYobnVsbD09YSlyZXR1cm4gYi5zO3ZhciBjPWIucy1hO2IuYis9Yi5k dXIqYyxiLkIrPWIuZHVyKmMsYi5zPWF9LGs9ZnVuY3Rpb24oYSl7dmFyIGI9 dGhpcztyZXR1cm4gbnVsbD09YT9iLnNwZDp2b2lkKGIuc3BkPWEpfSxsPWZ1 bmN0aW9uKGEpe3ZhciBiPXRoaXM7cmV0dXJuIG51bGw9PWE/Yi5kdXI6KGIu cz1iLnMqYS9iLmR1cix2b2lkKGIuZHVyPWEpKX0sbT1mdW5jdGlvbigpe3Zh ciBhPXRoaXM7ZGVsZXRlIGNbYS5pZF0sYS51cGRhdGUoKSxiKCJtaW5hLnN0 b3AuIithLmlkLGEpfSxuPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLnBkaWZ8 fChkZWxldGUgY1thLmlkXSxhLnVwZGF0ZSgpLGEucGRpZj1hLmdldCgpLWEu Yil9LG89ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EucGRpZiYmKGEuYj1hLmdl dCgpLWEucGRpZixkZWxldGUgYS5wZGlmLGNbYS5pZF09YSl9LHA9ZnVuY3Rp b24oKXt2YXIgYSxiPXRoaXM7aWYoZShiLnN0YXJ0KSl7YT1bXTtmb3IodmFy IGM9MCxkPWIuc3RhcnQubGVuZ3RoO2Q+YztjKyspYVtjXT0rYi5zdGFydFtj XSsoYi5lbmRbY10tYi5zdGFydFtjXSkqYi5lYXNpbmcoYi5zKX1lbHNlIGE9 K2Iuc3RhcnQrKGIuZW5kLWIuc3RhcnQpKmIuZWFzaW5nKGIucyk7Yi5zZXQo YSl9LHE9ZnVuY3Rpb24oKXt2YXIgYT0wO2Zvcih2YXIgZSBpbiBjKWlmKGMu aGFzT3duUHJvcGVydHkoZSkpe3ZhciBmPWNbZV0sZz1mLmdldCgpO2ErKyxm LnM9KGctZi5iKS8oZi5kdXIvZi5zcGQpLGYucz49MSYmKGRlbGV0ZSBjW2Vd LGYucz0xLGEtLSxmdW5jdGlvbihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7 YigibWluYS5maW5pc2guIithLmlkLGEpfSl9KGYpKSxmLnVwZGF0ZSgpfWEm JmQocSl9LHI9ZnVuY3Rpb24oYSxiLGUsZixnLGkscyl7dmFyIHQ9e2lkOmgo KSxzdGFydDphLGVuZDpiLGI6ZSxzOjAsZHVyOmYtZSxzcGQ6MSxnZXQ6Zyxz ZXQ6aSxlYXNpbmc6c3x8ci5saW5lYXIsc3RhdHVzOmosc3BlZWQ6ayxkdXJh dGlvbjpsLHN0b3A6bSxwYXVzZTpuLHJlc3VtZTpvLHVwZGF0ZTpwfTtjW3Qu aWRdPXQ7dmFyIHUsdj0wO2Zvcih1IGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0 eSh1KSYmKHYrKywyPT12KSlicmVhaztyZXR1cm4gMT09diYmZChxKSx0fTty ZXR1cm4gci50aW1lPWksci5nZXRCeUlkPWZ1bmN0aW9uKGEpe3JldHVybiBj W2FdfHxudWxsfSxyLmxpbmVhcj1mdW5jdGlvbihhKXtyZXR1cm4gYX0sci5l YXNlb3V0PWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnBvdyhhLDEuNyl9LHIu ZWFzZWluPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnBvdyhhLC40OCl9LHIu ZWFzZWlub3V0PWZ1bmN0aW9uKGEpe2lmKDE9PWEpcmV0dXJuIDE7aWYoMD09 YSlyZXR1cm4gMDt2YXIgYj0uNDgtYS8xLjA0LGM9TWF0aC5zcXJ0KC4xNzM0 K2IqYiksZD1jLWIsZT1NYXRoLnBvdyhNYXRoLmFicyhkKSwxLzMpKigwPmQ/ LTE6MSksZj0tYy1iLGc9TWF0aC5wb3coTWF0aC5hYnMoZiksMS8zKSooMD5m Py0xOjEpLGg9ZStnKy41O3JldHVybiAzKigxLWgpKmgqaCtoKmgqaH0sci5i YWNraW49ZnVuY3Rpb24oYSl7aWYoMT09YSlyZXR1cm4gMTt2YXIgYj0xLjcw MTU4O3JldHVybiBhKmEqKChiKzEpKmEtYil9LHIuYmFja291dD1mdW5jdGlv bihhKXtpZigwPT1hKXJldHVybiAwO2EtPTE7dmFyIGI9MS43MDE1ODtyZXR1 cm4gYSphKigoYisxKSphK2IpKzF9LHIuZWxhc3RpYz1mdW5jdGlvbihhKXty ZXR1cm4gYT09ISFhP2E6TWF0aC5wb3coMiwtMTAqYSkqTWF0aC5zaW4oMioo YS0uMDc1KSpNYXRoLlBJLy4zKSsxfSxyLmJvdW5jZT1mdW5jdGlvbihhKXt2 YXIgYixjPTcuNTYyNSxkPTIuNzU7cmV0dXJuIDEvZD5hP2I9YyphKmE6Mi9k PmE/KGEtPTEuNS9kLGI9YyphKmErLjc1KToyLjUvZD5hPyhhLT0yLjI1L2Qs Yj1jKmEqYSsuOTM3NSk6KGEtPTIuNjI1L2QsYj1jKmEqYSsuOTg0Mzc1KSxi fSxhLm1pbmE9cixyfSgidW5kZWZpbmVkIj09dHlwZW9mIGI/ZnVuY3Rpb24o KXt9OmIpLGQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYyhhLGIpe2lmKGEpe2lm KGEubm9kZVR5cGUpcmV0dXJuIHcoYSk7aWYoZShhLCJhcnJheSIpJiZjLnNl dClyZXR1cm4gYy5zZXQuYXBwbHkoYyxhKTtpZihhIGluc3RhbmNlb2Ygcyly ZXR1cm4gYTtpZihudWxsPT1iKXJldHVybiBhPXkuZG9jLnF1ZXJ5U2VsZWN0 b3IoU3RyaW5nKGEpKSx3KGEpfXJldHVybiBhPW51bGw9PWE/IjEwMCUiOmEs Yj1udWxsPT1iPyIxMDAlIjpiLG5ldyB2KGEsYil9ZnVuY3Rpb24gZChhLGIp e2lmKGIpe2lmKCIjdGV4dCI9PWEmJihhPXkuZG9jLmNyZWF0ZVRleHROb2Rl KGIudGV4dHx8YlsiI3RleHQiXXx8IiIpKSwiI2NvbW1lbnQiPT1hJiYoYT15 LmRvYy5jcmVhdGVDb21tZW50KGIudGV4dHx8YlsiI3RleHQiXXx8IiIpKSwi c3RyaW5nIj09dHlwZW9mIGEmJihhPWQoYSkpLCJzdHJpbmciPT10eXBlb2Yg YilyZXR1cm4gMT09YS5ub2RlVHlwZT8ieGxpbms6Ij09Yi5zdWJzdHJpbmco MCw2KT9hLmdldEF0dHJpYnV0ZU5TKFQsYi5zdWJzdHJpbmcoNikpOiJ4bWw6 Ij09Yi5zdWJzdHJpbmcoMCw0KT9hLmdldEF0dHJpYnV0ZU5TKFUsYi5zdWJz dHJpbmcoNCkpOmEuZ2V0QXR0cmlidXRlKGIpOiJ0ZXh0Ij09Yj9hLm5vZGVW YWx1ZTpudWxsO2lmKDE9PWEubm9kZVR5cGUpe2Zvcih2YXIgYyBpbiBiKWlm KGJbel0oYykpe3ZhciBlPUEoYltjXSk7ZT8ieGxpbms6Ij09Yy5zdWJzdHJp bmcoMCw2KT9hLnNldEF0dHJpYnV0ZU5TKFQsYy5zdWJzdHJpbmcoNiksZSk6 InhtbDoiPT1jLnN1YnN0cmluZygwLDQpP2Euc2V0QXR0cmlidXRlTlMoVSxj LnN1YnN0cmluZyg0KSxlKTphLnNldEF0dHJpYnV0ZShjLGUpOmEucmVtb3Zl QXR0cmlidXRlKGMpfX1lbHNlInRleHQiaW4gYiYmKGEubm9kZVZhbHVlPWIu dGV4dCl9ZWxzZSBhPXkuZG9jLmNyZWF0ZUVsZW1lbnROUyhVLGEpO3JldHVy biBhfWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYj1BLnByb3RvdHlwZS50b0xv d2VyQ2FzZS5jYWxsKGIpLCJmaW5pdGUiPT1iP2lzRmluaXRlKGEpOiJhcnJh eSI9PWImJihhIGluc3RhbmNlb2YgQXJyYXl8fEFycmF5LmlzQXJyYXkmJkFy cmF5LmlzQXJyYXkoYSkpPyEwOiJudWxsIj09YiYmbnVsbD09PWF8fGI9PXR5 cGVvZiBhJiZudWxsIT09YXx8Im9iamVjdCI9PWImJmE9PT1PYmplY3QoYSl8 fEouY2FsbChhKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpPT1ifWZ1bmN0 aW9uIGYoYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGF8fE9iamVjdChhKSE9 PWEpcmV0dXJuIGE7dmFyIGI9bmV3IGEuY29uc3RydWN0b3I7Zm9yKHZhciBj IGluIGEpYVt6XShjKSYmKGJbY109ZihhW2NdKSk7cmV0dXJuIGJ9ZnVuY3Rp b24gaChhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylpZihh W2NdPT09YilyZXR1cm4gYS5wdXNoKGEuc3BsaWNlKGMsMSlbMF0pfWZ1bmN0 aW9uIGkoYSxiLGMpe2Z1bmN0aW9uIGQoKXt2YXIgZT1BcnJheS5wcm90b3R5 cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksZj1lLmpvaW4oIuKQgCIpLGc9 ZC5jYWNoZT1kLmNhY2hlfHx7fSxpPWQuY291bnQ9ZC5jb3VudHx8W107cmV0 dXJuIGdbel0oZik/KGgoaSxmKSxjP2MoZ1tmXSk6Z1tmXSk6KGkubGVuZ3Ro Pj0xZTMmJmRlbGV0ZSBnW2kuc2hpZnQoKV0saS5wdXNoKGYpLGdbZl09YS5h cHBseShiLGUpLGM/YyhnW2ZdKTpnW2ZdKX1yZXR1cm4gZH1mdW5jdGlvbiBq KGEsYixjLGQsZSxmKXtpZihudWxsPT1lKXt2YXIgZz1hLWMsaD1iLWQ7cmV0 dXJuIGd8fGg/KDE4MCsxODAqRC5hdGFuMigtaCwtZykvSCszNjApJTM2MDow fXJldHVybiBqKGEsYixlLGYpLWooYyxkLGUsZil9ZnVuY3Rpb24gayhhKXty ZXR1cm4gYSUzNjAqSC8xODB9ZnVuY3Rpb24gbChhKXtyZXR1cm4gMTgwKmEv SCUzNjB9ZnVuY3Rpb24gbShhKXt2YXIgYj1bXTtyZXR1cm4gYT1hLnJlcGxh Y2UoLyg/Ol58XHMpKFx3KylcKChbXildKylcKS9nLGZ1bmN0aW9uKGEsYyxk KXtyZXR1cm4gZD1kLnNwbGl0KC9ccyosXHMqfFxzKy8pLCJyb3RhdGUiPT1j JiYxPT1kLmxlbmd0aCYmZC5wdXNoKDAsMCksInNjYWxlIj09YyYmKGQubGVu Z3RoPjI/ZD1kLnNsaWNlKDAsMik6Mj09ZC5sZW5ndGgmJmQucHVzaCgwLDAp LDE9PWQubGVuZ3RoJiZkLnB1c2goZFswXSwwLDApKSxiLnB1c2goInNrZXdY Ij09Yz9bIm0iLDEsMCxELnRhbihrKGRbMF0pKSwxLDAsMF06InNrZXdZIj09 Yz9bIm0iLDEsRC50YW4oayhkWzBdKSksMCwxLDAsMF06W2MuY2hhckF0KDAp XS5jb25jYXQoZCkpLGF9KSxifWZ1bmN0aW9uIG4oYSxiKXt2YXIgZD1hYihh KSxlPW5ldyBjLk1hdHJpeDtpZihkKWZvcih2YXIgZj0wLGc9ZC5sZW5ndGg7 Zz5mO2YrKyl7dmFyIGgsaSxqLGssbCxtPWRbZl0sbj1tLmxlbmd0aCxvPUEo bVswXSkudG9Mb3dlckNhc2UoKSxwPW1bMF0hPW8scT1wP2UuaW52ZXJ0KCk6 MDsidCI9PW8mJjI9PW4/ZS50cmFuc2xhdGUobVsxXSwwKToidCI9PW8mJjM9 PW4/cD8oaD1xLngoMCwwKSxpPXEueSgwLDApLGo9cS54KG1bMV0sbVsyXSks az1xLnkobVsxXSxtWzJdKSxlLnRyYW5zbGF0ZShqLWgsay1pKSk6ZS50cmFu c2xhdGUobVsxXSxtWzJdKToiciI9PW8/Mj09bj8obD1sfHxiLGUucm90YXRl KG1bMV0sbC54K2wud2lkdGgvMixsLnkrbC5oZWlnaHQvMikpOjQ9PW4mJihw PyhqPXEueChtWzJdLG1bM10pLGs9cS55KG1bMl0sbVszXSksZS5yb3RhdGUo bVsxXSxqLGspKTplLnJvdGF0ZShtWzFdLG1bMl0sbVszXSkpOiJzIj09bz8y PT1ufHwzPT1uPyhsPWx8fGIsZS5zY2FsZShtWzFdLG1bbi0xXSxsLngrbC53 aWR0aC8yLGwueStsLmhlaWdodC8yKSk6ND09bj9wPyhqPXEueChtWzJdLG1b M10pLGs9cS55KG1bMl0sbVszXSksZS5zY2FsZShtWzFdLG1bMV0saixrKSk6 ZS5zY2FsZShtWzFdLG1bMV0sbVsyXSxtWzNdKTo1PT1uJiYocD8oaj1xLngo bVszXSxtWzRdKSxrPXEueShtWzNdLG1bNF0pLGUuc2NhbGUobVsxXSxtWzJd LGosaykpOmUuc2NhbGUobVsxXSxtWzJdLG1bM10sbVs0XSkpOiJtIj09byYm Nz09biYmZS5hZGQobVsxXSxtWzJdLG1bM10sbVs0XSxtWzVdLG1bNl0pfXJl dHVybiBlfWZ1bmN0aW9uIG8oYSl7dmFyIGI9YS5ub2RlLm93bmVyU1ZHRWxl bWVudCYmdyhhLm5vZGUub3duZXJTVkdFbGVtZW50KXx8YS5ub2RlLnBhcmVu dE5vZGUmJncoYS5ub2RlLnBhcmVudE5vZGUpfHxjLnNlbGVjdCgic3ZnIil8 fGMoMCwwKSxkPWIuc2VsZWN0KCJkZWZzIiksZT1udWxsPT1kPyExOmQubm9k ZTtyZXR1cm4gZXx8KGU9dSgiZGVmcyIsYi5ub2RlKS5ub2RlKSxlfWZ1bmN0 aW9uIHAoYSl7cmV0dXJuIGEubm9kZS5vd25lclNWR0VsZW1lbnQmJncoYS5u b2RlLm93bmVyU1ZHRWxlbWVudCl8fGMuc2VsZWN0KCJzdmciKX1mdW5jdGlv biBxKGEsYixjKXtmdW5jdGlvbiBlKGEpe2lmKG51bGw9PWEpcmV0dXJuIEk7 aWYoYT09K2EpcmV0dXJuIGE7ZChqLHt3aWR0aDphfSk7dHJ5e3JldHVybiBq LmdldEJCb3goKS53aWR0aH1jYXRjaChiKXtyZXR1cm4gMH19ZnVuY3Rpb24g ZihhKXtpZihudWxsPT1hKXJldHVybiBJO2lmKGE9PSthKXJldHVybiBhO2Qo aix7aGVpZ2h0OmF9KTt0cnl7cmV0dXJuIGouZ2V0QkJveCgpLmhlaWdodH1j YXRjaChiKXtyZXR1cm4gMH19ZnVuY3Rpb24gZyhkLGUpe251bGw9PWI/aVtk XT1lKGEuYXR0cihkKXx8MCk6ZD09YiYmKGk9ZShudWxsPT1jP2EuYXR0cihk KXx8MDpjKSl9dmFyIGg9cChhKS5ub2RlLGk9e30saj1oLnF1ZXJ5U2VsZWN0 b3IoIi5zdmctLS1tZ3IiKTtzd2l0Y2goanx8KGo9ZCgicmVjdCIpLGQoaix7 eDotOWU5LHk6LTllOSx3aWR0aDoxMCxoZWlnaHQ6MTAsImNsYXNzIjoic3Zn LS0tbWdyIixmaWxsOiJub25lIn0pLGguYXBwZW5kQ2hpbGQoaikpLGEudHlw ZSl7Y2FzZSJyZWN0IjpnKCJyeCIsZSksZygicnkiLGYpO2Nhc2UiaW1hZ2Ui OmcoIndpZHRoIixlKSxnKCJoZWlnaHQiLGYpO2Nhc2UidGV4dCI6ZygieCIs ZSksZygieSIsZik7YnJlYWs7Y2FzZSJjaXJjbGUiOmcoImN4IixlKSxnKCJj eSIsZiksZygiciIsZSk7YnJlYWs7Y2FzZSJlbGxpcHNlIjpnKCJjeCIsZSks ZygiY3kiLGYpLGcoInJ4IixlKSxnKCJyeSIsZik7YnJlYWs7Y2FzZSJsaW5l IjpnKCJ4MSIsZSksZygieDIiLGUpLGcoInkxIixmKSxnKCJ5MiIsZik7YnJl YWs7Y2FzZSJtYXJrZXIiOmcoInJlZlgiLGUpLGcoIm1hcmtlcldpZHRoIixl KSxnKCJyZWZZIixmKSxnKCJtYXJrZXJIZWlnaHQiLGYpO2JyZWFrO2Nhc2Ui cmFkaWFsR3JhZGllbnQiOmcoImZ4IixlKSxnKCJmeSIsZik7YnJlYWs7Y2Fz ZSJ0c3BhbiI6ZygiZHgiLGUpLGcoImR5IixmKTticmVhaztkZWZhdWx0Omco YixlKX1yZXR1cm4gaC5yZW1vdmVDaGlsZChqKSxpfWZ1bmN0aW9uIHIoYSl7 ZShhLCJhcnJheSIpfHwoYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh cmd1bWVudHMsMCkpO2Zvcih2YXIgYj0wLGM9MCxkPXRoaXMubm9kZTt0aGlz W2JdOylkZWxldGUgdGhpc1tiKytdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKysp InNldCI9PWFbYl0udHlwZT9hW2JdLmZvckVhY2goZnVuY3Rpb24oYSl7ZC5h cHBlbmRDaGlsZChhLm5vZGUpfSk6ZC5hcHBlbmRDaGlsZChhW2JdLm5vZGUp O3ZhciBmPWQuY2hpbGROb2Rlcztmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKXRo aXNbYysrXT13KGZbYl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIHMoYSl7aWYo YS5zbmFwIGluIFYpcmV0dXJuIFZbYS5zbmFwXTt2YXIgYjt0cnl7Yj1hLm93 bmVyU1ZHRWxlbWVudH1jYXRjaChjKXt9dGhpcy5ub2RlPWEsYiYmKHRoaXMu cGFwZXI9bmV3IHYoYikpLHRoaXMudHlwZT1hLnRhZ05hbWV8fGEubm9kZU5h bWU7dmFyIGQ9dGhpcy5pZD1TKHRoaXMpO2lmKHRoaXMuYW5pbXM9e30sdGhp cy5fPXt0cmFuc2Zvcm06W119LGEuc25hcD1kLFZbZF09dGhpcywiZyI9PXRo aXMudHlwZSYmKHRoaXMuYWRkPXIpLHRoaXMudHlwZSBpbntnOjEsbWFzazox LHBhdHRlcm46MSxzeW1ib2w6MX0pZm9yKHZhciBlIGluIHYucHJvdG90eXBl KXYucHJvdG90eXBlW3pdKGUpJiYodGhpc1tlXT12LnByb3RvdHlwZVtlXSl9 ZnVuY3Rpb24gdChhKXt0aGlzLm5vZGU9YX1mdW5jdGlvbiB1KGEsYil7dmFy IGM9ZChhKTtiLmFwcGVuZENoaWxkKGMpO3ZhciBlPXcoYyk7cmV0dXJuIGV9 ZnVuY3Rpb24gdihhLGIpe3ZhciBjLGUsZixnPXYucHJvdG90eXBlO2lmKGEm JiJzdmciPT1hLnRhZ05hbWUpe2lmKGEuc25hcCBpbiBWKXJldHVybiBWW2Eu c25hcF07dmFyIGg9YS5vd25lckRvY3VtZW50O2M9bmV3IHMoYSksZT1hLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJkZXNjIilbMF0sZj1hLmdldEVsZW1lbnRz QnlUYWdOYW1lKCJkZWZzIilbMF0sZXx8KGU9ZCgiZGVzYyIpLGUuYXBwZW5k Q2hpbGQoaC5jcmVhdGVUZXh0Tm9kZSgiQ3JlYXRlZCB3aXRoIFNuYXAiKSks Yy5ub2RlLmFwcGVuZENoaWxkKGUpKSxmfHwoZj1kKCJkZWZzIiksYy5ub2Rl LmFwcGVuZENoaWxkKGYpKSxjLmRlZnM9Zjtmb3IodmFyIGkgaW4gZylnW3pd KGkpJiYoY1tpXT1nW2ldKTtjLnBhcGVyPWMucm9vdD1jfWVsc2UgYz11KCJz dmciLHkuZG9jLmJvZHkpLGQoYy5ub2RlLHtoZWlnaHQ6Yix2ZXJzaW9uOjEu MSx3aWR0aDphLHhtbG5zOlV9KTtyZXR1cm4gY31mdW5jdGlvbiB3KGEpe3Jl dHVybiBhP2EgaW5zdGFuY2VvZiBzfHxhIGluc3RhbmNlb2YgdD9hOmEudGFn TmFtZSYmInN2ZyI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpP25ldyB2KGEp OmEudGFnTmFtZSYmIm9iamVjdCI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgp JiYiaW1hZ2Uvc3ZnK3htbCI9PWEudHlwZT9uZXcgdihhLmNvbnRlbnREb2N1 bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0pOm5ldyBzKGEp OmF9ZnVuY3Rpb24geChhLGIpe2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5j O2MrKyl7dmFyIGU9e3R5cGU6YVtjXS50eXBlLGF0dHI6YVtjXS5hdHRyKCl9 LGY9YVtjXS5jaGlsZHJlbigpO2IucHVzaChlKSxmLmxlbmd0aCYmeChmLGUu Y2hpbGROb2Rlcz1bXSl9fWMudmVyc2lvbj0iMC40LjAiLGMudG9TdHJpbmc9 ZnVuY3Rpb24oKXtyZXR1cm4iU25hcCB2Iit0aGlzLnZlcnNpb259LGMuXz17 fTt2YXIgeT17d2luOmEud2luZG93LGRvYzphLndpbmRvdy5kb2N1bWVudH07 Yy5fLmdsb2I9eTt7dmFyIHo9Imhhc093blByb3BlcnR5IixBPVN0cmluZyxC PXBhcnNlRmxvYXQsQz1wYXJzZUludCxEPU1hdGgsRT1ELm1heCxGPUQubWlu LEc9RC5hYnMsSD0oRC5wb3csRC5QSSksST0oRC5yb3VuZCwiIiksSj1PYmpl Y3QucHJvdG90eXBlLnRvU3RyaW5nLEs9L15ccyooKCNbYS1mXGRdezZ9KXwo I1thLWZcZF17M30pfHJnYmE/XChccyooW1xkXC5dKyU/XHMqLFxzKltcZFwu XSslP1xzKixccypbXGRcLl0rJT8oPzpccyosXHMqW1xkXC5dKyU/KT8pXHMq XCl8aHNiYT9cKFxzKihbXGRcLl0rKD86ZGVnfFx4YjB8JSk/XHMqLFxzKltc ZFwuXSslP1xzKixccypbXGRcLl0rKD86JT9ccyosXHMqW1xkXC5dKyk/JT8p XHMqXCl8aHNsYT9cKFxzKihbXGRcLl0rKD86ZGVnfFx4YjB8JSk/XHMqLFxz KltcZFwuXSslP1xzKixccypbXGRcLl0rKD86JT9ccyosXHMqW1xkXC5dKyk/ JT8pXHMqXCkpXHMqJC9pLEw9KGMuXy5zZXBhcmF0b3I9L1ssXHNdKy8sL1tc c10qLFtcc10qLyksTT17aHM6MSxyZzoxfSxOPS8oW2Etel0pW1xzLF0qKCgt P1xkKlwuP1xkKig/OmVbXC0rXT9cZCspP1tcc10qLD9bXHNdKikrKS9naSxP PS8oW3JzdG1dKVtccyxdKigoLT9cZCpcLj9cZCooPzplW1wtK10/XGQrKT9b XHNdKiw/W1xzXSopKykvZ2ksUD0vKC0/XGQqXC4/XGQqKD86ZVtcLStdP1xc ZCspPylbXHNdKiw/W1xzXSovZ2ksUT0wLFI9IlMiKygrbmV3IERhdGUpLnRv U3RyaW5nKDM2KSxTPWZ1bmN0aW9uKGEpe3JldHVybihhJiZhLnR5cGU/YS50 eXBlOkkpK1IrKFErKykudG9TdHJpbmcoMzYpfSxUPSJodHRwOi8vd3d3Lncz Lm9yZy8xOTk5L3hsaW5rIixVPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2 ZyIsVj17fTtjLnVybD1mdW5jdGlvbihhKXtyZXR1cm4idXJsKCcjIithKyIn KSJ9fWMuXy4kPWQsYy5fLmlkPVMsYy5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIg YT0vXHsoW15cfV0rKVx9L2csYj0vKD86KD86XnxcLikoLis/KSg/PVxbfFwu fCR8XCgpfFxbKCd8IikoLis/KVwyXF0pKFwoXCkpPy9nLGM9ZnVuY3Rpb24o YSxjLGQpe3ZhciBlPWQ7cmV0dXJuIGMucmVwbGFjZShiLGZ1bmN0aW9uKGEs YixjLGQsZil7Yj1ifHxkLGUmJihiIGluIGUmJihlPWVbYl0pLCJmdW5jdGlv biI9PXR5cGVvZiBlJiZmJiYoZT1lKCkpKX0pLGU9KG51bGw9PWV8fGU9PWQ/ YTplKSsiIn07cmV0dXJuIGZ1bmN0aW9uKGIsZCl7cmV0dXJuIEEoYikucmVw bGFjZShhLGZ1bmN0aW9uKGEsYil7cmV0dXJuIGMoYSxiLGQpfSl9fSgpLGMu Xy5jbG9uZT1mLGMuXy5jYWNoZXI9aSxjLnJhZD1rLGMuZGVnPWwsYy5zaW49 ZnVuY3Rpb24oYSl7cmV0dXJuIEQuc2luKGMucmFkKGEpKX0sYy50YW49ZnVu Y3Rpb24oYSl7cmV0dXJuIEQudGFuKGMucmFkKGEpKX0sYy5jb3M9ZnVuY3Rp b24oYSl7cmV0dXJuIEQuY29zKGMucmFkKGEpKX0sYy5hc2luPWZ1bmN0aW9u KGEpe3JldHVybiBjLmRlZyhELmFzaW4oYSkpfSxjLmFjb3M9ZnVuY3Rpb24o YSl7cmV0dXJuIGMuZGVnKEQuYWNvcyhhKSl9LGMuYXRhbj1mdW5jdGlvbihh KXtyZXR1cm4gYy5kZWcoRC5hdGFuKGEpKX0sYy5hdGFuMj1mdW5jdGlvbihh KXtyZXR1cm4gYy5kZWcoRC5hdGFuMihhKSl9LGMuYW5nbGU9aixjLmxlbj1m dW5jdGlvbihhLGIsZCxlKXtyZXR1cm4gTWF0aC5zcXJ0KGMubGVuMihhLGIs ZCxlKSl9LGMubGVuMj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oYS1jKSoo YS1jKSsoYi1kKSooYi1kKX0sYy5jbG9zZXN0UG9pbnQ9ZnVuY3Rpb24oYSxi LGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGQ9YS54LWIsZT1hLnktYztyZXR1cm4g ZCpkK2UqZX1mb3IodmFyIGUsZixnLGgsaT1hLm5vZGUsaj1pLmdldFRvdGFs TGVuZ3RoKCksaz1qL2kucGF0aFNlZ0xpc3QubnVtYmVyT2ZJdGVtcyouMTI1 LGw9MS8wLG09MDtqPj1tO20rPWspKGg9ZChnPWkuZ2V0UG9pbnRBdExlbmd0 aChtKSkpPGwmJihlPWcsZj1tLGw9aCk7Zm9yKGsqPS41O2s+LjU7KXt2YXIg bixvLHAscSxyLHM7KHA9Zi1rKT49MCYmKHI9ZChuPWkuZ2V0UG9pbnRBdExl bmd0aChwKSkpPGw/KGU9bixmPXAsbD1yKToocT1mK2spPD1qJiYocz1kKG89 aS5nZXRQb2ludEF0TGVuZ3RoKHEpKSk8bD8oZT1vLGY9cSxsPXMpOmsqPS41 fXJldHVybiBlPXt4OmUueCx5OmUueSxsZW5ndGg6ZixkaXN0YW5jZTpNYXRo LnNxcnQobCl9fSxjLmlzPWUsYy5zbmFwVG89ZnVuY3Rpb24oYSxiLGMpe2lm KGM9ZShjLCJmaW5pdGUiKT9jOjEwLGUoYSwiYXJyYXkiKSl7Zm9yKHZhciBk PWEubGVuZ3RoO2QtLTspaWYoRyhhW2RdLWIpPD1jKXJldHVybiBhW2RdfWVs c2V7YT0rYTt2YXIgZj1iJWE7aWYoYz5mKXJldHVybiBiLWY7aWYoZj5hLWMp cmV0dXJuIGItZithfXJldHVybiBifSxjLmdldFJHQj1pKGZ1bmN0aW9uKGEp e2lmKCFhfHwoYT1BKGEpKS5pbmRleE9mKCItIikrMSlyZXR1cm57cjotMSxn Oi0xLGI6LTEsaGV4OiJub25lIixlcnJvcjoxLHRvU3RyaW5nOlp9O2lmKCJu b25lIj09YSlyZXR1cm57cjotMSxnOi0xLGI6LTEsaGV4OiJub25lIix0b1N0 cmluZzpafTtpZighKE1bel0oYS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygw LDIpKXx8IiMiPT1hLmNoYXJBdCgpKSYmKGE9VyhhKSksIWEpcmV0dXJue3I6 LTEsZzotMSxiOi0xLGhleDoibm9uZSIsZXJyb3I6MSx0b1N0cmluZzpafTt2 YXIgYixkLGYsZyxoLGksaj1hLm1hdGNoKEspO3JldHVybiBqPyhqWzJdJiYo Zj1DKGpbMl0uc3Vic3RyaW5nKDUpLDE2KSxkPUMoalsyXS5zdWJzdHJpbmco Myw1KSwxNiksYj1DKGpbMl0uc3Vic3RyaW5nKDEsMyksMTYpKSxqWzNdJiYo Zj1DKChoPWpbM10uY2hhckF0KDMpKStoLDE2KSxkPUMoKGg9alszXS5jaGFy QXQoMikpK2gsMTYpLGI9QygoaD1qWzNdLmNoYXJBdCgxKSkraCwxNikpLGpb NF0mJihpPWpbNF0uc3BsaXQoTCksYj1CKGlbMF0pLCIlIj09aVswXS5zbGlj ZSgtMSkmJihiKj0yLjU1KSxkPUIoaVsxXSksIiUiPT1pWzFdLnNsaWNlKC0x KSYmKGQqPTIuNTUpLGY9QihpWzJdKSwiJSI9PWlbMl0uc2xpY2UoLTEpJiYo Zio9Mi41NSksInJnYmEiPT1qWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw0 KSYmKGc9QihpWzNdKSksaVszXSYmIiUiPT1pWzNdLnNsaWNlKC0xKSYmKGcv PTEwMCkpLGpbNV0/KGk9als1XS5zcGxpdChMKSxiPUIoaVswXSksIiUiPT1p WzBdLnNsaWNlKC0xKSYmKGIvPTEwMCksZD1CKGlbMV0pLCIlIj09aVsxXS5z bGljZSgtMSkmJihkLz0xMDApLGY9QihpWzJdKSwiJSI9PWlbMl0uc2xpY2Uo LTEpJiYoZi89MTAwKSwoImRlZyI9PWlbMF0uc2xpY2UoLTMpfHwiwrAiPT1p WzBdLnNsaWNlKC0xKSkmJihiLz0zNjApLCJoc2JhIj09alsxXS50b0xvd2Vy Q2FzZSgpLnNsaWNlKDAsNCkmJihnPUIoaVszXSkpLGlbM10mJiIlIj09aVsz XS5zbGljZSgtMSkmJihnLz0xMDApLGMuaHNiMnJnYihiLGQsZixnKSk6als2 XT8oaT1qWzZdLnNwbGl0KEwpLGI9QihpWzBdKSwiJSI9PWlbMF0uc2xpY2Uo LTEpJiYoYi89MTAwKSxkPUIoaVsxXSksIiUiPT1pWzFdLnNsaWNlKC0xKSYm KGQvPTEwMCksZj1CKGlbMl0pLCIlIj09aVsyXS5zbGljZSgtMSkmJihmLz0x MDApLCgiZGVnIj09aVswXS5zbGljZSgtMyl8fCLCsCI9PWlbMF0uc2xpY2Uo LTEpKSYmKGIvPTM2MCksImhzbGEiPT1qWzFdLnRvTG93ZXJDYXNlKCkuc2xp Y2UoMCw0KSYmKGc9QihpWzNdKSksaVszXSYmIiUiPT1pWzNdLnNsaWNlKC0x KSYmKGcvPTEwMCksYy5oc2wycmdiKGIsZCxmLGcpKTooYj1GKEQucm91bmQo YiksMjU1KSxkPUYoRC5yb3VuZChkKSwyNTUpLGY9RihELnJvdW5kKGYpLDI1 NSksZz1GKEUoZywwKSwxKSxqPXtyOmIsZzpkLGI6Zix0b1N0cmluZzpafSxq LmhleD0iIyIrKDE2Nzc3MjE2fGZ8ZDw8OHxiPDwxNikudG9TdHJpbmcoMTYp LnNsaWNlKDEpLGoub3BhY2l0eT1lKGcsImZpbml0ZSIpP2c6MSxqKSk6e3I6 LTEsZzotMSxiOi0xLGhleDoibm9uZSIsZXJyb3I6MSx0b1N0cmluZzpafX0s YyksYy5oc2I9aShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuaHNiMnJnYihh LGIsZCkuaGV4fSksYy5oc2w9aShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMu aHNsMnJnYihhLGIsZCkuaGV4fSksYy5yZ2I9aShmdW5jdGlvbihhLGIsYyxk KXtpZihlKGQsImZpbml0ZSIpKXt2YXIgZj1ELnJvdW5kO3JldHVybiJyZ2Jh KCIrW2YoYSksZihiKSxmKGMpLCtkLnRvRml4ZWQoMildKyIpIn1yZXR1cm4i IyIrKDE2Nzc3MjE2fGN8Yjw8OHxhPDwxNikudG9TdHJpbmcoMTYpLnNsaWNl KDEpfSk7dmFyIFc9ZnVuY3Rpb24oYSl7dmFyIGI9eS5kb2MuZ2V0RWxlbWVu dHNCeVRhZ05hbWUoImhlYWQiKVswXXx8eS5kb2MuZ2V0RWxlbWVudHNCeVRh Z05hbWUoInN2ZyIpWzBdLGM9InJnYigyNTUsIDAsIDApIjtyZXR1cm4oVz1p KGZ1bmN0aW9uKGEpe2lmKCJyZWQiPT1hLnRvTG93ZXJDYXNlKCkpcmV0dXJu IGM7Yi5zdHlsZS5jb2xvcj1jLGIuc3R5bGUuY29sb3I9YTt2YXIgZD15LmRv Yy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGIsSSkuZ2V0UHJvcGVy dHlWYWx1ZSgiY29sb3IiKTtyZXR1cm4gZD09Yz9udWxsOmR9KSkoYSl9LFg9 ZnVuY3Rpb24oKXtyZXR1cm4iaHNiKCIrW3RoaXMuaCx0aGlzLnMsdGhpcy5i XSsiKSJ9LFk9ZnVuY3Rpb24oKXtyZXR1cm4iaHNsKCIrW3RoaXMuaCx0aGlz LnMsdGhpcy5sXSsiKSJ9LFo9ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5v cGFjaXR5fHxudWxsPT10aGlzLm9wYWNpdHk/dGhpcy5oZXg6InJnYmEoIitb dGhpcy5yLHRoaXMuZyx0aGlzLmIsdGhpcy5vcGFjaXR5XSsiKSJ9LCQ9ZnVu Y3Rpb24oYSxiLGQpe2lmKG51bGw9PWImJmUoYSwib2JqZWN0IikmJiJyImlu IGEmJiJnImluIGEmJiJiImluIGEmJihkPWEuYixiPWEuZyxhPWEuciksbnVs bD09YiYmZShhLHN0cmluZykpe3ZhciBmPWMuZ2V0UkdCKGEpO2E9Zi5yLGI9 Zi5nLGQ9Zi5ifXJldHVybihhPjF8fGI+MXx8ZD4xKSYmKGEvPTI1NSxiLz0y NTUsZC89MjU1KSxbYSxiLGRdfSxfPWZ1bmN0aW9uKGEsYixkLGYpe2E9RC5y b3VuZCgyNTUqYSksYj1ELnJvdW5kKDI1NSpiKSxkPUQucm91bmQoMjU1KmQp O3ZhciBnPXtyOmEsZzpiLGI6ZCxvcGFjaXR5OmUoZiwiZmluaXRlIik/Zjox LGhleDpjLnJnYihhLGIsZCksdG9TdHJpbmc6Wn07cmV0dXJuIGUoZiwiZmlu aXRlIikmJihnLm9wYWNpdHk9ZiksZ307Yy5jb2xvcj1mdW5jdGlvbihhKXt2 YXIgYjtyZXR1cm4gZShhLCJvYmplY3QiKSYmImgiaW4gYSYmInMiaW4gYSYm ImIiaW4gYT8oYj1jLmhzYjJyZ2IoYSksYS5yPWIucixhLmc9Yi5nLGEuYj1i LmIsYS5vcGFjaXR5PTEsYS5oZXg9Yi5oZXgpOmUoYSwib2JqZWN0IikmJiJo ImluIGEmJiJzImluIGEmJiJsImluIGE/KGI9Yy5oc2wycmdiKGEpLGEucj1i LnIsYS5nPWIuZyxhLmI9Yi5iLGEub3BhY2l0eT0xLGEuaGV4PWIuaGV4KToo ZShhLCJzdHJpbmciKSYmKGE9Yy5nZXRSR0IoYSkpLGUoYSwib2JqZWN0Iikm JiJyImluIGEmJiJnImluIGEmJiJiImluIGEmJiEoImVycm9yImluIGEpPyhi PWMucmdiMmhzbChhKSxhLmg9Yi5oLGEucz1iLnMsYS5sPWIubCxiPWMucmdi MmhzYihhKSxhLnY9Yi5iKTooYT17aGV4OiJub25lIn0sYS5yPWEuZz1hLmI9 YS5oPWEucz1hLnY9YS5sPS0xLGEuZXJyb3I9MSkpLGEudG9TdHJpbmc9Wixh fSxjLmhzYjJyZ2I9ZnVuY3Rpb24oYSxiLGMsZCl7ZShhLCJvYmplY3QiKSYm ImgiaW4gYSYmInMiaW4gYSYmImIiaW4gYSYmKGM9YS5iLGI9YS5zLGQ9YS5v LGE9YS5oKSxhKj0zNjA7dmFyIGYsZyxoLGksajtyZXR1cm4gYT1hJTM2MC82 MCxqPWMqYixpPWoqKDEtRyhhJTItMSkpLGY9Zz1oPWMtaixhPX5+YSxmKz1b aixpLDAsMCxpLGpdW2FdLGcrPVtpLGosaixpLDAsMF1bYV0saCs9WzAsMCxp LGosaixpXVthXSxfKGYsZyxoLGQpfSxjLmhzbDJyZ2I9ZnVuY3Rpb24oYSxi LGMsZCl7ZShhLCJvYmplY3QiKSYmImgiaW4gYSYmInMiaW4gYSYmImwiaW4g YSYmKGM9YS5sLGI9YS5zLGE9YS5oKSwoYT4xfHxiPjF8fGM+MSkmJihhLz0z NjAsYi89MTAwLGMvPTEwMCksYSo9MzYwO3ZhciBmLGcsaCxpLGo7cmV0dXJu IGE9YSUzNjAvNjAsaj0yKmIqKC41PmM/YzoxLWMpLGk9aiooMS1HKGElMi0x KSksZj1nPWg9Yy1qLzIsYT1+fmEsZis9W2osaSwwLDAsaSxqXVthXSxnKz1b aSxqLGosaSwwLDBdW2FdLGgrPVswLDAsaSxqLGosaV1bYV0sXyhmLGcsaCxk KX0sYy5yZ2IyaHNiPWZ1bmN0aW9uKGEsYixjKXtjPSQoYSxiLGMpLGE9Y1sw XSxiPWNbMV0sYz1jWzJdO3ZhciBkLGUsZixnO3JldHVybiBmPUUoYSxiLGMp LGc9Zi1GKGEsYixjKSxkPTA9PWc/bnVsbDpmPT1hPyhiLWMpL2c6Zj09Yj8o Yy1hKS9nKzI6KGEtYikvZys0LGQ9KGQrMzYwKSU2KjYwLzM2MCxlPTA9PWc/ MDpnL2Yse2g6ZCxzOmUsYjpmLHRvU3RyaW5nOlh9fSxjLnJnYjJoc2w9ZnVu Y3Rpb24oYSxiLGMpe2M9JChhLGIsYyksYT1jWzBdLGI9Y1sxXSxjPWNbMl07 dmFyIGQsZSxmLGcsaCxpO3JldHVybiBnPUUoYSxiLGMpLGg9RihhLGIsYyks aT1nLWgsZD0wPT1pP251bGw6Zz09YT8oYi1jKS9pOmc9PWI/KGMtYSkvaSsy OihhLWIpL2krNCxkPShkKzM2MCklNio2MC8zNjAsZj0oZytoKS8yLGU9MD09 aT8wOi41PmY/aS8oMipmKTppLygyLTIqZikse2g6ZCxzOmUsbDpmLHRvU3Ry aW5nOll9fSxjLnBhcnNlUGF0aFN0cmluZz1mdW5jdGlvbihhKXtpZighYSly ZXR1cm4gbnVsbDt2YXIgYj1jLnBhdGgoYSk7aWYoYi5hcnIpcmV0dXJuIGMu cGF0aC5jbG9uZShiLmFycik7dmFyIGQ9e2E6NyxjOjYsbzoyLGg6MSxsOjIs bToyLHI6NCxxOjQsczo0LHQ6Mix2OjEsdTozLHo6MH0sZj1bXTtyZXR1cm4g ZShhLCJhcnJheSIpJiZlKGFbMF0sImFycmF5IikmJihmPWMucGF0aC5jbG9u ZShhKSksZi5sZW5ndGh8fEEoYSkucmVwbGFjZShOLGZ1bmN0aW9uKGEsYixj KXt2YXIgZT1bXSxnPWIudG9Mb3dlckNhc2UoKTtpZihjLnJlcGxhY2UoUCxm dW5jdGlvbihhLGIpe2ImJmUucHVzaCgrYil9KSwibSI9PWcmJmUubGVuZ3Ro PjImJihmLnB1c2goW2JdLmNvbmNhdChlLnNwbGljZSgwLDIpKSksZz0ibCIs Yj0ibSI9PWI/ImwiOiJMIiksIm8iPT1nJiYxPT1lLmxlbmd0aCYmZi5wdXNo KFtiLGVbMF1dKSwiciI9PWcpZi5wdXNoKFtiXS5jb25jYXQoZSkpO2Vsc2Ug Zm9yKDtlLmxlbmd0aD49ZFtnXSYmKGYucHVzaChbYl0uY29uY2F0KGUuc3Bs aWNlKDAsZFtnXSkpKSxkW2ddKTspO30pLGYudG9TdHJpbmc9Yy5wYXRoLnRv U3RyaW5nLGIuYXJyPWMucGF0aC5jbG9uZShmKSxmfTt2YXIgYWI9Yy5wYXJz ZVRyYW5zZm9ybVN0cmluZz1mdW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVs bDt2YXIgYj1bXTtyZXR1cm4gZShhLCJhcnJheSIpJiZlKGFbMF0sImFycmF5 IikmJihiPWMucGF0aC5jbG9uZShhKSksYi5sZW5ndGh8fEEoYSkucmVwbGFj ZShPLGZ1bmN0aW9uKGEsYyxkKXt7dmFyIGU9W107Yy50b0xvd2VyQ2FzZSgp fWQucmVwbGFjZShQLGZ1bmN0aW9uKGEsYil7YiYmZS5wdXNoKCtiKX0pLGIu cHVzaChbY10uY29uY2F0KGUpKX0pLGIudG9TdHJpbmc9Yy5wYXRoLnRvU3Ry aW5nLGJ9O2MuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nPW0sYy5fLnJnVHJhbnNm b3JtPS9eW2Etel1bXHNdKi0/XC4/XGQvaSxjLl8udHJhbnNmb3JtMm1hdHJp eD1uLGMuX3VuaXQycHg9cTt5LmRvYy5jb250YWluc3x8eS5kb2MuY29tcGFy ZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT1hLm5v ZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7 cmV0dXJuIGE9PWR8fCEoIWR8fDEhPWQubm9kZVR5cGV8fCEoYy5jb250YWlu cz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2 JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxi KXtpZihiKWZvcig7YjspaWYoYj1iLnBhcmVudE5vZGUsYj09YSlyZXR1cm4h MDtyZXR1cm4hMX07Yy5fLmdldFNvbWVEZWZzPW8sYy5fLmdldFNvbWVTVkc9 cCxjLnNlbGVjdD1mdW5jdGlvbihhKXtyZXR1cm4gYT1BKGEpLnJlcGxhY2Uo LyhbXlxcXSk6L2csIiQxXFw6Iiksdyh5LmRvYy5xdWVyeVNlbGVjdG9yKGEp KX0sYy5zZWxlY3RBbGw9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXkuZG9jLnF1 ZXJ5U2VsZWN0b3JBbGwoYSksZD0oYy5zZXR8fEFycmF5KSgpLGU9MDtlPGIu bGVuZ3RoO2UrKylkLnB1c2godyhiW2VdKSk7cmV0dXJuIGR9LHNldEludGVy dmFsKGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIFYpaWYoVlt6XShhKSl7dmFy IGI9VlthXSxjPWIubm9kZTsoInN2ZyIhPWIudHlwZSYmIWMub3duZXJTVkdF bGVtZW50fHwic3ZnIj09Yi50eXBlJiYoIWMucGFyZW50Tm9kZXx8Im93bmVy U1ZHRWxlbWVudCJpbiBjLnBhcmVudE5vZGUmJiFjLm93bmVyU1ZHRWxlbWVu dCkpJiZkZWxldGUgVlthXX19LDFlNCkscy5wcm90b3R5cGUuYXR0cj1mdW5j dGlvbihhLGMpe3ZhciBkPXRoaXMsZj1kLm5vZGU7aWYoIWEpe2lmKDEhPWYu bm9kZVR5cGUpcmV0dXJue3RleHQ6Zi5ub2RlVmFsdWV9O2Zvcih2YXIgZz1m LmF0dHJpYnV0ZXMsaD17fSxpPTAsaj1nLmxlbmd0aDtqPmk7aSsrKWhbZ1tp XS5ub2RlTmFtZV09Z1tpXS5ub2RlVmFsdWU7cmV0dXJuIGh9aWYoZShhLCJz dHJpbmciKSl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjEpKXJldHVybiBiKCJz bmFwLnV0aWwuZ2V0YXR0ci4iK2EsZCkuZmlyc3REZWZpbmVkKCk7dmFyIGs9 e307a1thXT1jLGE9a31mb3IodmFyIGwgaW4gYSlhW3pdKGwpJiZiKCJzbmFw LnV0aWwuYXR0ci4iK2wsZCxhW2xdKTtyZXR1cm4gZH0sYy5wYXJzZT1mdW5j dGlvbihhKXt2YXIgYj15LmRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCks Yz0hMCxkPXkuZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGE9QShhKSxh Lm1hdGNoKC9eXHMqPFxzKnN2Zyg/OlxzfD4pLyl8fChhPSI8c3ZnPiIrYSsi PC9zdmc+IixjPSExKSxkLmlubmVySFRNTD1hLGE9ZC5nZXRFbGVtZW50c0J5 VGFnTmFtZSgic3ZnIilbMF0paWYoYyliPWE7ZWxzZSBmb3IoO2EuZmlyc3RD aGlsZDspYi5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO3JldHVybiBuZXcg dChiKX0sYy5mcmFnbWVudD1mdW5jdGlvbigpe2Zvcih2YXIgYT1BcnJheS5w cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCksYj15LmRvYy5jcmVh dGVEb2N1bWVudEZyYWdtZW50KCksZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyl7 dmFyIGY9YVtkXTtmLm5vZGUmJmYubm9kZS5ub2RlVHlwZSYmYi5hcHBlbmRD aGlsZChmLm5vZGUpLGYubm9kZVR5cGUmJmIuYXBwZW5kQ2hpbGQoZiksInN0 cmluZyI9PXR5cGVvZiBmJiZiLmFwcGVuZENoaWxkKGMucGFyc2UoZikubm9k ZSl9cmV0dXJuIG5ldyB0KGIpfSxjLl8ubWFrZT11LGMuXy53cmFwPXcsdi5w cm90b3R5cGUuZWw9ZnVuY3Rpb24oYSxiKXt2YXIgYz11KGEsdGhpcy5ub2Rl KTtyZXR1cm4gYiYmYy5hdHRyKGIpLGN9LHMucHJvdG90eXBlLmNoaWxkcmVu PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9dGhpcy5ub2RlLmNoaWxkTm9k ZXMsZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylhW2RdPWMoYltkXSk7cmV0dXJu IGF9LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciBhPVtdO3Jl dHVybiB4KFt0aGlzXSxhKSxhWzBdfSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0 ciIsZnVuY3Rpb24oKXt2YXIgYT1iLm50KCk7YT1hLnN1YnN0cmluZyhhLmxh c3RJbmRleE9mKCIuIikrMSk7dmFyIGM9YS5yZXBsYWNlKC9bQS1aXS9nLGZ1 bmN0aW9uKGEpe3JldHVybiItIithLnRvTG93ZXJDYXNlKCl9KTtyZXR1cm4g YmJbel0oYyk/dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcu Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5vZGUsbnVsbCkuZ2V0UHJvcGVydHlW YWx1ZShjKTpkKHRoaXMubm9kZSxhKX0pO3ZhciBiYj17ImFsaWdubWVudC1i YXNlbGluZSI6MCwiYmFzZWxpbmUtc2hpZnQiOjAsY2xpcDowLCJjbGlwLXBh dGgiOjAsImNsaXAtcnVsZSI6MCxjb2xvcjowLCJjb2xvci1pbnRlcnBvbGF0 aW9uIjowLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiOjAsImNvbG9y LXByb2ZpbGUiOjAsImNvbG9yLXJlbmRlcmluZyI6MCxjdXJzb3I6MCxkaXJl Y3Rpb246MCxkaXNwbGF5OjAsImRvbWluYW50LWJhc2VsaW5lIjowLCJlbmFi bGUtYmFja2dyb3VuZCI6MCxmaWxsOjAsImZpbGwtb3BhY2l0eSI6MCwiZmls bC1ydWxlIjowLGZpbHRlcjowLCJmbG9vZC1jb2xvciI6MCwiZmxvb2Qtb3Bh Y2l0eSI6MCxmb250OjAsImZvbnQtZmFtaWx5IjowLCJmb250LXNpemUiOjAs ImZvbnQtc2l6ZS1hZGp1c3QiOjAsImZvbnQtc3RyZXRjaCI6MCwiZm9udC1z dHlsZSI6MCwiZm9udC12YXJpYW50IjowLCJmb250LXdlaWdodCI6MCwiZ2x5 cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCI6MCwiZ2x5cGgtb3JpZW50YXRp b24tdmVydGljYWwiOjAsImltYWdlLXJlbmRlcmluZyI6MCxrZXJuaW5nOjAs ImxldHRlci1zcGFjaW5nIjowLCJsaWdodGluZy1jb2xvciI6MCxtYXJrZXI6 MCwibWFya2VyLWVuZCI6MCwibWFya2VyLW1pZCI6MCwibWFya2VyLXN0YXJ0 IjowLG1hc2s6MCxvcGFjaXR5OjAsb3ZlcmZsb3c6MCwicG9pbnRlci1ldmVu dHMiOjAsInNoYXBlLXJlbmRlcmluZyI6MCwic3RvcC1jb2xvciI6MCwic3Rv cC1vcGFjaXR5IjowLHN0cm9rZTowLCJzdHJva2UtZGFzaGFycmF5IjowLCJz dHJva2UtZGFzaG9mZnNldCI6MCwic3Ryb2tlLWxpbmVjYXAiOjAsInN0cm9r ZS1saW5lam9pbiI6MCwic3Ryb2tlLW1pdGVybGltaXQiOjAsInN0cm9rZS1v cGFjaXR5IjowLCJzdHJva2Utd2lkdGgiOjAsInRleHQtYW5jaG9yIjowLCJ0 ZXh0LWRlY29yYXRpb24iOjAsInRleHQtcmVuZGVyaW5nIjowLCJ1bmljb2Rl LWJpZGkiOjAsdmlzaWJpbGl0eTowLCJ3b3JkLXNwYWNpbmciOjAsIndyaXRp bmctbW9kZSI6MH07Yi5vbigic25hcC51dGlsLmF0dHIiLGZ1bmN0aW9uKGEp e3ZhciBjPWIubnQoKSxlPXt9O2M9Yy5zdWJzdHJpbmcoYy5sYXN0SW5kZXhP ZigiLiIpKzEpLGVbY109YTt2YXIgZj1jLnJlcGxhY2UoLy0oXHcpL2dpLGZ1 bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX0pLGc9Yy5yZXBs YWNlKC9bQS1aXS9nLGZ1bmN0aW9uKGEpe3JldHVybiItIithLnRvTG93ZXJD YXNlKCl9KTtiYlt6XShnKT90aGlzLm5vZGUuc3R5bGVbZl09bnVsbD09YT9J OmE6ZCh0aGlzLm5vZGUsZSl9KSxmdW5jdGlvbigpe30odi5wcm90b3R5cGUp LGMuYWpheD1mdW5jdGlvbihhLGMsZCxmKXt2YXIgZz1uZXcgWE1MSHR0cFJl cXVlc3QsaD1TKCk7aWYoZyl7aWYoZShjLCJmdW5jdGlvbiIpKWY9ZCxkPWMs Yz1udWxsO2Vsc2UgaWYoZShjLCJvYmplY3QiKSl7dmFyIGk9W107Zm9yKHZh ciBqIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShqKSYmaS5wdXNoKGVuY29kZVVS SUNvbXBvbmVudChqKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGNbal0pKTtj PWkuam9pbigiJiIpfXJldHVybiBnLm9wZW4oYz8iUE9TVCI6IkdFVCIsYSwh MCksYyYmKGcuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIs IlhNTEh0dHBSZXF1ZXN0IiksZy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50 LXR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSks ZCYmKGIub25jZSgic25hcC5hamF4LiIraCsiLjAiLGQpLGIub25jZSgic25h cC5hamF4LiIraCsiLjIwMCIsZCksYi5vbmNlKCJzbmFwLmFqYXguIitoKyIu MzA0IixkKSksZy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT1n LnJlYWR5U3RhdGUmJmIoInNuYXAuYWpheC4iK2grIi4iK2cuc3RhdHVzLGYs Zyl9LDQ9PWcucmVhZHlTdGF0ZT9nOihnLnNlbmQoYyksZyl9fSxjLmxvYWQ9 ZnVuY3Rpb24oYSxiLGQpe2MuYWpheChhLGZ1bmN0aW9uKGEpe3ZhciBlPWMu cGFyc2UoYS5yZXNwb25zZVRleHQpO2Q/Yi5jYWxsKGQsZSk6YihlKX0pfTt2 YXIgY2I9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJl Y3QoKSxjPWEub3duZXJEb2N1bWVudCxkPWMuYm9keSxlPWMuZG9jdW1lbnRF bGVtZW50LGY9ZS5jbGllbnRUb3B8fGQuY2xpZW50VG9wfHwwLGg9ZS5jbGll bnRMZWZ0fHxkLmNsaWVudExlZnR8fDAsaT1iLnRvcCsoZy53aW4ucGFnZVlP ZmZzZXR8fGUuc2Nyb2xsVG9wfHxkLnNjcm9sbFRvcCktZixqPWIubGVmdCso Zy53aW4ucGFnZVhPZmZzZXR8fGUuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxMZWZ0 KS1oO3JldHVybnt5OmkseDpqfX07cmV0dXJuIGMuZ2V0RWxlbWVudEJ5UG9p bnQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLGQ9KGMuY2FudmFzLHkuZG9j LmVsZW1lbnRGcm9tUG9pbnQoYSxiKSk7aWYoeS53aW4ub3BlcmEmJiJzdmci PT1kLnRhZ05hbWUpe3ZhciBlPWNiKGQpLGY9ZC5jcmVhdGVTVkdSZWN0KCk7 Zi54PWEtZS54LGYueT1iLWUueSxmLndpZHRoPWYuaGVpZ2h0PTE7dmFyIGc9 ZC5nZXRJbnRlcnNlY3Rpb25MaXN0KGYsbnVsbCk7Zy5sZW5ndGgmJihkPWdb Zy5sZW5ndGgtMV0pfXJldHVybiBkP3coZCk6bnVsbH0sYy5wbHVnaW49ZnVu Y3Rpb24oYSl7YShjLHMsdix5LHQpfSx5Lndpbi5TbmFwPWMsY30oYXx8dGhp cyk7cmV0dXJuIGQucGx1Z2luKGZ1bmN0aW9uKGQsZSxmLGcsaCl7ZnVuY3Rp b24gaShhLGIpe2lmKG51bGw9PWIpe3ZhciBjPSEwO2lmKGI9YS5ub2RlLmdl dEF0dHJpYnV0ZSgibGluZWFyR3JhZGllbnQiPT1hLnR5cGV8fCJyYWRpYWxH cmFkaWVudCI9PWEudHlwZT8iZ3JhZGllbnRUcmFuc2Zvcm0iOiJwYXR0ZXJu Ij09YS50eXBlPyJwYXR0ZXJuVHJhbnNmb3JtIjoidHJhbnNmb3JtIiksIWIp cmV0dXJuIG5ldyBkLk1hdHJpeDtiPWQuXy5zdmdUcmFuc2Zvcm0yc3RyaW5n KGIpfWVsc2UgYj1kLl8ucmdUcmFuc2Zvcm0udGVzdChiKT9vKGIpLnJlcGxh Y2UoL1wuezN9fFx1MjAyNi9nLGEuXy50cmFuc2Zvcm18fCIiKTpkLl8uc3Zn VHJhbnNmb3JtMnN0cmluZyhiKSxuKGIsImFycmF5IikmJihiPWQucGF0aD9k LnBhdGgudG9TdHJpbmcuY2FsbChiKTpvKGIpKSxhLl8udHJhbnNmb3JtPWI7 dmFyIGU9ZC5fLnRyYW5zZm9ybTJtYXRyaXgoYixhLmdldEJCb3goMSkpO3Jl dHVybiBjP2U6dm9pZChhLm1hdHJpeD1lKX1mdW5jdGlvbiBqKGEpe2Z1bmN0 aW9uIGIoYSxiKXt2YXIgYz1xKGEubm9kZSxiKTtjPWMmJmMubWF0Y2goZiks Yz1jJiZjWzJdLGMmJiIjIj09Yy5jaGFyQXQoKSYmKGM9Yy5zdWJzdHJpbmco MSksYyYmKGhbY109KGhbY118fFtdKS5jb25jYXQoZnVuY3Rpb24oYyl7dmFy IGQ9e307ZFtiXT1VUkwoYykscShhLm5vZGUsZCl9KSkpfWZ1bmN0aW9uIGMo YSl7dmFyIGI9cShhLm5vZGUsInhsaW5rOmhyZWYiKTtiJiYiIyI9PWIuY2hh ckF0KCkmJihiPWIuc3Vic3RyaW5nKDEpLGImJihoW2JdPShoW2JdfHxbXSku Y29uY2F0KGZ1bmN0aW9uKGIpe2EuYXR0cigieGxpbms6aHJlZiIsIiMiK2Ip fSkpKX1mb3IodmFyIGQsZT1hLnNlbGVjdEFsbCgiKiIpLGY9L15ccyp1cmxc KCgifCd8KSguKilcMVwpXHMqJC8sZz1bXSxoPXt9LGk9MCxqPWUubGVuZ3Ro O2o+aTtpKyspe2Q9ZVtpXSxiKGQsImZpbGwiKSxiKGQsInN0cm9rZSIpLGIo ZCwiZmlsdGVyIiksYihkLCJtYXNrIiksYihkLCJjbGlwLXBhdGgiKSxjKGQp O3ZhciBrPXEoZC5ub2RlLCJpZCIpO2smJihxKGQubm9kZSx7aWQ6ZC5pZH0p LGcucHVzaCh7b2xkOmssaWQ6ZC5pZH0pKX1mb3IoaT0wLGo9Zy5sZW5ndGg7 aj5pO2krKyl7dmFyIGw9aFtnW2ldLm9sZF07aWYobClmb3IodmFyIG09MCxu PWwubGVuZ3RoO24+bTttKyspbFttXShnW2ldLmlkKX19ZnVuY3Rpb24gayhh LGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWQuc2xpY2UoYSxiKTty ZXR1cm4gMT09ZS5sZW5ndGgmJihlPWVbMF0pLGM/YyhlKTplfX1mdW5jdGlv biBsKGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBiPWE/IjwiK3RoaXMudHlw ZToiIixjPXRoaXMubm9kZS5hdHRyaWJ1dGVzLGQ9dGhpcy5ub2RlLmNoaWxk Tm9kZXM7aWYoYSlmb3IodmFyIGU9MCxmPWMubGVuZ3RoO2Y+ZTtlKyspYis9 IiAiK2NbZV0ubmFtZSsnPSInK2NbZV0udmFsdWUucmVwbGFjZSgvIi9nLCdc XCInKSsnIic7aWYoZC5sZW5ndGgpe2ZvcihhJiYoYis9Ij4iKSxlPTAsZj1k Lmxlbmd0aDtmPmU7ZSsrKTM9PWRbZV0ubm9kZVR5cGU/Yis9ZFtlXS5ub2Rl VmFsdWU6MT09ZFtlXS5ub2RlVHlwZSYmKGIrPXUoZFtlXSkudG9TdHJpbmco KSk7YSYmKGIrPSI8LyIrdGhpcy50eXBlKyI+Iil9ZWxzZSBhJiYoYis9Ii8+ Iik7cmV0dXJuIGJ9fXZhciBtPWUucHJvdG90eXBlLG49ZC5pcyxvPVN0cmlu ZyxwPWQuX3VuaXQycHgscT1kLl8uJCxyPWQuXy5tYWtlLHM9ZC5fLmdldFNv bWVEZWZzLHQ9Imhhc093blByb3BlcnR5Iix1PWQuXy53cmFwO20uZ2V0QkJv eD1mdW5jdGlvbihhKXtpZighZC5NYXRyaXh8fCFkLnBhdGgpcmV0dXJuIHRo aXMubm9kZS5nZXRCQm94KCk7dmFyIGI9dGhpcyxjPW5ldyBkLk1hdHJpeDtp ZihiLnJlbW92ZWQpcmV0dXJuIGQuXy5ib3goKTtmb3IoOyJ1c2UiPT1iLnR5 cGU7KWlmKGF8fChjPWMuYWRkKGIudHJhbnNmb3JtKCkubG9jYWxNYXRyaXgu dHJhbnNsYXRlKGIuYXR0cigieCIpfHwwLGIuYXR0cigieSIpfHwwKSkpLGIu b3JpZ2luYWwpYj1iLm9yaWdpbmFsO2Vsc2V7dmFyIGU9Yi5hdHRyKCJ4bGlu azpocmVmIik7Yj1iLm9yaWdpbmFsPWIubm9kZS5vd25lckRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkKGUuc3Vic3RyaW5nKGUuaW5kZXhPZigiIyIpKzEpKX12 YXIgZj1iLl8sZz1kLnBhdGguZ2V0W2IudHlwZV18fGQucGF0aC5nZXQuZGVm bHQ7dHJ5e3JldHVybiBhPyhmLmJib3h3dD1nP2QucGF0aC5nZXRCQm94KGIu cmVhbFBhdGg9ZyhiKSk6ZC5fLmJveChiLm5vZGUuZ2V0QkJveCgpKSxkLl8u Ym94KGYuYmJveHd0KSk6KGIucmVhbFBhdGg9ZyhiKSxiLm1hdHJpeD1iLnRy YW5zZm9ybSgpLmxvY2FsTWF0cml4LGYuYmJveD1kLnBhdGguZ2V0QkJveChk LnBhdGgubWFwKGIucmVhbFBhdGgsYy5hZGQoYi5tYXRyaXgpKSksZC5fLmJv eChmLmJib3gpKX1jYXRjaChoKXtyZXR1cm4gZC5fLmJveCgpfX07dmFyIHY9 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmd9O20udHJhbnNmb3JtPWZ1 bmN0aW9uKGEpe3ZhciBiPXRoaXMuXztpZihudWxsPT1hKXtmb3IodmFyIGMs ZT10aGlzLGY9bmV3IGQuTWF0cml4KHRoaXMubm9kZS5nZXRDVE0oKSksZz1p KHRoaXMpLGg9W2ddLGo9bmV3IGQuTWF0cml4LGs9Zy50b1RyYW5zZm9ybVN0 cmluZygpLGw9byhnKT09byh0aGlzLm1hdHJpeCk/byhiLnRyYW5zZm9ybSk6 azsic3ZnIiE9ZS50eXBlJiYoZT1lLnBhcmVudCgpKTspaC5wdXNoKGkoZSkp O2ZvcihjPWgubGVuZ3RoO2MtLTspai5hZGQoaFtjXSk7cmV0dXJue3N0cmlu ZzpsLGdsb2JhbE1hdHJpeDpmLHRvdGFsTWF0cml4OmosbG9jYWxNYXRyaXg6 ZyxkaWZmTWF0cml4OmYuY2xvbmUoKS5hZGQoZy5pbnZlcnQoKSksZ2xvYmFs OmYudG9UcmFuc2Zvcm1TdHJpbmcoKSx0b3RhbDpqLnRvVHJhbnNmb3JtU3Ry aW5nKCksbG9jYWw6ayx0b1N0cmluZzp2fX1yZXR1cm4gYSBpbnN0YW5jZW9m IGQuTWF0cml4Pyh0aGlzLm1hdHJpeD1hLHRoaXMuXy50cmFuc2Zvcm09YS50 b1RyYW5zZm9ybVN0cmluZygpKTppKHRoaXMsYSksdGhpcy5ub2RlJiYoImxp bmVhckdyYWRpZW50Ij09dGhpcy50eXBlfHwicmFkaWFsR3JhZGllbnQiPT10 aGlzLnR5cGU/cSh0aGlzLm5vZGUse2dyYWRpZW50VHJhbnNmb3JtOnRoaXMu bWF0cml4fSk6InBhdHRlcm4iPT10aGlzLnR5cGU/cSh0aGlzLm5vZGUse3Bh dHRlcm5UcmFuc2Zvcm06dGhpcy5tYXRyaXh9KTpxKHRoaXMubm9kZSx7dHJh bnNmb3JtOnRoaXMubWF0cml4fSkpLHRoaXN9LG0ucGFyZW50PWZ1bmN0aW9u KCl7cmV0dXJuIHUodGhpcy5ub2RlLnBhcmVudE5vZGUpfSxtLmFwcGVuZD1t LmFkZD1mdW5jdGlvbihhKXtpZihhKXtpZigic2V0Ij09YS50eXBlKXt2YXIg Yj10aGlzO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24oYSl7Yi5hZGQoYSl9 KSx0aGlzfWE9dShhKSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoYS5ub2RlKSxh LnBhcGVyPXRoaXMucGFwZXJ9cmV0dXJuIHRoaXN9LG0uYXBwZW5kVG89ZnVu Y3Rpb24oYSl7cmV0dXJuIGEmJihhPXUoYSksYS5hcHBlbmQodGhpcykpLHRo aXN9LG0ucHJlcGVuZD1mdW5jdGlvbihhKXtpZihhKXtpZigic2V0Ij09YS50 eXBlKXt2YXIgYixjPXRoaXM7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihh KXtiP2IuYWZ0ZXIoYSk6Yy5wcmVwZW5kKGEpLGI9YX0pLHRoaXN9YT11KGEp O3ZhciBkPWEucGFyZW50KCk7dGhpcy5ub2RlLmluc2VydEJlZm9yZShhLm5v ZGUsdGhpcy5ub2RlLmZpcnN0Q2hpbGQpLHRoaXMuYWRkJiZ0aGlzLmFkZCgp LGEucGFwZXI9dGhpcy5wYXBlcix0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVu dCgpLmFkZCgpLGQmJmQuYWRkKCl9cmV0dXJuIHRoaXN9LG0ucHJlcGVuZFRv PWZ1bmN0aW9uKGEpe3JldHVybiBhPXUoYSksYS5wcmVwZW5kKHRoaXMpLHRo aXN9LG0uYmVmb3JlPWZ1bmN0aW9uKGEpe2lmKCJzZXQiPT1hLnR5cGUpe3Zh ciBiPXRoaXM7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1h LnBhcmVudCgpO2Iubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLm5v ZGUsYi5ub2RlKSxjJiZjLmFkZCgpfSksdGhpcy5wYXJlbnQoKS5hZGQoKSx0 aGlzfWE9dShhKTt2YXIgYz1hLnBhcmVudCgpO3JldHVybiB0aGlzLm5vZGUu cGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYS5ub2RlLHRoaXMubm9kZSksdGhp cy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5hZGQoKSxjJiZjLmFkZCgpLGEu cGFwZXI9dGhpcy5wYXBlcix0aGlzfSxtLmFmdGVyPWZ1bmN0aW9uKGEpe2E9 dShhKTt2YXIgYj1hLnBhcmVudCgpO3JldHVybiB0aGlzLm5vZGUubmV4dFNp Ymxpbmc/dGhpcy5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEubm9k ZSx0aGlzLm5vZGUubmV4dFNpYmxpbmcpOnRoaXMubm9kZS5wYXJlbnROb2Rl LmFwcGVuZENoaWxkKGEubm9kZSksdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJl bnQoKS5hZGQoKSxiJiZiLmFkZCgpLGEucGFwZXI9dGhpcy5wYXBlcix0aGlz fSxtLmluc2VydEJlZm9yZT1mdW5jdGlvbihhKXthPXUoYSk7dmFyIGI9dGhp cy5wYXJlbnQoKTtyZXR1cm4gYS5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVm b3JlKHRoaXMubm9kZSxhLm5vZGUpLHRoaXMucGFwZXI9YS5wYXBlcixiJiZi LmFkZCgpLGEucGFyZW50KCkmJmEucGFyZW50KCkuYWRkKCksdGhpc30sbS5p bnNlcnRBZnRlcj1mdW5jdGlvbihhKXthPXUoYSk7dmFyIGI9dGhpcy5wYXJl bnQoKTtyZXR1cm4gYS5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRo aXMubm9kZSxhLm5vZGUubmV4dFNpYmxpbmcpLHRoaXMucGFwZXI9YS5wYXBl cixiJiZiLmFkZCgpLGEucGFyZW50KCkmJmEucGFyZW50KCkuYWRkKCksdGhp c30sbS5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBhcmVudCgpO3Jl dHVybiB0aGlzLm5vZGUucGFyZW50Tm9kZSYmdGhpcy5ub2RlLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQodGhpcy5ub2RlKSxkZWxldGUgdGhpcy5wYXBlcix0 aGlzLnJlbW92ZWQ9ITAsYSYmYS5hZGQoKSx0aGlzfSxtLnNlbGVjdD1mdW5j dGlvbihhKXtyZXR1cm4gdSh0aGlzLm5vZGUucXVlcnlTZWxlY3RvcihhKSl9 LG0uc2VsZWN0QWxsPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5vZGUu cXVlcnlTZWxlY3RvckFsbChhKSxjPShkLnNldHx8QXJyYXkpKCksZT0wO2U8 Yi5sZW5ndGg7ZSsrKWMucHVzaCh1KGJbZV0pKTtyZXR1cm4gY30sbS5hc1BY PWZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWImJihiPXRoaXMuYXR0cihh KSksK3AodGhpcyxhLGIpfSxtLnVzZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhp cy5ub2RlLmlkO3JldHVybiBifHwoYj10aGlzLmlkLHEodGhpcy5ub2RlLHtp ZDpifSkpLGE9ImxpbmVhckdyYWRpZW50Ij09dGhpcy50eXBlfHwicmFkaWFs R3JhZGllbnQiPT10aGlzLnR5cGV8fCJwYXR0ZXJuIj09dGhpcy50eXBlP3Io dGhpcy50eXBlLHRoaXMubm9kZS5wYXJlbnROb2RlKTpyKCJ1c2UiLHRoaXMu bm9kZS5wYXJlbnROb2RlKSxxKGEubm9kZSx7InhsaW5rOmhyZWYiOiIjIiti fSksYS5vcmlnaW5hbD10aGlzLGF9LG0uY2xvbmU9ZnVuY3Rpb24oKXt2YXIg YT11KHRoaXMubm9kZS5jbG9uZU5vZGUoITApKTtyZXR1cm4gcShhLm5vZGUs ImlkIikmJnEoYS5ub2RlLHtpZDphLmlkfSksaihhKSxhLmluc2VydEFmdGVy KHRoaXMpLGF9LG0udG9EZWZzPWZ1bmN0aW9uKCl7dmFyIGE9cyh0aGlzKTty ZXR1cm4gYS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpLHRoaXN9LG0ucGF0dGVy bj1tLnRvUGF0dGVybj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1yKCJwYXR0 ZXJuIixzKHRoaXMpKTtyZXR1cm4gbnVsbD09YSYmKGE9dGhpcy5nZXRCQm94 KCkpLG4oYSwib2JqZWN0IikmJiJ4ImluIGEmJihiPWEueSxjPWEud2lkdGgs ZD1hLmhlaWdodCxhPWEueCkscShlLm5vZGUse3g6YSx5OmIsd2lkdGg6Yyxo ZWlnaHQ6ZCxwYXR0ZXJuVW5pdHM6InVzZXJTcGFjZU9uVXNlIixpZDplLmlk LHZpZXdCb3g6W2EsYixjLGRdLmpvaW4oIiAiKX0pLGUubm9kZS5hcHBlbmRD aGlsZCh0aGlzLm5vZGUpLGV9LG0ubWFya2VyPWZ1bmN0aW9uKGEsYixjLGQs ZSxmKXt2YXIgZz1yKCJtYXJrZXIiLHModGhpcykpO3JldHVybiBudWxsPT1h JiYoYT10aGlzLmdldEJCb3goKSksbihhLCJvYmplY3QiKSYmIngiaW4gYSYm KGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0LGU9YS5yZWZYfHxhLmN4LGY9 YS5yZWZZfHxhLmN5LGE9YS54KSxxKGcubm9kZSx7dmlld0JveDpbYSxiLGMs ZF0uam9pbigiICIpLG1hcmtlcldpZHRoOmMsbWFya2VySGVpZ2h0OmQsb3Jp ZW50OiJhdXRvIixyZWZYOmV8fDAscmVmWTpmfHwwLGlkOmcuaWR9KSxnLm5v ZGUuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKSxnfTt2YXIgdz1mdW5jdGlvbihh LGIsZCxlKXsiZnVuY3Rpb24iIT10eXBlb2YgZHx8ZC5sZW5ndGh8fChlPWQs ZD1jLmxpbmVhciksdGhpcy5hdHRyPWEsdGhpcy5kdXI9YixkJiYodGhpcy5l YXNpbmc9ZCksZSYmKHRoaXMuY2FsbGJhY2s9ZSl9O2QuXy5BbmltYXRpb249 dyxkLmFuaW1hdGlvbj1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IHco YSxiLGMsZCl9LG0uaW5BbmltPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPVtd O2Zvcih2YXIgYyBpbiBhLmFuaW1zKWEuYW5pbXNbdF0oYykmJiFmdW5jdGlv bihhKXtiLnB1c2goe2FuaW06bmV3IHcoYS5fYXR0cnMsYS5kdXIsYS5lYXNp bmcsYS5fY2FsbGJhY2spLG1pbmE6YSxjdXJTdGF0dXM6YS5zdGF0dXMoKSxz dGF0dXM6ZnVuY3Rpb24oYil7cmV0dXJuIGEuc3RhdHVzKGIpfSxzdG9wOmZ1 bmN0aW9uKCl7YS5zdG9wKCl9fSl9KGEuYW5pbXNbY10pO3JldHVybiBifSxk LmFuaW1hdGU9ZnVuY3Rpb24oYSxkLGUsZixnLGgpeyJmdW5jdGlvbiIhPXR5 cGVvZiBnfHxnLmxlbmd0aHx8KGg9ZyxnPWMubGluZWFyKTt2YXIgaT1jLnRp bWUoKSxqPWMoYSxkLGksaStmLGMudGltZSxlLGcpO3JldHVybiBoJiZiLm9u Y2UoIm1pbmEuZmluaXNoLiIrai5pZCxoKSxqfSxtLnN0b3A9ZnVuY3Rpb24o KXtmb3IodmFyIGE9dGhpcy5pbkFuaW0oKSxiPTAsYz1hLmxlbmd0aDtjPmI7 YisrKWFbYl0uc3RvcCgpO3JldHVybiB0aGlzfSxtLmFuaW1hdGU9ZnVuY3Rp b24oYSxkLGUsZil7ImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUubGVuZ3RofHwo Zj1lLGU9Yy5saW5lYXIpLGEgaW5zdGFuY2VvZiB3JiYoZj1hLmNhbGxiYWNr LGU9YS5lYXNpbmcsZD1hLmR1cixhPWEuYXR0cik7dmFyIGcsaCxpLGosbD1b XSxtPVtdLHA9e30scT10aGlzO2Zvcih2YXIgciBpbiBhKWlmKGFbdF0ocikp e3EuZXF1YWw/KGo9cS5lcXVhbChyLG8oYVtyXSkpLGc9ai5mcm9tLGg9ai50 byxpPWouZik6KGc9K3EuYXR0cihyKSxoPSthW3JdKTt2YXIgcz1uKGcsImFy cmF5Iik/Zy5sZW5ndGg6MTtwW3JdPWsobC5sZW5ndGgsbC5sZW5ndGgrcyxp KSxsPWwuY29uY2F0KGcpLG09bS5jb25jYXQoaCl9dmFyIHU9Yy50aW1lKCks dj1jKGwsbSx1LHUrZCxjLnRpbWUsZnVuY3Rpb24oYSl7dmFyIGI9e307Zm9y KHZhciBjIGluIHApcFt0XShjKSYmKGJbY109cFtjXShhKSk7cS5hdHRyKGIp fSxlKTtyZXR1cm4gcS5hbmltc1t2LmlkXT12LHYuX2F0dHJzPWEsdi5fY2Fs bGJhY2s9ZixiKCJzbmFwLmFuaW1jcmVhdGVkLiIrcS5pZCx2KSxiLm9uY2Uo Im1pbmEuZmluaXNoLiIrdi5pZCxmdW5jdGlvbigpe2RlbGV0ZSBxLmFuaW1z W3YuaWRdLGYmJmYuY2FsbChxKX0pLGIub25jZSgibWluYS5zdG9wLiIrdi5p ZCxmdW5jdGlvbigpe2RlbGV0ZSBxLmFuaW1zW3YuaWRdfSkscX07dmFyIHg9 e307bS5kYXRhPWZ1bmN0aW9uKGEsYyl7dmFyIGU9eFt0aGlzLmlkXT14W3Ro aXMuaWRdfHx7fTtpZigwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBiKCJz bmFwLmRhdGEuZ2V0LiIrdGhpcy5pZCx0aGlzLGUsbnVsbCksZTsKK2lmKDE9 PWFyZ3VtZW50cy5sZW5ndGgpe2lmKGQuaXMoYSwib2JqZWN0Iikpe2Zvcih2 YXIgZiBpbiBhKWFbdF0oZikmJnRoaXMuZGF0YShmLGFbZl0pO3JldHVybiB0 aGlzfXJldHVybiBiKCJzbmFwLmRhdGEuZ2V0LiIrdGhpcy5pZCx0aGlzLGVb YV0sYSksZVthXX1yZXR1cm4gZVthXT1jLGIoInNuYXAuZGF0YS5zZXQuIit0 aGlzLmlkLHRoaXMsYyxhKSx0aGlzfSxtLnJlbW92ZURhdGE9ZnVuY3Rpb24o YSl7cmV0dXJuIG51bGw9PWE/eFt0aGlzLmlkXT17fTp4W3RoaXMuaWRdJiZk ZWxldGUgeFt0aGlzLmlkXVthXSx0aGlzfSxtLm91dGVyU1ZHPW0udG9TdHJp bmc9bCgxKSxtLmlubmVyU1ZHPWwoKSxtLnRvRGF0YVVSTD1mdW5jdGlvbigp e2lmKGEmJmEuYnRvYSl7dmFyIGI9dGhpcy5nZXRCQm94KCksYz1kLmZvcm1h dCgnPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9y Zy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5 OTkveGxpbmsiIHdpZHRoPSJ7d2lkdGh9IiBoZWlnaHQ9IntoZWlnaHR9IiB2 aWV3Qm94PSJ7eH0ge3l9IHt3aWR0aH0ge2hlaWdodH0iPntjb250ZW50c308 L3N2Zz4nLHt4OitiLngudG9GaXhlZCgzKSx5OitiLnkudG9GaXhlZCgzKSx3 aWR0aDorYi53aWR0aC50b0ZpeGVkKDMpLGhlaWdodDorYi5oZWlnaHQudG9G aXhlZCgzKSxjb250ZW50czp0aGlzLm91dGVyU1ZHKCl9KTtyZXR1cm4iZGF0 YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK2J0b2EodW5lc2NhcGUoZW5jb2Rl VVJJQ29tcG9uZW50KGMpKSl9fSxoLnByb3RvdHlwZS5zZWxlY3Q9bS5zZWxl Y3QsaC5wcm90b3R5cGUuc2VsZWN0QWxsPW0uc2VsZWN0QWxsfSksZC5wbHVn aW4oZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhLGIsZCxlLGYsZyl7cmV0dXJu IG51bGw9PWImJiJbb2JqZWN0IFNWR01hdHJpeF0iPT1jLmNhbGwoYSk/KHRo aXMuYT1hLmEsdGhpcy5iPWEuYix0aGlzLmM9YS5jLHRoaXMuZD1hLmQsdGhp cy5lPWEuZSx2b2lkKHRoaXMuZj1hLmYpKTp2b2lkKG51bGwhPWE/KHRoaXMu YT0rYSx0aGlzLmI9K2IsdGhpcy5jPStkLHRoaXMuZD0rZSx0aGlzLmU9K2Ys dGhpcy5mPStnKToodGhpcy5hPTEsdGhpcy5iPTAsdGhpcy5jPTAsdGhpcy5k PTEsdGhpcy5lPTAsdGhpcy5mPTApKX12YXIgYz1PYmplY3QucHJvdG90eXBl LnRvU3RyaW5nLGQ9U3RyaW5nLGU9TWF0aCxmPSIiOyFmdW5jdGlvbihjKXtm dW5jdGlvbiBnKGEpe3JldHVybiBhWzBdKmFbMF0rYVsxXSphWzFdfWZ1bmN0 aW9uIGgoYSl7dmFyIGI9ZS5zcXJ0KGcoYSkpO2FbMF0mJihhWzBdLz1iKSxh WzFdJiYoYVsxXS89Yil9Yy5hZGQ9ZnVuY3Rpb24oYSxjLGQsZSxmLGcpe3Zh ciBoLGksaixrLGw9W1tdLFtdLFtdXSxtPVtbdGhpcy5hLHRoaXMuYyx0aGlz LmVdLFt0aGlzLmIsdGhpcy5kLHRoaXMuZl0sWzAsMCwxXV0sbj1bW2EsZCxm XSxbYyxlLGddLFswLDAsMV1dO2ZvcihhJiZhIGluc3RhbmNlb2YgYiYmKG49 W1thLmEsYS5jLGEuZV0sW2EuYixhLmQsYS5mXSxbMCwwLDFdXSksaD0wOzM+ aDtoKyspZm9yKGk9MDszPmk7aSsrKXtmb3Ioaz0wLGo9MDszPmo7aisrKWsr PW1baF1bal0qbltqXVtpXTtsW2hdW2ldPWt9cmV0dXJuIHRoaXMuYT1sWzBd WzBdLHRoaXMuYj1sWzFdWzBdLHRoaXMuYz1sWzBdWzFdLHRoaXMuZD1sWzFd WzFdLHRoaXMuZT1sWzBdWzJdLHRoaXMuZj1sWzFdWzJdLHRoaXN9LGMuaW52 ZXJ0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPWEuYSphLmQtYS5iKmEuYzty ZXR1cm4gbmV3IGIoYS5kL2MsLWEuYi9jLC1hLmMvYyxhLmEvYywoYS5jKmEu Zi1hLmQqYS5lKS9jLChhLmIqYS5lLWEuYSphLmYpL2MpfSxjLmNsb25lPWZ1 bmN0aW9uKCl7cmV0dXJuIG5ldyBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRo aXMuZCx0aGlzLmUsdGhpcy5mKX0sYy50cmFuc2xhdGU9ZnVuY3Rpb24oYSxi KXtyZXR1cm4gdGhpcy5hZGQoMSwwLDAsMSxhLGIpfSxjLnNjYWxlPWZ1bmN0 aW9uKGEsYixjLGQpe3JldHVybiBudWxsPT1iJiYoYj1hKSwoY3x8ZCkmJnRo aXMuYWRkKDEsMCwwLDEsYyxkKSx0aGlzLmFkZChhLDAsMCxiLDAsMCksKGN8 fGQpJiZ0aGlzLmFkZCgxLDAsMCwxLC1jLC1kKSx0aGlzfSxjLnJvdGF0ZT1m dW5jdGlvbihiLGMsZCl7Yj1hLnJhZChiKSxjPWN8fDAsZD1kfHwwO3ZhciBm PStlLmNvcyhiKS50b0ZpeGVkKDkpLGc9K2Uuc2luKGIpLnRvRml4ZWQoOSk7 cmV0dXJuIHRoaXMuYWRkKGYsZywtZyxmLGMsZCksdGhpcy5hZGQoMSwwLDAs MSwtYywtZCl9LGMueD1mdW5jdGlvbihhLGIpe3JldHVybiBhKnRoaXMuYSti KnRoaXMuYyt0aGlzLmV9LGMueT1mdW5jdGlvbihhLGIpe3JldHVybiBhKnRo aXMuYitiKnRoaXMuZCt0aGlzLmZ9LGMuZ2V0PWZ1bmN0aW9uKGEpe3JldHVy bit0aGlzW2QuZnJvbUNoYXJDb2RlKDk3K2EpXS50b0ZpeGVkKDQpfSxjLnRv U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIm1hdHJpeCgiK1t0aGlzLmdldCgw KSx0aGlzLmdldCgxKSx0aGlzLmdldCgyKSx0aGlzLmdldCgzKSx0aGlzLmdl dCg0KSx0aGlzLmdldCg1KV0uam9pbigpKyIpIn0sYy5vZmZzZXQ9ZnVuY3Rp b24oKXtyZXR1cm5bdGhpcy5lLnRvRml4ZWQoNCksdGhpcy5mLnRvRml4ZWQo NCldfSxjLmRldGVybWluYW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSp0 aGlzLmQtdGhpcy5iKnRoaXMuY30sYy5zcGxpdD1mdW5jdGlvbigpe3ZhciBi PXt9O2IuZHg9dGhpcy5lLGIuZHk9dGhpcy5mO3ZhciBjPVtbdGhpcy5hLHRo aXMuY10sW3RoaXMuYix0aGlzLmRdXTtiLnNjYWxleD1lLnNxcnQoZyhjWzBd KSksaChjWzBdKSxiLnNoZWFyPWNbMF1bMF0qY1sxXVswXStjWzBdWzFdKmNb MV1bMV0sY1sxXT1bY1sxXVswXS1jWzBdWzBdKmIuc2hlYXIsY1sxXVsxXS1j WzBdWzFdKmIuc2hlYXJdLGIuc2NhbGV5PWUuc3FydChnKGNbMV0pKSxoKGNb MV0pLGIuc2hlYXIvPWIuc2NhbGV5LHRoaXMuZGV0ZXJtaW5hbnQoKTwwJiYo Yi5zY2FsZXg9LWIuc2NhbGV4KTt2YXIgZD0tY1swXVsxXSxmPWNbMV1bMV07 cmV0dXJuIDA+Zj8oYi5yb3RhdGU9YS5kZWcoZS5hY29zKGYpKSwwPmQmJihi LnJvdGF0ZT0zNjAtYi5yb3RhdGUpKTpiLnJvdGF0ZT1hLmRlZyhlLmFzaW4o ZCkpLGIuaXNTaW1wbGU9ISgrYi5zaGVhci50b0ZpeGVkKDkpfHxiLnNjYWxl eC50b0ZpeGVkKDkpIT1iLnNjYWxleS50b0ZpeGVkKDkpJiZiLnJvdGF0ZSks Yi5pc1N1cGVyU2ltcGxlPSErYi5zaGVhci50b0ZpeGVkKDkpJiZiLnNjYWxl eC50b0ZpeGVkKDkpPT1iLnNjYWxleS50b0ZpeGVkKDkpJiYhYi5yb3RhdGUs Yi5ub1JvdGF0aW9uPSErYi5zaGVhci50b0ZpeGVkKDkpJiYhYi5yb3RhdGUs Yn0sYy50b1RyYW5zZm9ybVN0cmluZz1mdW5jdGlvbihhKXt2YXIgYj1hfHx0 aGlzLnNwbGl0KCk7cmV0dXJuK2Iuc2hlYXIudG9GaXhlZCg5KT8ibSIrW3Ro aXMuZ2V0KDApLHRoaXMuZ2V0KDEpLHRoaXMuZ2V0KDIpLHRoaXMuZ2V0KDMp LHRoaXMuZ2V0KDQpLHRoaXMuZ2V0KDUpXTooYi5zY2FsZXg9K2Iuc2NhbGV4 LnRvRml4ZWQoNCksYi5zY2FsZXk9K2Iuc2NhbGV5LnRvRml4ZWQoNCksYi5y b3RhdGU9K2Iucm90YXRlLnRvRml4ZWQoNCksKGIuZHh8fGIuZHk/InQiK1sr Yi5keC50b0ZpeGVkKDQpLCtiLmR5LnRvRml4ZWQoNCldOmYpKygxIT1iLnNj YWxleHx8MSE9Yi5zY2FsZXk/InMiK1tiLnNjYWxleCxiLnNjYWxleSwwLDBd OmYpKyhiLnJvdGF0ZT8iciIrWytiLnJvdGF0ZS50b0ZpeGVkKDQpLDAsMF06 ZikpfX0oYi5wcm90b3R5cGUpLGEuTWF0cml4PWIsYS5tYXRyaXg9ZnVuY3Rp b24oYSxjLGQsZSxmLGcpe3JldHVybiBuZXcgYihhLGMsZCxlLGYsZyl9fSks ZC5wbHVnaW4oZnVuY3Rpb24oYSxjLGQsZSxmKXtmdW5jdGlvbiBnKGQpe3Jl dHVybiBmdW5jdGlvbihlKXtpZihiLnN0b3AoKSxlIGluc3RhbmNlb2YgZiYm MT09ZS5ub2RlLmNoaWxkTm9kZXMubGVuZ3RoJiYoInJhZGlhbEdyYWRpZW50 Ij09ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZXx8ImxpbmVhckdyYWRpZW50 Ij09ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZXx8InBhdHRlcm4iPT1lLm5v ZGUuZmlyc3RDaGlsZC50YWdOYW1lKSYmKGU9ZS5ub2RlLmZpcnN0Q2hpbGQs bih0aGlzKS5hcHBlbmRDaGlsZChlKSxlPWwoZSkpLGUgaW5zdGFuY2VvZiBj KWlmKCJyYWRpYWxHcmFkaWVudCI9PWUudHlwZXx8ImxpbmVhckdyYWRpZW50 Ij09ZS50eXBlfHwicGF0dGVybiI9PWUudHlwZSl7ZS5ub2RlLmlkfHxwKGUu bm9kZSx7aWQ6ZS5pZH0pO3ZhciBnPXEoZS5ub2RlLmlkKX1lbHNlIGc9ZS5h dHRyKGQpO2Vsc2UgaWYoZz1hLmNvbG9yKGUpLGcuZXJyb3Ipe3ZhciBoPWEo bih0aGlzKS5vd25lclNWR0VsZW1lbnQpLmdyYWRpZW50KGUpO2g/KGgubm9k ZS5pZHx8cChoLm5vZGUse2lkOmguaWR9KSxnPXEoaC5ub2RlLmlkKSk6Zz1l fWVsc2UgZz1yKGcpO3ZhciBpPXt9O2lbZF09ZyxwKHRoaXMubm9kZSxpKSx0 aGlzLm5vZGUuc3R5bGVbZF09dH19ZnVuY3Rpb24gaChhKXtiLnN0b3AoKSxh PT0rYSYmKGErPSJweCIpLHRoaXMubm9kZS5zdHlsZS5mb250U2l6ZT1hfWZ1 bmN0aW9uIGkoYSl7Zm9yKHZhciBiPVtdLGM9YS5jaGlsZE5vZGVzLGQ9MCxl PWMubGVuZ3RoO2U+ZDtkKyspe3ZhciBmPWNbZF07Mz09Zi5ub2RlVHlwZSYm Yi5wdXNoKGYubm9kZVZhbHVlKSwidHNwYW4iPT1mLnRhZ05hbWUmJmIucHVz aCgxPT1mLmNoaWxkTm9kZXMubGVuZ3RoJiYzPT1mLmZpcnN0Q2hpbGQubm9k ZVR5cGU/Zi5maXJzdENoaWxkLm5vZGVWYWx1ZTppKGYpKX1yZXR1cm4gYn1m dW5jdGlvbiBqKCl7cmV0dXJuIGIuc3RvcCgpLHRoaXMubm9kZS5zdHlsZS5m b250U2l6ZX12YXIgaz1hLl8ubWFrZSxsPWEuXy53cmFwLG09YS5pcyxuPWEu Xy5nZXRTb21lRGVmcyxvPS9edXJsXCgjPyhbXildKylcKSQvLHA9YS5fLiQs cT1hLnVybCxyPVN0cmluZyxzPWEuXy5zZXBhcmF0b3IsdD0iIjtiLm9uKCJz bmFwLnV0aWwuYXR0ci5tYXNrIixmdW5jdGlvbihhKXtpZihhIGluc3RhbmNl b2YgY3x8YSBpbnN0YW5jZW9mIGYpe2lmKGIuc3RvcCgpLGEgaW5zdGFuY2Vv ZiBmJiYxPT1hLm5vZGUuY2hpbGROb2Rlcy5sZW5ndGgmJihhPWEubm9kZS5m aXJzdENoaWxkLG4odGhpcykuYXBwZW5kQ2hpbGQoYSksYT1sKGEpKSwibWFz ayI9PWEudHlwZSl2YXIgZD1hO2Vsc2UgZD1rKCJtYXNrIixuKHRoaXMpKSxk Lm5vZGUuYXBwZW5kQ2hpbGQoYS5ub2RlKTshZC5ub2RlLmlkJiZwKGQubm9k ZSx7aWQ6ZC5pZH0pLHAodGhpcy5ub2RlLHttYXNrOnEoZC5pZCl9KX19KSxm dW5jdGlvbihhKXtiLm9uKCJzbmFwLnV0aWwuYXR0ci5jbGlwIixhKSxiLm9u KCJzbmFwLnV0aWwuYXR0ci5jbGlwLXBhdGgiLGEpLGIub24oInNuYXAudXRp bC5hdHRyLmNsaXBQYXRoIixhKX0oZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5j ZW9mIGN8fGEgaW5zdGFuY2VvZiBmKXtpZihiLnN0b3AoKSwiY2xpcFBhdGgi PT1hLnR5cGUpdmFyIGQ9YTtlbHNlIGQ9aygiY2xpcFBhdGgiLG4odGhpcykp LGQubm9kZS5hcHBlbmRDaGlsZChhLm5vZGUpLCFkLm5vZGUuaWQmJnAoZC5u b2RlLHtpZDpkLmlkfSk7cCh0aGlzLm5vZGUseyJjbGlwLXBhdGgiOnEoZC5u b2RlLmlkfHxkLmlkKX0pfX0pLGIub24oInNuYXAudXRpbC5hdHRyLmZpbGwi LGcoImZpbGwiKSksYi5vbigic25hcC51dGlsLmF0dHIuc3Ryb2tlIixnKCJz dHJva2UiKSk7dmFyIHU9L14oW2xyXSkoPzpcKChbXildKilcKSk/KC4qKSQv aTtiLm9uKCJzbmFwLnV0aWwuZ3JhZC5wYXJzZSIsZnVuY3Rpb24oYSl7YT1y KGEpO3ZhciBiPWEubWF0Y2godSk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9 YlsxXSxkPWJbMl0sZT1iWzNdO3JldHVybiBkPWQuc3BsaXQoL1xzKixccyov KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuK2E9PWE/K2E6YX0pLDE9PWQubGVu Z3RoJiYwPT1kWzBdJiYoZD1bXSksZT1lLnNwbGl0KCItIiksZT1lLm1hcChm dW5jdGlvbihhKXthPWEuc3BsaXQoIjoiKTt2YXIgYj17Y29sb3I6YVswXX07 cmV0dXJuIGFbMV0mJihiLm9mZnNldD1wYXJzZUZsb2F0KGFbMV0pKSxifSks e3R5cGU6YyxwYXJhbXM6ZCxzdG9wczplfX0pLGIub24oInNuYXAudXRpbC5h dHRyLmQiLGZ1bmN0aW9uKGMpe2Iuc3RvcCgpLG0oYywiYXJyYXkiKSYmbShj WzBdLCJhcnJheSIpJiYoYz1hLnBhdGgudG9TdHJpbmcuY2FsbChjKSksYz1y KGMpLGMubWF0Y2goL1tydW9dL2kpJiYoYz1hLnBhdGgudG9BYnNvbHV0ZShj KSkscCh0aGlzLm5vZGUse2Q6Y30pfSkoLTEpLGIub24oInNuYXAudXRpbC5h dHRyLiN0ZXh0IixmdW5jdGlvbihhKXtiLnN0b3AoKSxhPXIoYSk7Zm9yKHZh ciBjPWUuZG9jLmNyZWF0ZVRleHROb2RlKGEpO3RoaXMubm9kZS5maXJzdENo aWxkOyl0aGlzLm5vZGUucmVtb3ZlQ2hpbGQodGhpcy5ub2RlLmZpcnN0Q2hp bGQpO3RoaXMubm9kZS5hcHBlbmRDaGlsZChjKX0pKC0xKSxiLm9uKCJzbmFw LnV0aWwuYXR0ci5wYXRoIixmdW5jdGlvbihhKXtiLnN0b3AoKSx0aGlzLmF0 dHIoe2Q6YX0pfSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLmNsYXNzIixm dW5jdGlvbihhKXtiLnN0b3AoKSx0aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VW YWw9YX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci52aWV3Qm94IixmdW5j dGlvbihhKXt2YXIgYztjPW0oYSwib2JqZWN0IikmJiJ4ImluIGE/W2EueCxh LnksYS53aWR0aCxhLmhlaWdodF0uam9pbigiICIpOm0oYSwiYXJyYXkiKT9h LmpvaW4oIiAiKTphLHAodGhpcy5ub2RlLHt2aWV3Qm94OmN9KSxiLnN0b3Ao KX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci50cmFuc2Zvcm0iLGZ1bmN0 aW9uKGEpe3RoaXMudHJhbnNmb3JtKGEpLGIuc3RvcCgpfSkoLTEpLGIub24o InNuYXAudXRpbC5hdHRyLnIiLGZ1bmN0aW9uKGEpeyJyZWN0Ij09dGhpcy50 eXBlJiYoYi5zdG9wKCkscCh0aGlzLm5vZGUse3J4OmEscnk6YX0pKX0pKC0x KSxiLm9uKCJzbmFwLnV0aWwuYXR0ci50ZXh0cGF0aCIsZnVuY3Rpb24oYSl7 aWYoYi5zdG9wKCksInRleHQiPT10aGlzLnR5cGUpe3ZhciBkLGUsZjtpZigh YSYmdGhpcy50ZXh0UGF0aCl7Zm9yKGU9dGhpcy50ZXh0UGF0aDtlLm5vZGUu Zmlyc3RDaGlsZDspdGhpcy5ub2RlLmFwcGVuZENoaWxkKGUubm9kZS5maXJz dENoaWxkKTtyZXR1cm4gZS5yZW1vdmUoKSx2b2lkIGRlbGV0ZSB0aGlzLnRl eHRQYXRofWlmKG0oYSwic3RyaW5nIikpe3ZhciBnPW4odGhpcyksaD1sKGcu cGFyZW50Tm9kZSkucGF0aChhKTtnLmFwcGVuZENoaWxkKGgubm9kZSksZD1o LmlkLGguYXR0cih7aWQ6ZH0pfWVsc2UgYT1sKGEpLGEgaW5zdGFuY2VvZiBj JiYoZD1hLmF0dHIoImlkIiksZHx8KGQ9YS5pZCxhLmF0dHIoe2lkOmR9KSkp O2lmKGQpaWYoZT10aGlzLnRleHRQYXRoLGY9dGhpcy5ub2RlLGUpZS5hdHRy KHsieGxpbms6aHJlZiI6IiMiK2R9KTtlbHNle2ZvcihlPXAoInRleHRQYXRo Iix7InhsaW5rOmhyZWYiOiIjIitkfSk7Zi5maXJzdENoaWxkOyllLmFwcGVu ZENoaWxkKGYuZmlyc3RDaGlsZCk7Zi5hcHBlbmRDaGlsZChlKSx0aGlzLnRl eHRQYXRoPWwoZSl9fX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci50ZXh0 IixmdW5jdGlvbihhKXtpZigidGV4dCI9PXRoaXMudHlwZSl7Zm9yKHZhciBj PXRoaXMubm9kZSxkPWZ1bmN0aW9uKGEpe3ZhciBiPXAoInRzcGFuIik7aWYo bShhLCJhcnJheSIpKWZvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIuYXBw ZW5kQ2hpbGQoZChhW2NdKSk7ZWxzZSBiLmFwcGVuZENoaWxkKGUuZG9jLmNy ZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gYi5ub3JtYWxpemUmJmIubm9ybWFs aXplKCksYn07Yy5maXJzdENoaWxkOyljLnJlbW92ZUNoaWxkKGMuZmlyc3RD aGlsZCk7Zm9yKHZhciBmPWQoYSk7Zi5maXJzdENoaWxkOyljLmFwcGVuZENo aWxkKGYuZmlyc3RDaGlsZCl9Yi5zdG9wKCl9KSgtMSksYi5vbigic25hcC51 dGlsLmF0dHIuZm9udFNpemUiLGgpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0 ci5mb250LXNpemUiLGgpKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50 cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7cmV0dXJuIGIuc3RvcCgpLHRoaXMudHJh bnNmb3JtKCl9KSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIudGV4dHBh dGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGIuc3RvcCgpLHRoaXMudGV4dFBhdGh9 KSgtMSksZnVuY3Rpb24oKXtmdW5jdGlvbiBjKGMpe3JldHVybiBmdW5jdGlv bigpe2Iuc3RvcCgpO3ZhciBkPWUuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1 dGVkU3R5bGUodGhpcy5ub2RlLG51bGwpLmdldFByb3BlcnR5VmFsdWUoIm1h cmtlci0iK2MpO3JldHVybiJub25lIj09ZD9kOmEoZS5kb2MuZ2V0RWxlbWVu dEJ5SWQoZC5tYXRjaChvKVsxXSkpfX1mdW5jdGlvbiBkKGEpe3JldHVybiBm dW5jdGlvbihjKXtiLnN0b3AoKTt2YXIgZD0ibWFya2VyIithLmNoYXJBdCgw KS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyaW5nKDEpO2lmKCIiPT1jfHwhYyly ZXR1cm4gdm9pZCh0aGlzLm5vZGUuc3R5bGVbZF09Im5vbmUiKTtpZigibWFy a2VyIj09Yy50eXBlKXt2YXIgZT1jLm5vZGUuaWQ7cmV0dXJuIGV8fHAoYy5u b2RlLHtpZDpjLmlkfSksdm9pZCh0aGlzLm5vZGUuc3R5bGVbZF09cShlKSl9 fX1iLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXItZW5kIixjKCJlbmQi KSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlckVuZCIsYygi ZW5kIikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXItc3Rh cnQiLGMoInN0YXJ0IikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5t YXJrZXJTdGFydCIsYygic3RhcnQiKSkoLTEpLGIub24oInNuYXAudXRpbC5n ZXRhdHRyLm1hcmtlci1taWQiLGMoIm1pZCIpKSgtMSksYi5vbigic25hcC51 dGlsLmdldGF0dHIubWFya2VyTWlkIixjKCJtaWQiKSkoLTEpLGIub24oInNu YXAudXRpbC5hdHRyLm1hcmtlci1lbmQiLGQoImVuZCIpKSgtMSksYi5vbigi c25hcC51dGlsLmF0dHIubWFya2VyRW5kIixkKCJlbmQiKSkoLTEpLGIub24o InNuYXAudXRpbC5hdHRyLm1hcmtlci1zdGFydCIsZCgic3RhcnQiKSkoLTEp LGIub24oInNuYXAudXRpbC5hdHRyLm1hcmtlclN0YXJ0IixkKCJzdGFydCIp KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIubWFya2VyLW1pZCIsZCgibWlk IikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXJNaWQiLGQoIm1p ZCIpKSgtMSl9KCksYi5vbigic25hcC51dGlsLmdldGF0dHIuciIsZnVuY3Rp b24oKXtyZXR1cm4icmVjdCI9PXRoaXMudHlwZSYmcCh0aGlzLm5vZGUsInJ4 Iik9PXAodGhpcy5ub2RlLCJyeSIpPyhiLnN0b3AoKSxwKHRoaXMubm9kZSwi cngiKSk6dm9pZCAwfSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLnRl eHQiLGZ1bmN0aW9uKCl7aWYoInRleHQiPT10aGlzLnR5cGV8fCJ0c3BhbiI9 PXRoaXMudHlwZSl7Yi5zdG9wKCk7dmFyIGE9aSh0aGlzLm5vZGUpO3JldHVy biAxPT1hLmxlbmd0aD9hWzBdOmF9fSkoLTEpLGIub24oInNuYXAudXRpbC5n ZXRhdHRyLiN0ZXh0IixmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUudGV4 dENvbnRlbnR9KSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIudmlld0Jv eCIsZnVuY3Rpb24oKXtiLnN0b3AoKTt2YXIgYz1wKHRoaXMubm9kZSwidmll d0JveCIpO3JldHVybiBjPyhjPWMuc3BsaXQocyksYS5fLmJveCgrY1swXSwr Y1sxXSwrY1syXSwrY1szXSkpOnZvaWQgMH0pKC0xKSxiLm9uKCJzbmFwLnV0 aWwuZ2V0YXR0ci5wb2ludHMiLGZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlzLm5v ZGUsInBvaW50cyIpO3JldHVybiBiLnN0b3AoKSxhP2Euc3BsaXQocyk6dm9p ZCAwfSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLnBhdGgiLGZ1bmN0 aW9uKCl7dmFyIGE9cCh0aGlzLm5vZGUsImQiKTtyZXR1cm4gYi5zdG9wKCks YX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5jbGFzcyIsZnVuY3Rp b24oKXtyZXR1cm4gdGhpcy5ub2RlLmNsYXNzTmFtZS5iYXNlVmFsfSkoLTEp LGIub24oInNuYXAudXRpbC5nZXRhdHRyLmZvbnRTaXplIixqKSgtMSksYi5v bigic25hcC51dGlsLmdldGF0dHIuZm9udC1zaXplIixqKSgtMSl9KSxkLnBs dWdpbihmdW5jdGlvbihhLGIpe3ZhciBjPS9cUysvZyxkPVN0cmluZyxlPWIu cHJvdG90eXBlO2UuYWRkQ2xhc3M9ZnVuY3Rpb24oYSl7dmFyIGIsZSxmLGcs aD1kKGF8fCIiKS5tYXRjaChjKXx8W10saT10aGlzLm5vZGUsaj1pLmNsYXNz TmFtZS5iYXNlVmFsLGs9ai5tYXRjaChjKXx8W107aWYoaC5sZW5ndGgpe2Zv cihiPTA7Zj1oW2IrK107KWU9ay5pbmRleE9mKGYpLH5lfHxrLnB1c2goZik7 Zz1rLmpvaW4oIiAiKSxqIT1nJiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKX1y ZXR1cm4gdGhpc30sZS5yZW1vdmVDbGFzcz1mdW5jdGlvbihhKXt2YXIgYixl LGYsZyxoPWQoYXx8IiIpLm1hdGNoKGMpfHxbXSxpPXRoaXMubm9kZSxqPWku Y2xhc3NOYW1lLmJhc2VWYWwsaz1qLm1hdGNoKGMpfHxbXTtpZihrLmxlbmd0 aCl7Zm9yKGI9MDtmPWhbYisrXTspZT1rLmluZGV4T2YoZiksfmUmJmsuc3Bs aWNlKGUsMSk7Zz1rLmpvaW4oIiAiKSxqIT1nJiYoaS5jbGFzc05hbWUuYmFz ZVZhbD1nKX1yZXR1cm4gdGhpc30sZS5oYXNDbGFzcz1mdW5jdGlvbihhKXt2 YXIgYj10aGlzLm5vZGUsZD1iLmNsYXNzTmFtZS5iYXNlVmFsLGU9ZC5tYXRj aChjKXx8W107cmV0dXJuISF+ZS5pbmRleE9mKGEpfSxlLnRvZ2dsZUNsYXNz PWZ1bmN0aW9uKGEsYil7aWYobnVsbCE9YilyZXR1cm4gYj90aGlzLmFkZENs YXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk7dmFyIGQsZSxmLGcsaD0oYXx8 IiIpLm1hdGNoKGMpfHxbXSxpPXRoaXMubm9kZSxqPWkuY2xhc3NOYW1lLmJh c2VWYWwsaz1qLm1hdGNoKGMpfHxbXTtmb3IoZD0wO2Y9aFtkKytdOyllPWsu aW5kZXhPZihmKSx+ZT9rLnNwbGljZShlLDEpOmsucHVzaChmKTtyZXR1cm4g Zz1rLmpvaW4oIiAiKSxqIT1nJiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKSx0 aGlzfX0pLGQucGx1Z2luKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1 cm4gYX1mdW5jdGlvbiBjKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4r Yi50b0ZpeGVkKDMpK2F9fXZhciBkPXsiKyI6ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gYStifSwiLSI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1ifSwiLyI6ZnVu Y3Rpb24oYSxiKXtyZXR1cm4gYS9ifSwiKiI6ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gYSpifX0sZT1TdHJpbmcsZj0vW2Etel0rJC9pLGc9L15ccyooWytcLVwv Kl0pXHMqPVxzKihbXGQuZUUrXC1dKylccyooW15cZFxzXSspP1xzKiQvO2Iu b24oInNuYXAudXRpbC5hdHRyIixmdW5jdGlvbihhKXt2YXIgYz1lKGEpLm1h dGNoKGcpO2lmKGMpe3ZhciBoPWIubnQoKSxpPWguc3Vic3RyaW5nKGgubGFz dEluZGV4T2YoIi4iKSsxKSxqPXRoaXMuYXR0cihpKSxrPXt9O2Iuc3RvcCgp O3ZhciBsPWNbM118fCIiLG09ai5tYXRjaChmKSxuPWRbY1sxXV07aWYobSYm bT09bD9hPW4ocGFyc2VGbG9hdChqKSwrY1syXSk6KGo9dGhpcy5hc1BYKGkp LGE9bih0aGlzLmFzUFgoaSksdGhpcy5hc1BYKGksY1syXStsKSkpLGlzTmFO KGopfHxpc05hTihhKSlyZXR1cm47a1tpXT1hLHRoaXMuYXR0cihrKX19KSgt MTApLGIub24oInNuYXAudXRpbC5lcXVhbCIsZnVuY3Rpb24oaCxpKXt2YXIg aj1lKHRoaXMuYXR0cihoKXx8IiIpLGs9ZShpKS5tYXRjaChnKTtpZihrKXti LnN0b3AoKTt2YXIgbD1rWzNdfHwiIixtPWoubWF0Y2goZiksbj1kW2tbMV1d O3JldHVybiBtJiZtPT1sP3tmcm9tOnBhcnNlRmxvYXQoaiksdG86bihwYXJz ZUZsb2F0KGopLCtrWzJdKSxmOmMobSl9OihqPXRoaXMuYXNQWChoKSx7ZnJv bTpqLHRvOm4oaix0aGlzLmFzUFgoaCxrWzJdK2wpKSxmOmF9KX19KSgtMTAp fSksZC5wbHVnaW4oZnVuY3Rpb24oYyxkLGUsZil7dmFyIGc9ZS5wcm90b3R5 cGUsaD1jLmlzO2cucmVjdD1mdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc7 cmV0dXJuIG51bGw9PWYmJihmPWUpLGgoYSwib2JqZWN0IikmJiJbb2JqZWN0 IE9iamVjdF0iPT1hP2c9YTpudWxsIT1hJiYoZz17eDphLHk6Yix3aWR0aDpj LGhlaWdodDpkfSxudWxsIT1lJiYoZy5yeD1lLGcucnk9ZikpLHRoaXMuZWwo InJlY3QiLGcpfSxnLmNpcmNsZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0 dXJuIGgoYSwib2JqZWN0IikmJiJbb2JqZWN0IE9iamVjdF0iPT1hP2Q9YTpu dWxsIT1hJiYoZD17Y3g6YSxjeTpiLHI6Y30pLHRoaXMuZWwoImNpcmNsZSIs ZCl9O3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3RoaXMucGFyZW50 Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX1yZXR1cm4gZnVuY3Rpb24oYixjKXt2 YXIgZD1mLmRvYy5jcmVhdGVFbGVtZW50KCJpbWciKSxlPWYuZG9jLmJvZHk7 ZC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5 ZW07dG9wOi05OTk5ZW0iLGQub25sb2FkPWZ1bmN0aW9uKCl7Yy5jYWxsKGQp LGQub25sb2FkPWQub25lcnJvcj1udWxsLGUucmVtb3ZlQ2hpbGQoZCl9LGQu b25lcnJvcj1hLGUuYXBwZW5kQ2hpbGQoZCksZC5zcmM9Yn19KCk7Zy5pbWFn ZT1mdW5jdGlvbihhLGIsZCxlLGYpe3ZhciBnPXRoaXMuZWwoImltYWdlIik7 aWYoaChhLCJvYmplY3QiKSYmInNyYyJpbiBhKWcuYXR0cihhKTtlbHNlIGlm KG51bGwhPWEpe3ZhciBqPXsieGxpbms6aHJlZiI6YSxwcmVzZXJ2ZUFzcGVj dFJhdGlvOiJub25lIn07bnVsbCE9YiYmbnVsbCE9ZCYmKGoueD1iLGoueT1k KSxudWxsIT1lJiZudWxsIT1mPyhqLndpZHRoPWUsai5oZWlnaHQ9Zik6aShh LGZ1bmN0aW9uKCl7Yy5fLiQoZy5ub2RlLHt3aWR0aDp0aGlzLm9mZnNldFdp ZHRoLGhlaWdodDp0aGlzLm9mZnNldEhlaWdodH0pfSksYy5fLiQoZy5ub2Rl LGopfXJldHVybiBnfSxnLmVsbGlwc2U9ZnVuY3Rpb24oYSxiLGMsZCl7dmFy IGU7cmV0dXJuIGgoYSwib2JqZWN0IikmJiJbb2JqZWN0IE9iamVjdF0iPT1h P2U9YTpudWxsIT1hJiYoZT17Y3g6YSxjeTpiLHJ4OmMscnk6ZH0pLHRoaXMu ZWwoImVsbGlwc2UiLGUpfSxnLnBhdGg9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0 dXJuIGgoYSwib2JqZWN0IikmJiFoKGEsImFycmF5Iik/Yj1hOmEmJihiPXtk OmF9KSx0aGlzLmVsKCJwYXRoIixiKX0sZy5ncm91cD1nLmc9ZnVuY3Rpb24o YSl7dmFyIGI9dGhpcy5lbCgiZyIpO3JldHVybiAxPT1hcmd1bWVudHMubGVu Z3RoJiZhJiYhYS50eXBlP2IuYXR0cihhKTphcmd1bWVudHMubGVuZ3RoJiZi LmFkZChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkp LGJ9LGcuc3ZnPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaSl7dmFyIGo9e307 cmV0dXJuIGgoYSwib2JqZWN0IikmJm51bGw9PWI/aj1hOihudWxsIT1hJiYo ai54PWEpLG51bGwhPWImJihqLnk9YiksbnVsbCE9YyYmKGoud2lkdGg9Yyks bnVsbCE9ZCYmKGouaGVpZ2h0PWQpLG51bGwhPWUmJm51bGwhPWYmJm51bGwh PWcmJm51bGwhPWkmJihqLnZpZXdCb3g9W2UsZixnLGldKSksdGhpcy5lbCgi c3ZnIixqKX0sZy5tYXNrPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWwoIm1h c2siKTtyZXR1cm4gMT09YXJndW1lbnRzLmxlbmd0aCYmYSYmIWEudHlwZT9i LmF0dHIoYSk6YXJndW1lbnRzLmxlbmd0aCYmYi5hZGQoQXJyYXkucHJvdG90 eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSxifSxnLnB0cm49ZnVuY3Rp b24oYSxiLGMsZCxlLGYsZyxpKXtpZihoKGEsIm9iamVjdCIpKXZhciBqPWE7 ZWxzZSBqPXtwYXR0ZXJuVW5pdHM6InVzZXJTcGFjZU9uVXNlIn0sYSYmKGou eD1hKSxiJiYoai55PWIpLG51bGwhPWMmJihqLndpZHRoPWMpLG51bGwhPWQm JihqLmhlaWdodD1kKSxqLnZpZXdCb3g9bnVsbCE9ZSYmbnVsbCE9ZiYmbnVs bCE9ZyYmbnVsbCE9aT9bZSxmLGcsaV06W2F8fDAsYnx8MCxjfHwwLGR8fDBd O3JldHVybiB0aGlzLmVsKCJwYXR0ZXJuIixqKX0sZy51c2U9ZnVuY3Rpb24o YSl7cmV0dXJuIG51bGwhPWE/KGEgaW5zdGFuY2VvZiBkJiYoYS5hdHRyKCJp ZCIpfHxhLmF0dHIoe2lkOmMuXy5pZChhKX0pLGE9YS5hdHRyKCJpZCIpKSwi IyI9PVN0cmluZyhhKS5jaGFyQXQoKSYmKGE9YS5zdWJzdHJpbmcoMSkpLHRo aXMuZWwoInVzZSIseyJ4bGluazpocmVmIjoiIyIrYX0pKTpkLnByb3RvdHlw ZS51c2UuY2FsbCh0aGlzKX0sZy5zeW1ib2w9ZnVuY3Rpb24oYSxiLGMsZCl7 dmFyIGU9e307cmV0dXJuIG51bGwhPWEmJm51bGwhPWImJm51bGwhPWMmJm51 bGwhPWQmJihlLnZpZXdCb3g9W2EsYixjLGRdKSx0aGlzLmVsKCJzeW1ib2wi LGUpfSxnLnRleHQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O3JldHVybiBo KGEsIm9iamVjdCIpP2Q9YTpudWxsIT1hJiYoZD17eDphLHk6Yix0ZXh0OmN8 fCIifSksdGhpcy5lbCgidGV4dCIsZCl9LGcubGluZT1mdW5jdGlvbihhLGIs YyxkKXt2YXIgZT17fTtyZXR1cm4gaChhLCJvYmplY3QiKT9lPWE6bnVsbCE9 YSYmKGU9e3gxOmEseDI6Yyx5MTpiLHkyOmR9KSx0aGlzLmVsKCJsaW5lIixl KX0sZy5wb2x5bGluZT1mdW5jdGlvbihhKXthcmd1bWVudHMubGVuZ3RoPjEm JihhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7 dmFyIGI9e307cmV0dXJuIGgoYSwib2JqZWN0IikmJiFoKGEsImFycmF5Iik/ Yj1hOm51bGwhPWEmJihiPXtwb2ludHM6YX0pLHRoaXMuZWwoInBvbHlsaW5l IixiKX0sZy5wb2x5Z29uPWZ1bmN0aW9uKGEpe2FyZ3VtZW50cy5sZW5ndGg+ MSYmKGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDAp KTt2YXIgYj17fTtyZXR1cm4gaChhLCJvYmplY3QiKSYmIWgoYSwiYXJyYXki KT9iPWE6bnVsbCE9YSYmKGI9e3BvaW50czphfSksdGhpcy5lbCgicG9seWdv biIsYil9LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZCgpe3JldHVybiB0aGlzLnNl bGVjdEFsbCgic3RvcCIpfWZ1bmN0aW9uIGUoYSxiKXt2YXIgZD1rKCJzdG9w IiksZT17b2Zmc2V0OitiKyIlIn07cmV0dXJuIGE9Yy5jb2xvcihhKSxlWyJz dG9wLWNvbG9yIl09YS5oZXgsYS5vcGFjaXR5PDEmJihlWyJzdG9wLW9wYWNp dHkiXT1hLm9wYWNpdHkpLGsoZCxlKSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQo ZCksdGhpc31mdW5jdGlvbiBmKCl7aWYoImxpbmVhckdyYWRpZW50Ij09dGhp cy50eXBlKXt2YXIgYT1rKHRoaXMubm9kZSwieDEiKXx8MCxiPWsodGhpcy5u b2RlLCJ4MiIpfHwxLGQ9ayh0aGlzLm5vZGUsInkxIil8fDAsZT1rKHRoaXMu bm9kZSwieTIiKXx8MDtyZXR1cm4gYy5fLmJveChhLGQsbWF0aC5hYnMoYi1h KSxtYXRoLmFicyhlLWQpKX12YXIgZj10aGlzLm5vZGUuY3h8fC41LGc9dGhp cy5ub2RlLmN5fHwuNSxoPXRoaXMubm9kZS5yfHwwO3JldHVybiBjLl8uYm94 KGYtaCxnLWgsMipoLDIqaCl9ZnVuY3Rpb24gaChhLGMpe2Z1bmN0aW9uIGQo YSxiKXtmb3IodmFyIGM9KGItbCkvKGEtbSksZD1tO2E+ZDtkKyspZ1tkXS5v ZmZzZXQ9KygrbCtjKihkLW0pKS50b0ZpeGVkKDIpO209YSxsPWJ9dmFyIGUs Zj1iKCJzbmFwLnV0aWwuZ3JhZC5wYXJzZSIsbnVsbCxjKS5maXJzdERlZmlu ZWQoKTtpZighZilyZXR1cm4gbnVsbDtmLnBhcmFtcy51bnNoaWZ0KGEpLGU9 ImwiPT1mLnR5cGUudG9Mb3dlckNhc2UoKT9pLmFwcGx5KDAsZi5wYXJhbXMp OmouYXBwbHkoMCxmLnBhcmFtcyksZi50eXBlIT1mLnR5cGUudG9Mb3dlckNh c2UoKSYmayhlLm5vZGUse2dyYWRpZW50VW5pdHM6InVzZXJTcGFjZU9uVXNl In0pO3ZhciBnPWYuc3RvcHMsaD1nLmxlbmd0aCxsPTAsbT0wO2gtLTtmb3Io dmFyIG49MDtoPm47bisrKSJvZmZzZXQiaW4gZ1tuXSYmZChuLGdbbl0ub2Zm c2V0KTtmb3IoZ1toXS5vZmZzZXQ9Z1toXS5vZmZzZXR8fDEwMCxkKGgsZ1to XS5vZmZzZXQpLG49MDtoPj1uO24rKyl7dmFyIG89Z1tuXTtlLmFkZFN0b3Ao by5jb2xvcixvLm9mZnNldCl9cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIsZyxo LGkpe3ZhciBqPWMuXy5tYWtlKCJsaW5lYXJHcmFkaWVudCIsYSk7cmV0dXJu IGouc3RvcHM9ZCxqLmFkZFN0b3A9ZSxqLmdldEJCb3g9ZixudWxsIT1iJiZr KGoubm9kZSx7eDE6Yix5MTpnLHgyOmgseTI6aX0pLGp9ZnVuY3Rpb24gaihh LGIsZyxoLGksail7dmFyIGw9Yy5fLm1ha2UoInJhZGlhbEdyYWRpZW50Iixh KTtyZXR1cm4gbC5zdG9wcz1kLGwuYWRkU3RvcD1lLGwuZ2V0QkJveD1mLG51 bGwhPWImJmsobC5ub2RlLHtjeDpiLGN5OmcscjpofSksbnVsbCE9aSYmbnVs bCE9aiYmayhsLm5vZGUse2Z4OmksZnk6an0pLGx9dmFyIGs9Yy5fLiQ7Zy5n cmFkaWVudD1mdW5jdGlvbihhKXtyZXR1cm4gaCh0aGlzLmRlZnMsYSl9LGcu Z3JhZGllbnRMaW5lYXI9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGkodGhp cy5kZWZzLGEsYixjLGQpfSxnLmdyYWRpZW50UmFkaWFsPWZ1bmN0aW9uKGEs YixjLGQsZSl7cmV0dXJuIGoodGhpcy5kZWZzLGEsYixjLGQsZSl9LGcudG9T dHJpbmc9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMubm9kZS5vd25lckRvY3Vt ZW50LGQ9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZT1iLmNyZWF0ZUVs ZW1lbnQoImRpdiIpLGY9dGhpcy5ub2RlLmNsb25lTm9kZSghMCk7cmV0dXJu IGQuYXBwZW5kQ2hpbGQoZSksZS5hcHBlbmRDaGlsZChmKSxjLl8uJChmLHt4 bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSksYT1lLmlubmVy SFRNTCxkLnJlbW92ZUNoaWxkKGQuZmlyc3RDaGlsZCksYX0sZy50b0RhdGFV Ukw9ZnVuY3Rpb24oKXtyZXR1cm4gYSYmYS5idG9hPyJkYXRhOmltYWdlL3N2 Zyt4bWw7YmFzZTY0LCIrYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25l bnQodGhpcykpKTp2b2lkIDB9LGcuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFy IGEsYj10aGlzLm5vZGUuZmlyc3RDaGlsZDtiOylhPWIubmV4dFNpYmxpbmcs ImRlZnMiIT1iLnRhZ05hbWU/Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIp OmcuY2xlYXIuY2FsbCh7bm9kZTpifSksYj1hfX0oKX0pLGQucGx1Z2luKGZ1 bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXt2YXIgYj1jLnBzPWMucHN8fHt9 O3JldHVybiBiW2FdP2JbYV0uc2xlZXA9MTAwOmJbYV09e3NsZWVwOjEwMH0s c2V0VGltZW91dChmdW5jdGlvbigpe2Zvcih2YXIgYyBpbiBiKWJbS10oYykm JmMhPWEmJihiW2NdLnNsZWVwLS0sIWJbY10uc2xlZXAmJmRlbGV0ZSBiW2Nd KX0pLGJbYV19ZnVuY3Rpb24gZChhLGIsYyxkKXtyZXR1cm4gbnVsbD09YSYm KGE9Yj1jPWQ9MCksbnVsbD09YiYmKGI9YS55LGM9YS53aWR0aCxkPWEuaGVp Z2h0LGE9YS54KSx7eDphLHk6Yix3aWR0aDpjLHc6YyxoZWlnaHQ6ZCxoOmQs eDI6YStjLHkyOmIrZCxjeDphK2MvMixjeTpiK2QvMixyMTpOLm1pbihjLGQp LzIscjI6Ti5tYXgoYyxkKS8yLHIwOk4uc3FydChjKmMrZCpkKS8yLHBhdGg6 dyhhLGIsYyxkKSx2YjpbYSxiLGMsZF0uam9pbigiICIpfX1mdW5jdGlvbiBl KCl7cmV0dXJuIHRoaXMuam9pbigiLCIpLnJlcGxhY2UoTCwiJDEiKX1mdW5j dGlvbiBmKGEpe3ZhciBiPUooYSk7cmV0dXJuIGIudG9TdHJpbmc9ZSxifWZ1 bmN0aW9uIGcoYSxiLGMsZCxlLGYsZyxoLGope3JldHVybiBudWxsPT1qP24o YSxiLGMsZCxlLGYsZyxoKTppKGEsYixjLGQsZSxmLGcsaCxvKGEsYixjLGQs ZSxmLGcsaCxqKSl9ZnVuY3Rpb24gaChjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0 dXJuKygrYSkudG9GaXhlZCgzKX1yZXR1cm4gYS5fLmNhY2hlcihmdW5jdGlv bihhLGYsaCl7YSBpbnN0YW5jZW9mIGImJihhPWEuYXR0cigiZCIpKSxhPUUo YSk7Zm9yKHZhciBqLGssbCxtLG4sbz0iIixwPXt9LHE9MCxyPTAscz1hLmxl bmd0aDtzPnI7cisrKXtpZihsPWFbcl0sIk0iPT1sWzBdKWo9K2xbMV0saz0r bFsyXTtlbHNle2lmKG09ZyhqLGssbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVd LGxbNl0pLHErbT5mKXtpZihkJiYhcC5zdGFydCl7aWYobj1nKGosayxsWzFd LGxbMl0sbFszXSxsWzRdLGxbNV0sbFs2XSxmLXEpLG8rPVsiQyIrZShuLnN0 YXJ0LngpLGUobi5zdGFydC55KSxlKG4ubS54KSxlKG4ubS55KSxlKG4ueCks ZShuLnkpXSxoKXJldHVybiBvO3Auc3RhcnQ9byxvPVsiTSIrZShuLngpLGUo bi55KSsiQyIrZShuLm4ueCksZShuLm4ueSksZShuLmVuZC54KSxlKG4uZW5k LnkpLGUobFs1XSksZShsWzZdKV0uam9pbigpLHErPW0saj0rbFs1XSxrPSts WzZdO2NvbnRpbnVlfWlmKCFjJiYhZClyZXR1cm4gbj1nKGosayxsWzFdLGxb Ml0sbFszXSxsWzRdLGxbNV0sbFs2XSxmLXEpfXErPW0saj0rbFs1XSxrPSts WzZdfW8rPWwuc2hpZnQoKStsfXJldHVybiBwLmVuZD1vLG49Yz9xOmQ/cDpp KGosayxsWzBdLGxbMV0sbFsyXSxsWzNdLGxbNF0sbFs1XSwxKX0sbnVsbCxh Ll8uY2xvbmUpfWZ1bmN0aW9uIGkoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBq PTEtaSxrPVIoaiwzKSxsPVIoaiwyKSxtPWkqaSxuPW0qaSxvPWsqYSszKmwq aSpjKzMqaippKmkqZStuKmcscD1rKmIrMypsKmkqZCszKmoqaSppKmYrbipo LHE9YSsyKmkqKGMtYSkrbSooZS0yKmMrYSkscj1iKzIqaSooZC1iKSttKihm LTIqZCtiKSxzPWMrMippKihlLWMpK20qKGctMiplK2MpLHQ9ZCsyKmkqKGYt ZCkrbSooaC0yKmYrZCksdT1qKmEraSpjLHY9aipiK2kqZCx3PWoqZStpKmcs eD1qKmYraSpoLHk9OTAtMTgwKk4uYXRhbjIocS1zLHItdCkvTztyZXR1cm57 eDpvLHk6cCxtOnt4OnEseTpyfSxuOnt4OnMseTp0fSxzdGFydDp7eDp1LHk6 dn0sZW5kOnt4OncseTp4fSxhbHBoYTp5fX1mdW5jdGlvbiBqKGIsYyxlLGYs ZyxoLGksail7YS5pcyhiLCJhcnJheSIpfHwoYj1bYixjLGUsZixnLGgsaSxq XSk7dmFyIGs9RC5hcHBseShudWxsLGIpO3JldHVybiBkKGsubWluLngsay5t aW4ueSxrLm1heC54LWsubWluLngsay5tYXgueS1rLm1pbi55KX1mdW5jdGlv biBrKGEsYixjKXtyZXR1cm4gYj49YS54JiZiPD1hLngrYS53aWR0aCYmYz49 YS55JiZjPD1hLnkrYS5oZWlnaHR9ZnVuY3Rpb24gbChhLGIpe3JldHVybiBh PWQoYSksYj1kKGIpLGsoYixhLngsYS55KXx8ayhiLGEueDIsYS55KXx8ayhi LGEueCxhLnkyKXx8ayhiLGEueDIsYS55Mil8fGsoYSxiLngsYi55KXx8ayhh LGIueDIsYi55KXx8ayhhLGIueCxiLnkyKXx8ayhhLGIueDIsYi55Mil8fChh Lng8Yi54MiYmYS54PmIueHx8Yi54PGEueDImJmIueD5hLngpJiYoYS55PGIu eTImJmEueT5iLnl8fGIueTxhLnkyJiZiLnk+YS55KX1mdW5jdGlvbiBtKGEs YixjLGQsZSl7dmFyIGY9LTMqYis5KmMtOSpkKzMqZSxnPWEqZis2KmItMTIq Yys2KmQ7cmV0dXJuIGEqZy0zKmIrMypjfWZ1bmN0aW9uIG4oYSxiLGMsZCxl LGYsZyxoLGkpe251bGw9PWkmJihpPTEpLGk9aT4xPzE6MD5pPzA6aTtmb3Io dmFyIGo9aS8yLGs9MTIsbD1bLS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwt LjU4NzMsLjU4NzMsLS43Njk5LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYs Ljk4MTZdLG49Wy4yNDkxLC4yNDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMy LC4xNjAxLC4xNjAxLC4xMDY5LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTAscD0w O2s+cDtwKyspe3ZhciBxPWoqbFtwXStqLHI9bShxLGEsYyxlLGcpLHM9bShx LGIsZCxmLGgpLHQ9cipyK3MqcztvKz1uW3BdKk4uc3FydCh0KX1yZXR1cm4g aipvfWZ1bmN0aW9uIG8oYSxiLGMsZCxlLGYsZyxoLGkpe2lmKCEoMD5pfHxu KGEsYixjLGQsZSxmLGcsaCk8aSkpe3ZhciBqLGs9MSxsPWsvMixtPWstbCxv PS4wMTtmb3Ioaj1uKGEsYixjLGQsZSxmLGcsaCxtKTtTKGotaSk+bzspbC89 MixtKz0oaT5qPzE6LTEpKmwsaj1uKGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1 cm4gbX19ZnVuY3Rpb24gcChhLGIsYyxkLGUsZixnLGgpe2lmKCEoUShhLGMp PFAoZSxnKXx8UChhLGMpPlEoZSxnKXx8UShiLGQpPFAoZixoKXx8UChiLGQp PlEoZixoKSkpe3ZhciBpPShhKmQtYipjKSooZS1nKS0oYS1jKSooZSpoLWYq Zyksaj0oYSpkLWIqYykqKGYtaCktKGItZCkqKGUqaC1mKmcpLGs9KGEtYykq KGYtaCktKGItZCkqKGUtZyk7aWYoayl7dmFyIGw9aS9rLG09ai9rLG49K2wu dG9GaXhlZCgyKSxvPSttLnRvRml4ZWQoMik7aWYoIShuPCtQKGEsYykudG9G aXhlZCgyKXx8bj4rUShhLGMpLnRvRml4ZWQoMil8fG48K1AoZSxnKS50b0Zp eGVkKDIpfHxuPitRKGUsZykudG9GaXhlZCgyKXx8bzwrUChiLGQpLnRvRml4 ZWQoMil8fG8+K1EoYixkKS50b0ZpeGVkKDIpfHxvPCtQKGYsaCkudG9GaXhl ZCgyKXx8bz4rUShmLGgpLnRvRml4ZWQoMikpKXJldHVybnt4OmwseTptfX19 fWZ1bmN0aW9uIHEoYSxiLGMpe3ZhciBkPWooYSksZT1qKGIpO2lmKCFsKGQs ZSkpcmV0dXJuIGM/MDpbXTtmb3IodmFyIGY9bi5hcHBseSgwLGEpLGc9bi5h cHBseSgwLGIpLGg9fn4oZi84KSxrPX5+KGcvOCksbT1bXSxvPVtdLHE9e30s cj1jPzA6W10scz0wO2grMT5zO3MrKyl7dmFyIHQ9aS5hcHBseSgwLGEuY29u Y2F0KHMvaCkpO20ucHVzaCh7eDp0LngseTp0LnksdDpzL2h9KX1mb3Iocz0w O2srMT5zO3MrKyl0PWkuYXBwbHkoMCxiLmNvbmNhdChzL2spKSxvLnB1c2go e3g6dC54LHk6dC55LHQ6cy9rfSk7Zm9yKHM9MDtoPnM7cysrKWZvcih2YXIg dT0wO2s+dTt1Kyspe3ZhciB2PW1bc10sdz1tW3MrMV0seD1vW3VdLHk9b1t1 KzFdLHo9Uyh3Lngtdi54KTwuMDAxPyJ5IjoieCIsQT1TKHkueC14LngpPC4w MDE/InkiOiJ4IixCPXAodi54LHYueSx3Lngsdy55LHgueCx4LnkseS54LHku eSk7aWYoQil7aWYocVtCLngudG9GaXhlZCg0KV09PUIueS50b0ZpeGVkKDQp KWNvbnRpbnVlO3FbQi54LnRvRml4ZWQoNCldPUIueS50b0ZpeGVkKDQpO3Zh ciBDPXYudCtTKChCW3pdLXZbel0pLyh3W3pdLXZbel0pKSoody50LXYudCks RD14LnQrUygoQltBXS14W0FdKS8oeVtBXS14W0FdKSkqKHkudC14LnQpO0M+ PTAmJjE+PUMmJkQ+PTAmJjE+PUQmJihjP3IrKzpyLnB1c2goe3g6Qi54LHk6 Qi55LHQxOkMsdDI6RH0pKX19cmV0dXJuIHJ9ZnVuY3Rpb24gcihhLGIpe3Jl dHVybiB0KGEsYil9ZnVuY3Rpb24gcyhhLGIpe3JldHVybiB0KGEsYiwxKX1m dW5jdGlvbiB0KGEsYixjKXthPUUoYSksYj1FKGIpO2Zvcih2YXIgZCxlLGYs ZyxoLGksaixrLGwsbSxuPWM/MDpbXSxvPTAscD1hLmxlbmd0aDtwPm87bysr KXt2YXIgcj1hW29dO2lmKCJNIj09clswXSlkPWg9clsxXSxlPWk9clsyXTtl bHNleyJDIj09clswXT8obD1bZCxlXS5jb25jYXQoci5zbGljZSgxKSksZD1s WzZdLGU9bFs3XSk6KGw9W2QsZSxkLGUsaCxpLGgsaV0sZD1oLGU9aSk7Zm9y KHZhciBzPTAsdD1iLmxlbmd0aDt0PnM7cysrKXt2YXIgdT1iW3NdO2lmKCJN Ij09dVswXSlmPWo9dVsxXSxnPWs9dVsyXTtlbHNleyJDIj09dVswXT8obT1b ZixnXS5jb25jYXQodS5zbGljZSgxKSksZj1tWzZdLGc9bVs3XSk6KG09W2Ys ZyxmLGcsaixrLGosa10sZj1qLGc9ayk7dmFyIHY9cShsLG0sYyk7aWYoYylu Kz12O2Vsc2V7Zm9yKHZhciB3PTAseD12Lmxlbmd0aDt4Pnc7dysrKXZbd10u c2VnbWVudDE9byx2W3ddLnNlZ21lbnQyPXMsdlt3XS5iZXoxPWwsdlt3XS5i ZXoyPW07bj1uLmNvbmNhdCh2KX19fX19cmV0dXJuIG59ZnVuY3Rpb24gdShh LGIsYyl7dmFyIGQ9dihhKTtyZXR1cm4gayhkLGIsYykmJnQoYSxbWyJNIixi LGNdLFsiSCIsZC54MisxMF1dLDEpJTI9PTF9ZnVuY3Rpb24gdihhKXt2YXIg Yj1jKGEpO2lmKGIuYmJveClyZXR1cm4gSihiLmJib3gpO2lmKCFhKXJldHVy biBkKCk7YT1FKGEpO2Zvcih2YXIgZSxmPTAsZz0wLGg9W10saT1bXSxqPTAs az1hLmxlbmd0aDtrPmo7aisrKWlmKGU9YVtqXSwiTSI9PWVbMF0pZj1lWzFd LGc9ZVsyXSxoLnB1c2goZiksaS5wdXNoKGcpO2Vsc2V7dmFyIGw9RChmLGcs ZVsxXSxlWzJdLGVbM10sZVs0XSxlWzVdLGVbNl0pO2g9aC5jb25jYXQobC5t aW4ueCxsLm1heC54KSxpPWkuY29uY2F0KGwubWluLnksbC5tYXgueSksZj1l WzVdLGc9ZVs2XX12YXIgbT1QLmFwcGx5KDAsaCksbj1QLmFwcGx5KDAsaSks bz1RLmFwcGx5KDAsaCkscD1RLmFwcGx5KDAsaSkscT1kKG0sbixvLW0scC1u KTtyZXR1cm4gYi5iYm94PUoocSkscX1mdW5jdGlvbiB3KGEsYixjLGQsZil7 aWYoZilyZXR1cm5bWyJNIiwrYSsgK2YsYl0sWyJsIixjLTIqZiwwXSxbImEi LGYsZiwwLDAsMSxmLGZdLFsibCIsMCxkLTIqZl0sWyJhIixmLGYsMCwwLDEs LWYsZl0sWyJsIiwyKmYtYywwXSxbImEiLGYsZiwwLDAsMSwtZiwtZl0sWyJs IiwwLDIqZi1kXSxbImEiLGYsZiwwLDAsMSxmLC1mXSxbInoiXV07dmFyIGc9 W1siTSIsYSxiXSxbImwiLGMsMF0sWyJsIiwwLGRdLFsibCIsLWMsMF0sWyJ6 Il1dO3JldHVybiBnLnRvU3RyaW5nPWUsZ31mdW5jdGlvbiB4KGEsYixjLGQs Zil7aWYobnVsbD09ZiYmbnVsbD09ZCYmKGQ9YyksYT0rYSxiPStiLGM9K2Ms ZD0rZCxudWxsIT1mKXZhciBnPU1hdGguUEkvMTgwLGg9YStjKk1hdGguY29z KC1kKmcpLGk9YStjKk1hdGguY29zKC1mKmcpLGo9YitjKk1hdGguc2luKC1k KmcpLGs9YitjKk1hdGguc2luKC1mKmcpLGw9W1siTSIsaCxqXSxbIkEiLGMs YywwLCsoZi1kPjE4MCksMCxpLGtdXTtlbHNlIGw9W1siTSIsYSxiXSxbIm0i LDAsLWRdLFsiYSIsYyxkLDAsMSwxLDAsMipkXSxbImEiLGMsZCwwLDEsMSww LC0yKmRdLFsieiJdXTtyZXR1cm4gbC50b1N0cmluZz1lLGx9ZnVuY3Rpb24g eShiKXt2YXIgZD1jKGIpLGc9U3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2Fz ZTtpZihkLnJlbClyZXR1cm4gZihkLnJlbCk7YS5pcyhiLCJhcnJheSIpJiZh LmlzKGImJmJbMF0sImFycmF5Iil8fChiPWEucGFyc2VQYXRoU3RyaW5nKGIp KTt2YXIgaD1bXSxpPTAsaj0wLGs9MCxsPTAsbT0wOyJNIj09YlswXVswXSYm KGk9YlswXVsxXSxqPWJbMF1bMl0saz1pLGw9aixtKyssaC5wdXNoKFsiTSIs aSxqXSkpO2Zvcih2YXIgbj1tLG89Yi5sZW5ndGg7bz5uO24rKyl7dmFyIHA9 aFtuXT1bXSxxPWJbbl07aWYocVswXSE9Zy5jYWxsKHFbMF0pKXN3aXRjaChw WzBdPWcuY2FsbChxWzBdKSxwWzBdKXtjYXNlImEiOnBbMV09cVsxXSxwWzJd PXFbMl0scFszXT1xWzNdLHBbNF09cVs0XSxwWzVdPXFbNV0scFs2XT0rKHFb Nl0taSkudG9GaXhlZCgzKSxwWzddPSsocVs3XS1qKS50b0ZpeGVkKDMpO2Jy ZWFrO2Nhc2UidiI6cFsxXT0rKHFbMV0taikudG9GaXhlZCgzKTticmVhaztj YXNlIm0iOms9cVsxXSxsPXFbMl07ZGVmYXVsdDpmb3IodmFyIHI9MSxzPXEu bGVuZ3RoO3M+cjtyKyspcFtyXT0rKHFbcl0tKHIlMj9pOmopKS50b0ZpeGVk KDMpfWVsc2V7cD1oW25dPVtdLCJtIj09cVswXSYmKGs9cVsxXStpLGw9cVsy XStqKTtmb3IodmFyIHQ9MCx1PXEubGVuZ3RoO3U+dDt0KyspaFtuXVt0XT1x W3RdfXZhciB2PWhbbl0ubGVuZ3RoO3N3aXRjaChoW25dWzBdKXtjYXNlInoi Omk9ayxqPWw7YnJlYWs7Y2FzZSJoIjppKz0raFtuXVt2LTFdO2JyZWFrO2Nh c2UidiI6ais9K2hbbl1bdi0xXTticmVhaztkZWZhdWx0OmkrPStoW25dW3Yt Ml0sais9K2hbbl1bdi0xXX19cmV0dXJuIGgudG9TdHJpbmc9ZSxkLnJlbD1m KGgpLGh9ZnVuY3Rpb24geihiKXt2YXIgZD1jKGIpO2lmKGQuYWJzKXJldHVy biBmKGQuYWJzKTtpZihJKGIsImFycmF5IikmJkkoYiYmYlswXSwiYXJyYXki KXx8KGI9YS5wYXJzZVBhdGhTdHJpbmcoYikpLCFifHwhYi5sZW5ndGgpcmV0 dXJuW1siTSIsMCwwXV07dmFyIGcsaD1bXSxpPTAsaj0wLGs9MCxsPTAsbT0w OyJNIj09YlswXVswXSYmKGk9K2JbMF1bMV0saj0rYlswXVsyXSxrPWksbD1q LG0rKyxoWzBdPVsiTSIsaSxqXSk7Zm9yKHZhciBuLG8scD0zPT1iLmxlbmd0 aCYmIk0iPT1iWzBdWzBdJiYiUiI9PWJbMV1bMF0udG9VcHBlckNhc2UoKSYm IloiPT1iWzJdWzBdLnRvVXBwZXJDYXNlKCkscT1tLHI9Yi5sZW5ndGg7cj5x O3ErKyl7aWYoaC5wdXNoKG49W10pLG89YltxXSxnPW9bMF0sZyE9Zy50b1Vw cGVyQ2FzZSgpKXN3aXRjaChuWzBdPWcudG9VcHBlckNhc2UoKSxuWzBdKXtj YXNlIkEiOm5bMV09b1sxXSxuWzJdPW9bMl0sblszXT1vWzNdLG5bNF09b1s0 XSxuWzVdPW9bNV0sbls2XT0rb1s2XStpLG5bN109K29bN10rajticmVhaztj YXNlIlYiOm5bMV09K29bMV0rajticmVhaztjYXNlIkgiOm5bMV09K29bMV0r aTticmVhaztjYXNlIlIiOmZvcih2YXIgcz1baSxqXS5jb25jYXQoby5zbGlj ZSgxKSksdD0yLHU9cy5sZW5ndGg7dT50O3QrKylzW3RdPStzW3RdK2ksc1sr K3RdPStzW3RdK2o7aC5wb3AoKSxoPWguY29uY2F0KEcocyxwKSk7YnJlYWs7 Y2FzZSJPIjpoLnBvcCgpLHM9eChpLGosb1sxXSxvWzJdKSxzLnB1c2goc1sw XSksaD1oLmNvbmNhdChzKTticmVhaztjYXNlIlUiOmgucG9wKCksaD1oLmNv bmNhdCh4KGksaixvWzFdLG9bMl0sb1szXSkpLG49WyJVIl0uY29uY2F0KGhb aC5sZW5ndGgtMV0uc2xpY2UoLTIpKTticmVhaztjYXNlIk0iOms9K29bMV0r aSxsPStvWzJdK2o7ZGVmYXVsdDpmb3IodD0xLHU9by5sZW5ndGg7dT50O3Qr KyluW3RdPStvW3RdKyh0JTI/aTpqKX1lbHNlIGlmKCJSIj09ZylzPVtpLGpd LmNvbmNhdChvLnNsaWNlKDEpKSxoLnBvcCgpLGg9aC5jb25jYXQoRyhzLHAp KSxuPVsiUiJdLmNvbmNhdChvLnNsaWNlKC0yKSk7ZWxzZSBpZigiTyI9PWcp aC5wb3AoKSxzPXgoaSxqLG9bMV0sb1syXSkscy5wdXNoKHNbMF0pLGg9aC5j b25jYXQocyk7ZWxzZSBpZigiVSI9PWcpaC5wb3AoKSxoPWguY29uY2F0KHgo aSxqLG9bMV0sb1syXSxvWzNdKSksbj1bIlUiXS5jb25jYXQoaFtoLmxlbmd0 aC0xXS5zbGljZSgtMikpO2Vsc2UgZm9yKHZhciB2PTAsdz1vLmxlbmd0aDt3 PnY7disrKW5bdl09b1t2XTtpZihnPWcudG9VcHBlckNhc2UoKSwiTyIhPWcp c3dpdGNoKG5bMF0pe2Nhc2UiWiI6aT0rayxqPStsO2JyZWFrO2Nhc2UiSCI6 aT1uWzFdO2JyZWFrO2Nhc2UiViI6aj1uWzFdO2JyZWFrO2Nhc2UiTSI6az1u W24ubGVuZ3RoLTJdLGw9bltuLmxlbmd0aC0xXTtkZWZhdWx0Omk9bltuLmxl bmd0aC0yXSxqPW5bbi5sZW5ndGgtMV19fXJldHVybiBoLnRvU3RyaW5nPWUs ZC5hYnM9ZihoKSxofWZ1bmN0aW9uIEEoYSxiLGMsZCl7cmV0dXJuW2EsYixj LGQsYyxkXX1mdW5jdGlvbiBCKGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0y LzM7cmV0dXJuW2cqYStoKmMsZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxm XX1mdW5jdGlvbiBDKGIsYyxkLGUsZixnLGgsaSxqLGspe3ZhciBsLG09MTIw Kk8vMTgwLG49Ty8xODAqKCtmfHwwKSxvPVtdLHA9YS5fLmNhY2hlcihmdW5j dGlvbihhLGIsYyl7dmFyIGQ9YSpOLmNvcyhjKS1iKk4uc2luKGMpLGU9YSpO LnNpbihjKStiKk4uY29zKGMpO3JldHVybnt4OmQseTplfX0pO2lmKGspeT1r WzBdLHo9a1sxXSx3PWtbMl0seD1rWzNdO2Vsc2V7bD1wKGIsYywtbiksYj1s LngsYz1sLnksbD1wKGksaiwtbiksaT1sLngsaj1sLnk7dmFyIHE9KE4uY29z KE8vMTgwKmYpLE4uc2luKE8vMTgwKmYpLChiLWkpLzIpLHI9KGMtaikvMixz PXEqcS8oZCpkKStyKnIvKGUqZSk7cz4xJiYocz1OLnNxcnQocyksZD1zKmQs ZT1zKmUpO3ZhciB0PWQqZCx1PWUqZSx2PShnPT1oPy0xOjEpKk4uc3FydChT KCh0KnUtdCpyKnItdSpxKnEpLyh0KnIqcit1KnEqcSkpKSx3PXYqZCpyL2Ur KGIraSkvMix4PXYqLWUqcS9kKyhjK2opLzIseT1OLmFzaW4oKChjLXgpL2Up LnRvRml4ZWQoOSkpLHo9Ti5hc2luKCgoai14KS9lKS50b0ZpeGVkKDkpKTt5 PXc+Yj9PLXk6eSx6PXc+aT9PLXo6eiwwPnkmJih5PTIqTyt5KSwwPnomJih6 PTIqTyt6KSxoJiZ5PnomJih5LT0yKk8pLCFoJiZ6PnkmJih6LT0yKk8pfXZh ciBBPXoteTtpZihTKEEpPm0pe3ZhciBCPXosRD1pLEU9ajt6PXkrbSooaCYm ej55PzE6LTEpLGk9dytkKk4uY29zKHopLGo9eCtlKk4uc2luKHopLG89Qyhp LGosZCxlLGYsMCxoLEQsRSxbeixCLHcseF0pfUE9ei15O3ZhciBGPU4uY29z KHkpLEc9Ti5zaW4oeSksSD1OLmNvcyh6KSxJPU4uc2luKHopLEo9Ti50YW4o QS80KSxLPTQvMypkKkosTD00LzMqZSpKLE09W2IsY10sUD1bYitLKkcsYy1M KkZdLFE9W2krSypJLGotTCpIXSxSPVtpLGpdO2lmKFBbMF09MipNWzBdLVBb MF0sUFsxXT0yKk1bMV0tUFsxXSxrKXJldHVybltQLFEsUl0uY29uY2F0KG8p O289W1AsUSxSXS5jb25jYXQobykuam9pbigpLnNwbGl0KCIsIik7Zm9yKHZh ciBUPVtdLFU9MCxWPW8ubGVuZ3RoO1Y+VTtVKyspVFtVXT1VJTI/cChvW1Ut MV0sb1tVXSxuKS55OnAob1tVXSxvW1UrMV0sbikueDtyZXR1cm4gVH1mdW5j dGlvbiBEKGEsYixjLGQsZSxmLGcsaCl7Zm9yKHZhciBpLGosayxsLG0sbixv LHAscT1bXSxyPVtbXSxbXV0scz0wOzI+czsrK3MpaWYoMD09cz8oaj02KmEt MTIqYys2KmUsaT0tMyphKzkqYy05KmUrMypnLGs9MypjLTMqYSk6KGo9Nipi LTEyKmQrNipmLGk9LTMqYis5KmQtOSpmKzMqaCxrPTMqZC0zKmIpLFMoaSk8 MWUtMTIpe2lmKFMoaik8MWUtMTIpY29udGludWU7bD0tay9qLGw+MCYmMT5s JiZxLnB1c2gobCl9ZWxzZSBvPWoqai00KmsqaSxwPU4uc3FydChvKSwwPm98 fChtPSgtaitwKS8oMippKSxtPjAmJjE+bSYmcS5wdXNoKG0pLG49KC1qLXAp LygyKmkpLG4+MCYmMT5uJiZxLnB1c2gobikpO2Zvcih2YXIgdCx1PXEubGVu Z3RoLHY9dTt1LS07KWw9cVt1XSx0PTEtbCxyWzBdW3VdPXQqdCp0KmErMyp0 KnQqbCpjKzMqdCpsKmwqZStsKmwqbCpnLHJbMV1bdV09dCp0KnQqYiszKnQq dCpsKmQrMyp0KmwqbCpmK2wqbCpsKmg7cmV0dXJuIHJbMF1bdl09YSxyWzFd W3ZdPWIsclswXVt2KzFdPWcsclsxXVt2KzFdPWgsclswXS5sZW5ndGg9clsx XS5sZW5ndGg9disyLHttaW46e3g6UC5hcHBseSgwLHJbMF0pLHk6UC5hcHBs eSgwLHJbMV0pfSxtYXg6e3g6US5hcHBseSgwLHJbMF0pLHk6US5hcHBseSgw LHJbMV0pfX19ZnVuY3Rpb24gRShhLGIpe3ZhciBkPSFiJiZjKGEpO2lmKCFi JiZkLmN1cnZlKXJldHVybiBmKGQuY3VydmUpO2Zvcih2YXIgZT16KGEpLGc9 YiYmeihiKSxoPXt4OjAseTowLGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGws cXk6bnVsbH0saT17eDowLHk6MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxs LHF5Om51bGx9LGo9KGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKCFhKXJl dHVyblsiQyIsYi54LGIueSxiLngsYi55LGIueCxiLnldO3N3aXRjaCghKGFb MF1pbntUOjEsUToxfSkmJihiLnF4PWIucXk9bnVsbCksYVswXSl7Y2FzZSJN IjpiLlg9YVsxXSxiLlk9YVsyXTticmVhaztjYXNlIkEiOmE9WyJDIl0uY29u Y2F0KEMuYXBwbHkoMCxbYi54LGIueV0uY29uY2F0KGEuc2xpY2UoMSkpKSk7 YnJlYWs7Y2FzZSJTIjoiQyI9PWN8fCJTIj09Yz8oZD0yKmIueC1iLmJ4LGU9 MipiLnktYi5ieSk6KGQ9Yi54LGU9Yi55KSxhPVsiQyIsZCxlXS5jb25jYXQo YS5zbGljZSgxKSk7YnJlYWs7Y2FzZSJUIjoiUSI9PWN8fCJUIj09Yz8oYi5x eD0yKmIueC1iLnF4LGIucXk9MipiLnktYi5xeSk6KGIucXg9Yi54LGIucXk9 Yi55KSxhPVsiQyJdLmNvbmNhdChCKGIueCxiLnksYi5xeCxiLnF5LGFbMV0s YVsyXSkpO2JyZWFrO2Nhc2UiUSI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVsi QyJdLmNvbmNhdChCKGIueCxiLnksYVsxXSxhWzJdLGFbM10sYVs0XSkpO2Jy ZWFrO2Nhc2UiTCI6YT1bIkMiXS5jb25jYXQoQShiLngsYi55LGFbMV0sYVsy XSkpO2JyZWFrO2Nhc2UiSCI6YT1bIkMiXS5jb25jYXQoQShiLngsYi55LGFb MV0sYi55KSk7YnJlYWs7Y2FzZSJWIjphPVsiQyJdLmNvbmNhdChBKGIueCxi LnksYi54LGFbMV0pKTticmVhaztjYXNlIloiOmE9WyJDIl0uY29uY2F0KEEo Yi54LGIueSxiLlgsYi5ZKSl9cmV0dXJuIGF9KSxrPWZ1bmN0aW9uKGEsYil7 aWYoYVtiXS5sZW5ndGg+Nyl7YVtiXS5zaGlmdCgpO2Zvcih2YXIgYz1hW2Jd O2MubGVuZ3RoOyltW2JdPSJBIixnJiYobltiXT0iQSIpLGEuc3BsaWNlKGIr KywwLFsiQyJdLmNvbmNhdChjLnNwbGljZSgwLDYpKSk7YS5zcGxpY2UoYiwx KSxyPVEoZS5sZW5ndGgsZyYmZy5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihh LGIsYyxkLGYpe2EmJmImJiJNIj09YVtmXVswXSYmIk0iIT1iW2ZdWzBdJiYo Yi5zcGxpY2UoZiwwLFsiTSIsZC54LGQueV0pLGMuYng9MCxjLmJ5PTAsYy54 PWFbZl1bMV0sYy55PWFbZl1bMl0scj1RKGUubGVuZ3RoLGcmJmcubGVuZ3Ro fHwwKSl9LG09W10sbj1bXSxvPSIiLHA9IiIscT0wLHI9UShlLmxlbmd0aCxn JiZnLmxlbmd0aHx8MCk7cj5xO3ErKyl7ZVtxXSYmKG89ZVtxXVswXSksIkMi IT1vJiYobVtxXT1vLHEmJihwPW1bcS0xXSkpLGVbcV09aihlW3FdLGgscCks IkEiIT1tW3FdJiYiQyI9PW8mJihtW3FdPSJDIiksayhlLHEpLGcmJihnW3Fd JiYobz1nW3FdWzBdKSwiQyIhPW8mJihuW3FdPW8scSYmKHA9bltxLTFdKSks Z1txXT1qKGdbcV0saSxwKSwiQSIhPW5bcV0mJiJDIj09byYmKG5bcV09IkMi KSxrKGcscSkpLGwoZSxnLGgsaSxxKSxsKGcsZSxpLGgscSk7dmFyIHM9ZVtx XSx0PWcmJmdbcV0sdT1zLmxlbmd0aCx2PWcmJnQubGVuZ3RoO2gueD1zW3Ut Ml0saC55PXNbdS0xXSxoLmJ4PU0oc1t1LTRdKXx8aC54LGguYnk9TShzW3Ut M10pfHxoLnksaS5ieD1nJiYoTSh0W3YtNF0pfHxpLngpLGkuYnk9ZyYmKE0o dFt2LTNdKXx8aS55KSxpLng9ZyYmdFt2LTJdLGkueT1nJiZ0W3YtMV19cmV0 dXJuIGd8fChkLmN1cnZlPWYoZSkpLGc/W2UsZ106ZX1mdW5jdGlvbiBGKGEs Yil7aWYoIWIpcmV0dXJuIGE7dmFyIGMsZCxlLGYsZyxoLGk7Zm9yKGE9RShh KSxlPTAsZz1hLmxlbmd0aDtnPmU7ZSsrKWZvcihpPWFbZV0sZj0xLGg9aS5s ZW5ndGg7aD5mO2YrPTIpYz1iLngoaVtmXSxpW2YrMV0pLGQ9Yi55KGlbZl0s aVtmKzFdKSxpW2ZdPWMsaVtmKzFdPWQ7cmV0dXJuIGF9ZnVuY3Rpb24gRyhh LGIpe2Zvcih2YXIgYz1bXSxkPTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0y KXt2YXIgZj1be3g6K2FbZC0yXSx5OithW2QtMV19LHt4OithW2RdLHk6K2Fb ZCsxXX0se3g6K2FbZCsyXSx5OithW2QrM119LHt4OithW2QrNF0seTorYVtk KzVdfV07Yj9kP2UtND09ZD9mWzNdPXt4OithWzBdLHk6K2FbMV19OmUtMj09 ZCYmKGZbMl09e3g6K2FbMF0seTorYVsxXX0sZlszXT17eDorYVsyXSx5Oith WzNdfSk6ZlswXT17eDorYVtlLTJdLHk6K2FbZS0xXX06ZS00PT1kP2ZbM109 ZlsyXTpkfHwoZlswXT17eDorYVtkXSx5OithW2QrMV19KSxjLnB1c2goWyJD IiwoLWZbMF0ueCs2KmZbMV0ueCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFd LnkrZlsyXS55KS82LChmWzFdLngrNipmWzJdLngtZlszXS54KS82LChmWzFd LnkrNipmWzJdLnktZlszXS55KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4g Y312YXIgSD1iLnByb3RvdHlwZSxJPWEuaXMsSj1hLl8uY2xvbmUsSz0iaGFz T3duUHJvcGVydHkiLEw9Lyw/KFthLXpdKSw/L2dpLE09cGFyc2VGbG9hdCxO PU1hdGgsTz1OLlBJLFA9Ti5taW4sUT1OLm1heCxSPU4ucG93LFM9Ti5hYnMs VD1oKDEpLFU9aCgpLFY9aCgwLDEpLFc9YS5fdW5pdDJweCxYPXtwYXRoOmZ1 bmN0aW9uKGEpe3JldHVybiBhLmF0dHIoInBhdGgiKX0sY2lyY2xlOmZ1bmN0 aW9uKGEpe3ZhciBiPVcoYSk7cmV0dXJuIHgoYi5jeCxiLmN5LGIucil9LGVs bGlwc2U6ZnVuY3Rpb24oYSl7dmFyIGI9VyhhKTtyZXR1cm4geChiLmN4fHww LGIuY3l8fDAsYi5yeCxiLnJ5KX0scmVjdDpmdW5jdGlvbihhKXt2YXIgYj1X KGEpO3JldHVybiB3KGIueHx8MCxiLnl8fDAsYi53aWR0aCxiLmhlaWdodCxi LnJ4LGIucnkpfSxpbWFnZTpmdW5jdGlvbihhKXt2YXIgYj1XKGEpO3JldHVy biB3KGIueHx8MCxiLnl8fDAsYi53aWR0aCxiLmhlaWdodCl9LGxpbmU6ZnVu Y3Rpb24oYSl7cmV0dXJuIk0iK1thLmF0dHIoIngxIil8fDAsYS5hdHRyKCJ5 MSIpfHwwLGEuYXR0cigieDIiKSxhLmF0dHIoInkyIildfSxwb2x5bGluZTpm dW5jdGlvbihhKXtyZXR1cm4iTSIrYS5hdHRyKCJwb2ludHMiKX0scG9seWdv bjpmdW5jdGlvbihhKXtyZXR1cm4iTSIrYS5hdHRyKCJwb2ludHMiKSsieiJ9 LGRlZmx0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZS5nZXRCQm94KCk7cmV0 dXJuIHcoYi54LGIueSxiLndpZHRoLGIuaGVpZ2h0KX19O2EucGF0aD1jLGEu cGF0aC5nZXRUb3RhbExlbmd0aD1ULGEucGF0aC5nZXRQb2ludEF0TGVuZ3Ro PVUsYS5wYXRoLmdldFN1YnBhdGg9ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMu Z2V0VG90YWxMZW5ndGgoYSktYzwxZS02KXJldHVybiBWKGEsYikuZW5kO3Zh ciBkPVYoYSxjLDEpO3JldHVybiBiP1YoZCxiKS5lbmQ6ZH0sSC5nZXRUb3Rh bExlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuZ2V0VG90YWxM ZW5ndGg/dGhpcy5ub2RlLmdldFRvdGFsTGVuZ3RoKCk6dm9pZCAwfSxILmdl dFBvaW50QXRMZW5ndGg9ZnVuY3Rpb24oYSl7cmV0dXJuIFUodGhpcy5hdHRy KCJkIiksYSl9LEguZ2V0U3VicGF0aD1mdW5jdGlvbihiLGMpe3JldHVybiBh LnBhdGguZ2V0U3VicGF0aCh0aGlzLmF0dHIoImQiKSxiLGMpfSxhLl8uYm94 PWQsYS5wYXRoLmZpbmREb3RzQXRTZWdtZW50PWksYS5wYXRoLmJlemllckJC b3g9aixhLnBhdGguaXNQb2ludEluc2lkZUJCb3g9ayxhLmNsb3Nlc3Q9ZnVu Y3Rpb24oYixjLGUsZil7Zm9yKHZhciBnPTEwMCxoPWQoYi1nLzIsYy1nLzIs ZyxnKSxpPVtdLGo9ZVswXS5oYXNPd25Qcm9wZXJ0eSgieCIpP2Z1bmN0aW9u KGEpe3JldHVybnt4OmVbYV0ueCx5OmVbYV0ueX19OmZ1bmN0aW9uKGEpe3Jl dHVybnt4OmVbYV0seTpmW2FdfX0sbD0wOzFlNj49ZyYmIWw7KXtmb3IodmFy IG09MCxuPWUubGVuZ3RoO24+bTttKyspe3ZhciBvPWoobSk7aWYoayhoLG8u eCxvLnkpKXtsKyssaS5wdXNoKG8pO2JyZWFrfX1sfHwoZyo9MixoPWQoYi1n LzIsYy1nLzIsZyxnKSl9aWYoMWU2IT1nKXt2YXIgcCxxPTEvMDtmb3IobT0w LG49aS5sZW5ndGg7bj5tO20rKyl7dmFyIHI9YS5sZW4oYixjLGlbbV0ueCxp W21dLnkpO3E+ciYmKHE9cixpW21dLmxlbj1yLHA9aVttXSl9cmV0dXJuIHB9 fSxhLnBhdGguaXNCQm94SW50ZXJzZWN0PWwsYS5wYXRoLmludGVyc2VjdGlv bj1yLGEucGF0aC5pbnRlcnNlY3Rpb25OdW1iZXI9cyxhLnBhdGguaXNQb2lu dEluc2lkZT11LGEucGF0aC5nZXRCQm94PXYsYS5wYXRoLmdldD1YLGEucGF0 aC50b1JlbGF0aXZlPXksYS5wYXRoLnRvQWJzb2x1dGU9eixhLnBhdGgudG9D dWJpYz1FLGEucGF0aC5tYXA9RixhLnBhdGgudG9TdHJpbmc9ZSxhLnBhdGgu Y2xvbmU9Zn0pLGQucGx1Z2luKGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGgubWF4 LGU9TWF0aC5taW4sZj1mdW5jdGlvbihhKXtpZih0aGlzLml0ZW1zPVtdLHRo aXMuYmluZGluZ3M9e30sdGhpcy5sZW5ndGg9MCx0aGlzLnR5cGU9InNldCIs YSlmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2M+YjtiKyspYVtiXSYmKHRoaXNb dGhpcy5pdGVtcy5sZW5ndGhdPXRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5n dGhdPWFbYl0sdGhpcy5sZW5ndGgrKyl9LGc9Zi5wcm90b3R5cGU7Zy5wdXNo PWZ1bmN0aW9uKCl7Zm9yKHZhciBhLGIsYz0wLGQ9YXJndW1lbnRzLmxlbmd0 aDtkPmM7YysrKWE9YXJndW1lbnRzW2NdLGEmJihiPXRoaXMuaXRlbXMubGVu Z3RoLHRoaXNbYl09dGhpcy5pdGVtc1tiXT1hLHRoaXMubGVuZ3RoKyspO3Jl dHVybiB0aGlzfSxnLnBvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0 aCYmZGVsZXRlIHRoaXNbdGhpcy5sZW5ndGgtLV0sdGhpcy5pdGVtcy5wb3Ao KX0sZy5mb3JFYWNoPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD10aGlz Lml0ZW1zLmxlbmd0aDtkPmM7YysrKWlmKGEuY2FsbChiLHRoaXMuaXRlbXNb Y10sYyk9PT0hMSlyZXR1cm4gdGhpcztyZXR1cm4gdGhpc30sZy5hbmltYXRl PWZ1bmN0aW9uKGQsZSxmLGcpeyJmdW5jdGlvbiIhPXR5cGVvZiBmfHxmLmxl bmd0aHx8KGc9ZixmPWMubGluZWFyKSxkIGluc3RhbmNlb2YgYS5fLkFuaW1h dGlvbiYmKGc9ZC5jYWxsYmFjayxmPWQuZWFzaW5nLGU9Zi5kdXIsZD1kLmF0 dHIpO3ZhciBoPWFyZ3VtZW50cztpZihhLmlzKGQsImFycmF5IikmJmEuaXMo aFtoLmxlbmd0aC0xXSwiYXJyYXkiKSl2YXIgaT0hMDt2YXIgaixrPWZ1bmN0 aW9uKCl7aj90aGlzLmI9ajpqPXRoaXMuYn0sbD0wLG09dGhpcyxuPWcmJmZ1 bmN0aW9uKCl7KytsPT1tLmxlbmd0aCYmZy5jYWxsKHRoaXMpCit9O3JldHVy biB0aGlzLmZvckVhY2goZnVuY3Rpb24oYSxjKXtiLm9uY2UoInNuYXAuYW5p bWNyZWF0ZWQuIithLmlkLGspLGk/aFtjXSYmYS5hbmltYXRlLmFwcGx5KGEs aFtjXSk6YS5hbmltYXRlKGQsZSxmLG4pfSl9LGcucmVtb3ZlPWZ1bmN0aW9u KCl7Zm9yKDt0aGlzLmxlbmd0aDspdGhpcy5wb3AoKS5yZW1vdmUoKTtyZXR1 cm4gdGhpc30sZy5iaW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fTtpZigi ZnVuY3Rpb24iPT10eXBlb2YgYil0aGlzLmJpbmRpbmdzW2FdPWI7ZWxzZXt2 YXIgZT1jfHxhO3RoaXMuYmluZGluZ3NbYV09ZnVuY3Rpb24oYSl7ZFtlXT1h LGIuYXR0cihkKX19cmV0dXJuIHRoaXN9LGcuYXR0cj1mdW5jdGlvbihhKXt2 YXIgYj17fTtmb3IodmFyIGMgaW4gYSl0aGlzLmJpbmRpbmdzW2NdP3RoaXMu YmluZGluZ3NbY10oYVtjXSk6YltjXT1hW2NdO2Zvcih2YXIgZD0wLGU9dGhp cy5pdGVtcy5sZW5ndGg7ZT5kO2QrKyl0aGlzLml0ZW1zW2RdLmF0dHIoYik7 cmV0dXJuIHRoaXN9LGcuY2xlYXI9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVu Z3RoOyl0aGlzLnBvcCgpfSxnLnNwbGljZT1mdW5jdGlvbihhLGIpe2E9MD5h P2QodGhpcy5sZW5ndGgrYSwwKTphLGI9ZCgwLGUodGhpcy5sZW5ndGgtYSxi KSk7dmFyIGMsZz1bXSxoPVtdLGk9W107Zm9yKGM9MjtjPGFyZ3VtZW50cy5s ZW5ndGg7YysrKWkucHVzaChhcmd1bWVudHNbY10pO2ZvcihjPTA7Yj5jO2Mr KyloLnB1c2godGhpc1thK2NdKTtmb3IoO2M8dGhpcy5sZW5ndGgtYTtjKysp Zy5wdXNoKHRoaXNbYStjXSk7dmFyIGo9aS5sZW5ndGg7Zm9yKGM9MDtjPGor Zy5sZW5ndGg7YysrKXRoaXMuaXRlbXNbYStjXT10aGlzW2ErY109aj5jP2lb Y106Z1tjLWpdO2ZvcihjPXRoaXMuaXRlbXMubGVuZ3RoPXRoaXMubGVuZ3Ro LT1iLWo7dGhpc1tjXTspZGVsZXRlIHRoaXNbYysrXTtyZXR1cm4gbmV3IGYo aCl9LGcuZXhjbHVkZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMu bGVuZ3RoO2M+YjtiKyspaWYodGhpc1tiXT09YSlyZXR1cm4gdGhpcy5zcGxp Y2UoYiwxKSwhMDtyZXR1cm4hMX0sZy5pbnNlcnRBZnRlcj1mdW5jdGlvbihh KXtmb3IodmFyIGI9dGhpcy5pdGVtcy5sZW5ndGg7Yi0tOyl0aGlzLml0ZW1z W2JdLmluc2VydEFmdGVyKGEpO3JldHVybiB0aGlzfSxnLmdldEJCb3g9ZnVu Y3Rpb24oKXtmb3IodmFyIGE9W10sYj1bXSxjPVtdLGY9W10sZz10aGlzLml0 ZW1zLmxlbmd0aDtnLS07KWlmKCF0aGlzLml0ZW1zW2ddLnJlbW92ZWQpe3Zh ciBoPXRoaXMuaXRlbXNbZ10uZ2V0QkJveCgpO2EucHVzaChoLngpLGIucHVz aChoLnkpLGMucHVzaChoLngraC53aWR0aCksZi5wdXNoKGgueStoLmhlaWdo dCl9cmV0dXJuIGE9ZS5hcHBseSgwLGEpLGI9ZS5hcHBseSgwLGIpLGM9ZC5h cHBseSgwLGMpLGY9ZC5hcHBseSgwLGYpLHt4OmEseTpiLHgyOmMseTI6Zix3 aWR0aDpjLWEsaGVpZ2h0OmYtYixjeDphKyhjLWEpLzIsY3k6YisoZi1iKS8y fX0sZy5jbG9uZT1mdW5jdGlvbihhKXthPW5ldyBmO2Zvcih2YXIgYj0wLGM9 dGhpcy5pdGVtcy5sZW5ndGg7Yz5iO2IrKylhLnB1c2godGhpcy5pdGVtc1ti XS5jbG9uZSgpKTtyZXR1cm4gYX0sZy50b1N0cmluZz1mdW5jdGlvbigpe3Jl dHVybiJTbmFw4oCYcyBzZXQifSxnLnR5cGU9InNldCIsYS5TZXQ9ZixhLnNl dD1mdW5jdGlvbigpe3ZhciBhPW5ldyBmO3JldHVybiBhcmd1bWVudHMubGVu Z3RoJiZhLnB1c2guYXBwbHkoYSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs bChhcmd1bWVudHMsMCkpLGF9fSksZC5wbHVnaW4oZnVuY3Rpb24oYSxjKXtm dW5jdGlvbiBkKGEpe3ZhciBiPWFbMF07c3dpdGNoKGIudG9Mb3dlckNhc2Uo KSl7Y2FzZSJ0IjpyZXR1cm5bYiwwLDBdO2Nhc2UibSI6cmV0dXJuW2IsMSww LDAsMSwwLDBdO2Nhc2UiciI6cmV0dXJuIDQ9PWEubGVuZ3RoP1tiLDAsYVsy XSxhWzNdXTpbYiwwXTtjYXNlInMiOnJldHVybiA1PT1hLmxlbmd0aD9bYiwx LDEsYVszXSxhWzRdXTozPT1hLmxlbmd0aD9bYiwxLDFdOltiLDFdfX1mdW5j dGlvbiBlKGIsYyxlKXtjPXAoYykucmVwbGFjZSgvXC57M318XHUyMDI2L2cs YiksYj1hLnBhcnNlVHJhbnNmb3JtU3RyaW5nKGIpfHxbXSxjPWEucGFyc2VU cmFuc2Zvcm1TdHJpbmcoYyl8fFtdO2Zvcih2YXIgZixnLGgsaSxsPU1hdGgu bWF4KGIubGVuZ3RoLGMubGVuZ3RoKSxtPVtdLG49W10sbz0wO2w+bztvKysp e2lmKGg9YltvXXx8ZChjW29dKSxpPWNbb118fGQoaCksaFswXSE9aVswXXx8 InIiPT1oWzBdLnRvTG93ZXJDYXNlKCkmJihoWzJdIT1pWzJdfHxoWzNdIT1p WzNdKXx8InMiPT1oWzBdLnRvTG93ZXJDYXNlKCkmJihoWzNdIT1pWzNdfHxo WzRdIT1pWzRdKSl7Yj1hLl8udHJhbnNmb3JtMm1hdHJpeChiLGUoKSksYz1h Ll8udHJhbnNmb3JtMm1hdHJpeChjLGUoKSksbT1bWyJtIixiLmEsYi5iLGIu YyxiLmQsYi5lLGIuZl1dLG49W1sibSIsYy5hLGMuYixjLmMsYy5kLGMuZSxj LmZdXTticmVha31mb3IobVtvXT1bXSxuW29dPVtdLGY9MCxnPU1hdGgubWF4 KGgubGVuZ3RoLGkubGVuZ3RoKTtnPmY7ZisrKWYgaW4gaCYmKG1bb11bZl09 aFtmXSksZiBpbiBpJiYobltvXVtmXT1pW2ZdKX1yZXR1cm57ZnJvbTprKG0p LHRvOmsobiksZjpqKG0pfX1mdW5jdGlvbiBmKGEpe3JldHVybiBhfWZ1bmN0 aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybitiLnRvRml4ZWQo MykrYX19ZnVuY3Rpb24gaChhKXtyZXR1cm4gYS5qb2luKCIgIil9ZnVuY3Rp b24gaShiKXtyZXR1cm4gYS5yZ2IoYlswXSxiWzFdLGJbMl0pfWZ1bmN0aW9u IGooYSl7dmFyIGIsYyxkLGUsZixnLGg9MCxpPVtdO2ZvcihiPTAsYz1hLmxl bmd0aDtjPmI7YisrKXtmb3IoZj0iWyIsZz1bJyInK2FbYl1bMF0rJyInXSxk PTEsZT1hW2JdLmxlbmd0aDtlPmQ7ZCsrKWdbZF09InZhbFsiK2grKyArIl0i O2YrPWcrIl0iLGlbYl09Zn1yZXR1cm4gRnVuY3Rpb24oInZhbCIsInJldHVy biBTbmFwLnBhdGgudG9TdHJpbmcuY2FsbChbIitpKyJdKSIpfWZ1bmN0aW9u IGsoYSl7Zm9yKHZhciBiPVtdLGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspZm9y KHZhciBlPTEsZj1hW2NdLmxlbmd0aDtmPmU7ZSsrKWIucHVzaChhW2NdW2Vd KTtyZXR1cm4gYn1mdW5jdGlvbiBsKGEpe3JldHVybiBpc0Zpbml0ZShwYXJz ZUZsb2F0KGEpKX1mdW5jdGlvbiBtKGIsYyl7cmV0dXJuIGEuaXMoYiwiYXJy YXkiKSYmYS5pcyhjLCJhcnJheSIpP2IudG9TdHJpbmcoKT09Yy50b1N0cmlu ZygpOiExfXZhciBuPXt9LG89L1thLXpdKyQvaSxwPVN0cmluZztuLnN0cm9r ZT1uLmZpbGw9ImNvbG91ciIsYy5wcm90b3R5cGUuZXF1YWw9ZnVuY3Rpb24o YSxjKXtyZXR1cm4gYigic25hcC51dGlsLmVxdWFsIix0aGlzLGEsYykuZmly c3REZWZpbmVkKCl9LGIub24oInNuYXAudXRpbC5lcXVhbCIsZnVuY3Rpb24o YixjKXt2YXIgZCxxLHI9cCh0aGlzLmF0dHIoYil8fCIiKSxzPXRoaXM7aWYo bChyKSYmbChjKSlyZXR1cm57ZnJvbTpwYXJzZUZsb2F0KHIpLHRvOnBhcnNl RmxvYXQoYyksZjpmfTtpZigiY29sb3VyIj09bltiXSlyZXR1cm4gZD1hLmNv bG9yKHIpLHE9YS5jb2xvcihjKSx7ZnJvbTpbZC5yLGQuZyxkLmIsZC5vcGFj aXR5XSx0bzpbcS5yLHEuZyxxLmIscS5vcGFjaXR5XSxmOml9O2lmKCJ2aWV3 Qm94Ij09YilyZXR1cm4gZD10aGlzLmF0dHIoYikudmIuc3BsaXQoIiAiKS5t YXAoTnVtYmVyKSxxPWMuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKSx7ZnJvbTpk LHRvOnEsZjpofTtpZigidHJhbnNmb3JtIj09Ynx8ImdyYWRpZW50VHJhbnNm b3JtIj09Ynx8InBhdHRlcm5UcmFuc2Zvcm0iPT1iKXJldHVybiBjIGluc3Rh bmNlb2YgYS5NYXRyaXgmJihjPWMudG9UcmFuc2Zvcm1TdHJpbmcoKSksYS5f LnJnVHJhbnNmb3JtLnRlc3QoYyl8fChjPWEuXy5zdmdUcmFuc2Zvcm0yc3Ry aW5nKGMpKSxlKHIsYyxmdW5jdGlvbigpe3JldHVybiBzLmdldEJCb3goMSl9 KTtpZigiZCI9PWJ8fCJwYXRoIj09YilyZXR1cm4gZD1hLnBhdGgudG9DdWJp YyhyLGMpLHtmcm9tOmsoZFswXSksdG86ayhkWzFdKSxmOmooZFswXSl9O2lm KCJwb2ludHMiPT1iKXJldHVybiBkPXAocikuc3BsaXQoYS5fLnNlcGFyYXRv cikscT1wKGMpLnNwbGl0KGEuXy5zZXBhcmF0b3IpLHtmcm9tOmQsdG86cSxm OmZ1bmN0aW9uKGEpe3JldHVybiBhfX07dmFyIHQ9ci5tYXRjaChvKSx1PXAo YykubWF0Y2gobyk7cmV0dXJuIHQmJm0odCx1KT97ZnJvbTpwYXJzZUZsb2F0 KHIpLHRvOnBhcnNlRmxvYXQoYyksZjpnKHQpfTp7ZnJvbTp0aGlzLmFzUFgo YiksdG86dGhpcy5hc1BYKGIsYyksZjpmfX0pfSksZC5wbHVnaW4oZnVuY3Rp b24oYSxjLGQsZSl7Zm9yKHZhciBmPWMucHJvdG90eXBlLGc9Imhhc093blBy b3BlcnR5IixoPSgiY3JlYXRlVG91Y2giaW4gZS5kb2MpLGk9WyJjbGljayIs ImRibGNsaWNrIiwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2VvdXQi LCJtb3VzZW92ZXIiLCJtb3VzZXVwIiwidG91Y2hzdGFydCIsInRvdWNobW92 ZSIsInRvdWNoZW5kIiwidG91Y2hjYW5jZWwiXSxqPXttb3VzZWRvd246InRv dWNoc3RhcnQiLG1vdXNlbW92ZToidG91Y2htb3ZlIixtb3VzZXVwOiJ0b3Vj aGVuZCJ9LGs9KGZ1bmN0aW9uKGEsYil7dmFyIGM9InkiPT1hPyJzY3JvbGxU b3AiOiJzY3JvbGxMZWZ0IixkPWImJmIubm9kZT9iLm5vZGUub3duZXJEb2N1 bWVudDplLmRvYztyZXR1cm4gZFtjIGluIGQuZG9jdW1lbnRFbGVtZW50PyJk b2N1bWVudEVsZW1lbnQiOiJib2R5Il1bY119KSxsPWZ1bmN0aW9uKCl7cmV0 dXJuIHRoaXMub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxtPWZ1 bmN0aW9uKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFn YXRpb24oKX0sbj1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1oJiZqW2JdP2pb Yl06YixmPWZ1bmN0aW9uKGUpe3ZhciBmPWsoInkiLGQpLGk9aygieCIsZCk7 aWYoaCYmaltnXShiKSlmb3IodmFyIG49MCxvPWUudGFyZ2V0VG91Y2hlcyYm ZS50YXJnZXRUb3VjaGVzLmxlbmd0aDtvPm47bisrKWlmKGUudGFyZ2V0VG91 Y2hlc1tuXS50YXJnZXQ9PWF8fGEuY29udGFpbnMoZS50YXJnZXRUb3VjaGVz W25dLnRhcmdldCkpe3ZhciBwPWU7ZT1lLnRhcmdldFRvdWNoZXNbbl0sZS5v cmlnaW5hbEV2ZW50PXAsZS5wcmV2ZW50RGVmYXVsdD1sLGUuc3RvcFByb3Bh Z2F0aW9uPW07YnJlYWt9dmFyIHE9ZS5jbGllbnRYK2kscj1lLmNsaWVudFkr ZjtyZXR1cm4gYy5jYWxsKGQsZSxxLHIpfTtyZXR1cm4gYiE9PWUmJmEuYWRk RXZlbnRMaXN0ZW5lcihiLGYsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihlLGYs ITEpLGZ1bmN0aW9uKCl7cmV0dXJuIGIhPT1lJiZhLnJlbW92ZUV2ZW50TGlz dGVuZXIoYixmLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxmLCExKSwh MH19LG89W10scD1mdW5jdGlvbihhKXtmb3IodmFyIGMsZD1hLmNsaWVudFgs ZT1hLmNsaWVudFksZj1rKCJ5IiksZz1rKCJ4IiksaT1vLmxlbmd0aDtpLS07 KXtpZihjPW9baV0saCl7Zm9yKHZhciBqLGw9YS50b3VjaGVzJiZhLnRvdWNo ZXMubGVuZ3RoO2wtLTspaWYoaj1hLnRvdWNoZXNbbF0sai5pZGVudGlmaWVy PT1jLmVsLl9kcmFnLmlkfHxjLmVsLm5vZGUuY29udGFpbnMoai50YXJnZXQp KXtkPWouY2xpZW50WCxlPWouY2xpZW50WSwoYS5vcmlnaW5hbEV2ZW50P2Eu b3JpZ2luYWxFdmVudDphKS5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrfX1lbHNl IGEucHJldmVudERlZmF1bHQoKTt7dmFyIG09Yy5lbC5ub2RlO20ubmV4dFNp YmxpbmcsbS5wYXJlbnROb2RlLG0uc3R5bGUuZGlzcGxheX1kKz1nLGUrPWYs Yigic25hcC5kcmFnLm1vdmUuIitjLmVsLmlkLGMubW92ZV9zY29wZXx8Yy5l bCxkLWMuZWwuX2RyYWcueCxlLWMuZWwuX2RyYWcueSxkLGUsYSl9fSxxPWZ1 bmN0aW9uKGMpe2EudW5tb3VzZW1vdmUocCkudW5tb3VzZXVwKHEpO2Zvcih2 YXIgZCxlPW8ubGVuZ3RoO2UtLTspZD1vW2VdLGQuZWwuX2RyYWc9e30sYigi c25hcC5kcmFnLmVuZC4iK2QuZWwuaWQsZC5lbmRfc2NvcGV8fGQuc3RhcnRf c2NvcGV8fGQubW92ZV9zY29wZXx8ZC5lbCxjKSxiLm9mZigic25hcC5kcmFn LiouIitkLmVsLmlkKTtvPVtdfSxyPWkubGVuZ3RoO3ItLTspIWZ1bmN0aW9u KGIpe2FbYl09ZltiXT1mdW5jdGlvbihjLGQpe2lmKGEuaXMoYywiZnVuY3Rp b24iKSl0aGlzLmV2ZW50cz10aGlzLmV2ZW50c3x8W10sdGhpcy5ldmVudHMu cHVzaCh7bmFtZTpiLGY6Yyx1bmJpbmQ6bih0aGlzLm5vZGV8fGRvY3VtZW50 LGIsYyxkfHx0aGlzKX0pO2Vsc2UgZm9yKHZhciBlPTAsZj10aGlzLmV2ZW50 cy5sZW5ndGg7Zj5lO2UrKylpZih0aGlzLmV2ZW50c1tlXS5uYW1lPT1iKXRy eXt0aGlzLmV2ZW50c1tlXS5mLmNhbGwodGhpcyl9Y2F0Y2goZyl7fXJldHVy biB0aGlzfSxhWyJ1biIrYl09ZlsidW4iK2JdPWZ1bmN0aW9uKGEpe2Zvcih2 YXIgYz10aGlzLmV2ZW50c3x8W10sZD1jLmxlbmd0aDtkLS07KWlmKGNbZF0u bmFtZT09YiYmKGNbZF0uZj09YXx8IWEpKXJldHVybiBjW2RdLnVuYmluZCgp LGMuc3BsaWNlKGQsMSksIWMubGVuZ3RoJiZkZWxldGUgdGhpcy5ldmVudHMs dGhpcztyZXR1cm4gdGhpc319KGlbcl0pO2YuaG92ZXI9ZnVuY3Rpb24oYSxi LGMsZCl7cmV0dXJuIHRoaXMubW91c2VvdmVyKGEsYykubW91c2VvdXQoYixk fHxjKX0sZi51bmhvdmVyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMudW5t b3VzZW92ZXIoYSkudW5tb3VzZW91dChiKX07dmFyIHM9W107Zi5kcmFnPWZ1 bmN0aW9uKGMsZCxlLGYsZyxoKXtmdW5jdGlvbiBpKGksaixsKXsoaS5vcmln aW5hbEV2ZW50fHxpKS5wcmV2ZW50RGVmYXVsdCgpLGsuX2RyYWcueD1qLGsu X2RyYWcueT1sLGsuX2RyYWcuaWQ9aS5pZGVudGlmaWVyLCFvLmxlbmd0aCYm YS5tb3VzZW1vdmUocCkubW91c2V1cChxKSxvLnB1c2goe2VsOmssbW92ZV9z Y29wZTpmLHN0YXJ0X3Njb3BlOmcsZW5kX3Njb3BlOmh9KSxkJiZiLm9uKCJz bmFwLmRyYWcuc3RhcnQuIitrLmlkLGQpLGMmJmIub24oInNuYXAuZHJhZy5t b3ZlLiIray5pZCxjKSxlJiZiLm9uKCJzbmFwLmRyYWcuZW5kLiIray5pZCxl KSxiKCJzbmFwLmRyYWcuc3RhcnQuIitrLmlkLGd8fGZ8fGssaixsLGkpfWZ1 bmN0aW9uIGooYSxjLGQpe2IoInNuYXAuZHJhZ2luaXQuIitrLmlkLGssYSxj LGQpfXZhciBrPXRoaXM7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBsO3Jl dHVybiBrLmRyYWcoZnVuY3Rpb24oYSxiKXt0aGlzLmF0dHIoe3RyYW5zZm9y bTpsKyhsPyJUIjoidCIpK1thLGJdfSl9LGZ1bmN0aW9uKCl7bD10aGlzLnRy YW5zZm9ybSgpLmxvY2FsfSl9cmV0dXJuIGIub24oInNuYXAuZHJhZ2luaXQu IitrLmlkLGkpLGsuX2RyYWc9e30scy5wdXNoKHtlbDprLHN0YXJ0OmksaW5p dDpqfSksay5tb3VzZWRvd24oaiksa30sZi51bmRyYWc9ZnVuY3Rpb24oKXtm b3IodmFyIGM9cy5sZW5ndGg7Yy0tOylzW2NdLmVsPT10aGlzJiYodGhpcy51 bm1vdXNlZG93bihzW2NdLmluaXQpLHMuc3BsaWNlKGMsMSksYi51bmJpbmQo InNuYXAuZHJhZy4qLiIrdGhpcy5pZCksYi51bmJpbmQoInNuYXAuZHJhZ2lu aXQuIit0aGlzLmlkKSk7cmV0dXJuIXMubGVuZ3RoJiZhLnVubW91c2Vtb3Zl KHApLnVubW91c2V1cChxKSx0aGlzfX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEs YyxkKXt2YXIgZT0oYy5wcm90b3R5cGUsZC5wcm90b3R5cGUpLGY9L15ccyp1 cmxcKCguKylcKS8sZz1TdHJpbmcsaD1hLl8uJDthLmZpbHRlcj17fSxlLmZp bHRlcj1mdW5jdGlvbihiKXt2YXIgZD10aGlzOyJzdmciIT1kLnR5cGUmJihk PWQucGFwZXIpO3ZhciBlPWEucGFyc2UoZyhiKSksZj1hLl8uaWQoKSxpPShk Lm5vZGUub2Zmc2V0V2lkdGgsZC5ub2RlLm9mZnNldEhlaWdodCxoKCJmaWx0 ZXIiKSk7cmV0dXJuIGgoaSx7aWQ6ZixmaWx0ZXJVbml0czoidXNlclNwYWNl T25Vc2UifSksaS5hcHBlbmRDaGlsZChlLm5vZGUpLGQuZGVmcy5hcHBlbmRD aGlsZChpKSxuZXcgYyhpKX0sYi5vbigic25hcC51dGlsLmdldGF0dHIuZmls dGVyIixmdW5jdGlvbigpe2Iuc3RvcCgpO3ZhciBjPWgodGhpcy5ub2RlLCJm aWx0ZXIiKTtpZihjKXt2YXIgZD1nKGMpLm1hdGNoKGYpO3JldHVybiBkJiZh LnNlbGVjdChkWzFdKX19KSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5maWx0ZXIi LGZ1bmN0aW9uKGQpe2lmKGQgaW5zdGFuY2VvZiBjJiYiZmlsdGVyIj09ZC50 eXBlKXtiLnN0b3AoKTt2YXIgZT1kLm5vZGUuaWQ7ZXx8KGgoZC5ub2RlLHtp ZDpkLmlkfSksZT1kLmlkKSxoKHRoaXMubm9kZSx7ZmlsdGVyOmEudXJsKGUp fSl9ZCYmIm5vbmUiIT1kfHwoYi5zdG9wKCksdGhpcy5ub2RlLnJlbW92ZUF0 dHJpYnV0ZSgiZmlsdGVyIikpfSksYS5maWx0ZXIuYmx1cj1mdW5jdGlvbihi LGMpe251bGw9PWImJihiPTIpO3ZhciBkPW51bGw9PWM/YjpbYixjXTtyZXR1 cm4gYS5mb3JtYXQoJzxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249Intk ZWZ9Ii8+Jyx7ZGVmOmR9KX0sYS5maWx0ZXIuYmx1ci50b1N0cmluZz1mdW5j dGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLnNoYWRvdz1mdW5jdGlv bihiLGMsZCxlLGYpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZCYmKGU9ZCxm PWUsZD00KSwic3RyaW5nIiE9dHlwZW9mIGUmJihmPWUsZT0iIzAwMCIpLGU9 ZXx8IiMwMDAiLG51bGw9PWQmJihkPTQpLG51bGw9PWYmJihmPTEpLG51bGw9 PWImJihiPTAsYz0yKSxudWxsPT1jJiYoYz1iKSxlPWEuY29sb3IoZSksYS5m b3JtYXQoJzxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERl dmlhdGlvbj0ie2JsdXJ9Ii8+PGZlT2Zmc2V0IGR4PSJ7ZHh9IiBkeT0ie2R5 fSIgcmVzdWx0PSJvZmZzZXRibHVyIi8+PGZlRmxvb2QgZmxvb2QtY29sb3I9 Intjb2xvcn0iLz48ZmVDb21wb3NpdGUgaW4yPSJvZmZzZXRibHVyIiBvcGVy YXRvcj0iaW4iLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBl PSJsaW5lYXIiIHNsb3BlPSJ7b3BhY2l0eX0iLz48L2ZlQ29tcG9uZW50VHJh bnNmZXI+PGZlTWVyZ2U+PGZlTWVyZ2VOb2RlLz48ZmVNZXJnZU5vZGUgaW49 IlNvdXJjZUdyYXBoaWMiLz48L2ZlTWVyZ2U+Jyx7Y29sb3I6ZSxkeDpiLGR5 OmMsYmx1cjpkLG9wYWNpdHk6Zn0pfSxhLmZpbHRlci5zaGFkb3cudG9TdHJp bmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5ncmF5c2Nh bGU9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWImJihiPTEpLGEuZm9ybWF0 KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0ie2F9IHti fSB7Y30gMCAwIHtkfSB7ZX0ge2Z9IDAgMCB7Z30ge2J9IHtofSAwIDAgMCAw IDAgMSAwIi8+Jyx7YTouMjEyNisuNzg3NCooMS1iKSxiOi43MTUyLS43MTUy KigxLWIpLGM6LjA3MjItLjA3MjIqKDEtYiksZDouMjEyNi0uMjEyNiooMS1i KSxlOi43MTUyKy4yODQ4KigxLWIpLGY6LjA3MjItLjA3MjIqKDEtYiksZzou MjEyNi0uMjEyNiooMS1iKSxoOi4wNzIyKy45Mjc4KigxLWIpfSl9LGEuZmls dGVyLmdyYXlzY2FsZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlz KCl9LGEuZmlsdGVyLnNlcGlhPWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1i JiYoYj0xKSxhLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4 IiB2YWx1ZXM9InthfSB7Yn0ge2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAge2d9 IHtofSB7aX0gMCAwIDAgMCAwIDEgMCIvPicse2E6LjM5MysuNjA3KigxLWIp LGI6Ljc2OS0uNzY5KigxLWIpLGM6LjE4OS0uMTg5KigxLWIpLGQ6LjM0OS0u MzQ5KigxLWIpLGU6LjY4NisuMzE0KigxLWIpLGY6LjE2OC0uMTY4KigxLWIp LGc6LjI3Mi0uMjcyKigxLWIpLGg6LjUzNC0uNTM0KigxLWIpLGk6LjEzMSsu ODY5KigxLWIpfSl9LGEuZmlsdGVyLnNlcGlhLnRvU3RyaW5nPWZ1bmN0aW9u KCl7cmV0dXJuIHRoaXMoKX0sYS5maWx0ZXIuc2F0dXJhdGU9ZnVuY3Rpb24o Yil7cmV0dXJuIG51bGw9PWImJihiPTEpLGEuZm9ybWF0KCc8ZmVDb2xvck1h dHJpeCB0eXBlPSJzYXR1cmF0ZSIgdmFsdWVzPSJ7YW1vdW50fSIvPicse2Ft b3VudDoxLWJ9KX0sYS5maWx0ZXIuc2F0dXJhdGUudG9TdHJpbmc9ZnVuY3Rp b24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5odWVSb3RhdGU9ZnVuY3Rp b24oYil7cmV0dXJuIGI9Ynx8MCxhLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXgg dHlwZT0iaHVlUm90YXRlIiB2YWx1ZXM9InthbmdsZX0iLz4nLHthbmdsZTpi fSl9LGEuZmlsdGVyLmh1ZVJvdGF0ZS50b1N0cmluZz1mdW5jdGlvbigpe3Jl dHVybiB0aGlzKCl9LGEuZmlsdGVyLmludmVydD1mdW5jdGlvbihiKXtyZXR1 cm4gbnVsbD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5z ZmVyPjxmZUZ1bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3Vu dH0ge2Ftb3VudDJ9Ii8+PGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFs dWVzPSJ7YW1vdW50fSB7YW1vdW50Mn0iLz48ZmVGdW5jQiB0eXBlPSJ0YWJs ZSIgdGFibGVWYWx1ZXM9InthbW91bnR9IHthbW91bnQyfSIvPjwvZmVDb21w b25lbnRUcmFuc2Zlcj4nLHthbW91bnQ6YixhbW91bnQyOjEtYn0pfSxhLmZp bHRlci5pbnZlcnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygp fSxhLmZpbHRlci5icmlnaHRuZXNzPWZ1bmN0aW9uKGIpe3JldHVybiBudWxs PT1iJiYoYj0xKSxhLmZvcm1hdCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZl RnVuY1IgdHlwZT0ibGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iLz48ZmVGdW5j RyB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNCIHR5 cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9Ii8+PC9mZUNvbXBvbmVudFRy YW5zZmVyPicse2Ftb3VudDpifSl9LGEuZmlsdGVyLmJyaWdodG5lc3MudG9T dHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5jb250 cmFzdD1mdW5jdGlvbihiKXtyZXR1cm4gbnVsbD09YiYmKGI9MSksYS5mb3Jt YXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1bmNSIHR5cGU9ImxpbmVh ciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxm ZUZ1bmNHIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNl cHQ9InthbW91bnQyfSIvPjxmZUZ1bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9 InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjwvZmVDb21wb25l bnRUcmFuc2Zlcj4nLHthbW91bnQ6YixhbW91bnQyOi41LWIvMn0pfSxhLmZp bHRlci5jb250cmFzdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlz KCl9fSksZC5wbHVnaW4oZnVuY3Rpb24oYSxiKXt2YXIgYz1hLl8uYm94LGQ9 YS5pcyxlPS9eW15hLXpdKihbdGJtbHJjXSkvaSxmPWZ1bmN0aW9uKCl7cmV0 dXJuIlQiK3RoaXMuZHgrIiwiK3RoaXMuZHl9O2IucHJvdG90eXBlLmdldEFs aWduPWZ1bmN0aW9uKGEsYil7bnVsbD09YiYmZChhLCJzdHJpbmciKSYmKGI9 YSxhPW51bGwpLGE9YXx8dGhpcy5wYXBlcjt2YXIgZz1hLmdldEJCb3g/YS5n ZXRCQm94KCk6YyhhKSxoPXRoaXMuZ2V0QkJveCgpLGk9e307c3dpdGNoKGI9 YiYmYi5tYXRjaChlKSxiPWI/YlsxXS50b0xvd2VyQ2FzZSgpOiJjIil7Y2Fz ZSJ0IjppLmR4PTAsaS5keT1nLnktaC55O2JyZWFrO2Nhc2UiYiI6aS5keD0w LGkuZHk9Zy55Mi1oLnkyO2JyZWFrO2Nhc2UibSI6aS5keD0wLGkuZHk9Zy5j eS1oLmN5O2JyZWFrO2Nhc2UibCI6aS5keD1nLngtaC54LGkuZHk9MDticmVh aztjYXNlInIiOmkuZHg9Zy54Mi1oLngyLGkuZHk9MDticmVhaztkZWZhdWx0 OmkuZHg9Zy5jeC1oLmN4LGkuZHk9MH1yZXR1cm4gaS50b1N0cmluZz1mLGl9 LGIucHJvdG90eXBlLmFsaWduPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMu dHJhbnNmb3JtKCIuLi4iK3RoaXMuZ2V0QWxpZ24oYSxiKSl9fSksZH0pOwpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9q cy9zbmFwLnN2Zy5qcyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vanMvc25hcC5zdmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNTQ3NTE3MAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmcuanMKQEAgLTAs MCArMSw4MTcwIEBACisvLyBTbmFwLnN2ZyAwLjQuMQorLy8KKy8vIENvcHly aWdodCAoYykgMjAxMyDigJMgMjAxNSBBZG9iZSBTeXN0ZW1zIEluY29ycG9y YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1 bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp Y2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0 IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6 Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8v IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVy IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT SVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0 aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu ZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM aWNlbnNlLgorLy8KKy8vIGJ1aWxkOiAyMDE1LTA0LTEzCisKKy8vIENvcHly aWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhl IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7 CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vIAorLy8gaHR0cDovL3d3dy5h cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyAKKy8vIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g d3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisv LyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGlj ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt aXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl LgorLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSQIFxcCisvLyDilIIgRXZlIDAuNC4yIC0gSmF2YVNjcmlw dCBFdmVudHMgTGlicmFyeSAgICAgICAgICAgICAgICAgICAgICDilIIgXFwK Ky8vIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUpCBcXAorLy8g4pSCIEF1dGhvciBEbWl0cnkgQmFyYW5vdnNr aXkgKGh0dHA6Ly9kbWl0cnkuYmFyYW5vdnNraXkuY29tLykg4pSCIFxcCisv LyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilJggXFwKKworKGZ1bmN0aW9uIChnbG9iKSB7CisgICAgdmFyIHZl cnNpb24gPSAiMC40LjIiLAorICAgICAgICBoYXMgPSAiaGFzT3duUHJvcGVy dHkiLAorICAgICAgICBzZXBhcmF0b3IgPSAvW1wuXC9dLywKKyAgICAgICAg Y29tYXNlcGFyYXRvciA9IC9ccyosXHMqLywKKyAgICAgICAgd2lsZGNhcmQg PSAiKiIsCisgICAgICAgIGZ1biA9IGZ1bmN0aW9uICgpIHt9LAorICAgICAg ICBudW1zb3J0ID0gZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgICAgIHJl dHVybiBhIC0gYjsKKyAgICAgICAgfSwKKyAgICAgICAgY3VycmVudF9ldmVu dCwKKyAgICAgICAgc3RvcCwKKyAgICAgICAgZXZlbnRzID0ge246IHt9fSwK KyAgICAgICAgZmlyc3REZWZpbmVkID0gZnVuY3Rpb24gKCkgeworICAgICAg ICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2ld ICE9ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy biB0aGlzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfSwKKyAgICAgICAgbGFzdERlZmluZWQgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgICAgICB2YXIgaSA9IHRoaXMubGVuZ3RoOworICAgICAg ICAgICAgd2hpbGUgKC0taSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBl b2YgdGhpc1tpXSAhPSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdGhpc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0sCisgICAgLypcCisgICAgICogZXZlCisg ICAgIFsgbWV0aG9kIF0KKworICAgICAqIEZpcmVzIGV2ZW50IHdpdGggZ2l2 ZW4gYG5hbWVgLCBnaXZlbiBzY29wZSBhbmQgb3RoZXIgcGFyYW1ldGVycy4K KworICAgICA+IEFyZ3VtZW50cworCisgICAgIC0gbmFtZSAoc3RyaW5nKSBu YW1lIG9mIHRoZSAqZXZlbnQqLCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkg c2VwYXJhdGVkCisgICAgIC0gc2NvcGUgKG9iamVjdCkgY29udGV4dCBmb3Ig dGhlIGV2ZW50IGhhbmRsZXJzCisgICAgIC0gdmFyYXJncyAoLi4uKSB0aGUg cmVzdCBvZiBhcmd1bWVudHMgd2lsbCBiZSBzZW50IHRvIGV2ZW50IGhhbmRs ZXJzCisKKyAgICAgPSAob2JqZWN0KSBhcnJheSBvZiByZXR1cm5lZCB2YWx1 ZXMgZnJvbSB0aGUgbGlzdGVuZXJzLiBBcnJheSBoYXMgdHdvIG1ldGhvZHMg YC5maXJzdERlZmluZWQoKWAgYW5kIGAubGFzdERlZmluZWQoKWAgdG8gZ2V0 IGZpcnN0IG9yIGxhc3Qgbm90IGB1bmRlZmluZWRgIHZhbHVlLgorICAgIFwq LworICAgICAgICBldmUgPSBmdW5jdGlvbiAobmFtZSwgc2NvcGUpIHsKKyAg ICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7CisgICAgICAgICAgICB2 YXIgZSA9IGV2ZW50cywKKyAgICAgICAgICAgICAgICBvbGRzdG9wID0gc3Rv cCwKKyAgICAgICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNs aWNlLmNhbGwoYXJndW1lbnRzLCAyKSwKKyAgICAgICAgICAgICAgICBsaXN0 ZW5lcnMgPSBldmUubGlzdGVuZXJzKG5hbWUpLAorICAgICAgICAgICAgICAg IHogPSAwLAorICAgICAgICAgICAgICAgIGYgPSBmYWxzZSwKKyAgICAgICAg ICAgICAgICBsLAorICAgICAgICAgICAgICAgIGluZGV4ZWQgPSBbXSwKKyAg ICAgICAgICAgICAgICBxdWV1ZSA9IHt9LAorICAgICAgICAgICAgICAgIG91 dCA9IFtdLAorICAgICAgICAgICAgICAgIGNlID0gY3VycmVudF9ldmVudCwK KyAgICAgICAgICAgICAgICBlcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIG91 dC5maXJzdERlZmluZWQgPSBmaXJzdERlZmluZWQ7CisgICAgICAgICAgICBv dXQubGFzdERlZmluZWQgPSBsYXN0RGVmaW5lZDsKKyAgICAgICAgICAgIGN1 cnJlbnRfZXZlbnQgPSBuYW1lOworICAgICAgICAgICAgc3RvcCA9IDA7Cisg ICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBsaXN0ZW5lcnMubGVu Z3RoOyBpIDwgaWk7IGkrKykgaWYgKCJ6SW5kZXgiIGluIGxpc3RlbmVyc1tp XSkgeworICAgICAgICAgICAgICAgIGluZGV4ZWQucHVzaChsaXN0ZW5lcnNb aV0uekluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ld LnpJbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWVbbGlz dGVuZXJzW2ldLnpJbmRleF0gPSBsaXN0ZW5lcnNbaV07CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXhlZC5z b3J0KG51bXNvcnQpOworICAgICAgICAgICAgd2hpbGUgKGluZGV4ZWRbel0g PCAwKSB7CisgICAgICAgICAgICAgICAgbCA9IHF1ZXVlW2luZGV4ZWRbeisr XV07CisgICAgICAgICAgICAgICAgb3V0LnB1c2gobC5hcHBseShzY29wZSwg YXJncykpOworICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7CisgICAgICAg ICAgICAgICAgICAgIHN0b3AgPSBvbGRzdG9wOworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gb3V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgbCA9IGxpc3RlbmVyc1tpXTsKKyAgICAgICAg ICAgICAgICBpZiAoInpJbmRleCIgaW4gbCkgeworICAgICAgICAgICAgICAg ICAgICBpZiAobC56SW5kZXggPT0gaW5kZXhlZFt6XSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykp OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB6Kys7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbCA9IHF1ZXVlW2luZGV4ZWRbel1dOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGwgJiYgb3V0LnB1c2gobC5hcHBseShz Y29wZSwgYXJncykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChzdG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgIH0gd2hpbGUgKGwpCisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZVts LnpJbmRleF0gPSBsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnB1 c2gobC5hcHBseShzY29wZSwgYXJncykpOworICAgICAgICAgICAgICAgICAg ICBpZiAoc3RvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBzdG9wID0gb2xkc3RvcDsKKyAg ICAgICAgICAgIGN1cnJlbnRfZXZlbnQgPSBjZTsKKyAgICAgICAgICAgIHJl dHVybiBvdXQ7CisgICAgICAgIH07CisgICAgICAgIC8vIFVuZG9jdW1lbnRl ZC4gRGVidWcgb25seS4KKyAgICAgICAgZXZlLl9ldmVudHMgPSBldmVudHM7 CisgICAgLypcCisgICAgICogZXZlLmxpc3RlbmVycworICAgICBbIG1ldGhv ZCBdCisKKyAgICAgKiBJbnRlcm5hbCBtZXRob2Qgd2hpY2ggZ2l2ZXMgeW91 IGFycmF5IG9mIGFsbCBldmVudCBoYW5kbGVycyB0aGF0IHdpbGwgYmUgdHJp Z2dlcmVkIGJ5IHRoZSBnaXZlbiBgbmFtZWAuCisKKyAgICAgPiBBcmd1bWVu dHMKKworICAgICAtIG5hbWUgKHN0cmluZykgbmFtZSBvZiB0aGUgZXZlbnQs IGRvdCAoYC5gKSBvciBzbGFzaCAoYC9gKSBzZXBhcmF0ZWQKKworICAgICA9 IChhcnJheSkgYXJyYXkgb2YgZXZlbnQgaGFuZGxlcnMKKyAgICBcKi8KKyAg ICBldmUubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAg dmFyIG5hbWVzID0gbmFtZS5zcGxpdChzZXBhcmF0b3IpLAorICAgICAgICAg ICAgZSA9IGV2ZW50cywKKyAgICAgICAgICAgIGl0ZW0sCisgICAgICAgICAg ICBpdGVtcywKKyAgICAgICAgICAgIGssCisgICAgICAgICAgICBpLAorICAg ICAgICAgICAgaWksCisgICAgICAgICAgICBqLAorICAgICAgICAgICAgamos CisgICAgICAgICAgICBuZXMsCisgICAgICAgICAgICBlcyA9IFtlXSwKKyAg ICAgICAgICAgIG91dCA9IFtdOworICAgICAgICBmb3IgKGkgPSAwLCBpaSA9 IG5hbWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIG5l cyA9IFtdOworICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBlcy5sZW5n dGg7IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAgICAgZSA9IGVzW2pd Lm47CisgICAgICAgICAgICAgICAgaXRlbXMgPSBbZVtuYW1lc1tpXV0sIGVb d2lsZGNhcmRdXTsKKyAgICAgICAgICAgICAgICBrID0gMjsKKyAgICAgICAg ICAgICAgICB3aGlsZSAoay0tKSB7CisgICAgICAgICAgICAgICAgICAgIGl0 ZW0gPSBpdGVtc1trXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0p IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lcy5wdXNoKGl0ZW0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdChpdGVt LmYgfHwgW10pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZXMgPSBuZXM7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICB9OworICAg IAorICAgIC8qXAorICAgICAqIGV2ZS5vbgorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogQmluZHMgZ2l2ZW4gZXZlbnQgaGFuZGxlciB3aXRo IGEgZ2l2ZW4gbmFtZS4gWW91IGNhbiB1c2Ugd2lsZGNhcmRzIOKAnGAqYOKA nSBmb3IgdGhlIG5hbWVzOgorICAgICB8IGV2ZS5vbigiKi51bmRlci4qIiwg Zik7CisgICAgIHwgZXZlKCJtb3VzZS51bmRlci5mbG9vciIpOyAvLyB0cmln Z2VycyBmCisgICAgICogVXNlIEBldmUgdG8gdHJpZ2dlciB0aGUgbGlzdGVu ZXIuCisgICAgICoqCisgICAgID4gQXJndW1lbnRzCisgICAgICoqCisgICAg IC0gbmFtZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSBldmVudCwgZG90IChgLmAp IG9yIHNsYXNoIChgL2ApIHNlcGFyYXRlZCwgd2l0aCBvcHRpb25hbCB3aWxk Y2FyZHMKKyAgICAgLSBmIChmdW5jdGlvbikgZXZlbnQgaGFuZGxlciBmdW5j dGlvbgorICAgICAqKgorICAgICA9IChmdW5jdGlvbikgcmV0dXJuZWQgZnVu Y3Rpb24gYWNjZXB0cyBhIHNpbmdsZSBudW1lcmljIHBhcmFtZXRlciB0aGF0 IHJlcHJlc2VudHMgei1pbmRleCBvZiB0aGUgaGFuZGxlci4gSXQgaXMgYW4g b3B0aW9uYWwgZmVhdHVyZSBhbmQgb25seSB1c2VkIHdoZW4geW91IG5lZWQg dG8gZW5zdXJlIHRoYXQgc29tZSBzdWJzZXQgb2YgaGFuZGxlcnMgd2lsbCBi ZSBpbnZva2VkIGluIGEgZ2l2ZW4gb3JkZXIsIGRlc3BpdGUgb2YgdGhlIG9y ZGVyIG9mIGFzc2lnbm1lbnQuIAorICAgICA+IEV4YW1wbGU6CisgICAgIHwg ZXZlLm9uKCJtb3VzZSIsIGVhdEl0KSgyKTsKKyAgICAgfCBldmUub24oIm1v dXNlIiwgc2NyZWFtKTsKKyAgICAgfCBldmUub24oIm1vdXNlIiwgY2F0Y2hJ dCkoMSk7CisgICAgICogVGhpcyB3aWxsIGVuc3VyZSB0aGF0IGBjYXRjaEl0 YCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYGVhdEl0YC4KKyAg ICAgKgorICAgICAqIElmIHlvdSB3YW50IHRvIHB1dCB5b3VyIGhhbmRsZXIg YmVmb3JlIG5vbi1pbmRleGVkIGhhbmRsZXJzLCBzcGVjaWZ5IGEgbmVnYXRp dmUgdmFsdWUuCisgICAgICogTm90ZTogSSBhc3N1bWUgbW9zdCBvZiB0aGUg dGltZSB5b3UgZG9u4oCZdCBuZWVkIHRvIHdvcnJ5IGFib3V0IHotaW5kZXgs IGJ1dCBpdOKAmXMgbmljZSB0byBoYXZlIHRoaXMgZmVhdHVyZSDigJxqdXN0 IGluIGNhc2XigJ0uCisgICAgXCovCisgICAgZXZlLm9uID0gZnVuY3Rpb24g KG5hbWUsIGYpIHsKKyAgICAgICAgbmFtZSA9IFN0cmluZyhuYW1lKTsKKyAg ICAgICAgaWYgKHR5cGVvZiBmICE9ICJmdW5jdGlvbiIpIHsKKyAgICAgICAg ICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTsKKyAgICAgICAgfQorICAgICAg ICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KGNvbWFzZXBhcmF0b3IpOworICAg ICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICAoZnVuY3Rpb24gKG5hbWUpIHsKKyAg ICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KHNlcGFyYXRv ciksCisgICAgICAgICAgICAgICAgICAgIGUgPSBldmVudHMsCisgICAgICAg ICAgICAgICAgICAgIGV4aXN0OworICAgICAgICAgICAgICAgIGZvciAodmFy IGkgPSAwLCBpaSA9IG5hbWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAg ICAgICAgICAgICAgICAgICAgZSA9IGUubjsKKyAgICAgICAgICAgICAgICAg ICAgZSA9IGUuaGFzT3duUHJvcGVydHkobmFtZXNbaV0pICYmIGVbbmFtZXNb aV1dIHx8IChlW25hbWVzW2ldXSA9IHtuOiB7fX0pOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBlLmYgPSBlLmYgfHwgW107CisgICAg ICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBlLmYubGVuZ3RoOyBpIDwg aWk7IGkrKykgaWYgKGUuZltpXSA9PSBmKSB7CisgICAgICAgICAgICAgICAg ICAgIGV4aXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICFleGlzdCAm JiBlLmYucHVzaChmKTsKKyAgICAgICAgICAgIH0obmFtZXNbaV0pKTsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHpJbmRleCkgewor ICAgICAgICAgICAgaWYgKCt6SW5kZXggPT0gK3pJbmRleCkgeworICAgICAg ICAgICAgICAgIGYuekluZGV4ID0gK3pJbmRleDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfTsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2ZS5mCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGZ1bmN0 aW9uIHRoYXQgd2lsbCBmaXJlIGdpdmVuIGV2ZW50IHdpdGggb3B0aW9uYWwg YXJndW1lbnRzLgorICAgICAqIEFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFz c2VkIHRvIHRoZSByZXN1bHQgZnVuY3Rpb24gd2lsbCBiZSBhbHNvCisgICAg ICogY29uY2F0ZWQgdG8gdGhlIGxpc3Qgb2YgZmluYWwgYXJndW1lbnRzLgor ICAgICB8IGVsLm9uY2xpY2sgPSBldmUuZigiY2xpY2siLCAxLCAyKTsKKyAg ICAgfCBldmUub24oImNsaWNrIiwgZnVuY3Rpb24gKGEsIGIsIGMpIHsKKyAg ICAgfCAgICAgY29uc29sZS5sb2coYSwgYiwgYyk7IC8vIDEsIDIsIFtldmVu dCBvYmplY3RdCisgICAgIHwgfSk7CisgICAgID4gQXJndW1lbnRzCisgICAg IC0gZXZlbnQgKHN0cmluZykgZXZlbnQgbmFtZQorICAgICAtIHZhcmFyZ3Mg KOKApikgYW5kIGFueSBvdGhlciBhcmd1bWVudHMKKyAgICAgPSAoZnVuY3Rp b24pIHBvc3NpYmxlIGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24KKyAgICBcKi8K KyAgICBldmUuZiA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICB2YXIg YXR0cnMgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7CisgICAgICAg IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBldmUuYXBwbHko bnVsbCwgW2V2ZW50LCBudWxsXS5jb25jYXQoYXR0cnMpLmNvbmNhdChbXS5z bGljZS5jYWxsKGFyZ3VtZW50cywgMCkpKTsKKyAgICAgICAgfTsKKyAgICB9 OworICAgIC8qXAorICAgICAqIGV2ZS5zdG9wCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBJcyB1c2VkIGluc2lkZSBhbiBldmVudCBoYW5k bGVyIHRvIHN0b3AgdGhlIGV2ZW50LCBwcmV2ZW50aW5nIGFueSBzdWJzZXF1 ZW50IGxpc3RlbmVycyBmcm9tIGZpcmluZy4KKyAgICBcKi8KKyAgICBldmUu c3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc3RvcCA9IDE7CisgICAg fTsKKyAgICAvKlwKKyAgICAgKiBldmUubnQKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIENvdWxkIGJlIHVzZWQgaW5zaWRlIGV2ZW50IGhh bmRsZXIgdG8gZmlndXJlIG91dCBhY3R1YWwgbmFtZSBvZiB0aGUgZXZlbnQu CisgICAgICoqCisgICAgID4gQXJndW1lbnRzCisgICAgICoqCisgICAgIC0g c3VibmFtZSAoc3RyaW5nKSAjb3B0aW9uYWwgc3VibmFtZSBvZiB0aGUgZXZl bnQKKyAgICAgKioKKyAgICAgPSAoc3RyaW5nKSBuYW1lIG9mIHRoZSBldmVu dCwgaWYgYHN1Ym5hbWVgIGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgKiBvcgor ICAgICA9IChib29sZWFuKSBgdHJ1ZWAsIGlmIGN1cnJlbnQgZXZlbnTigJlz IG5hbWUgY29udGFpbnMgYHN1Ym5hbWVgCisgICAgXCovCisgICAgZXZlLm50 ID0gZnVuY3Rpb24gKHN1Ym5hbWUpIHsKKyAgICAgICAgaWYgKHN1Ym5hbWUp IHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCIoPzpcXC58XFwv fF4pIiArIHN1Ym5hbWUgKyAiKD86XFwufFxcL3wkKSIpLnRlc3QoY3VycmVu dF9ldmVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGN1cnJlbnRf ZXZlbnQ7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUubnRzCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDb3VsZCBiZSB1c2VkIGlu c2lkZSBldmVudCBoYW5kbGVyIHRvIGZpZ3VyZSBvdXQgYWN0dWFsIG5hbWUg b2YgdGhlIGV2ZW50LgorICAgICAqKgorICAgICAqKgorICAgICA9IChhcnJh eSkgbmFtZXMgb2YgdGhlIGV2ZW50CisgICAgXCovCisgICAgZXZlLm50cyA9 IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRfZXZlbnQu c3BsaXQoc2VwYXJhdG9yKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2 ZS5vZmYKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92 ZXMgZ2l2ZW4gZnVuY3Rpb24gZnJvbSB0aGUgbGlzdCBvZiBldmVudCBsaXN0 ZW5lcnMgYXNzaWduZWQgdG8gZ2l2ZW4gbmFtZS4KKyAgICAgKiBJZiBubyBh cmd1bWVudHMgc3BlY2lmaWVkIGFsbCB0aGUgZXZlbnRzIHdpbGwgYmUgY2xl YXJlZC4KKyAgICAgKioKKyAgICAgPiBBcmd1bWVudHMKKyAgICAgKioKKyAg ICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2YgdGhlIGV2ZW50LCBkb3QgKGAu YCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJhdGVkLCB3aXRoIG9wdGlvbmFsIHdp bGRjYXJkcworICAgICAtIGYgKGZ1bmN0aW9uKSBldmVudCBoYW5kbGVyIGZ1 bmN0aW9uCisgICAgXCovCisgICAgLypcCisgICAgICogZXZlLnVuYmluZAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBldmUub2Zm CisgICAgXCovCisgICAgZXZlLm9mZiA9IGV2ZS51bmJpbmQgPSBmdW5jdGlv biAobmFtZSwgZikgeworICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAg ICAgIGV2ZS5fZXZlbnRzID0gZXZlbnRzID0ge246IHt9fTsKKyAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZXMgPSBu YW1lLnNwbGl0KGNvbWFzZXBhcmF0b3IpOworICAgICAgICBpZiAobmFtZXMu bGVuZ3RoID4gMSkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg ICAgIGV2ZS5vZmYobmFtZXNbaV0sIGYpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5hbWVzID0g bmFtZS5zcGxpdChzZXBhcmF0b3IpOworICAgICAgICB2YXIgZSwKKyAgICAg ICAgICAgIGtleSwKKyAgICAgICAgICAgIHNwbGljZSwKKyAgICAgICAgICAg IGksIGlpLCBqLCBqaiwKKyAgICAgICAgICAgIGN1ciA9IFtldmVudHNdOwor ICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IG5hbWVzLmxlbmd0aDsgaSA8IGlp OyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjdXIubGVu Z3RoOyBqICs9IHNwbGljZS5sZW5ndGggLSAyKSB7CisgICAgICAgICAgICAg ICAgc3BsaWNlID0gW2osIDFdOworICAgICAgICAgICAgICAgIGUgPSBjdXJb al0ubjsKKyAgICAgICAgICAgICAgICBpZiAobmFtZXNbaV0gIT0gd2lsZGNh cmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVbbmFtZXNbaV1dKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBzcGxpY2UucHVzaChlW25hbWVz W2ldXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBl KSBpZiAoZVtoYXNdKGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHNwbGljZS5wdXNoKGVba2V5XSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3VyLnNwbGlj ZS5hcHBseShjdXIsIHNwbGljZSk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjdXIubGVuZ3RoOyBpIDwg aWk7IGkrKykgeworICAgICAgICAgICAgZSA9IGN1cltpXTsKKyAgICAgICAg ICAgIHdoaWxlIChlLm4pIHsKKyAgICAgICAgICAgICAgICBpZiAoZikgewor ICAgICAgICAgICAgICAgICAgICBpZiAoZS5mKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGUuZi5sZW5ndGg7IGogPCBq ajsgaisrKSBpZiAoZS5mW2pdID09IGYpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlLmYuc3BsaWNlKGosIDEpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICAgICAgIWUuZi5sZW5ndGggJiYgZGVs ZXRlIGUuZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBmb3IgKGtleSBpbiBlLm4pIGlmIChlLm5baGFzXShrZXkpICYm IGUubltrZXldLmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBm dW5jcyA9IGUubltrZXldLmY7CisgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGogPSAwLCBqaiA9IGZ1bmNzLmxlbmd0aDsgaiA8IGpqOyBqKyspIGlm IChmdW5jc1tqXSA9PSBmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnVuY3Muc3BsaWNlKGosIDEpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgIWZ1bmNzLmxlbmd0aCAmJiBkZWxldGUg ZS5uW2tleV0uZjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBl LmY7CisgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGUubikgaWYg KGUubltoYXNdKGtleSkgJiYgZS5uW2tleV0uZikgeworICAgICAgICAgICAg ICAgICAgICAgICAgZGVsZXRlIGUubltrZXldLmY7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ZSA9IGUubjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cisg ICAgLypcCisgICAgICogZXZlLm9uY2UKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEJpbmRzIGdpdmVuIGV2ZW50IGhhbmRsZXIgd2l0aCBh IGdpdmVuIG5hbWUgdG8gb25seSBydW4gb25jZSB0aGVuIHVuYmluZCBpdHNl bGYuCisgICAgIHwgZXZlLm9uY2UoImxvZ2luIiwgZik7CisgICAgIHwgZXZl KCJsb2dpbiIpOyAvLyB0cmlnZ2VycyBmCisgICAgIHwgZXZlKCJsb2dpbiIp OyAvLyBubyBsaXN0ZW5lcnMKKyAgICAgKiBVc2UgQGV2ZSB0byB0cmlnZ2Vy IHRoZSBsaXN0ZW5lci4KKyAgICAgKioKKyAgICAgPiBBcmd1bWVudHMKKyAg ICAgKioKKyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2YgdGhlIGV2ZW50 LCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJhdGVkLCB3aXRoIG9w dGlvbmFsIHdpbGRjYXJkcworICAgICAtIGYgKGZ1bmN0aW9uKSBldmVudCBo YW5kbGVyIGZ1bmN0aW9uCisgICAgICoqCisgICAgID0gKGZ1bmN0aW9uKSBz YW1lIHJldHVybiBmdW5jdGlvbiBhcyBAZXZlLm9uCisgICAgXCovCisgICAg ZXZlLm9uY2UgPSBmdW5jdGlvbiAobmFtZSwgZikgeworICAgICAgICB2YXIg ZjIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBldmUudW5iaW5kKG5h bWUsIGYyKTsKKyAgICAgICAgICAgIHJldHVybiBmLmFwcGx5KHRoaXMsIGFy Z3VtZW50cyk7CisgICAgICAgIH07CisgICAgICAgIHJldHVybiBldmUub24o bmFtZSwgZjIpOworICAgIH07CisgICAgLypcCisgICAgICogZXZlLnZlcnNp b24KKyAgICAgWyBwcm9wZXJ0eSAoc3RyaW5nKSBdCisgICAgICoqCisgICAg ICogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgIFwqLwor ICAgIGV2ZS52ZXJzaW9uID0gdmVyc2lvbjsKKyAgICBldmUudG9TdHJpbmcg PSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAiWW91IGFyZSBydW5u aW5nIEV2ZSAiICsgdmVyc2lvbjsKKyAgICB9OworICAgICh0eXBlb2YgbW9k dWxlICE9ICJ1bmRlZmluZWQiICYmIG1vZHVsZS5leHBvcnRzKSA/IChtb2R1 bGUuZXhwb3J0cyA9IGV2ZSkgOiAodHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0 aW9uIiAmJiBkZWZpbmUuYW1kID8gKGRlZmluZSgiZXZlIiwgW10sIGZ1bmN0 aW9uKCkgeyByZXR1cm4gZXZlOyB9KSkgOiAoZ2xvYi5ldmUgPSBldmUpKTsK K30pKHRoaXMpOworCisoZnVuY3Rpb24gKGdsb2IsIGZhY3RvcnkpIHsKKyAg ICAvLyBBTUQgc3VwcG9ydAorICAgIGlmICh0eXBlb2YgZGVmaW5lID09ICJm dW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgeworICAgICAgICAvLyBEZWZpbmUg YXMgYW4gYW5vbnltb3VzIG1vZHVsZQorICAgICAgICBkZWZpbmUoWyJldmUi XSwgZnVuY3Rpb24gKGV2ZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhY3Rv cnkoZ2xvYiwgZXZlKTsKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIGlmICh0 eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVkJykgeworICAgICAgICAvLyBO ZXh0IGZvciBOb2RlLmpzIG9yIENvbW1vbkpTCisgICAgICAgIHZhciBldmUg PSByZXF1aXJlKCdldmUnKTsKKyAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBm YWN0b3J5KGdsb2IsIGV2ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g QnJvd3NlciBnbG9iYWxzIChnbG9iIGlzIHdpbmRvdykKKyAgICAgICAgLy8g U25hcCBhZGRzIGl0c2VsZiB0byB3aW5kb3cKKyAgICAgICAgZmFjdG9yeShn bG9iLCBnbG9iLmV2ZSk7CisgICAgfQorfSh3aW5kb3cgfHwgdGhpcywgZnVu Y3Rpb24gKHdpbmRvdywgZXZlKSB7CisKKy8vIENvcHlyaWdodCAoYykgMjAx MyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg dGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl IExpY2Vuc2UgYXQKKy8vIAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xp Y2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyAKKy8vIFVubGVzcyByZXF1aXJlZCBi eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m dHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4 cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK Ky8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgordmFyIG1pbmEg PSAoZnVuY3Rpb24gKGV2ZSkgeworICAgIHZhciBhbmltYXRpb25zID0ge30s CisgICAgcmVxdWVzdEFuaW1GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0 aW9uRnJhbWUgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgd2lu ZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fAorICAgICAgICAg ICAgICAgICAgICAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1l ICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vUmVxdWVz dEFuaW1hdGlvbkZyYW1lICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAg ICAgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lICAgICB8fAorICAg ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoY2FsbGJhY2spIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ss IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICBpc0FycmF5 ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYSkgeworICAgICAgICBy ZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5IHx8CisgICAgICAgICAgICBPYmpl Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT0gIltvYmplY3QgQXJy YXldIjsKKyAgICB9LAorICAgIGlkZ2VuID0gMCwKKyAgICBpZHByZWZpeCA9 ICJNIiArICgrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSwKKyAgICBJRCA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIGlkcHJlZml4ICsgKGlkZ2Vu KyspLnRvU3RyaW5nKDM2KTsKKyAgICB9LAorICAgIGRpZmYgPSBmdW5jdGlv biAoYSwgYiwgQSwgQikgeworICAgICAgICBpZiAoaXNBcnJheShhKSkgewor ICAgICAgICAgICAgcmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBp ID0gMCwgaWkgPSBhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAg ICAgICAgICByZXNbaV0gPSBkaWZmKGFbaV0sIGIsIEFbaV0sIEIpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAg fQorICAgICAgICB2YXIgZGlmID0gKEEgLSBhKSAvIChCIC0gYik7CisgICAg ICAgIHJldHVybiBmdW5jdGlvbiAoYmIpIHsKKyAgICAgICAgICAgIHJldHVy biBhICsgZGlmICogKGJiIC0gYik7CisgICAgICAgIH07CisgICAgfSwKKyAg ICB0aW1lciA9IERhdGUubm93IHx8IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg cmV0dXJuICtuZXcgRGF0ZTsKKyAgICB9LAorICAgIHN0YSA9IGZ1bmN0aW9u ICh2YWwpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAgICBpZiAo dmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBhLnM7CisgICAg ICAgIH0KKyAgICAgICAgdmFyIGRzID0gYS5zIC0gdmFsOworICAgICAgICBh LmIgKz0gYS5kdXIgKiBkczsKKyAgICAgICAgYS5CICs9IGEuZHVyICogZHM7 CisgICAgICAgIGEucyA9IHZhbDsKKyAgICB9LAorICAgIHNwZWVkID0gZnVu Y3Rpb24gKHZhbCkgeworICAgICAgICB2YXIgYSA9IHRoaXM7CisgICAgICAg IGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGEuc3Bk OworICAgICAgICB9CisgICAgICAgIGEuc3BkID0gdmFsOworICAgIH0sCisg ICAgZHVyYXRpb24gPSBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgIHZhciBh ID0gdGhpczsKKyAgICAgICAgaWYgKHZhbCA9PSBudWxsKSB7CisgICAgICAg ICAgICByZXR1cm4gYS5kdXI7CisgICAgICAgIH0KKyAgICAgICAgYS5zID0g YS5zICogdmFsIC8gYS5kdXI7CisgICAgICAgIGEuZHVyID0gdmFsOworICAg IH0sCisgICAgc3RvcGl0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIg YSA9IHRoaXM7CisgICAgICAgIGRlbGV0ZSBhbmltYXRpb25zW2EuaWRdOwor ICAgICAgICBhLnVwZGF0ZSgpOworICAgICAgICBldmUoIm1pbmEuc3RvcC4i ICsgYS5pZCwgYSk7CisgICAgfSwKKyAgICBwYXVzZSA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAgICBpZiAoYS5wZGlm KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg ZGVsZXRlIGFuaW1hdGlvbnNbYS5pZF07CisgICAgICAgIGEudXBkYXRlKCk7 CisgICAgICAgIGEucGRpZiA9IGEuZ2V0KCkgLSBhLmI7CisgICAgfSwKKyAg ICByZXN1bWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhID0gdGhp czsKKyAgICAgICAgaWYgKCFhLnBkaWYpIHsKKyAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgfQorICAgICAgICBhLmIgPSBhLmdldCgpIC0gYS5wZGlm OworICAgICAgICBkZWxldGUgYS5wZGlmOworICAgICAgICBhbmltYXRpb25z W2EuaWRdID0gYTsKKyAgICB9LAorICAgIHVwZGF0ZSA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgdmFyIGEgPSB0aGlzLAorICAgICAgICAgICAgcmVzOwor ICAgICAgICBpZiAoaXNBcnJheShhLnN0YXJ0KSkgeworICAgICAgICAgICAg cmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBh LnN0YXJ0Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAg ICByZXNbal0gPSArYS5zdGFydFtqXSArCisgICAgICAgICAgICAgICAgICAg IChhLmVuZFtqXSAtIGEuc3RhcnRbal0pICogYS5lYXNpbmcoYS5zKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJl cyA9ICthLnN0YXJ0ICsgKGEuZW5kIC0gYS5zdGFydCkgKiBhLmVhc2luZyhh LnMpOworICAgICAgICB9CisgICAgICAgIGEuc2V0KHJlcyk7CisgICAgfSwK KyAgICBmcmFtZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGxlbiA9 IDA7CisgICAgICAgIGZvciAodmFyIGkgaW4gYW5pbWF0aW9ucykgaWYgKGFu aW1hdGlvbnMuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgIHZh ciBhID0gYW5pbWF0aW9uc1tpXSwKKyAgICAgICAgICAgICAgICBiID0gYS5n ZXQoKSwKKyAgICAgICAgICAgICAgICByZXM7CisgICAgICAgICAgICBsZW4r KzsKKyAgICAgICAgICAgIGEucyA9IChiIC0gYS5iKSAvIChhLmR1ciAvIGEu c3BkKTsKKyAgICAgICAgICAgIGlmIChhLnMgPj0gMSkgeworICAgICAgICAg ICAgICAgIGRlbGV0ZSBhbmltYXRpb25zW2ldOworICAgICAgICAgICAgICAg IGEucyA9IDE7CisgICAgICAgICAgICAgICAgbGVuLS07CisgICAgICAgICAg ICAgICAgKGZ1bmN0aW9uIChhKSB7CisgICAgICAgICAgICAgICAgICAgIHNl dFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgZXZlKCJtaW5hLmZpbmlzaC4iICsgYS5pZCwgYSk7CisgICAgICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0oYSkpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgYS51cGRhdGUoKTsKKyAgICAgICAgfQor ICAgICAgICBsZW4gJiYgcmVxdWVzdEFuaW1GcmFtZShmcmFtZSk7CisgICAg fSwKKyAgICAvKlwKKyAgICAgKiBtaW5hCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBHZW5lcmljIGFuaW1hdGlvbiBvZiBudW1iZXJzCisg ICAgICoqCisgICAgIC0gYSAobnVtYmVyKSBzdGFydCBfc2xhdmVfIG51bWJl cgorICAgICAtIEEgKG51bWJlcikgZW5kIF9zbGF2ZV8gbnVtYmVyCisgICAg IC0gYiAobnVtYmVyKSBzdGFydCBfbWFzdGVyXyBudW1iZXIgKHN0YXJ0IHRp bWUgaW4gZ2VuZXJhbCBjYXNlKQorICAgICAtIEIgKG51bWJlcikgZW5kIF9t YXN0ZXJfIG51bWJlciAoZW5kIHRpbWUgaW4gZ2VyZWFsIGNhc2UpCisgICAg IC0gZ2V0IChmdW5jdGlvbikgZ2V0dGVyIG9mIF9tYXN0ZXJfIG51bWJlciAo c2VlIEBtaW5hLnRpbWUpCisgICAgIC0gc2V0IChmdW5jdGlvbikgc2V0dGVy IG9mIF9zbGF2ZV8gbnVtYmVyCisgICAgIC0gZWFzaW5nIChmdW5jdGlvbikg I29wdGlvbmFsIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVsdCBpcyBAbWluYS5s aW5lYXIKKyAgICAgPSAob2JqZWN0KSBhbmltYXRpb24gZGVzY3JpcHRvcgor ICAgICBvIHsKKyAgICAgbyAgICAgICAgIGlkIChzdHJpbmcpIGFuaW1hdGlv biBpZCwKKyAgICAgbyAgICAgICAgIHN0YXJ0IChudW1iZXIpIHN0YXJ0IF9z bGF2ZV8gbnVtYmVyLAorICAgICBvICAgICAgICAgZW5kIChudW1iZXIpIGVu ZCBfc2xhdmVfIG51bWJlciwKKyAgICAgbyAgICAgICAgIGIgKG51bWJlcikg c3RhcnQgX21hc3Rlcl8gbnVtYmVyLAorICAgICBvICAgICAgICAgcyAobnVt YmVyKSBhbmltYXRpb24gc3RhdHVzICgwLi4xKSwKKyAgICAgbyAgICAgICAg IGR1ciAobnVtYmVyKSBhbmltYXRpb24gZHVyYXRpb24sCisgICAgIG8gICAg ICAgICBzcGQgKG51bWJlcikgYW5pbWF0aW9uIHNwZWVkLAorICAgICBvICAg ICAgICAgZ2V0IChmdW5jdGlvbikgZ2V0dGVyIG9mIF9tYXN0ZXJfIG51bWJl ciAoc2VlIEBtaW5hLnRpbWUpLAorICAgICBvICAgICAgICAgc2V0IChmdW5j dGlvbikgc2V0dGVyIG9mIF9zbGF2ZV8gbnVtYmVyLAorICAgICBvICAgICAg ICAgZWFzaW5nIChmdW5jdGlvbikgZWFzaW5nIGZ1bmN0aW9uLCBkZWZhdWx0 IGlzIEBtaW5hLmxpbmVhciwKKyAgICAgbyAgICAgICAgIHN0YXR1cyAoZnVu Y3Rpb24pIHN0YXR1cyBnZXR0ZXIvc2V0dGVyLAorICAgICBvICAgICAgICAg c3BlZWQgKGZ1bmN0aW9uKSBzcGVlZCBnZXR0ZXIvc2V0dGVyLAorICAgICBv ICAgICAgICAgZHVyYXRpb24gKGZ1bmN0aW9uKSBkdXJhdGlvbiBnZXR0ZXIv c2V0dGVyLAorICAgICBvICAgICAgICAgc3RvcCAoZnVuY3Rpb24pIGFuaW1h dGlvbiBzdG9wcGVyCisgICAgIG8gICAgICAgICBwYXVzZSAoZnVuY3Rpb24p IHBhdXNlcyB0aGUgYW5pbWF0aW9uCisgICAgIG8gICAgICAgICByZXN1bWUg KGZ1bmN0aW9uKSByZXN1bWVzIHRoZSBhbmltYXRpb24KKyAgICAgbyAgICAg ICAgIHVwZGF0ZSAoZnVuY3Rpb24pIGNhbGxlcyBzZXR0ZXIgd2l0aCB0aGUg cmlnaHQgdmFsdWUgb2YgdGhlIGFuaW1hdGlvbgorICAgICBvIH0KKyAgICBc Ki8KKyAgICBtaW5hID0gZnVuY3Rpb24gKGEsIEEsIGIsIEIsIGdldCwgc2V0 LCBlYXNpbmcpIHsKKyAgICAgICAgdmFyIGFuaW0gPSB7CisgICAgICAgICAg ICBpZDogSUQoKSwKKyAgICAgICAgICAgIHN0YXJ0OiBhLAorICAgICAgICAg ICAgZW5kOiBBLAorICAgICAgICAgICAgYjogYiwKKyAgICAgICAgICAgIHM6 IDAsCisgICAgICAgICAgICBkdXI6IEIgLSBiLAorICAgICAgICAgICAgc3Bk OiAxLAorICAgICAgICAgICAgZ2V0OiBnZXQsCisgICAgICAgICAgICBzZXQ6 IHNldCwKKyAgICAgICAgICAgIGVhc2luZzogZWFzaW5nIHx8IG1pbmEubGlu ZWFyLAorICAgICAgICAgICAgc3RhdHVzOiBzdGEsCisgICAgICAgICAgICBz cGVlZDogc3BlZWQsCisgICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24s CisgICAgICAgICAgICBzdG9wOiBzdG9waXQsCisgICAgICAgICAgICBwYXVz ZTogcGF1c2UsCisgICAgICAgICAgICByZXN1bWU6IHJlc3VtZSwKKyAgICAg ICAgICAgIHVwZGF0ZTogdXBkYXRlCisgICAgICAgIH07CisgICAgICAgIGFu aW1hdGlvbnNbYW5pbS5pZF0gPSBhbmltOworICAgICAgICB2YXIgbGVuID0g MCwgaTsKKyAgICAgICAgZm9yIChpIGluIGFuaW1hdGlvbnMpIGlmIChhbmlt YXRpb25zLmhhc093blByb3BlcnR5KGkpKSB7CisgICAgICAgICAgICBsZW4r KzsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gMikgeworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg IGxlbiA9PSAxICYmIHJlcXVlc3RBbmltRnJhbWUoZnJhbWUpOworICAgICAg ICByZXR1cm4gYW5pbTsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEu dGltZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJu cyB0aGUgY3VycmVudCB0aW1lLiBFcXVpdmFsZW50IHRvOgorICAgICB8IGZ1 bmN0aW9uICgpIHsKKyAgICAgfCAgICAgcmV0dXJuIChuZXcgRGF0ZSkuZ2V0 VGltZSgpOworICAgICB8IH0KKyAgICBcKi8KKyAgICBtaW5hLnRpbWUgPSB0 aW1lcjsKKyAgICAvKlwKKyAgICAgKiBtaW5hLmdldEJ5SWQKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4gYW5pbWF0aW9u IGJ5IGl0cyBpZAorICAgICAtIGlkIChzdHJpbmcpIGFuaW1hdGlvbidzIGlk CisgICAgID0gKG9iamVjdCkgU2VlIEBtaW5hCisgICAgXCovCisgICAgbWlu YS5nZXRCeUlkID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAgIHJldHVybiBh bmltYXRpb25zW2lkXSB8fCBudWxsOworICAgIH07CisKKyAgICAvKlwKKyAg ICAgKiBtaW5hLmxpbmVhcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogRGVmYXVsdCBsaW5lYXIgZWFzaW5nCisgICAgIC0gbiAobnVtYmVy KSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAg ICBcKi8KKyAgICBtaW5hLmxpbmVhciA9IGZ1bmN0aW9uIChuKSB7CisgICAg ICAgIHJldHVybiBuOworICAgIH07CisgICAgLypcCisgICAgICogbWluYS5l YXNlb3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBFYXNl b3V0IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQorICAg ICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWluYS5l YXNlb3V0ID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgcmV0dXJuIE1hdGgu cG93KG4sIDEuNyk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBtaW5hLmVh c2VpbgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWFzZWlu IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQorICAgICA9 IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWluYS5lYXNl aW4gPSBmdW5jdGlvbiAobikgeworICAgICAgICByZXR1cm4gTWF0aC5wb3co biwgLjQ4KTsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEuZWFzZWlu b3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBFYXNlaW5v dXQgZWFzaW5nCisgICAgIC0gbiAobnVtYmVyKSBpbnB1dCAwLi4xCisgICAg ID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAgICBcKi8KKyAgICBtaW5hLmVh c2Vpbm91dCA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAgIGlmIChuID09IDEp IHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAg IGlmIChuID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg ICB9CisgICAgICAgIHZhciBxID0gLjQ4IC0gbiAvIDEuMDQsCisgICAgICAg ICAgICBRID0gTWF0aC5zcXJ0KC4xNzM0ICsgcSAqIHEpLAorICAgICAgICAg ICAgeCA9IFEgLSBxLAorICAgICAgICAgICAgWCA9IE1hdGgucG93KE1hdGgu YWJzKHgpLCAxIC8gMykgKiAoeCA8IDAgPyAtMSA6IDEpLAorICAgICAgICAg ICAgeSA9IC1RIC0gcSwKKyAgICAgICAgICAgIFkgPSBNYXRoLnBvdyhNYXRo LmFicyh5KSwgMSAvIDMpICogKHkgPCAwID8gLTEgOiAxKSwKKyAgICAgICAg ICAgIHQgPSBYICsgWSArIC41OworICAgICAgICByZXR1cm4gKDEgLSB0KSAq IDMgKiB0ICogdCArIHQgKiB0ICogdDsKKyAgICB9OworICAgIC8qXAorICAg ICAqIG1pbmEuYmFja2luCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBCYWNraW4gZWFzaW5nCisgICAgIC0gbiAobnVtYmVyKSBpbnB1dCAw Li4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAgICBcKi8KKyAg ICBtaW5hLmJhY2tpbiA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAgIGlmIChu ID09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg ICAgICAgIHZhciBzID0gMS43MDE1ODsKKyAgICAgICAgcmV0dXJuIG4gKiBu ICogKChzICsgMSkgKiBuIC0gcyk7CisgICAgfTsKKyAgICAvKlwKKyAgICAg KiBtaW5hLmJhY2tvdXQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIEJhY2tvdXQgZWFzaW5nCisgICAgIC0gbiAobnVtYmVyKSBpbnB1dCAw Li4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEKKyAgICBcKi8KKyAg ICBtaW5hLmJhY2tvdXQgPSBmdW5jdGlvbiAobikgeworICAgICAgICBpZiAo biA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor ICAgICAgICBuID0gbiAtIDE7CisgICAgICAgIHZhciBzID0gMS43MDE1ODsK KyAgICAgICAgcmV0dXJuIG4gKiBuICogKChzICsgMSkgKiBuICsgcykgKyAx OworICAgIH07CisgICAgLypcCisgICAgICogbWluYS5lbGFzdGljCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBFbGFzdGljIGVhc2luZwor ICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQorICAgICA9IChudW1iZXIp IG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWluYS5lbGFzdGljID0gZnVu Y3Rpb24gKG4pIHsKKyAgICAgICAgaWYgKG4gPT0gISFuKSB7CisgICAgICAg ICAgICByZXR1cm4gbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTWF0 aC5wb3coMiwgLTEwICogbikgKiBNYXRoLnNpbigobiAtIC4wNzUpICoKKyAg ICAgICAgICAgICgyICogTWF0aC5QSSkgLyAuMykgKyAxOworICAgIH07Cisg ICAgLypcCisgICAgICogbWluYS5ib3VuY2UKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIEJvdW5jZSBlYXNpbmcKKyAgICAgLSBuIChudW1i ZXIpIGlucHV0IDAuLjEKKyAgICAgPSAobnVtYmVyKSBvdXRwdXQgMC4uMQor ICAgIFwqLworICAgIG1pbmEuYm91bmNlID0gZnVuY3Rpb24gKG4pIHsKKyAg ICAgICAgdmFyIHMgPSA3LjU2MjUsCisgICAgICAgICAgICBwID0gMi43NSwK KyAgICAgICAgICAgIGw7CisgICAgICAgIGlmIChuIDwgKDEgLyBwKSkgewor ICAgICAgICAgICAgbCA9IHMgKiBuICogbjsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIGlmIChuIDwgKDIgLyBwKSkgeworICAgICAgICAgICAg ICAgIG4gLT0gKDEuNSAvIHApOworICAgICAgICAgICAgICAgIGwgPSBzICog biAqIG4gKyAuNzU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIGlmIChuIDwgKDIuNSAvIHApKSB7CisgICAgICAgICAgICAgICAg ICAgIG4gLT0gKDIuMjUgLyBwKTsKKyAgICAgICAgICAgICAgICAgICAgbCA9 IHMgKiBuICogbiArIC45Mzc1OworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIG4gLT0gKDIuNjI1IC8gcCk7CisgICAg ICAgICAgICAgICAgICAgIGwgPSBzICogbiAqIG4gKyAuOTg0Mzc1OworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gbDsKKyAgICB9OworICAgIHdpbmRvdy5taW5hID0gbWlu YTsKKyAgICByZXR1cm4gbWluYTsKK30pKHR5cGVvZiBldmUgPT0gInVuZGVm aW5lZCIgPyBmdW5jdGlvbiAoKSB7fSA6IGV2ZSk7CisvLyBDb3B5cmlnaHQg KGMpIDIwMTMgLSAyMDE1IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0 aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui KTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWlu IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gCisvLyBodHRwOi8vd3d3 LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vIAorLy8gVW5s ZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBp biB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhl IExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK Ky8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBM aWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBl cm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vu c2UuCisKK3ZhciBTbmFwID0gKGZ1bmN0aW9uKHJvb3QpIHsKK1NuYXAudmVy c2lvbiA9ICIwLjQuMCI7CisvKlwKKyAqIFNuYXAKKyBbIG1ldGhvZCBdCisg KioKKyAqIENyZWF0ZXMgYSBkcmF3aW5nIHN1cmZhY2Ugb3Igd3JhcHMgZXhp c3RpbmcgU1ZHIGVsZW1lbnQuCisgKioKKyAtIHdpZHRoIChudW1iZXJ8c3Ry aW5nKSB3aWR0aCBvZiBzdXJmYWNlCisgLSBoZWlnaHQgKG51bWJlcnxzdHJp bmcpIGhlaWdodCBvZiBzdXJmYWNlCisgKiBvcgorIC0gRE9NIChTVkdFbGVt ZW50KSBlbGVtZW50IHRvIGJlIHdyYXBwZWQgaW50byBTbmFwIHN0cnVjdHVy ZQorICogb3IKKyAtIGFycmF5IChhcnJheSkgYXJyYXkgb2YgZWxlbWVudHMg KHdpbGwgcmV0dXJuIHNldCBvZiBlbGVtZW50cykKKyAqIG9yCisgLSBxdWVy eSAoc3RyaW5nKSBDU1MgcXVlcnkgc2VsZWN0b3IKKyA9IChvYmplY3QpIEBF bGVtZW50CitcKi8KK2Z1bmN0aW9uIFNuYXAodywgaCkgeworICAgIGlmICh3 KSB7CisgICAgICAgIGlmICh3Lm5vZGVUeXBlKSB7CisgICAgICAgICAgICBy ZXR1cm4gd3JhcCh3KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXModywg ImFycmF5IikgJiYgU25hcC5zZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBT bmFwLnNldC5hcHBseShTbmFwLCB3KTsKKyAgICAgICAgfQorICAgICAgICBp ZiAodyBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVy biB3OworICAgICAgICB9CisgICAgICAgIGlmIChoID09IG51bGwpIHsKKyAg ICAgICAgICAgIHcgPSBnbG9iLmRvYy5xdWVyeVNlbGVjdG9yKFN0cmluZyh3 KSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcCh3KTsKKyAgICAgICAgfQor ICAgIH0KKyAgICB3ID0gdyA9PSBudWxsID8gIjEwMCUiIDogdzsKKyAgICBo ID0gaCA9PSBudWxsID8gIjEwMCUiIDogaDsKKyAgICByZXR1cm4gbmV3IFBh cGVyKHcsIGgpOworfQorU25hcC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsK KyAgICByZXR1cm4gIlNuYXAgdiIgKyB0aGlzLnZlcnNpb247Cit9OworU25h cC5fID0ge307Cit2YXIgZ2xvYiA9IHsKKyAgICB3aW46IHJvb3Qud2luZG93 LAorICAgIGRvYzogcm9vdC53aW5kb3cuZG9jdW1lbnQKK307CitTbmFwLl8u Z2xvYiA9IGdsb2I7Cit2YXIgaGFzID0gImhhc093blByb3BlcnR5IiwKKyAg ICBTdHIgPSBTdHJpbmcsCisgICAgdG9GbG9hdCA9IHBhcnNlRmxvYXQsCisg ICAgdG9JbnQgPSBwYXJzZUludCwKKyAgICBtYXRoID0gTWF0aCwKKyAgICBt bWF4ID0gbWF0aC5tYXgsCisgICAgbW1pbiA9IG1hdGgubWluLAorICAgIGFi cyA9IG1hdGguYWJzLAorICAgIHBvdyA9IG1hdGgucG93LAorICAgIFBJID0g bWF0aC5QSSwKKyAgICByb3VuZCA9IG1hdGgucm91bmQsCisgICAgRSA9ICIi LAorICAgIFMgPSAiICIsCisgICAgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3Qu cHJvdG90eXBlLnRvU3RyaW5nLAorICAgIElTVVJMID0gL151cmxcKFsnIl0/ KFteXCldKz8pWyciXT9cKSQvaSwKKyAgICBjb2xvdXJSZWdFeHAgPSAvXlxz KigoI1thLWZcZF17Nn0pfCgjW2EtZlxkXXszfSl8cmdiYT9cKFxzKihbXGRc Ll0rJT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltcZFwuXSslPyg/OlxzKixc cypbXGRcLl0rJT8pPylccypcKXxoc2JhP1woXHMqKFtcZFwuXSsoPzpkZWd8 XHhiMHwlKT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltcZFwuXSsoPzolP1xz KixccypbXGRcLl0rKT8lPylccypcKXxoc2xhP1woXHMqKFtcZFwuXSsoPzpk ZWd8XHhiMHwlKT9ccyosXHMqW1xkXC5dKyU/XHMqLFxzKltcZFwuXSsoPzol P1xzKixccypbXGRcLl0rKT8lPylccypcKSlccyokL2ksCisgICAgYmV6aWVy cmcgPSAvXig/OmN1YmljLSk/YmV6aWVyXCgoW14sXSspLChbXixdKyksKFte LF0rKSwoW15cKV0rKVwpLywKKyAgICByZVVSTFZhbHVlID0gL151cmxcKCM/ KFteKV0rKVwpJC8sCisgICAgc2VwYXJhdG9yID0gU25hcC5fLnNlcGFyYXRv ciA9IC9bLFxzXSsvLAorICAgIHdoaXRlc3BhY2UgPSAvW1xzXS9nLAorICAg IGNvbW1hU3BhY2VzID0gL1tcc10qLFtcc10qLywKKyAgICBoc3JnID0ge2hz OiAxLCByZzogMX0sCisgICAgcGF0aENvbW1hbmQgPSAvKFthLXpdKVtccyxd KigoLT9cZCpcLj9cZCooPzplW1wtK10/XGQrKT9bXHNdKiw/W1xzXSopKykv aWcsCisgICAgdENvbW1hbmQgPSAvKFtyc3RtXSlbXHMsXSooKC0/XGQqXC4/ XGQqKD86ZVtcLStdP1xkKyk/W1xzXSosP1tcc10qKSspL2lnLAorICAgIHBh dGhWYWx1ZXMgPSAvKC0/XGQqXC4/XGQqKD86ZVtcLStdP1xcZCspPylbXHNd Kiw/W1xzXSovaWcsCisgICAgaWRnZW4gPSAwLAorICAgIGlkcHJlZml4ID0g IlMiICsgKCtuZXcgRGF0ZSkudG9TdHJpbmcoMzYpLAorICAgIElEID0gZnVu Y3Rpb24gKGVsKSB7CisgICAgICAgIHJldHVybiAoZWwgJiYgZWwudHlwZSA/ IGVsLnR5cGUgOiBFKSArIGlkcHJlZml4ICsgKGlkZ2VuKyspLnRvU3RyaW5n KDM2KTsKKyAgICB9LAorICAgIHhsaW5rID0gImh0dHA6Ly93d3cudzMub3Jn LzE5OTkveGxpbmsiLAorICAgIHhtbG5zID0gImh0dHA6Ly93d3cudzMub3Jn LzIwMDAvc3ZnIiwKKyAgICBodWIgPSB7fSwKKyAgICBVUkwgPSBTbmFwLnVy bCA9IGZ1bmN0aW9uICh1cmwpIHsKKyAgICAgICAgcmV0dXJuICJ1cmwoJyMi ICsgdXJsICsgIicpIjsKKyAgICB9OworCitmdW5jdGlvbiAkKGVsLCBhdHRy KSB7CisgICAgaWYgKGF0dHIpIHsKKyAgICAgICAgaWYgKGVsID09ICIjdGV4 dCIpIHsKKyAgICAgICAgICAgIGVsID0gZ2xvYi5kb2MuY3JlYXRlVGV4dE5v ZGUoYXR0ci50ZXh0IHx8IGF0dHJbIiN0ZXh0Il0gfHwgIiIpOworICAgICAg ICB9CisgICAgICAgIGlmIChlbCA9PSAiI2NvbW1lbnQiKSB7CisgICAgICAg ICAgICBlbCA9IGdsb2IuZG9jLmNyZWF0ZUNvbW1lbnQoYXR0ci50ZXh0IHx8 IGF0dHJbIiN0ZXh0Il0gfHwgIiIpOworICAgICAgICB9CisgICAgICAgIGlm ICh0eXBlb2YgZWwgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIGVsID0g JChlbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBhdHRyID09 ICJzdHJpbmciKSB7CisgICAgICAgICAgICBpZiAoZWwubm9kZVR5cGUgPT0g MSkgeworICAgICAgICAgICAgICAgIGlmIChhdHRyLnN1YnN0cmluZygwLCA2 KSA9PSAieGxpbms6IikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g ZWwuZ2V0QXR0cmlidXRlTlMoeGxpbmssIGF0dHIuc3Vic3RyaW5nKDYpKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGF0dHIu c3Vic3RyaW5nKDAsIDQpID09ICJ4bWw6IikgeworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlTlMoeG1sbnMsIGF0dHIuc3Vi c3RyaW5nKDQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAg IH0gZWxzZSBpZiAoYXR0ciA9PSAidGV4dCIpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gZWwubm9kZVZhbHVlOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpZiAoZWwubm9kZVR5cGUgPT0gMSkgewor ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGF0dHIpIGlmIChhdHRyW2hh c10oa2V5KSkgeworICAgICAgICAgICAgICAgIHZhciB2YWwgPSBTdHIoYXR0 cltrZXldKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsKSB7CisgICAgICAg ICAgICAgICAgICAgIGlmIChrZXkuc3Vic3RyaW5nKDAsIDYpID09ICJ4bGlu azoiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1 dGVOUyh4bGluaywga2V5LnN1YnN0cmluZyg2KSwgdmFsKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkuc3Vic3RyaW5nKDAsIDQpID09 ICJ4bWw6IikgeworICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0 cmlidXRlTlMoeG1sbnMsIGtleS5zdWJzdHJpbmcoNCksIHZhbCk7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWwpOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg KCJ0ZXh0IiBpbiBhdHRyKSB7CisgICAgICAgICAgICBlbC5ub2RlVmFsdWUg PSBhdHRyLnRleHQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg ICBlbCA9IGdsb2IuZG9jLmNyZWF0ZUVsZW1lbnROUyh4bWxucywgZWwpOwor ICAgIH0KKyAgICByZXR1cm4gZWw7Cit9CitTbmFwLl8uJCA9ICQ7CitTbmFw Ll8uaWQgPSBJRDsKK2Z1bmN0aW9uIGdldEF0dHJzKGVsKSB7CisgICAgdmFy IGF0dHJzID0gZWwuYXR0cmlidXRlcywKKyAgICAgICAgbmFtZSwKKyAgICAg ICAgb3V0ID0ge307CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5s ZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoYXR0cnNbaV0ubmFtZXNwYWNl VVJJID09IHhsaW5rKSB7CisgICAgICAgICAgICBuYW1lID0gInhsaW5rOiI7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuYW1lID0gIiI7Cisg ICAgICAgIH0KKyAgICAgICAgbmFtZSArPSBhdHRyc1tpXS5uYW1lOworICAg ICAgICBvdXRbbmFtZV0gPSBhdHRyc1tpXS50ZXh0Q29udGVudDsKKyAgICB9 CisgICAgcmV0dXJuIG91dDsKK30KK2Z1bmN0aW9uIGlzKG8sIHR5cGUpIHsK KyAgICB0eXBlID0gU3RyLnByb3RvdHlwZS50b0xvd2VyQ2FzZS5jYWxsKHR5 cGUpOworICAgIGlmICh0eXBlID09ICJmaW5pdGUiKSB7CisgICAgICAgIHJl dHVybiBpc0Zpbml0ZShvKTsKKyAgICB9CisgICAgaWYgKHR5cGUgPT0gImFy cmF5IiAmJgorICAgICAgICAobyBpbnN0YW5jZW9mIEFycmF5IHx8IEFycmF5 LmlzQXJyYXkgJiYgQXJyYXkuaXNBcnJheShvKSkpIHsKKyAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiAgKHR5cGUgPT0gIm51bGwi ICYmIG8gPT09IG51bGwpIHx8CisgICAgICAgICAgICAodHlwZSA9PSB0eXBl b2YgbyAmJiBvICE9PSBudWxsKSB8fAorICAgICAgICAgICAgKHR5cGUgPT0g Im9iamVjdCIgJiYgbyA9PT0gT2JqZWN0KG8pKSB8fAorICAgICAgICAgICAg b2JqZWN0VG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSkudG9Mb3dlckNh c2UoKSA9PSB0eXBlOworfQorLypcCisgKiBTbmFwLmZvcm1hdAorIFsgbWV0 aG9kIF0KKyAqKgorICogUmVwbGFjZXMgY29uc3RydWN0aW9uIG9mIHR5cGUg YHs8bmFtZT59YCB0byB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudAorICoq CisgLSB0b2tlbiAoc3RyaW5nKSBzdHJpbmcgdG8gZm9ybWF0CisgLSBqc29u IChvYmplY3QpIG9iamVjdCB3aGljaCBwcm9wZXJ0aWVzIGFyZSB1c2VkIGFz IGEgcmVwbGFjZW1lbnQKKyA9IChzdHJpbmcpIGZvcm1hdHRlZCBzdHJpbmcK KyA+IFVzYWdlCisgfCAvLyB0aGlzIGRyYXdzIGEgcmVjdGFuZ3VsYXIgc2hh cGUgZXF1aXZhbGVudCB0byAiTTEwLDIwaDQwdjUwaC00MHoiCisgfCBwYXBl ci5wYXRoKFNuYXAuZm9ybWF0KCJNe3h9LHt5fWh7ZGltLndpZHRofXZ7ZGlt LmhlaWdodH1oe2RpbVsnbmVnYXRpdmUgd2lkdGgnXX16IiwgeworIHwgICAg IHg6IDEwLAorIHwgICAgIHk6IDIwLAorIHwgICAgIGRpbTogeworIHwgICAg ICAgICB3aWR0aDogNDAsCisgfCAgICAgICAgIGhlaWdodDogNTAsCisgfCAg ICAgICAgICJuZWdhdGl2ZSB3aWR0aCI6IC00MAorIHwgICAgIH0KKyB8IH0p KTsKK1wqLworU25hcC5mb3JtYXQgPSAoZnVuY3Rpb24gKCkgeworICAgIHZh ciB0b2tlblJlZ2V4ID0gL1x7KFteXH1dKylcfS9nLAorICAgICAgICBvYmpO b3RhdGlvblJlZ2V4ID0gLyg/Oig/Ol58XC4pKC4rPykoPz1cW3xcLnwkfFwo KXxcWygnfCIpKC4rPylcMlxdKShcKFwpKT8vZywgLy8gbWF0Y2hlcyAueHh4 eHggb3IgWyJ4eHh4eCJdIHRvIHJ1biBvdmVyIG9iamVjdCBwcm9wZXJ0aWVz CisgICAgICAgIHJlcGxhY2VyID0gZnVuY3Rpb24gKGFsbCwga2V5LCBvYmop IHsKKyAgICAgICAgICAgIHZhciByZXMgPSBvYmo7CisgICAgICAgICAgICBr ZXkucmVwbGFjZShvYmpOb3RhdGlvblJlZ2V4LCBmdW5jdGlvbiAoYWxsLCBu YW1lLCBxdW90ZSwgcXVvdGVkTmFtZSwgaXNGdW5jKSB7CisgICAgICAgICAg ICAgICAgbmFtZSA9IG5hbWUgfHwgcXVvdGVkTmFtZTsKKyAgICAgICAgICAg ICAgICBpZiAocmVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChuYW1l IGluIHJlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVz W25hbWVdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIHR5cGVvZiByZXMgPT0gImZ1bmN0aW9uIiAmJiBpc0Z1bmMgJiYg KHJlcyA9IHJlcygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgIHJlcyA9IChyZXMgPT0gbnVsbCB8fCByZXMg PT0gb2JqID8gYWxsIDogcmVzKSArICIiOworICAgICAgICAgICAgcmV0dXJu IHJlczsKKyAgICAgICAgfTsKKyAgICByZXR1cm4gZnVuY3Rpb24gKHN0ciwg b2JqKSB7CisgICAgICAgIHJldHVybiBTdHIoc3RyKS5yZXBsYWNlKHRva2Vu UmVnZXgsIGZ1bmN0aW9uIChhbGwsIGtleSkgeworICAgICAgICAgICAgcmV0 dXJuIHJlcGxhY2VyKGFsbCwga2V5LCBvYmopOworICAgICAgICB9KTsKKyAg ICB9OworfSkoKTsKK2Z1bmN0aW9uIGNsb25lKG9iaikgeworICAgIGlmICh0 eXBlb2Ygb2JqID09ICJmdW5jdGlvbiIgfHwgT2JqZWN0KG9iaikgIT09IG9i aikgeworICAgICAgICByZXR1cm4gb2JqOworICAgIH0KKyAgICB2YXIgcmVz ID0gbmV3IG9iai5jb25zdHJ1Y3RvcjsKKyAgICBmb3IgKHZhciBrZXkgaW4g b2JqKSBpZiAob2JqW2hhc10oa2V5KSkgeworICAgICAgICByZXNba2V5XSA9 IGNsb25lKG9ialtrZXldKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30K K1NuYXAuXy5jbG9uZSA9IGNsb25lOworZnVuY3Rpb24gcmVwdXNoKGFycmF5 LCBpdGVtKSB7CisgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJyYXkubGVu Z3RoOyBpIDwgaWk7IGkrKykgaWYgKGFycmF5W2ldID09PSBpdGVtKSB7Cisg ICAgICAgIHJldHVybiBhcnJheS5wdXNoKGFycmF5LnNwbGljZShpLCAxKVsw XSk7CisgICAgfQorfQorZnVuY3Rpb24gY2FjaGVyKGYsIHNjb3BlLCBwb3N0 cHJvY2Vzc29yKSB7CisgICAgZnVuY3Rpb24gbmV3ZigpIHsKKyAgICAgICAg dmFyIGFyZyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50 cywgMCksCisgICAgICAgICAgICBhcmdzID0gYXJnLmpvaW4oIlx1MjQwMCIp LAorICAgICAgICAgICAgY2FjaGUgPSBuZXdmLmNhY2hlID0gbmV3Zi5jYWNo ZSB8fCB7fSwKKyAgICAgICAgICAgIGNvdW50ID0gbmV3Zi5jb3VudCA9IG5l d2YuY291bnQgfHwgW107CisgICAgICAgIGlmIChjYWNoZVtoYXNdKGFyZ3Mp KSB7CisgICAgICAgICAgICByZXB1c2goY291bnQsIGFyZ3MpOworICAgICAg ICAgICAgcmV0dXJuIHBvc3Rwcm9jZXNzb3IgPyBwb3N0cHJvY2Vzc29yKGNh Y2hlW2FyZ3NdKSA6IGNhY2hlW2FyZ3NdOworICAgICAgICB9CisgICAgICAg IGNvdW50Lmxlbmd0aCA+PSAxZTMgJiYgZGVsZXRlIGNhY2hlW2NvdW50LnNo aWZ0KCldOworICAgICAgICBjb3VudC5wdXNoKGFyZ3MpOworICAgICAgICBj YWNoZVthcmdzXSA9IGYuYXBwbHkoc2NvcGUsIGFyZyk7CisgICAgICAgIHJl dHVybiBwb3N0cHJvY2Vzc29yID8gcG9zdHByb2Nlc3NvcihjYWNoZVthcmdz XSkgOiBjYWNoZVthcmdzXTsKKyAgICB9CisgICAgcmV0dXJuIG5ld2Y7Cit9 CitTbmFwLl8uY2FjaGVyID0gY2FjaGVyOworZnVuY3Rpb24gYW5nbGUoeDEs IHkxLCB4MiwgeTIsIHgzLCB5MykgeworICAgIGlmICh4MyA9PSBudWxsKSB7 CisgICAgICAgIHZhciB4ID0geDEgLSB4MiwKKyAgICAgICAgICAgIHkgPSB5 MSAtIHkyOworICAgICAgICBpZiAoIXggJiYgIXkpIHsKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoMTgwICsg bWF0aC5hdGFuMigteSwgLXgpICogMTgwIC8gUEkgKyAzNjApICUgMzYwOwor ICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBhbmdsZSh4MSwgeTEsIHgz LCB5MykgLSBhbmdsZSh4MiwgeTIsIHgzLCB5Myk7CisgICAgfQorfQorZnVu Y3Rpb24gcmFkKGRlZykgeworICAgIHJldHVybiBkZWcgJSAzNjAgKiBQSSAv IDE4MDsKK30KK2Z1bmN0aW9uIGRlZyhyYWQpIHsKKyAgICByZXR1cm4gcmFk ICogMTgwIC8gUEkgJSAzNjA7Cit9CitmdW5jdGlvbiB4X3koKSB7CisgICAg cmV0dXJuIHRoaXMueCArIFMgKyB0aGlzLnk7Cit9CitmdW5jdGlvbiB4X3lf d19oKCkgeworICAgIHJldHVybiB0aGlzLnggKyBTICsgdGhpcy55ICsgUyAr IHRoaXMud2lkdGggKyAiIFx4ZDcgIiArIHRoaXMuaGVpZ2h0OworfQorCisv KlwKKyAqIFNuYXAucmFkCisgWyBtZXRob2QgXQorICoqCisgKiBUcmFuc2Zv cm0gYW5nbGUgdG8gcmFkaWFucworIC0gZGVnIChudW1iZXIpIGFuZ2xlIGlu IGRlZ3JlZXMKKyA9IChudW1iZXIpIGFuZ2xlIGluIHJhZGlhbnMKK1wqLwor U25hcC5yYWQgPSByYWQ7CisvKlwKKyAqIFNuYXAuZGVnCisgWyBtZXRob2Qg XQorICoqCisgKiBUcmFuc2Zvcm0gYW5nbGUgdG8gZGVncmVlcworIC0gcmFk IChudW1iZXIpIGFuZ2xlIGluIHJhZGlhbnMKKyA9IChudW1iZXIpIGFuZ2xl IGluIGRlZ3JlZXMKK1wqLworU25hcC5kZWcgPSBkZWc7CisvKlwKKyAqIFNu YXAuc2luCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVpdmFsZW50IHRvIGBN YXRoLnNpbigpYCBvbmx5IHdvcmtzIHdpdGggZGVncmVlcywgbm90IHJhZGlh bnMuCisgLSBhbmdsZSAobnVtYmVyKSBhbmdsZSBpbiBkZWdyZWVzCisgPSAo bnVtYmVyKSBzaW4KK1wqLworU25hcC5zaW4gPSBmdW5jdGlvbiAoYW5nbGUp IHsKKyAgICByZXR1cm4gbWF0aC5zaW4oU25hcC5yYWQoYW5nbGUpKTsKK307 CisvKlwKKyAqIFNuYXAudGFuCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVp dmFsZW50IHRvIGBNYXRoLnRhbigpYCBvbmx5IHdvcmtzIHdpdGggZGVncmVl cywgbm90IHJhZGlhbnMuCisgLSBhbmdsZSAobnVtYmVyKSBhbmdsZSBpbiBk ZWdyZWVzCisgPSAobnVtYmVyKSB0YW4KK1wqLworU25hcC50YW4gPSBmdW5j dGlvbiAoYW5nbGUpIHsKKyAgICByZXR1cm4gbWF0aC50YW4oU25hcC5yYWQo YW5nbGUpKTsKK307CisvKlwKKyAqIFNuYXAuY29zCisgWyBtZXRob2QgXQor ICoqCisgKiBFcXVpdmFsZW50IHRvIGBNYXRoLmNvcygpYCBvbmx5IHdvcmtz IHdpdGggZGVncmVlcywgbm90IHJhZGlhbnMuCisgLSBhbmdsZSAobnVtYmVy KSBhbmdsZSBpbiBkZWdyZWVzCisgPSAobnVtYmVyKSBjb3MKK1wqLworU25h cC5jb3MgPSBmdW5jdGlvbiAoYW5nbGUpIHsKKyAgICByZXR1cm4gbWF0aC5j b3MoU25hcC5yYWQoYW5nbGUpKTsKK307CisvKlwKKyAqIFNuYXAuYXNpbgor IFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBgTWF0aC5hc2lu KClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFucy4KKyAt IG51bSAobnVtYmVyKSB2YWx1ZQorID0gKG51bWJlcikgYXNpbiBpbiBkZWdy ZWVzCitcKi8KK1NuYXAuYXNpbiA9IGZ1bmN0aW9uIChudW0pIHsKKyAgICBy ZXR1cm4gU25hcC5kZWcobWF0aC5hc2luKG51bSkpOworfTsKKy8qXAorICog U25hcC5hY29zCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVpdmFsZW50IHRv IGBNYXRoLmFjb3MoKWAgb25seSB3b3JrcyB3aXRoIGRlZ3JlZXMsIG5vdCBy YWRpYW5zLgorIC0gbnVtIChudW1iZXIpIHZhbHVlCisgPSAobnVtYmVyKSBh Y29zIGluIGRlZ3JlZXMKK1wqLworU25hcC5hY29zID0gZnVuY3Rpb24gKG51 bSkgeworICAgIHJldHVybiBTbmFwLmRlZyhtYXRoLmFjb3MobnVtKSk7Cit9 OworLypcCisgKiBTbmFwLmF0YW4KKyBbIG1ldGhvZCBdCisgKioKKyAqIEVx dWl2YWxlbnQgdG8gYE1hdGguYXRhbigpYCBvbmx5IHdvcmtzIHdpdGggZGVn cmVlcywgbm90IHJhZGlhbnMuCisgLSBudW0gKG51bWJlcikgdmFsdWUKKyA9 IChudW1iZXIpIGF0YW4gaW4gZGVncmVlcworXCovCitTbmFwLmF0YW4gPSBm dW5jdGlvbiAobnVtKSB7CisgICAgcmV0dXJuIFNuYXAuZGVnKG1hdGguYXRh bihudW0pKTsKK307CisvKlwKKyAqIFNuYXAuYXRhbjIKKyBbIG1ldGhvZCBd CisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGguYXRhbjIoKWAgb25seSB3 b3JrcyB3aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5zLgorIC0gbnVtIChudW1i ZXIpIHZhbHVlCisgPSAobnVtYmVyKSBhdGFuMiBpbiBkZWdyZWVzCitcKi8K K1NuYXAuYXRhbjIgPSBmdW5jdGlvbiAobnVtKSB7CisgICAgcmV0dXJuIFNu YXAuZGVnKG1hdGguYXRhbjIobnVtKSk7Cit9OworLypcCisgKiBTbmFwLmFu Z2xlCisgWyBtZXRob2QgXQorICoqCisgKiBSZXR1cm5zIGFuIGFuZ2xlIGJl dHdlZW4gdHdvIG9yIHRocmVlIHBvaW50cworID4gUGFyYW1ldGVycworIC0g eDEgKG51bWJlcikgeCBjb29yZCBvZiBmaXJzdCBwb2ludAorIC0geTEgKG51 bWJlcikgeSBjb29yZCBvZiBmaXJzdCBwb2ludAorIC0geDIgKG51bWJlcikg eCBjb29yZCBvZiBzZWNvbmQgcG9pbnQKKyAtIHkyIChudW1iZXIpIHkgY29v cmQgb2Ygc2Vjb25kIHBvaW50CisgLSB4MyAobnVtYmVyKSAjb3B0aW9uYWwg eCBjb29yZCBvZiB0aGlyZCBwb2ludAorIC0geTMgKG51bWJlcikgI29wdGlv bmFsIHkgY29vcmQgb2YgdGhpcmQgcG9pbnQKKyA9IChudW1iZXIpIGFuZ2xl IGluIGRlZ3JlZXMKK1wqLworU25hcC5hbmdsZSA9IGFuZ2xlOworLypcCisg KiBTbmFwLmxlbgorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBkaXN0 YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMKKyA+IFBhcmFtZXRlcnMKKyAtIHgx IChudW1iZXIpIHggY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHkxIChudW1i ZXIpIHkgY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHgyIChudW1iZXIpIHgg Y29vcmQgb2Ygc2Vjb25kIHBvaW50CisgLSB5MiAobnVtYmVyKSB5IGNvb3Jk IG9mIHNlY29uZCBwb2ludAorID0gKG51bWJlcikgZGlzdGFuY2UKK1wqLwor U25hcC5sZW4gPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIpIHsKKyAgICBy ZXR1cm4gTWF0aC5zcXJ0KFNuYXAubGVuMih4MSwgeTEsIHgyLCB5MikpOwor fTsKKy8qXAorICogU25hcC5sZW4yCisgWyBtZXRob2QgXQorICoqCisgKiBS ZXR1cm5zIHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzCisg PiBQYXJhbWV0ZXJzCisgLSB4MSAobnVtYmVyKSB4IGNvb3JkIG9mIGZpcnN0 IHBvaW50CisgLSB5MSAobnVtYmVyKSB5IGNvb3JkIG9mIGZpcnN0IHBvaW50 CisgLSB4MiAobnVtYmVyKSB4IGNvb3JkIG9mIHNlY29uZCBwb2ludAorIC0g eTIgKG51bWJlcikgeSBjb29yZCBvZiBzZWNvbmQgcG9pbnQKKyA9IChudW1i ZXIpIGRpc3RhbmNlCitcKi8KK1NuYXAubGVuMiA9IGZ1bmN0aW9uICh4MSwg eTEsIHgyLCB5MikgeworICAgIHJldHVybiAoeDEgLSB4MikgKiAoeDEgLSB4 MikgKyAoeTEgLSB5MikgKiAoeTEgLSB5Mik7Cit9OworLypcCisgKiBTbmFw LmNsb3Nlc3RQb2ludAorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBj bG9zZXN0IHBvaW50IHRvIGEgZ2l2ZW4gb25lIG9uIGEgZ2l2ZW4gcGF0aC4K KyA+IFBhcmFtZXRlcnMKKyAtIHBhdGggKEVsZW1lbnQpIHBhdGggZWxlbWVu dAorIC0geCAobnVtYmVyKSB4IGNvb3JkIG9mIGEgcG9pbnQKKyAtIHkgKG51 bWJlcikgeSBjb29yZCBvZiBhIHBvaW50CisgPSAob2JqZWN0KSBpbiBmb3Jt YXQKKyB7CisgICAgeCAobnVtYmVyKSB4IGNvb3JkIG9mIHRoZSBwb2ludCBv biB0aGUgcGF0aAorICAgIHkgKG51bWJlcikgeSBjb29yZCBvZiB0aGUgcG9p bnQgb24gdGhlIHBhdGgKKyAgICBsZW5ndGggKG51bWJlcikgbGVuZ3RoIG9m IHRoZSBwYXRoIHRvIHRoZSBwb2ludAorICAgIGRpc3RhbmNlIChudW1iZXIp IGRpc3RhbmNlIGZyb20gdGhlIGdpdmVuIHBvaW50IHRvIHRoZSBwYXRoCisg fQorXCovCisvLyBDb3BpZWQgZnJvbSBodHRwOi8vYmwub2Nrcy5vcmcvbWJv c3RvY2svODAyNzYzNworU25hcC5jbG9zZXN0UG9pbnQgPSBmdW5jdGlvbiAo cGF0aCwgeCwgeSkgeworICAgIGZ1bmN0aW9uIGRpc3RhbmNlMihwKSB7Cisg ICAgICAgIHZhciBkeCA9IHAueCAtIHgsCisgICAgICAgICAgICBkeSA9IHAu eSAtIHk7CisgICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTsKKyAg ICB9CisgICAgdmFyIHBhdGhOb2RlID0gcGF0aC5ub2RlLAorICAgICAgICBw YXRoTGVuZ3RoID0gcGF0aE5vZGUuZ2V0VG90YWxMZW5ndGgoKSwKKyAgICAg ICAgcHJlY2lzaW9uID0gcGF0aExlbmd0aCAvIHBhdGhOb2RlLnBhdGhTZWdM aXN0Lm51bWJlck9mSXRlbXMgKiAuMTI1LAorICAgICAgICBiZXN0LAorICAg ICAgICBiZXN0TGVuZ3RoLAorICAgICAgICBiZXN0RGlzdGFuY2UgPSBJbmZp bml0eTsKKworICAgIC8vIGxpbmVhciBzY2FuIGZvciBjb2Fyc2UgYXBwcm94 aW1hdGlvbgorICAgIGZvciAodmFyIHNjYW4sIHNjYW5MZW5ndGggPSAwLCBz Y2FuRGlzdGFuY2U7IHNjYW5MZW5ndGggPD0gcGF0aExlbmd0aDsgc2Nhbkxl bmd0aCArPSBwcmVjaXNpb24pIHsKKyAgICAgICAgaWYgKChzY2FuRGlzdGFu Y2UgPSBkaXN0YW5jZTIoc2NhbiA9IHBhdGhOb2RlLmdldFBvaW50QXRMZW5n dGgoc2Nhbkxlbmd0aCkpKSA8IGJlc3REaXN0YW5jZSkgeworICAgICAgICAg ICAgYmVzdCA9IHNjYW4sIGJlc3RMZW5ndGggPSBzY2FuTGVuZ3RoLCBiZXN0 RGlzdGFuY2UgPSBzY2FuRGlzdGFuY2U7CisgICAgICAgIH0KKyAgICB9CisK KyAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciBwcmVjaXNlIGVzdGltYXRlCisg ICAgcHJlY2lzaW9uICo9IC41OworICAgIHdoaWxlIChwcmVjaXNpb24gPiAu NSkgeworICAgICAgICB2YXIgYmVmb3JlLAorICAgICAgICAgICAgYWZ0ZXIs CisgICAgICAgICAgICBiZWZvcmVMZW5ndGgsCisgICAgICAgICAgICBhZnRl ckxlbmd0aCwKKyAgICAgICAgICAgIGJlZm9yZURpc3RhbmNlLAorICAgICAg ICAgICAgYWZ0ZXJEaXN0YW5jZTsKKyAgICAgICAgaWYgKChiZWZvcmVMZW5n dGggPSBiZXN0TGVuZ3RoIC0gcHJlY2lzaW9uKSA+PSAwICYmIChiZWZvcmVE aXN0YW5jZSA9IGRpc3RhbmNlMihiZWZvcmUgPSBwYXRoTm9kZS5nZXRQb2lu dEF0TGVuZ3RoKGJlZm9yZUxlbmd0aCkpKSA8IGJlc3REaXN0YW5jZSkgewor ICAgICAgICAgICAgYmVzdCA9IGJlZm9yZSwgYmVzdExlbmd0aCA9IGJlZm9y ZUxlbmd0aCwgYmVzdERpc3RhbmNlID0gYmVmb3JlRGlzdGFuY2U7CisgICAg ICAgIH0gZWxzZSBpZiAoKGFmdGVyTGVuZ3RoID0gYmVzdExlbmd0aCArIHBy ZWNpc2lvbikgPD0gcGF0aExlbmd0aCAmJiAoYWZ0ZXJEaXN0YW5jZSA9IGRp c3RhbmNlMihhZnRlciA9IHBhdGhOb2RlLmdldFBvaW50QXRMZW5ndGgoYWZ0 ZXJMZW5ndGgpKSkgPCBiZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGJl c3QgPSBhZnRlciwgYmVzdExlbmd0aCA9IGFmdGVyTGVuZ3RoLCBiZXN0RGlz dGFuY2UgPSBhZnRlckRpc3RhbmNlOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgcHJlY2lzaW9uICo9IC41OworICAgICAgICB9CisgICAgfQor CisgICAgYmVzdCA9IHsKKyAgICAgICAgeDogYmVzdC54LAorICAgICAgICB5 OiBiZXN0LnksCisgICAgICAgIGxlbmd0aDogYmVzdExlbmd0aCwKKyAgICAg ICAgZGlzdGFuY2U6IE1hdGguc3FydChiZXN0RGlzdGFuY2UpCisgICAgfTsK KyAgICByZXR1cm4gYmVzdDsKK30KKy8qXAorICogU25hcC5pcworIFsgbWV0 aG9kIF0KKyAqKgorICogSGFuZHkgcmVwbGFjZW1lbnQgZm9yIHRoZSBgdHlw ZW9mYCBvcGVyYXRvcgorIC0gbyAo4oCmKSBhbnkgb2JqZWN0IG9yIHByaW1p dGl2ZQorIC0gdHlwZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSB0eXBlLCBlLmcu LCBgc3RyaW5nYCwgYGZ1bmN0aW9uYCwgYG51bWJlcmAsIGV0Yy4KKyA9IChi b29sZWFuKSBgdHJ1ZWAgaWYgZ2l2ZW4gdmFsdWUgaXMgb2YgZ2l2ZW4gdHlw ZQorXCovCitTbmFwLmlzID0gaXM7CisvKlwKKyAqIFNuYXAuc25hcFRvCisg WyBtZXRob2QgXQorICoqCisgKiBTbmFwcyBnaXZlbiB2YWx1ZSB0byBnaXZl biBncmlkCisgLSB2YWx1ZXMgKGFycmF5fG51bWJlcikgZ2l2ZW4gYXJyYXkg b2YgdmFsdWVzIG9yIHN0ZXAgb2YgdGhlIGdyaWQKKyAtIHZhbHVlIChudW1i ZXIpIHZhbHVlIHRvIGFkanVzdAorIC0gdG9sZXJhbmNlIChudW1iZXIpICNv cHRpb25hbCBtYXhpbXVtIGRpc3RhbmNlIHRvIHRoZSB0YXJnZXQgdmFsdWUg dGhhdCB3b3VsZCB0cmlnZ2VyIHRoZSBzbmFwLiBEZWZhdWx0IGlzIGAxMGAu CisgPSAobnVtYmVyKSBhZGp1c3RlZCB2YWx1ZQorXCovCitTbmFwLnNuYXBU byA9IGZ1bmN0aW9uICh2YWx1ZXMsIHZhbHVlLCB0b2xlcmFuY2UpIHsKKyAg ICB0b2xlcmFuY2UgPSBpcyh0b2xlcmFuY2UsICJmaW5pdGUiKSA/IHRvbGVy YW5jZSA6IDEwOworICAgIGlmIChpcyh2YWx1ZXMsICJhcnJheSIpKSB7Cisg ICAgICAgIHZhciBpID0gdmFsdWVzLmxlbmd0aDsKKyAgICAgICAgd2hpbGUg KGktLSkgaWYgKGFicyh2YWx1ZXNbaV0gLSB2YWx1ZSkgPD0gdG9sZXJhbmNl KSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldOworICAgICAgICB9 CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsdWVzID0gK3ZhbHVlczsKKyAg ICAgICAgdmFyIHJlbSA9IHZhbHVlICUgdmFsdWVzOworICAgICAgICBpZiAo cmVtIDwgdG9sZXJhbmNlKSB7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUg LSByZW07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlbSA+IHZhbHVlcyAt IHRvbGVyYW5jZSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIC0gcmVt ICsgdmFsdWVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWx1 ZTsKK307CisvLyBDb2xvdXIKKy8qXAorICogU25hcC5nZXRSR0IKKyBbIG1l dGhvZCBdCisgKioKKyAqIFBhcnNlcyBjb2xvciBzdHJpbmcgYXMgUkdCIG9i amVjdAorIC0gY29sb3IgKHN0cmluZykgY29sb3Igc3RyaW5nIGluIG9uZSBv ZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisgIyA8dWw+CisgIyAgICAgPGxp PkNvbG9yIG5hbWUgKDxjb2RlPnJlZDwvY29kZT4sIDxjb2RlPmdyZWVuPC9j b2RlPiwgPGNvZGU+Y29ybmZsb3dlcmJsdWU8L2NvZGU+LCBldGMpPC9saT4K KyAjICAgICA8bGk+I+KAouKAouKAoiDigJQgc2hvcnRlbmVkIEhUTUwgY29s b3I6ICg8Y29kZT4jMDAwPC9jb2RlPiwgPGNvZGU+I2ZjMDwvY29kZT4sIGV0 Yy4pPC9saT4KKyAjICAgICA8bGk+I+KAouKAouKAouKAouKAouKAoiDigJQg ZnVsbCBsZW5ndGggSFRNTCBjb2xvcjogKDxjb2RlPiMwMDAwMDA8L2NvZGU+ LCA8Y29kZT4jYmQyMzAwPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5yZ2Io 4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoikg4oCUIHJlZCwgZ3Jl ZW4gYW5kIGJsdWUgY2hhbm5lbHMgdmFsdWVzOiAoPGNvZGU+cmdiKDIwMCwm bmJzcDsxMDAsJm5ic3A7MCk8L2NvZGU+KTwvbGk+CisgIyAgICAgPGxpPnJn YmEo4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCi KSDigJQgYWxzbyB3aXRoIG9wYWNpdHk8L2xpPgorICMgICAgIDxsaT5yZ2Io 4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg4oCUIHNhbWUg YXMgYWJvdmUsIGJ1dCBpbiAlOiAoPGNvZGU+cmdiKDEwMCUsJm5ic3A7MTc1 JSwmbmJzcDswJSk8L2NvZGU+KTwvbGk+CisgIyAgICAgPGxpPnJnYmEo4oCi 4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg 4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNiKOKA ouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCBodWUsIHNhdHVy YXRpb24gYW5kIGJyaWdodG5lc3MgdmFsdWVzOiAoPGNvZGU+aHNiKDAuNSwm bmJzcDswLjI1LCZuYnNwOzEpPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5o c2JhKOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKA oikg4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNi KOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBzYW1l IGFzIGFib3ZlLCBidXQgaW4gJTwvbGk+CisgIyAgICAgPGxpPmhzYmEo4oCi 4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg 4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNsKOKA ouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCBodWUsIHNhdHVy YXRpb24gYW5kIGx1bWlub3NpdHkgdmFsdWVzOiAoPGNvZGU+aHNiKDAuNSwm bmJzcDswLjI1LCZuYnNwOzAuNSk8L2NvZGU+KTwvbGk+CisgIyAgICAgPGxp PmhzbGEo4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoiwg4oCi4oCi 4oCiKSDigJQgYWxzbyB3aXRoIG9wYWNpdHk8L2xpPgorICMgICAgIDxsaT5o c2wo4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg4oCUIHNh bWUgYXMgYWJvdmUsIGJ1dCBpbiAlPC9saT4KKyAjICAgICA8bGk+aHNsYSji gKLigKLigKIlLCDigKLigKLigKIlLCDigKLigKLigKIlLCDigKLigKLigKIl KSDigJQgYWxzbyB3aXRoIG9wYWNpdHk8L2xpPgorICMgPC91bD4KKyAqIE5v dGUgdGhhdCBgJWAgY2FuIGJlIHVzZWQgYW55IHRpbWU6IGByZ2IoMjAlLCAy NTUsIDUwJSlgLgorID0gKG9iamVjdCkgUkdCIG9iamVjdCBpbiB0aGUgZm9s bG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAgICByIChudW1iZXIpIHJlZCwK KyBvICAgICBnIChudW1iZXIpIGdyZWVuLAorIG8gICAgIGIgKG51bWJlcikg Ymx1ZSwKKyBvICAgICBoZXggKHN0cmluZykgY29sb3IgaW4gSFRNTC9DU1Mg Zm9ybWF0OiAj4oCi4oCi4oCi4oCi4oCi4oCiLAorIG8gICAgIGVycm9yIChi b29sZWFuKSB0cnVlIGlmIHN0cmluZyBjYW4ndCBiZSBwYXJzZWQKKyBvIH0K K1wqLworU25hcC5nZXRSR0IgPSBjYWNoZXIoZnVuY3Rpb24gKGNvbG91cikg eworICAgIGlmICghY29sb3VyIHx8ICEhKChjb2xvdXIgPSBTdHIoY29sb3Vy KSkuaW5kZXhPZigiLSIpICsgMSkpIHsKKyAgICAgICAgcmV0dXJuIHtyOiAt MSwgZzogLTEsIGI6IC0xLCBoZXg6ICJub25lIiwgZXJyb3I6IDEsIHRvU3Ry aW5nOiByZ2J0b1N0cmluZ307CisgICAgfQorICAgIGlmIChjb2xvdXIgPT0g Im5vbmUiKSB7CisgICAgICAgIHJldHVybiB7cjogLTEsIGc6IC0xLCBiOiAt MSwgaGV4OiAibm9uZSIsIHRvU3RyaW5nOiByZ2J0b1N0cmluZ307CisgICAg fQorICAgICEoaHNyZ1toYXNdKGNvbG91ci50b0xvd2VyQ2FzZSgpLnN1YnN0 cmluZygwLCAyKSkgfHwgY29sb3VyLmNoYXJBdCgpID09ICIjIikgJiYgKGNv bG91ciA9IHRvSGV4KGNvbG91cikpOworICAgIGlmICghY29sb3VyKSB7Cisg ICAgICAgIHJldHVybiB7cjogLTEsIGc6IC0xLCBiOiAtMSwgaGV4OiAibm9u ZSIsIGVycm9yOiAxLCB0b1N0cmluZzogcmdidG9TdHJpbmd9OworICAgIH0K KyAgICB2YXIgcmVzLAorICAgICAgICByZWQsCisgICAgICAgIGdyZWVuLAor ICAgICAgICBibHVlLAorICAgICAgICBvcGFjaXR5LAorICAgICAgICB0LAor ICAgICAgICB2YWx1ZXMsCisgICAgICAgIHJnYiA9IGNvbG91ci5tYXRjaChj b2xvdXJSZWdFeHApOworICAgIGlmIChyZ2IpIHsKKyAgICAgICAgaWYgKHJn YlsyXSkgeworICAgICAgICAgICAgYmx1ZSA9IHRvSW50KHJnYlsyXS5zdWJz dHJpbmcoNSksIDE2KTsKKyAgICAgICAgICAgIGdyZWVuID0gdG9JbnQocmdi WzJdLnN1YnN0cmluZygzLCA1KSwgMTYpOworICAgICAgICAgICAgcmVkID0g dG9JbnQocmdiWzJdLnN1YnN0cmluZygxLCAzKSwgMTYpOworICAgICAgICB9 CisgICAgICAgIGlmIChyZ2JbM10pIHsKKyAgICAgICAgICAgIGJsdWUgPSB0 b0ludCgodCA9IHJnYlszXS5jaGFyQXQoMykpICsgdCwgMTYpOworICAgICAg ICAgICAgZ3JlZW4gPSB0b0ludCgodCA9IHJnYlszXS5jaGFyQXQoMikpICsg dCwgMTYpOworICAgICAgICAgICAgcmVkID0gdG9JbnQoKHQgPSByZ2JbM10u Y2hhckF0KDEpKSArIHQsIDE2KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo cmdiWzRdKSB7CisgICAgICAgICAgICB2YWx1ZXMgPSByZ2JbNF0uc3BsaXQo Y29tbWFTcGFjZXMpOworICAgICAgICAgICAgcmVkID0gdG9GbG9hdCh2YWx1 ZXNbMF0pOworICAgICAgICAgICAgdmFsdWVzWzBdLnNsaWNlKC0xKSA9PSAi JSIgJiYgKHJlZCAqPSAyLjU1KTsKKyAgICAgICAgICAgIGdyZWVuID0gdG9G bG9hdCh2YWx1ZXNbMV0pOworICAgICAgICAgICAgdmFsdWVzWzFdLnNsaWNl KC0xKSA9PSAiJSIgJiYgKGdyZWVuICo9IDIuNTUpOworICAgICAgICAgICAg Ymx1ZSA9IHRvRmxvYXQodmFsdWVzWzJdKTsKKyAgICAgICAgICAgIHZhbHVl c1syXS5zbGljZSgtMSkgPT0gIiUiICYmIChibHVlICo9IDIuNTUpOworICAg ICAgICAgICAgcmdiWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwgNCkgPT0g InJnYmEiICYmIChvcGFjaXR5ID0gdG9GbG9hdCh2YWx1ZXNbM10pKTsKKyAg ICAgICAgICAgIHZhbHVlc1szXSAmJiB2YWx1ZXNbM10uc2xpY2UoLTEpID09 ICIlIiAmJiAob3BhY2l0eSAvPSAxMDApOworICAgICAgICB9CisgICAgICAg IGlmIChyZ2JbNV0pIHsKKyAgICAgICAgICAgIHZhbHVlcyA9IHJnYls1XS5z cGxpdChjb21tYVNwYWNlcyk7CisgICAgICAgICAgICByZWQgPSB0b0Zsb2F0 KHZhbHVlc1swXSk7CisgICAgICAgICAgICB2YWx1ZXNbMF0uc2xpY2UoLTEp ID09ICIlIiAmJiAocmVkIC89IDEwMCk7CisgICAgICAgICAgICBncmVlbiA9 IHRvRmxvYXQodmFsdWVzWzFdKTsKKyAgICAgICAgICAgIHZhbHVlc1sxXS5z bGljZSgtMSkgPT0gIiUiICYmIChncmVlbiAvPSAxMDApOworICAgICAgICAg ICAgYmx1ZSA9IHRvRmxvYXQodmFsdWVzWzJdKTsKKyAgICAgICAgICAgIHZh bHVlc1syXS5zbGljZSgtMSkgPT0gIiUiICYmIChibHVlIC89IDEwMCk7Cisg ICAgICAgICAgICAodmFsdWVzWzBdLnNsaWNlKC0zKSA9PSAiZGVnIiB8fCB2 YWx1ZXNbMF0uc2xpY2UoLTEpID09ICJceGIwIikgJiYgKHJlZCAvPSAzNjAp OworICAgICAgICAgICAgcmdiWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCwg NCkgPT0gImhzYmEiICYmIChvcGFjaXR5ID0gdG9GbG9hdCh2YWx1ZXNbM10p KTsKKyAgICAgICAgICAgIHZhbHVlc1szXSAmJiB2YWx1ZXNbM10uc2xpY2Uo LTEpID09ICIlIiAmJiAob3BhY2l0eSAvPSAxMDApOworICAgICAgICAgICAg cmV0dXJuIFNuYXAuaHNiMnJnYihyZWQsIGdyZWVuLCBibHVlLCBvcGFjaXR5 KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmdiWzZdKSB7CisgICAgICAg ICAgICB2YWx1ZXMgPSByZ2JbNl0uc3BsaXQoY29tbWFTcGFjZXMpOworICAg ICAgICAgICAgcmVkID0gdG9GbG9hdCh2YWx1ZXNbMF0pOworICAgICAgICAg ICAgdmFsdWVzWzBdLnNsaWNlKC0xKSA9PSAiJSIgJiYgKHJlZCAvPSAxMDAp OworICAgICAgICAgICAgZ3JlZW4gPSB0b0Zsb2F0KHZhbHVlc1sxXSk7Cisg ICAgICAgICAgICB2YWx1ZXNbMV0uc2xpY2UoLTEpID09ICIlIiAmJiAoZ3Jl ZW4gLz0gMTAwKTsKKyAgICAgICAgICAgIGJsdWUgPSB0b0Zsb2F0KHZhbHVl c1syXSk7CisgICAgICAgICAgICB2YWx1ZXNbMl0uc2xpY2UoLTEpID09ICIl IiAmJiAoYmx1ZSAvPSAxMDApOworICAgICAgICAgICAgKHZhbHVlc1swXS5z bGljZSgtMykgPT0gImRlZyIgfHwgdmFsdWVzWzBdLnNsaWNlKC0xKSA9PSAi XHhiMCIpICYmIChyZWQgLz0gMzYwKTsKKyAgICAgICAgICAgIHJnYlsxXS50 b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDQpID09ICJoc2xhIiAmJiAob3BhY2l0 eSA9IHRvRmxvYXQodmFsdWVzWzNdKSk7CisgICAgICAgICAgICB2YWx1ZXNb M10gJiYgdmFsdWVzWzNdLnNsaWNlKC0xKSA9PSAiJSIgJiYgKG9wYWNpdHkg Lz0gMTAwKTsKKyAgICAgICAgICAgIHJldHVybiBTbmFwLmhzbDJyZ2IocmVk LCBncmVlbiwgYmx1ZSwgb3BhY2l0eSk7CisgICAgICAgIH0KKyAgICAgICAg cmVkID0gbW1pbihtYXRoLnJvdW5kKHJlZCksIDI1NSk7CisgICAgICAgIGdy ZWVuID0gbW1pbihtYXRoLnJvdW5kKGdyZWVuKSwgMjU1KTsKKyAgICAgICAg Ymx1ZSA9IG1taW4obWF0aC5yb3VuZChibHVlKSwgMjU1KTsKKyAgICAgICAg b3BhY2l0eSA9IG1taW4obW1heChvcGFjaXR5LCAwKSwgMSk7CisgICAgICAg IHJnYiA9IHtyOiByZWQsIGc6IGdyZWVuLCBiOiBibHVlLCB0b1N0cmluZzog cmdidG9TdHJpbmd9OworICAgICAgICByZ2IuaGV4ID0gIiMiICsgKDE2Nzc3 MjE2IHwgYmx1ZSB8IChncmVlbiA8PCA4KSB8IChyZWQgPDwgMTYpKS50b1N0 cmluZygxNikuc2xpY2UoMSk7CisgICAgICAgIHJnYi5vcGFjaXR5ID0gaXMo b3BhY2l0eSwgImZpbml0ZSIpID8gb3BhY2l0eSA6IDE7CisgICAgICAgIHJl dHVybiByZ2I7CisgICAgfQorICAgIHJldHVybiB7cjogLTEsIGc6IC0xLCBi OiAtMSwgaGV4OiAibm9uZSIsIGVycm9yOiAxLCB0b1N0cmluZzogcmdidG9T dHJpbmd9OworfSwgU25hcCk7CisvKlwKKyAqIFNuYXAuaHNiCisgWyBtZXRo b2QgXQorICoqCisgKiBDb252ZXJ0cyBIU0IgdmFsdWVzIHRvIGEgaGV4IHJl cHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvcgorIC0gaCAobnVtYmVyKSBodWUK KyAtIHMgKG51bWJlcikgc2F0dXJhdGlvbgorIC0gYiAobnVtYmVyKSB2YWx1 ZSBvciBicmlnaHRuZXNzCisgPSAoc3RyaW5nKSBoZXggcmVwcmVzZW50YXRp b24gb2YgdGhlIGNvbG9yCitcKi8KK1NuYXAuaHNiID0gY2FjaGVyKGZ1bmN0 aW9uIChoLCBzLCBiKSB7CisgICAgcmV0dXJuIFNuYXAuaHNiMnJnYihoLCBz LCBiKS5oZXg7Cit9KTsKKy8qXAorICogU25hcC5oc2wKKyBbIG1ldGhvZCBd CisgKioKKyAqIENvbnZlcnRzIEhTTCB2YWx1ZXMgdG8gYSBoZXggcmVwcmVz ZW50YXRpb24gb2YgdGhlIGNvbG9yCisgLSBoIChudW1iZXIpIGh1ZQorIC0g cyAobnVtYmVyKSBzYXR1cmF0aW9uCisgLSBsIChudW1iZXIpIGx1bWlub3Np dHkKKyA9IChzdHJpbmcpIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29s b3IKK1wqLworU25hcC5oc2wgPSBjYWNoZXIoZnVuY3Rpb24gKGgsIHMsIGwp IHsKKyAgICByZXR1cm4gU25hcC5oc2wycmdiKGgsIHMsIGwpLmhleDsKK30p OworLypcCisgKiBTbmFwLnJnYgorIFsgbWV0aG9kIF0KKyAqKgorICogQ29u dmVydHMgUkdCIHZhbHVlcyB0byBhIGhleCByZXByZXNlbnRhdGlvbiBvZiB0 aGUgY29sb3IKKyAtIHIgKG51bWJlcikgcmVkCisgLSBnIChudW1iZXIpIGdy ZWVuCisgLSBiIChudW1iZXIpIGJsdWUKKyA9IChzdHJpbmcpIGhleCByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgY29sb3IKK1wqLworU25hcC5yZ2IgPSBjYWNo ZXIoZnVuY3Rpb24gKHIsIGcsIGIsIG8pIHsKKyAgICBpZiAoaXMobywgImZp bml0ZSIpKSB7CisgICAgICAgIHZhciByb3VuZCA9IG1hdGgucm91bmQ7Cisg ICAgICAgIHJldHVybiAicmdiYSgiICsgW3JvdW5kKHIpLCByb3VuZChnKSwg cm91bmQoYiksICtvLnRvRml4ZWQoMildICsgIikiOworICAgIH0KKyAgICBy ZXR1cm4gIiMiICsgKDE2Nzc3MjE2IHwgYiB8IChnIDw8IDgpIHwgKHIgPDwg MTYpKS50b1N0cmluZygxNikuc2xpY2UoMSk7Cit9KTsKK3ZhciB0b0hleCA9 IGZ1bmN0aW9uIChjb2xvcikgeworICAgIHZhciBpID0gZ2xvYi5kb2MuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSB8fCBnbG9iLmRvYy5nZXRF bGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0sCisgICAgICAgIHJlZCA9ICJy Z2IoMjU1LCAwLCAwKSI7CisgICAgdG9IZXggPSBjYWNoZXIoZnVuY3Rpb24g KGNvbG9yKSB7CisgICAgICAgIGlmIChjb2xvci50b0xvd2VyQ2FzZSgpID09 ICJyZWQiKSB7CisgICAgICAgICAgICByZXR1cm4gcmVkOworICAgICAgICB9 CisgICAgICAgIGkuc3R5bGUuY29sb3IgPSByZWQ7CisgICAgICAgIGkuc3R5 bGUuY29sb3IgPSBjb2xvcjsKKyAgICAgICAgdmFyIG91dCA9IGdsb2IuZG9j LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaSwgRSkuZ2V0UHJvcGVy dHlWYWx1ZSgiY29sb3IiKTsKKyAgICAgICAgcmV0dXJuIG91dCA9PSByZWQg PyBudWxsIDogb3V0OworICAgIH0pOworICAgIHJldHVybiB0b0hleChjb2xv cik7Cit9LAoraHNidG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0 dXJuICJoc2IoIiArIFt0aGlzLmgsIHRoaXMucywgdGhpcy5iXSArICIpIjsK K30sCitoc2x0b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4g ImhzbCgiICsgW3RoaXMuaCwgdGhpcy5zLCB0aGlzLmxdICsgIikiOworfSwK K3JnYnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiB0aGlz Lm9wYWNpdHkgPT0gMSB8fCB0aGlzLm9wYWNpdHkgPT0gbnVsbCA/CisgICAg ICAgICAgICB0aGlzLmhleCA6CisgICAgICAgICAgICAicmdiYSgiICsgW3Ro aXMuciwgdGhpcy5nLCB0aGlzLmIsIHRoaXMub3BhY2l0eV0gKyAiKSI7Cit9 LAorcHJlcGFyZVJHQiA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAgaWYg KGcgPT0gbnVsbCAmJiBpcyhyLCAib2JqZWN0IikgJiYgInIiIGluIHIgJiYg ImciIGluIHIgJiYgImIiIGluIHIpIHsKKyAgICAgICAgYiA9IHIuYjsKKyAg ICAgICAgZyA9IHIuZzsKKyAgICAgICAgciA9IHIucjsKKyAgICB9CisgICAg aWYgKGcgPT0gbnVsbCAmJiBpcyhyLCBzdHJpbmcpKSB7CisgICAgICAgIHZh ciBjbHIgPSBTbmFwLmdldFJHQihyKTsKKyAgICAgICAgciA9IGNsci5yOwor ICAgICAgICBnID0gY2xyLmc7CisgICAgICAgIGIgPSBjbHIuYjsKKyAgICB9 CisgICAgaWYgKHIgPiAxIHx8IGcgPiAxIHx8IGIgPiAxKSB7CisgICAgICAg IHIgLz0gMjU1OworICAgICAgICBnIC89IDI1NTsKKyAgICAgICAgYiAvPSAy NTU7CisgICAgfQorICAgIAorICAgIHJldHVybiBbciwgZywgYl07Cit9LAor cGFja2FnZVJHQiA9IGZ1bmN0aW9uIChyLCBnLCBiLCBvKSB7CisgICAgciA9 IG1hdGgucm91bmQociAqIDI1NSk7CisgICAgZyA9IG1hdGgucm91bmQoZyAq IDI1NSk7CisgICAgYiA9IG1hdGgucm91bmQoYiAqIDI1NSk7CisgICAgdmFy IHJnYiA9IHsKKyAgICAgICAgcjogciwKKyAgICAgICAgZzogZywKKyAgICAg ICAgYjogYiwKKyAgICAgICAgb3BhY2l0eTogaXMobywgImZpbml0ZSIpID8g byA6IDEsCisgICAgICAgIGhleDogU25hcC5yZ2IociwgZywgYiksCisgICAg ICAgIHRvU3RyaW5nOiByZ2J0b1N0cmluZworICAgIH07CisgICAgaXMobywg ImZpbml0ZSIpICYmIChyZ2Iub3BhY2l0eSA9IG8pOworICAgIHJldHVybiBy Z2I7Cit9OworLypcCisgKiBTbmFwLmNvbG9yCisgWyBtZXRob2QgXQorICoq CisgKiBQYXJzZXMgdGhlIGNvbG9yIHN0cmluZyBhbmQgcmV0dXJucyBhbiBv YmplY3QgZmVhdHVyaW5nIHRoZSBjb2xvcidzIGNvbXBvbmVudCB2YWx1ZXMK KyAtIGNsciAoc3RyaW5nKSBjb2xvciBzdHJpbmcgaW4gb25lIG9mIHRoZSBz dXBwb3J0ZWQgZm9ybWF0cyAoc2VlIEBTbmFwLmdldFJHQikKKyA9IChvYmpl Y3QpIENvbWJpbmVkIFJHQi9IU0Igb2JqZWN0IGluIHRoZSBmb2xsb3dpbmcg Zm9ybWF0OgorIG8geworIG8gICAgIHIgKG51bWJlcikgcmVkLAorIG8gICAg IGcgKG51bWJlcikgZ3JlZW4sCisgbyAgICAgYiAobnVtYmVyKSBibHVlLAor IG8gICAgIGhleCAoc3RyaW5nKSBjb2xvciBpbiBIVE1ML0NTUyBmb3JtYXQ6 ICPigKLigKLigKLigKLigKLigKIsCisgbyAgICAgZXJyb3IgKGJvb2xlYW4p IGB0cnVlYCBpZiBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkLAorIG8gICAgIGgg KG51bWJlcikgaHVlLAorIG8gICAgIHMgKG51bWJlcikgc2F0dXJhdGlvbiwK KyBvICAgICB2IChudW1iZXIpIHZhbHVlIChicmlnaHRuZXNzKSwKKyBvICAg ICBsIChudW1iZXIpIGxpZ2h0bmVzcworIG8gfQorXCovCitTbmFwLmNvbG9y ID0gZnVuY3Rpb24gKGNscikgeworICAgIHZhciByZ2I7CisgICAgaWYgKGlz KGNsciwgIm9iamVjdCIpICYmICJoIiBpbiBjbHIgJiYgInMiIGluIGNsciAm JiAiYiIgaW4gY2xyKSB7CisgICAgICAgIHJnYiA9IFNuYXAuaHNiMnJnYihj bHIpOworICAgICAgICBjbHIuciA9IHJnYi5yOworICAgICAgICBjbHIuZyA9 IHJnYi5nOworICAgICAgICBjbHIuYiA9IHJnYi5iOworICAgICAgICBjbHIu b3BhY2l0eSA9IDE7CisgICAgICAgIGNsci5oZXggPSByZ2IuaGV4OworICAg IH0gZWxzZSBpZiAoaXMoY2xyLCAib2JqZWN0IikgJiYgImgiIGluIGNsciAm JiAicyIgaW4gY2xyICYmICJsIiBpbiBjbHIpIHsKKyAgICAgICAgcmdiID0g U25hcC5oc2wycmdiKGNscik7CisgICAgICAgIGNsci5yID0gcmdiLnI7Cisg ICAgICAgIGNsci5nID0gcmdiLmc7CisgICAgICAgIGNsci5iID0gcmdiLmI7 CisgICAgICAgIGNsci5vcGFjaXR5ID0gMTsKKyAgICAgICAgY2xyLmhleCA9 IHJnYi5oZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzKGNsciwg InN0cmluZyIpKSB7CisgICAgICAgICAgICBjbHIgPSBTbmFwLmdldFJHQihj bHIpOworICAgICAgICB9CisgICAgICAgIGlmIChpcyhjbHIsICJvYmplY3Qi KSAmJiAiciIgaW4gY2xyICYmICJnIiBpbiBjbHIgJiYgImIiIGluIGNsciAm JiAhKCJlcnJvciIgaW4gY2xyKSkgeworICAgICAgICAgICAgcmdiID0gU25h cC5yZ2IyaHNsKGNscik7CisgICAgICAgICAgICBjbHIuaCA9IHJnYi5oOwor ICAgICAgICAgICAgY2xyLnMgPSByZ2IuczsKKyAgICAgICAgICAgIGNsci5s ID0gcmdiLmw7CisgICAgICAgICAgICByZ2IgPSBTbmFwLnJnYjJoc2IoY2xy KTsKKyAgICAgICAgICAgIGNsci52ID0gcmdiLmI7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBjbHIgPSB7aGV4OiAibm9uZSJ9OworICAgICAg ICAgICAgY2xyLnIgPSBjbHIuZyA9IGNsci5iID0gY2xyLmggPSBjbHIucyA9 IGNsci52ID0gY2xyLmwgPSAtMTsKKyAgICAgICAgICAgIGNsci5lcnJvciA9 IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgY2xyLnRvU3RyaW5nID0gcmdi dG9TdHJpbmc7CisgICAgcmV0dXJuIGNscjsKK307CisvKlwKKyAqIFNuYXAu aHNiMnJnYgorIFsgbWV0aG9kIF0KKyAqKgorICogQ29udmVydHMgSFNCIHZh bHVlcyB0byBhbiBSR0Igb2JqZWN0CisgLSBoIChudW1iZXIpIGh1ZQorIC0g cyAobnVtYmVyKSBzYXR1cmF0aW9uCisgLSB2IChudW1iZXIpIHZhbHVlIG9y IGJyaWdodG5lc3MKKyA9IChvYmplY3QpIFJHQiBvYmplY3QgaW4gdGhlIGZv bGxvd2luZyBmb3JtYXQ6CisgbyB7CisgbyAgICAgciAobnVtYmVyKSByZWQs CisgbyAgICAgZyAobnVtYmVyKSBncmVlbiwKKyBvICAgICBiIChudW1iZXIp IGJsdWUsCisgbyAgICAgaGV4IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NT IGZvcm1hdDogI+KAouKAouKAouKAouKAouKAogorIG8gfQorXCovCitTbmFw LmhzYjJyZ2IgPSBmdW5jdGlvbiAoaCwgcywgdiwgbykgeworICAgIGlmIChp cyhoLCAib2JqZWN0IikgJiYgImgiIGluIGggJiYgInMiIGluIGggJiYgImIi IGluIGgpIHsKKyAgICAgICAgdiA9IGguYjsKKyAgICAgICAgcyA9IGguczsK KyAgICAgICAgbyA9IGgubzsKKyAgICAgICAgaCA9IGguaDsKKyAgICB9Cisg ICAgaCAqPSAzNjA7CisgICAgdmFyIFIsIEcsIEIsIFgsIEM7CisgICAgaCA9 IChoICUgMzYwKSAvIDYwOworICAgIEMgPSB2ICogczsKKyAgICBYID0gQyAq ICgxIC0gYWJzKGggJSAyIC0gMSkpOworICAgIFIgPSBHID0gQiA9IHYgLSBD OworCisgICAgaCA9IH5+aDsKKyAgICBSICs9IFtDLCBYLCAwLCAwLCBYLCBD XVtoXTsKKyAgICBHICs9IFtYLCBDLCBDLCBYLCAwLCAwXVtoXTsKKyAgICBC ICs9IFswLCAwLCBYLCBDLCBDLCBYXVtoXTsKKyAgICByZXR1cm4gcGFja2Fn ZVJHQihSLCBHLCBCLCBvKTsKK307CisvKlwKKyAqIFNuYXAuaHNsMnJnYgor IFsgbWV0aG9kIF0KKyAqKgorICogQ29udmVydHMgSFNMIHZhbHVlcyB0byBh biBSR0Igb2JqZWN0CisgLSBoIChudW1iZXIpIGh1ZQorIC0gcyAobnVtYmVy KSBzYXR1cmF0aW9uCisgLSBsIChudW1iZXIpIGx1bWlub3NpdHkKKyA9IChv YmplY3QpIFJHQiBvYmplY3QgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6Cisg byB7CisgbyAgICAgciAobnVtYmVyKSByZWQsCisgbyAgICAgZyAobnVtYmVy KSBncmVlbiwKKyBvICAgICBiIChudW1iZXIpIGJsdWUsCisgbyAgICAgaGV4 IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZvcm1hdDogI+KAouKAouKA ouKAouKAouKAogorIG8gfQorXCovCitTbmFwLmhzbDJyZ2IgPSBmdW5jdGlv biAoaCwgcywgbCwgbykgeworICAgIGlmIChpcyhoLCAib2JqZWN0IikgJiYg ImgiIGluIGggJiYgInMiIGluIGggJiYgImwiIGluIGgpIHsKKyAgICAgICAg bCA9IGgubDsKKyAgICAgICAgcyA9IGguczsKKyAgICAgICAgaCA9IGguaDsK KyAgICB9CisgICAgaWYgKGggPiAxIHx8IHMgPiAxIHx8IGwgPiAxKSB7Cisg ICAgICAgIGggLz0gMzYwOworICAgICAgICBzIC89IDEwMDsKKyAgICAgICAg bCAvPSAxMDA7CisgICAgfQorICAgIGggKj0gMzYwOworICAgIHZhciBSLCBH LCBCLCBYLCBDOworICAgIGggPSAoaCAlIDM2MCkgLyA2MDsKKyAgICBDID0g MiAqIHMgKiAobCA8IC41ID8gbCA6IDEgLSBsKTsKKyAgICBYID0gQyAqICgx IC0gYWJzKGggJSAyIC0gMSkpOworICAgIFIgPSBHID0gQiA9IGwgLSBDIC8g MjsKKworICAgIGggPSB+fmg7CisgICAgUiArPSBbQywgWCwgMCwgMCwgWCwg Q11baF07CisgICAgRyArPSBbWCwgQywgQywgWCwgMCwgMF1baF07CisgICAg QiArPSBbMCwgMCwgWCwgQywgQywgWF1baF07CisgICAgcmV0dXJuIHBhY2th Z2VSR0IoUiwgRywgQiwgbyk7Cit9OworLypcCisgKiBTbmFwLnJnYjJoc2IK KyBbIG1ldGhvZCBdCisgKioKKyAqIENvbnZlcnRzIFJHQiB2YWx1ZXMgdG8g YW4gSFNCIG9iamVjdAorIC0gciAobnVtYmVyKSByZWQKKyAtIGcgKG51bWJl cikgZ3JlZW4KKyAtIGIgKG51bWJlcikgYmx1ZQorID0gKG9iamVjdCkgSFNC IG9iamVjdCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAg ICBoIChudW1iZXIpIGh1ZSwKKyBvICAgICBzIChudW1iZXIpIHNhdHVyYXRp b24sCisgbyAgICAgYiAobnVtYmVyKSBicmlnaHRuZXNzCisgbyB9CitcKi8K K1NuYXAucmdiMmhzYiA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAgYiA9 IHByZXBhcmVSR0IociwgZywgYik7CisgICAgciA9IGJbMF07CisgICAgZyA9 IGJbMV07CisgICAgYiA9IGJbMl07CisKKyAgICB2YXIgSCwgUywgViwgQzsK KyAgICBWID0gbW1heChyLCBnLCBiKTsKKyAgICBDID0gViAtIG1taW4ociwg ZywgYik7CisgICAgSCA9IChDID09IDAgPyBudWxsIDoKKyAgICAgICAgIFYg PT0gciA/IChnIC0gYikgLyBDIDoKKyAgICAgICAgIFYgPT0gZyA/IChiIC0g cikgLyBDICsgMiA6CisgICAgICAgICAgICAgICAgICAociAtIGcpIC8gQyAr IDQKKyAgICAgICAgKTsKKyAgICBIID0gKChIICsgMzYwKSAlIDYpICogNjAg LyAzNjA7CisgICAgUyA9IEMgPT0gMCA/IDAgOiBDIC8gVjsKKyAgICByZXR1 cm4ge2g6IEgsIHM6IFMsIGI6IFYsIHRvU3RyaW5nOiBoc2J0b1N0cmluZ307 Cit9OworLypcCisgKiBTbmFwLnJnYjJoc2wKKyBbIG1ldGhvZCBdCisgKioK KyAqIENvbnZlcnRzIFJHQiB2YWx1ZXMgdG8gYW4gSFNMIG9iamVjdAorIC0g ciAobnVtYmVyKSByZWQKKyAtIGcgKG51bWJlcikgZ3JlZW4KKyAtIGIgKG51 bWJlcikgYmx1ZQorID0gKG9iamVjdCkgSFNMIG9iamVjdCBpbiB0aGUgZm9s bG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAgICBoIChudW1iZXIpIGh1ZSwK KyBvICAgICBzIChudW1iZXIpIHNhdHVyYXRpb24sCisgbyAgICAgbCAobnVt YmVyKSBsdW1pbm9zaXR5CisgbyB9CitcKi8KK1NuYXAucmdiMmhzbCA9IGZ1 bmN0aW9uIChyLCBnLCBiKSB7CisgICAgYiA9IHByZXBhcmVSR0IociwgZywg Yik7CisgICAgciA9IGJbMF07CisgICAgZyA9IGJbMV07CisgICAgYiA9IGJb Ml07CisKKyAgICB2YXIgSCwgUywgTCwgTSwgbSwgQzsKKyAgICBNID0gbW1h eChyLCBnLCBiKTsKKyAgICBtID0gbW1pbihyLCBnLCBiKTsKKyAgICBDID0g TSAtIG07CisgICAgSCA9IChDID09IDAgPyBudWxsIDoKKyAgICAgICAgIE0g PT0gciA/IChnIC0gYikgLyBDIDoKKyAgICAgICAgIE0gPT0gZyA/IChiIC0g cikgLyBDICsgMiA6CisgICAgICAgICAgICAgICAgICAociAtIGcpIC8gQyAr IDQpOworICAgIEggPSAoKEggKyAzNjApICUgNikgKiA2MCAvIDM2MDsKKyAg ICBMID0gKE0gKyBtKSAvIDI7CisgICAgUyA9IChDID09IDAgPyAwIDoKKyAg ICAgICAgIEwgPCAuNSA/IEMgLyAoMiAqIEwpIDoKKyAgICAgICAgICAgICAg ICAgIEMgLyAoMiAtIDIgKiBMKSk7CisgICAgcmV0dXJuIHtoOiBILCBzOiBT LCBsOiBMLCB0b1N0cmluZzogaHNsdG9TdHJpbmd9OworfTsKKworLy8gVHJh bnNmb3JtYXRpb25zCisvKlwKKyAqIFNuYXAucGFyc2VQYXRoU3RyaW5nCisg WyBtZXRob2QgXQorICoqCisgKiBVdGlsaXR5IG1ldGhvZAorICoqCisgKiBQ YXJzZXMgZ2l2ZW4gcGF0aCBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBhcnJh eXMgb2YgcGF0aCBzZWdtZW50cworIC0gcGF0aFN0cmluZyAoc3RyaW5nfGFy cmF5KSBwYXRoIHN0cmluZyBvciBhcnJheSBvZiBzZWdtZW50cyAoaW4gdGhl IGxhc3QgY2FzZSBpdCBpcyByZXR1cm5lZCBzdHJhaWdodCBhd2F5KQorID0g KGFycmF5KSBhcnJheSBvZiBzZWdtZW50cworXCovCitTbmFwLnBhcnNlUGF0 aFN0cmluZyA9IGZ1bmN0aW9uIChwYXRoU3RyaW5nKSB7CisgICAgaWYgKCFw YXRoU3RyaW5nKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAg ICB2YXIgcHRoID0gU25hcC5wYXRoKHBhdGhTdHJpbmcpOworICAgIGlmIChw dGguYXJyKSB7CisgICAgICAgIHJldHVybiBTbmFwLnBhdGguY2xvbmUocHRo LmFycik7CisgICAgfQorICAgIAorICAgIHZhciBwYXJhbUNvdW50cyA9IHth OiA3LCBjOiA2LCBvOiAyLCBoOiAxLCBsOiAyLCBtOiAyLCByOiA0LCBxOiA0 LCBzOiA0LCB0OiAyLCB2OiAxLCB1OiAzLCB6OiAwfSwKKyAgICAgICAgZGF0 YSA9IFtdOworICAgIGlmIChpcyhwYXRoU3RyaW5nLCAiYXJyYXkiKSAmJiBp cyhwYXRoU3RyaW5nWzBdLCAiYXJyYXkiKSkgeyAvLyByb3VnaCBhc3N1bXB0 aW9uCisgICAgICAgIGRhdGEgPSBTbmFwLnBhdGguY2xvbmUocGF0aFN0cmlu Zyk7CisgICAgfQorICAgIGlmICghZGF0YS5sZW5ndGgpIHsKKyAgICAgICAg U3RyKHBhdGhTdHJpbmcpLnJlcGxhY2UocGF0aENvbW1hbmQsIGZ1bmN0aW9u IChhLCBiLCBjKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0gW10sCisg ICAgICAgICAgICAgICAgbmFtZSA9IGIudG9Mb3dlckNhc2UoKTsKKyAgICAg ICAgICAgIGMucmVwbGFjZShwYXRoVmFsdWVzLCBmdW5jdGlvbiAoYSwgYikg eworICAgICAgICAgICAgICAgIGIgJiYgcGFyYW1zLnB1c2goK2IpOworICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAobmFtZSA9PSAibSIgJiYg cGFyYW1zLmxlbmd0aCA+IDIpIHsKKyAgICAgICAgICAgICAgICBkYXRhLnB1 c2goW2JdLmNvbmNhdChwYXJhbXMuc3BsaWNlKDAsIDIpKSk7CisgICAgICAg ICAgICAgICAgbmFtZSA9ICJsIjsKKyAgICAgICAgICAgICAgICBiID0gYiA9 PSAibSIgPyAibCIgOiAiTCI7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAobmFtZSA9PSAibyIgJiYgcGFyYW1zLmxlbmd0aCA9PSAxKSB7Cisg ICAgICAgICAgICAgICAgZGF0YS5wdXNoKFtiLCBwYXJhbXNbMF1dKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYW1lID09ICJyIikgewor ICAgICAgICAgICAgICAgIGRhdGEucHVzaChbYl0uY29uY2F0KHBhcmFtcykp OworICAgICAgICAgICAgfSBlbHNlIHdoaWxlIChwYXJhbXMubGVuZ3RoID49 IHBhcmFtQ291bnRzW25hbWVdKSB7CisgICAgICAgICAgICAgICAgZGF0YS5w dXNoKFtiXS5jb25jYXQocGFyYW1zLnNwbGljZSgwLCBwYXJhbUNvdW50c1tu YW1lXSkpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhcmFtQ291bnRzW25h bWVdKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQor ICAgIGRhdGEudG9TdHJpbmcgPSBTbmFwLnBhdGgudG9TdHJpbmc7CisgICAg cHRoLmFyciA9IFNuYXAucGF0aC5jbG9uZShkYXRhKTsKKyAgICByZXR1cm4g ZGF0YTsKK307CisvKlwKKyAqIFNuYXAucGFyc2VUcmFuc2Zvcm1TdHJpbmcK KyBbIG1ldGhvZCBdCisgKioKKyAqIFV0aWxpdHkgbWV0aG9kCisgKioKKyAq IFBhcnNlcyBnaXZlbiB0cmFuc2Zvcm0gc3RyaW5nIGludG8gYW4gYXJyYXkg b2YgdHJhbnNmb3JtYXRpb25zCisgLSBUU3RyaW5nIChzdHJpbmd8YXJyYXkp IHRyYW5zZm9ybSBzdHJpbmcgb3IgYXJyYXkgb2YgdHJhbnNmb3JtYXRpb25z IChpbiB0aGUgbGFzdCBjYXNlIGl0IGlzIHJldHVybmVkIHN0cmFpZ2h0IGF3 YXkpCisgPSAoYXJyYXkpIGFycmF5IG9mIHRyYW5zZm9ybWF0aW9ucworXCov Cit2YXIgcGFyc2VUcmFuc2Zvcm1TdHJpbmcgPSBTbmFwLnBhcnNlVHJhbnNm b3JtU3RyaW5nID0gZnVuY3Rpb24gKFRTdHJpbmcpIHsKKyAgICBpZiAoIVRT dHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHZh ciBwYXJhbUNvdW50cyA9IHtyOiAzLCBzOiA0LCB0OiAyLCBtOiA2fSwKKyAg ICAgICAgZGF0YSA9IFtdOworICAgIGlmIChpcyhUU3RyaW5nLCAiYXJyYXki KSAmJiBpcyhUU3RyaW5nWzBdLCAiYXJyYXkiKSkgeyAvLyByb3VnaCBhc3N1 bXB0aW9uCisgICAgICAgIGRhdGEgPSBTbmFwLnBhdGguY2xvbmUoVFN0cmlu Zyk7CisgICAgfQorICAgIGlmICghZGF0YS5sZW5ndGgpIHsKKyAgICAgICAg U3RyKFRTdHJpbmcpLnJlcGxhY2UodENvbW1hbmQsIGZ1bmN0aW9uIChhLCBi LCBjKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0gW10sCisgICAgICAg ICAgICAgICAgbmFtZSA9IGIudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAg IGMucmVwbGFjZShwYXRoVmFsdWVzLCBmdW5jdGlvbiAoYSwgYikgeworICAg ICAgICAgICAgICAgIGIgJiYgcGFyYW1zLnB1c2goK2IpOworICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICBkYXRhLnB1c2goW2JdLmNvbmNhdChwYXJh bXMpKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIGRhdGEudG9TdHJpbmcg PSBTbmFwLnBhdGgudG9TdHJpbmc7CisgICAgcmV0dXJuIGRhdGE7Cit9Owor ZnVuY3Rpb24gc3ZnVHJhbnNmb3JtMnN0cmluZyh0c3RyKSB7CisgICAgdmFy IHJlcyA9IFtdOworICAgIHRzdHIgPSB0c3RyLnJlcGxhY2UoLyg/Ol58XHMp KFx3KylcKChbXildKylcKS9nLCBmdW5jdGlvbiAoYWxsLCBuYW1lLCBwYXJh bXMpIHsKKyAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNwbGl0KC9ccyosXHMq fFxzKy8pOworICAgICAgICBpZiAobmFtZSA9PSAicm90YXRlIiAmJiBwYXJh bXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIHBhcmFtcy5wdXNoKDAs IDApOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09ICJzY2FsZSIp IHsKKyAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMikgeworICAg ICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zbGljZSgwLCAyKTsKKyAg ICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PSAyKSB7Cisg ICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goMCwgMCk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PSAxKSB7Cisg ICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW1zWzBdLCAwLCAwKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSA9 PSAic2tld1giKSB7CisgICAgICAgICAgICByZXMucHVzaChbIm0iLCAxLCAw LCBtYXRoLnRhbihyYWQocGFyYW1zWzBdKSksIDEsIDAsIDBdKTsKKyAgICAg ICAgfSBlbHNlIGlmIChuYW1lID09ICJza2V3WSIpIHsKKyAgICAgICAgICAg IHJlcy5wdXNoKFsibSIsIDEsIG1hdGgudGFuKHJhZChwYXJhbXNbMF0pKSwg MCwgMSwgMCwgMF0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg cmVzLnB1c2goW25hbWUuY2hhckF0KDApXS5jb25jYXQocGFyYW1zKSk7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFsbDsKKyAgICB9KTsKKyAgICBy ZXR1cm4gcmVzOworfQorU25hcC5fLnN2Z1RyYW5zZm9ybTJzdHJpbmcgPSBz dmdUcmFuc2Zvcm0yc3RyaW5nOworU25hcC5fLnJnVHJhbnNmb3JtID0gL15b YS16XVtcc10qLT9cLj9cZC9pOworZnVuY3Rpb24gdHJhbnNmb3JtMm1hdHJp eCh0c3RyLCBiYm94KSB7CisgICAgdmFyIHRkYXRhID0gcGFyc2VUcmFuc2Zv cm1TdHJpbmcodHN0ciksCisgICAgICAgIG0gPSBuZXcgU25hcC5NYXRyaXg7 CisgICAgaWYgKHRkYXRhKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBp aSA9IHRkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAg IHZhciB0ID0gdGRhdGFbaV0sCisgICAgICAgICAgICAgICAgdGxlbiA9IHQu bGVuZ3RoLAorICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBTdHIodFswXSku dG9Mb3dlckNhc2UoKSwKKyAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRb MF0gIT0gY29tbWFuZCwKKyAgICAgICAgICAgICAgICBpbnZlciA9IGFic29s dXRlID8gbS5pbnZlcnQoKSA6IDAsCisgICAgICAgICAgICAgICAgeDEsCisg ICAgICAgICAgICAgICAgeTEsCisgICAgICAgICAgICAgICAgeDIsCisgICAg ICAgICAgICAgICAgeTIsCisgICAgICAgICAgICAgICAgYmI7CisgICAgICAg ICAgICBpZiAoY29tbWFuZCA9PSAidCIgJiYgdGxlbiA9PSAyKXsKKyAgICAg ICAgICAgICAgICBtLnRyYW5zbGF0ZSh0WzFdLCAwKTsKKyAgICAgICAgICAg IH0gZWxzZSBpZiAoY29tbWFuZCA9PSAidCIgJiYgdGxlbiA9PSAzKSB7Cisg ICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKSB7CisgICAgICAgICAgICAg ICAgICAgIHgxID0gaW52ZXIueCgwLCAwKTsKKyAgICAgICAgICAgICAgICAg ICAgeTEgPSBpbnZlci55KDAsIDApOworICAgICAgICAgICAgICAgICAgICB4 MiA9IGludmVyLngodFsxXSwgdFsyXSk7CisgICAgICAgICAgICAgICAgICAg IHkyID0gaW52ZXIueSh0WzFdLCB0WzJdKTsKKyAgICAgICAgICAgICAgICAg ICAgbS50cmFuc2xhdGUoeDIgLSB4MSwgeTIgLSB5MSk7CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbS50cmFuc2xh dGUodFsxXSwgdFsyXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSBlbHNlIGlmIChjb21tYW5kID09ICJyIikgeworICAgICAgICAgICAg ICAgIGlmICh0bGVuID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgYmIg PSBiYiB8fCBiYm94OworICAgICAgICAgICAgICAgICAgICBtLnJvdGF0ZSh0 WzFdLCBiYi54ICsgYmIud2lkdGggLyAyLCBiYi55ICsgYmIuaGVpZ2h0IC8g Mik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0bGVuID09IDQpIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICB4MiA9IGludmVyLngodFsyXSwgdFszXSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGludmVyLnkodFsyXSwgdFsz XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtLnJvdGF0ZSh0WzFdLCB4 MiwgeTIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgbS5yb3RhdGUodFsxXSwgdFsyXSwgdFszXSk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQgPT0gInMiKSB7CisgICAg ICAgICAgICAgICAgaWYgKHRsZW4gPT0gMiB8fCB0bGVuID09IDMpIHsKKyAg ICAgICAgICAgICAgICAgICAgYmIgPSBiYiB8fCBiYm94OworICAgICAgICAg ICAgICAgICAgICBtLnNjYWxlKHRbMV0sIHRbdGxlbiAtIDFdLCBiYi54ICsg YmIud2lkdGggLyAyLCBiYi55ICsgYmIuaGVpZ2h0IC8gMik7CisgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICh0bGVuID09IDQpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGFic29sdXRlKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICB4MiA9IGludmVyLngodFsyXSwgdFszXSk7CisgICAgICAgICAgICAg ICAgICAgICAgICB5MiA9IGludmVyLnkodFsyXSwgdFszXSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBtLnNjYWxlKHRbMV0sIHRbMV0sIHgyLCB5Mik7 CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgICAgICBtLnNjYWxlKHRbMV0sIHRbMV0sIHRbMl0sIHRbM10pOwor ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNl IGlmICh0bGVuID09IDUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFi c29sdXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4MiA9IGludmVy LngodFszXSwgdFs0XSk7CisgICAgICAgICAgICAgICAgICAgICAgICB5MiA9 IGludmVyLnkodFszXSwgdFs0XSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBtLnNjYWxlKHRbMV0sIHRbMl0sIHgyLCB5Mik7CisgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtLnNj YWxlKHRbMV0sIHRbMl0sIHRbM10sIHRbNF0pOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl IGlmIChjb21tYW5kID09ICJtIiAmJiB0bGVuID09IDcpIHsKKyAgICAgICAg ICAgICAgICBtLmFkZCh0WzFdLCB0WzJdLCB0WzNdLCB0WzRdLCB0WzVdLCB0 WzZdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBy ZXR1cm4gbTsKK30KK1NuYXAuXy50cmFuc2Zvcm0ybWF0cml4ID0gdHJhbnNm b3JtMm1hdHJpeDsKK1NuYXAuX3VuaXQycHggPSB1bml0MnB4OwordmFyIGNv bnRhaW5zID0gZ2xvYi5kb2MuY29udGFpbnMgfHwgZ2xvYi5kb2MuY29tcGFy ZURvY3VtZW50UG9zaXRpb24gPworICAgIGZ1bmN0aW9uIChhLCBiKSB7Cisg ICAgICAgIHZhciBhZG93biA9IGEubm9kZVR5cGUgPT0gOSA/IGEuZG9jdW1l bnRFbGVtZW50IDogYSwKKyAgICAgICAgICAgIGJ1cCA9IGIgJiYgYi5wYXJl bnROb2RlOworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYnVwIHx8ICEhKGJ1 cCAmJiBidXAubm9kZVR5cGUgPT0gMSAmJiAoCisgICAgICAgICAgICAgICAg YWRvd24uY29udGFpbnMgPworICAgICAgICAgICAgICAgICAgICBhZG93bi5j b250YWlucyhidXApIDoKKyAgICAgICAgICAgICAgICAgICAgYS5jb21wYXJl RG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9u KGJ1cCkgJiAxNgorICAgICAgICAgICAgKSk7CisgICAgfSA6CisgICAgZnVu Y3Rpb24gKGEsIGIpIHsKKyAgICAgICAgaWYgKGIpIHsKKyAgICAgICAgICAg IHdoaWxlIChiKSB7CisgICAgICAgICAgICAgICAgYiA9IGIucGFyZW50Tm9k ZTsKKyAgICAgICAgICAgICAgICBpZiAoYiA9PSBhKSB7CisgICAgICAgICAg ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfTsKK2Z1bmN0aW9uIGdldFNvbWVEZWZzKGVsKSB7CisgICAgdmFy IHAgPSAoZWwubm9kZS5vd25lclNWR0VsZW1lbnQgJiYgd3JhcChlbC5ub2Rl Lm93bmVyU1ZHRWxlbWVudCkpIHx8CisgICAgICAgICAgICAoZWwubm9kZS5w YXJlbnROb2RlICYmIHdyYXAoZWwubm9kZS5wYXJlbnROb2RlKSkgfHwKKyAg ICAgICAgICAgIFNuYXAuc2VsZWN0KCJzdmciKSB8fAorICAgICAgICAgICAg U25hcCgwLCAwKSwKKyAgICAgICAgcGRlZnMgPSBwLnNlbGVjdCgiZGVmcyIp LAorICAgICAgICBkZWZzICA9IHBkZWZzID09IG51bGwgPyBmYWxzZSA6IHBk ZWZzLm5vZGU7CisgICAgaWYgKCFkZWZzKSB7CisgICAgICAgIGRlZnMgPSBt YWtlKCJkZWZzIiwgcC5ub2RlKS5ub2RlOworICAgIH0KKyAgICByZXR1cm4g ZGVmczsKK30KK2Z1bmN0aW9uIGdldFNvbWVTVkcoZWwpIHsKKyAgICByZXR1 cm4gZWwubm9kZS5vd25lclNWR0VsZW1lbnQgJiYgd3JhcChlbC5ub2RlLm93 bmVyU1ZHRWxlbWVudCkgfHwgU25hcC5zZWxlY3QoInN2ZyIpOworfQorU25h cC5fLmdldFNvbWVEZWZzID0gZ2V0U29tZURlZnM7CitTbmFwLl8uZ2V0U29t ZVNWRyA9IGdldFNvbWVTVkc7CitmdW5jdGlvbiB1bml0MnB4KGVsLCBuYW1l LCB2YWx1ZSkgeworICAgIHZhciBzdmcgPSBnZXRTb21lU1ZHKGVsKS5ub2Rl LAorICAgICAgICBvdXQgPSB7fSwKKyAgICAgICAgbWdyID0gc3ZnLnF1ZXJ5 U2VsZWN0b3IoIi5zdmctLS1tZ3IiKTsKKyAgICBpZiAoIW1ncikgeworICAg ICAgICBtZ3IgPSAkKCJyZWN0Iik7CisgICAgICAgICQobWdyLCB7eDogLTll OSwgeTogLTllOSwgd2lkdGg6IDEwLCBoZWlnaHQ6IDEwLCAiY2xhc3MiOiAi c3ZnLS0tbWdyIiwgZmlsbDogIm5vbmUifSk7CisgICAgICAgIHN2Zy5hcHBl bmRDaGlsZChtZ3IpOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRXKHZhbCkg eworICAgICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJl dHVybiBFOworICAgICAgICB9CisgICAgICAgIGlmICh2YWwgPT0gK3ZhbCkg eworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgICAg ICAkKG1nciwge3dpZHRoOiB2YWx9KTsKKyAgICAgICAgdHJ5IHsKKyAgICAg ICAgICAgIHJldHVybiBtZ3IuZ2V0QkJveCgpLndpZHRoOworICAgICAgICB9 IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fQorICAgIH0KKyAgICBmdW5jdGlvbiBnZXRIKHZhbCkgeworICAgICAgICBp ZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBFOworICAg ICAgICB9CisgICAgICAgIGlmICh2YWwgPT0gK3ZhbCkgeworICAgICAgICAg ICAgcmV0dXJuIHZhbDsKKyAgICAgICAgfQorICAgICAgICAkKG1nciwge2hl aWdodDogdmFsfSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1 cm4gbWdyLmdldEJCb3goKS5oZWlnaHQ7CisgICAgICAgIH0gY2F0Y2ggKGUp IHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor ICAgIGZ1bmN0aW9uIHNldChuYW0sIGYpIHsKKyAgICAgICAgaWYgKG5hbWUg PT0gbnVsbCkgeworICAgICAgICAgICAgb3V0W25hbV0gPSBmKGVsLmF0dHIo bmFtKSB8fCAwKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW0gPT0gbmFtZSkg eworICAgICAgICAgICAgb3V0ID0gZih2YWx1ZSA9PSBudWxsID8gZWwuYXR0 cihuYW0pIHx8IDAgOiB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg c3dpdGNoIChlbC50eXBlKSB7CisgICAgICAgIGNhc2UgInJlY3QiOgorICAg ICAgICAgICAgc2V0KCJyeCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJy eSIsIGdldEgpOworICAgICAgICBjYXNlICJpbWFnZSI6CisgICAgICAgICAg ICBzZXQoIndpZHRoIiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoImhlaWdo dCIsIGdldEgpOworICAgICAgICBjYXNlICJ0ZXh0IjoKKyAgICAgICAgICAg IHNldCgieCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJ5IiwgZ2V0SCk7 CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJjaXJjbGUiOgorICAg ICAgICAgICAgc2V0KCJjeCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJj eSIsIGdldEgpOworICAgICAgICAgICAgc2V0KCJyIiwgZ2V0Vyk7CisgICAg ICAgIGJyZWFrOworICAgICAgICBjYXNlICJlbGxpcHNlIjoKKyAgICAgICAg ICAgIHNldCgiY3giLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgiY3kiLCBn ZXRIKTsKKyAgICAgICAgICAgIHNldCgicngiLCBnZXRXKTsKKyAgICAgICAg ICAgIHNldCgicnkiLCBnZXRIKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgImxpbmUiOgorICAgICAgICAgICAgc2V0KCJ4MSIsIGdldFcpOwor ICAgICAgICAgICAgc2V0KCJ4MiIsIGdldFcpOworICAgICAgICAgICAgc2V0 KCJ5MSIsIGdldEgpOworICAgICAgICAgICAgc2V0KCJ5MiIsIGdldEgpOwor ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibWFya2VyIjoKKyAgICAg ICAgICAgIHNldCgicmVmWCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJt YXJrZXJXaWR0aCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJyZWZZIiwg Z2V0SCk7CisgICAgICAgICAgICBzZXQoIm1hcmtlckhlaWdodCIsIGdldEgp OworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAicmFkaWFsR3JhZGll bnQiOgorICAgICAgICAgICAgc2V0KCJmeCIsIGdldFcpOworICAgICAgICAg ICAgc2V0KCJmeSIsIGdldEgpOworICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSAidHNwYW4iOgorICAgICAgICAgICAgc2V0KCJkeCIsIGdldFcpOwor ICAgICAgICAgICAgc2V0KCJkeSIsIGdldEgpOworICAgICAgICBicmVhazsK KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldChuYW1lLCBnZXRX KTsKKyAgICB9CisgICAgc3ZnLnJlbW92ZUNoaWxkKG1ncik7CisgICAgcmV0 dXJuIG91dDsKK30KKy8qXAorICogU25hcC5zZWxlY3QKKyBbIG1ldGhvZCBd CisgKioKKyAqIFdyYXBzIGEgRE9NIGVsZW1lbnQgc3BlY2lmaWVkIGJ5IENT UyBzZWxlY3RvciBhcyBARWxlbWVudAorIC0gcXVlcnkgKHN0cmluZykgQ1NT IHNlbGVjdG9yIG9mIHRoZSBlbGVtZW50CisgPSAoRWxlbWVudCkgdGhlIGN1 cnJlbnQgZWxlbWVudAorXCovCitTbmFwLnNlbGVjdCA9IGZ1bmN0aW9uIChx dWVyeSkgeworICAgIHF1ZXJ5ID0gU3RyKHF1ZXJ5KS5yZXBsYWNlKC8oW15c XF0pOi9nLCAiJDFcXDoiKTsKKyAgICByZXR1cm4gd3JhcChnbG9iLmRvYy5x dWVyeVNlbGVjdG9yKHF1ZXJ5KSk7Cit9OworLypcCisgKiBTbmFwLnNlbGVj dEFsbAorIFsgbWV0aG9kIF0KKyAqKgorICogV3JhcHMgRE9NIGVsZW1lbnRz IHNwZWNpZmllZCBieSBDU1Mgc2VsZWN0b3IgYXMgc2V0IG9yIGFycmF5IG9m IEBFbGVtZW50CisgLSBxdWVyeSAoc3RyaW5nKSBDU1Mgc2VsZWN0b3Igb2Yg dGhlIGVsZW1lbnQKKyA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVtZW50 CitcKi8KK1NuYXAuc2VsZWN0QWxsID0gZnVuY3Rpb24gKHF1ZXJ5KSB7Cisg ICAgdmFyIG5vZGVsaXN0ID0gZ2xvYi5kb2MucXVlcnlTZWxlY3RvckFsbChx dWVyeSksCisgICAgICAgIHNldCA9IChTbmFwLnNldCB8fCBBcnJheSkoKTsK KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVsaXN0Lmxlbmd0aDsgaSsr KSB7CisgICAgICAgIHNldC5wdXNoKHdyYXAobm9kZWxpc3RbaV0pKTsKKyAg ICB9CisgICAgcmV0dXJuIHNldDsKK307CisKK2Z1bmN0aW9uIGFkZDJncm91 cChsaXN0KSB7CisgICAgaWYgKCFpcyhsaXN0LCAiYXJyYXkiKSkgeworICAg ICAgICBsaXN0ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1l bnRzLCAwKTsKKyAgICB9CisgICAgdmFyIGkgPSAwLAorICAgICAgICBqID0g MCwKKyAgICAgICAgbm9kZSA9IHRoaXMubm9kZTsKKyAgICB3aGlsZSAodGhp c1tpXSkgZGVsZXRlIHRoaXNbaSsrXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwg bGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAobGlzdFtpXS50eXBl ID09ICJzZXQiKSB7CisgICAgICAgICAgICBsaXN0W2ldLmZvckVhY2goZnVu Y3Rpb24gKGVsKSB7CisgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGls ZChlbC5ub2RlKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChsaXN0W2ldLm5vZGUp OworICAgICAgICB9CisgICAgfQorICAgIHZhciBjaGlsZHJlbiA9IG5vZGUu Y2hpbGROb2RlczsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVu Z3RoOyBpKyspIHsKKyAgICAgICAgdGhpc1tqKytdID0gd3JhcChjaGlsZHJl bltpXSk7CisgICAgfQorICAgIHJldHVybiB0aGlzOworfQorLy8gSHViIGdh cmJhZ2UgY29sbGVjdG9yIGV2ZXJ5IDEwcworc2V0SW50ZXJ2YWwoZnVuY3Rp b24gKCkgeworICAgIGZvciAodmFyIGtleSBpbiBodWIpIGlmIChodWJbaGFz XShrZXkpKSB7CisgICAgICAgIHZhciBlbCA9IGh1YltrZXldLAorICAgICAg ICAgICAgbm9kZSA9IGVsLm5vZGU7CisgICAgICAgIGlmIChlbC50eXBlICE9 ICJzdmciICYmICFub2RlLm93bmVyU1ZHRWxlbWVudCB8fCBlbC50eXBlID09 ICJzdmciICYmICghbm9kZS5wYXJlbnROb2RlIHx8ICJvd25lclNWR0VsZW1l bnQiIGluIG5vZGUucGFyZW50Tm9kZSAmJiAhbm9kZS5vd25lclNWR0VsZW1l bnQpKSB7CisgICAgICAgICAgICBkZWxldGUgaHViW2tleV07CisgICAgICAg IH0KKyAgICB9Cit9LCAxZTQpOworZnVuY3Rpb24gRWxlbWVudChlbCkgewor ICAgIGlmIChlbC5zbmFwIGluIGh1YikgeworICAgICAgICByZXR1cm4gaHVi W2VsLnNuYXBdOworICAgIH0KKyAgICB2YXIgc3ZnOworICAgIHRyeSB7Cisg ICAgICAgIHN2ZyA9IGVsLm93bmVyU1ZHRWxlbWVudDsKKyAgICB9IGNhdGNo KGUpIHt9CisgICAgLypcCisgICAgICogRWxlbWVudC5ub2RlCisgICAgIFsg cHJvcGVydHkgKG9iamVjdCkgXQorICAgICAqKgorICAgICAqIEdpdmVzIHlv dSBhIHJlZmVyZW5jZSB0byB0aGUgRE9NIG9iamVjdCwgc28geW91IGNhbiBh c3NpZ24gZXZlbnQgaGFuZGxlcnMgb3IganVzdCBtZXNzIGFyb3VuZC4KKyAg ICAgPiBVc2FnZQorICAgICB8IC8vIGRyYXcgYSBjaXJjbGUgYXQgY29vcmRp bmF0ZSAxMCwxMCB3aXRoIHJhZGl1cyBvZiAxMAorICAgICB8IHZhciBjID0g cGFwZXIuY2lyY2xlKDEwLCAxMCwgMTApOworICAgICB8IGMubm9kZS5vbmNs aWNrID0gZnVuY3Rpb24gKCkgeworICAgICB8ICAgICBjLmF0dHIoImZpbGwi LCAicmVkIik7CisgICAgIHwgfTsKKyAgICBcKi8KKyAgICB0aGlzLm5vZGUg PSBlbDsKKyAgICBpZiAoc3ZnKSB7CisgICAgICAgIHRoaXMucGFwZXIgPSBu ZXcgUGFwZXIoc3ZnKTsKKyAgICB9CisgICAgLypcCisgICAgICogRWxlbWVu dC50eXBlCisgICAgIFsgcHJvcGVydHkgKHN0cmluZykgXQorICAgICAqKgor ICAgICAqIFNWRyB0YWcgbmFtZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4KKyAg ICBcKi8KKyAgICB0aGlzLnR5cGUgPSBlbC50YWdOYW1lIHx8IGVsLm5vZGVO YW1lOworICAgIHZhciBpZCA9IHRoaXMuaWQgPSBJRCh0aGlzKTsKKyAgICB0 aGlzLmFuaW1zID0ge307CisgICAgdGhpcy5fID0geworICAgICAgICB0cmFu c2Zvcm06IFtdCisgICAgfTsKKyAgICBlbC5zbmFwID0gaWQ7CisgICAgaHVi W2lkXSA9IHRoaXM7CisgICAgaWYgKHRoaXMudHlwZSA9PSAiZyIpIHsKKyAg ICAgICAgdGhpcy5hZGQgPSBhZGQyZ3JvdXA7CisgICAgfQorICAgIGlmICh0 aGlzLnR5cGUgaW4ge2c6IDEsIG1hc2s6IDEsIHBhdHRlcm46IDEsIHN5bWJv bDogMX0pIHsKKyAgICAgICAgZm9yICh2YXIgbWV0aG9kIGluIFBhcGVyLnBy b3RvdHlwZSkgaWYgKFBhcGVyLnByb3RvdHlwZVtoYXNdKG1ldGhvZCkpIHsK KyAgICAgICAgICAgIHRoaXNbbWV0aG9kXSA9IFBhcGVyLnByb3RvdHlwZVtt ZXRob2RdOworICAgICAgICB9CisgICAgfQorfQorICAgLypcCisgICAgICog RWxlbWVudC5hdHRyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBHZXRzIG9yIHNldHMgZ2l2ZW4gYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVu dC4KKyAgICAgKioKKyAgICAgLSBwYXJhbXMgKG9iamVjdCkgY29udGFpbnMg a2V5LXZhbHVlIHBhaXJzIG9mIGF0dHJpYnV0ZXMgeW91IHdhbnQgdG8gc2V0 CisgICAgICogb3IKKyAgICAgLSBwYXJhbSAoc3RyaW5nKSBuYW1lIG9mIHRo ZSBhdHRyaWJ1dGUKKyAgICAgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQgZWxl bWVudAorICAgICAqIG9yCisgICAgID0gKHN0cmluZykgdmFsdWUgb2YgYXR0 cmlidXRlCisgICAgID4gVXNhZ2UKKyAgICAgfCBlbC5hdHRyKHsKKyAgICAg fCAgICAgZmlsbDogIiNmYzAiLAorICAgICB8ICAgICBzdHJva2U6ICIjMDAw IiwKKyAgICAgfCAgICAgc3Ryb2tlV2lkdGg6IDIsIC8vIENhbWVsQ2FzZS4u LgorICAgICB8ICAgICAiZmlsbC1vcGFjaXR5IjogMC41LCAvLyBvciBkYXNo LXNlcGFyYXRlZCBuYW1lcworICAgICB8ICAgICB3aWR0aDogIio9MiIgLy8g cHJlZml4ZWQgdmFsdWVzCisgICAgIHwgfSk7CisgICAgIHwgY29uc29sZS5s b2coZWwuYXR0cigiZmlsbCIpKTsgLy8gI2ZjMAorICAgICAqIFByZWZpeGVk IHZhbHVlcyBpbiBmb3JtYXQgYCIrPTEwImAgc3VwcG9ydGVkLiBBbGwgZm91 ciBvcGVyYXRpb25zCisgICAgICogKGArYCwgYC1gLCBgKmAgYW5kIGAvYCkg Y291bGQgYmUgdXNlZC4gT3B0aW9uYWxseSB5b3UgY2FuIHVzZSB1bml0cyBm b3IgYCtgCisgICAgICogYW5kIGAtYDogYCIrPTJlbSJgLgorICAgIFwqLwor ICAgIEVsZW1lbnQucHJvdG90eXBlLmF0dHIgPSBmdW5jdGlvbiAocGFyYW1z LCB2YWx1ZSkgeworICAgICAgICB2YXIgZWwgPSB0aGlzLAorICAgICAgICAg ICAgbm9kZSA9IGVsLm5vZGU7CisgICAgICAgIGlmICghcGFyYW1zKSB7Cisg ICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPSAxKSB7CisgICAgICAg ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dDog bm9kZS5ub2RlVmFsdWUKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgdmFyIGF0dHIgPSBub2RlLmF0dHJpYnV0ZXMs CisgICAgICAgICAgICAgICAgb3V0ID0ge307CisgICAgICAgICAgICBmb3Ig KHZhciBpID0gMCwgaWkgPSBhdHRyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsK KyAgICAgICAgICAgICAgICBvdXRbYXR0cltpXS5ub2RlTmFtZV0gPSBhdHRy W2ldLm5vZGVWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl dHVybiBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzKHBhcmFtcywg InN0cmluZyIpKSB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0 aCA+IDEpIHsKKyAgICAgICAgICAgICAgICB2YXIganNvbiA9IHt9OworICAg ICAgICAgICAgICAgIGpzb25bcGFyYW1zXSA9IHZhbHVlOworICAgICAgICAg ICAgICAgIHBhcmFtcyA9IGpzb247CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHJldHVybiBldmUoInNuYXAudXRpbC5nZXRhdHRy LiIgKyBwYXJhbXMsIGVsKS5maXJzdERlZmluZWQoKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBhdHQgaW4gcGFyYW1z KSB7CisgICAgICAgICAgICBpZiAocGFyYW1zW2hhc10oYXR0KSkgeworICAg ICAgICAgICAgICAgIGV2ZSgic25hcC51dGlsLmF0dHIuIiArIGF0dCwgZWws IHBhcmFtc1thdHRdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gZWw7CisgICAgfTsKKy8qXAorICogU25hcC5wYXJzZQor IFsgbWV0aG9kIF0KKyAqKgorICogUGFyc2VzIFNWRyBmcmFnbWVudCBhbmQg Y29udmVydHMgaXQgaW50byBhIEBGcmFnbWVudAorICoqCisgLSBzdmcgKHN0 cmluZykgU1ZHIHN0cmluZworID0gKEZyYWdtZW50KSB0aGUgQEZyYWdtZW50 CitcKi8KK1NuYXAucGFyc2UgPSBmdW5jdGlvbiAoc3ZnKSB7CisgICAgdmFy IGYgPSBnbG9iLmRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksCisgICAg ICAgIGZ1bGwgPSB0cnVlLAorICAgICAgICBkaXYgPSBnbG9iLmRvYy5jcmVh dGVFbGVtZW50KCJkaXYiKTsKKyAgICBzdmcgPSBTdHIoc3ZnKTsKKyAgICBp ZiAoIXN2Zy5tYXRjaCgvXlxzKjxccypzdmcoPzpcc3w+KS8pKSB7CisgICAg ICAgIHN2ZyA9ICI8c3ZnPiIgKyBzdmcgKyAiPC9zdmc+IjsKKyAgICAgICAg ZnVsbCA9IGZhbHNlOworICAgIH0KKyAgICBkaXYuaW5uZXJIVE1MID0gc3Zn OworICAgIHN2ZyA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilb MF07CisgICAgaWYgKHN2ZykgeworICAgICAgICBpZiAoZnVsbCkgeworICAg ICAgICAgICAgZiA9IHN2ZzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHdoaWxlIChzdmcuZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgICAg IGYuYXBwZW5kQ2hpbGQoc3ZnLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuZXcgRnJhZ21lbnQo Zik7Cit9OworZnVuY3Rpb24gRnJhZ21lbnQoZnJhZykgeworICAgIHRoaXMu bm9kZSA9IGZyYWc7Cit9CisvKlwKKyAqIFNuYXAuZnJhZ21lbnQKKyBbIG1l dGhvZCBdCisgKioKKyAqIENyZWF0ZXMgYSBET00gZnJhZ21lbnQgZnJvbSBh IGdpdmVuIGxpc3Qgb2YgZWxlbWVudHMgb3Igc3RyaW5ncworICoqCisgLSB2 YXJhcmdzICjigKYpIFNWRyBzdHJpbmcKKyA9IChGcmFnbWVudCkgdGhlIEBG cmFnbWVudAorXCovCitTbmFwLmZyYWdtZW50ID0gZnVuY3Rpb24gKCkgewor ICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn dW1lbnRzLCAwKSwKKyAgICAgICAgZiA9IGdsb2IuZG9jLmNyZWF0ZURvY3Vt ZW50RnJhZ21lbnQoKTsKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmdz Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBh cmdzW2ldOworICAgICAgICBpZiAoaXRlbS5ub2RlICYmIGl0ZW0ubm9kZS5u b2RlVHlwZSkgeworICAgICAgICAgICAgZi5hcHBlbmRDaGlsZChpdGVtLm5v ZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChpdGVtLm5vZGVUeXBlKSB7 CisgICAgICAgICAgICBmLmFwcGVuZENoaWxkKGl0ZW0pOworICAgICAgICB9 CisgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAic3RyaW5nIikgeworICAg ICAgICAgICAgZi5hcHBlbmRDaGlsZChTbmFwLnBhcnNlKGl0ZW0pLm5vZGUp OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuZXcgRnJhZ21lbnQo Zik7Cit9OworCitmdW5jdGlvbiBtYWtlKG5hbWUsIHBhcmVudCkgeworICAg IHZhciByZXMgPSAkKG5hbWUpOworICAgIHBhcmVudC5hcHBlbmRDaGlsZChy ZXMpOworICAgIHZhciBlbCA9IHdyYXAocmVzKTsKKyAgICByZXR1cm4gZWw7 Cit9CitmdW5jdGlvbiBQYXBlcih3LCBoKSB7CisgICAgdmFyIHJlcywKKyAg ICAgICAgZGVzYywKKyAgICAgICAgZGVmcywKKyAgICAgICAgcHJvdG8gPSBQ YXBlci5wcm90b3R5cGU7CisgICAgaWYgKHcgJiYgdy50YWdOYW1lID09ICJz dmciKSB7CisgICAgICAgIGlmICh3LnNuYXAgaW4gaHViKSB7CisgICAgICAg ICAgICByZXR1cm4gaHViW3cuc25hcF07CisgICAgICAgIH0KKyAgICAgICAg dmFyIGRvYyA9IHcub3duZXJEb2N1bWVudDsKKyAgICAgICAgcmVzID0gbmV3 IEVsZW1lbnQodyk7CisgICAgICAgIGRlc2MgPSB3LmdldEVsZW1lbnRzQnlU YWdOYW1lKCJkZXNjIilbMF07CisgICAgICAgIGRlZnMgPSB3LmdldEVsZW1l bnRzQnlUYWdOYW1lKCJkZWZzIilbMF07CisgICAgICAgIGlmICghZGVzYykg eworICAgICAgICAgICAgZGVzYyA9ICQoImRlc2MiKTsKKyAgICAgICAgICAg IGRlc2MuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKCJDcmVhdGVk IHdpdGggU25hcCIpKTsKKyAgICAgICAgICAgIHJlcy5ub2RlLmFwcGVuZENo aWxkKGRlc2MpOworICAgICAgICB9CisgICAgICAgIGlmICghZGVmcykgewor ICAgICAgICAgICAgZGVmcyA9ICQoImRlZnMiKTsKKyAgICAgICAgICAgIHJl cy5ub2RlLmFwcGVuZENoaWxkKGRlZnMpOworICAgICAgICB9CisgICAgICAg IHJlcy5kZWZzID0gZGVmczsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIHBy b3RvKSBpZiAocHJvdG9baGFzXShrZXkpKSB7CisgICAgICAgICAgICByZXNb a2V5XSA9IHByb3RvW2tleV07CisgICAgICAgIH0KKyAgICAgICAgcmVzLnBh cGVyID0gcmVzLnJvb3QgPSByZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAg cmVzID0gbWFrZSgic3ZnIiwgZ2xvYi5kb2MuYm9keSk7CisgICAgICAgICQo cmVzLm5vZGUsIHsKKyAgICAgICAgICAgIGhlaWdodDogaCwKKyAgICAgICAg ICAgIHZlcnNpb246IDEuMSwKKyAgICAgICAgICAgIHdpZHRoOiB3LAorICAg ICAgICAgICAgeG1sbnM6IHhtbG5zCisgICAgICAgIH0pOworICAgIH0KKyAg ICByZXR1cm4gcmVzOworfQorZnVuY3Rpb24gd3JhcChkb20pIHsKKyAgICBp ZiAoIWRvbSkgeworICAgICAgICByZXR1cm4gZG9tOworICAgIH0KKyAgICBp ZiAoZG9tIGluc3RhbmNlb2YgRWxlbWVudCB8fCBkb20gaW5zdGFuY2VvZiBG cmFnbWVudCkgeworICAgICAgICByZXR1cm4gZG9tOworICAgIH0KKyAgICBp ZiAoZG9tLnRhZ05hbWUgJiYgZG9tLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9 PSAic3ZnIikgeworICAgICAgICByZXR1cm4gbmV3IFBhcGVyKGRvbSk7Cisg ICAgfQorICAgIGlmIChkb20udGFnTmFtZSAmJiBkb20udGFnTmFtZS50b0xv d2VyQ2FzZSgpID09ICJvYmplY3QiICYmIGRvbS50eXBlID09ICJpbWFnZS9z dmcreG1sIikgeworICAgICAgICByZXR1cm4gbmV3IFBhcGVyKGRvbS5jb250 ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdKTsK KyAgICB9CisgICAgcmV0dXJuIG5ldyBFbGVtZW50KGRvbSk7Cit9CisKK1Nu YXAuXy5tYWtlID0gbWFrZTsKK1NuYXAuXy53cmFwID0gd3JhcDsKKy8qXAor ICogUGFwZXIuZWwKKyBbIG1ldGhvZCBdCisgKioKKyAqIENyZWF0ZXMgYW4g ZWxlbWVudCBvbiBwYXBlciB3aXRoIGEgZ2l2ZW4gbmFtZSBhbmQgbm8gYXR0 cmlidXRlcworICoqCisgLSBuYW1lIChzdHJpbmcpIHRhZyBuYW1lCisgLSBh dHRyIChvYmplY3QpIGF0dHJpYnV0ZXMKKyA9IChFbGVtZW50KSB0aGUgY3Vy cmVudCBlbGVtZW50CisgPiBVc2FnZQorIHwgdmFyIGMgPSBwYXBlci5jaXJj bGUoMTAsIDEwLCAxMCk7IC8vIGlzIHRoZSBzYW1lIGFzLi4uCisgfCB2YXIg YyA9IHBhcGVyLmVsKCJjaXJjbGUiKS5hdHRyKHsKKyB8ICAgICBjeDogMTAs CisgfCAgICAgY3k6IDEwLAorIHwgICAgIHI6IDEwCisgfCB9KTsKKyB8IC8v IGFuZCB0aGUgc2FtZSBhcworIHwgdmFyIGMgPSBwYXBlci5lbCgiY2lyY2xl IiwgeworIHwgICAgIGN4OiAxMCwKKyB8ICAgICBjeTogMTAsCisgfCAgICAg cjogMTAKKyB8IH0pOworXCovCitQYXBlci5wcm90b3R5cGUuZWwgPSBmdW5j dGlvbiAobmFtZSwgYXR0cikgeworICAgIHZhciBlbCA9IG1ha2UobmFtZSwg dGhpcy5ub2RlKTsKKyAgICBhdHRyICYmIGVsLmF0dHIoYXR0cik7CisgICAg cmV0dXJuIGVsOworfTsKKy8qXAorICogRWxlbWVudC5jaGlsZHJlbgorIFsg bWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBhcnJheSBvZiBhbGwgdGhlIGNo aWxkcmVuIG9mIHRoZSBlbGVtZW50LgorID0gKGFycmF5KSBhcnJheSBvZiBF bGVtZW50cworXCovCitFbGVtZW50LnByb3RvdHlwZS5jaGlsZHJlbiA9IGZ1 bmN0aW9uICgpIHsKKyAgICB2YXIgb3V0ID0gW10sCisgICAgICAgIGNoID0g dGhpcy5ub2RlLmNoaWxkTm9kZXM7CisgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gY2gubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICBvdXRbaV0g PSBTbmFwKGNoW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIG91dDsKK307Citm dW5jdGlvbiBqc29uRmlsbGVyKHJvb3QsIG8pIHsKKyAgICBmb3IgKHZhciBp ID0gMCwgaWkgPSByb290Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgdmFyIGl0ZW0gPSB7CisgICAgICAgICAgICAgICAgdHlwZTogcm9vdFtp XS50eXBlLAorICAgICAgICAgICAgICAgIGF0dHI6IHJvb3RbaV0uYXR0cigp CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgY2hpbGRyZW4gPSByb290 W2ldLmNoaWxkcmVuKCk7CisgICAgICAgIG8ucHVzaChpdGVtKTsKKyAgICAg ICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkgeworICAgICAgICAgICAganNvbkZp bGxlcihjaGlsZHJlbiwgaXRlbS5jaGlsZE5vZGVzID0gW10pOworICAgICAg ICB9CisgICAgfQorfQorLypcCisgKiBFbGVtZW50LnRvSlNPTgorIFsgbWV0 aG9kIF0KKyAqKgorICogUmV0dXJucyBvYmplY3QgcmVwcmVzZW50YXRpb24g b2YgdGhlIGdpdmVuIGVsZW1lbnQgYW5kIGFsbCBpdHMgY2hpbGRyZW4uCisg PSAob2JqZWN0KSBpbiBmb3JtYXQKKyBvIHsKKyBvICAgICB0eXBlIChzdHJp bmcpIHRoaXMudHlwZSwKKyBvICAgICBhdHRyIChvYmplY3QpIGF0dHJpYnV0 ZXMgbWFwLAorIG8gICAgIGNoaWxkTm9kZXMgKGFycmF5KSBvcHRpb25hbCBh cnJheSBvZiBjaGlsZHJlbiBpbiB0aGUgc2FtZSBmb3JtYXQKKyBvIH0KK1wq LworRWxlbWVudC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkgewor ICAgIHZhciBvdXQgPSBbXTsKKyAgICBqc29uRmlsbGVyKFt0aGlzXSwgb3V0 KTsKKyAgICByZXR1cm4gb3V0WzBdOworfTsKKy8vIGRlZmF1bHQKK2V2ZS5v bigic25hcC51dGlsLmdldGF0dHIiLCBmdW5jdGlvbiAoKSB7CisgICAgdmFy IGF0dCA9IGV2ZS5udCgpOworICAgIGF0dCA9IGF0dC5zdWJzdHJpbmcoYXR0 Lmxhc3RJbmRleE9mKCIuIikgKyAxKTsKKyAgICB2YXIgY3NzID0gYXR0LnJl cGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uIChsZXR0ZXIpIHsKKyAgICAgICAg cmV0dXJuICItIiArIGxldHRlci50b0xvd2VyQ2FzZSgpOworICAgIH0pOwor ICAgIGlmIChjc3NBdHRyW2hhc10oY3NzKSkgeworICAgICAgICByZXR1cm4g dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0 ZWRTdHlsZSh0aGlzLm5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoY3Nz KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gJCh0aGlzLm5vZGUs IGF0dCk7CisgICAgfQorfSk7Cit2YXIgY3NzQXR0ciA9IHsKKyAgICAiYWxp Z25tZW50LWJhc2VsaW5lIjogMCwKKyAgICAiYmFzZWxpbmUtc2hpZnQiOiAw LAorICAgICJjbGlwIjogMCwKKyAgICAiY2xpcC1wYXRoIjogMCwKKyAgICAi Y2xpcC1ydWxlIjogMCwKKyAgICAiY29sb3IiOiAwLAorICAgICJjb2xvci1p bnRlcnBvbGF0aW9uIjogMCwKKyAgICAiY29sb3ItaW50ZXJwb2xhdGlvbi1m aWx0ZXJzIjogMCwKKyAgICAiY29sb3ItcHJvZmlsZSI6IDAsCisgICAgImNv bG9yLXJlbmRlcmluZyI6IDAsCisgICAgImN1cnNvciI6IDAsCisgICAgImRp cmVjdGlvbiI6IDAsCisgICAgImRpc3BsYXkiOiAwLAorICAgICJkb21pbmFu dC1iYXNlbGluZSI6IDAsCisgICAgImVuYWJsZS1iYWNrZ3JvdW5kIjogMCwK KyAgICAiZmlsbCI6IDAsCisgICAgImZpbGwtb3BhY2l0eSI6IDAsCisgICAg ImZpbGwtcnVsZSI6IDAsCisgICAgImZpbHRlciI6IDAsCisgICAgImZsb29k LWNvbG9yIjogMCwKKyAgICAiZmxvb2Qtb3BhY2l0eSI6IDAsCisgICAgImZv bnQiOiAwLAorICAgICJmb250LWZhbWlseSI6IDAsCisgICAgImZvbnQtc2l6 ZSI6IDAsCisgICAgImZvbnQtc2l6ZS1hZGp1c3QiOiAwLAorICAgICJmb250 LXN0cmV0Y2giOiAwLAorICAgICJmb250LXN0eWxlIjogMCwKKyAgICAiZm9u dC12YXJpYW50IjogMCwKKyAgICAiZm9udC13ZWlnaHQiOiAwLAorICAgICJn bHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIjogMCwKKyAgICAiZ2x5cGgt b3JpZW50YXRpb24tdmVydGljYWwiOiAwLAorICAgICJpbWFnZS1yZW5kZXJp bmciOiAwLAorICAgICJrZXJuaW5nIjogMCwKKyAgICAibGV0dGVyLXNwYWNp bmciOiAwLAorICAgICJsaWdodGluZy1jb2xvciI6IDAsCisgICAgIm1hcmtl ciI6IDAsCisgICAgIm1hcmtlci1lbmQiOiAwLAorICAgICJtYXJrZXItbWlk IjogMCwKKyAgICAibWFya2VyLXN0YXJ0IjogMCwKKyAgICAibWFzayI6IDAs CisgICAgIm9wYWNpdHkiOiAwLAorICAgICJvdmVyZmxvdyI6IDAsCisgICAg InBvaW50ZXItZXZlbnRzIjogMCwKKyAgICAic2hhcGUtcmVuZGVyaW5nIjog MCwKKyAgICAic3RvcC1jb2xvciI6IDAsCisgICAgInN0b3Atb3BhY2l0eSI6 IDAsCisgICAgInN0cm9rZSI6IDAsCisgICAgInN0cm9rZS1kYXNoYXJyYXki OiAwLAorICAgICJzdHJva2UtZGFzaG9mZnNldCI6IDAsCisgICAgInN0cm9r ZS1saW5lY2FwIjogMCwKKyAgICAic3Ryb2tlLWxpbmVqb2luIjogMCwKKyAg ICAic3Ryb2tlLW1pdGVybGltaXQiOiAwLAorICAgICJzdHJva2Utb3BhY2l0 eSI6IDAsCisgICAgInN0cm9rZS13aWR0aCI6IDAsCisgICAgInRleHQtYW5j aG9yIjogMCwKKyAgICAidGV4dC1kZWNvcmF0aW9uIjogMCwKKyAgICAidGV4 dC1yZW5kZXJpbmciOiAwLAorICAgICJ1bmljb2RlLWJpZGkiOiAwLAorICAg ICJ2aXNpYmlsaXR5IjogMCwKKyAgICAid29yZC1zcGFjaW5nIjogMCwKKyAg ICAid3JpdGluZy1tb2RlIjogMAorfTsKKworZXZlLm9uKCJzbmFwLnV0aWwu YXR0ciIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgIHZhciBhdHQgPSBldmUu bnQoKSwKKyAgICAgICAgYXR0ciA9IHt9OworICAgIGF0dCA9IGF0dC5zdWJz dHJpbmcoYXR0Lmxhc3RJbmRleE9mKCIuIikgKyAxKTsKKyAgICBhdHRyW2F0 dF0gPSB2YWx1ZTsKKyAgICB2YXIgc3R5bGUgPSBhdHQucmVwbGFjZSgvLShc dykvZ2ksIGZ1bmN0aW9uIChhbGwsIGxldHRlcikgeworICAgICAgICAgICAg cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpOworICAgICAgICB9KSwKKyAg ICAgICAgY3NzID0gYXR0LnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uIChs ZXR0ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAiLSIgKyBsZXR0ZXIudG9M b3dlckNhc2UoKTsKKyAgICAgICAgfSk7CisgICAgaWYgKGNzc0F0dHJbaGFz XShjc3MpKSB7CisgICAgICAgIHRoaXMubm9kZS5zdHlsZVtzdHlsZV0gPSB2 YWx1ZSA9PSBudWxsID8gRSA6IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAg ICAgICQodGhpcy5ub2RlLCBhdHRyKTsKKyAgICB9Cit9KTsKKyhmdW5jdGlv biAocHJvdG8pIHt9KFBhcGVyLnByb3RvdHlwZSkpOworCisvLyBzaW1wbGUg YWpheAorLypcCisgKiBTbmFwLmFqYXgKKyBbIG1ldGhvZCBdCisgKioKKyAq IFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiBBamF4CisgKioKKyAtIHVybCAo c3RyaW5nKSBVUkwKKyAtIHBvc3REYXRhIChvYmplY3R8c3RyaW5nKSBkYXRh IGZvciBwb3N0IHJlcXVlc3QKKyAtIGNhbGxiYWNrIChmdW5jdGlvbikgY2Fs bGJhY2sKKyAtIHNjb3BlIChvYmplY3QpICNvcHRpb25hbCBzY29wZSBvZiBj YWxsYmFjaworICogb3IKKyAtIHVybCAoc3RyaW5nKSBVUkwKKyAtIGNhbGxi YWNrIChmdW5jdGlvbikgY2FsbGJhY2sKKyAtIHNjb3BlIChvYmplY3QpICNv cHRpb25hbCBzY29wZSBvZiBjYWxsYmFjaworID0gKFhNTEh0dHBSZXF1ZXN0 KSB0aGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0LCBqdXN0IGluIGNhc2UKK1wq LworU25hcC5hamF4ID0gZnVuY3Rpb24gKHVybCwgcG9zdERhdGEsIGNhbGxi YWNrLCBzY29wZSl7CisgICAgdmFyIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVz dCwKKyAgICAgICAgaWQgPSBJRCgpOworICAgIGlmIChyZXEpIHsKKyAgICAg ICAgaWYgKGlzKHBvc3REYXRhLCAiZnVuY3Rpb24iKSkgeworICAgICAgICAg ICAgc2NvcGUgPSBjYWxsYmFjazsKKyAgICAgICAgICAgIGNhbGxiYWNrID0g cG9zdERhdGE7CisgICAgICAgICAgICBwb3N0RGF0YSA9IG51bGw7CisgICAg ICAgIH0gZWxzZSBpZiAoaXMocG9zdERhdGEsICJvYmplY3QiKSkgeworICAg ICAgICAgICAgdmFyIHBkID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBr ZXkgaW4gcG9zdERhdGEpIGlmIChwb3N0RGF0YS5oYXNPd25Qcm9wZXJ0eShr ZXkpKSB7CisgICAgICAgICAgICAgICAgcGQucHVzaChlbmNvZGVVUklDb21w b25lbnQoa2V5KSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChwb3N0RGF0 YVtrZXldKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3N0RGF0 YSA9IHBkLmpvaW4oIiYiKTsKKyAgICAgICAgfQorICAgICAgICByZXEub3Bl bigocG9zdERhdGEgPyAiUE9TVCIgOiAiR0VUIiksIHVybCwgdHJ1ZSk7Cisg ICAgICAgIGlmIChwb3N0RGF0YSkgeworICAgICAgICAgICAgcmVxLnNldFJl cXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCAiWE1MSHR0cFJlcXVl c3QiKTsKKyAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250 ZW50LXR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVk Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg ICAgICAgICBldmUub25jZSgic25hcC5hamF4LiIgKyBpZCArICIuMCIsIGNh bGxiYWNrKTsKKyAgICAgICAgICAgIGV2ZS5vbmNlKCJzbmFwLmFqYXguIiAr IGlkICsgIi4yMDAiLCBjYWxsYmFjayk7CisgICAgICAgICAgICBldmUub25j ZSgic25hcC5hamF4LiIgKyBpZCArICIuMzA0IiwgY2FsbGJhY2spOworICAg ICAgICB9CisgICAgICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5j dGlvbigpIHsKKyAgICAgICAgICAgIGlmIChyZXEucmVhZHlTdGF0ZSAhPSA0 KSByZXR1cm47CisgICAgICAgICAgICBldmUoInNuYXAuYWpheC4iICsgaWQg KyAiLiIgKyByZXEuc3RhdHVzLCBzY29wZSwgcmVxKTsKKyAgICAgICAgfTsK KyAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAg ICAgIHJldHVybiByZXE7CisgICAgICAgIH0KKyAgICAgICAgcmVxLnNlbmQo cG9zdERhdGEpOworICAgICAgICByZXR1cm4gcmVxOworICAgIH0KK307Cisv KlwKKyAqIFNuYXAubG9hZAorIFsgbWV0aG9kIF0KKyAqKgorICogTG9hZHMg ZXh0ZXJuYWwgU1ZHIGZpbGUgYXMgYSBARnJhZ21lbnQgKHNlZSBAU25hcC5h amF4IGZvciBtb3JlIGFkdmFuY2VkIEFKQVgpCisgKioKKyAtIHVybCAoc3Ry aW5nKSBVUkwKKyAtIGNhbGxiYWNrIChmdW5jdGlvbikgY2FsbGJhY2sKKyAt IHNjb3BlIChvYmplY3QpICNvcHRpb25hbCBzY29wZSBvZiBjYWxsYmFjawor XCovCitTbmFwLmxvYWQgPSBmdW5jdGlvbiAodXJsLCBjYWxsYmFjaywgc2Nv cGUpIHsKKyAgICBTbmFwLmFqYXgodXJsLCBmdW5jdGlvbiAocmVxKSB7Cisg ICAgICAgIHZhciBmID0gU25hcC5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTsK KyAgICAgICAgc2NvcGUgPyBjYWxsYmFjay5jYWxsKHNjb3BlLCBmKSA6IGNh bGxiYWNrKGYpOworICAgIH0pOworfTsKK3ZhciBnZXRPZmZzZXQgPSBmdW5j dGlvbiAoZWxlbSkgeworICAgIHZhciBib3ggPSBlbGVtLmdldEJvdW5kaW5n Q2xpZW50UmVjdCgpLAorICAgICAgICBkb2MgPSBlbGVtLm93bmVyRG9jdW1l bnQsCisgICAgICAgIGJvZHkgPSBkb2MuYm9keSwKKyAgICAgICAgZG9jRWxl bSA9IGRvYy5kb2N1bWVudEVsZW1lbnQsCisgICAgICAgIGNsaWVudFRvcCA9 IGRvY0VsZW0uY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDAsIGNs aWVudExlZnQgPSBkb2NFbGVtLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRM ZWZ0IHx8IDAsCisgICAgICAgIHRvcCAgPSBib3gudG9wICArIChnLndpbi5w YWdlWU9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcCB8fCBib2R5LnNjcm9s bFRvcCApIC0gY2xpZW50VG9wLAorICAgICAgICBsZWZ0ID0gYm94LmxlZnQg KyAoZy53aW4ucGFnZVhPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxMZWZ0IHx8 IGJvZHkuc2Nyb2xsTGVmdCkgLSBjbGllbnRMZWZ0OworICAgIHJldHVybiB7 CisgICAgICAgIHk6IHRvcCwKKyAgICAgICAgeDogbGVmdAorICAgIH07Cit9 OworLypcCisgKiBTbmFwLmdldEVsZW1lbnRCeVBvaW50CisgWyBtZXRob2Qg XQorICoqCisgKiBSZXR1cm5zIHlvdSB0b3Btb3N0IGVsZW1lbnQgdW5kZXIg Z2l2ZW4gcG9pbnQuCisgKioKKyA9IChvYmplY3QpIFNuYXAgZWxlbWVudCBv YmplY3QKKyAtIHggKG51bWJlcikgeCBjb29yZGluYXRlIGZyb20gdGhlIHRv cCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93CisgLSB5IChudW1iZXIpIHkg Y29vcmRpbmF0ZSBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHdp bmRvdworID4gVXNhZ2UKKyB8IFNuYXAuZ2V0RWxlbWVudEJ5UG9pbnQobW91 c2VYLCBtb3VzZVkpLmF0dHIoe3N0cm9rZTogIiNmMDAifSk7CitcKi8KK1Nu YXAuZ2V0RWxlbWVudEJ5UG9pbnQgPSBmdW5jdGlvbiAoeCwgeSkgeworICAg IHZhciBwYXBlciA9IHRoaXMsCisgICAgICAgIHN2ZyA9IHBhcGVyLmNhbnZh cywKKyAgICAgICAgdGFyZ2V0ID0gZ2xvYi5kb2MuZWxlbWVudEZyb21Qb2lu dCh4LCB5KTsKKyAgICBpZiAoZ2xvYi53aW4ub3BlcmEgJiYgdGFyZ2V0LnRh Z05hbWUgPT0gInN2ZyIpIHsKKyAgICAgICAgdmFyIHNvID0gZ2V0T2Zmc2V0 KHRhcmdldCksCisgICAgICAgICAgICBzciA9IHRhcmdldC5jcmVhdGVTVkdS ZWN0KCk7CisgICAgICAgIHNyLnggPSB4IC0gc28ueDsKKyAgICAgICAgc3Iu eSA9IHkgLSBzby55OworICAgICAgICBzci53aWR0aCA9IHNyLmhlaWdodCA9 IDE7CisgICAgICAgIHZhciBoaXRzID0gdGFyZ2V0LmdldEludGVyc2VjdGlv bkxpc3Qoc3IsIG51bGwpOworICAgICAgICBpZiAoaGl0cy5sZW5ndGgpIHsK KyAgICAgICAgICAgIHRhcmdldCA9IGhpdHNbaGl0cy5sZW5ndGggLSAxXTsK KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXRhcmdldCkgeworICAgICAg ICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIHdyYXAodGFyZ2V0 KTsKK307CisvKlwKKyAqIFNuYXAucGx1Z2luCisgWyBtZXRob2QgXQorICoq CisgKiBMZXQgeW91IHdyaXRlIHBsdWdpbnMuIFlvdSBwYXNzIGluIGEgZnVu Y3Rpb24gd2l0aCBmaXZlIGFyZ3VtZW50cywgbGlrZSB0aGlzOgorIHwgU25h cC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9i YWwsIEZyYWdtZW50KSB7CisgfCAgICAgU25hcC5uZXdtZXRob2QgPSBmdW5j dGlvbiAoKSB7fTsKKyB8ICAgICBFbGVtZW50LnByb3RvdHlwZS5uZXdtZXRo b2QgPSBmdW5jdGlvbiAoKSB7fTsKKyB8ICAgICBQYXBlci5wcm90b3R5cGUu bmV3bWV0aG9kID0gZnVuY3Rpb24gKCkge307CisgfCB9KTsKKyAqIEluc2lk ZSB0aGUgZnVuY3Rpb24geW91IGhhdmUgYWNjZXNzIHRvIGFsbCBtYWluIG9i amVjdHMgKGFuZCB0aGVpcgorICogcHJvdG90eXBlcykuIFRoaXMgYWxsb3cg eW91IHRvIGV4dGVuZCBhbnl0aGluZyB5b3Ugd2FudC4KKyAqKgorIC0gZiAo ZnVuY3Rpb24pIHlvdXIgcGx1Z2luIGJvZHkKK1wqLworU25hcC5wbHVnaW4g PSBmdW5jdGlvbiAoZikgeworICAgIGYoU25hcCwgRWxlbWVudCwgUGFwZXIs IGdsb2IsIEZyYWdtZW50KTsKK307CitnbG9iLndpbi5TbmFwID0gU25hcDsK K3JldHVybiBTbmFwOworfSh3aW5kb3cgfHwgdGhpcykpOworCisvLyBDb3B5 cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhl IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7 CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFw YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3Mg cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy aXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8g V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vu c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz c2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K K1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwg Z2xvYiwgRnJhZ21lbnQpIHsKKyAgICB2YXIgZWxwcm90byA9IEVsZW1lbnQu cHJvdG90eXBlLAorICAgICAgICBpcyA9IFNuYXAuaXMsCisgICAgICAgIFN0 ciA9IFN0cmluZywKKyAgICAgICAgdW5pdDJweCA9IFNuYXAuX3VuaXQycHgs CisgICAgICAgICQgPSBTbmFwLl8uJCwKKyAgICAgICAgbWFrZSA9IFNuYXAu Xy5tYWtlLAorICAgICAgICBnZXRTb21lRGVmcyA9IFNuYXAuXy5nZXRTb21l RGVmcywKKyAgICAgICAgaGFzID0gImhhc093blByb3BlcnR5IiwKKyAgICAg ICAgd3JhcCA9IFNuYXAuXy53cmFwOworICAgIC8qXAorICAgICAqIEVsZW1l bnQuZ2V0QkJveAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog UmV0dXJucyB0aGUgYm91bmRpbmcgYm94IGRlc2NyaXB0b3IgZm9yIHRoZSBn aXZlbiBlbGVtZW50CisgICAgICoqCisgICAgID0gKG9iamVjdCkgYm91bmRp bmcgYm94IGRlc2NyaXB0b3I6CisgICAgIG8geworICAgICBvICAgICBjeDog KG51bWJlcikgeCBvZiB0aGUgY2VudGVyLAorICAgICBvICAgICBjeTogKG51 bWJlcikgeCBvZiB0aGUgY2VudGVyLAorICAgICBvICAgICBoOiAobnVtYmVy KSBoZWlnaHQsCisgICAgIG8gICAgIGhlaWdodDogKG51bWJlcikgaGVpZ2h0 LAorICAgICBvICAgICBwYXRoOiAoc3RyaW5nKSBwYXRoIGNvbW1hbmQgZm9y IHRoZSBib3gsCisgICAgIG8gICAgIHIwOiAobnVtYmVyKSByYWRpdXMgb2Yg YSBjaXJjbGUgdGhhdCBmdWxseSBlbmNsb3NlcyB0aGUgYm94LAorICAgICBv ICAgICByMTogKG51bWJlcikgcmFkaXVzIG9mIHRoZSBzbWFsbGVzdCBjaXJj bGUgdGhhdCBjYW4gYmUgZW5jbG9zZWQsCisgICAgIG8gICAgIHIyOiAobnVt YmVyKSByYWRpdXMgb2YgdGhlIGxhcmdlc3QgY2lyY2xlIHRoYXQgY2FuIGJl IGVuY2xvc2VkLAorICAgICBvICAgICB2YjogKHN0cmluZykgYm94IGFzIGEg dmlld2JveCBjb21tYW5kLAorICAgICBvICAgICB3OiAobnVtYmVyKSB3aWR0 aCwKKyAgICAgbyAgICAgd2lkdGg6IChudW1iZXIpIHdpZHRoLAorICAgICBv ICAgICB4MjogKG51bWJlcikgeCBvZiB0aGUgcmlnaHQgc2lkZSwKKyAgICAg byAgICAgeDogKG51bWJlcikgeCBvZiB0aGUgbGVmdCBzaWRlLAorICAgICBv ICAgICB5MjogKG51bWJlcikgeSBvZiB0aGUgYm90dG9tIGVkZ2UsCisgICAg IG8gICAgIHk6IChudW1iZXIpIHkgb2YgdGhlIHRvcCBlZGdlCisgICAgIG8g fQorICAgIFwqLworICAgIGVscHJvdG8uZ2V0QkJveCA9IGZ1bmN0aW9uIChp c1dpdGhvdXRUcmFuc2Zvcm0pIHsKKyAgICAgICAgaWYgKCFTbmFwLk1hdHJp eCB8fCAhU25hcC5wYXRoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5u b2RlLmdldEJCb3goKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZWwgPSB0 aGlzLAorICAgICAgICAgICAgbSA9IG5ldyBTbmFwLk1hdHJpeDsKKyAgICAg ICAgaWYgKGVsLnJlbW92ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiBTbmFw Ll8uYm94KCk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGVsLnR5cGUg PT0gInVzZSIpIHsKKyAgICAgICAgICAgIGlmICghaXNXaXRob3V0VHJhbnNm b3JtKSB7CisgICAgICAgICAgICAgICAgbSA9IG0uYWRkKGVsLnRyYW5zZm9y bSgpLmxvY2FsTWF0cml4LnRyYW5zbGF0ZShlbC5hdHRyKCJ4IikgfHwgMCwg ZWwuYXR0cigieSIpIHx8IDApKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChlbC5vcmlnaW5hbCkgeworICAgICAgICAgICAgICAgIGVsID0g ZWwub3JpZ2luYWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIHZhciBocmVmID0gZWwuYXR0cigieGxpbms6aHJlZiIpOworICAg ICAgICAgICAgICAgIGVsID0gZWwub3JpZ2luYWwgPSBlbC5ub2RlLm93bmVy RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaHJlZi5zdWJzdHJpbmcoaHJlZi5p bmRleE9mKCIjIikgKyAxKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgdmFyIF8gPSBlbC5fLAorICAgICAgICAgICAgcGF0aGZpbmRl ciA9IFNuYXAucGF0aC5nZXRbZWwudHlwZV0gfHwgU25hcC5wYXRoLmdldC5k ZWZsdDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChpc1dpdGhv dXRUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgICAgICBfLmJib3h3dCA9IHBh dGhmaW5kZXIgPyBTbmFwLnBhdGguZ2V0QkJveChlbC5yZWFsUGF0aCA9IHBh dGhmaW5kZXIoZWwpKSA6IFNuYXAuXy5ib3goZWwubm9kZS5nZXRCQm94KCkp OworICAgICAgICAgICAgICAgIHJldHVybiBTbmFwLl8uYm94KF8uYmJveHd0 KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWwu cmVhbFBhdGggPSBwYXRoZmluZGVyKGVsKTsKKyAgICAgICAgICAgICAgICBl bC5tYXRyaXggPSBlbC50cmFuc2Zvcm0oKS5sb2NhbE1hdHJpeDsKKyAgICAg ICAgICAgICAgICBfLmJib3ggPSBTbmFwLnBhdGguZ2V0QkJveChTbmFwLnBh dGgubWFwKGVsLnJlYWxQYXRoLCBtLmFkZChlbC5tYXRyaXgpKSk7CisgICAg ICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goXy5iYm94KTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg Ly8gRmlyZWZveCBkb2VzbuKAmXQgZ2l2ZSB5b3UgYmJveCBvZiBoaWRkZW4g ZWxlbWVudAorICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goKTsKKyAg ICAgICAgfQorICAgIH07CisgICAgdmFyIHByb3BTdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnN0cmluZzsKKyAgICB9Owor ICAgIGZ1bmN0aW9uIGV4dHJhY3RUcmFuc2Zvcm0oZWwsIHRzdHIpIHsKKyAg ICAgICAgaWYgKHRzdHIgPT0gbnVsbCkgeworICAgICAgICAgICAgdmFyIGRv UmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChlbC50eXBlID09ICJs aW5lYXJHcmFkaWVudCIgfHwgZWwudHlwZSA9PSAicmFkaWFsR3JhZGllbnQi KSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IGVsLm5vZGUuZ2V0QXR0cmli dXRlKCJncmFkaWVudFRyYW5zZm9ybSIpOworICAgICAgICAgICAgfSBlbHNl IGlmIChlbC50eXBlID09ICJwYXR0ZXJuIikgeworICAgICAgICAgICAgICAg IHRzdHIgPSBlbC5ub2RlLmdldEF0dHJpYnV0ZSgicGF0dGVyblRyYW5zZm9y bSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0 c3RyID0gZWwubm9kZS5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0c3RyKSB7CisgICAgICAg ICAgICAgICAgcmV0dXJuIG5ldyBTbmFwLk1hdHJpeDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHRzdHIgPSBTbmFwLl8uc3ZnVHJhbnNmb3JtMnN0 cmluZyh0c3RyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm ICghU25hcC5fLnJnVHJhbnNmb3JtLnRlc3QodHN0cikpIHsKKyAgICAgICAg ICAgICAgICB0c3RyID0gU25hcC5fLnN2Z1RyYW5zZm9ybTJzdHJpbmcodHN0 cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRz dHIgPSBTdHIodHN0cikucmVwbGFjZSgvXC57M318XHUyMDI2L2csIGVsLl8u dHJhbnNmb3JtIHx8ICIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmIChpcyh0c3RyLCAiYXJyYXkiKSkgeworICAgICAgICAgICAgICAgIHRz dHIgPSBTbmFwLnBhdGggPyBTbmFwLnBhdGgudG9TdHJpbmcuY2FsbCh0c3Ry KSA6IFN0cih0c3RyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs Ll8udHJhbnNmb3JtID0gdHN0cjsKKyAgICAgICAgfQorICAgICAgICB2YXIg bSA9IFNuYXAuXy50cmFuc2Zvcm0ybWF0cml4KHRzdHIsIGVsLmdldEJCb3go MSkpOworICAgICAgICBpZiAoZG9SZXR1cm4pIHsKKyAgICAgICAgICAgIHJl dHVybiBtOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZWwubWF0 cml4ID0gbTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LnRyYW5zZm9ybQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogR2V0cyBvciBzZXRzIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBlbGVt ZW50CisgICAgICoqCisgICAgIC0gdHN0ciAoc3RyaW5nKSB0cmFuc2Zvcm0g c3RyaW5nIGluIFNuYXAgb3IgU1ZHIGZvcm1hdAorICAgICA9IChFbGVtZW50 KSB0aGUgY3VycmVudCBlbGVtZW50CisgICAgICogb3IKKyAgICAgPSAob2Jq ZWN0KSB0cmFuc2Zvcm1hdGlvbiBkZXNjcmlwdG9yOgorICAgICBvIHsKKyAg ICAgbyAgICAgc3RyaW5nIChzdHJpbmcpIHRyYW5zZm9ybSBzdHJpbmcsCisg ICAgIG8gICAgIGdsb2JhbE1hdHJpeCAoTWF0cml4KSBtYXRyaXggb2YgYWxs IHRyYW5zZm9ybWF0aW9ucyBhcHBsaWVkIHRvIGVsZW1lbnQgb3IgaXRzIHBh cmVudHMsCisgICAgIG8gICAgIGxvY2FsTWF0cml4IChNYXRyaXgpIG1hdHJp eCBvZiB0cmFuc2Zvcm1hdGlvbnMgYXBwbGllZCBvbmx5IHRvIHRoZSBlbGVt ZW50LAorICAgICBvICAgICBkaWZmTWF0cml4IChNYXRyaXgpIG1hdHJpeCBv ZiBkaWZmZXJlbmNlIGJldHdlZW4gZ2xvYmFsIGFuZCBsb2NhbCB0cmFuc2Zv cm1hdGlvbnMsCisgICAgIG8gICAgIGdsb2JhbCAoc3RyaW5nKSBnbG9iYWwg dHJhbnNmb3JtYXRpb24gYXMgc3RyaW5nLAorICAgICBvICAgICBsb2NhbCAo c3RyaW5nKSBsb2NhbCB0cmFuc2Zvcm1hdGlvbiBhcyBzdHJpbmcsCisgICAg IG8gICAgIHRvU3RyaW5nIChmdW5jdGlvbikgcmV0dXJucyBgc3RyaW5nYCBw cm9wZXJ0eQorICAgICBvIH0KKyAgICBcKi8KKyAgICBlbHByb3RvLnRyYW5z Zm9ybSA9IGZ1bmN0aW9uICh0c3RyKSB7CisgICAgICAgIHZhciBfID0gdGhp cy5fOworICAgICAgICBpZiAodHN0ciA9PSBudWxsKSB7CisgICAgICAgICAg ICB2YXIgcGFwYSA9IHRoaXMsCisgICAgICAgICAgICAgICAgZ2xvYmFsID0g bmV3IFNuYXAuTWF0cml4KHRoaXMubm9kZS5nZXRDVE0oKSksCisgICAgICAg ICAgICAgICAgbG9jYWwgPSBleHRyYWN0VHJhbnNmb3JtKHRoaXMpLAorICAg ICAgICAgICAgICAgIG1zID0gW2xvY2FsXSwKKyAgICAgICAgICAgICAgICBt ID0gbmV3IFNuYXAuTWF0cml4LAorICAgICAgICAgICAgICAgIGksCisgICAg ICAgICAgICAgICAgbG9jYWxTdHJpbmcgPSBsb2NhbC50b1RyYW5zZm9ybVN0 cmluZygpLAorICAgICAgICAgICAgICAgIHN0cmluZyA9IFN0cihsb2NhbCkg PT0gU3RyKHRoaXMubWF0cml4KSA/CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RyKF8udHJhbnNmb3JtKSA6IGxvY2FsU3RyaW5nOworICAgICAg ICAgICAgd2hpbGUgKHBhcGEudHlwZSAhPSAic3ZnIiAmJiAocGFwYSA9IHBh cGEucGFyZW50KCkpKSB7CisgICAgICAgICAgICAgICAgbXMucHVzaChleHRy YWN0VHJhbnNmb3JtKHBhcGEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGkgPSBtcy5sZW5ndGg7CisgICAgICAgICAgICB3aGlsZSAoaS0tKSB7 CisgICAgICAgICAgICAgICAgbS5hZGQobXNbaV0pOworICAgICAgICAgICAg fQorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBzdHJp bmc6IHN0cmluZywKKyAgICAgICAgICAgICAgICBnbG9iYWxNYXRyaXg6IGds b2JhbCwKKyAgICAgICAgICAgICAgICB0b3RhbE1hdHJpeDogbSwKKyAgICAg ICAgICAgICAgICBsb2NhbE1hdHJpeDogbG9jYWwsCisgICAgICAgICAgICAg ICAgZGlmZk1hdHJpeDogZ2xvYmFsLmNsb25lKCkuYWRkKGxvY2FsLmludmVy dCgpKSwKKyAgICAgICAgICAgICAgICBnbG9iYWw6IGdsb2JhbC50b1RyYW5z Zm9ybVN0cmluZygpLAorICAgICAgICAgICAgICAgIHRvdGFsOiBtLnRvVHJh bnNmb3JtU3RyaW5nKCksCisgICAgICAgICAgICAgICAgbG9jYWw6IGxvY2Fs U3RyaW5nLAorICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBwcm9wU3RyaW5n CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGlmICh0c3Ry IGluc3RhbmNlb2YgU25hcC5NYXRyaXgpIHsKKyAgICAgICAgICAgIHRoaXMu bWF0cml4ID0gdHN0cjsKKyAgICAgICAgICAgIHRoaXMuXy50cmFuc2Zvcm0g PSB0c3RyLnRvVHJhbnNmb3JtU3RyaW5nKCk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBleHRyYWN0VHJhbnNmb3JtKHRoaXMsIHRzdHIpOwor ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMubm9kZSkgeworICAgICAg ICAgICAgaWYgKHRoaXMudHlwZSA9PSAibGluZWFyR3JhZGllbnQiIHx8IHRo aXMudHlwZSA9PSAicmFkaWFsR3JhZGllbnQiKSB7CisgICAgICAgICAgICAg ICAgJCh0aGlzLm5vZGUsIHtncmFkaWVudFRyYW5zZm9ybTogdGhpcy5tYXRy aXh9KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09ICJw YXR0ZXJuIikgeworICAgICAgICAgICAgICAgICQodGhpcy5ub2RlLCB7cGF0 dGVyblRyYW5zZm9ybTogdGhpcy5tYXRyaXh9KTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgJCh0aGlzLm5vZGUsIHt0cmFuc2Zv cm06IHRoaXMubWF0cml4fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAg ICAqIEVsZW1lbnQucGFyZW50CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50J3MgcGFyZW50CisgICAgICoq CisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJlbnQgZWxlbWVudAorICAgIFwq LworICAgIGVscHJvdG8ucGFyZW50ID0gZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gd3JhcCh0aGlzLm5vZGUucGFyZW50Tm9kZSk7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFwcGVuZAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogQXBwZW5kcyB0aGUgZ2l2ZW4gZWxlbWVu dCB0byBjdXJyZW50IG9uZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50 fFNldCkgZWxlbWVudCB0byBhcHBlbmQKKyAgICAgPSAoRWxlbWVudCkgdGhl IHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxl bWVudC5hZGQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNl ZSBARWxlbWVudC5hcHBlbmQKKyAgICBcKi8KKyAgICBlbHByb3RvLmFwcGVu ZCA9IGVscHJvdG8uYWRkID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGlm IChlbCkgeworICAgICAgICAgICAgaWYgKGVsLnR5cGUgPT0gInNldCIpIHsK KyAgICAgICAgICAgICAgICB2YXIgaXQgPSB0aGlzOworICAgICAgICAgICAg ICAgIGVsLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICAg ICAgICAgIGl0LmFkZChlbCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBlbCA9IHdyYXAoZWwpOworICAgICAgICAgICAgdGhpcy5ub2Rl LmFwcGVuZENoaWxkKGVsLm5vZGUpOworICAgICAgICAgICAgZWwucGFwZXIg PSB0aGlzLnBhcGVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5hcHBlbmRUbwor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQXBwZW5kcyB0aGUg Y3VycmVudCBlbGVtZW50IHRvIHRoZSBnaXZlbiBvbmUKKyAgICAgKioKKyAg ICAgLSBlbCAoRWxlbWVudCkgcGFyZW50IGVsZW1lbnQgdG8gYXBwZW5kIHRv CisgICAgID0gKEVsZW1lbnQpIHRoZSBjaGlsZCBlbGVtZW50CisgICAgXCov CisgICAgZWxwcm90by5hcHBlbmRUbyA9IGZ1bmN0aW9uIChlbCkgeworICAg ICAgICBpZiAoZWwpIHsKKyAgICAgICAgICAgIGVsID0gd3JhcChlbCk7Cisg ICAgICAgICAgICBlbC5hcHBlbmQodGhpcyk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnByZXBlbmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFByZXBlbmRzIHRoZSBnaXZlbiBlbGVtZW50IHRvIHRoZSBjdXJyZW50IG9u ZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50KSBlbGVtZW50IHRvIHBy ZXBlbmQKKyAgICAgPSAoRWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50Cisg ICAgXCovCisgICAgZWxwcm90by5wcmVwZW5kID0gZnVuY3Rpb24gKGVsKSB7 CisgICAgICAgIGlmIChlbCkgeworICAgICAgICAgICAgaWYgKGVsLnR5cGUg PT0gInNldCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXQgPSB0aGlzLAor ICAgICAgICAgICAgICAgICAgICBmaXJzdDsKKyAgICAgICAgICAgICAgICBl bC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeworICAgICAgICAgICAgICAgICAg ICBpZiAoZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0 LmFmdGVyKGVsKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGl0LnByZXBlbmQoZWwpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0g ZWw7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbCA9IHdy YXAoZWwpOworICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudCgp OworICAgICAgICAgICAgdGhpcy5ub2RlLmluc2VydEJlZm9yZShlbC5ub2Rl LCB0aGlzLm5vZGUuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICB0aGlzLmFk ZCAmJiB0aGlzLmFkZCgpOworICAgICAgICAgICAgZWwucGFwZXIgPSB0aGlz LnBhcGVyOworICAgICAgICAgICAgdGhpcy5wYXJlbnQoKSAmJiB0aGlzLnBh cmVudCgpLmFkZCgpOworICAgICAgICAgICAgcGFyZW50ICYmIHBhcmVudC5h ZGQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9 OworICAgIC8qXAorICAgICAqIEVsZW1lbnQucHJlcGVuZFRvCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBQcmVwZW5kcyB0aGUgY3VycmVu dCBlbGVtZW50IHRvIHRoZSBnaXZlbiBvbmUKKyAgICAgKioKKyAgICAgLSBl bCAoRWxlbWVudCkgcGFyZW50IGVsZW1lbnQgdG8gcHJlcGVuZCB0bworICAg ICA9IChFbGVtZW50KSB0aGUgY2hpbGQgZWxlbWVudAorICAgIFwqLworICAg IGVscHJvdG8ucHJlcGVuZFRvID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAg IGVsID0gd3JhcChlbCk7CisgICAgICAgIGVsLnByZXBlbmQodGhpcyk7Cisg ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICog RWxlbWVudC5iZWZvcmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIEluc2VydHMgZ2l2ZW4gZWxlbWVudCBiZWZvcmUgdGhlIGN1cnJlbnQg b25lCisgICAgICoqCisgICAgIC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgdG8g aW5zZXJ0CisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJlbnQgZWxlbWVudAor ICAgIFwqLworICAgIGVscHJvdG8uYmVmb3JlID0gZnVuY3Rpb24gKGVsKSB7 CisgICAgICAgIGlmIChlbC50eXBlID09ICJzZXQiKSB7CisgICAgICAgICAg ICB2YXIgaXQgPSB0aGlzOworICAgICAgICAgICAgZWwuZm9yRWFjaChmdW5j dGlvbiAoZWwpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWwu cGFyZW50KCk7CisgICAgICAgICAgICAgICAgaXQubm9kZS5wYXJlbnROb2Rl Lmluc2VydEJlZm9yZShlbC5ub2RlLCBpdC5ub2RlKTsKKyAgICAgICAgICAg ICAgICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICB0aGlzLnBhcmVudCgpLmFkZCgpOworICAgICAgICAg ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgZWwgPSB3cmFw KGVsKTsKKyAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudCgpOworICAg ICAgICB0aGlzLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwubm9k ZSwgdGhpcy5ub2RlKTsKKyAgICAgICAgdGhpcy5wYXJlbnQoKSAmJiB0aGlz LnBhcmVudCgpLmFkZCgpOworICAgICAgICBwYXJlbnQgJiYgcGFyZW50LmFk ZCgpOworICAgICAgICBlbC5wYXBlciA9IHRoaXMucGFwZXI7CisgICAgICAg IHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVu dC5hZnRlcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogSW5z ZXJ0cyBnaXZlbiBlbGVtZW50IGFmdGVyIHRoZSBjdXJyZW50IG9uZQorICAg ICAqKgorICAgICAtIGVsIChFbGVtZW50KSBlbGVtZW50IHRvIGluc2VydAor ICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBcKi8K KyAgICBlbHByb3RvLmFmdGVyID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAg IGVsID0gd3JhcChlbCk7CisgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJl bnQoKTsKKyAgICAgICAgaWYgKHRoaXMubm9kZS5uZXh0U2libGluZykgewor ICAgICAgICAgICAgdGhpcy5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3Jl KGVsLm5vZGUsIHRoaXMubm9kZS5uZXh0U2libGluZyk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICB0aGlzLm5vZGUucGFyZW50Tm9kZS5hcHBl bmRDaGlsZChlbC5ub2RlKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBh cmVudCgpICYmIHRoaXMucGFyZW50KCkuYWRkKCk7CisgICAgICAgIHBhcmVu dCAmJiBwYXJlbnQuYWRkKCk7CisgICAgICAgIGVsLnBhcGVyID0gdGhpcy5w YXBlcjsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50Lmluc2VydEJlZm9yZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogSW5zZXJ0cyB0aGUgZWxlbWVudCBhZnRlciB0 aGUgZ2l2ZW4gb25lCisgICAgICoqCisgICAgIC0gZWwgKEVsZW1lbnQpIGVs ZW1lbnQgbmV4dCB0byB3aG9tIGluc2VydCB0bworICAgICA9IChFbGVtZW50 KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLmlu c2VydEJlZm9yZSA9IGZ1bmN0aW9uIChlbCkgeworICAgICAgICBlbCA9IHdy YXAoZWwpOworICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQoKTsK KyAgICAgICAgZWwubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlz Lm5vZGUsIGVsLm5vZGUpOworICAgICAgICB0aGlzLnBhcGVyID0gZWwucGFw ZXI7CisgICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7CisgICAgICAg IGVsLnBhcmVudCgpICYmIGVsLnBhcmVudCgpLmFkZCgpOworICAgICAgICBy ZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQu aW5zZXJ0QWZ0ZXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IEluc2VydHMgdGhlIGVsZW1lbnQgYWZ0ZXIgdGhlIGdpdmVuIG9uZQorICAg ICAqKgorICAgICAtIGVsIChFbGVtZW50KSBlbGVtZW50IG5leHQgdG8gd2hv bSBpbnNlcnQgdG8KKyAgICAgPSAoRWxlbWVudCkgdGhlIHBhcmVudCBlbGVt ZW50CisgICAgXCovCisgICAgZWxwcm90by5pbnNlcnRBZnRlciA9IGZ1bmN0 aW9uIChlbCkgeworICAgICAgICBlbCA9IHdyYXAoZWwpOworICAgICAgICB2 YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQoKTsKKyAgICAgICAgZWwubm9kZS5w YXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLm5vZGUsIGVsLm5vZGUubmV4 dFNpYmxpbmcpOworICAgICAgICB0aGlzLnBhcGVyID0gZWwucGFwZXI7Cisg ICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7CisgICAgICAgIGVsLnBh cmVudCgpICYmIGVsLnBhcmVudCgpLmFkZCgpOworICAgICAgICByZXR1cm4g dGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQucmVtb3Zl CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGVs ZW1lbnQgZnJvbSB0aGUgRE9NCisgICAgID0gKEVsZW1lbnQpIHRoZSBkZXRh Y2hlZCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5yZW1vdmUgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVu dCgpOworICAgICAgICB0aGlzLm5vZGUucGFyZW50Tm9kZSAmJiB0aGlzLm5v ZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm5vZGUpOworICAgICAg ICBkZWxldGUgdGhpcy5wYXBlcjsKKyAgICAgICAgdGhpcy5yZW1vdmVkID0g dHJ1ZTsKKyAgICAgICAgcGFyZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAg ICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnNlbGVjdAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog R2F0aGVycyB0aGUgbmVzdGVkIEBFbGVtZW50IG1hdGNoaW5nIHRoZSBnaXZl biBzZXQgb2YgQ1NTIHNlbGVjdG9ycworICAgICAqKgorICAgICAtIHF1ZXJ5 IChzdHJpbmcpIENTUyBzZWxlY3RvcgorICAgICA9IChFbGVtZW50KSByZXN1 bHQgb2YgcXVlcnkgc2VsZWN0aW9uCisgICAgXCovCisgICAgZWxwcm90by5z ZWxlY3QgPSBmdW5jdGlvbiAocXVlcnkpIHsKKyAgICAgICAgcmV0dXJuIHdy YXAodGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3IocXVlcnkpKTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIEVsZW1lbnQuc2VsZWN0QWxsCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBHYXRoZXJzIG5lc3RlZCBARWxlbWVu dCBvYmplY3RzIG1hdGNoaW5nIHRoZSBnaXZlbiBzZXQgb2YgQ1NTIHNlbGVj dG9ycworICAgICAqKgorICAgICAtIHF1ZXJ5IChzdHJpbmcpIENTUyBzZWxl Y3RvcgorICAgICA9IChTZXR8YXJyYXkpIHJlc3VsdCBvZiBxdWVyeSBzZWxl Y3Rpb24KKyAgICBcKi8KKyAgICBlbHByb3RvLnNlbGVjdEFsbCA9IGZ1bmN0 aW9uIChxdWVyeSkgeworICAgICAgICB2YXIgbm9kZWxpc3QgPSB0aGlzLm5v ZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSksCisgICAgICAgICAgICBzZXQg PSAoU25hcC5zZXQgfHwgQXJyYXkpKCk7CisgICAgICAgIGZvciAodmFyIGkg PSAwOyBpIDwgbm9kZWxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg IHNldC5wdXNoKHdyYXAobm9kZWxpc3RbaV0pKTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gc2V0OworICAgIH07CisgICAgLypcCisgICAgICogRWxl bWVudC5hc1BYCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZXR1cm5zIGdpdmVuIGF0dHJpYnV0ZSBvZiB0aGUgZWxlbWVudCBhcyBhIGBw eGAgdmFsdWUgKG5vdCAlLCBlbSwgZXRjLikKKyAgICAgKioKKyAgICAgLSBh dHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBuYW1lCisgICAgIC0gdmFsdWUgKHN0 cmluZykgI29wdGlvbmFsIGF0dHJpYnV0ZSB2YWx1ZQorICAgICA9IChFbGVt ZW50KSByZXN1bHQgb2YgcXVlcnkgc2VsZWN0aW9uCisgICAgXCovCisgICAg ZWxwcm90by5hc1BYID0gZnVuY3Rpb24gKGF0dHIsIHZhbHVlKSB7CisgICAg ICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICB2YWx1ZSA9 IHRoaXMuYXR0cihhdHRyKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g K3VuaXQycHgodGhpcywgYXR0ciwgdmFsdWUpOworICAgIH07CisgICAgLy8g U0lFUlJBIEVsZW1lbnQudXNlKCk6IEkgc3VnZ2VzdCBhZGRpbmcgYSBub3Rl IGFib3V0IGhvdyB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsIGVsZW1lbnQgdGhl IHJldHVybmVkIDx1c2U+IGluc3RhbnRpYXRlcy4gSXQncyBhIHBhcnQgb2Yg U1ZHIHdpdGggd2hpY2ggb3JkaW5hcnkgd2ViIGRldmVsb3BlcnMgbWF5IGJl IGxlYXN0IGZhbWlsaWFyLgorICAgIC8qXAorICAgICAqIEVsZW1lbnQudXNl CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEg YDx1c2U+YCBlbGVtZW50IGxpbmtlZCB0byB0aGUgY3VycmVudCBlbGVtZW50 CisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIHRoZSBgPHVzZT5gIGVsZW1l bnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnVzZSA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgdmFyIHVzZSwKKyAgICAgICAgICAgIGlkID0gdGhpcy5ub2Rl LmlkOworICAgICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICBpZCA9IHRo aXMuaWQ7CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgeworICAgICAgICAg ICAgICAgIGlkOiBpZAorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKHRoaXMudHlwZSA9PSAibGluZWFyR3JhZGllbnQiIHx8IHRo aXMudHlwZSA9PSAicmFkaWFsR3JhZGllbnQiIHx8CisgICAgICAgICAgICB0 aGlzLnR5cGUgPT0gInBhdHRlcm4iKSB7CisgICAgICAgICAgICB1c2UgPSBt YWtlKHRoaXMudHlwZSwgdGhpcy5ub2RlLnBhcmVudE5vZGUpOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgdXNlID0gbWFrZSgidXNlIiwgdGhp cy5ub2RlLnBhcmVudE5vZGUpOworICAgICAgICB9CisgICAgICAgICQodXNl Lm5vZGUsIHsKKyAgICAgICAgICAgICJ4bGluazpocmVmIjogIiMiICsgaWQK KyAgICAgICAgfSk7CisgICAgICAgIHVzZS5vcmlnaW5hbCA9IHRoaXM7Cisg ICAgICAgIHJldHVybiB1c2U7CisgICAgfTsKKyAgICBmdW5jdGlvbiBmaXhp ZHMoZWwpIHsKKyAgICAgICAgdmFyIGVscyA9IGVsLnNlbGVjdEFsbCgiKiIp LAorICAgICAgICAgICAgaXQsCisgICAgICAgICAgICB1cmwgPSAvXlxzKnVy bFwoKCJ8J3wpKC4qKVwxXClccyokLywKKyAgICAgICAgICAgIGlkcyA9IFtd LAorICAgICAgICAgICAgdXNlcyA9IHt9OworICAgICAgICBmdW5jdGlvbiB1 cmx0ZXN0KGl0LCBuYW1lKSB7CisgICAgICAgICAgICB2YXIgdmFsID0gJChp dC5ub2RlLCBuYW1lKTsKKyAgICAgICAgICAgIHZhbCA9IHZhbCAmJiB2YWwu bWF0Y2godXJsKTsKKyAgICAgICAgICAgIHZhbCA9IHZhbCAmJiB2YWxbMl07 CisgICAgICAgICAgICBpZiAodmFsICYmIHZhbC5jaGFyQXQoKSA9PSAiIyIp IHsKKyAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc3Vic3RyaW5nKDEpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm47 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsKSB7CisgICAg ICAgICAgICAgICAgdXNlc1t2YWxdID0gKHVzZXNbdmFsXSB8fCBbXSkuY29u Y2F0KGZ1bmN0aW9uIChpZCkgeworICAgICAgICAgICAgICAgICAgICB2YXIg YXR0ciA9IHt9OworICAgICAgICAgICAgICAgICAgICBhdHRyW25hbWVdID0g VVJMKGlkKTsKKyAgICAgICAgICAgICAgICAgICAgJChpdC5ub2RlLCBhdHRy KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBmdW5jdGlvbiBsaW5rdGVzdChpdCkgeworICAgICAg ICAgICAgdmFyIHZhbCA9ICQoaXQubm9kZSwgInhsaW5rOmhyZWYiKTsKKyAg ICAgICAgICAgIGlmICh2YWwgJiYgdmFsLmNoYXJBdCgpID09ICIjIikgewor ICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMSk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAg ICAgICAgICB1c2VzW3ZhbF0gPSAodXNlc1t2YWxdIHx8IFtdKS5jb25jYXQo ZnVuY3Rpb24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGl0LmF0dHIo InhsaW5rOmhyZWYiLCAiIyIgKyBpZCk7CisgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gZWxzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgIGl0ID0gZWxzW2ldOworICAgICAgICAgICAgdXJsdGVzdChpdCwg ImZpbGwiKTsKKyAgICAgICAgICAgIHVybHRlc3QoaXQsICJzdHJva2UiKTsK KyAgICAgICAgICAgIHVybHRlc3QoaXQsICJmaWx0ZXIiKTsKKyAgICAgICAg ICAgIHVybHRlc3QoaXQsICJtYXNrIik7CisgICAgICAgICAgICB1cmx0ZXN0 KGl0LCAiY2xpcC1wYXRoIik7CisgICAgICAgICAgICBsaW5rdGVzdChpdCk7 CisgICAgICAgICAgICB2YXIgb2xkaWQgPSAkKGl0Lm5vZGUsICJpZCIpOwor ICAgICAgICAgICAgaWYgKG9sZGlkKSB7CisgICAgICAgICAgICAgICAgJChp dC5ub2RlLCB7aWQ6IGl0LmlkfSk7CisgICAgICAgICAgICAgICAgaWRzLnB1 c2goeworICAgICAgICAgICAgICAgICAgICBvbGQ6IG9sZGlkLAorICAgICAg ICAgICAgICAgICAgICBpZDogaXQuaWQKKyAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAw LCBpaSA9IGlkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICB2YXIgZnMgPSB1c2VzW2lkc1tpXS5vbGRdOworICAgICAgICAgICAgaWYg KGZzKSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0g ZnMubGVuZ3RoOyBqIDwgamo7IGorKykgeworICAgICAgICAgICAgICAgICAg ICBmc1tqXShpZHNbaV0uaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LmNsb25lCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGVsZW1lbnQgYW5kIGluc2VydHMg aXQgYWZ0ZXIgdGhlIGVsZW1lbnQKKyAgICAgKioKKyAgICAgPSAoRWxlbWVu dCkgdGhlIGNsb25lCisgICAgXCovCisgICAgZWxwcm90by5jbG9uZSA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGNsb25lID0gd3JhcCh0aGlzLm5v ZGUuY2xvbmVOb2RlKHRydWUpKTsKKyAgICAgICAgaWYgKCQoY2xvbmUubm9k ZSwgImlkIikpIHsKKyAgICAgICAgICAgICQoY2xvbmUubm9kZSwge2lkOiBj bG9uZS5pZH0pOworICAgICAgICB9CisgICAgICAgIGZpeGlkcyhjbG9uZSk7 CisgICAgICAgIGNsb25lLmluc2VydEFmdGVyKHRoaXMpOworICAgICAgICBy ZXR1cm4gY2xvbmU7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50 LnRvRGVmcworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogTW92 ZXMgZWxlbWVudCB0byB0aGUgc2hhcmVkIGA8ZGVmcz5gIGFyZWEKKyAgICAg KioKKyAgICAgPSAoRWxlbWVudCkgdGhlIGVsZW1lbnQKKyAgICBcKi8KKyAg ICBlbHByb3RvLnRvRGVmcyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy IGRlZnMgPSBnZXRTb21lRGVmcyh0aGlzKTsKKyAgICAgICAgZGVmcy5hcHBl bmRDaGlsZCh0aGlzLm5vZGUpOworICAgICAgICByZXR1cm4gdGhpczsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQudG9QYXR0ZXJuCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgYDxwYXR0 ZXJuPmAgZWxlbWVudCBmcm9tIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICAg KioKKyAgICAgKiBUbyBjcmVhdGUgYSBwYXR0ZXJuIHlvdSBoYXZlIHRvIHNw ZWNpZnkgdGhlIHBhdHRlcm4gcmVjdDoKKyAgICAgLSB4IChzdHJpbmd8bnVt YmVyKQorICAgICAtIHkgKHN0cmluZ3xudW1iZXIpCisgICAgIC0gd2lkdGgg KHN0cmluZ3xudW1iZXIpCisgICAgIC0gaGVpZ2h0IChzdHJpbmd8bnVtYmVy KQorICAgICA9IChFbGVtZW50KSB0aGUgYDxwYXR0ZXJuPmAgZWxlbWVudAor ICAgICAqIFlvdSBjYW4gdXNlIHBhdHRlcm4gbGF0ZXIgb24gYXMgYW4gYXJn dW1lbnQgZm9yIGBmaWxsYCBhdHRyaWJ1dGU6CisgICAgIHwgdmFyIHAgPSBw YXBlci5wYXRoKCJNMTAtNS0xMCwxNU0xNSwwLDAsMTVNMC01LTIwLDE1Iiku YXR0cih7CisgICAgIHwgICAgICAgICBmaWxsOiAibm9uZSIsCisgICAgIHwg ICAgICAgICBzdHJva2U6ICIjYmFkYTU1IiwKKyAgICAgfCAgICAgICAgIHN0 cm9rZVdpZHRoOiA1CisgICAgIHwgICAgIH0pLnBhdHRlcm4oMCwgMCwgMTAs IDEwKSwKKyAgICAgfCAgICAgYyA9IHBhcGVyLmNpcmNsZSgyMDAsIDIwMCwg MTAwKTsKKyAgICAgfCBjLmF0dHIoeworICAgICB8ICAgICBmaWxsOiBwCisg ICAgIHwgfSk7CisgICAgXCovCisgICAgZWxwcm90by5wYXR0ZXJuID0gZWxw cm90by50b1BhdHRlcm4gPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdo dCkgeworICAgICAgICB2YXIgcCA9IG1ha2UoInBhdHRlcm4iLCBnZXRTb21l RGVmcyh0aGlzKSk7CisgICAgICAgIGlmICh4ID09IG51bGwpIHsKKyAgICAg ICAgICAgIHggPSB0aGlzLmdldEJCb3goKTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoaXMoeCwgIm9iamVjdCIpICYmICJ4IiBpbiB4KSB7CisgICAgICAg ICAgICB5ID0geC55OworICAgICAgICAgICAgd2lkdGggPSB4LndpZHRoOwor ICAgICAgICAgICAgaGVpZ2h0ID0geC5oZWlnaHQ7CisgICAgICAgICAgICB4 ID0geC54OworICAgICAgICB9CisgICAgICAgICQocC5ub2RlLCB7CisgICAg ICAgICAgICB4OiB4LAorICAgICAgICAgICAgeTogeSwKKyAgICAgICAgICAg IHdpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAor ICAgICAgICAgICAgcGF0dGVyblVuaXRzOiAidXNlclNwYWNlT25Vc2UiLAor ICAgICAgICAgICAgaWQ6IHAuaWQsCisgICAgICAgICAgICB2aWV3Qm94OiBb eCwgeSwgd2lkdGgsIGhlaWdodF0uam9pbigiICIpCisgICAgICAgIH0pOwor ICAgICAgICBwLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKTsKKyAgICAg ICAgcmV0dXJuIHA7CisgICAgfTsKKy8vIFNJRVJSQSBFbGVtZW50Lm1hcmtl cigpOiBjbGFyaWZ5IHdoYXQgYSByZWZlcmVuY2UgcG9pbnQgaXMuIEUuZy4s IGhlbHBzIHlvdSBvZmZzZXQgdGhlIG9iamVjdCBmcm9tIGl0cyBlZGdlIHN1 Y2ggYXMgd2hlbiBjZW50ZXJpbmcgaXQgb3ZlciBhIHBhdGguCisvLyBTSUVS UkEgRWxlbWVudC5tYXJrZXIoKTogSSBzdWdnZXN0IHRoZSBtZXRob2Qgc2hv dWxkIGFjY2VwdCBkZWZhdWx0IHJlZmVyZW5jZSBwb2ludCB2YWx1ZXMuICBQ ZXJoYXBzIGNlbnRlcmVkIHdpdGggKHJlZlggPSB3aWR0aC8yKSBhbmQgKHJl ZlkgPSBoZWlnaHQvMik/IEFsc28sIGNvdWxkbid0IGl0IGFzc3VtZSB0aGUg ZWxlbWVudCdzIGN1cnJlbnQgX3dpZHRoXyBhbmQgX2hlaWdodF8/IEFuZCBw bGVhc2Ugc3BlY2lmeSB3aGF0IF94XyBhbmQgX3lfIG1lYW46IG9mZnNldHM/ IElmIHNvLCBmcm9tIHdoZXJlPyAgQ291bGRuJ3QgdGhleSBhbHNvIGJlIGFz c2lnbmVkIGRlZmF1bHQgdmFsdWVzPworICAgIC8qXAorICAgICAqIEVsZW1l bnQubWFya2VyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBD cmVhdGVzIGEgYDxtYXJrZXI+YCBlbGVtZW50IGZyb20gdGhlIGN1cnJlbnQg ZWxlbWVudAorICAgICAqKgorICAgICAqIFRvIGNyZWF0ZSBhIG1hcmtlciB5 b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZSBib3VuZGluZyByZWN0IGFuZCByZWZl cmVuY2UgcG9pbnQ6CisgICAgIC0geCAobnVtYmVyKQorICAgICAtIHkgKG51 bWJlcikKKyAgICAgLSB3aWR0aCAobnVtYmVyKQorICAgICAtIGhlaWdodCAo bnVtYmVyKQorICAgICAtIHJlZlggKG51bWJlcikKKyAgICAgLSByZWZZIChu dW1iZXIpCisgICAgID0gKEVsZW1lbnQpIHRoZSBgPG1hcmtlcj5gIGVsZW1l bnQKKyAgICAgKiBZb3UgY2FuIHNwZWNpZnkgdGhlIG1hcmtlciBsYXRlciBh cyBhbiBhcmd1bWVudCBmb3IgYG1hcmtlci1zdGFydGAsIGBtYXJrZXItZW5k YCwgYG1hcmtlci1taWRgLCBhbmQgYG1hcmtlcmAgYXR0cmlidXRlcy4gVGhl IGBtYXJrZXJgIGF0dHJpYnV0ZSBwbGFjZXMgdGhlIG1hcmtlciBhdCBldmVy eSBwb2ludCBhbG9uZyB0aGUgcGF0aCwgYW5kIGBtYXJrZXItbWlkYCBwbGFj ZXMgdGhlbSBhdCBldmVyeSBwb2ludCBleGNlcHQgdGhlIHN0YXJ0IGFuZCBl bmQuCisgICAgXCovCisgICAgLy8gVE9ETyBhZGQgdXNhZ2UgZm9yIG1hcmtl cnMKKyAgICBlbHByb3RvLm1hcmtlciA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0 aCwgaGVpZ2h0LCByZWZYLCByZWZZKSB7CisgICAgICAgIHZhciBwID0gbWFr ZSgibWFya2VyIiwgZ2V0U29tZURlZnModGhpcykpOworICAgICAgICBpZiAo eCA9PSBudWxsKSB7CisgICAgICAgICAgICB4ID0gdGhpcy5nZXRCQm94KCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzKHgsICJvYmplY3QiKSAmJiAi eCIgaW4geCkgeworICAgICAgICAgICAgeSA9IHgueTsKKyAgICAgICAgICAg IHdpZHRoID0geC53aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IHguaGVp Z2h0OworICAgICAgICAgICAgcmVmWCA9IHgucmVmWCB8fCB4LmN4OworICAg ICAgICAgICAgcmVmWSA9IHgucmVmWSB8fCB4LmN5OworICAgICAgICAgICAg eCA9IHgueDsKKyAgICAgICAgfQorICAgICAgICAkKHAubm9kZSwgeworICAg ICAgICAgICAgdmlld0JveDogW3gsIHksIHdpZHRoLCBoZWlnaHRdLmpvaW4o IiAiKSwKKyAgICAgICAgICAgIG1hcmtlcldpZHRoOiB3aWR0aCwKKyAgICAg ICAgICAgIG1hcmtlckhlaWdodDogaGVpZ2h0LAorICAgICAgICAgICAgb3Jp ZW50OiAiYXV0byIsCisgICAgICAgICAgICByZWZYOiByZWZYIHx8IDAsCisg ICAgICAgICAgICByZWZZOiByZWZZIHx8IDAsCisgICAgICAgICAgICBpZDog cC5pZAorICAgICAgICB9KTsKKyAgICAgICAgcC5ub2RlLmFwcGVuZENoaWxk KHRoaXMubm9kZSk7CisgICAgICAgIHJldHVybiBwOworICAgIH07CisgICAg Ly8gYW5pbWF0aW9uCisgICAgZnVuY3Rpb24gc2xpY2UoZnJvbSwgdG8sIGYp IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcnIpIHsKKyAgICAgICAg ICAgIHZhciByZXMgPSBhcnIuc2xpY2UoZnJvbSwgdG8pOworICAgICAgICAg ICAgaWYgKHJlcy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIHJl cyA9IHJlc1swXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy biBmID8gZihyZXMpIDogcmVzOworICAgICAgICB9OworICAgIH0KKyAgICB2 YXIgQW5pbWF0aW9uID0gZnVuY3Rpb24gKGF0dHIsIG1zLCBlYXNpbmcsIGNh bGxiYWNrKSB7CisgICAgICAgIGlmICh0eXBlb2YgZWFzaW5nID09ICJmdW5j dGlvbiIgJiYgIWVhc2luZy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGNhbGxi YWNrID0gZWFzaW5nOworICAgICAgICAgICAgZWFzaW5nID0gbWluYS5saW5l YXI7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5hdHRyID0gYXR0cjsKKyAg ICAgICAgdGhpcy5kdXIgPSBtczsKKyAgICAgICAgZWFzaW5nICYmICh0aGlz LmVhc2luZyA9IGVhc2luZyk7CisgICAgICAgIGNhbGxiYWNrICYmICh0aGlz LmNhbGxiYWNrID0gY2FsbGJhY2spOworICAgIH07CisgICAgU25hcC5fLkFu aW1hdGlvbiA9IEFuaW1hdGlvbjsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmFu aW1hdGlvbgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ3Jl YXRlcyBhbiBhbmltYXRpb24gb2JqZWN0CisgICAgICoqCisgICAgIC0gYXR0 ciAob2JqZWN0KSBhdHRyaWJ1dGVzIG9mIGZpbmFsIGRlc3RpbmF0aW9uCisg ICAgIC0gZHVyYXRpb24gKG51bWJlcikgZHVyYXRpb24gb2YgdGhlIGFuaW1h dGlvbiwgaW4gbWlsbGlzZWNvbmRzCisgICAgIC0gZWFzaW5nIChmdW5jdGlv bikgI29wdGlvbmFsIG9uZSBvZiBlYXNpbmcgZnVuY3Rpb25zIG9mIEBtaW5h IG9yIGN1c3RvbSBvbmUKKyAgICAgLSBjYWxsYmFjayAoZnVuY3Rpb24pICNv cHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGZpcmVzIHdoZW4gYW5p bWF0aW9uIGVuZHMKKyAgICAgPSAob2JqZWN0KSBhbmltYXRpb24gb2JqZWN0 CisgICAgXCovCisgICAgU25hcC5hbmltYXRpb24gPSBmdW5jdGlvbiAoYXR0 ciwgbXMsIGVhc2luZywgY2FsbGJhY2spIHsKKyAgICAgICAgcmV0dXJuIG5l dyBBbmltYXRpb24oYXR0ciwgbXMsIGVhc2luZywgY2FsbGJhY2spOworICAg IH07CisgICAgLypcCisgICAgICogRWxlbWVudC5pbkFuaW0KKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYSBzZXQgb2YgYW5p bWF0aW9ucyB0aGF0IG1heSBiZSBhYmxlIHRvIG1hbmlwdWxhdGUgdGhlIGN1 cnJlbnQgZWxlbWVudAorICAgICAqKgorICAgICA9IChvYmplY3QpIGluIGZv cm1hdDoKKyAgICAgbyB7CisgICAgIG8gICAgIGFuaW0gKG9iamVjdCkgYW5p bWF0aW9uIG9iamVjdCwKKyAgICAgbyAgICAgbWluYSAob2JqZWN0KSBAbWlu YSBvYmplY3QsCisgICAgIG8gICAgIGN1clN0YXR1cyAobnVtYmVyKSAwLi4x IOKAlCBzdGF0dXMgb2YgdGhlIGFuaW1hdGlvbjogMCDigJQganVzdCBzdGFy dGVkLCAxIOKAlCBqdXN0IGZpbmlzaGVkLAorICAgICBvICAgICBzdGF0dXMg KGZ1bmN0aW9uKSBnZXRzIG9yIHNldHMgdGhlIHN0YXR1cyBvZiB0aGUgYW5p bWF0aW9uLAorICAgICBvICAgICBzdG9wIChmdW5jdGlvbikgc3RvcHMgdGhl IGFuaW1hdGlvbgorICAgICBvIH0KKyAgICBcKi8KKyAgICBlbHByb3RvLmlu QW5pbSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGVsID0gdGhpcywK KyAgICAgICAgICAgIHJlcyA9IFtdOworICAgICAgICBmb3IgKHZhciBpZCBp biBlbC5hbmltcykgaWYgKGVsLmFuaW1zW2hhc10oaWQpKSB7CisgICAgICAg ICAgICAoZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICByZXMucHVz aCh7CisgICAgICAgICAgICAgICAgICAgIGFuaW06IG5ldyBBbmltYXRpb24o YS5fYXR0cnMsIGEuZHVyLCBhLmVhc2luZywgYS5fY2FsbGJhY2spLAorICAg ICAgICAgICAgICAgICAgICBtaW5hOiBhLAorICAgICAgICAgICAgICAgICAg ICBjdXJTdGF0dXM6IGEuc3RhdHVzKCksCisgICAgICAgICAgICAgICAgICAg IHN0YXR1czogZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGEuc3RhdHVzKHZhbCk7CisgICAgICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHN0b3A6IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuc3RvcCgpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg ICAgICB9KGVsLmFuaW1zW2lkXSkpOworICAgICAgICB9CisgICAgICAgIHJl dHVybiByZXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmFuaW1h dGUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJ1bnMgZ2Vu ZXJpYyBhbmltYXRpb24gb2Ygb25lIG51bWJlciBpbnRvIGFub3RoZXIgd2l0 aCBhIGNhcmluZyBmdW5jdGlvbgorICAgICAqKgorICAgICAtIGZyb20gKG51 bWJlcnxhcnJheSkgbnVtYmVyIG9yIGFycmF5IG9mIG51bWJlcnMKKyAgICAg LSB0byAobnVtYmVyfGFycmF5KSBudW1iZXIgb3IgYXJyYXkgb2YgbnVtYmVy cworICAgICAtIHNldHRlciAoZnVuY3Rpb24pIGNhcmluZyBmdW5jdGlvbiB0 aGF0IGFjY2VwdHMgb25lIG51bWJlciBhcmd1bWVudAorICAgICAtIGR1cmF0 aW9uIChudW1iZXIpIGR1cmF0aW9uLCBpbiBtaWxsaXNlY29uZHMKKyAgICAg LSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgZWFzaW5nIGZ1bmN0aW9u IGZyb20gQG1pbmEgb3IgY3VzdG9tCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0 aW9uKSAjb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSB3 aGVuIGFuaW1hdGlvbiBlbmRzCisgICAgID0gKG9iamVjdCkgYW5pbWF0aW9u IG9iamVjdCBpbiBAbWluYSBmb3JtYXQKKyAgICAgbyB7CisgICAgIG8gICAg IGlkIChzdHJpbmcpIGFuaW1hdGlvbiBpZCwgY29uc2lkZXIgaXQgcmVhZC1v bmx5LAorICAgICBvICAgICBkdXJhdGlvbiAoZnVuY3Rpb24pIGdldHMgb3Ig c2V0cyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiwKKyAgICAgbyAg ICAgZWFzaW5nIChmdW5jdGlvbikgZWFzaW5nLAorICAgICBvICAgICBzcGVl ZCAoZnVuY3Rpb24pIGdldHMgb3Igc2V0cyB0aGUgc3BlZWQgb2YgdGhlIGFu aW1hdGlvbiwKKyAgICAgbyAgICAgc3RhdHVzIChmdW5jdGlvbikgZ2V0cyBv ciBzZXRzIHRoZSBzdGF0dXMgb2YgdGhlIGFuaW1hdGlvbiwKKyAgICAgbyAg ICAgc3RvcCAoZnVuY3Rpb24pIHN0b3BzIHRoZSBhbmltYXRpb24KKyAgICAg byB9CisgICAgIHwgdmFyIHJlY3QgPSBTbmFwKCkucmVjdCgwLCAwLCAxMCwg MTApOworICAgICB8IFNuYXAuYW5pbWF0ZSgwLCAxMCwgZnVuY3Rpb24gKHZh bCkgeworICAgICB8ICAgICByZWN0LmF0dHIoeworICAgICB8ICAgICAgICAg eDogdmFsCisgICAgIHwgICAgIH0pOworICAgICB8IH0sIDEwMDApOworICAg ICB8IC8vIGluIGdpdmVuIGNvbnRleHQgaXMgZXF1aXZhbGVudCB0bworICAg ICB8IHJlY3QuYW5pbWF0ZSh7eDogMTB9LCAxMDAwKTsKKyAgICBcKi8KKyAg ICBTbmFwLmFuaW1hdGUgPSBmdW5jdGlvbiAoZnJvbSwgdG8sIHNldHRlciwg bXMsIGVhc2luZywgY2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHR5cGVvZiBl YXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAhZWFzaW5nLmxlbmd0aCkgeworICAg ICAgICAgICAgY2FsbGJhY2sgPSBlYXNpbmc7CisgICAgICAgICAgICBlYXNp bmcgPSBtaW5hLmxpbmVhcjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbm93 ID0gbWluYS50aW1lKCksCisgICAgICAgICAgICBhbmltID0gbWluYShmcm9t LCB0bywgbm93LCBub3cgKyBtcywgbWluYS50aW1lLCBzZXR0ZXIsIGVhc2lu Zyk7CisgICAgICAgIGNhbGxiYWNrICYmIGV2ZS5vbmNlKCJtaW5hLmZpbmlz aC4iICsgYW5pbS5pZCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm4gYW5p bTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuc3RvcAorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU3RvcHMgYWxsIHRoZSBh bmltYXRpb25zIGZvciB0aGUgY3VycmVudCBlbGVtZW50CisgICAgICoqCisg ICAgID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICBcKi8K KyAgICBlbHByb3RvLnN0b3AgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh ciBhbmltcyA9IHRoaXMuaW5BbmltKCk7CisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IGFuaW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgIGFuaW1zW2ldLnN0b3AoKTsKKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQu YW5pbWF0ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQW5p bWF0ZXMgdGhlIGdpdmVuIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnQKKyAg ICAgKioKKyAgICAgLSBhdHRycyAob2JqZWN0KSBrZXktdmFsdWUgcGFpcnMg b2YgZGVzdGluYXRpb24gYXR0cmlidXRlcworICAgICAtIGR1cmF0aW9uIChu dW1iZXIpIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gaW4gbWlsbGlzZWNv bmRzCisgICAgIC0gZWFzaW5nIChmdW5jdGlvbikgI29wdGlvbmFsIGVhc2lu ZyBmdW5jdGlvbiBmcm9tIEBtaW5hIG9yIGN1c3RvbQorICAgICAtIGNhbGxi YWNrIChmdW5jdGlvbikgI29wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRo YXQgZXhlY3V0ZXMgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMKKyAgICAgPSAo RWxlbWVudCkgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVs cHJvdG8uYW5pbWF0ZSA9IGZ1bmN0aW9uIChhdHRycywgbXMsIGVhc2luZywg Y2FsbGJhY2spIHsKKyAgICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT0gImZ1 bmN0aW9uIiAmJiAhZWFzaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgY2Fs bGJhY2sgPSBlYXNpbmc7CisgICAgICAgICAgICBlYXNpbmcgPSBtaW5hLmxp bmVhcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXR0cnMgaW5zdGFuY2Vv ZiBBbmltYXRpb24pIHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gYXR0cnMu Y2FsbGJhY2s7CisgICAgICAgICAgICBlYXNpbmcgPSBhdHRycy5lYXNpbmc7 CisgICAgICAgICAgICBtcyA9IGF0dHJzLmR1cjsKKyAgICAgICAgICAgIGF0 dHJzID0gYXR0cnMuYXR0cjsKKyAgICAgICAgfQorICAgICAgICB2YXIgZmtl eXMgPSBbXSwgdGtleXMgPSBbXSwga2V5cyA9IHt9LCBmcm9tLCB0bywgZiwg ZXEsCisgICAgICAgICAgICBlbCA9IHRoaXM7CisgICAgICAgIGZvciAodmFy IGtleSBpbiBhdHRycykgaWYgKGF0dHJzW2hhc10oa2V5KSkgeworICAgICAg ICAgICAgaWYgKGVsLmVxdWFsKSB7CisgICAgICAgICAgICAgICAgZXEgPSBl bC5lcXVhbChrZXksIFN0cihhdHRyc1trZXldKSk7CisgICAgICAgICAgICAg ICAgZnJvbSA9IGVxLmZyb207CisgICAgICAgICAgICAgICAgdG8gPSBlcS50 bzsKKyAgICAgICAgICAgICAgICBmID0gZXEuZjsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgZnJvbSA9ICtlbC5hdHRyKGtleSk7 CisgICAgICAgICAgICAgICAgdG8gPSArYXR0cnNba2V5XTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHZhciBsZW4gPSBpcyhmcm9tLCAiYXJyYXki KSA/IGZyb20ubGVuZ3RoIDogMTsKKyAgICAgICAgICAgIGtleXNba2V5XSA9 IHNsaWNlKGZrZXlzLmxlbmd0aCwgZmtleXMubGVuZ3RoICsgbGVuLCBmKTsK KyAgICAgICAgICAgIGZrZXlzID0gZmtleXMuY29uY2F0KGZyb20pOworICAg ICAgICAgICAgdGtleXMgPSB0a2V5cy5jb25jYXQodG8pOworICAgICAgICB9 CisgICAgICAgIHZhciBub3cgPSBtaW5hLnRpbWUoKSwKKyAgICAgICAgICAg IGFuaW0gPSBtaW5hKGZrZXlzLCB0a2V5cywgbm93LCBub3cgKyBtcywgbWlu YS50aW1lLCBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICAgICAgdmFy IGF0dHIgPSB7fTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4g a2V5cykgaWYgKGtleXNbaGFzXShrZXkpKSB7CisgICAgICAgICAgICAgICAg ICAgIGF0dHJba2V5XSA9IGtleXNba2V5XSh2YWwpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBlbC5hdHRyKGF0dHIpOworICAgICAg ICAgICAgfSwgZWFzaW5nKTsKKyAgICAgICAgZWwuYW5pbXNbYW5pbS5pZF0g PSBhbmltOworICAgICAgICBhbmltLl9hdHRycyA9IGF0dHJzOworICAgICAg ICBhbmltLl9jYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgICBldmUoInNu YXAuYW5pbWNyZWF0ZWQuIiArIGVsLmlkLCBhbmltKTsKKyAgICAgICAgZXZl Lm9uY2UoIm1pbmEuZmluaXNoLiIgKyBhbmltLmlkLCBmdW5jdGlvbiAoKSB7 CisgICAgICAgICAgICBkZWxldGUgZWwuYW5pbXNbYW5pbS5pZF07CisgICAg ICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjay5jYWxsKGVsKTsKKyAgICAg ICAgfSk7CisgICAgICAgIGV2ZS5vbmNlKCJtaW5hLnN0b3AuIiArIGFuaW0u aWQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBlbC5hbmlt c1thbmltLmlkXTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBlbDsK KyAgICB9OworICAgIHZhciBlbGRhdGEgPSB7fTsKKyAgICAvKlwKKyAgICAg KiBFbGVtZW50LmRhdGEKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIEFkZHMgb3IgcmV0cmlldmVzIGdpdmVuIHZhbHVlIGFzc29jaWF0ZWQg d2l0aCBnaXZlbiBrZXkuIChEb27igJl0IGNvbmZ1c2UKKyAgICAgKiB3aXRo IGBkYXRhLWAgYXR0cmlidXRlcykKKyAgICAgKgorICAgICAqIFNlZSBhbHNv IEBFbGVtZW50LnJlbW92ZURhdGEKKyAgICAgLSBrZXkgKHN0cmluZykga2V5 IHRvIHN0b3JlIGRhdGEKKyAgICAgLSB2YWx1ZSAoYW55KSAjb3B0aW9uYWwg dmFsdWUgdG8gc3RvcmUKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg ICAqIG9yLCBpZiB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkOgorICAgICA9IChh bnkpIHZhbHVlCisgICAgID4gVXNhZ2UKKyAgICAgfCBmb3IgKHZhciBpID0g MCwgaSA8IDUsIGkrKykgeworICAgICB8ICAgICBwYXBlci5jaXJjbGUoMTAg KyAxNSAqIGksIDEwLCAxMCkKKyAgICAgfCAgICAgICAgICAuYXR0cih7Zmls bDogIiMwMDAifSkKKyAgICAgfCAgICAgICAgICAuZGF0YSgiaSIsIGkpCisg ICAgIHwgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgfCAg ICAgICAgICAgICBhbGVydCh0aGlzLmRhdGEoImkiKSk7CisgICAgIHwgICAg ICAgICAgfSk7CisgICAgIHwgfQorICAgIFwqLworICAgIGVscHJvdG8uZGF0 YSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICAgIHZhciBkYXRh ID0gZWxkYXRhW3RoaXMuaWRdID0gZWxkYXRhW3RoaXMuaWRdIHx8IHt9Owor ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKXsKKyAgICAgICAg ICAgIGV2ZSgic25hcC5kYXRhLmdldC4iICsgdGhpcy5pZCwgdGhpcywgZGF0 YSwgbnVsbCk7CisgICAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgICAg fQorICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CisgICAg ICAgICAgICBpZiAoU25hcC5pcyhrZXksICJvYmplY3QiKSkgeworICAgICAg ICAgICAgICAgIGZvciAodmFyIGkgaW4ga2V5KSBpZiAoa2V5W2hhc10oaSkp IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhKGksIGtleVtpXSk7 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0 aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXZlKCJzbmFwLmRh dGEuZ2V0LiIgKyB0aGlzLmlkLCB0aGlzLCBkYXRhW2tleV0sIGtleSk7Cisg ICAgICAgICAgICByZXR1cm4gZGF0YVtrZXldOworICAgICAgICB9CisgICAg ICAgIGRhdGFba2V5XSA9IHZhbHVlOworICAgICAgICBldmUoInNuYXAuZGF0 YS5zZXQuIiArIHRoaXMuaWQsIHRoaXMsIHZhbHVlLCBrZXkpOworICAgICAg ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1l bnQucmVtb3ZlRGF0YQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCBi eSBnaXZlbiBrZXkuCisgICAgICogSWYga2V5IGlzIG5vdCBwcm92aWRlZCwg cmVtb3ZlcyBhbGwgdGhlIGRhdGEgb2YgdGhlIGVsZW1lbnQuCisgICAgIC0g a2V5IChzdHJpbmcpICNvcHRpb25hbCBrZXkKKyAgICAgPSAob2JqZWN0KSBA RWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8ucmVtb3ZlRGF0YSA9IGZ1 bmN0aW9uIChrZXkpIHsKKyAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7Cisg ICAgICAgICAgICBlbGRhdGFbdGhpcy5pZF0gPSB7fTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGVsZGF0YVt0aGlzLmlkXSAmJiBkZWxldGUg ZWxkYXRhW3RoaXMuaWRdW2tleV07CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm91 dGVyU1ZHCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1 cm5zIFNWRyBjb2RlIGZvciB0aGUgZWxlbWVudCwgZXF1aXZhbGVudCB0byBI VE1MJ3MgYG91dGVySFRNTGAuCisgICAgICoKKyAgICAgKiBTZWUgYWxzbyBA RWxlbWVudC5pbm5lclNWRworICAgICA9IChzdHJpbmcpIFNWRyBjb2RlIGZv ciB0aGUgZWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1l bnQudG9TdHJpbmcKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFNlZSBARWxlbWVudC5vdXRlclNWRworICAgIFwqLworICAgIGVscHJvdG8u b3V0ZXJTVkcgPSBlbHByb3RvLnRvU3RyaW5nID0gdG9TdHJpbmcoMSk7Cisg ICAgLypcCisgICAgICogRWxlbWVudC5pbm5lclNWRworICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBTVkcgY29kZSBmb3IgdGhl IGVsZW1lbnQncyBjb250ZW50cywgZXF1aXZhbGVudCB0byBIVE1MJ3MgYGlu bmVySFRNTGAKKyAgICAgPSAoc3RyaW5nKSBTVkcgY29kZSBmb3IgdGhlIGVs ZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLmlubmVyU1ZHID0gdG9TdHJp bmcoKTsKKyAgICBmdW5jdGlvbiB0b1N0cmluZyh0eXBlKSB7CisgICAgICAg IHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgcmVzID0g dHlwZSA/ICI8IiArIHRoaXMudHlwZSA6ICIiLAorICAgICAgICAgICAgICAg IGF0dHIgPSB0aGlzLm5vZGUuYXR0cmlidXRlcywKKyAgICAgICAgICAgICAg ICBjaGxkID0gdGhpcy5ub2RlLmNoaWxkTm9kZXM7CisgICAgICAgICAgICBp ZiAodHlwZSkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBp aSA9IGF0dHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg ICAgICAgICByZXMgKz0gIiAiICsgYXR0cltpXS5uYW1lICsgJz0iJyArCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cltpXS52YWx1ZS5yZXBs YWNlKC8iL2csICdcXCInKSArICciJzsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hsZC5sZW5ndGgpIHsK KyAgICAgICAgICAgICAgICB0eXBlICYmIChyZXMgKz0gIj4iKTsKKyAgICAg ICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNobGQubGVuZ3RoOyBpIDwg aWk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hsZFtpXS5u b2RlVHlwZSA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMg Kz0gY2hsZFtpXS5ub2RlVmFsdWU7CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSBpZiAoY2hsZFtpXS5ub2RlVHlwZSA9PSAxKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICByZXMgKz0gd3JhcChjaGxkW2ldKS50b1N0cmluZygp OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHR5cGUgJiYgKHJlcyArPSAiPC8iICsgdGhpcy50 eXBlICsgIj4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgdHlwZSAmJiAocmVzICs9ICIvPiIpOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfTsKKyAgICB9Cisg ICAgZWxwcm90by50b0RhdGFVUkwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg IGlmICh3aW5kb3cgJiYgd2luZG93LmJ0b2EpIHsKKyAgICAgICAgICAgIHZh ciBiYiA9IHRoaXMuZ2V0QkJveCgpLAorICAgICAgICAgICAgICAgIHN2ZyA9 IFNuYXAuZm9ybWF0KCc8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6 Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3 dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9Int3aWR0aH0iIGhlaWdodD0i e2hlaWdodH0iIHZpZXdCb3g9Int4fSB7eX0ge3dpZHRofSB7aGVpZ2h0fSI+ e2NvbnRlbnRzfTwvc3ZnPicsIHsKKyAgICAgICAgICAgICAgICB4OiArYmIu eC50b0ZpeGVkKDMpLAorICAgICAgICAgICAgICAgIHk6ICtiYi55LnRvRml4 ZWQoMyksCisgICAgICAgICAgICAgICAgd2lkdGg6ICtiYi53aWR0aC50b0Zp eGVkKDMpLAorICAgICAgICAgICAgICAgIGhlaWdodDogK2JiLmhlaWdodC50 b0ZpeGVkKDMpLAorICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB0aGlzLm91 dGVyU1ZHKCkKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIgKyBidG9hKHVuZXNjYXBl KGVuY29kZVVSSUNvbXBvbmVudChzdmcpKSk7CisgICAgICAgIH0KKyAgICB9 OworICAgIC8qXAorICAgICAqIEZyYWdtZW50LnNlbGVjdAorICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVtZW50LnNlbGVjdAor ICAgIFwqLworICAgIEZyYWdtZW50LnByb3RvdHlwZS5zZWxlY3QgPSBlbHBy b3RvLnNlbGVjdDsKKyAgICAvKlwKKyAgICAgKiBGcmFnbWVudC5zZWxlY3RB bGwKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNlZSBARWxl bWVudC5zZWxlY3RBbGwKKyAgICBcKi8KKyAgICBGcmFnbWVudC5wcm90b3R5 cGUuc2VsZWN0QWxsID0gZWxwcm90by5zZWxlY3RBbGw7Cit9KTsKKworLy8g Q29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBMaWNlbnNlZCB1bmRl ciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vu c2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGlu IGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0 YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gCisvLyBodHRwOi8v d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vIAorLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwg UGFwZXIsIGdsb2IsIEZyYWdtZW50KSB7CisgICAgdmFyIG9iamVjdFRvU3Ry aW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKKyAgICAgICAgU3Ry ID0gU3RyaW5nLAorICAgICAgICBtYXRoID0gTWF0aCwKKyAgICAgICAgRSA9 ICIiOworICAgIGZ1bmN0aW9uIE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7 CisgICAgICAgIGlmIChiID09IG51bGwgJiYgb2JqZWN0VG9TdHJpbmcuY2Fs bChhKSA9PSAiW29iamVjdCBTVkdNYXRyaXhdIikgeworICAgICAgICAgICAg dGhpcy5hID0gYS5hOworICAgICAgICAgICAgdGhpcy5iID0gYS5iOworICAg ICAgICAgICAgdGhpcy5jID0gYS5jOworICAgICAgICAgICAgdGhpcy5kID0g YS5kOworICAgICAgICAgICAgdGhpcy5lID0gYS5lOworICAgICAgICAgICAg dGhpcy5mID0gYS5mOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIGlmIChhICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMu YSA9ICthOworICAgICAgICAgICAgdGhpcy5iID0gK2I7CisgICAgICAgICAg ICB0aGlzLmMgPSArYzsKKyAgICAgICAgICAgIHRoaXMuZCA9ICtkOworICAg ICAgICAgICAgdGhpcy5lID0gK2U7CisgICAgICAgICAgICB0aGlzLmYgPSAr ZjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYSA9IDE7 CisgICAgICAgICAgICB0aGlzLmIgPSAwOworICAgICAgICAgICAgdGhpcy5j ID0gMDsKKyAgICAgICAgICAgIHRoaXMuZCA9IDE7CisgICAgICAgICAgICB0 aGlzLmUgPSAwOworICAgICAgICAgICAgdGhpcy5mID0gMDsKKyAgICAgICAg fQorICAgIH0KKyAgICAoZnVuY3Rpb24gKG1hdHJpeHByb3RvKSB7CisgICAg ICAgIC8qXAorICAgICAgICAgKiBNYXRyaXguYWRkCisgICAgICAgICBbIG1l dGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBBZGRzIHRoZSBnaXZl biBtYXRyaXggdG8gZXhpc3Rpbmcgb25lCisgICAgICAgICAtIGEgKG51bWJl cikKKyAgICAgICAgIC0gYiAobnVtYmVyKQorICAgICAgICAgLSBjIChudW1i ZXIpCisgICAgICAgICAtIGQgKG51bWJlcikKKyAgICAgICAgIC0gZSAobnVt YmVyKQorICAgICAgICAgLSBmIChudW1iZXIpCisgICAgICAgICAqIG9yCisg ICAgICAgICAtIG1hdHJpeCAob2JqZWN0KSBATWF0cml4CisgICAgICAgIFwq LworICAgICAgICBtYXRyaXhwcm90by5hZGQgPSBmdW5jdGlvbiAoYSwgYiwg YywgZCwgZSwgZikgeworICAgICAgICAgICAgdmFyIG91dCA9IFtbXSwgW10s IFtdXSwKKyAgICAgICAgICAgICAgICBtID0gW1t0aGlzLmEsIHRoaXMuYywg dGhpcy5lXSwgW3RoaXMuYiwgdGhpcy5kLCB0aGlzLmZdLCBbMCwgMCwgMV1d LAorICAgICAgICAgICAgICAgIG1hdHJpeCA9IFtbYSwgYywgZV0sIFtiLCBk LCBmXSwgWzAsIDAsIDFdXSwKKyAgICAgICAgICAgICAgICB4LCB5LCB6LCBy ZXM7CisKKyAgICAgICAgICAgIGlmIChhICYmIGEgaW5zdGFuY2VvZiBNYXRy aXgpIHsKKyAgICAgICAgICAgICAgICBtYXRyaXggPSBbW2EuYSwgYS5jLCBh LmVdLCBbYS5iLCBhLmQsIGEuZl0sIFswLCAwLCAxXV07CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCAzOyB4KyspIHsK KyAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMzsgeSsrKSB7Cisg ICAgICAgICAgICAgICAgICAgIHJlcyA9IDA7CisgICAgICAgICAgICAgICAg ICAgIGZvciAoeiA9IDA7IHogPCAzOyB6KyspIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJlcyArPSBtW3hdW3pdICogbWF0cml4W3pdW3ldOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dFt4 XVt5XSA9IHJlczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICB0aGlzLmEgPSBvdXRbMF1bMF07CisgICAgICAgICAg ICB0aGlzLmIgPSBvdXRbMV1bMF07CisgICAgICAgICAgICB0aGlzLmMgPSBv dXRbMF1bMV07CisgICAgICAgICAgICB0aGlzLmQgPSBvdXRbMV1bMV07Cisg ICAgICAgICAgICB0aGlzLmUgPSBvdXRbMF1bMl07CisgICAgICAgICAgICB0 aGlzLmYgPSBvdXRbMV1bMl07CisgICAgICAgICAgICByZXR1cm4gdGhpczsK KyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJpeC5p bnZlcnQKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAg ICAgICAqIFJldHVybnMgYW4gaW52ZXJ0ZWQgdmVyc2lvbiBvZiB0aGUgbWF0 cml4CisgICAgICAgICA9IChvYmplY3QpIEBNYXRyaXgKKyAgICAgICAgXCov CisgICAgICAgIG1hdHJpeHByb3RvLmludmVydCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIHZhciBtZSA9IHRoaXMsCisgICAgICAgICAgICAgICAg eCA9IG1lLmEgKiBtZS5kIC0gbWUuYiAqIG1lLmM7CisgICAgICAgICAgICBy ZXR1cm4gbmV3IE1hdHJpeChtZS5kIC8geCwgLW1lLmIgLyB4LCAtbWUuYyAv IHgsIG1lLmEgLyB4LCAobWUuYyAqIG1lLmYgLSBtZS5kICogbWUuZSkgLyB4 LCAobWUuYiAqIG1lLmUgLSBtZS5hICogbWUuZikgLyB4KTsKKyAgICAgICAg fTsKKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJpeC5jbG9uZQorICAg ICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogUmV0 dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeAorICAgICAgICAgPSAob2JqZWN0 KSBATWF0cml4CisgICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90by5j bG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg TWF0cml4KHRoaXMuYSwgdGhpcy5iLCB0aGlzLmMsIHRoaXMuZCwgdGhpcy5l LCB0aGlzLmYpOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAg ICogTWF0cml4LnRyYW5zbGF0ZQorICAgICAgICAgWyBtZXRob2QgXQorICAg ICAgICAgKioKKyAgICAgICAgICogVHJhbnNsYXRlIHRoZSBtYXRyaXgKKyAg ICAgICAgIC0geCAobnVtYmVyKSBob3Jpem9udGFsIG9mZnNldCBkaXN0YW5j ZQorICAgICAgICAgLSB5IChudW1iZXIpIHZlcnRpY2FsIG9mZnNldCBkaXN0 YW5jZQorICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8udHJhbnNs YXRlID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgIHJldHVybiB0 aGlzLmFkZCgxLCAwLCAwLCAxLCB4LCB5KTsKKyAgICAgICAgfTsKKyAgICAg ICAgLypcCisgICAgICAgICAqIE1hdHJpeC5zY2FsZQorICAgICAgICAgWyBt ZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogU2NhbGVzIHRoZSBt YXRyaXgKKyAgICAgICAgIC0geCAobnVtYmVyKSBhbW91bnQgdG8gYmUgc2Nh bGVkLCB3aXRoIGAxYCByZXN1bHRpbmcgaW4gbm8gY2hhbmdlCisgICAgICAg ICAtIHkgKG51bWJlcikgI29wdGlvbmFsIGFtb3VudCB0byBzY2FsZSBhbG9u ZyB0aGUgdmVydGljYWwgYXhpcy4gKE90aGVyd2lzZSBgeGAgYXBwbGllcyB0 byBib3RoIGF4ZXMuKQorICAgICAgICAgLSBjeCAobnVtYmVyKSAjb3B0aW9u YWwgaG9yaXpvbnRhbCBvcmlnaW4gcG9pbnQgZnJvbSB3aGljaCB0byBzY2Fs ZQorICAgICAgICAgLSBjeSAobnVtYmVyKSAjb3B0aW9uYWwgdmVydGljYWwg b3JpZ2luIHBvaW50IGZyb20gd2hpY2ggdG8gc2NhbGUKKyAgICAgICAgICog RGVmYXVsdCBjeCwgY3kgaXMgdGhlIG1pZGRsZSBwb2ludCBvZiB0aGUgZWxl bWVudC4KKyAgICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLnNjYWxl ID0gZnVuY3Rpb24gKHgsIHksIGN4LCBjeSkgeworICAgICAgICAgICAgeSA9 PSBudWxsICYmICh5ID0geCk7CisgICAgICAgICAgICAoY3ggfHwgY3kpICYm IHRoaXMuYWRkKDEsIDAsIDAsIDEsIGN4LCBjeSk7CisgICAgICAgICAgICB0 aGlzLmFkZCh4LCAwLCAwLCB5LCAwLCAwKTsKKyAgICAgICAgICAgIChjeCB8 fCBjeSkgJiYgdGhpcy5hZGQoMSwgMCwgMCwgMSwgLWN4LCAtY3kpOworICAg ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH07CisgICAgICAgIC8q XAorICAgICAgICAgKiBNYXRyaXgucm90YXRlCisgICAgICAgICBbIG1ldGhv ZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBSb3RhdGVzIHRoZSBtYXRy aXgKKyAgICAgICAgIC0gYSAobnVtYmVyKSBhbmdsZSBvZiByb3RhdGlvbiwg aW4gZGVncmVlcworICAgICAgICAgLSB4IChudW1iZXIpIGhvcml6b250YWwg b3JpZ2luIHBvaW50IGZyb20gd2hpY2ggdG8gcm90YXRlCisgICAgICAgICAt IHkgKG51bWJlcikgdmVydGljYWwgb3JpZ2luIHBvaW50IGZyb20gd2hpY2gg dG8gcm90YXRlCisgICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90by5y b3RhdGUgPSBmdW5jdGlvbiAoYSwgeCwgeSkgeworICAgICAgICAgICAgYSA9 IFNuYXAucmFkKGEpOworICAgICAgICAgICAgeCA9IHggfHwgMDsKKyAgICAg ICAgICAgIHkgPSB5IHx8IDA7CisgICAgICAgICAgICB2YXIgY29zID0gK21h dGguY29zKGEpLnRvRml4ZWQoOSksCisgICAgICAgICAgICAgICAgc2luID0g K21hdGguc2luKGEpLnRvRml4ZWQoOSk7CisgICAgICAgICAgICB0aGlzLmFk ZChjb3MsIHNpbiwgLXNpbiwgY29zLCB4LCB5KTsKKyAgICAgICAgICAgIHJl dHVybiB0aGlzLmFkZCgxLCAwLCAwLCAxLCAteCwgLXkpOworICAgICAgICB9 OworICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LngKKyAgICAgICAg IFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMg eCBjb29yZGluYXRlIGZvciBnaXZlbiBwb2ludCBhZnRlciB0cmFuc2Zvcm1h dGlvbiBkZXNjcmliZWQgYnkgdGhlIG1hdHJpeC4gU2VlIGFsc28gQE1hdHJp eC55CisgICAgICAgICAtIHggKG51bWJlcikKKyAgICAgICAgIC0geSAobnVt YmVyKQorICAgICAgICAgPSAobnVtYmVyKSB4CisgICAgICAgIFwqLworICAg ICAgICBtYXRyaXhwcm90by54ID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAg ICAgICAgIHJldHVybiB4ICogdGhpcy5hICsgeSAqIHRoaXMuYyArIHRoaXMu ZTsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJp eC55CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAg ICAgKiBSZXR1cm5zIHkgY29vcmRpbmF0ZSBmb3IgZ2l2ZW4gcG9pbnQgYWZ0 ZXIgdHJhbnNmb3JtYXRpb24gZGVzY3JpYmVkIGJ5IHRoZSBtYXRyaXguIFNl ZSBhbHNvIEBNYXRyaXgueAorICAgICAgICAgLSB4IChudW1iZXIpCisgICAg ICAgICAtIHkgKG51bWJlcikKKyAgICAgICAgID0gKG51bWJlcikgeQorICAg ICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8ueSA9IGZ1bmN0aW9uICh4 LCB5KSB7CisgICAgICAgICAgICByZXR1cm4geCAqIHRoaXMuYiArIHkgKiB0 aGlzLmQgKyB0aGlzLmY7CisgICAgICAgIH07CisgICAgICAgIG1hdHJpeHBy b3RvLmdldCA9IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICByZXR1cm4g K3RoaXNbU3RyLmZyb21DaGFyQ29kZSg5NyArIGkpXS50b0ZpeGVkKDQpOwor ICAgICAgICB9OworICAgICAgICBtYXRyaXhwcm90by50b1N0cmluZyA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAibWF0cml4KCIgKyBb dGhpcy5nZXQoMCksIHRoaXMuZ2V0KDEpLCB0aGlzLmdldCgyKSwgdGhpcy5n ZXQoMyksIHRoaXMuZ2V0KDQpLCB0aGlzLmdldCg1KV0uam9pbigpICsgIiki OworICAgICAgICB9OworICAgICAgICBtYXRyaXhwcm90by5vZmZzZXQgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gW3RoaXMuZS50b0Zp eGVkKDQpLCB0aGlzLmYudG9GaXhlZCg0KV07CisgICAgICAgIH07CisgICAg ICAgIGZ1bmN0aW9uIG5vcm0oYSkgeworICAgICAgICAgICAgcmV0dXJuIGFb MF0gKiBhWzBdICsgYVsxXSAqIGFbMV07CisgICAgICAgIH0KKyAgICAgICAg ZnVuY3Rpb24gbm9ybWFsaXplKGEpIHsKKyAgICAgICAgICAgIHZhciBtYWcg PSBtYXRoLnNxcnQobm9ybShhKSk7CisgICAgICAgICAgICBhWzBdICYmIChh WzBdIC89IG1hZyk7CisgICAgICAgICAgICBhWzFdICYmIChhWzFdIC89IG1h Zyk7CisgICAgICAgIH0KKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJp eC5kZXRlcm1pbmFudAorICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAg KioKKyAgICAgICAgICogRmluZHMgZGV0ZXJtaW5hbnQgb2YgdGhlIGdpdmVu IG1hdHJpeC4KKyAgICAgICAgID0gKG51bWJlcikgZGV0ZXJtaW5hbnQKKyAg ICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLmRldGVybWluYW50ID0g ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYSAqIHRo aXMuZCAtIHRoaXMuYiAqIHRoaXMuYzsKKyAgICAgICAgfTsKKyAgICAgICAg LypcCisgICAgICAgICAqIE1hdHJpeC5zcGxpdAorICAgICAgICAgWyBtZXRo b2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogU3BsaXRzIG1hdHJpeCBp bnRvIHByaW1pdGl2ZSB0cmFuc2Zvcm1hdGlvbnMKKyAgICAgICAgID0gKG9i amVjdCkgaW4gZm9ybWF0OgorICAgICAgICAgbyBkeCAobnVtYmVyKSB0cmFu c2xhdGlvbiBieSB4CisgICAgICAgICBvIGR5IChudW1iZXIpIHRyYW5zbGF0 aW9uIGJ5IHkKKyAgICAgICAgIG8gc2NhbGV4IChudW1iZXIpIHNjYWxlIGJ5 IHgKKyAgICAgICAgIG8gc2NhbGV5IChudW1iZXIpIHNjYWxlIGJ5IHkKKyAg ICAgICAgIG8gc2hlYXIgKG51bWJlcikgc2hlYXIKKyAgICAgICAgIG8gcm90 YXRlIChudW1iZXIpIHJvdGF0aW9uIGluIGRlZworICAgICAgICAgbyBpc1Np bXBsZSAoYm9vbGVhbikgY291bGQgaXQgYmUgcmVwcmVzZW50ZWQgdmlhIHNp bXBsZSB0cmFuc2Zvcm1hdGlvbnMKKyAgICAgICAgXCovCisgICAgICAgIG1h dHJpeHByb3RvLnNwbGl0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg dmFyIG91dCA9IHt9OworICAgICAgICAgICAgLy8gdHJhbnNsYXRpb24KKyAg ICAgICAgICAgIG91dC5keCA9IHRoaXMuZTsKKyAgICAgICAgICAgIG91dC5k eSA9IHRoaXMuZjsKKworICAgICAgICAgICAgLy8gc2NhbGUgYW5kIHNoZWFy CisgICAgICAgICAgICB2YXIgcm93ID0gW1t0aGlzLmEsIHRoaXMuY10sIFt0 aGlzLmIsIHRoaXMuZF1dOworICAgICAgICAgICAgb3V0LnNjYWxleCA9IG1h dGguc3FydChub3JtKHJvd1swXSkpOworICAgICAgICAgICAgbm9ybWFsaXpl KHJvd1swXSk7CisKKyAgICAgICAgICAgIG91dC5zaGVhciA9IHJvd1swXVsw XSAqIHJvd1sxXVswXSArIHJvd1swXVsxXSAqIHJvd1sxXVsxXTsKKyAgICAg ICAgICAgIHJvd1sxXSA9IFtyb3dbMV1bMF0gLSByb3dbMF1bMF0gKiBvdXQu c2hlYXIsIHJvd1sxXVsxXSAtIHJvd1swXVsxXSAqIG91dC5zaGVhcl07CisK KyAgICAgICAgICAgIG91dC5zY2FsZXkgPSBtYXRoLnNxcnQobm9ybShyb3db MV0pKTsKKyAgICAgICAgICAgIG5vcm1hbGl6ZShyb3dbMV0pOworICAgICAg ICAgICAgb3V0LnNoZWFyIC89IG91dC5zY2FsZXk7CisKKyAgICAgICAgICAg IGlmICh0aGlzLmRldGVybWluYW50KCkgPCAwKSB7CisgICAgICAgICAgICAg ICAgb3V0LnNjYWxleCA9IC1vdXQuc2NhbGV4OworICAgICAgICAgICAgfQor CisgICAgICAgICAgICAvLyByb3RhdGlvbgorICAgICAgICAgICAgdmFyIHNp biA9IC1yb3dbMF1bMV0sCisgICAgICAgICAgICAgICAgY29zID0gcm93WzFd WzFdOworICAgICAgICAgICAgaWYgKGNvcyA8IDApIHsKKyAgICAgICAgICAg ICAgICBvdXQucm90YXRlID0gU25hcC5kZWcobWF0aC5hY29zKGNvcykpOwor ICAgICAgICAgICAgICAgIGlmIChzaW4gPCAwKSB7CisgICAgICAgICAgICAg ICAgICAgIG91dC5yb3RhdGUgPSAzNjAgLSBvdXQucm90YXRlOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgb3V0LnJvdGF0ZSA9IFNuYXAuZGVnKG1hdGguYXNpbihzaW4pKTsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0LmlzU2ltcGxlID0g IStvdXQuc2hlYXIudG9GaXhlZCg5KSAmJiAob3V0LnNjYWxleC50b0ZpeGVk KDkpID09IG91dC5zY2FsZXkudG9GaXhlZCg5KSB8fCAhb3V0LnJvdGF0ZSk7 CisgICAgICAgICAgICBvdXQuaXNTdXBlclNpbXBsZSA9ICErb3V0LnNoZWFy LnRvRml4ZWQoOSkgJiYgb3V0LnNjYWxleC50b0ZpeGVkKDkpID09IG91dC5z Y2FsZXkudG9GaXhlZCg5KSAmJiAhb3V0LnJvdGF0ZTsKKyAgICAgICAgICAg IG91dC5ub1JvdGF0aW9uID0gIStvdXQuc2hlYXIudG9GaXhlZCg5KSAmJiAh b3V0LnJvdGF0ZTsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAg IH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXgudG9UcmFuc2Zv cm1TdHJpbmcKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisg ICAgICAgICAqIFJldHVybnMgdHJhbnNmb3JtIHN0cmluZyB0aGF0IHJlcHJl c2VudHMgZ2l2ZW4gbWF0cml4CisgICAgICAgICA9IChzdHJpbmcpIHRyYW5z Zm9ybSBzdHJpbmcKKyAgICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3Rv LnRvVHJhbnNmb3JtU3RyaW5nID0gZnVuY3Rpb24gKHNob3J0ZXIpIHsKKyAg ICAgICAgICAgIHZhciBzID0gc2hvcnRlciB8fCB0aGlzLnNwbGl0KCk7Cisg ICAgICAgICAgICBpZiAoIStzLnNoZWFyLnRvRml4ZWQoOSkpIHsKKyAgICAg ICAgICAgICAgICBzLnNjYWxleCA9ICtzLnNjYWxleC50b0ZpeGVkKDQpOwor ICAgICAgICAgICAgICAgIHMuc2NhbGV5ID0gK3Muc2NhbGV5LnRvRml4ZWQo NCk7CisgICAgICAgICAgICAgICAgcy5yb3RhdGUgPSArcy5yb3RhdGUudG9G aXhlZCg0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIChzLmR4IHx8IHMu ZHkgPyAidCIgKyBbK3MuZHgudG9GaXhlZCg0KSwgK3MuZHkudG9GaXhlZCg0 KV0gOiBFKSArIAorICAgICAgICAgICAgICAgICAgICAgICAgKHMuc2NhbGV4 ICE9IDEgfHwgcy5zY2FsZXkgIT0gMSA/ICJzIiArIFtzLnNjYWxleCwgcy5z Y2FsZXksIDAsIDBdIDogRSkgKworICAgICAgICAgICAgICAgICAgICAgICAg KHMucm90YXRlID8gInIiICsgWytzLnJvdGF0ZS50b0ZpeGVkKDQpLCAwLCAw XSA6IEUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4gIm0iICsgW3RoaXMuZ2V0KDApLCB0aGlzLmdldCgxKSwgdGhp cy5nZXQoMiksIHRoaXMuZ2V0KDMpLCB0aGlzLmdldCg0KSwgdGhpcy5nZXQo NSldOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0pKE1hdHJp eC5wcm90b3R5cGUpOworICAgIC8qXAorICAgICAqIFNuYXAuTWF0cml4Cisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBNYXRyaXggY29uc3Ry dWN0b3IsIGV4dGVuZCBvbiB5b3VyIG93biByaXNrLgorICAgICAqIFRvIGNy ZWF0ZSBtYXRyaWNlcyB1c2UgQFNuYXAubWF0cml4LgorICAgIFwqLworICAg IFNuYXAuTWF0cml4ID0gTWF0cml4OworICAgIC8qXAorICAgICAqIFNuYXAu bWF0cml4CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGls aXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgYSBtYXRyaXgg YmFzZWQgb24gdGhlIGdpdmVuIHBhcmFtZXRlcnMKKyAgICAgLSBhIChudW1i ZXIpCisgICAgIC0gYiAobnVtYmVyKQorICAgICAtIGMgKG51bWJlcikKKyAg ICAgLSBkIChudW1iZXIpCisgICAgIC0gZSAobnVtYmVyKQorICAgICAtIGYg KG51bWJlcikKKyAgICAgKiBvcgorICAgICAtIHN2Z01hdHJpeCAoU1ZHTWF0 cml4KQorICAgICA9IChvYmplY3QpIEBNYXRyaXgKKyAgICBcKi8KKyAgICBT bmFwLm1hdHJpeCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmKSB7Cisg ICAgICAgIHJldHVybiBuZXcgTWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpOwor ICAgIH07Cit9KTsKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0 ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIAor Ly8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u IDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu CisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK Ky8vIAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VO U0UtMi4wCisvLyAKKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxl IGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRp c3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9u IGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1Ig Q09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w bGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxh bmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRp b25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24g KFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAg IHZhciBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgICAgICBtYWtlID0g U25hcC5fLm1ha2UsCisgICAgICAgIHdyYXAgPSBTbmFwLl8ud3JhcCwKKyAg ICAgICAgaXMgPSBTbmFwLmlzLAorICAgICAgICBnZXRTb21lRGVmcyA9IFNu YXAuXy5nZXRTb21lRGVmcywKKyAgICAgICAgcmVVUkxWYWx1ZSA9IC9edXJs XCgjPyhbXildKylcKSQvLAorICAgICAgICAkID0gU25hcC5fLiQsCisgICAg ICAgIFVSTCA9IFNuYXAudXJsLAorICAgICAgICBTdHIgPSBTdHJpbmcsCisg ICAgICAgIHNlcGFyYXRvciA9IFNuYXAuXy5zZXBhcmF0b3IsCisgICAgICAg IEUgPSAiIjsKKyAgICAvLyBBdHRyaWJ1dGVzIGV2ZW50IGhhbmRsZXJzCisg ICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXNrIiwgZnVuY3Rpb24gKHZh bHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQg fHwgdmFsdWUgaW5zdGFuY2VvZiBGcmFnbWVudCkgeworICAgICAgICAgICAg ZXZlLnN0b3AoKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9m IEZyYWdtZW50ICYmIHZhbHVlLm5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0g MSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUubm9kZS5maXJz dENoaWxkOworICAgICAgICAgICAgICAgIGdldFNvbWVEZWZzKHRoaXMpLmFw cGVuZENoaWxkKHZhbHVlKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHdy YXAodmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZh bHVlLnR5cGUgPT0gIm1hc2siKSB7CisgICAgICAgICAgICAgICAgdmFyIG1h c2sgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgbWFzayA9IG1ha2UoIm1hc2siLCBnZXRTb21lRGVmcyh0aGlzKSk7 CisgICAgICAgICAgICAgICAgbWFzay5ub2RlLmFwcGVuZENoaWxkKHZhbHVl Lm5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgIW1hc2subm9k ZS5pZCAmJiAkKG1hc2subm9kZSwgeworICAgICAgICAgICAgICAgIGlkOiBt YXNrLmlkCisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICQodGhpcy5u b2RlLCB7CisgICAgICAgICAgICAgICAgbWFzazogVVJMKG1hc2suaWQpCisg ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pOworICAgIChmdW5j dGlvbiAoY2xpcEl0KSB7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0 dHIuY2xpcCIsIGNsaXBJdCk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGls LmF0dHIuY2xpcC1wYXRoIiwgY2xpcEl0KTsKKyAgICAgICAgZXZlLm9uKCJz bmFwLnV0aWwuYXR0ci5jbGlwUGF0aCIsIGNsaXBJdCk7CisgICAgfShmdW5j dGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2Yg RWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIEZyYWdtZW50KSB7CisgICAg ICAgICAgICBldmUuc3RvcCgpOworICAgICAgICAgICAgaWYgKHZhbHVlLnR5 cGUgPT0gImNsaXBQYXRoIikgeworICAgICAgICAgICAgICAgIHZhciBjbGlw ID0gdmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGNsaXAgPSBtYWtlKCJjbGlwUGF0aCIsIGdldFNvbWVEZWZzKHRoaXMp KTsKKyAgICAgICAgICAgICAgICBjbGlwLm5vZGUuYXBwZW5kQ2hpbGQodmFs dWUubm9kZSk7CisgICAgICAgICAgICAgICAgIWNsaXAubm9kZS5pZCAmJiAk KGNsaXAubm9kZSwgeworICAgICAgICAgICAgICAgICAgICBpZDogY2xpcC5p ZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgJCh0aGlzLm5vZGUsIHsKKyAgICAgICAgICAgICAgICAiY2xpcC1w YXRoIjogVVJMKGNsaXAubm9kZS5pZCB8fCBjbGlwLmlkKQorICAgICAgICAg ICAgfSk7CisgICAgICAgIH0KKyAgICB9KSk7CisgICAgZnVuY3Rpb24gZmls bFN0cm9rZShuYW1lKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFs dWUpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICBp ZiAodmFsdWUgaW5zdGFuY2VvZiBGcmFnbWVudCAmJiB2YWx1ZS5ub2RlLmNo aWxkTm9kZXMubGVuZ3RoID09IDEgJiYKKyAgICAgICAgICAgICAgICAodmFs dWUubm9kZS5maXJzdENoaWxkLnRhZ05hbWUgPT0gInJhZGlhbEdyYWRpZW50 IiB8fAorICAgICAgICAgICAgICAgIHZhbHVlLm5vZGUuZmlyc3RDaGlsZC50 YWdOYW1lID09ICJsaW5lYXJHcmFkaWVudCIgfHwKKyAgICAgICAgICAgICAg ICB2YWx1ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAicGF0dGVybiIp KSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5ub2RlLmZpcnN0 Q2hpbGQ7CisgICAgICAgICAgICAgICAgZ2V0U29tZURlZnModGhpcykuYXBw ZW5kQ2hpbGQodmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gd3Jh cCh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFs dWUgaW5zdGFuY2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYg KHZhbHVlLnR5cGUgPT0gInJhZGlhbEdyYWRpZW50IiB8fCB2YWx1ZS50eXBl ID09ICJsaW5lYXJHcmFkaWVudCIKKyAgICAgICAgICAgICAgICAgICB8fCB2 YWx1ZS50eXBlID09ICJwYXR0ZXJuIikgeworICAgICAgICAgICAgICAgICAg ICBpZiAoIXZhbHVlLm5vZGUuaWQpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICQodmFsdWUubm9kZSwgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlkOiB2YWx1ZS5pZAorICAgICAgICAgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg dmFyIGZpbGwgPSBVUkwodmFsdWUubm9kZS5pZCk7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsbCA9IHZhbHVl LmF0dHIobmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaWxsID0gU25hcC5jb2xvcih2 YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGZpbGwuZXJyb3IpIHsKKyAg ICAgICAgICAgICAgICAgICAgdmFyIGdyYWQgPSBTbmFwKGdldFNvbWVEZWZz KHRoaXMpLm93bmVyU1ZHRWxlbWVudCkuZ3JhZGllbnQodmFsdWUpOworICAg ICAgICAgICAgICAgICAgICBpZiAoZ3JhZCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFncmFkLm5vZGUuaWQpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAkKGdyYWQubm9kZSwgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZDogZ3JhZC5pZAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IFVSTChncmFkLm5vZGUu aWQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICAgICAgZmlsbCA9IHZhbHVlOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgZmlsbCA9IFN0cihmaWxsKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgYXR0cnMgPSB7fTsK KyAgICAgICAgICAgIGF0dHJzW25hbWVdID0gZmlsbDsKKyAgICAgICAgICAg ICQodGhpcy5ub2RlLCBhdHRycyk7CisgICAgICAgICAgICB0aGlzLm5vZGUu c3R5bGVbbmFtZV0gPSBFOworICAgICAgICB9OworICAgIH0KKyAgICBldmUu b24oInNuYXAudXRpbC5hdHRyLmZpbGwiLCBmaWxsU3Ryb2tlKCJmaWxsIikp OworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuc3Ryb2tlIiwgZmlsbFN0 cm9rZSgic3Ryb2tlIikpOworICAgIHZhciBncmFkcmcgPSAvXihbbHJdKSg/ OlwoKFteKV0qKVwpKT8oLiopJC9pOworICAgIGV2ZS5vbigic25hcC51dGls LmdyYWQucGFyc2UiLCBmdW5jdGlvbiBwYXJzZUdyYWQoc3RyaW5nKSB7Cisg ICAgICAgIHN0cmluZyA9IFN0cihzdHJpbmcpOworICAgICAgICB2YXIgdG9r ZW5zID0gc3RyaW5nLm1hdGNoKGdyYWRyZyk7CisgICAgICAgIGlmICghdG9r ZW5zKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor ICAgICAgICB2YXIgdHlwZSA9IHRva2Vuc1sxXSwKKyAgICAgICAgICAgIHBh cmFtcyA9IHRva2Vuc1syXSwKKyAgICAgICAgICAgIHN0b3BzID0gdG9rZW5z WzNdOworICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc3BsaXQoL1xzKixccyov KS5tYXAoZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4gK2Vs ID09IGVsID8gK2VsIDogZWw7CisgICAgICAgIH0pOworICAgICAgICBpZiAo cGFyYW1zLmxlbmd0aCA9PSAxICYmIHBhcmFtc1swXSA9PSAwKSB7CisgICAg ICAgICAgICBwYXJhbXMgPSBbXTsKKyAgICAgICAgfQorICAgICAgICBzdG9w cyA9IHN0b3BzLnNwbGl0KCItIik7CisgICAgICAgIHN0b3BzID0gc3RvcHMu bWFwKGZ1bmN0aW9uIChlbCkgeworICAgICAgICAgICAgZWwgPSBlbC5zcGxp dCgiOiIpOworICAgICAgICAgICAgdmFyIG91dCA9IHsKKyAgICAgICAgICAg ICAgICBjb2xvcjogZWxbMF0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg ICBpZiAoZWxbMV0pIHsKKyAgICAgICAgICAgICAgICBvdXQub2Zmc2V0ID0g cGFyc2VGbG9hdChlbFsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICByZXR1cm4gb3V0OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHsK KyAgICAgICAgICAgIHR5cGU6IHR5cGUsCisgICAgICAgICAgICBwYXJhbXM6 IHBhcmFtcywKKyAgICAgICAgICAgIHN0b3BzOiBzdG9wcworICAgICAgICB9 OworICAgIH0pOworCisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5kIiwg ZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAg ICAgIGlmIChpcyh2YWx1ZSwgImFycmF5IikgJiYgaXModmFsdWVbMF0sICJh cnJheSIpKSB7CisgICAgICAgICAgICB2YWx1ZSA9IFNuYXAucGF0aC50b1N0 cmluZy5jYWxsKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZSA9 IFN0cih2YWx1ZSk7CisgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgvW3J1b10v aSkpIHsKKyAgICAgICAgICAgIHZhbHVlID0gU25hcC5wYXRoLnRvQWJzb2x1 dGUodmFsdWUpOworICAgICAgICB9CisgICAgICAgICQodGhpcy5ub2RlLCB7 ZDogdmFsdWV9KTsKKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0 aWwuYXR0ci4jdGV4dCIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBl dmUuc3RvcCgpOworICAgICAgICB2YWx1ZSA9IFN0cih2YWx1ZSk7CisgICAg ICAgIHZhciB0eHQgPSBnbG9iLmRvYy5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSk7 CisgICAgICAgIHdoaWxlICh0aGlzLm5vZGUuZmlyc3RDaGlsZCkgeworICAg ICAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUNoaWxkKHRoaXMubm9kZS5maXJz dENoaWxkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLm5vZGUuYXBwZW5k Q2hpbGQodHh0KTsKKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0 aWwuYXR0ci5wYXRoIiwgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGV2 ZS5zdG9wKCk7CisgICAgICAgIHRoaXMuYXR0cih7ZDogdmFsdWV9KTsKKyAg ICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5jbGFzcyIs IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOworICAg ICAgICB0aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VWYWwgPSB2YWx1ZTsKKyAg ICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci52aWV3Qm94 IiwgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciB2YjsKKyAgICAg ICAgaWYgKGlzKHZhbHVlLCAib2JqZWN0IikgJiYgIngiIGluIHZhbHVlKSB7 CisgICAgICAgICAgICB2YiA9IFt2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS53 aWR0aCwgdmFsdWUuaGVpZ2h0XS5qb2luKCIgIik7CisgICAgICAgIH0gZWxz ZSBpZiAoaXModmFsdWUsICJhcnJheSIpKSB7CisgICAgICAgICAgICB2YiA9 IHZhbHVlLmpvaW4oIiAiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIHZiID0gdmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgJCh0aGlzLm5v ZGUsIHsKKyAgICAgICAgICAgIHZpZXdCb3g6IHZiCisgICAgICAgIH0pOwor ICAgICAgICBldmUuc3RvcCgpOworICAgIH0pKC0xKTsKKyAgICBldmUub24o InNuYXAudXRpbC5hdHRyLnRyYW5zZm9ybSIsIGZ1bmN0aW9uICh2YWx1ZSkg eworICAgICAgICB0aGlzLnRyYW5zZm9ybSh2YWx1ZSk7CisgICAgICAgIGV2 ZS5zdG9wKCk7CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGls LmF0dHIuciIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodGhp cy50eXBlID09ICJyZWN0IikgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgICAgICQodGhpcy5ub2RlLCB7CisgICAgICAgICAgICAgICAg cng6IHZhbHVlLAorICAgICAgICAgICAgICAgIHJ5OiB2YWx1ZQorICAgICAg ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9KSgtMSk7CisgICAgZXZlLm9u KCJzbmFwLnV0aWwuYXR0ci50ZXh0cGF0aCIsIGZ1bmN0aW9uICh2YWx1ZSkg eworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICBpZiAodGhpcy50eXBl ID09ICJ0ZXh0IikgeworICAgICAgICAgICAgdmFyIGlkLCB0cCwgbm9kZTsK KyAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdGhpcy50ZXh0UGF0aCkgewor ICAgICAgICAgICAgICAgIHRwID0gdGhpcy50ZXh0UGF0aDsKKyAgICAgICAg ICAgICAgICB3aGlsZSAodHAubm9kZS5maXJzdENoaWxkKSB7CisgICAgICAg ICAgICAgICAgICAgIHRoaXMubm9kZS5hcHBlbmRDaGlsZCh0cC5ub2RlLmZp cnN0Q2hpbGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB0cC5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50 ZXh0UGF0aDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBpZiAoaXModmFsdWUsICJzdHJpbmciKSkgewor ICAgICAgICAgICAgICAgIHZhciBkZWZzID0gZ2V0U29tZURlZnModGhpcyks CisgICAgICAgICAgICAgICAgICAgIHBhdGggPSB3cmFwKGRlZnMucGFyZW50 Tm9kZSkucGF0aCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgZGVmcy5hcHBl bmRDaGlsZChwYXRoLm5vZGUpOworICAgICAgICAgICAgICAgIGlkID0gcGF0 aC5pZDsKKyAgICAgICAgICAgICAgICBwYXRoLmF0dHIoe2lkOiBpZH0pOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9 IHdyYXAodmFsdWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0 YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWQgPSB2 YWx1ZS5hdHRyKCJpZCIpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlk KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IHZhbHVlLmlkOwor ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuYXR0cih7aWQ6IGlkfSk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaWQpIHsKKyAgICAgICAg ICAgICAgICB0cCA9IHRoaXMudGV4dFBhdGg7CisgICAgICAgICAgICAgICAg bm9kZSA9IHRoaXMubm9kZTsKKyAgICAgICAgICAgICAgICBpZiAodHApIHsK KyAgICAgICAgICAgICAgICAgICAgdHAuYXR0cih7InhsaW5rOmhyZWYiOiAi IyIgKyBpZH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIHRwID0gJCgidGV4dFBhdGgiLCB7CisgICAgICAgICAg ICAgICAgICAgICAgICAieGxpbms6aHJlZiI6ICIjIiArIGlkCisgICAgICAg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAo bm9kZS5maXJzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0 cC5hcHBlbmRDaGlsZChub2RlLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hp bGQodHApOworICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRQYXRoID0g d3JhcCh0cCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGls LmF0dHIudGV4dCIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAo dGhpcy50eXBlID09ICJ0ZXh0IikgeworICAgICAgICAgICAgdmFyIGkgPSAw LAorICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLm5vZGUsCisgICAgICAg ICAgICAgICAgdHVuZXIgPSBmdW5jdGlvbiAoY2h1bmspIHsKKyAgICAgICAg ICAgICAgICAgICAgdmFyIG91dCA9ICQoInRzcGFuIik7CisgICAgICAgICAg ICAgICAgICAgIGlmIChpcyhjaHVuaywgImFycmF5IikpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2h1bmsubGVu Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQu YXBwZW5kQ2hpbGQodHVuZXIoY2h1bmtbaV0pKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChnbG9iLmRv Yy5jcmVhdGVUZXh0Tm9kZShjaHVuaykpOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIG91dC5ub3JtYWxpemUgJiYgb3V0 Lm5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0 OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB3aGlsZSAobm9k ZS5maXJzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVD aGlsZChub2RlLmZpcnN0Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgdmFyIHR1bmVkID0gdHVuZXIodmFsdWUpOworICAgICAgICAgICAg d2hpbGUgKHR1bmVkLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAgICBu b2RlLmFwcGVuZENoaWxkKHR1bmVkLmZpcnN0Q2hpbGQpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgfSko LTEpOworICAgIGZ1bmN0aW9uIHNldEZvbnRTaXplKHZhbHVlKSB7CisgICAg ICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSArdmFsdWUp IHsKKyAgICAgICAgICAgIHZhbHVlICs9ICJweCI7CisgICAgICAgIH0KKyAg ICAgICAgdGhpcy5ub2RlLnN0eWxlLmZvbnRTaXplID0gdmFsdWU7CisgICAg fQorICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuZm9udFNpemUiLCBzZXRG b250U2l6ZSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuZm9u dC1zaXplIiwgc2V0Rm9udFNpemUpKC0xKTsKKworCisgICAgZXZlLm9uKCJz bmFwLnV0aWwuZ2V0YXR0ci50cmFuc2Zvcm0iLCBmdW5jdGlvbiAoKSB7Cisg ICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHJldHVybiB0aGlzLnRyYW5z Zm9ybSgpOworICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5n ZXRhdHRyLnRleHRwYXRoIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBldmUu c3RvcCgpOworICAgICAgICByZXR1cm4gdGhpcy50ZXh0UGF0aDsKKyAgICB9 KSgtMSk7CisgICAgLy8gTWFya2VycworICAgIChmdW5jdGlvbiAoKSB7Cisg ICAgICAgIGZ1bmN0aW9uIGdldHRlcihlbmQpIHsKKyAgICAgICAgICAgIHJl dHVybiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBnbG9iLmRvYy5kZWZh dWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSwgbnVsbCkuZ2V0 UHJvcGVydHlWYWx1ZSgibWFya2VyLSIgKyBlbmQpOworICAgICAgICAgICAg ICAgIGlmIChzdHlsZSA9PSAibm9uZSIpIHsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHN0eWxlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybiBTbmFwKGdsb2IuZG9jLmdldEVs ZW1lbnRCeUlkKHN0eWxlLm1hdGNoKHJlVVJMVmFsdWUpWzFdKSk7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg ICAgICBmdW5jdGlvbiBzZXR0ZXIoZW5kKSB7CisgICAgICAgICAgICByZXR1 cm4gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAgICAgICAgZXZlLnN0 b3AoKTsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICJtYXJrZXIiICsg ZW5kLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZW5kLnN1YnN0cmluZygx KTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gIiIgfHwgIXZhbHVl KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5zdHlsZVtuYW1l XSA9ICJub25lIjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlw ZSA9PSAibWFya2VyIikgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWQg PSB2YWx1ZS5ub2RlLmlkOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlk KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHZhbHVlLm5vZGUsIHtp ZDogdmFsdWUuaWR9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB0aGlzLm5vZGUuc3R5bGVbbmFtZV0gPSBVUkwoaWQp OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBldmUu b24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlci1lbmQiLCBnZXR0ZXIoImVu ZCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIu bWFya2VyRW5kIiwgZ2V0dGVyKCJlbmQiKSkoLTEpOworICAgICAgICBldmUu b24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlci1zdGFydCIsIGdldHRlcigi c3RhcnQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAudXRpbC5nZXRh dHRyLm1hcmtlclN0YXJ0IiwgZ2V0dGVyKCJzdGFydCIpKSgtMSk7CisgICAg ICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIubWFya2VyLW1pZCIsIGdl dHRlcigibWlkIikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwu Z2V0YXR0ci5tYXJrZXJNaWQiLCBnZXR0ZXIoIm1pZCIpKSgtMSk7CisgICAg ICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIubWFya2VyLWVuZCIsIHNldHRl cigiZW5kIikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0 ci5tYXJrZXJFbmQiLCBzZXR0ZXIoImVuZCIpKSgtMSk7CisgICAgICAgIGV2 ZS5vbigic25hcC51dGlsLmF0dHIubWFya2VyLXN0YXJ0Iiwgc2V0dGVyKCJz dGFydCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIu bWFya2VyU3RhcnQiLCBzZXR0ZXIoInN0YXJ0IikpKC0xKTsKKyAgICAgICAg ZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXItbWlkIiwgc2V0dGVyKCJt aWQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLm1h cmtlck1pZCIsIHNldHRlcigibWlkIikpKC0xKTsKKyAgICB9KCkpOworICAg IGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIuciIsIGZ1bmN0aW9uICgpIHsK KyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAicmVjdCIgJiYgJCh0aGlzLm5v ZGUsICJyeCIpID09ICQodGhpcy5ub2RlLCAicnkiKSkgeworICAgICAgICAg ICAgZXZlLnN0b3AoKTsKKyAgICAgICAgICAgIHJldHVybiAkKHRoaXMubm9k ZSwgInJ4Iik7CisgICAgICAgIH0KKyAgICB9KSgtMSk7CisgICAgZnVuY3Rp b24gdGV4dEV4dHJhY3Qobm9kZSkgeworICAgICAgICB2YXIgb3V0ID0gW107 CisgICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlczsKKyAg ICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBp IDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFyIGNoaSA9IGNoaWxkcmVu W2ldOworICAgICAgICAgICAgaWYgKGNoaS5ub2RlVHlwZSA9PSAzKSB7Cisg ICAgICAgICAgICAgICAgb3V0LnB1c2goY2hpLm5vZGVWYWx1ZSk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hpLnRhZ05hbWUgPT0gInRz cGFuIikgeworICAgICAgICAgICAgICAgIGlmIChjaGkuY2hpbGROb2Rlcy5s ZW5ndGggPT0gMSAmJiBjaGkuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7 CisgICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKGNoaS5maXJzdENoaWxk Lm5vZGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICAgICAgb3V0LnB1c2godGV4dEV4dHJhY3QoY2hpKSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIHJldHVybiBvdXQ7CisgICAgfQorICAgIGV2ZS5vbigic25hcC51 dGlsLmdldGF0dHIudGV4dCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg KHRoaXMudHlwZSA9PSAidGV4dCIgfHwgdGhpcy50eXBlID09ICJ0c3BhbiIp IHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICB2YXIg b3V0ID0gdGV4dEV4dHJhY3QodGhpcy5ub2RlKTsKKyAgICAgICAgICAgIHJl dHVybiBvdXQubGVuZ3RoID09IDEgPyBvdXRbMF0gOiBvdXQ7CisgICAgICAg IH0KKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0 ci4jdGV4dCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu bm9kZS50ZXh0Q29udGVudDsKKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJz bmFwLnV0aWwuZ2V0YXR0ci52aWV3Qm94IiwgZnVuY3Rpb24gKCkgeworICAg ICAgICBldmUuc3RvcCgpOworICAgICAgICB2YXIgdmIgPSAkKHRoaXMubm9k ZSwgInZpZXdCb3giKTsKKyAgICAgICAgaWYgKHZiKSB7CisgICAgICAgICAg ICB2YiA9IHZiLnNwbGl0KHNlcGFyYXRvcik7CisgICAgICAgICAgICByZXR1 cm4gU25hcC5fLmJveCgrdmJbMF0sICt2YlsxXSwgK3ZiWzJdLCArdmJbM10p OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICB9CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmdl dGF0dHIucG9pbnRzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcCA9 ICQodGhpcy5ub2RlLCAicG9pbnRzIik7CisgICAgICAgIGV2ZS5zdG9wKCk7 CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICByZXR1cm4gcC5zcGxp dChzZXBhcmF0b3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigi c25hcC51dGlsLmdldGF0dHIucGF0aCIsIGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgdmFyIHAgPSAkKHRoaXMubm9kZSwgImQiKTsKKyAgICAgICAgZXZlLnN0 b3AoKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfSkoLTEpOworICAgIGV2 ZS5vbigic25hcC51dGlsLmdldGF0dHIuY2xhc3MiLCBmdW5jdGlvbiAoKSB7 CisgICAgICAgIHJldHVybiB0aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VWYWw7 CisgICAgfSkoLTEpOworICAgIGZ1bmN0aW9uIGdldEZvbnRTaXplKCkgewor ICAgICAgICBldmUuc3RvcCgpOworICAgICAgICByZXR1cm4gdGhpcy5ub2Rl LnN0eWxlLmZvbnRTaXplOworICAgIH0KKyAgICBldmUub24oInNuYXAudXRp bC5nZXRhdHRyLmZvbnRTaXplIiwgZ2V0Rm9udFNpemUpKC0xKTsKKyAgICBl dmUub24oInNuYXAudXRpbC5nZXRhdHRyLmZvbnQtc2l6ZSIsIGdldEZvbnRT aXplKSgtMSk7Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDE0IEFkb2Jl IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor Ly8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl bnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl IGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ Q0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8g ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg b24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp bXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRh dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlv biAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IsIEZyYWdtZW50KSB7Cisg ICAgdmFyIHJnTm90U3BhY2UgPSAvXFMrL2csCisgICAgICAgIHJnQmFkU3Bh Y2UgPSAvW1x0XHJcblxmXS9nLAorICAgICAgICByZ1RyaW0gPSAvKF5ccyt8 XHMrJCkvZywKKyAgICAgICAgU3RyID0gU3RyaW5nLAorICAgICAgICBlbHBy b3RvID0gRWxlbWVudC5wcm90b3R5cGU7CisgICAgLypcCisgICAgICogRWxl bWVudC5hZGRDbGFzcworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogQWRkcyBnaXZlbiBjbGFzcyBuYW1lIG9yIGxpc3Qgb2YgY2xhc3MgbmFt ZXMgdG8gdGhlIGVsZW1lbnQuCisgICAgIC0gdmFsdWUgKHN0cmluZykgY2xh c3MgbmFtZSBvciBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzcyBuYW1l cworICAgICAqKgorICAgICA9IChFbGVtZW50KSBvcmlnaW5hbCBlbGVtZW50 LgorICAgIFwqLworICAgIGVscHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiAo dmFsdWUpIHsKKyAgICAgICAgdmFyIGNsYXNzZXMgPSBTdHIodmFsdWUgfHwg IiIpLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAgZWxl bSA9IHRoaXMubm9kZSwKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGVsZW0u Y2xhc3NOYW1lLmJhc2VWYWwsCisgICAgICAgICAgICBjdXJDbGFzc2VzID0g Y2xhc3NOYW1lLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAg ICAgaiwKKyAgICAgICAgICAgIHBvcywKKyAgICAgICAgICAgIGNsYXp6LAor ICAgICAgICAgICAgZmluYWxWYWx1ZTsKKworICAgICAgICBpZiAoY2xhc3Nl cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGogPSAwOworICAgICAgICAgICAg d2hpbGUgKChjbGF6eiA9IGNsYXNzZXNbaisrXSkpIHsKKyAgICAgICAgICAg ICAgICBwb3MgPSBjdXJDbGFzc2VzLmluZGV4T2YoY2xhenopOworICAgICAg ICAgICAgICAgIGlmICghfnBvcykgeworICAgICAgICAgICAgICAgICAgICBj dXJDbGFzc2VzLnB1c2goY2xhenopOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGN1ckNs YXNzZXMuam9pbigiICIpOworICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAh PSBmaW5hbFZhbHVlKSB7CisgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05h bWUuYmFzZVZhbCA9IGZpbmFsVmFsdWU7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50LnJlbW92ZUNsYXNzCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGdpdmVuIGNsYXNzIG5hbWUgb3Ig bGlzdCBvZiBjbGFzcyBuYW1lcyBmcm9tIHRoZSBlbGVtZW50LgorICAgICAt IHZhbHVlIChzdHJpbmcpIGNsYXNzIG5hbWUgb3Igc3BhY2Ugc2VwYXJhdGVk IGxpc3Qgb2YgY2xhc3MgbmFtZXMKKyAgICAgKioKKyAgICAgPSAoRWxlbWVu dCkgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBcKi8KKyAgICBlbHByb3RvLnJl bW92ZUNsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciBj bGFzc2VzID0gU3RyKHZhbHVlIHx8ICIiKS5tYXRjaChyZ05vdFNwYWNlKSB8 fCBbXSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzLm5vZGUsCisgICAgICAg ICAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5iYXNlVmFsLAorICAg ICAgICAgICAgY3VyQ2xhc3NlcyA9IGNsYXNzTmFtZS5tYXRjaChyZ05vdFNw YWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGosCisgICAgICAgICAgICBwb3Ms CisgICAgICAgICAgICBjbGF6eiwKKyAgICAgICAgICAgIGZpbmFsVmFsdWU7 CisgICAgICAgIGlmIChjdXJDbGFzc2VzLmxlbmd0aCkgeworICAgICAgICAg ICAgaiA9IDA7CisgICAgICAgICAgICB3aGlsZSAoKGNsYXp6ID0gY2xhc3Nl c1tqKytdKSkgeworICAgICAgICAgICAgICAgIHBvcyA9IGN1ckNsYXNzZXMu aW5kZXhPZihjbGF6eik7CisgICAgICAgICAgICAgICAgaWYgKH5wb3MpIHsK KyAgICAgICAgICAgICAgICAgICAgY3VyQ2xhc3Nlcy5zcGxpY2UocG9zLCAx KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGZpbmFsVmFsdWUgPSBjdXJDbGFzc2VzLmpvaW4oIiAiKTsKKyAg ICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gZmluYWxWYWx1ZSkgeworICAg ICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwgPSBmaW5hbFZh bHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy biB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5oYXND bGFzcworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ2hlY2tz IGlmIHRoZSBlbGVtZW50IGhhcyBhIGdpdmVuIGNsYXNzIG5hbWUgaW4gdGhl IGxpc3Qgb2YgY2xhc3MgbmFtZXMgYXBwbGllZCB0byBpdC4KKyAgICAgLSB2 YWx1ZSAoc3RyaW5nKSBjbGFzcyBuYW1lCisgICAgICoqCisgICAgID0gKGJv b2xlYW4pIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBoYXMgZ2l2ZW4gY2xhc3MK KyAgICBcKi8KKyAgICBlbHByb3RvLmhhc0NsYXNzID0gZnVuY3Rpb24gKHZh bHVlKSB7CisgICAgICAgIHZhciBlbGVtID0gdGhpcy5ub2RlLAorICAgICAg ICAgICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUuYmFzZVZhbCwKKyAg ICAgICAgICAgIGN1ckNsYXNzZXMgPSBjbGFzc05hbWUubWF0Y2gocmdOb3RT cGFjZSkgfHwgW107CisgICAgICAgIHJldHVybiAhIX5jdXJDbGFzc2VzLmlu ZGV4T2YodmFsdWUpOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVu dC50b2dnbGVDbGFzcworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogQWRkIG9yIHJlbW92ZSBvbmUgb3IgbW9yZSBjbGFzc2VzIGZyb20gdGhl IGVsZW1lbnQsIGRlcGVuZGluZyBvbiBlaXRoZXIKKyAgICAgKiB0aGUgY2xh c3PigJlzIHByZXNlbmNlIG9yIHRoZSB2YWx1ZSBvZiB0aGUgYGZsYWdgIGFy Z3VtZW50LgorICAgICAtIHZhbHVlIChzdHJpbmcpIGNsYXNzIG5hbWUgb3Ig c3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3MgbmFtZXMKKyAgICAgLSBm bGFnIChib29sZWFuKSB2YWx1ZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUg Y2xhc3Mgc2hvdWxkIGJlIGFkZGVkIG9yIHJlbW92ZWQKKyAgICAgKioKKyAg ICAgPSAoRWxlbWVudCkgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBcKi8KKyAg ICBlbHByb3RvLnRvZ2dsZUNsYXNzID0gZnVuY3Rpb24gKHZhbHVlLCBmbGFn KSB7CisgICAgICAgIGlmIChmbGFnICE9IG51bGwpIHsKKyAgICAgICAgICAg IGlmIChmbGFnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRk Q2xhc3ModmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVDbGFzcyh2YWx1ZSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIGNsYXNzZXMgPSAo dmFsdWUgfHwgIiIpLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAg ICAgICAgZWxlbSA9IHRoaXMubm9kZSwKKyAgICAgICAgICAgIGNsYXNzTmFt ZSA9IGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwsCisgICAgICAgICAgICBjdXJD bGFzc2VzID0gY2xhc3NOYW1lLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAor ICAgICAgICAgICAgaiwKKyAgICAgICAgICAgIHBvcywKKyAgICAgICAgICAg IGNsYXp6LAorICAgICAgICAgICAgZmluYWxWYWx1ZTsKKyAgICAgICAgaiA9 IDA7CisgICAgICAgIHdoaWxlICgoY2xhenogPSBjbGFzc2VzW2orK10pKSB7 CisgICAgICAgICAgICBwb3MgPSBjdXJDbGFzc2VzLmluZGV4T2YoY2xhenop OworICAgICAgICAgICAgaWYgKH5wb3MpIHsKKyAgICAgICAgICAgICAgICBj dXJDbGFzc2VzLnNwbGljZShwb3MsIDEpOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBjdXJDbGFzc2VzLnB1c2goY2xhenopOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWxWYWx1 ZSA9IGN1ckNsYXNzZXMuam9pbigiICIpOworICAgICAgICBpZiAoY2xhc3NO YW1lICE9IGZpbmFsVmFsdWUpIHsKKyAgICAgICAgICAgIGVsZW0uY2xhc3NO YW1lLmJhc2VWYWwgPSBmaW5hbFZhbHVlOworICAgICAgICB9CisgICAgICAg IHJldHVybiB0aGlzOworICAgIH07Cit9KTsKKworLy8gQ29weXJpZ2h0IChj KSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBv ZiB0aGUgTGljZW5zZSBhdAorLy8gCisvLyBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vIAorLy8gVW5sZXNzIHJlcXVp cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n LCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhP VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZv ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z IGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFw LnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2Is IEZyYWdtZW50KSB7CisgICAgdmFyIG9wZXJhdG9ycyA9IHsKKyAgICAgICAg ICAgICIrIjogZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIHggKyB5OworICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAiLSI6IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICAgICAg ICAgIHJldHVybiB4IC0geTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAg ICAgICAgIi8iOiBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICAgICAgICAg ICAgICByZXR1cm4geCAvIHk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgICIqIjogZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHggKiB5OworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgfSwKKyAgICAgICAgU3RyID0gU3RyaW5nLAorICAgICAgICByZVVuaXQg PSAvW2Etel0rJC9pLAorICAgICAgICByZUFkZG9uID0gL15ccyooWytcLVwv Kl0pXHMqPVxzKihbXGQuZUUrXC1dKylccyooW15cZFxzXSspP1xzKiQvOwor ICAgIGZ1bmN0aW9uIGdldE51bWJlcih2YWwpIHsKKyAgICAgICAgcmV0dXJu IHZhbDsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0VW5pdCh1bml0KSB7Cisg ICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICBy ZXR1cm4gK3ZhbC50b0ZpeGVkKDMpICsgdW5pdDsKKyAgICAgICAgfTsKKyAg ICB9CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ciIsIGZ1bmN0aW9uICh2 YWwpIHsKKyAgICAgICAgdmFyIHBsdXMgPSBTdHIodmFsKS5tYXRjaChyZUFk ZG9uKTsKKyAgICAgICAgaWYgKHBsdXMpIHsKKyAgICAgICAgICAgIHZhciBl dm50ID0gZXZlLm50KCksCisgICAgICAgICAgICAgICAgbmFtZSA9IGV2bnQu c3Vic3RyaW5nKGV2bnQubGFzdEluZGV4T2YoIi4iKSArIDEpLAorICAgICAg ICAgICAgICAgIGEgPSB0aGlzLmF0dHIobmFtZSksCisgICAgICAgICAgICAg ICAgYXRyID0ge307CisgICAgICAgICAgICBldmUuc3RvcCgpOworICAgICAg ICAgICAgdmFyIHVuaXQgPSBwbHVzWzNdIHx8ICIiLAorICAgICAgICAgICAg ICAgIGFVbml0ID0gYS5tYXRjaChyZVVuaXQpLAorICAgICAgICAgICAgICAg IG9wID0gb3BlcmF0b3JzW3BsdXNbMV1dOworICAgICAgICAgICAgaWYgKGFV bml0ICYmIGFVbml0ID09IHVuaXQpIHsKKyAgICAgICAgICAgICAgICB2YWwg PSBvcChwYXJzZUZsb2F0KGEpLCArcGx1c1syXSk7CisgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgIGEgPSB0aGlzLmFzUFgobmFtZSk7 CisgICAgICAgICAgICAgICAgdmFsID0gb3AodGhpcy5hc1BYKG5hbWUpLCB0 aGlzLmFzUFgobmFtZSwgcGx1c1syXSArIHVuaXQpKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChpc05hTihhKSB8fCBpc05hTih2YWwpKSB7 CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYXRyW25hbWVdID0gdmFsOworICAgICAgICAgICAgdGhpcy5h dHRyKGF0cik7CisgICAgICAgIH0KKyAgICB9KSgtMTApOworICAgIGV2ZS5v bigic25hcC51dGlsLmVxdWFsIiwgZnVuY3Rpb24gKG5hbWUsIGIpIHsKKyAg ICAgICAgdmFyIEEsIEIsIGEgPSBTdHIodGhpcy5hdHRyKG5hbWUpIHx8ICIi KSwKKyAgICAgICAgICAgIGVsID0gdGhpcywKKyAgICAgICAgICAgIGJwbHVz ID0gU3RyKGIpLm1hdGNoKHJlQWRkb24pOworICAgICAgICBpZiAoYnBsdXMp IHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICB2YXIg dW5pdCA9IGJwbHVzWzNdIHx8ICIiLAorICAgICAgICAgICAgICAgIGFVbml0 ID0gYS5tYXRjaChyZVVuaXQpLAorICAgICAgICAgICAgICAgIG9wID0gb3Bl cmF0b3JzW2JwbHVzWzFdXTsKKyAgICAgICAgICAgIGlmIChhVW5pdCAmJiBh VW5pdCA9PSB1bml0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg ICAgICAgICAgICAgICAgICAgZnJvbTogcGFyc2VGbG9hdChhKSwKKyAgICAg ICAgICAgICAgICAgICAgdG86IG9wKHBhcnNlRmxvYXQoYSksICticGx1c1sy XSksCisgICAgICAgICAgICAgICAgICAgIGY6IGdldFVuaXQoYVVuaXQpCisg ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgYSA9IHRoaXMuYXNQWChuYW1lKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICBmcm9tOiBhLAor ICAgICAgICAgICAgICAgICAgICB0bzogb3AoYSwgdGhpcy5hc1BYKG5hbWUs IGJwbHVzWzJdICsgdW5pdCkpLAorICAgICAgICAgICAgICAgICAgICBmOiBn ZXROdW1iZXIKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfSkoLTEwKTsKK30pOworLy8gQ29weXJpZ2h0IChj KSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBv ZiB0aGUgTGljZW5zZSBhdAorLy8gCisvLyBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vIAorLy8gVW5sZXNzIHJlcXVp cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n LCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhP VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZv ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z IGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFw LnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2Is IEZyYWdtZW50KSB7CisgICAgdmFyIHByb3RvID0gUGFwZXIucHJvdG90eXBl LAorICAgICAgICBpcyA9IFNuYXAuaXM7CisgICAgLypcCisgICAgICogUGFw ZXIucmVjdAorICAgICBbIG1ldGhvZCBdCisgICAgICoKKyAgICAgKiBEcmF3 cyBhIHJlY3RhbmdsZQorICAgICAqKgorICAgICAtIHggKG51bWJlcikgeCBj b29yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIKKyAgICAgLSB5IChu dW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyCisg ICAgIC0gd2lkdGggKG51bWJlcikgd2lkdGgKKyAgICAgLSBoZWlnaHQgKG51 bWJlcikgaGVpZ2h0CisgICAgIC0gcnggKG51bWJlcikgI29wdGlvbmFsIGhv cml6b250YWwgcmFkaXVzIGZvciByb3VuZGVkIGNvcm5lcnMsIGRlZmF1bHQg aXMgMAorICAgICAtIHJ5IChudW1iZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCBy YWRpdXMgZm9yIHJvdW5kZWQgY29ybmVycywgZGVmYXVsdCBpcyByeCBvciAw CisgICAgID0gKG9iamVjdCkgdGhlIGByZWN0YCBlbGVtZW50CisgICAgICoq CisgICAgID4gVXNhZ2UKKyAgICAgfCAvLyByZWd1bGFyIHJlY3RhbmdsZQor ICAgICB8IHZhciBjID0gcGFwZXIucmVjdCgxMCwgMTAsIDUwLCA1MCk7Cisg ICAgIHwgLy8gcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzCisgICAg IHwgdmFyIGMgPSBwYXBlci5yZWN0KDQwLCA0MCwgNTAsIDUwLCAxMCk7Cisg ICAgXCovCisgICAgcHJvdG8ucmVjdCA9IGZ1bmN0aW9uICh4LCB5LCB3LCBo LCByeCwgcnkpIHsKKyAgICAgICAgdmFyIGF0dHI7CisgICAgICAgIGlmIChy eSA9PSBudWxsKSB7CisgICAgICAgICAgICByeSA9IHJ4OworICAgICAgICB9 CisgICAgICAgIGlmIChpcyh4LCAib2JqZWN0IikgJiYgeCA9PSAiW29iamVj dCBPYmplY3RdIikgeworICAgICAgICAgICAgYXR0ciA9IHg7CisgICAgICAg IH0gZWxzZSBpZiAoeCAhPSBudWxsKSB7CisgICAgICAgICAgICBhdHRyID0g eworICAgICAgICAgICAgICAgIHg6IHgsCisgICAgICAgICAgICAgICAgeTog eSwKKyAgICAgICAgICAgICAgICB3aWR0aDogdywKKyAgICAgICAgICAgICAg ICBoZWlnaHQ6IGgKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAo cnggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0dHIucnggPSByeDsK KyAgICAgICAgICAgICAgICBhdHRyLnJ5ID0gcnk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWwoInJlY3QiLCBh dHRyKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLmNpcmNsZQor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRHJhd3MgYSBjaXJj bGUKKyAgICAgKioKKyAgICAgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBv ZiB0aGUgY2VudHJlCisgICAgIC0geSAobnVtYmVyKSB5IGNvb3JkaW5hdGUg b2YgdGhlIGNlbnRyZQorICAgICAtIHIgKG51bWJlcikgcmFkaXVzCisgICAg ID0gKG9iamVjdCkgdGhlIGBjaXJjbGVgIGVsZW1lbnQKKyAgICAgKioKKyAg ICAgPiBVc2FnZQorICAgICB8IHZhciBjID0gcGFwZXIuY2lyY2xlKDUwLCA1 MCwgNDApOworICAgIFwqLworICAgIHByb3RvLmNpcmNsZSA9IGZ1bmN0aW9u IChjeCwgY3ksIHIpIHsKKyAgICAgICAgdmFyIGF0dHI7CisgICAgICAgIGlm IChpcyhjeCwgIm9iamVjdCIpICYmIGN4ID09ICJbb2JqZWN0IE9iamVjdF0i KSB7CisgICAgICAgICAgICBhdHRyID0gY3g7CisgICAgICAgIH0gZWxzZSBp ZiAoY3ggIT0gbnVsbCkgeworICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAg ICAgICAgICAgICBjeDogY3gsCisgICAgICAgICAgICAgICAgY3k6IGN5LAor ICAgICAgICAgICAgICAgIHI6IHIKKyAgICAgICAgICAgIH07CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWwoImNpcmNsZSIsIGF0dHIpOwor ICAgIH07CisKKyAgICB2YXIgcHJlbG9hZCA9IChmdW5jdGlvbiAoKSB7Cisg ICAgICAgIGZ1bmN0aW9uIG9uZXJyb3IoKSB7CisgICAgICAgICAgICB0aGlz LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzcmMsIGYpIHsKKyAgICAgICAgICAg IHZhciBpbWcgPSBnbG9iLmRvYy5jcmVhdGVFbGVtZW50KCJpbWciKSwKKyAg ICAgICAgICAgICAgICBib2R5ID0gZ2xvYi5kb2MuYm9keTsKKyAgICAgICAg ICAgIGltZy5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOmFic29sdXRlO2xl ZnQ6LTk5OTllbTt0b3A6LTk5OTllbSI7CisgICAgICAgICAgICBpbWcub25s b2FkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIGYuY2FsbChp bWcpOworICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBpbWcub25lcnJv ciA9IG51bGw7CisgICAgICAgICAgICAgICAgYm9keS5yZW1vdmVDaGlsZChp bWcpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGltZy5vbmVycm9y ID0gb25lcnJvcjsKKyAgICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoaW1n KTsKKyAgICAgICAgICAgIGltZy5zcmMgPSBzcmM7CisgICAgICAgIH07Cisg ICAgfSgpKTsKKworICAgIC8qXAorICAgICAqIFBhcGVyLmltYWdlCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBQbGFjZXMgYW4gaW1hZ2Ug b24gdGhlIHN1cmZhY2UKKyAgICAgKioKKyAgICAgLSBzcmMgKHN0cmluZykg VVJJIG9mIHRoZSBzb3VyY2UgaW1hZ2UKKyAgICAgLSB4IChudW1iZXIpIHgg b2Zmc2V0IHBvc2l0aW9uCisgICAgIC0geSAobnVtYmVyKSB5IG9mZnNldCBw b3NpdGlvbgorICAgICAtIHdpZHRoIChudW1iZXIpIHdpZHRoIG9mIHRoZSBp bWFnZQorICAgICAtIGhlaWdodCAobnVtYmVyKSBoZWlnaHQgb2YgdGhlIGlt YWdlCisgICAgID0gKG9iamVjdCkgdGhlIGBpbWFnZWAgZWxlbWVudAorICAg ICAqIG9yCisgICAgID0gKG9iamVjdCkgU25hcCBlbGVtZW50IG9iamVjdCB3 aXRoIHR5cGUgYGltYWdlYAorICAgICAqKgorICAgICA+IFVzYWdlCisgICAg IHwgdmFyIGMgPSBwYXBlci5pbWFnZSgiYXBwbGUucG5nIiwgMTAsIDEwLCA4 MCwgODApOworICAgIFwqLworICAgIHByb3RvLmltYWdlID0gZnVuY3Rpb24g KHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICB2YXIgZWwg PSB0aGlzLmVsKCJpbWFnZSIpOworICAgICAgICBpZiAoaXMoc3JjLCAib2Jq ZWN0IikgJiYgInNyYyIgaW4gc3JjKSB7CisgICAgICAgICAgICBlbC5hdHRy KHNyYyk7CisgICAgICAgIH0gZWxzZSBpZiAoc3JjICE9IG51bGwpIHsKKyAg ICAgICAgICAgIHZhciBzZXQgPSB7CisgICAgICAgICAgICAgICAgInhsaW5r OmhyZWYiOiBzcmMsCisgICAgICAgICAgICAgICAgcHJlc2VydmVBc3BlY3RS YXRpbzogIm5vbmUiCisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYg KHggIT0gbnVsbCAmJiB5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBz ZXQueCA9IHg7CisgICAgICAgICAgICAgICAgc2V0LnkgPSB5OworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKHdpZHRoICE9IG51bGwgJiYgaGVp Z2h0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzZXQud2lkdGggPSB3 aWR0aDsKKyAgICAgICAgICAgICAgICBzZXQuaGVpZ2h0ID0gaGVpZ2h0Owor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmVsb2Fk KHNyYywgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgICAgICBTbmFw Ll8uJChlbC5ub2RlLCB7CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0 aDogdGhpcy5vZmZzZXRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg IGhlaWdodDogdGhpcy5vZmZzZXRIZWlnaHQKKyAgICAgICAgICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBTbmFwLl8uJChlbC5ub2RlLCBzZXQpOworICAgICAgICB9 CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9OworICAgIC8qXAorICAgICAq IFBhcGVyLmVsbGlwc2UKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIERyYXdzIGFuIGVsbGlwc2UKKyAgICAgKioKKyAgICAgLSB4IChudW1i ZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgY2VudHJlCisgICAgIC0geSAobnVt YmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRyZQorICAgICAtIHJ4IChu dW1iZXIpIGhvcml6b250YWwgcmFkaXVzCisgICAgIC0gcnkgKG51bWJlcikg dmVydGljYWwgcmFkaXVzCisgICAgID0gKG9iamVjdCkgdGhlIGBlbGxpcHNl YCBlbGVtZW50CisgICAgICoqCisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIg YyA9IHBhcGVyLmVsbGlwc2UoNTAsIDUwLCA0MCwgMjApOworICAgIFwqLwor ICAgIHByb3RvLmVsbGlwc2UgPSBmdW5jdGlvbiAoY3gsIGN5LCByeCwgcnkp IHsKKyAgICAgICAgdmFyIGF0dHI7CisgICAgICAgIGlmIChpcyhjeCwgIm9i amVjdCIpICYmIGN4ID09ICJbb2JqZWN0IE9iamVjdF0iKSB7CisgICAgICAg ICAgICBhdHRyID0gY3g7CisgICAgICAgIH0gZWxzZSBpZiAoY3ggIT0gbnVs bCkgeworICAgICAgICAgICAgYXR0ciA9eworICAgICAgICAgICAgICAgIGN4 OiBjeCwKKyAgICAgICAgICAgICAgICBjeTogY3ksCisgICAgICAgICAgICAg ICAgcng6IHJ4LAorICAgICAgICAgICAgICAgIHJ5OiByeQorICAgICAgICAg ICAgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgiZWxs aXBzZSIsIGF0dHIpOworICAgIH07CisgICAgLy8gU0lFUlJBIFBhcGVyLnBh dGgoKTogVW5jbGVhciBmcm9tIHRoZSBsaW5rIHdoYXQgYSBDYXRtdWxsLVJv bSBjdXJ2ZXRvIGlzLCBhbmQgd2h5IGl0IHdvdWxkIG1ha2UgbGlmZSBhbnkg ZWFzaWVyLgorICAgIC8qXAorICAgICAqIFBhcGVyLnBhdGgKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBgPHBhdGg+YCBl bGVtZW50IHVzaW5nIHRoZSBnaXZlbiBzdHJpbmcgYXMgdGhlIHBhdGgncyBk ZWZpbml0aW9uCisgICAgIC0gcGF0aFN0cmluZyAoc3RyaW5nKSAjb3B0aW9u YWwgcGF0aCBzdHJpbmcgaW4gU1ZHIGZvcm1hdAorICAgICAqIFBhdGggc3Ry aW5nIGNvbnNpc3RzIG9mIG9uZS1sZXR0ZXIgY29tbWFuZHMsIGZvbGxvd2Vk IGJ5IGNvbW1hIHNlcHJhcmF0ZWQgYXJndW1lbnRzIGluIG51bWVyaWNhbCBm b3JtLiBFeGFtcGxlOgorICAgICB8ICJNMTAsMjBMMzAsNDAiCisgICAgICog VGhpcyBleGFtcGxlIGZlYXR1cmVzIHR3byBjb21tYW5kczogYE1gLCB3aXRo IGFyZ3VtZW50cyBgKDEwLCAyMClgIGFuZCBgTGAgd2l0aCBhcmd1bWVudHMg YCgzMCwgNDApYC4gVXBwZXJjYXNlIGxldHRlciBjb21tYW5kcyBleHByZXNz IGNvb3JkaW5hdGVzIGluIGFic29sdXRlIHRlcm1zLCB3aGlsZSBsb3dlcmNh c2UgY29tbWFuZHMgZXhwcmVzcyB0aGVtIGluIHJlbGF0aXZlIHRlcm1zIGZy b20gdGhlIG1vc3QgcmVjZW50bHkgZGVjbGFyZWQgY29vcmRpbmF0ZXMuCisg ICAgICoKKyAgICAgIyA8cD5IZXJlIGlzIHNob3J0IGxpc3Qgb2YgY29tbWFu ZHMgYXZhaWxhYmxlLCBmb3IgbW9yZSBkZXRhaWxzIHNlZSA8YSBocmVmPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvcGF0aHMuaHRtbCNQYXRoRGF0YSIg dGl0bGU9IkRldGFpbHMgb2YgYSBwYXRoJ3MgZGF0YSBhdHRyaWJ1dGUncyBm b3JtYXQgYXJlIGRlc2NyaWJlZCBpbiB0aGUgU1ZHIHNwZWNpZmljYXRpb24u Ij5TVkcgcGF0aCBzdHJpbmcgZm9ybWF0PC9hPiBvciA8YSBocmVmPSJodHRw czovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TVkcvVHV0b3JpYWwvUGF0 aHMiPmFydGljbGUgYWJvdXQgcGF0aCBzdHJpbmdzIGF0IE1ETjwvYT4uPC9w PgorICAgICAjIDx0YWJsZT48dGhlYWQ+PHRyPjx0aD5Db21tYW5kPC90aD48 dGg+TmFtZTwvdGg+PHRoPlBhcmFtZXRlcnM8L3RoPjwvdHI+PC90aGVhZD48 dGJvZHk+CisgICAgICMgPHRyPjx0ZD5NPC90ZD48dGQ+bW92ZXRvPC90ZD48 dGQ+KHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+WjwvdGQ+PHRk PmNsb3NlcGF0aDwvdGQ+PHRkPihub25lKTwvdGQ+PC90cj4KKyAgICAgIyA8 dHI+PHRkPkw8L3RkPjx0ZD5saW5ldG88L3RkPjx0ZD4oeCB5KSs8L3RkPjwv dHI+CisgICAgICMgPHRyPjx0ZD5IPC90ZD48dGQ+aG9yaXpvbnRhbCBsaW5l dG88L3RkPjx0ZD54KzwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPlY8L3Rk Pjx0ZD52ZXJ0aWNhbCBsaW5ldG88L3RkPjx0ZD55KzwvdGQ+PC90cj4KKyAg ICAgIyA8dHI+PHRkPkM8L3RkPjx0ZD5jdXJ2ZXRvPC90ZD48dGQ+KHgxIHkx IHgyIHkyIHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+UzwvdGQ+ PHRkPnNtb290aCBjdXJ2ZXRvPC90ZD48dGQ+KHgyIHkyIHggeSkrPC90ZD48 L3RyPgorICAgICAjIDx0cj48dGQ+UTwvdGQ+PHRkPnF1YWRyYXRpYyBCw6l6 aWVyIGN1cnZldG88L3RkPjx0ZD4oeDEgeTEgeCB5KSs8L3RkPjwvdHI+Cisg ICAgICMgPHRyPjx0ZD5UPC90ZD48dGQ+c21vb3RoIHF1YWRyYXRpYyBCw6l6 aWVyIGN1cnZldG88L3RkPjx0ZD4oeCB5KSs8L3RkPjwvdHI+CisgICAgICMg PHRyPjx0ZD5BPC90ZD48dGQ+ZWxsaXB0aWNhbCBhcmM8L3RkPjx0ZD4ocngg cnkgeC1heGlzLXJvdGF0aW9uIGxhcmdlLWFyYy1mbGFnIHN3ZWVwLWZsYWcg eCB5KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5SPC90ZD48dGQ+PGEg aHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXRtdWxs4oCT Um9tX3NwbGluZSNDYXRtdWxsLkUyLjgwLjkzUm9tX3NwbGluZSI+Q2F0bXVs bC1Sb20gY3VydmV0bzwvYT4qPC90ZD48dGQ+eDEgeTEgKHggeSkrPC90ZD48 L3RyPjwvdGJvZHk+PC90YWJsZT4KKyAgICAgKiAqIF9DYXRtdWxsLVJvbSBj dXJ2ZXRvXyBpcyBhIG5vdCBzdGFuZGFyZCBTVkcgY29tbWFuZCBhbmQgYWRk ZWQgdG8gbWFrZSBsaWZlIGVhc2llci4KKyAgICAgKiBOb3RlOiB0aGVyZSBp cyBhIHNwZWNpYWwgY2FzZSB3aGVuIGEgcGF0aCBjb25zaXN0cyBvZiBvbmx5 IHRocmVlIGNvbW1hbmRzOiBgTTEwLDEwUuKApnpgLiBJbiB0aGlzIGNhc2Ug dGhlIHBhdGggY29ubmVjdHMgYmFjayB0byBpdHMgc3RhcnRpbmcgcG9pbnQu CisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgYyA9IHBhcGVyLnBhdGgoIk0x MCAxMEw5MCA5MCIpOworICAgICB8IC8vIGRyYXcgYSBkaWFnb25hbCBsaW5l OgorICAgICB8IC8vIG1vdmUgdG8gMTAsMTAsIGxpbmUgdG8gOTAsOTAKKyAg ICBcKi8KKyAgICBwcm90by5wYXRoID0gZnVuY3Rpb24gKGQpIHsKKyAgICAg ICAgdmFyIGF0dHI7CisgICAgICAgIGlmIChpcyhkLCAib2JqZWN0IikgJiYg IWlzKGQsICJhcnJheSIpKSB7CisgICAgICAgICAgICBhdHRyID0gZDsKKyAg ICAgICAgfSBlbHNlIGlmIChkKSB7CisgICAgICAgICAgICBhdHRyID0ge2Q6 IGR9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJwYXRo IiwgYXR0cik7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5nCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgZ3Jv dXAgZWxlbWVudAorICAgICAqKgorICAgICAtIHZhcmFyZ3MgKOKApikgI29w dGlvbmFsIGVsZW1lbnRzIHRvIG5lc3Qgd2l0aGluIHRoZSBncm91cAorICAg ICA9IChvYmplY3QpIHRoZSBgZ2AgZWxlbWVudAorICAgICAqKgorICAgICA+ IFVzYWdlCisgICAgIHwgdmFyIGMxID0gcGFwZXIuY2lyY2xlKCksCisgICAg IHwgICAgIGMyID0gcGFwZXIucmVjdCgpLAorICAgICB8ICAgICBnID0gcGFw ZXIuZyhjMiwgYzEpOyAvLyBub3RlIHRoYXQgdGhlIG9yZGVyIG9mIGVsZW1l bnRzIGlzIGRpZmZlcmVudAorICAgICAqIG9yCisgICAgIHwgdmFyIGMxID0g cGFwZXIuY2lyY2xlKCksCisgICAgIHwgICAgIGMyID0gcGFwZXIucmVjdCgp LAorICAgICB8ICAgICBnID0gcGFwZXIuZygpOworICAgICB8IGcuYWRkKGMy LCBjMSk7CisgICAgXCovCisgICAgLypcCisgICAgICogUGFwZXIuZ3JvdXAK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNlZSBAUGFwZXIu ZworICAgIFwqLworICAgIHByb3RvLmdyb3VwID0gcHJvdG8uZyA9IGZ1bmN0 aW9uIChmaXJzdCkgeworICAgICAgICB2YXIgYXR0ciwKKyAgICAgICAgICAg IGVsID0gdGhpcy5lbCgiZyIpOworICAgICAgICBpZiAoYXJndW1lbnRzLmxl bmd0aCA9PSAxICYmIGZpcnN0ICYmICFmaXJzdC50eXBlKSB7CisgICAgICAg ICAgICBlbC5hdHRyKGZpcnN0KTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1 bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBlbC5hZGQoQXJyYXkucHJv dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuIGVsOworICAgIH07CisgICAgLypcCisgICAgICog UGFwZXIuc3ZnCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBD cmVhdGVzIGEgbmVzdGVkIFNWRyBlbGVtZW50LgorICAgICAtIHggKG51bWJl cikgQG9wdGlvbmFsIFggb2YgdGhlIGVsZW1lbnQKKyAgICAgLSB5IChudW1i ZXIpIEBvcHRpb25hbCBZIG9mIHRoZSBlbGVtZW50CisgICAgIC0gd2lkdGgg KG51bWJlcikgQG9wdGlvbmFsIHdpZHRoIG9mIHRoZSBlbGVtZW50CisgICAg IC0gaGVpZ2h0IChudW1iZXIpIEBvcHRpb25hbCBoZWlnaHQgb2YgdGhlIGVs ZW1lbnQKKyAgICAgLSB2YnggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3gg WAorICAgICAtIHZieSAobnVtYmVyKSBAb3B0aW9uYWwgdmlld2JveCBZCisg ICAgIC0gdmJ3IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IHdpZHRoCisg ICAgIC0gdmJoIChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IGhlaWdodAor ICAgICAqKgorICAgICA9IChvYmplY3QpIHRoZSBgc3ZnYCBlbGVtZW50Cisg ICAgICoqCisgICAgXCovCisgICAgcHJvdG8uc3ZnID0gZnVuY3Rpb24gKHgs IHksIHdpZHRoLCBoZWlnaHQsIHZieCwgdmJ5LCB2YncsIHZiaCkgeworICAg ICAgICB2YXIgYXR0cnMgPSB7fTsKKyAgICAgICAgaWYgKGlzKHgsICJvYmpl Y3QiKSAmJiB5ID09IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHJzID0geDsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh4ICE9IG51bGwp IHsKKyAgICAgICAgICAgICAgICBhdHRycy54ID0geDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmICh5ICE9IG51bGwpIHsKKyAgICAgICAgICAg ICAgICBhdHRycy55ID0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICh3aWR0aCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0cnMu d2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm IChoZWlnaHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0dHJzLmhl aWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICh2YnggIT0gbnVsbCAmJiB2YnkgIT0gbnVsbCAmJiB2YncgIT0gbnVsbCAm JiB2YmggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0dHJzLnZpZXdC b3ggPSBbdmJ4LCB2YnksIHZidywgdmJoXTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgic3ZnIiwgYXR0cnMp OworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIubWFzaworICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogRXF1aXZhbGVudCBpbiBiZWhh dmlvdXIgdG8gQFBhcGVyLmcsIGV4Y2VwdCBpdOKAmXMgYSBtYXNrLgorICAg ICAqKgorICAgICA9IChvYmplY3QpIHRoZSBgbWFza2AgZWxlbWVudAorICAg ICAqKgorICAgIFwqLworICAgIHByb3RvLm1hc2sgPSBmdW5jdGlvbiAoZmly c3QpIHsKKyAgICAgICAgdmFyIGF0dHIsCisgICAgICAgICAgICBlbCA9IHRo aXMuZWwoIm1hc2siKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg PT0gMSAmJiBmaXJzdCAmJiAhZmlyc3QudHlwZSkgeworICAgICAgICAgICAg ZWwuYXR0cihmaXJzdCk7CisgICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRz Lmxlbmd0aCkgeworICAgICAgICAgICAgZWwuYWRkKEFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiBlbDsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVy LnB0cm4KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEVxdWl2 YWxlbnQgaW4gYmVoYXZpb3VyIHRvIEBQYXBlci5nLCBleGNlcHQgaXTigJlz IGEgcGF0dGVybi4KKyAgICAgLSB4IChudW1iZXIpIEBvcHRpb25hbCBYIG9m IHRoZSBlbGVtZW50CisgICAgIC0geSAobnVtYmVyKSBAb3B0aW9uYWwgWSBv ZiB0aGUgZWxlbWVudAorICAgICAtIHdpZHRoIChudW1iZXIpIEBvcHRpb25h bCB3aWR0aCBvZiB0aGUgZWxlbWVudAorICAgICAtIGhlaWdodCAobnVtYmVy KSBAb3B0aW9uYWwgaGVpZ2h0IG9mIHRoZSBlbGVtZW50CisgICAgIC0gdmJ4 IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IFgKKyAgICAgLSB2YnkgKG51 bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggWQorICAgICAtIHZidyAobnVtYmVy KSBAb3B0aW9uYWwgdmlld2JveCB3aWR0aAorICAgICAtIHZiaCAobnVtYmVy KSBAb3B0aW9uYWwgdmlld2JveCBoZWlnaHQKKyAgICAgKioKKyAgICAgPSAo b2JqZWN0KSB0aGUgYHBhdHRlcm5gIGVsZW1lbnQKKyAgICAgKioKKyAgICBc Ki8KKyAgICBwcm90by5wdHJuID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBo ZWlnaHQsIHZ4LCB2eSwgdncsIHZoKSB7CisgICAgICAgIGlmIChpcyh4LCAi b2JqZWN0IikpIHsKKyAgICAgICAgICAgIHZhciBhdHRyID0geDsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF0dHIgPSB7cGF0dGVyblVuaXRz OiAidXNlclNwYWNlT25Vc2UifTsKKyAgICAgICAgICAgIGlmICh4KSB7Cisg ICAgICAgICAgICAgICAgYXR0ci54ID0geDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmICh5KSB7CisgICAgICAgICAgICAgICAgYXR0ci55ID0g eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3aWR0aCAhPSBu dWxsKSB7CisgICAgICAgICAgICAgICAgYXR0ci53aWR0aCA9IHdpZHRoOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhlaWdodCAhPSBudWxs KSB7CisgICAgICAgICAgICAgICAgYXR0ci5oZWlnaHQgPSBoZWlnaHQ7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodnggIT0gbnVsbCAmJiB2 eSAhPSBudWxsICYmIHZ3ICE9IG51bGwgJiYgdmggIT0gbnVsbCkgeworICAg ICAgICAgICAgICAgIGF0dHIudmlld0JveCA9IFt2eCwgdnksIHZ3LCB2aF07 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF0dHIu dmlld0JveCA9IFt4IHx8IDAsIHkgfHwgMCwgd2lkdGggfHwgMCwgaGVpZ2h0 IHx8IDBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzLmVsKCJwYXR0ZXJuIiwgYXR0cik7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBQYXBlci51c2UKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIENyZWF0ZXMgYSA8dXNlPiBlbGVtZW50LgorICAgICAtIGlk IChzdHJpbmcpIEBvcHRpb25hbCBpZCBvZiBlbGVtZW50IHRvIGxpbmsKKyAg ICAgKiBvcgorICAgICAtIGlkIChFbGVtZW50KSBAb3B0aW9uYWwgZWxlbWVu dCB0byBsaW5rCisgICAgICoqCisgICAgID0gKG9iamVjdCkgdGhlIGB1c2Vg IGVsZW1lbnQKKyAgICAgKioKKyAgICBcKi8KKyAgICBwcm90by51c2UgPSBm dW5jdGlvbiAoaWQpIHsKKyAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKKyAg ICAgICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAg ICAgICAgICAgICBpZiAoIWlkLmF0dHIoImlkIikpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWQuYXR0cih7aWQ6IFNuYXAuXy5pZChpZCl9KTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWQgPSBpZC5hdHRyKCJp ZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFN0cmluZyhp ZCkuY2hhckF0KCkgPT0gIiMiKSB7CisgICAgICAgICAgICAgICAgaWQgPSBp ZC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy ZXR1cm4gdGhpcy5lbCgidXNlIiwgeyJ4bGluazpocmVmIjogIiMiICsgaWR9 KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBFbGVt ZW50LnByb3RvdHlwZS51c2UuY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAg IH07CisgICAgLypcCisgICAgICogUGFwZXIuc3ltYm9sCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgPHN5bWJvbD4gZWxl bWVudC4KKyAgICAgLSB2YnggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3gg WAorICAgICAtIHZieSAobnVtYmVyKSBAb3B0aW9uYWwgdmlld2JveCBZCisg ICAgIC0gdmJ3IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IHdpZHRoCisg ICAgIC0gdmJoIChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IGhlaWdodAor ICAgICA9IChvYmplY3QpIHRoZSBgc3ltYm9sYCBlbGVtZW50CisgICAgICoq CisgICAgXCovCisgICAgcHJvdG8uc3ltYm9sID0gZnVuY3Rpb24gKHZ4LCB2 eSwgdncsIHZoKSB7CisgICAgICAgIHZhciBhdHRyID0ge307CisgICAgICAg IGlmICh2eCAhPSBudWxsICYmIHZ5ICE9IG51bGwgJiYgdncgIT0gbnVsbCAm JiB2aCAhPSBudWxsKSB7CisgICAgICAgICAgICBhdHRyLnZpZXdCb3ggPSBb dngsIHZ5LCB2dywgdmhdOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu IHRoaXMuZWwoInN5bWJvbCIsIGF0dHIpOworICAgIH07CisgICAgLypcCisg ICAgICogUGFwZXIudGV4dAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogRHJhd3MgYSB0ZXh0IHN0cmluZworICAgICAqKgorICAgICAtIHgg KG51bWJlcikgeCBjb29yZGluYXRlIHBvc2l0aW9uCisgICAgIC0geSAobnVt YmVyKSB5IGNvb3JkaW5hdGUgcG9zaXRpb24KKyAgICAgLSB0ZXh0IChzdHJp bmd8YXJyYXkpIFRoZSB0ZXh0IHN0cmluZyB0byBkcmF3IG9yIGFycmF5IG9m IHN0cmluZ3MgdG8gbmVzdCB3aXRoaW4gc2VwYXJhdGUgYDx0c3Bhbj5gIGVs ZW1lbnRzCisgICAgID0gKG9iamVjdCkgdGhlIGB0ZXh0YCBlbGVtZW50Cisg ICAgICoqCisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgdDEgPSBwYXBlci50 ZXh0KDUwLCA1MCwgIlNuYXAiKTsKKyAgICAgfCB2YXIgdDIgPSBwYXBlci50 ZXh0KDUwLCA1MCwgWyJTIiwibiIsImEiLCJwIl0pOworICAgICB8IC8vIFRl eHQgcGF0aCB1c2FnZQorICAgICB8IHQxLmF0dHIoe3RleHRwYXRoOiAiTTEw LDEwTDEwMCwxMDAifSk7CisgICAgIHwgLy8gb3IKKyAgICAgfCB2YXIgcHRo ID0gcGFwZXIucGF0aCgiTTEwLDEwTDEwMCwxMDAiKTsKKyAgICAgfCB0MS5h dHRyKHt0ZXh0cGF0aDogcHRofSk7CisgICAgXCovCisgICAgcHJvdG8udGV4 dCA9IGZ1bmN0aW9uICh4LCB5LCB0ZXh0KSB7CisgICAgICAgIHZhciBhdHRy ID0ge307CisgICAgICAgIGlmIChpcyh4LCAib2JqZWN0IikpIHsKKyAgICAg ICAgICAgIGF0dHIgPSB4OworICAgICAgICB9IGVsc2UgaWYgKHggIT0gbnVs bCkgeworICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAgICAgICAgICB4 OiB4LAorICAgICAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICAgICAg dGV4dDogdGV4dCB8fCAiIgorICAgICAgICAgICAgfTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gdGhpcy5lbCgidGV4dCIsIGF0dHIpOworICAgIH07 CisgICAgLypcCisgICAgICogUGFwZXIubGluZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogRHJhd3MgYSBsaW5lCisgICAgICoqCisgICAg IC0geDEgKG51bWJlcikgeCBjb29yZGluYXRlIHBvc2l0aW9uIG9mIHRoZSBz dGFydAorICAgICAtIHkxIChudW1iZXIpIHkgY29vcmRpbmF0ZSBwb3NpdGlv biBvZiB0aGUgc3RhcnQKKyAgICAgLSB4MiAobnVtYmVyKSB4IGNvb3JkaW5h dGUgcG9zaXRpb24gb2YgdGhlIGVuZAorICAgICAtIHkyIChudW1iZXIpIHkg Y29vcmRpbmF0ZSBwb3NpdGlvbiBvZiB0aGUgZW5kCisgICAgID0gKG9iamVj dCkgdGhlIGBsaW5lYCBlbGVtZW50CisgICAgICoqCisgICAgID4gVXNhZ2UK KyAgICAgfCB2YXIgdDEgPSBwYXBlci5saW5lKDUwLCA1MCwgMTAwLCAxMDAp OworICAgIFwqLworICAgIHByb3RvLmxpbmUgPSBmdW5jdGlvbiAoeDEsIHkx LCB4MiwgeTIpIHsKKyAgICAgICAgdmFyIGF0dHIgPSB7fTsKKyAgICAgICAg aWYgKGlzKHgxLCAib2JqZWN0IikpIHsKKyAgICAgICAgICAgIGF0dHIgPSB4 MTsKKyAgICAgICAgfSBlbHNlIGlmICh4MSAhPSBudWxsKSB7CisgICAgICAg ICAgICBhdHRyID0geworICAgICAgICAgICAgICAgIHgxOiB4MSwKKyAgICAg ICAgICAgICAgICB4MjogeDIsCisgICAgICAgICAgICAgICAgeTE6IHkxLAor ICAgICAgICAgICAgICAgIHkyOiB5MgorICAgICAgICAgICAgfTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgibGluZSIsIGF0dHIpOwor ICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIucG9seWxpbmUKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIERyYXdzIGEgcG9seWxpbmUK KyAgICAgKioKKyAgICAgLSBwb2ludHMgKGFycmF5KSBhcnJheSBvZiBwb2lu dHMKKyAgICAgKiBvcgorICAgICAtIHZhcmFyZ3MgKOKApikgcG9pbnRzCisg ICAgID0gKG9iamVjdCkgdGhlIGBwb2x5bGluZWAgZWxlbWVudAorICAgICAq KgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIHAxID0gcGFwZXIucG9seWxp bmUoWzEwLCAxMCwgMTAwLCAxMDBdKTsKKyAgICAgfCB2YXIgcDIgPSBwYXBl ci5wb2x5bGluZSgxMCwgMTAsIDEwMCwgMTAwKTsKKyAgICBcKi8KKyAgICBw cm90by5wb2x5bGluZSA9IGZ1bmN0aW9uIChwb2ludHMpIHsKKyAgICAgICAg aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBwb2lu dHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAp OworICAgICAgICB9CisgICAgICAgIHZhciBhdHRyID0ge307CisgICAgICAg IGlmIChpcyhwb2ludHMsICJvYmplY3QiKSAmJiAhaXMocG9pbnRzLCAiYXJy YXkiKSkgeworICAgICAgICAgICAgYXR0ciA9IHBvaW50czsKKyAgICAgICAg fSBlbHNlIGlmIChwb2ludHMgIT0gbnVsbCkgeworICAgICAgICAgICAgYXR0 ciA9IHtwb2ludHM6IHBvaW50c307CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIHRoaXMuZWwoInBvbHlsaW5lIiwgYXR0cik7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBQYXBlci5wb2x5Z29uCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBEcmF3cyBhIHBvbHlnb24uIFNlZSBAUGFwZXIucG9s eWxpbmUKKyAgICBcKi8KKyAgICBwcm90by5wb2x5Z29uID0gZnVuY3Rpb24g KHBvaW50cykgeworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEp IHsKKyAgICAgICAgICAgIHBvaW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGlj ZS5jYWxsKGFyZ3VtZW50cywgMCk7CisgICAgICAgIH0KKyAgICAgICAgdmFy IGF0dHIgPSB7fTsKKyAgICAgICAgaWYgKGlzKHBvaW50cywgIm9iamVjdCIp ICYmICFpcyhwb2ludHMsICJhcnJheSIpKSB7CisgICAgICAgICAgICBhdHRy ID0gcG9pbnRzOworICAgICAgICB9IGVsc2UgaWYgKHBvaW50cyAhPSBudWxs KSB7CisgICAgICAgICAgICBhdHRyID0ge3BvaW50czogcG9pbnRzfTsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgicG9seWdvbiIsIGF0 dHIpOworICAgIH07CisgICAgLy8gZ3JhZGllbnRzCisgICAgKGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgdmFyICQgPSBTbmFwLl8uJDsKKyAgICAgICAgLy8g Z3JhZGllbnRzJyBoZWxwZXJzCisgICAgICAgIGZ1bmN0aW9uIEdzdG9wcygp IHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEFsbCgic3RvcCIp OworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIEdhZGRTdG9wKGNvbG9y LCBvZmZzZXQpIHsKKyAgICAgICAgICAgIHZhciBzdG9wID0gJCgic3RvcCIp LAorICAgICAgICAgICAgICAgIGF0dHIgPSB7CisgICAgICAgICAgICAgICAg ICAgIG9mZnNldDogK29mZnNldCArICIlIgorICAgICAgICAgICAgICAgIH07 CisgICAgICAgICAgICBjb2xvciA9IFNuYXAuY29sb3IoY29sb3IpOworICAg ICAgICAgICAgYXR0clsic3RvcC1jb2xvciJdID0gY29sb3IuaGV4OworICAg ICAgICAgICAgaWYgKGNvbG9yLm9wYWNpdHkgPCAxKSB7CisgICAgICAgICAg ICAgICAgYXR0clsic3RvcC1vcGFjaXR5Il0gPSBjb2xvci5vcGFjaXR5Owor ICAgICAgICAgICAgfQorICAgICAgICAgICAgJChzdG9wLCBhdHRyKTsKKyAg ICAgICAgICAgIHRoaXMubm9kZS5hcHBlbmRDaGlsZChzdG9wKTsKKyAgICAg ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIGZ1bmN0 aW9uIEdnZXRCQm94KCkgeworICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9 PSAibGluZWFyR3JhZGllbnQiKSB7CisgICAgICAgICAgICAgICAgdmFyIHgx ID0gJCh0aGlzLm5vZGUsICJ4MSIpIHx8IDAsCisgICAgICAgICAgICAgICAg ICAgIHgyID0gJCh0aGlzLm5vZGUsICJ4MiIpIHx8IDEsCisgICAgICAgICAg ICAgICAgICAgIHkxID0gJCh0aGlzLm5vZGUsICJ5MSIpIHx8IDAsCisgICAg ICAgICAgICAgICAgICAgIHkyID0gJCh0aGlzLm5vZGUsICJ5MiIpIHx8IDA7 CisgICAgICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goeDEsIHkxLCBt YXRoLmFicyh4MiAtIHgxKSwgbWF0aC5hYnMoeTIgLSB5MSkpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgY3ggPSB0aGlz Lm5vZGUuY3ggfHwgLjUsCisgICAgICAgICAgICAgICAgICAgIGN5ID0gdGhp cy5ub2RlLmN5IHx8IC41LAorICAgICAgICAgICAgICAgICAgICByID0gdGhp cy5ub2RlLnIgfHwgMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU25hcC5f LmJveChjeCAtIHIsIGN5IC0gciwgciAqIDIsIHIgKiAyKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBncmFkaWVudChk ZWZzLCBzdHIpIHsKKyAgICAgICAgICAgIHZhciBncmFkID0gZXZlKCJzbmFw LnV0aWwuZ3JhZC5wYXJzZSIsIG51bGwsIHN0cikuZmlyc3REZWZpbmVkKCks CisgICAgICAgICAgICAgICAgZWw7CisgICAgICAgICAgICBpZiAoIWdyYWQp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGdyYWQucGFyYW1zLnVuc2hpZnQoZGVmcyk7Cisg ICAgICAgICAgICBpZiAoZ3JhZC50eXBlLnRvTG93ZXJDYXNlKCkgPT0gImwi KSB7CisgICAgICAgICAgICAgICAgZWwgPSBncmFkaWVudExpbmVhci5hcHBs eSgwLCBncmFkLnBhcmFtcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGVsID0gZ3JhZGllbnRSYWRpYWwuYXBwbHkoMCwgZ3Jh ZC5wYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGdy YWQudHlwZSAhPSBncmFkLnR5cGUudG9Mb3dlckNhc2UoKSkgeworICAgICAg ICAgICAgICAgICQoZWwubm9kZSwgeworICAgICAgICAgICAgICAgICAgICBn cmFkaWVudFVuaXRzOiAidXNlclNwYWNlT25Vc2UiCisgICAgICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc3RvcHMg PSBncmFkLnN0b3BzLAorICAgICAgICAgICAgICAgIGxlbiA9IHN0b3BzLmxl bmd0aCwKKyAgICAgICAgICAgICAgICBzdGFydCA9IDAsCisgICAgICAgICAg ICAgICAgaiA9IDA7CisgICAgICAgICAgICBmdW5jdGlvbiBzZWVkKGksIGVu ZCkgeworICAgICAgICAgICAgICAgIHZhciBzdGVwID0gKGVuZCAtIHN0YXJ0 KSAvIChpIC0gaik7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IGo7 IGsgPCBpOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc3RvcHNba10u b2Zmc2V0ID0gKygrc3RhcnQgKyBzdGVwICogKGsgLSBqKSkudG9GaXhlZCgy KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaiA9IGk7 CisgICAgICAgICAgICAgICAgc3RhcnQgPSBlbmQ7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg PSAwOyBpIDwgbGVuOyBpKyspIGlmICgib2Zmc2V0IiBpbiBzdG9wc1tpXSkg eworICAgICAgICAgICAgICAgIHNlZWQoaSwgc3RvcHNbaV0ub2Zmc2V0KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0b3BzW2xlbl0ub2Zmc2V0 ID0gc3RvcHNbbGVuXS5vZmZzZXQgfHwgMTAwOworICAgICAgICAgICAgc2Vl ZChsZW4sIHN0b3BzW2xlbl0ub2Zmc2V0KTsKKyAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPD0gbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIg c3RvcCA9IHN0b3BzW2ldOworICAgICAgICAgICAgICAgIGVsLmFkZFN0b3Ao c3RvcC5jb2xvciwgc3RvcC5vZmZzZXQpOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmV0dXJuIGVsOworICAgICAgICB9CisgICAgICAgIGZ1bmN0 aW9uIGdyYWRpZW50TGluZWFyKGRlZnMsIHgxLCB5MSwgeDIsIHkyKSB7Cisg ICAgICAgICAgICB2YXIgZWwgPSBTbmFwLl8ubWFrZSgibGluZWFyR3JhZGll bnQiLCBkZWZzKTsKKyAgICAgICAgICAgIGVsLnN0b3BzID0gR3N0b3BzOwor ICAgICAgICAgICAgZWwuYWRkU3RvcCA9IEdhZGRTdG9wOworICAgICAgICAg ICAgZWwuZ2V0QkJveCA9IEdnZXRCQm94OworICAgICAgICAgICAgaWYgKHgx ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAkKGVsLm5vZGUsIHsKKyAg ICAgICAgICAgICAgICAgICAgeDE6IHgxLAorICAgICAgICAgICAgICAgICAg ICB5MTogeTEsCisgICAgICAgICAgICAgICAgICAgIHgyOiB4MiwKKyAgICAg ICAgICAgICAgICAgICAgeTI6IHkyCisgICAgICAgICAgICAgICAgfSk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZWw7CisgICAgICAg IH0KKyAgICAgICAgZnVuY3Rpb24gZ3JhZGllbnRSYWRpYWwoZGVmcywgY3gs IGN5LCByLCBmeCwgZnkpIHsKKyAgICAgICAgICAgIHZhciBlbCA9IFNuYXAu Xy5tYWtlKCJyYWRpYWxHcmFkaWVudCIsIGRlZnMpOworICAgICAgICAgICAg ZWwuc3RvcHMgPSBHc3RvcHM7CisgICAgICAgICAgICBlbC5hZGRTdG9wID0g R2FkZFN0b3A7CisgICAgICAgICAgICBlbC5nZXRCQm94ID0gR2dldEJCb3g7 CisgICAgICAgICAgICBpZiAoY3ggIT0gbnVsbCkgeworICAgICAgICAgICAg ICAgICQoZWwubm9kZSwgeworICAgICAgICAgICAgICAgICAgICBjeDogY3gs CisgICAgICAgICAgICAgICAgICAgIGN5OiBjeSwKKyAgICAgICAgICAgICAg ICAgICAgcjogcgorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKGZ4ICE9IG51bGwgJiYgZnkgIT0gbnVsbCkg eworICAgICAgICAgICAgICAgICQoZWwubm9kZSwgeworICAgICAgICAgICAg ICAgICAgICBmeDogZngsCisgICAgICAgICAgICAgICAgICAgIGZ5OiBmeQor ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuIGVsOworICAgICAgICB9CisgICAgICAgIC8qXAorICAgICAg ICAgKiBQYXBlci5ncmFkaWVudAorICAgICAgICAgWyBtZXRob2QgXQorICAg ICAgICAgKioKKyAgICAgICAgICogQ3JlYXRlcyBhIGdyYWRpZW50IGVsZW1l bnQKKyAgICAgICAgICoqCisgICAgICAgICAtIGdyYWRpZW50IChzdHJpbmcp IGdyYWRpZW50IGRlc2NyaXB0b3IKKyAgICAgICAgID4gR3JhZGllbnQgRGVz Y3JpcHRvcgorICAgICAgICAgKiBUaGUgZ3JhZGllbnQgZGVzY3JpcHRvciBp cyBhbiBleHByZXNzaW9uIGZvcm1hdHRlZCBhcworICAgICAgICAgKiBmb2xs b3dzOiBgPHR5cGU+KDxjb29yZHM+KTxjb2xvcnM+YC4gIFRoZSBgPHR5cGU+ YCBjYW4gYmUKKyAgICAgICAgICogZWl0aGVyIGxpbmVhciBvciByYWRpYWwu ICBUaGUgdXBwZXJjYXNlIGBMYCBvciBgUmAgbGV0dGVycworICAgICAgICAg KiBpbmRpY2F0ZSBhYnNvbHV0ZSBjb29yZGluYXRlcyBvZmZzZXQgZnJvbSB0 aGUgU1ZHIHN1cmZhY2UuCisgICAgICAgICAqIExvd2VyY2FzZSBgbGAgb3Ig YHJgIGxldHRlcnMgaW5kaWNhdGUgY29vcmRpbmF0ZXMKKyAgICAgICAgICog Y2FsY3VsYXRlZCByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCB0byB3aGljaCB0 aGUgZ3JhZGllbnQgaXMKKyAgICAgICAgICogYXBwbGllZC4gIENvb3JkaW5h dGVzIHNwZWNpZnkgYSBsaW5lYXIgZ3JhZGllbnQgdmVjdG9yIGFzCisgICAg ICAgICAqIGB4MWAsIGB5MWAsIGB4MmAsIGB5MmAsIG9yIGEgcmFkaWFsIGdy YWRpZW50IGFzIGBjeGAsIGBjeWAsCisgICAgICAgICAqIGByYCBhbmQgb3B0 aW9uYWwgYGZ4YCwgYGZ5YCBzcGVjaWZ5aW5nIGEgZm9jYWwgcG9pbnQgYXdh eQorICAgICAgICAgKiBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZS4g U3BlY2lmeSBgPGNvbG9ycz5gIGFzIGEgbGlzdAorICAgICAgICAgKiBvZiBk YXNoLXNlcGFyYXRlZCBDU1MgY29sb3IgdmFsdWVzLiAgRWFjaCBjb2xvciBt YXkgYmUKKyAgICAgICAgICogZm9sbG93ZWQgYnkgYSBjdXN0b20gb2Zmc2V0 IHZhbHVlLCBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uCisgICAgICAgICAqIGNo YXJhY3Rlci4KKyAgICAgICAgID4gRXhhbXBsZXMKKyAgICAgICAgICogTGlu ZWFyIGdyYWRpZW50LCByZWxhdGl2ZSBmcm9tIHRvcC1sZWZ0IGNvcm5lciB0 byBib3R0b20tcmlnaHQKKyAgICAgICAgICogY29ybmVyLCBmcm9tIGJsYWNr IHRocm91Z2ggcmVkIHRvIHdoaXRlOgorICAgICAgICAgfCB2YXIgZyA9IHBh cGVyLmdyYWRpZW50KCJsKDAsIDAsIDEsIDEpIzAwMC0jZjAwLSNmZmYiKTsK KyAgICAgICAgICogTGluZWFyIGdyYWRpZW50LCBhYnNvbHV0ZSBmcm9tICgw LCAwKSB0byAoMTAwLCAxMDApLCBmcm9tIGJsYWNrCisgICAgICAgICAqIHRo cm91Z2ggcmVkIGF0IDI1JSB0byB3aGl0ZToKKyAgICAgICAgIHwgdmFyIGcg PSBwYXBlci5ncmFkaWVudCgiTCgwLCAwLCAxMDAsIDEwMCkjMDAwLSNmMDA6 MjUtI2ZmZiIpOworICAgICAgICAgKiBSYWRpYWwgZ3JhZGllbnQsIHJlbGF0 aXZlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgZWxlbWVudCB3aXRoIHJhZGl1 cworICAgICAgICAgKiBoYWxmIHRoZSB3aWR0aCwgZnJvbSBibGFjayB0byB3 aGl0ZToKKyAgICAgICAgIHwgdmFyIGcgPSBwYXBlci5ncmFkaWVudCgicigw LjUsIDAuNSwgMC41KSMwMDAtI2ZmZiIpOworICAgICAgICAgKiBUbyBhcHBs eSB0aGUgZ3JhZGllbnQ6CisgICAgICAgICB8IHBhcGVyLmNpcmNsZSg1MCwg NTAsIDQwKS5hdHRyKHsKKyAgICAgICAgIHwgICAgIGZpbGw6IGcKKyAgICAg ICAgIHwgfSk7CisgICAgICAgICA9IChvYmplY3QpIHRoZSBgZ3JhZGllbnRg IGVsZW1lbnQKKyAgICAgICAgXCovCisgICAgICAgIHByb3RvLmdyYWRpZW50 ID0gZnVuY3Rpb24gKHN0cikgeworICAgICAgICAgICAgcmV0dXJuIGdyYWRp ZW50KHRoaXMuZGVmcywgc3RyKTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJv dG8uZ3JhZGllbnRMaW5lYXIgPSBmdW5jdGlvbiAoeDEsIHkxLCB4MiwgeTIp IHsKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudExpbmVhcih0aGlzLmRl ZnMsIHgxLCB5MSwgeDIsIHkyKTsKKyAgICAgICAgfTsKKyAgICAgICAgcHJv dG8uZ3JhZGllbnRSYWRpYWwgPSBmdW5jdGlvbiAoY3gsIGN5LCByLCBmeCwg ZnkpIHsKKyAgICAgICAgICAgIHJldHVybiBncmFkaWVudFJhZGlhbCh0aGlz LmRlZnMsIGN4LCBjeSwgciwgZngsIGZ5KTsKKyAgICAgICAgfTsKKyAgICAg ICAgLypcCisgICAgICAgICAqIFBhcGVyLnRvU3RyaW5nCisgICAgICAgICBb IG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBSZXR1cm5zIFNW RyBjb2RlIGZvciB0aGUgQFBhcGVyCisgICAgICAgICA9IChzdHJpbmcpIFNW RyBjb2RlIGZvciB0aGUgQFBhcGVyCisgICAgICAgIFwqLworICAgICAgICBw cm90by50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZh ciBkb2MgPSB0aGlzLm5vZGUub3duZXJEb2N1bWVudCwKKyAgICAgICAgICAg ICAgICBmID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAg ICAgICAgICAgICBkID0gZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLAorICAg ICAgICAgICAgICAgIHN2ZyA9IHRoaXMubm9kZS5jbG9uZU5vZGUodHJ1ZSks CisgICAgICAgICAgICAgICAgcmVzOworICAgICAgICAgICAgZi5hcHBlbmRD aGlsZChkKTsKKyAgICAgICAgICAgIGQuYXBwZW5kQ2hpbGQoc3ZnKTsKKyAg ICAgICAgICAgIFNuYXAuXy4kKHN2Zywge3htbG5zOiAiaHR0cDovL3d3dy53 My5vcmcvMjAwMC9zdmcifSk7CisgICAgICAgICAgICByZXMgPSBkLmlubmVy SFRNTDsKKyAgICAgICAgICAgIGYucmVtb3ZlQ2hpbGQoZi5maXJzdENoaWxk KTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH07CisgICAg ICAgIC8qXAorICAgICAgICAgKiBQYXBlci50b0RhdGFVUkwKKyAgICAgICAg IFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMg U1ZHIGNvZGUgZm9yIHRoZSBAUGFwZXIgYXMgRGF0YSBVUkkgc3RyaW5nLgor ICAgICAgICAgPSAoc3RyaW5nKSBEYXRhIFVSSSBzdHJpbmcKKyAgICAgICAg XCovCisgICAgICAgIHByb3RvLnRvRGF0YVVSTCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmJ0b2EpIHsKKyAg ICAgICAgICAgICAgICByZXR1cm4gImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNl NjQsIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMp KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIC8qXAor ICAgICAgICAgKiBQYXBlci5jbGVhcgorICAgICAgICAgWyBtZXRob2QgXQor ICAgICAgICAgKioKKyAgICAgICAgICogUmVtb3ZlcyBhbGwgY2hpbGQgbm9k ZXMgb2YgdGhlIHBhcGVyLCBleGNlcHQgPGRlZnM+LgorICAgICAgICBcKi8K KyAgICAgICAgcHJvdG8uY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg ICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZS5maXJzdENoaWxkLAorICAgICAg ICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB3aGlsZSAobm9kZSkgewor ICAgICAgICAgICAgICAgIG5leHQgPSBub2RlLm5leHRTaWJsaW5nOworICAg ICAgICAgICAgICAgIGlmIChub2RlLnRhZ05hbWUgIT0gImRlZnMiKSB7Cisg ICAgICAgICAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGls ZChub2RlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgICAgICBwcm90by5jbGVhci5jYWxsKHtub2RlOiBub2RlfSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0 OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0oKSk7Cit9KTsK KworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jw b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBMaWNlbnNl ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg IkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBt YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gCisvLyBo dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v IAorLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQg dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT IiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8g U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292 ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIg dGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxl bWVudCwgUGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgZWxwcm90byA9IEVsZW1l bnQucHJvdG90eXBlLAorICAgICAgICBpcyA9IFNuYXAuaXMsCisgICAgICAg IGNsb25lID0gU25hcC5fLmNsb25lLAorICAgICAgICBoYXMgPSAiaGFzT3du UHJvcGVydHkiLAorICAgICAgICBwMnMgPSAvLD8oW2Etel0pLD8vZ2ksCisg ICAgICAgIHRvRmxvYXQgPSBwYXJzZUZsb2F0LAorICAgICAgICBtYXRoID0g TWF0aCwKKyAgICAgICAgUEkgPSBtYXRoLlBJLAorICAgICAgICBtbWluID0g bWF0aC5taW4sCisgICAgICAgIG1tYXggPSBtYXRoLm1heCwKKyAgICAgICAg cG93ID0gbWF0aC5wb3csCisgICAgICAgIGFicyA9IG1hdGguYWJzOworICAg IGZ1bmN0aW9uIHBhdGhzKHBzKSB7CisgICAgICAgIHZhciBwID0gcGF0aHMu cHMgPSBwYXRocy5wcyB8fCB7fTsKKyAgICAgICAgaWYgKHBbcHNdKSB7Cisg ICAgICAgICAgICBwW3BzXS5zbGVlcCA9IDEwMDsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHBbcHNdID0geworICAgICAgICAgICAgICAgIHNs ZWVwOiAxMDAKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAg c2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBmb3IgKHZh ciBrZXkgaW4gcCkgaWYgKHBbaGFzXShrZXkpICYmIGtleSAhPSBwcykgewor ICAgICAgICAgICAgICAgIHBba2V5XS5zbGVlcC0tOworICAgICAgICAgICAg ICAgICFwW2tleV0uc2xlZXAgJiYgZGVsZXRlIHBba2V5XTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBwW3BzXTsKKyAg ICB9CisgICAgZnVuY3Rpb24gYm94KHgsIHksIHdpZHRoLCBoZWlnaHQpIHsK KyAgICAgICAgaWYgKHggPT0gbnVsbCkgeworICAgICAgICAgICAgeCA9IHkg PSB3aWR0aCA9IGhlaWdodCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHkgPT0gbnVsbCkgeworICAgICAgICAgICAgeSA9IHgueTsKKyAgICAgICAg ICAgIHdpZHRoID0geC53aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IHgu aGVpZ2h0OworICAgICAgICAgICAgeCA9IHgueDsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAg IHk6IHksCisgICAgICAgICAgICB3aWR0aDogd2lkdGgsCisgICAgICAgICAg ICB3OiB3aWR0aCwKKyAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LAorICAg ICAgICAgICAgaDogaGVpZ2h0LAorICAgICAgICAgICAgeDI6IHggKyB3aWR0 aCwKKyAgICAgICAgICAgIHkyOiB5ICsgaGVpZ2h0LAorICAgICAgICAgICAg Y3g6IHggKyB3aWR0aCAvIDIsCisgICAgICAgICAgICBjeTogeSArIGhlaWdo dCAvIDIsCisgICAgICAgICAgICByMTogbWF0aC5taW4od2lkdGgsIGhlaWdo dCkgLyAyLAorICAgICAgICAgICAgcjI6IG1hdGgubWF4KHdpZHRoLCBoZWln aHQpIC8gMiwKKyAgICAgICAgICAgIHIwOiBtYXRoLnNxcnQod2lkdGggKiB3 aWR0aCArIGhlaWdodCAqIGhlaWdodCkgLyAyLAorICAgICAgICAgICAgcGF0 aDogcmVjdFBhdGgoeCwgeSwgd2lkdGgsIGhlaWdodCksCisgICAgICAgICAg ICB2YjogW3gsIHksIHdpZHRoLCBoZWlnaHRdLmpvaW4oIiAiKQorICAgICAg ICB9OworICAgIH0KKyAgICBmdW5jdGlvbiB0b1N0cmluZygpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMuam9pbigiLCIpLnJlcGxhY2UocDJzLCAiJDEiKTsK KyAgICB9CisgICAgZnVuY3Rpb24gcGF0aENsb25lKHBhdGhBcnJheSkgewor ICAgICAgICB2YXIgcmVzID0gY2xvbmUocGF0aEFycmF5KTsKKyAgICAgICAg cmVzLnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHJldHVybiByZXM7 CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFBvaW50QXRTZWdtZW50TGVuZ3Ro KHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4LCBjMnksIHAyeCwgcDJ5LCBsZW5n dGgpIHsKKyAgICAgICAgaWYgKGxlbmd0aCA9PSBudWxsKSB7CisgICAgICAg ICAgICByZXR1cm4gYmV6bGVuKHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4LCBj MnksIHAyeCwgcDJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IHJldHVybiBmaW5kRG90c0F0U2VnbWVudChwMXgsIHAxeSwgYzF4LCBjMXks IGMyeCwgYzJ5LCBwMngsIHAyeSwKKyAgICAgICAgICAgICAgICBnZXRUb3RM ZW4ocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnksIGxl bmd0aCkpOworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIGdldExl bmd0aEZhY3RvcnkoaXN0b3RhbCwgc3VicGF0aCkgeworICAgICAgICBmdW5j dGlvbiBPKHZhbCkgeworICAgICAgICAgICAgcmV0dXJuICsoK3ZhbCkudG9G aXhlZCgzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU25hcC5fLmNh Y2hlcihmdW5jdGlvbiAocGF0aCwgbGVuZ3RoLCBvbmx5c3RhcnQpIHsKKyAg ICAgICAgICAgIGlmIChwYXRoIGluc3RhbmNlb2YgRWxlbWVudCkgeworICAg ICAgICAgICAgICAgIHBhdGggPSBwYXRoLmF0dHIoImQiKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHBhdGggPSBwYXRoMmN1cnZlKHBhdGgpOwor ICAgICAgICAgICAgdmFyIHgsIHksIHAsIGwsIHNwID0gIiIsIHN1YnBhdGhz ID0ge30sIHBvaW50LAorICAgICAgICAgICAgICAgIGxlbiA9IDA7CisgICAg ICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoLmxlbmd0aDsgaSA8 IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBwID0gcGF0aFtpXTsKKyAg ICAgICAgICAgICAgICBpZiAocFswXSA9PSAiTSIpIHsKKyAgICAgICAgICAg ICAgICAgICAgeCA9ICtwWzFdOworICAgICAgICAgICAgICAgICAgICB5ID0g K3BbMl07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgbCA9IGdldFBvaW50QXRTZWdtZW50TGVuZ3RoKHgsIHksIHBb MV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0sIHBbNl0pOworICAgICAgICAg ICAgICAgICAgICBpZiAobGVuICsgbCA+IGxlbmd0aCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHN1YnBhdGggJiYgIXN1YnBhdGhzLnN0YXJ0 KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnZXRQ b2ludEF0U2VnbWVudExlbmd0aCh4LCB5LCBwWzFdLCBwWzJdLCBwWzNdLCBw WzRdLCBwWzVdLCBwWzZdLCBsZW5ndGggLSBsZW4pOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwICs9IFsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkMiICsgTyhwb2ludC5zdGFydC54KSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTyhwb2ludC5zdGFydC55KSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwb2ludC5tLngpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50Lm0ueSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQueCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQueSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChvbmx5c3RhcnQpIHtyZXR1cm4gc3A7fQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhdGhzLnN0YXJ0ID0g c3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AgPSBbCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNIiArIE8ocG9pbnQueCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQueSkg KyAiQyIgKyBPKHBvaW50Lm4ueCksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE8ocG9pbnQubi55KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTyhwb2ludC5lbmQueCksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE8ocG9pbnQuZW5kLnkpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPKHBbNV0pLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPKHBbNl0pCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXS5qb2luKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGVuICs9IGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9 ICtwWzVdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSArcFs2 XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgIGlmICghaXN0b3RhbCAmJiAhc3VicGF0aCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBvaW50ID0gZ2V0UG9pbnRBdFNlZ21lbnRMZW5n dGgoeCwgeSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwg bGVuZ3RoIC0gbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGVuICs9 IGw7CisgICAgICAgICAgICAgICAgICAgIHggPSArcFs1XTsKKyAgICAgICAg ICAgICAgICAgICAgeSA9ICtwWzZdOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBzcCArPSBwLnNoaWZ0KCkgKyBwOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgc3VicGF0aHMuZW5kID0gc3A7CisgICAgICAg ICAgICBwb2ludCA9IGlzdG90YWwgPyBsZW4gOiBzdWJwYXRoID8gc3VicGF0 aHMgOiBmaW5kRG90c0F0U2VnbWVudCh4LCB5LCBwWzBdLCBwWzFdLCBwWzJd LCBwWzNdLCBwWzRdLCBwWzVdLCAxKTsKKyAgICAgICAgICAgIHJldHVybiBw b2ludDsKKyAgICAgICAgfSwgbnVsbCwgU25hcC5fLmNsb25lKTsKKyAgICB9 CisgICAgdmFyIGdldFRvdGFsTGVuZ3RoID0gZ2V0TGVuZ3RoRmFjdG9yeSgx KSwKKyAgICAgICAgZ2V0UG9pbnRBdExlbmd0aCA9IGdldExlbmd0aEZhY3Rv cnkoKSwKKyAgICAgICAgZ2V0U3VicGF0aHNBdExlbmd0aCA9IGdldExlbmd0 aEZhY3RvcnkoMCwgMSk7CisgICAgZnVuY3Rpb24gZmluZERvdHNBdFNlZ21l bnQocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnksIHQp IHsKKyAgICAgICAgdmFyIHQxID0gMSAtIHQsCisgICAgICAgICAgICB0MTMg PSBwb3codDEsIDMpLAorICAgICAgICAgICAgdDEyID0gcG93KHQxLCAyKSwK KyAgICAgICAgICAgIHQyID0gdCAqIHQsCisgICAgICAgICAgICB0MyA9IHQy ICogdCwKKyAgICAgICAgICAgIHggPSB0MTMgKiBwMXggKyB0MTIgKiAzICog dCAqIGMxeCArIHQxICogMyAqIHQgKiB0ICogYzJ4ICsgdDMgKiBwMngsCisg ICAgICAgICAgICB5ID0gdDEzICogcDF5ICsgdDEyICogMyAqIHQgKiBjMXkg KyB0MSAqIDMgKiB0ICogdCAqIGMyeSArIHQzICogcDJ5LAorICAgICAgICAg ICAgbXggPSBwMXggKyAyICogdCAqIChjMXggLSBwMXgpICsgdDIgKiAoYzJ4 IC0gMiAqIGMxeCArIHAxeCksCisgICAgICAgICAgICBteSA9IHAxeSArIDIg KiB0ICogKGMxeSAtIHAxeSkgKyB0MiAqIChjMnkgLSAyICogYzF5ICsgcDF5 KSwKKyAgICAgICAgICAgIG54ID0gYzF4ICsgMiAqIHQgKiAoYzJ4IC0gYzF4 KSArIHQyICogKHAyeCAtIDIgKiBjMnggKyBjMXgpLAorICAgICAgICAgICAg bnkgPSBjMXkgKyAyICogdCAqIChjMnkgLSBjMXkpICsgdDIgKiAocDJ5IC0g MiAqIGMyeSArIGMxeSksCisgICAgICAgICAgICBheCA9IHQxICogcDF4ICsg dCAqIGMxeCwKKyAgICAgICAgICAgIGF5ID0gdDEgKiBwMXkgKyB0ICogYzF5 LAorICAgICAgICAgICAgY3ggPSB0MSAqIGMyeCArIHQgKiBwMngsCisgICAg ICAgICAgICBjeSA9IHQxICogYzJ5ICsgdCAqIHAyeSwKKyAgICAgICAgICAg IGFscGhhID0gKDkwIC0gbWF0aC5hdGFuMihteCAtIG54LCBteSAtIG55KSAq IDE4MCAvIFBJKTsKKyAgICAgICAgLy8gKG14ID4gbnggfHwgbXkgPCBueSkg JiYgKGFscGhhICs9IDE4MCk7CisgICAgICAgIHJldHVybiB7CisgICAgICAg ICAgICB4OiB4LAorICAgICAgICAgICAgeTogeSwKKyAgICAgICAgICAgIG06 IHt4OiBteCwgeTogbXl9LAorICAgICAgICAgICAgbjoge3g6IG54LCB5OiBu eX0sCisgICAgICAgICAgICBzdGFydDoge3g6IGF4LCB5OiBheX0sCisgICAg ICAgICAgICBlbmQ6IHt4OiBjeCwgeTogY3l9LAorICAgICAgICAgICAgYWxw aGE6IGFscGhhCisgICAgICAgIH07CisgICAgfQorICAgIGZ1bmN0aW9uIGJl emllckJCb3gocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBw MnkpIHsKKyAgICAgICAgaWYgKCFTbmFwLmlzKHAxeCwgImFycmF5IikpIHsK KyAgICAgICAgICAgIHAxeCA9IFtwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwg YzJ5LCBwMngsIHAyeV07CisgICAgICAgIH0KKyAgICAgICAgdmFyIGJib3gg PSBjdXJ2ZURpbS5hcHBseShudWxsLCBwMXgpOworICAgICAgICByZXR1cm4g Ym94KAorICAgICAgICAgICAgYmJveC5taW4ueCwKKyAgICAgICAgICAgIGJi b3gubWluLnksCisgICAgICAgICAgICBiYm94Lm1heC54IC0gYmJveC5taW4u eCwKKyAgICAgICAgICAgIGJib3gubWF4LnkgLSBiYm94Lm1pbi55CisgICAg ICAgICk7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzUG9pbnRJbnNpZGVCQm94 KGJib3gsIHgsIHkpIHsKKyAgICAgICAgcmV0dXJuICB4ID49IGJib3gueCAm JgorICAgICAgICAgICAgICAgIHggPD0gYmJveC54ICsgYmJveC53aWR0aCAm JgorICAgICAgICAgICAgICAgIHkgPj0gYmJveC55ICYmCisgICAgICAgICAg ICAgICAgeSA8PSBiYm94LnkgKyBiYm94LmhlaWdodDsKKyAgICB9CisgICAg ZnVuY3Rpb24gaXNCQm94SW50ZXJzZWN0KGJib3gxLCBiYm94MikgeworICAg ICAgICBiYm94MSA9IGJveChiYm94MSk7CisgICAgICAgIGJib3gyID0gYm94 KGJib3gyKTsKKyAgICAgICAgcmV0dXJuIGlzUG9pbnRJbnNpZGVCQm94KGJi b3gyLCBiYm94MS54LCBiYm94MS55KQorICAgICAgICAgICAgfHwgaXNQb2lu dEluc2lkZUJCb3goYmJveDIsIGJib3gxLngyLCBiYm94MS55KQorICAgICAg ICAgICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDIsIGJib3gxLngsIGJi b3gxLnkyKQorICAgICAgICAgICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJv eDIsIGJib3gxLngyLCBiYm94MS55MikKKyAgICAgICAgICAgIHx8IGlzUG9p bnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55KQorICAgICAg ICAgICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngyLCBi Ym94Mi55KQorICAgICAgICAgICAgfHwgaXNQb2ludEluc2lkZUJCb3goYmJv eDEsIGJib3gyLngsIGJib3gyLnkyKQorICAgICAgICAgICAgfHwgaXNQb2lu dEluc2lkZUJCb3goYmJveDEsIGJib3gyLngyLCBiYm94Mi55MikKKyAgICAg ICAgICAgIHx8IChiYm94MS54IDwgYmJveDIueDIgJiYgYmJveDEueCA+IGJi b3gyLngKKyAgICAgICAgICAgICAgICB8fCBiYm94Mi54IDwgYmJveDEueDIg JiYgYmJveDIueCA+IGJib3gxLngpCisgICAgICAgICAgICAmJiAoYmJveDEu eSA8IGJib3gyLnkyICYmIGJib3gxLnkgPiBiYm94Mi55CisgICAgICAgICAg ICAgICAgfHwgYmJveDIueSA8IGJib3gxLnkyICYmIGJib3gyLnkgPiBiYm94 MS55KTsKKyAgICB9CisgICAgZnVuY3Rpb24gYmFzZTModCwgcDEsIHAyLCBw MywgcDQpIHsKKyAgICAgICAgdmFyIHQxID0gLTMgKiBwMSArIDkgKiBwMiAt IDkgKiBwMyArIDMgKiBwNCwKKyAgICAgICAgICAgIHQyID0gdCAqIHQxICsg NiAqIHAxIC0gMTIgKiBwMiArIDYgKiBwMzsKKyAgICAgICAgcmV0dXJuIHQg KiB0MiAtIDMgKiBwMSArIDMgKiBwMjsKKyAgICB9CisgICAgZnVuY3Rpb24g YmV6bGVuKHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgeikgewor ICAgICAgICBpZiAoeiA9PSBudWxsKSB7CisgICAgICAgICAgICB6ID0gMTsK KyAgICAgICAgfQorICAgICAgICB6ID0geiA+IDEgPyAxIDogeiA8IDAgPyAw IDogejsKKyAgICAgICAgdmFyIHoyID0geiAvIDIsCisgICAgICAgICAgICBu ID0gMTIsCisgICAgICAgICAgICBUdmFsdWVzID0gWy0uMTI1MiwuMTI1Miwt LjM2NzgsLjM2NzgsLS41ODczLC41ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEs LjkwNDEsLS45ODE2LC45ODE2XSwKKyAgICAgICAgICAgIEN2YWx1ZXMgPSBb MC4yNDkxLDAuMjQ5MSwwLjIzMzUsMC4yMzM1LDAuMjAzMiwwLjIwMzIsMC4x NjAxLDAuMTYwMSwwLjEwNjksMC4xMDY5LDAuMDQ3MiwwLjA0NzJdLAorICAg ICAgICAgICAgc3VtID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg PCBuOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBjdCA9IHoyICogVHZhbHVl c1tpXSArIHoyLAorICAgICAgICAgICAgICAgIHhiYXNlID0gYmFzZTMoY3Qs IHgxLCB4MiwgeDMsIHg0KSwKKyAgICAgICAgICAgICAgICB5YmFzZSA9IGJh c2UzKGN0LCB5MSwgeTIsIHkzLCB5NCksCisgICAgICAgICAgICAgICAgY29t YiA9IHhiYXNlICogeGJhc2UgKyB5YmFzZSAqIHliYXNlOworICAgICAgICAg ICAgc3VtICs9IEN2YWx1ZXNbaV0gKiBtYXRoLnNxcnQoY29tYik7CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIHoyICogc3VtOworICAgIH0KKyAgICBm dW5jdGlvbiBnZXRUb3RMZW4oeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQs IHk0LCBsbCkgeworICAgICAgICBpZiAobGwgPCAwIHx8IGJlemxlbih4MSwg eTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQpIDwgbGwpIHsKKyAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgdCA9IDEsCisg ICAgICAgICAgICBzdGVwID0gdCAvIDIsCisgICAgICAgICAgICB0MiA9IHQg LSBzdGVwLAorICAgICAgICAgICAgbCwKKyAgICAgICAgICAgIGUgPSAuMDE7 CisgICAgICAgIGwgPSBiZXpsZW4oeDEsIHkxLCB4MiwgeTIsIHgzLCB5Mywg eDQsIHk0LCB0Mik7CisgICAgICAgIHdoaWxlIChhYnMobCAtIGxsKSA+IGUp IHsKKyAgICAgICAgICAgIHN0ZXAgLz0gMjsKKyAgICAgICAgICAgIHQyICs9 IChsIDwgbGwgPyAxIDogLTEpICogc3RlcDsKKyAgICAgICAgICAgIGwgPSBi ZXpsZW4oeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCB0Mik7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHQyOworICAgIH0KKyAgICBmdW5j dGlvbiBpbnRlcnNlY3QoeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0 KSB7CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIG1tYXgoeDEsIHgyKSA8 IG1taW4oeDMsIHg0KSB8fAorICAgICAgICAgICAgbW1pbih4MSwgeDIpID4g bW1heCh4MywgeDQpIHx8CisgICAgICAgICAgICBtbWF4KHkxLCB5MikgPCBt bWluKHkzLCB5NCkgfHwKKyAgICAgICAgICAgIG1taW4oeTEsIHkyKSA+IG1t YXgoeTMsIHk0KQorICAgICAgICApIHsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgICAgICB2YXIgbnggPSAoeDEgKiB5MiAtIHkxICog eDIpICogKHgzIC0geDQpIC0gKHgxIC0geDIpICogKHgzICogeTQgLSB5MyAq IHg0KSwKKyAgICAgICAgICAgIG55ID0gKHgxICogeTIgLSB5MSAqIHgyKSAq ICh5MyAtIHk0KSAtICh5MSAtIHkyKSAqICh4MyAqIHk0IC0geTMgKiB4NCks CisgICAgICAgICAgICBkZW5vbWluYXRvciA9ICh4MSAtIHgyKSAqICh5MyAt IHk0KSAtICh5MSAtIHkyKSAqICh4MyAtIHg0KTsKKworICAgICAgICBpZiAo IWRlbm9taW5hdG9yKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg IH0KKyAgICAgICAgdmFyIHB4ID0gbnggLyBkZW5vbWluYXRvciwKKyAgICAg ICAgICAgIHB5ID0gbnkgLyBkZW5vbWluYXRvciwKKyAgICAgICAgICAgIHB4 MiA9ICtweC50b0ZpeGVkKDIpLAorICAgICAgICAgICAgcHkyID0gK3B5LnRv Rml4ZWQoMik7CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIHB4MiA8ICtt bWluKHgxLCB4MikudG9GaXhlZCgyKSB8fAorICAgICAgICAgICAgcHgyID4g K21tYXgoeDEsIHgyKS50b0ZpeGVkKDIpIHx8CisgICAgICAgICAgICBweDIg PCArbW1pbih4MywgeDQpLnRvRml4ZWQoMikgfHwKKyAgICAgICAgICAgIHB4 MiA+ICttbWF4KHgzLCB4NCkudG9GaXhlZCgyKSB8fAorICAgICAgICAgICAg cHkyIDwgK21taW4oeTEsIHkyKS50b0ZpeGVkKDIpIHx8CisgICAgICAgICAg ICBweTIgPiArbW1heCh5MSwgeTIpLnRvRml4ZWQoMikgfHwKKyAgICAgICAg ICAgIHB5MiA8ICttbWluKHkzLCB5NCkudG9GaXhlZCgyKSB8fAorICAgICAg ICAgICAgcHkyID4gK21tYXgoeTMsIHk0KS50b0ZpeGVkKDIpCisgICAgICAg ICkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IHJldHVybiB7eDogcHgsIHk6IHB5fTsKKyAgICB9CisgICAgZnVuY3Rpb24g aW50ZXIoYmV6MSwgYmV6MikgeworICAgICAgICByZXR1cm4gaW50ZXJIZWxw ZXIoYmV6MSwgYmV6Mik7CisgICAgfQorICAgIGZ1bmN0aW9uIGludGVyQ291 bnQoYmV6MSwgYmV6MikgeworICAgICAgICByZXR1cm4gaW50ZXJIZWxwZXIo YmV6MSwgYmV6MiwgMSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGludGVySGVs cGVyKGJlejEsIGJlejIsIGp1c3RDb3VudCkgeworICAgICAgICB2YXIgYmJv eDEgPSBiZXppZXJCQm94KGJlejEpLAorICAgICAgICAgICAgYmJveDIgPSBi ZXppZXJCQm94KGJlejIpOworICAgICAgICBpZiAoIWlzQkJveEludGVyc2Vj dChiYm94MSwgYmJveDIpKSB7CisgICAgICAgICAgICByZXR1cm4ganVzdENv dW50ID8gMCA6IFtdOworICAgICAgICB9CisgICAgICAgIHZhciBsMSA9IGJl emxlbi5hcHBseSgwLCBiZXoxKSwKKyAgICAgICAgICAgIGwyID0gYmV6bGVu LmFwcGx5KDAsIGJlejIpLAorICAgICAgICAgICAgbjEgPSB+fihsMSAvIDgp LAorICAgICAgICAgICAgbjIgPSB+fihsMiAvIDgpLAorICAgICAgICAgICAg ZG90czEgPSBbXSwKKyAgICAgICAgICAgIGRvdHMyID0gW10sCisgICAgICAg ICAgICB4eSA9IHt9LAorICAgICAgICAgICAgcmVzID0ganVzdENvdW50ID8g MCA6IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4xICsgMTsg aSsrKSB7CisgICAgICAgICAgICB2YXIgcCA9IGZpbmREb3RzQXRTZWdtZW50 LmFwcGx5KDAsIGJlejEuY29uY2F0KGkgLyBuMSkpOworICAgICAgICAgICAg ZG90czEucHVzaCh7eDogcC54LCB5OiBwLnksIHQ6IGkgLyBuMX0pOworICAg ICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuMiArIDE7IGkrKykg eworICAgICAgICAgICAgcCA9IGZpbmREb3RzQXRTZWdtZW50LmFwcGx5KDAs IGJlejIuY29uY2F0KGkgLyBuMikpOworICAgICAgICAgICAgZG90czIucHVz aCh7eDogcC54LCB5OiBwLnksIHQ6IGkgLyBuMn0pOworICAgICAgICB9Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBuMTsgaSsrKSB7CisgICAgICAgICAg ICBmb3IgKHZhciBqID0gMDsgaiA8IG4yOyBqKyspIHsKKyAgICAgICAgICAg ICAgICB2YXIgZGkgPSBkb3RzMVtpXSwKKyAgICAgICAgICAgICAgICAgICAg ZGkxID0gZG90czFbaSArIDFdLAorICAgICAgICAgICAgICAgICAgICBkaiA9 IGRvdHMyW2pdLAorICAgICAgICAgICAgICAgICAgICBkajEgPSBkb3RzMltq ICsgMV0sCisgICAgICAgICAgICAgICAgICAgIGNpID0gYWJzKGRpMS54IC0g ZGkueCkgPCAuMDAxID8gInkiIDogIngiLAorICAgICAgICAgICAgICAgICAg ICBjaiA9IGFicyhkajEueCAtIGRqLngpIDwgLjAwMSA/ICJ5IiA6ICJ4IiwK KyAgICAgICAgICAgICAgICAgICAgaXMgPSBpbnRlcnNlY3QoZGkueCwgZGku eSwgZGkxLngsIGRpMS55LCBkai54LCBkai55LCBkajEueCwgZGoxLnkpOwor ICAgICAgICAgICAgICAgIGlmIChpcykgeworICAgICAgICAgICAgICAgICAg ICBpZiAoeHlbaXMueC50b0ZpeGVkKDQpXSA9PSBpcy55LnRvRml4ZWQoNCkp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHh5W2lzLngu dG9GaXhlZCg0KV0gPSBpcy55LnRvRml4ZWQoNCk7CisgICAgICAgICAgICAg ICAgICAgIHZhciB0MSA9IGRpLnQgKyBhYnMoKGlzW2NpXSAtIGRpW2NpXSkg LyAoZGkxW2NpXSAtIGRpW2NpXSkpICogKGRpMS50IC0gZGkudCksCisgICAg ICAgICAgICAgICAgICAgICAgICB0MiA9IGRqLnQgKyBhYnMoKGlzW2NqXSAt IGRqW2NqXSkgLyAoZGoxW2NqXSAtIGRqW2NqXSkpICogKGRqMS50IC0gZGou dCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0MSA+PSAwICYmIHQxIDw9 IDEgJiYgdDIgPj0gMCAmJiB0MiA8PSAxKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpZiAoanVzdENvdW50KSB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVzKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogaXMueCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogaXMueSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdDE6IHQxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0MjogdDIKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzOwor ICAgIH0KKyAgICBmdW5jdGlvbiBwYXRoSW50ZXJzZWN0aW9uKHBhdGgxLCBw YXRoMikgeworICAgICAgICByZXR1cm4gaW50ZXJQYXRoSGVscGVyKHBhdGgx LCBwYXRoMik7CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGhJbnRlcnNlY3Rp b25OdW1iZXIocGF0aDEsIHBhdGgyKSB7CisgICAgICAgIHJldHVybiBpbnRl clBhdGhIZWxwZXIocGF0aDEsIHBhdGgyLCAxKTsKKyAgICB9CisgICAgZnVu Y3Rpb24gaW50ZXJQYXRoSGVscGVyKHBhdGgxLCBwYXRoMiwganVzdENvdW50 KSB7CisgICAgICAgIHBhdGgxID0gcGF0aDJjdXJ2ZShwYXRoMSk7CisgICAg ICAgIHBhdGgyID0gcGF0aDJjdXJ2ZShwYXRoMik7CisgICAgICAgIHZhciB4 MSwgeTEsIHgyLCB5MiwgeDFtLCB5MW0sIHgybSwgeTJtLCBiZXoxLCBiZXoy LAorICAgICAgICAgICAgcmVzID0ganVzdENvdW50ID8gMCA6IFtdOworICAg ICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoMS5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICB2YXIgcGkgPSBwYXRoMVtpXTsKKyAg ICAgICAgICAgIGlmIChwaVswXSA9PSAiTSIpIHsKKyAgICAgICAgICAgICAg ICB4MSA9IHgxbSA9IHBpWzFdOworICAgICAgICAgICAgICAgIHkxID0geTFt ID0gcGlbMl07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGlmIChwaVswXSA9PSAiQyIpIHsKKyAgICAgICAgICAgICAgICAgICAg YmV6MSA9IFt4MSwgeTFdLmNvbmNhdChwaS5zbGljZSgxKSk7CisgICAgICAg ICAgICAgICAgICAgIHgxID0gYmV6MVs2XTsKKyAgICAgICAgICAgICAgICAg ICAgeTEgPSBiZXoxWzddOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIGJlejEgPSBbeDEsIHkxLCB4MSwgeTEsIHgx bSwgeTFtLCB4MW0sIHkxbV07CisgICAgICAgICAgICAgICAgICAgIHgxID0g eDFtOworICAgICAgICAgICAgICAgICAgICB5MSA9IHkxbTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpq ID0gcGF0aDIubGVuZ3RoOyBqIDwgamo7IGorKykgeworICAgICAgICAgICAg ICAgICAgICB2YXIgcGogPSBwYXRoMltqXTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHBqWzBdID09ICJNIikgeworICAgICAgICAgICAgICAgICAgICAg ICAgeDIgPSB4Mm0gPSBwalsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHkyID0geTJtID0gcGpbMl07CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGpbMF0gPT0gIkMi KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6MiA9IFt4Miwg eTJdLmNvbmNhdChwai5zbGljZSgxKSk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgeDIgPSBiZXoyWzZdOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHkyID0gYmV6Mls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6MiA9 IFt4MiwgeTIsIHgyLCB5MiwgeDJtLCB5Mm0sIHgybSwgeTJtXTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB4MiA9IHgybTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB5MiA9IHkybTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRyID0g aW50ZXJIZWxwZXIoYmV6MSwgYmV6MiwganVzdENvdW50KTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChqdXN0Q291bnQpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXMgKz0gaW50cjsKKyAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yICh2YXIgayA9IDAsIGtrID0gaW50ci5sZW5ndGg7IGsgPCBrazsg aysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJb a10uc2VnbWVudDEgPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnRyW2tdLnNlZ21lbnQyID0gajsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50cltrXS5iZXoxID0gYmV6MTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50cltrXS5iZXoyID0gYmV6MjsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChpbnRyKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5jdGlvbiBpc1Bv aW50SW5zaWRlUGF0aChwYXRoLCB4LCB5KSB7CisgICAgICAgIHZhciBiYm94 ID0gcGF0aEJCb3gocGF0aCk7CisgICAgICAgIHJldHVybiBpc1BvaW50SW5z aWRlQkJveChiYm94LCB4LCB5KSAmJgorICAgICAgICAgICAgICAgaW50ZXJQ YXRoSGVscGVyKHBhdGgsIFtbIk0iLCB4LCB5XSwgWyJIIiwgYmJveC54MiAr IDEwXV0sIDEpICUgMiA9PSAxOworICAgIH0KKyAgICBmdW5jdGlvbiBwYXRo QkJveChwYXRoKSB7CisgICAgICAgIHZhciBwdGggPSBwYXRocyhwYXRoKTsK KyAgICAgICAgaWYgKHB0aC5iYm94KSB7CisgICAgICAgICAgICByZXR1cm4g Y2xvbmUocHRoLmJib3gpOworICAgICAgICB9CisgICAgICAgIGlmICghcGF0 aCkgeworICAgICAgICAgICAgcmV0dXJuIGJveCgpOworICAgICAgICB9Cisg ICAgICAgIHBhdGggPSBwYXRoMmN1cnZlKHBhdGgpOworICAgICAgICB2YXIg eCA9IDAsIAorICAgICAgICAgICAgeSA9IDAsCisgICAgICAgICAgICBYID0g W10sCisgICAgICAgICAgICBZID0gW10sCisgICAgICAgICAgICBwOworICAg ICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoLmxlbmd0aDsgaSA8IGlp OyBpKyspIHsKKyAgICAgICAgICAgIHAgPSBwYXRoW2ldOworICAgICAgICAg ICAgaWYgKHBbMF0gPT0gIk0iKSB7CisgICAgICAgICAgICAgICAgeCA9IHBb MV07CisgICAgICAgICAgICAgICAgeSA9IHBbMl07CisgICAgICAgICAgICAg ICAgWC5wdXNoKHgpOworICAgICAgICAgICAgICAgIFkucHVzaCh5KTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIGRpbSA9 IGN1cnZlRGltKHgsIHksIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0s IHBbNl0pOworICAgICAgICAgICAgICAgIFggPSBYLmNvbmNhdChkaW0ubWlu LngsIGRpbS5tYXgueCk7CisgICAgICAgICAgICAgICAgWSA9IFkuY29uY2F0 KGRpbS5taW4ueSwgZGltLm1heC55KTsKKyAgICAgICAgICAgICAgICB4ID0g cFs1XTsKKyAgICAgICAgICAgICAgICB5ID0gcFs2XTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICB2YXIgeG1pbiA9IG1taW4uYXBwbHko MCwgWCksCisgICAgICAgICAgICB5bWluID0gbW1pbi5hcHBseSgwLCBZKSwK KyAgICAgICAgICAgIHhtYXggPSBtbWF4LmFwcGx5KDAsIFgpLAorICAgICAg ICAgICAgeW1heCA9IG1tYXguYXBwbHkoMCwgWSksCisgICAgICAgICAgICBi YiA9IGJveCh4bWluLCB5bWluLCB4bWF4IC0geG1pbiwgeW1heCAtIHltaW4p OworICAgICAgICBwdGguYmJveCA9IGNsb25lKGJiKTsKKyAgICAgICAgcmV0 dXJuIGJiOworICAgIH0KKyAgICBmdW5jdGlvbiByZWN0UGF0aCh4LCB5LCB3 LCBoLCByKSB7CisgICAgICAgIGlmIChyKSB7CisgICAgICAgICAgICByZXR1 cm4gWworICAgICAgICAgICAgICAgIFsiTSIsICt4ICsgKCtyKSwgeV0sCisg ICAgICAgICAgICAgICAgWyJsIiwgdyAtIHIgKiAyLCAwXSwKKyAgICAgICAg ICAgICAgICBbImEiLCByLCByLCAwLCAwLCAxLCByLCByXSwKKyAgICAgICAg ICAgICAgICBbImwiLCAwLCBoIC0gciAqIDJdLAorICAgICAgICAgICAgICAg IFsiYSIsIHIsIHIsIDAsIDAsIDEsIC1yLCByXSwKKyAgICAgICAgICAgICAg ICBbImwiLCByICogMiAtIHcsIDBdLAorICAgICAgICAgICAgICAgIFsiYSIs IHIsIHIsIDAsIDAsIDEsIC1yLCAtcl0sCisgICAgICAgICAgICAgICAgWyJs IiwgMCwgciAqIDIgLSBoXSwKKyAgICAgICAgICAgICAgICBbImEiLCByLCBy LCAwLCAwLCAxLCByLCAtcl0sCisgICAgICAgICAgICAgICAgWyJ6Il0KKyAg ICAgICAgICAgIF07CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlcyA9IFtb Ik0iLCB4LCB5XSwgWyJsIiwgdywgMF0sIFsibCIsIDAsIGhdLCBbImwiLCAt dywgMF0sIFsieiJdXTsKKyAgICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJp bmc7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGZ1bmN0aW9u IGVsbGlwc2VQYXRoKHgsIHksIHJ4LCByeSwgYSkgeworICAgICAgICBpZiAo YSA9PSBudWxsICYmIHJ5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJ5ID0g cng7CisgICAgICAgIH0KKyAgICAgICAgeCA9ICt4OworICAgICAgICB5ID0g K3k7CisgICAgICAgIHJ4ID0gK3J4OworICAgICAgICByeSA9ICtyeTsKKyAg ICAgICAgaWYgKGEgIT0gbnVsbCkgeworICAgICAgICAgICAgdmFyIHJhZCA9 IE1hdGguUEkgLyAxODAsCisgICAgICAgICAgICAgICAgeDEgPSB4ICsgcngg KiBNYXRoLmNvcygtcnkgKiByYWQpLAorICAgICAgICAgICAgICAgIHgyID0g eCArIHJ4ICogTWF0aC5jb3MoLWEgKiByYWQpLAorICAgICAgICAgICAgICAg IHkxID0geSArIHJ4ICogTWF0aC5zaW4oLXJ5ICogcmFkKSwKKyAgICAgICAg ICAgICAgICB5MiA9IHkgKyByeCAqIE1hdGguc2luKC1hICogcmFkKSwKKyAg ICAgICAgICAgICAgICByZXMgPSBbWyJNIiwgeDEsIHkxXSwgWyJBIiwgcngs IHJ4LCAwLCArKGEgLSByeSA+IDE4MCksIDAsIHgyLCB5Ml1dOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgcmVzID0gWworICAgICAgICAgICAg ICAgIFsiTSIsIHgsIHldLAorICAgICAgICAgICAgICAgIFsibSIsIDAsIC1y eV0sCisgICAgICAgICAgICAgICAgWyJhIiwgcngsIHJ5LCAwLCAxLCAxLCAw LCAyICogcnldLAorICAgICAgICAgICAgICAgIFsiYSIsIHJ4LCByeSwgMCwg MSwgMSwgMCwgLTIgKiByeV0sCisgICAgICAgICAgICAgICAgWyJ6Il0KKyAg ICAgICAgICAgIF07CisgICAgICAgIH0KKyAgICAgICAgcmVzLnRvU3RyaW5n ID0gdG9TdHJpbmc7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAg IHZhciB1bml0MnB4ID0gU25hcC5fdW5pdDJweCwKKyAgICAgICAgZ2V0UGF0 aCA9IHsKKyAgICAgICAgcGF0aDogZnVuY3Rpb24gKGVsKSB7CisgICAgICAg ICAgICByZXR1cm4gZWwuYXR0cigicGF0aCIpOworICAgICAgICB9LAorICAg ICAgICBjaXJjbGU6IGZ1bmN0aW9uIChlbCkgeworICAgICAgICAgICAgdmFy IGF0dHIgPSB1bml0MnB4KGVsKTsKKyAgICAgICAgICAgIHJldHVybiBlbGxp cHNlUGF0aChhdHRyLmN4LCBhdHRyLmN5LCBhdHRyLnIpOworICAgICAgICB9 LAorICAgICAgICBlbGxpcHNlOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg ICAgIHZhciBhdHRyID0gdW5pdDJweChlbCk7CisgICAgICAgICAgICByZXR1 cm4gZWxsaXBzZVBhdGgoYXR0ci5jeCB8fCAwLCBhdHRyLmN5IHx8IDAsIGF0 dHIucngsIGF0dHIucnkpOworICAgICAgICB9LAorICAgICAgICByZWN0OiBm dW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHZhciBhdHRyID0gdW5pdDJw eChlbCk7CisgICAgICAgICAgICByZXR1cm4gcmVjdFBhdGgoYXR0ci54IHx8 IDAsIGF0dHIueSB8fCAwLCBhdHRyLndpZHRoLCBhdHRyLmhlaWdodCwgYXR0 ci5yeCwgYXR0ci5yeSk7CisgICAgICAgIH0sCisgICAgICAgIGltYWdlOiBm dW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHZhciBhdHRyID0gdW5pdDJw eChlbCk7CisgICAgICAgICAgICByZXR1cm4gcmVjdFBhdGgoYXR0ci54IHx8 IDAsIGF0dHIueSB8fCAwLCBhdHRyLndpZHRoLCBhdHRyLmhlaWdodCk7Cisg ICAgICAgIH0sCisgICAgICAgIGxpbmU6IGZ1bmN0aW9uIChlbCkgeworICAg ICAgICAgICAgcmV0dXJuICJNIiArIFtlbC5hdHRyKCJ4MSIpIHx8IDAsIGVs LmF0dHIoInkxIikgfHwgMCwgZWwuYXR0cigieDIiKSwgZWwuYXR0cigieTIi KV07CisgICAgICAgIH0sCisgICAgICAgIHBvbHlsaW5lOiBmdW5jdGlvbiAo ZWwpIHsKKyAgICAgICAgICAgIHJldHVybiAiTSIgKyBlbC5hdHRyKCJwb2lu dHMiKTsKKyAgICAgICAgfSwKKyAgICAgICAgcG9seWdvbjogZnVuY3Rpb24g KGVsKSB7CisgICAgICAgICAgICByZXR1cm4gIk0iICsgZWwuYXR0cigicG9p bnRzIikgKyAieiI7CisgICAgICAgIH0sCisgICAgICAgIGRlZmx0OiBmdW5j dGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHZhciBiYm94ID0gZWwubm9kZS5n ZXRCQm94KCk7CisgICAgICAgICAgICByZXR1cm4gcmVjdFBhdGgoYmJveC54 LCBiYm94LnksIGJib3gud2lkdGgsIGJib3guaGVpZ2h0KTsKKyAgICAgICAg fQorICAgIH07CisgICAgZnVuY3Rpb24gcGF0aFRvUmVsYXRpdmUocGF0aEFy cmF5KSB7CisgICAgICAgIHZhciBwdGggPSBwYXRocyhwYXRoQXJyYXkpLAor ICAgICAgICAgICAgbG93ZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b0xv d2VyQ2FzZTsKKyAgICAgICAgaWYgKHB0aC5yZWwpIHsKKyAgICAgICAgICAg IHJldHVybiBwYXRoQ2xvbmUocHRoLnJlbCk7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKCFTbmFwLmlzKHBhdGhBcnJheSwgImFycmF5IikgfHwgIVNuYXAu aXMocGF0aEFycmF5ICYmIHBhdGhBcnJheVswXSwgImFycmF5IikpIHsKKyAg ICAgICAgICAgIHBhdGhBcnJheSA9IFNuYXAucGFyc2VQYXRoU3RyaW5nKHBh dGhBcnJheSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHJlcyA9IFtdLAor ICAgICAgICAgICAgeCA9IDAsCisgICAgICAgICAgICB5ID0gMCwKKyAgICAg ICAgICAgIG14ID0gMCwKKyAgICAgICAgICAgIG15ID0gMCwKKyAgICAgICAg ICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgaWYgKHBhdGhBcnJheVswXVswXSA9 PSAiTSIpIHsKKyAgICAgICAgICAgIHggPSBwYXRoQXJyYXlbMF1bMV07Cisg ICAgICAgICAgICB5ID0gcGF0aEFycmF5WzBdWzJdOworICAgICAgICAgICAg bXggPSB4OworICAgICAgICAgICAgbXkgPSB5OworICAgICAgICAgICAgc3Rh cnQrKzsKKyAgICAgICAgICAgIHJlcy5wdXNoKFsiTSIsIHgsIHldKTsKKyAg ICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQsIGlpID0gcGF0 aEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHZh ciByID0gcmVzW2ldID0gW10sCisgICAgICAgICAgICAgICAgcGEgPSBwYXRo QXJyYXlbaV07CisgICAgICAgICAgICBpZiAocGFbMF0gIT0gbG93ZXJDYXNl LmNhbGwocGFbMF0pKSB7CisgICAgICAgICAgICAgICAgclswXSA9IGxvd2Vy Q2FzZS5jYWxsKHBhWzBdKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJb MF0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiYSI6CisgICAgICAg ICAgICAgICAgICAgICAgICByWzFdID0gcGFbMV07CisgICAgICAgICAgICAg ICAgICAgICAgICByWzJdID0gcGFbMl07CisgICAgICAgICAgICAgICAgICAg ICAgICByWzNdID0gcGFbM107CisgICAgICAgICAgICAgICAgICAgICAgICBy WzRdID0gcGFbNF07CisgICAgICAgICAgICAgICAgICAgICAgICByWzVdID0g cGFbNV07CisgICAgICAgICAgICAgICAgICAgICAgICByWzZdID0gKyhwYVs2 XSAtIHgpLnRvRml4ZWQoMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBy WzddID0gKyhwYVs3XSAtIHkpLnRvRml4ZWQoMyk7CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi diI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gKyhwYVsxXSAt IHkpLnRvRml4ZWQoMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAibSI6CisgICAgICAgICAg ICAgICAgICAgICAgICBteCA9IHBhWzFdOworICAgICAgICAgICAgICAgICAg ICAgICAgbXkgPSBwYVsyXTsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxLCBq aiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICByW2pdID0gKyhwYVtqXSAtICgoaiAlIDIpID8geCA6 IHkpKS50b0ZpeGVkKDMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgciA9IHJlc1tpXSA9IFtdOworICAgICAgICAgICAgICAg IGlmIChwYVswXSA9PSAibSIpIHsKKyAgICAgICAgICAgICAgICAgICAgbXgg PSBwYVsxXSArIHg7CisgICAgICAgICAgICAgICAgICAgIG15ID0gcGFbMl0g KyB5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3Ig KHZhciBrID0gMCwga2sgPSBwYS5sZW5ndGg7IGsgPCBrazsgaysrKSB7Cisg ICAgICAgICAgICAgICAgICAgIHJlc1tpXVtrXSA9IHBhW2tdOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBs ZW4gPSByZXNbaV0ubGVuZ3RoOworICAgICAgICAgICAgc3dpdGNoIChyZXNb aV1bMF0pIHsKKyAgICAgICAgICAgICAgICBjYXNlICJ6IjoKKyAgICAgICAg ICAgICAgICAgICAgeCA9IG14OworICAgICAgICAgICAgICAgICAgICB5ID0g bXk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIGNhc2UgImgiOgorICAgICAgICAgICAgICAgICAgICB4ICs9ICtyZXNb aV1bbGVuIC0gMV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgIGNhc2UgInYiOgorICAgICAgICAgICAgICAgICAgICB5 ICs9ICtyZXNbaV1bbGVuIC0gMV07CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg ICAgICAgIHggKz0gK3Jlc1tpXVtsZW4gLSAyXTsKKyAgICAgICAgICAgICAg ICAgICAgeSArPSArcmVzW2ldW2xlbiAtIDFdOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgICAgIHJlcy50b1N0cmluZyA9IHRvU3RyaW5nOwor ICAgICAgICBwdGgucmVsID0gcGF0aENsb25lKHJlcyk7CisgICAgICAgIHJl dHVybiByZXM7CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGhUb0Fic29sdXRl KHBhdGhBcnJheSkgeworICAgICAgICB2YXIgcHRoID0gcGF0aHMocGF0aEFy cmF5KTsKKyAgICAgICAgaWYgKHB0aC5hYnMpIHsKKyAgICAgICAgICAgIHJl dHVybiBwYXRoQ2xvbmUocHRoLmFicyk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCFpcyhwYXRoQXJyYXksICJhcnJheSIpIHx8ICFpcyhwYXRoQXJyYXkg JiYgcGF0aEFycmF5WzBdLCAiYXJyYXkiKSkgeyAvLyByb3VnaCBhc3N1bXB0 aW9uCisgICAgICAgICAgICBwYXRoQXJyYXkgPSBTbmFwLnBhcnNlUGF0aFN0 cmluZyhwYXRoQXJyYXkpOworICAgICAgICB9CisgICAgICAgIGlmICghcGF0 aEFycmF5IHx8ICFwYXRoQXJyYXkubGVuZ3RoKSB7CisgICAgICAgICAgICBy ZXR1cm4gW1siTSIsIDAsIDBdXTsKKyAgICAgICAgfQorICAgICAgICB2YXIg cmVzID0gW10sCisgICAgICAgICAgICB4ID0gMCwKKyAgICAgICAgICAgIHkg PSAwLAorICAgICAgICAgICAgbXggPSAwLAorICAgICAgICAgICAgbXkgPSAw LAorICAgICAgICAgICAgc3RhcnQgPSAwLAorICAgICAgICAgICAgcGEwOwor ICAgICAgICBpZiAocGF0aEFycmF5WzBdWzBdID09ICJNIikgeworICAgICAg ICAgICAgeCA9ICtwYXRoQXJyYXlbMF1bMV07CisgICAgICAgICAgICB5ID0g K3BhdGhBcnJheVswXVsyXTsKKyAgICAgICAgICAgIG14ID0geDsKKyAgICAg ICAgICAgIG15ID0geTsKKyAgICAgICAgICAgIHN0YXJ0Kys7CisgICAgICAg ICAgICByZXNbMF0gPSBbIk0iLCB4LCB5XTsKKyAgICAgICAgfQorICAgICAg ICB2YXIgY3J6ID0gcGF0aEFycmF5Lmxlbmd0aCA9PSAzICYmCisgICAgICAg ICAgICBwYXRoQXJyYXlbMF1bMF0gPT0gIk0iICYmCisgICAgICAgICAgICBw YXRoQXJyYXlbMV1bMF0udG9VcHBlckNhc2UoKSA9PSAiUiIgJiYKKyAgICAg ICAgICAgIHBhdGhBcnJheVsyXVswXS50b1VwcGVyQ2FzZSgpID09ICJaIjsK KyAgICAgICAgZm9yICh2YXIgciwgcGEsIGkgPSBzdGFydCwgaWkgPSBwYXRo QXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgcmVz LnB1c2gociA9IFtdKTsKKyAgICAgICAgICAgIHBhID0gcGF0aEFycmF5W2ld OworICAgICAgICAgICAgcGEwID0gcGFbMF07CisgICAgICAgICAgICBpZiAo cGEwICE9IHBhMC50b1VwcGVyQ2FzZSgpKSB7CisgICAgICAgICAgICAgICAg clswXSA9IHBhMC50b1VwcGVyQ2FzZSgpOworICAgICAgICAgICAgICAgIHN3 aXRjaCAoclswXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJBIjoK KyAgICAgICAgICAgICAgICAgICAgICAgIHJbMV0gPSBwYVsxXTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJbMl0gPSBwYVsyXTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJbM10gPSBwYVszXTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHJbNF0gPSBwYVs0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHJbNV0gPSBwYVs1XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbNl0g PSArcGFbNl0gKyB4OworICAgICAgICAgICAgICAgICAgICAgICAgcls3XSA9 ICtwYVs3XSArIHk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiViI6CisgICAgICAgICAgICAg ICAgICAgICAgICByWzFdID0gK3BhWzFdICsgeTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJI IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbMV0gPSArcGFbMV0gKyB4 OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIGNhc2UgIlIiOgorICAgICAgICAgICAgICAgICAgICAgICAg dmFyIGRvdHMgPSBbeCwgeV0uY29uY2F0KHBhLnNsaWNlKDEpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAyLCBqaiA9IGRvdHMu bGVuZ3RoOyBqIDwgamo7IGorKykgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRvdHNbal0gPSArZG90c1tqXSArIHg7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG90c1srK2pdID0gK2RvdHNbal0gKyB5OworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgcmVzLnBvcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0g cmVzLmNvbmNhdChjYXRtdWxsUm9tMmJlemllcihkb3RzLCBjcnopKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICBjYXNlICJPIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5w b3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdHMgPSBlbGxpcHNl UGF0aCh4LCB5LCBwYVsxXSwgcGFbMl0pOworICAgICAgICAgICAgICAgICAg ICAgICAgZG90cy5wdXNoKGRvdHNbMF0pOworICAgICAgICAgICAgICAgICAg ICAgICAgcmVzID0gcmVzLmNvbmNhdChkb3RzKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJV IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoZWxsaXBzZVBh dGgoeCwgeSwgcGFbMV0sIHBhWzJdLCBwYVszXSkpOworICAgICAgICAgICAg ICAgICAgICAgICAgciA9IFsiVSJdLmNvbmNhdChyZXNbcmVzLmxlbmd0aCAt IDFdLnNsaWNlKC0yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiTSI6CisgICAgICAgICAg ICAgICAgICAgICAgICBteCA9ICtwYVsxXSArIHg7CisgICAgICAgICAgICAg ICAgICAgICAgICBteSA9ICtwYVsyXSArIHk7CisgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGog PSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByW2pdID0gK3BhW2pdICsgKChqICUgMikg PyB4IDogeSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChwYTAgPT0gIlIi KSB7CisgICAgICAgICAgICAgICAgZG90cyA9IFt4LCB5XS5jb25jYXQocGEu c2xpY2UoMSkpOworICAgICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAg ICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KGNhdG11bGxSb20yYmV6aWVy KGRvdHMsIGNyeikpOworICAgICAgICAgICAgICAgIHIgPSBbIlIiXS5jb25j YXQocGEuc2xpY2UoLTIpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGEw ID09ICJPIikgeworICAgICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAg ICAgICAgICAgICBkb3RzID0gZWxsaXBzZVBhdGgoeCwgeSwgcGFbMV0sIHBh WzJdKTsKKyAgICAgICAgICAgICAgICBkb3RzLnB1c2goZG90c1swXSk7Cisg ICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChkb3RzKTsKKyAgICAg ICAgICAgIH0gZWxzZSBpZiAocGEwID09ICJVIikgeworICAgICAgICAgICAg ICAgIHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICByZXMgPSByZXMuY29u Y2F0KGVsbGlwc2VQYXRoKHgsIHksIHBhWzFdLCBwYVsyXSwgcGFbM10pKTsK KyAgICAgICAgICAgICAgICByID0gWyJVIl0uY29uY2F0KHJlc1tyZXMubGVu Z3RoIC0gMV0uc2xpY2UoLTIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gcGEubGVuZ3Ro OyBrIDwga2s7IGsrKykgeworICAgICAgICAgICAgICAgICAgICByW2tdID0g cGFba107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgcGEwID0gcGEwLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAg ICBpZiAocGEwICE9ICJPIikgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo clswXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJaIjoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHggPSArbXg7CisgICAgICAgICAgICAgICAg ICAgICAgICB5ID0gK215OworICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIkgiOgorICAgICAgICAg ICAgICAgICAgICAgICAgeCA9IHJbMV07CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiViI6Cisg ICAgICAgICAgICAgICAgICAgICAgICB5ID0gclsxXTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl ICJNIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG14ID0gcltyLmxlbmd0 aCAtIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgbXkgPSByW3IubGVu Z3RoIC0gMV07CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICAgICAgICAgICAgICB4ID0gcltyLmxlbmd0aCAtIDJdOworICAg ICAgICAgICAgICAgICAgICAgICAgeSA9IHJbci5sZW5ndGggLSAxXTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHB0aC5h YnMgPSBwYXRoQ2xvbmUocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAg ICB9CisgICAgZnVuY3Rpb24gbDJjKHgxLCB5MSwgeDIsIHkyKSB7CisgICAg ICAgIHJldHVybiBbeDEsIHkxLCB4MiwgeTIsIHgyLCB5Ml07CisgICAgfQor ICAgIGZ1bmN0aW9uIHEyYyh4MSwgeTEsIGF4LCBheSwgeDIsIHkyKSB7Cisg ICAgICAgIHZhciBfMTMgPSAxIC8gMywKKyAgICAgICAgICAgIF8yMyA9IDIg LyAzOworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAgIF8xMyAq IHgxICsgXzIzICogYXgsCisgICAgICAgICAgICAgICAgXzEzICogeTEgKyBf MjMgKiBheSwKKyAgICAgICAgICAgICAgICBfMTMgKiB4MiArIF8yMyAqIGF4 LAorICAgICAgICAgICAgICAgIF8xMyAqIHkyICsgXzIzICogYXksCisgICAg ICAgICAgICAgICAgeDIsCisgICAgICAgICAgICAgICAgeTIKKyAgICAgICAg ICAgIF07CisgICAgfQorICAgIGZ1bmN0aW9uIGEyYyh4MSwgeTEsIHJ4LCBy eSwgYW5nbGUsIGxhcmdlX2FyY19mbGFnLCBzd2VlcF9mbGFnLCB4MiwgeTIs IHJlY3Vyc2l2ZSkgeworICAgICAgICAvLyBmb3IgbW9yZSBpbmZvcm1hdGlv biBvZiB3aGVyZSB0aGlzIG1hdGggY2FtZSBmcm9tIHZpc2l0OgorICAgICAg ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9pbXBsbm90ZS5odG1s I0FyY0ltcGxlbWVudGF0aW9uTm90ZXMKKyAgICAgICAgdmFyIF8xMjAgPSBQ SSAqIDEyMCAvIDE4MCwKKyAgICAgICAgICAgIHJhZCA9IFBJIC8gMTgwICog KCthbmdsZSB8fCAwKSwKKyAgICAgICAgICAgIHJlcyA9IFtdLAorICAgICAg ICAgICAgeHksCisgICAgICAgICAgICByb3RhdGUgPSBTbmFwLl8uY2FjaGVy KGZ1bmN0aW9uICh4LCB5LCByYWQpIHsKKyAgICAgICAgICAgICAgICB2YXIg WCA9IHggKiBtYXRoLmNvcyhyYWQpIC0geSAqIG1hdGguc2luKHJhZCksCisg ICAgICAgICAgICAgICAgICAgIFkgPSB4ICogbWF0aC5zaW4ocmFkKSArIHkg KiBtYXRoLmNvcyhyYWQpOworICAgICAgICAgICAgICAgIHJldHVybiB7eDog WCwgeTogWX07CisgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKCFyZWN1 cnNpdmUpIHsKKyAgICAgICAgICAgIHh5ID0gcm90YXRlKHgxLCB5MSwgLXJh ZCk7CisgICAgICAgICAgICB4MSA9IHh5Lng7CisgICAgICAgICAgICB5MSA9 IHh5Lnk7CisgICAgICAgICAgICB4eSA9IHJvdGF0ZSh4MiwgeTIsIC1yYWQp OworICAgICAgICAgICAgeDIgPSB4eS54OworICAgICAgICAgICAgeTIgPSB4 eS55OworICAgICAgICAgICAgdmFyIGNvcyA9IG1hdGguY29zKFBJIC8gMTgw ICogYW5nbGUpLAorICAgICAgICAgICAgICAgIHNpbiA9IG1hdGguc2luKFBJ IC8gMTgwICogYW5nbGUpLAorICAgICAgICAgICAgICAgIHggPSAoeDEgLSB4 MikgLyAyLAorICAgICAgICAgICAgICAgIHkgPSAoeTEgLSB5MikgLyAyOwor ICAgICAgICAgICAgdmFyIGggPSAoeCAqIHgpIC8gKHJ4ICogcngpICsgKHkg KiB5KSAvIChyeSAqIHJ5KTsKKyAgICAgICAgICAgIGlmIChoID4gMSkgewor ICAgICAgICAgICAgICAgIGggPSBtYXRoLnNxcnQoaCk7CisgICAgICAgICAg ICAgICAgcnggPSBoICogcng7CisgICAgICAgICAgICAgICAgcnkgPSBoICog cnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcngyID0gcngg KiByeCwKKyAgICAgICAgICAgICAgICByeTIgPSByeSAqIHJ5LAorICAgICAg ICAgICAgICAgIGsgPSAobGFyZ2VfYXJjX2ZsYWcgPT0gc3dlZXBfZmxhZyA/ IC0xIDogMSkgKgorICAgICAgICAgICAgICAgICAgICBtYXRoLnNxcnQoYWJz KChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAtIHJ5MiAqIHggKiB4KSAvIChy eDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkpLAorICAgICAgICAgICAgICAg IGN4ID0gayAqIHJ4ICogeSAvIHJ5ICsgKHgxICsgeDIpIC8gMiwKKyAgICAg ICAgICAgICAgICBjeSA9IGsgKiAtcnkgKiB4IC8gcnggKyAoeTEgKyB5Mikg LyAyLAorICAgICAgICAgICAgICAgIGYxID0gbWF0aC5hc2luKCgoeTEgLSBj eSkgLyByeSkudG9GaXhlZCg5KSksCisgICAgICAgICAgICAgICAgZjIgPSBt YXRoLmFzaW4oKCh5MiAtIGN5KSAvIHJ5KS50b0ZpeGVkKDkpKTsKKworICAg ICAgICAgICAgZjEgPSB4MSA8IGN4ID8gUEkgLSBmMSA6IGYxOworICAgICAg ICAgICAgZjIgPSB4MiA8IGN4ID8gUEkgLSBmMiA6IGYyOworICAgICAgICAg ICAgZjEgPCAwICYmIChmMSA9IFBJICogMiArIGYxKTsKKyAgICAgICAgICAg IGYyIDwgMCAmJiAoZjIgPSBQSSAqIDIgKyBmMik7CisgICAgICAgICAgICBp ZiAoc3dlZXBfZmxhZyAmJiBmMSA+IGYyKSB7CisgICAgICAgICAgICAgICAg ZjEgPSBmMSAtIFBJICogMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYxKSB7CisgICAgICAgICAgICAg ICAgZjIgPSBmMiAtIFBJICogMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGYxID0gcmVjdXJzaXZlWzBdOworICAg ICAgICAgICAgZjIgPSByZWN1cnNpdmVbMV07CisgICAgICAgICAgICBjeCA9 IHJlY3Vyc2l2ZVsyXTsKKyAgICAgICAgICAgIGN5ID0gcmVjdXJzaXZlWzNd OworICAgICAgICB9CisgICAgICAgIHZhciBkZiA9IGYyIC0gZjE7CisgICAg ICAgIGlmIChhYnMoZGYpID4gXzEyMCkgeworICAgICAgICAgICAgdmFyIGYy b2xkID0gZjIsCisgICAgICAgICAgICAgICAgeDJvbGQgPSB4MiwKKyAgICAg ICAgICAgICAgICB5Mm9sZCA9IHkyOworICAgICAgICAgICAgZjIgPSBmMSAr IF8xMjAgKiAoc3dlZXBfZmxhZyAmJiBmMiA+IGYxID8gMSA6IC0xKTsKKyAg ICAgICAgICAgIHgyID0gY3ggKyByeCAqIG1hdGguY29zKGYyKTsKKyAgICAg ICAgICAgIHkyID0gY3kgKyByeSAqIG1hdGguc2luKGYyKTsKKyAgICAgICAg ICAgIHJlcyA9IGEyYyh4MiwgeTIsIHJ4LCByeSwgYW5nbGUsIDAsIHN3ZWVw X2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBmMm9sZCwgY3gsIGN5XSk7Cisg ICAgICAgIH0KKyAgICAgICAgZGYgPSBmMiAtIGYxOworICAgICAgICB2YXIg YzEgPSBtYXRoLmNvcyhmMSksCisgICAgICAgICAgICBzMSA9IG1hdGguc2lu KGYxKSwKKyAgICAgICAgICAgIGMyID0gbWF0aC5jb3MoZjIpLAorICAgICAg ICAgICAgczIgPSBtYXRoLnNpbihmMiksCisgICAgICAgICAgICB0ID0gbWF0 aC50YW4oZGYgLyA0KSwKKyAgICAgICAgICAgIGh4ID0gNCAvIDMgKiByeCAq IHQsCisgICAgICAgICAgICBoeSA9IDQgLyAzICogcnkgKiB0LAorICAgICAg ICAgICAgbTEgPSBbeDEsIHkxXSwKKyAgICAgICAgICAgIG0yID0gW3gxICsg aHggKiBzMSwgeTEgLSBoeSAqIGMxXSwKKyAgICAgICAgICAgIG0zID0gW3gy ICsgaHggKiBzMiwgeTIgLSBoeSAqIGMyXSwKKyAgICAgICAgICAgIG00ID0g W3gyLCB5Ml07CisgICAgICAgIG0yWzBdID0gMiAqIG0xWzBdIC0gbTJbMF07 CisgICAgICAgIG0yWzFdID0gMiAqIG0xWzFdIC0gbTJbMV07CisgICAgICAg IGlmIChyZWN1cnNpdmUpIHsKKyAgICAgICAgICAgIHJldHVybiBbbTIsIG0z LCBtNF0uY29uY2F0KHJlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICByZXMgPSBbbTIsIG0zLCBtNF0uY29uY2F0KHJlcykuam9pbigpLnNw bGl0KCIsIik7CisgICAgICAgICAgICB2YXIgbmV3cmVzID0gW107CisgICAg ICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZXMubGVuZ3RoOyBpIDwg aWk7IGkrKykgeworICAgICAgICAgICAgICAgIG5ld3Jlc1tpXSA9IGkgJSAy ID8gcm90YXRlKHJlc1tpIC0gMV0sIHJlc1tpXSwgcmFkKS55IDogcm90YXRl KHJlc1tpXSwgcmVzW2kgKyAxXSwgcmFkKS54OworICAgICAgICAgICAgfQor ICAgICAgICAgICAgcmV0dXJuIG5ld3JlczsKKyAgICAgICAgfQorICAgIH0K KyAgICBmdW5jdGlvbiBmaW5kRG90QXRTZWdtZW50KHAxeCwgcDF5LCBjMXgs IGMxeSwgYzJ4LCBjMnksIHAyeCwgcDJ5LCB0KSB7CisgICAgICAgIHZhciB0 MSA9IDEgLSB0OworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgeDog cG93KHQxLCAzKSAqIHAxeCArIHBvdyh0MSwgMikgKiAzICogdCAqIGMxeCAr IHQxICogMyAqIHQgKiB0ICogYzJ4ICsgcG93KHQsIDMpICogcDJ4LAorICAg ICAgICAgICAgeTogcG93KHQxLCAzKSAqIHAxeSArIHBvdyh0MSwgMikgKiAz ICogdCAqIGMxeSArIHQxICogMyAqIHQgKiB0ICogYzJ5ICsgcG93KHQsIDMp ICogcDJ5CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIC8vIFJldHVy bnMgYm91bmRpbmcgYm94IG9mIGN1YmljIGJlemllciBjdXJ2ZS4KKyAgICAv LyBTb3VyY2U6IGh0dHA6Ly9ibG9nLmhhY2tlcnMtY2FmZS5uZXQvMjAwOS8w Ni9ob3ctdG8tY2FsY3VsYXRlLWJlemllci1jdXJ2ZXMtYm91bmRpbmcuaHRt bAorICAgIC8vIE9yaWdpbmFsIHZlcnNpb246IE5JU0hJTyBIaXJva2F6dQor ICAgIC8vIE1vZGlmaWNhdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS90aW1v MjIzNDUKKyAgICBmdW5jdGlvbiBjdXJ2ZURpbSh4MCwgeTAsIHgxLCB5MSwg eDIsIHkyLCB4MywgeTMpIHsKKyAgICAgICAgdmFyIHR2YWx1ZXMgPSBbXSwK KyAgICAgICAgICAgIGJvdW5kcyA9IFtbXSwgW11dLAorICAgICAgICAgICAg YSwgYiwgYywgdCwgdDEsIHQyLCBiMmFjLCBzcXJ0YjJhYzsKKyAgICAgICAg Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgICAgIGlm IChpID09IDApIHsKKyAgICAgICAgICAgICAgICBiID0gNiAqIHgwIC0gMTIg KiB4MSArIDYgKiB4MjsKKyAgICAgICAgICAgICAgICBhID0gLTMgKiB4MCAr IDkgKiB4MSAtIDkgKiB4MiArIDMgKiB4MzsKKyAgICAgICAgICAgICAgICBj ID0gMyAqIHgxIC0gMyAqIHgwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBiID0gNiAqIHkwIC0gMTIgKiB5MSArIDYgKiB5MjsK KyAgICAgICAgICAgICAgICBhID0gLTMgKiB5MCArIDkgKiB5MSAtIDkgKiB5 MiArIDMgKiB5MzsKKyAgICAgICAgICAgICAgICBjID0gMyAqIHkxIC0gMyAq IHkwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFicyhhKSA8 IDFlLTEyKSB7CisgICAgICAgICAgICAgICAgaWYgKGFicyhiKSA8IDFlLTEy KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ID0gLWMgLyBiOworICAgICAg ICAgICAgICAgIGlmICgwIDwgdCAmJiB0IDwgMSkgeworICAgICAgICAgICAg ICAgICAgICB0dmFsdWVzLnB1c2godCk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYjJhYyA9IGIgKiBiIC0gNCAqIGMgKiBhOworICAgICAgICAg ICAgc3FydGIyYWMgPSBtYXRoLnNxcnQoYjJhYyk7CisgICAgICAgICAgICBp ZiAoYjJhYyA8IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHQxID0gKC1iICsgc3FydGIyYWMp IC8gKDIgKiBhKTsKKyAgICAgICAgICAgIGlmICgwIDwgdDEgJiYgdDEgPCAx KSB7CisgICAgICAgICAgICAgICAgdHZhbHVlcy5wdXNoKHQxKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHQyID0gKC1iIC0gc3FydGIyYWMpIC8g KDIgKiBhKTsKKyAgICAgICAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7 CisgICAgICAgICAgICAgICAgdHZhbHVlcy5wdXNoKHQyKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciB4LCB5LCBqID0gdHZh bHVlcy5sZW5ndGgsCisgICAgICAgICAgICBqbGVuID0gaiwKKyAgICAgICAg ICAgIG10OworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAgICAgICAgICB0 ID0gdHZhbHVlc1tqXTsKKyAgICAgICAgICAgIG10ID0gMSAtIHQ7CisgICAg ICAgICAgICBib3VuZHNbMF1bal0gPSAobXQgKiBtdCAqIG10ICogeDApICsg KDMgKiBtdCAqIG10ICogdCAqIHgxKSArICgzICogbXQgKiB0ICogdCAqIHgy KSArICh0ICogdCAqIHQgKiB4Myk7CisgICAgICAgICAgICBib3VuZHNbMV1b al0gPSAobXQgKiBtdCAqIG10ICogeTApICsgKDMgKiBtdCAqIG10ICogdCAq IHkxKSArICgzICogbXQgKiB0ICogdCAqIHkyKSArICh0ICogdCAqIHQgKiB5 Myk7CisgICAgICAgIH0KKworICAgICAgICBib3VuZHNbMF1bamxlbl0gPSB4 MDsKKyAgICAgICAgYm91bmRzWzFdW2psZW5dID0geTA7CisgICAgICAgIGJv dW5kc1swXVtqbGVuICsgMV0gPSB4MzsKKyAgICAgICAgYm91bmRzWzFdW2ps ZW4gKyAxXSA9IHkzOworICAgICAgICBib3VuZHNbMF0ubGVuZ3RoID0gYm91 bmRzWzFdLmxlbmd0aCA9IGpsZW4gKyAyOworCisKKyAgICAgICAgcmV0dXJu IHsKKyAgICAgICAgICBtaW46IHt4OiBtbWluLmFwcGx5KDAsIGJvdW5kc1sw XSksIHk6IG1taW4uYXBwbHkoMCwgYm91bmRzWzFdKX0sCisgICAgICAgICAg bWF4OiB7eDogbW1heC5hcHBseSgwLCBib3VuZHNbMF0pLCB5OiBtbWF4LmFw cGx5KDAsIGJvdW5kc1sxXSl9CisgICAgICAgIH07CisgICAgfQorCisgICAg ZnVuY3Rpb24gcGF0aDJjdXJ2ZShwYXRoLCBwYXRoMikgeworICAgICAgICB2 YXIgcHRoID0gIXBhdGgyICYmIHBhdGhzKHBhdGgpOworICAgICAgICBpZiAo IXBhdGgyICYmIHB0aC5jdXJ2ZSkgeworICAgICAgICAgICAgcmV0dXJuIHBh dGhDbG9uZShwdGguY3VydmUpOworICAgICAgICB9CisgICAgICAgIHZhciBw ID0gcGF0aFRvQWJzb2x1dGUocGF0aCksCisgICAgICAgICAgICBwMiA9IHBh dGgyICYmIHBhdGhUb0Fic29sdXRlKHBhdGgyKSwKKyAgICAgICAgICAgIGF0 dHJzID0ge3g6IDAsIHk6IDAsIGJ4OiAwLCBieTogMCwgWDogMCwgWTogMCwg cXg6IG51bGwsIHF5OiBudWxsfSwKKyAgICAgICAgICAgIGF0dHJzMiA9IHt4 OiAwLCB5OiAwLCBieDogMCwgYnk6IDAsIFg6IDAsIFk6IDAsIHF4OiBudWxs LCBxeTogbnVsbH0sCisgICAgICAgICAgICBwcm9jZXNzUGF0aCA9IGZ1bmN0 aW9uIChwYXRoLCBkLCBwY29tKSB7CisgICAgICAgICAgICAgICAgdmFyIG54 LCBueTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhdGgpIHsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIFsiQyIsIGQueCwgZC55LCBkLngsIGQueSwg ZC54LCBkLnldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAhKHBhdGhbMF0gaW4ge1Q6IDEsIFE6IDF9KSAmJiAoZC5xeCA9IGQucXkg PSBudWxsKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGhbMF0pIHsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiTSI6CisgICAgICAgICAgICAg ICAgICAgICAgICBkLlggPSBwYXRoWzFdOworICAgICAgICAgICAgICAgICAg ICAgICAgZC5ZID0gcGF0aFsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJBIjoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQoYTJjLmFw cGx5KDAsIFtkLngsIGQueV0uY29uY2F0KHBhdGguc2xpY2UoMSkpKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2FzZSAiUyI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo cGNvbSA9PSAiQyIgfHwgcGNvbSA9PSAiUyIpIHsgLy8gSW4gIlMiIGNhc2Ug d2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwgaWYgdGhlIHByZXZpb3Vz IGNvbW1hbmQgaXMgQy9TLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IG54ID0gZC54ICogMiAtIGQuYng7ICAgICAgICAgIC8vIEFuZCByZWZsZWN0 IHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG55 ID0gZC55ICogMiAtIGQuYnk7ICAgICAgICAgIC8vIGNvbW1hbmQncyBjb250 cm9sIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50LgorICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHNv bWUgZWxzZSBvciBub3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnggPSBkLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnkg PSBkLnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICBwYXRoID0gWyJDIiwgbngsIG55XS5jb25jYXQocGF0 aC5zbGljZSgxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiVCI6CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocGNvbSA9PSAiUSIgfHwgcGNvbSA9PSAiVCIpIHsg Ly8gSW4gIlQiIGNhc2Ugd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwg aWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgUS9ULgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGQucXggPSBkLnggKiAyIC0gZC5xeDsgICAgICAg IC8vIEFuZCBtYWtlIGEgcmVmbGVjdGlvbiBzaW1pbGFyCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZC5xeSA9IGQueSAqIDIgLSBkLnF5OyAgICAg ICAgLy8gdG8gY2FzZSAiUyIuCisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gb3Igc29tZXRoaW5nIGVsc2Ugb3Igbm90aGlu ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucXggPSBkLng7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5xeSA9IGQueTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg IHBhdGggPSBbIkMiXS5jb25jYXQocTJjKGQueCwgZC55LCBkLnF4LCBkLnF5 LCBwYXRoWzFdLCBwYXRoWzJdKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiUSI6CisgICAg ICAgICAgICAgICAgICAgICAgICBkLnF4ID0gcGF0aFsxXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGQucXkgPSBwYXRoWzJdOworICAgICAgICAgICAg ICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChxMmMoZC54LCBkLnks IHBhdGhbMV0sIHBhdGhbMl0sIHBhdGhbM10sIHBhdGhbNF0pKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBjYXNlICJMIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBb IkMiXS5jb25jYXQobDJjKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdKSk7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSAiSCI6CisgICAgICAgICAgICAgICAgICAgICAgICBw YXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwgcGF0aFsxXSwgZC55 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgY2FzZSAiViI6CisgICAgICAgICAgICAgICAgICAgICAg ICBwYXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwgZC54LCBwYXRo WzFdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSAiWiI6CisgICAgICAgICAgICAgICAgICAg ICAgICBwYXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwgZC5YLCBk LlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBmaXhBcmMgPSBmdW5jdGlvbiAo cHAsIGkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHBbaV0ubGVuZ3RoID4g NykgeworICAgICAgICAgICAgICAgICAgICBwcFtpXS5zaGlmdCgpOworICAg ICAgICAgICAgICAgICAgICB2YXIgcGkgPSBwcFtpXTsKKyAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKHBpLmxlbmd0aCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgcGNvbXMxW2ldID0gIkEiOyAvLyBpZiBjcmVhdGVkIG11bHRp cGxlIEM6cywgdGhlaXIgb3JpZ2luYWwgc2VnIGlzIHNhdmVkCisgICAgICAg ICAgICAgICAgICAgICAgICBwMiAmJiAocGNvbXMyW2ldID0gIkEiKTsgLy8g dGhlIHNhbWUgYXMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBw LnNwbGljZShpKyssIDAsIFsiQyJdLmNvbmNhdChwaS5zcGxpY2UoMCwgNikp KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBwcC5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGlpID0g bW1heChwLmxlbmd0aCwgcDIgJiYgcDIubGVuZ3RoIHx8IDApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmaXhN ID0gZnVuY3Rpb24gKHBhdGgxLCBwYXRoMiwgYTEsIGEyLCBpKSB7CisgICAg ICAgICAgICAgICAgaWYgKHBhdGgxICYmIHBhdGgyICYmIHBhdGgxW2ldWzBd ID09ICJNIiAmJiBwYXRoMltpXVswXSAhPSAiTSIpIHsKKyAgICAgICAgICAg ICAgICAgICAgcGF0aDIuc3BsaWNlKGksIDAsIFsiTSIsIGEyLngsIGEyLnld KTsKKyAgICAgICAgICAgICAgICAgICAgYTEuYnggPSAwOworICAgICAgICAg ICAgICAgICAgICBhMS5ieSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGEx LnggPSBwYXRoMVtpXVsxXTsKKyAgICAgICAgICAgICAgICAgICAgYTEueSA9 IHBhdGgxW2ldWzJdOworICAgICAgICAgICAgICAgICAgICBpaSA9IG1tYXgo cC5sZW5ndGgsIHAyICYmIHAyLmxlbmd0aCB8fCAwKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcGNvbXMxID0g W10sIC8vIHBhdGggY29tbWFuZHMgb2Ygb3JpZ2luYWwgcGF0aCBwCisgICAg ICAgICAgICBwY29tczIgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmln aW5hbCBwYXRoIHAyCisgICAgICAgICAgICBwZmlyc3QgPSAiIiwgLy8gdGVt cG9yYXJ5IGhvbGRlciBmb3Igb3JpZ2luYWwgcGF0aCBjb21tYW5kCisgICAg ICAgICAgICBwY29tID0gIiI7IC8vIGhvbGRlciBmb3IgcHJldmlvdXMgcGF0 aCBjb21tYW5kIG9mIG9yaWdpbmFsIHBhdGgKKyAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gbW1heChwLmxlbmd0aCwgcDIgJiYgcDIubGVuZ3RoIHx8 IDApOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgcFtpXSAmJiAocGZp cnN0ID0gcFtpXVswXSk7IC8vIHNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmQK KworICAgICAgICAgICAgaWYgKHBmaXJzdCAhPSAiQyIpIC8vIEMgaXMgbm90 IHNhdmVkIHlldCwgYmVjYXVzZSBpdCBtYXkgYmUgcmVzdWx0IG9mIGNvbnZl cnNpb24KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwY29tczFb aV0gPSBwZmlyc3Q7IC8vIFNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmQKKyAg ICAgICAgICAgICAgICBpICYmICggcGNvbSA9IHBjb21zMVtpIC0gMV0pOyAv LyBHZXQgcHJldmlvdXMgcGF0aCBjb21tYW5kIHBjb20KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHBbaV0gPSBwcm9jZXNzUGF0aChwW2ldLCBhdHRy cywgcGNvbSk7IC8vIFByZXZpb3VzIHBhdGggY29tbWFuZCBpcyBpbnB1dHRl ZCB0byBwcm9jZXNzUGF0aAorCisgICAgICAgICAgICBpZiAocGNvbXMxW2ld ICE9ICJBIiAmJiBwZmlyc3QgPT0gIkMiKSBwY29tczFbaV0gPSAiQyI7IC8v IEEgaXMgdGhlIG9ubHkgY29tbWFuZAorICAgICAgICAgICAgLy8gd2hpY2gg bWF5IHByb2R1Y2UgbXVsdGlwbGUgQzpzCisgICAgICAgICAgICAvLyBzbyB3 ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEMgaXMgYWxzbyBDIGluIG9yaWdp bmFsIHBhdGgKKworICAgICAgICAgICAgZml4QXJjKHAsIGkpOyAvLyBmaXhB cmMgYWRkcyBhbHNvIHRoZSByaWdodCBhbW91bnQgb2YgQTpzIHRvIHBjb21z MQorCisgICAgICAgICAgICBpZiAocDIpIHsgLy8gdGhlIHNhbWUgcHJvY2Vk dXJlcyBpcyBkb25lIHRvIHAyCisgICAgICAgICAgICAgICAgcDJbaV0gJiYg KHBmaXJzdCA9IHAyW2ldWzBdKTsKKyAgICAgICAgICAgICAgICBpZiAocGZp cnN0ICE9ICJDIikgeworICAgICAgICAgICAgICAgICAgICBwY29tczJbaV0g PSBwZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIGkgJiYgKHBjb20gPSBw Y29tczJbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgcDJbaV0gPSBwcm9jZXNzUGF0aChwMltpXSwgYXR0cnMyLCBwY29t KTsKKworICAgICAgICAgICAgICAgIGlmIChwY29tczJbaV0gIT0gIkEiICYm IHBmaXJzdCA9PSAiQyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGNvbXMy W2ldID0gIkMiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgIGZpeEFyYyhwMiwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBmaXhNKHAsIHAyLCBhdHRycywgYXR0cnMyLCBpKTsKKyAgICAgICAgICAg IGZpeE0ocDIsIHAsIGF0dHJzMiwgYXR0cnMsIGkpOworICAgICAgICAgICAg dmFyIHNlZyA9IHBbaV0sCisgICAgICAgICAgICAgICAgc2VnMiA9IHAyICYm IHAyW2ldLAorICAgICAgICAgICAgICAgIHNlZ2xlbiA9IHNlZy5sZW5ndGgs CisgICAgICAgICAgICAgICAgc2VnMmxlbiA9IHAyICYmIHNlZzIubGVuZ3Ro OworICAgICAgICAgICAgYXR0cnMueCA9IHNlZ1tzZWdsZW4gLSAyXTsKKyAg ICAgICAgICAgIGF0dHJzLnkgPSBzZWdbc2VnbGVuIC0gMV07CisgICAgICAg ICAgICBhdHRycy5ieCA9IHRvRmxvYXQoc2VnW3NlZ2xlbiAtIDRdKSB8fCBh dHRycy54OworICAgICAgICAgICAgYXR0cnMuYnkgPSB0b0Zsb2F0KHNlZ1tz ZWdsZW4gLSAzXSkgfHwgYXR0cnMueTsKKyAgICAgICAgICAgIGF0dHJzMi5i eCA9IHAyICYmICh0b0Zsb2F0KHNlZzJbc2VnMmxlbiAtIDRdKSB8fCBhdHRy czIueCk7CisgICAgICAgICAgICBhdHRyczIuYnkgPSBwMiAmJiAodG9GbG9h dChzZWcyW3NlZzJsZW4gLSAzXSkgfHwgYXR0cnMyLnkpOworICAgICAgICAg ICAgYXR0cnMyLnggPSBwMiAmJiBzZWcyW3NlZzJsZW4gLSAyXTsKKyAgICAg ICAgICAgIGF0dHJzMi55ID0gcDIgJiYgc2VnMltzZWcybGVuIC0gMV07Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFwMikgeworICAgICAgICAgICAgcHRo LmN1cnZlID0gcGF0aENsb25lKHApOworICAgICAgICB9CisgICAgICAgIHJl dHVybiBwMiA/IFtwLCBwMl0gOiBwOworICAgIH0KKyAgICBmdW5jdGlvbiBt YXBQYXRoKHBhdGgsIG1hdHJpeCkgeworICAgICAgICBpZiAoIW1hdHJpeCkg eworICAgICAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIH0KKyAgICAg ICAgdmFyIHgsIHksIGksIGosIGlpLCBqaiwgcGF0aGk7CisgICAgICAgIHBh dGggPSBwYXRoMmN1cnZlKHBhdGgpOworICAgICAgICBmb3IgKGkgPSAwLCBp aSA9IHBhdGgubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg cGF0aGkgPSBwYXRoW2ldOworICAgICAgICAgICAgZm9yIChqID0gMSwgamog PSBwYXRoaS5sZW5ndGg7IGogPCBqajsgaiArPSAyKSB7CisgICAgICAgICAg ICAgICAgeCA9IG1hdHJpeC54KHBhdGhpW2pdLCBwYXRoaVtqICsgMV0pOwor ICAgICAgICAgICAgICAgIHkgPSBtYXRyaXgueShwYXRoaVtqXSwgcGF0aGlb aiArIDFdKTsKKyAgICAgICAgICAgICAgICBwYXRoaVtqXSA9IHg7CisgICAg ICAgICAgICAgICAgcGF0aGlbaiArIDFdID0geTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9CisKKyAg ICAvLyBodHRwOi8vc2NoZXBlcnMuY2MvZ2V0dGluZy10by10aGUtcG9pbnQK KyAgICBmdW5jdGlvbiBjYXRtdWxsUm9tMmJlemllcihjcnAsIHopIHsKKyAg ICAgICAgdmFyIGQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlM ZW4gPSBjcnAubGVuZ3RoOyBpTGVuIC0gMiAqICF6ID4gaTsgaSArPSAyKSB7 CisgICAgICAgICAgICB2YXIgcCA9IFsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHt4OiArY3JwW2kgLSAyXSwgeTogK2NycFtpIC0gMV19LAorICAgICAg ICAgICAgICAgICAgICAgICAge3g6ICtjcnBbaV0sICAgICB5OiArY3JwW2kg KyAxXX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDogK2NycFtpICsg Ml0sIHk6ICtjcnBbaSArIDNdfSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHt4OiArY3JwW2kgKyA0XSwgeTogK2NycFtpICsgNV19CisgICAgICAgICAg ICAgICAgICAgIF07CisgICAgICAgICAgICBpZiAoeikgeworICAgICAgICAg ICAgICAgIGlmICghaSkgeworICAgICAgICAgICAgICAgICAgICBwWzBdID0g e3g6ICtjcnBbaUxlbiAtIDJdLCB5OiArY3JwW2lMZW4gLSAxXX07CisgICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChpTGVuIC0gNCA9PSBpKSB7CisgICAg ICAgICAgICAgICAgICAgIHBbM10gPSB7eDogK2NycFswXSwgeTogK2NycFsx XX07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpTGVuIC0gMiA9PSBp KSB7CisgICAgICAgICAgICAgICAgICAgIHBbMl0gPSB7eDogK2NycFswXSwg eTogK2NycFsxXX07CisgICAgICAgICAgICAgICAgICAgIHBbM10gPSB7eDog K2NycFsyXSwgeTogK2NycFszXX07CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaUxlbiAt IDQgPT0gaSkgeworICAgICAgICAgICAgICAgICAgICBwWzNdID0gcFsyXTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpKSB7CisgICAgICAgICAg ICAgICAgICAgIHBbMF0gPSB7eDogK2NycFtpXSwgeTogK2NycFtpICsgMV19 OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGQucHVzaChbIkMiLAorICAgICAgICAgICAgICAgICAgKC1wWzBdLngg KyA2ICogcFsxXS54ICsgcFsyXS54KSAvIDYsCisgICAgICAgICAgICAgICAg ICAoLXBbMF0ueSArIDYgKiBwWzFdLnkgKyBwWzJdLnkpIC8gNiwKKyAgICAg ICAgICAgICAgICAgIChwWzFdLnggKyA2ICogcFsyXS54IC0gcFszXS54KSAv IDYsCisgICAgICAgICAgICAgICAgICAocFsxXS55ICsgNipwWzJdLnkgLSBw WzNdLnkpIC8gNiwKKyAgICAgICAgICAgICAgICAgIHBbMl0ueCwKKyAgICAg ICAgICAgICAgICAgIHBbMl0ueQorICAgICAgICAgICAgXSk7CisgICAgICAg IH0KKworICAgICAgICByZXR1cm4gZDsKKyAgICB9CisKKyAgICAvLyBleHBv cnQKKyAgICBTbmFwLnBhdGggPSBwYXRoczsKKworICAgIC8qXAorICAgICAq IFNuYXAucGF0aC5nZXRUb3RhbExlbmd0aAorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZl biBwYXRoIGluIHBpeGVscworICAgICAqKgorICAgICAtIHBhdGggKHN0cmlu ZykgU1ZHIHBhdGggc3RyaW5nCisgICAgICoqCisgICAgID0gKG51bWJlcikg bGVuZ3RoCisgICAgXCovCisgICAgU25hcC5wYXRoLmdldFRvdGFsTGVuZ3Ro ID0gZ2V0VG90YWxMZW5ndGg7CisgICAgLypcCisgICAgICogU25hcC5wYXRo LmdldFBvaW50QXRMZW5ndGgKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBs b2NhdGVkIGF0IHRoZSBnaXZlbiBsZW5ndGggYWxvbmcgdGhlIGdpdmVuIHBh dGgKKyAgICAgKioKKyAgICAgLSBwYXRoIChzdHJpbmcpIFNWRyBwYXRoIHN0 cmluZworICAgICAtIGxlbmd0aCAobnVtYmVyKSBsZW5ndGgsIGluIHBpeGVs cywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGgsIGV4Y2x1ZGluZyBub24t cmVuZGVyaW5nIGp1bXBzCisgICAgICoqCisgICAgID0gKG9iamVjdCkgcmVw cmVzZW50YXRpb24gb2YgdGhlIHBvaW50OgorICAgICBvIHsKKyAgICAgbyAg ICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlLAorICAgICBvICAgICB5OiAo bnVtYmVyKSB5IGNvb3JkaW5hdGUsCisgICAgIG8gICAgIGFscGhhOiAobnVt YmVyKSBhbmdsZSBvZiBkZXJpdmF0aXZlCisgICAgIG8gfQorICAgIFwqLwor ICAgIFNuYXAucGF0aC5nZXRQb2ludEF0TGVuZ3RoID0gZ2V0UG9pbnRBdExl bmd0aDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguZ2V0U3VicGF0aAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUg c3VicGF0aCBvZiBhIGdpdmVuIHBhdGggYmV0d2VlbiBnaXZlbiBzdGFydCBh bmQgZW5kIGxlbmd0aHMKKyAgICAgKioKKyAgICAgLSBwYXRoIChzdHJpbmcp IFNWRyBwYXRoIHN0cmluZworICAgICAtIGZyb20gKG51bWJlcikgbGVuZ3Ro LCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXRoIHRvIHRo ZSBzdGFydCBvZiB0aGUgc2VnbWVudAorICAgICAtIHRvIChudW1iZXIpIGxl bmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCB0 byB0aGUgZW5kIG9mIHRoZSBzZWdtZW50CisgICAgICoqCisgICAgID0gKHN0 cmluZykgcGF0aCBzdHJpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIHNlZ21lbnQK KyAgICBcKi8KKyAgICBTbmFwLnBhdGguZ2V0U3VicGF0aCA9IGZ1bmN0aW9u IChwYXRoLCBmcm9tLCB0bykgeworICAgICAgICBpZiAodGhpcy5nZXRUb3Rh bExlbmd0aChwYXRoKSAtIHRvIDwgMWUtNikgeworICAgICAgICAgICAgcmV0 dXJuIGdldFN1YnBhdGhzQXRMZW5ndGgocGF0aCwgZnJvbSkuZW5kOworICAg ICAgICB9CisgICAgICAgIHZhciBhID0gZ2V0U3VicGF0aHNBdExlbmd0aChw YXRoLCB0bywgMSk7CisgICAgICAgIHJldHVybiBmcm9tID8gZ2V0U3VicGF0 aHNBdExlbmd0aChhLCBmcm9tKS5lbmQgOiBhOworICAgIH07CisgICAgLypc CisgICAgICogRWxlbWVudC5nZXRUb3RhbExlbmd0aAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRo ZSBwYXRoIGluIHBpeGVscyAob25seSB3b3JrcyBmb3IgYHBhdGhgIGVsZW1l bnRzKQorICAgICA9IChudW1iZXIpIGxlbmd0aAorICAgIFwqLworICAgIGVs cHJvdG8uZ2V0VG90YWxMZW5ndGggPSBmdW5jdGlvbiAoKSB7CisgICAgICAg IGlmICh0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgpIHsKKyAgICAgICAgICAg IHJldHVybiB0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgoKTsKKyAgICAgICAg fQorICAgIH07CisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZ2V0UG9pbnRBdExl bmd0aCgpL0VsZW1lbnQuZ2V0VG90YWxMZW5ndGgoKTogSWYgYSA8cGF0aD4g aXMgYnJva2VuIGludG8gZGlmZmVyZW50IHNlZ21lbnRzLCBpcyB0aGUganVt cCBkaXN0YW5jZSB0byB0aGUgbmV3IGNvb3JkaW5hdGVzIHNldCBieSB0aGUg X01fIG9yIF9tXyBjb21tYW5kcyBjYWxjdWxhdGVkIGFzIHBhcnQgb2YgdGhl IHBhdGgncyB0b3RhbCBsZW5ndGg/CisgICAgLypcCisgICAgICogRWxlbWVu dC5nZXRQb2ludEF0TGVuZ3RoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZXR1cm5zIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBsb2Nh dGVkIGF0IHRoZSBnaXZlbiBsZW5ndGggb24gdGhlIGdpdmVuIHBhdGggKG9u bHkgd29ya3MgZm9yIGBwYXRoYCBlbGVtZW50cykKKyAgICAgKioKKyAgICAg LSBsZW5ndGggKG51bWJlcikgbGVuZ3RoLCBpbiBwaXhlbHMsIGZyb20gdGhl IHN0YXJ0IG9mIHRoZSBwYXRoLCBleGNsdWRpbmcgbm9uLXJlbmRlcmluZyBq dW1wcworICAgICAqKgorICAgICA9IChvYmplY3QpIHJlcHJlc2VudGF0aW9u IG9mIHRoZSBwb2ludDoKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1i ZXIpIHggY29vcmRpbmF0ZSwKKyAgICAgbyAgICAgeTogKG51bWJlcikgeSBj b29yZGluYXRlLAorICAgICBvICAgICBhbHBoYTogKG51bWJlcikgYW5nbGUg b2YgZGVyaXZhdGl2ZQorICAgICBvIH0KKyAgICBcKi8KKyAgICBlbHByb3Rv LmdldFBvaW50QXRMZW5ndGggPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAg ICAgIHJldHVybiBnZXRQb2ludEF0TGVuZ3RoKHRoaXMuYXR0cigiZCIpLCBs ZW5ndGgpOworICAgIH07CisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZ2V0U3Vi cGF0aCgpOiBTaW1pbGFyIHRvIHRoZSBwcm9ibGVtIGZvciBFbGVtZW50Lmdl dFBvaW50QXRMZW5ndGgoKS4gVW5jbGVhciBob3cgdGhpcyB3b3VsZCB3b3Jr IGZvciBhIHNlZ21lbnRlZCBwYXRoLiBPdmVyYWxsLCB0aGUgY29uY2VwdCBv ZiBfc3VicGF0aF8gYW5kIHdoYXQgSSdtIGNhbGxpbmcgYSBfc2VnbWVudF8g KHNlcmllcyBvZiBub24tX01fIG9yIF9aXyBjb21tYW5kcykgaXMgdW5jbGVh ci4KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmdldFN1YnBhdGgKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgc3VicGF0aCBv ZiBhIGdpdmVuIGVsZW1lbnQgZnJvbSBnaXZlbiBzdGFydCBhbmQgZW5kIGxl bmd0aHMgKG9ubHkgd29ya3MgZm9yIGBwYXRoYCBlbGVtZW50cykKKyAgICAg KioKKyAgICAgLSBmcm9tIChudW1iZXIpIGxlbmd0aCwgaW4gcGl4ZWxzLCBm cm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCB0byB0aGUgc3RhcnQgb2YgdGhl IHNlZ21lbnQKKyAgICAgLSB0byAobnVtYmVyKSBsZW5ndGgsIGluIHBpeGVs cywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGggdG8gdGhlIGVuZCBvZiB0 aGUgc2VnbWVudAorICAgICAqKgorICAgICA9IChzdHJpbmcpIHBhdGggc3Ry aW5nIGRlZmluaXRpb24gZm9yIHRoZSBzZWdtZW50CisgICAgXCovCisgICAg ZWxwcm90by5nZXRTdWJwYXRoID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7Cisg ICAgICAgIHJldHVybiBTbmFwLnBhdGguZ2V0U3VicGF0aCh0aGlzLmF0dHIo ImQiKSwgZnJvbSwgdG8pOworICAgIH07CisgICAgU25hcC5fLmJveCA9IGJv eDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguZmluZERvdHNBdFNlZ21l bnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFV0aWxpdHkg bWV0aG9kCisgICAgICoqCisgICAgICogRmluZHMgZG90IGNvb3JkaW5hdGVz IG9uIHRoZSBnaXZlbiBjdWJpYyBiZXppw6lyIGN1cnZlIGF0IHRoZSBnaXZl biB0CisgICAgIC0gcDF4IChudW1iZXIpIHggb2YgdGhlIGZpcnN0IHBvaW50 IG9mIHRoZSBjdXJ2ZQorICAgICAtIHAxeSAobnVtYmVyKSB5IG9mIHRoZSBm aXJzdCBwb2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBjMXggKG51bWJlcikg eCBvZiB0aGUgZmlyc3QgYW5jaG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIGMx eSAobnVtYmVyKSB5IG9mIHRoZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1cnZl CisgICAgIC0gYzJ4IChudW1iZXIpIHggb2YgdGhlIHNlY29uZCBhbmNob3Ig b2YgdGhlIGN1cnZlCisgICAgIC0gYzJ5IChudW1iZXIpIHkgb2YgdGhlIHNl Y29uZCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAgIC0gcDJ4IChudW1iZXIp IHggb2YgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBw MnkgKG51bWJlcikgeSBvZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBjdXJ2 ZQorICAgICAtIHQgKG51bWJlcikgcG9zaXRpb24gb24gdGhlIGN1cnZlICgw Li4xKQorICAgICA9IChvYmplY3QpIHBvaW50IGluZm9ybWF0aW9uIGluIGZv cm1hdDoKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1iZXIpIHggY29v cmRpbmF0ZSBvZiB0aGUgcG9pbnQsCisgICAgIG8gICAgIHk6IChudW1iZXIp IHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsCisgICAgIG8gICAgIG06IHsK KyAgICAgbyAgICAgICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0 aGUgbGVmdCBhbmNob3IsCisgICAgIG8gICAgICAgICB5OiAobnVtYmVyKSB5 IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgYW5jaG9yCisgICAgIG8gICAgIH0s CisgICAgIG8gICAgIG46IHsKKyAgICAgbyAgICAgICAgIHg6IChudW1iZXIp IHggY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgYW5jaG9yLAorICAgICBvICAg ICAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSByaWdodCBh bmNob3IKKyAgICAgbyAgICAgfSwKKyAgICAgbyAgICAgc3RhcnQ6IHsKKyAg ICAgbyAgICAgICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUg c3RhcnQgb2YgdGhlIGN1cnZlLAorICAgICBvICAgICAgICAgeTogKG51bWJl cikgeSBjb29yZGluYXRlIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VydmUKKyAg ICAgbyAgICAgfSwKKyAgICAgbyAgICAgZW5kOiB7CisgICAgIG8gICAgICAg ICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUg Y3VydmUsCisgICAgIG8gICAgICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5h dGUgb2YgdGhlIGVuZCBvZiB0aGUgY3VydmUKKyAgICAgbyAgICAgfSwKKyAg ICAgbyAgICAgYWxwaGE6IChudW1iZXIpIGFuZ2xlIG9mIHRoZSBjdXJ2ZSBk ZXJpdmF0aXZlIGF0IHRoZSBwb2ludAorICAgICBvIH0KKyAgICBcKi8KKyAg ICBTbmFwLnBhdGguZmluZERvdHNBdFNlZ21lbnQgPSBmaW5kRG90c0F0U2Vn bWVudDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguYmV6aWVyQkJveAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRo b2QKKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3gg b2YgYSBnaXZlbiBjdWJpYyBiZXppw6lyIGN1cnZlCisgICAgIC0gcDF4IChu dW1iZXIpIHggb2YgdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBjdXJ2ZQorICAg ICAtIHAxeSAobnVtYmVyKSB5IG9mIHRoZSBmaXJzdCBwb2ludCBvZiB0aGUg Y3VydmUKKyAgICAgLSBjMXggKG51bWJlcikgeCBvZiB0aGUgZmlyc3QgYW5j aG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIGMxeSAobnVtYmVyKSB5IG9mIHRo ZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAgIC0gYzJ4IChudW1i ZXIpIHggb2YgdGhlIHNlY29uZCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAg IC0gYzJ5IChudW1iZXIpIHkgb2YgdGhlIHNlY29uZCBhbmNob3Igb2YgdGhl IGN1cnZlCisgICAgIC0gcDJ4IChudW1iZXIpIHggb2YgdGhlIHNlY29uZCBw b2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBwMnkgKG51bWJlcikgeSBvZiB0 aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAqIG9yCisgICAg IC0gYmV6IChhcnJheSkgYXJyYXkgb2Ygc2l4IHBvaW50cyBmb3IgYmV6acOp ciBjdXJ2ZQorICAgICA9IChvYmplY3QpIGJvdW5kaW5nIGJveAorICAgICBv IHsKKyAgICAgbyAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRo ZSBsZWZ0IHRvcCBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB5OiAo bnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgdG9wIHBvaW50IG9m IHRoZSBib3gsCisgICAgIG8gICAgIHgyOiAobnVtYmVyKSB4IGNvb3JkaW5h dGUgb2YgdGhlIHJpZ2h0IGJvdHRvbSBwb2ludCBvZiB0aGUgYm94LAorICAg ICBvICAgICB5MjogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSByaWdo dCBib3R0b20gcG9pbnQgb2YgdGhlIGJveCwKKyAgICAgbyAgICAgd2lkdGg6 IChudW1iZXIpIHdpZHRoIG9mIHRoZSBib3gsCisgICAgIG8gICAgIGhlaWdo dDogKG51bWJlcikgaGVpZ2h0IG9mIHRoZSBib3gKKyAgICAgbyB9CisgICAg XCovCisgICAgU25hcC5wYXRoLmJlemllckJCb3ggPSBiZXppZXJCQm94Owor ICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5pc1BvaW50SW5zaWRlQkJveAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRo b2QKKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBnaXZlbiBw b2ludCBpcyBpbnNpZGUgYm91bmRpbmcgYm94CisgICAgIC0gYmJveCAoc3Ry aW5nKSBib3VuZGluZyBib3gKKyAgICAgLSB4IChzdHJpbmcpIHggY29vcmRp bmF0ZSBvZiB0aGUgcG9pbnQKKyAgICAgLSB5IChzdHJpbmcpIHkgY29vcmRp bmF0ZSBvZiB0aGUgcG9pbnQKKyAgICAgPSAoYm9vbGVhbikgYHRydWVgIGlm IHBvaW50IGlzIGluc2lkZQorICAgIFwqLworICAgIFNuYXAucGF0aC5pc1Bv aW50SW5zaWRlQkJveCA9IGlzUG9pbnRJbnNpZGVCQm94OworICAgIFNuYXAu Y2xvc2VzdCA9IGZ1bmN0aW9uICh4LCB5LCBYLCBZKSB7CisgICAgICAgIHZh ciByID0gMTAwLAorICAgICAgICAgICAgYiA9IGJveCh4IC0gciAvIDIsIHkg LSByIC8gMiwgciwgciksCisgICAgICAgICAgICBpbnNpZGUgPSBbXSwKKyAg ICAgICAgICAgIGdldHRlciA9IFhbMF0uaGFzT3duUHJvcGVydHkoIngiKSA/ IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg ICAgICAgICAgICAgICAgICAgeDogWFtpXS54LAorICAgICAgICAgICAgICAg ICAgICB5OiBYW2ldLnkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg ICAgfSA6IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu IHsKKyAgICAgICAgICAgICAgICAgICAgeDogWFtpXSwKKyAgICAgICAgICAg ICAgICAgICAgeTogWVtpXQorICAgICAgICAgICAgICAgIH07CisgICAgICAg ICAgICB9LAorICAgICAgICAgICAgZm91bmQgPSAwOworICAgICAgICB3aGls ZSAociA8PSAxZTYgJiYgIWZvdW5kKSB7CisgICAgICAgICAgICBmb3IgKHZh ciBpID0gMCwgaWkgPSBYLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgICAgICB2YXIgeHkgPSBnZXR0ZXIoaSk7CisgICAgICAgICAgICAg ICAgaWYgKGlzUG9pbnRJbnNpZGVCQm94KGIsIHh5LngsIHh5LnkpKSB7Cisg ICAgICAgICAgICAgICAgICAgIGZvdW5kKys7CisgICAgICAgICAgICAgICAg ICAgIGluc2lkZS5wdXNoKHh5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHIgKj0gMjsK KyAgICAgICAgICAgICAgICBiID0gYm94KHggLSByIC8gMiwgeSAtIHIgLyAy LCByLCByKQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm IChyID09IDFlNikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIHZhciBsZW4gPSBJbmZpbml0eSwKKyAgICAgICAgICAgIHJl czsKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBpbnNpZGUubGVuZ3RoOyBp IDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFyIGwgPSBTbmFwLmxlbih4 LCB5LCBpbnNpZGVbaV0ueCwgaW5zaWRlW2ldLnkpOworICAgICAgICAgICAg aWYgKGxlbiA+IGwpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBsOworICAg ICAgICAgICAgICAgIGluc2lkZVtpXS5sZW4gPSBsOworICAgICAgICAgICAg ICAgIHJlcyA9IGluc2lkZVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4gcmVzOworICAgIH07CisgICAgLypcCisgICAg ICogU25hcC5wYXRoLmlzQkJveEludGVyc2VjdAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0d28gYm91bmRpbmcgYm94ZXMgaW50 ZXJzZWN0CisgICAgIC0gYmJveDEgKHN0cmluZykgZmlyc3QgYm91bmRpbmcg Ym94CisgICAgIC0gYmJveDIgKHN0cmluZykgc2Vjb25kIGJvdW5kaW5nIGJv eAorICAgICA9IChib29sZWFuKSBgdHJ1ZWAgaWYgYm91bmRpbmcgYm94ZXMg aW50ZXJzZWN0CisgICAgXCovCisgICAgU25hcC5wYXRoLmlzQkJveEludGVy c2VjdCA9IGlzQkJveEludGVyc2VjdDsKKyAgICAvKlwKKyAgICAgKiBTbmFw LnBhdGguaW50ZXJzZWN0aW9uCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIEZpbmRz IGludGVyc2VjdGlvbnMgb2YgdHdvIHBhdGhzCisgICAgIC0gcGF0aDEgKHN0 cmluZykgcGF0aCBzdHJpbmcKKyAgICAgLSBwYXRoMiAoc3RyaW5nKSBwYXRo IHN0cmluZworICAgICA9IChhcnJheSkgZG90cyBvZiBpbnRlcnNlY3Rpb24K KyAgICAgbyBbCisgICAgIG8gICAgIHsKKyAgICAgbyAgICAgICAgIHg6IChu dW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsCisgICAgIG8gICAg ICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50LAor ICAgICBvICAgICAgICAgdDE6IChudW1iZXIpIHQgdmFsdWUgZm9yIHNlZ21l bnQgb2YgcGF0aDEsCisgICAgIG8gICAgICAgICB0MjogKG51bWJlcikgdCB2 YWx1ZSBmb3Igc2VnbWVudCBvZiBwYXRoMiwKKyAgICAgbyAgICAgICAgIHNl Z21lbnQxOiAobnVtYmVyKSBvcmRlciBudW1iZXIgZm9yIHNlZ21lbnQgb2Yg cGF0aDEsCisgICAgIG8gICAgICAgICBzZWdtZW50MjogKG51bWJlcikgb3Jk ZXIgbnVtYmVyIGZvciBzZWdtZW50IG9mIHBhdGgyLAorICAgICBvICAgICAg ICAgYmV6MTogKGFycmF5KSBlaWdodCBjb29yZGluYXRlcyByZXByZXNlbnRp bmcgYmV6acOpciBjdXJ2ZSBmb3IgdGhlIHNlZ21lbnQgb2YgcGF0aDEsCisg ICAgIG8gICAgICAgICBiZXoyOiAoYXJyYXkpIGVpZ2h0IGNvb3JkaW5hdGVz IHJlcHJlc2VudGluZyBiZXppw6lyIGN1cnZlIGZvciB0aGUgc2VnbWVudCBv ZiBwYXRoMgorICAgICBvICAgICB9CisgICAgIG8gXQorICAgIFwqLworICAg IFNuYXAucGF0aC5pbnRlcnNlY3Rpb24gPSBwYXRoSW50ZXJzZWN0aW9uOwor ICAgIFNuYXAucGF0aC5pbnRlcnNlY3Rpb25OdW1iZXIgPSBwYXRoSW50ZXJz ZWN0aW9uTnVtYmVyOworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5pc1Bv aW50SW5zaWRlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBV dGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgYHRydWVg IGlmIGdpdmVuIHBvaW50IGlzIGluc2lkZSBhIGdpdmVuIGNsb3NlZCBwYXRo LgorICAgICAqCisgICAgICogTm90ZTogZmlsbCBtb2RlIGRvZXNu4oCZdCBh ZmZlY3QgdGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZC4KKyAgICAgLSBwYXRo IChzdHJpbmcpIHBhdGggc3RyaW5nCisgICAgIC0geCAobnVtYmVyKSB4IG9m IHRoZSBwb2ludAorICAgICAtIHkgKG51bWJlcikgeSBvZiB0aGUgcG9pbnQK KyAgICAgPSAoYm9vbGVhbikgYHRydWVgIGlmIHBvaW50IGlzIGluc2lkZSB0 aGUgcGF0aAorICAgIFwqLworICAgIFNuYXAucGF0aC5pc1BvaW50SW5zaWRl ID0gaXNQb2ludEluc2lkZVBhdGg7CisgICAgLypcCisgICAgICogU25hcC5w YXRoLmdldEJCb3gKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUg Ym91bmRpbmcgYm94IG9mIGEgZ2l2ZW4gcGF0aAorICAgICAtIHBhdGggKHN0 cmluZykgcGF0aCBzdHJpbmcKKyAgICAgPSAob2JqZWN0KSBib3VuZGluZyBi b3gKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1iZXIpIHggY29vcmRp bmF0ZSBvZiB0aGUgbGVmdCB0b3AgcG9pbnQgb2YgdGhlIGJveCwKKyAgICAg byAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IHRv cCBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB4MjogKG51bWJlcikg eCBjb29yZGluYXRlIG9mIHRoZSByaWdodCBib3R0b20gcG9pbnQgb2YgdGhl IGJveCwKKyAgICAgbyAgICAgeTI6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBv ZiB0aGUgcmlnaHQgYm90dG9tIHBvaW50IG9mIHRoZSBib3gsCisgICAgIG8g ICAgIHdpZHRoOiAobnVtYmVyKSB3aWR0aCBvZiB0aGUgYm94LAorICAgICBv ICAgICBoZWlnaHQ6IChudW1iZXIpIGhlaWdodCBvZiB0aGUgYm94CisgICAg IG8gfQorICAgIFwqLworICAgIFNuYXAucGF0aC5nZXRCQm94ID0gcGF0aEJC b3g7CisgICAgU25hcC5wYXRoLmdldCA9IGdldFBhdGg7CisgICAgLypcCisg ICAgICogU25hcC5wYXRoLnRvUmVsYXRpdmUKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAg ICogQ29udmVydHMgcGF0aCBjb29yZGluYXRlcyBpbnRvIHJlbGF0aXZlIHZh bHVlcworICAgICAtIHBhdGggKHN0cmluZykgcGF0aCBzdHJpbmcKKyAgICAg PSAoYXJyYXkpIHBhdGggc3RyaW5nCisgICAgXCovCisgICAgU25hcC5wYXRo LnRvUmVsYXRpdmUgPSBwYXRoVG9SZWxhdGl2ZTsKKyAgICAvKlwKKyAgICAg KiBTbmFwLnBhdGgudG9BYnNvbHV0ZQorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAgICAgKiBD b252ZXJ0cyBwYXRoIGNvb3JkaW5hdGVzIGludG8gYWJzb2x1dGUgdmFsdWVz CisgICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRoIHN0cmluZworICAgICA9IChh cnJheSkgcGF0aCBzdHJpbmcKKyAgICBcKi8KKyAgICBTbmFwLnBhdGgudG9B YnNvbHV0ZSA9IHBhdGhUb0Fic29sdXRlOworICAgIC8qXAorICAgICAqIFNu YXAucGF0aC50b0N1YmljCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIENvbnZlcnRz IHBhdGggdG8gYSBuZXcgcGF0aCB3aGVyZSBhbGwgc2VnbWVudHMgYXJlIGN1 YmljIGJlemnDqXIgY3VydmVzCisgICAgIC0gcGF0aFN0cmluZyAoc3RyaW5n fGFycmF5KSBwYXRoIHN0cmluZyBvciBhcnJheSBvZiBzZWdtZW50cworICAg ICA9IChhcnJheSkgYXJyYXkgb2Ygc2VnbWVudHMKKyAgICBcKi8KKyAgICBT bmFwLnBhdGgudG9DdWJpYyA9IHBhdGgyY3VydmU7CisgICAgLypcCisgICAg ICogU25hcC5wYXRoLm1hcAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogVHJhbnNmb3JtIHRoZSBwYXRoIHN0cmluZyB3aXRoIHRoZSBnaXZl biBtYXRyaXgKKyAgICAgLSBwYXRoIChzdHJpbmcpIHBhdGggc3RyaW5nCisg ICAgIC0gbWF0cml4IChvYmplY3QpIHNlZSBATWF0cml4CisgICAgID0gKHN0 cmluZykgdHJhbnNmb3JtZWQgcGF0aCBzdHJpbmcKKyAgICBcKi8KKyAgICBT bmFwLnBhdGgubWFwID0gbWFwUGF0aDsKKyAgICBTbmFwLnBhdGgudG9TdHJp bmcgPSB0b1N0cmluZzsKKyAgICBTbmFwLnBhdGguY2xvbmUgPSBwYXRoQ2xv bmU7Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3Rl bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisv LyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlz IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K Ky8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor Ly8gCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T RS0yLjAKKy8vIAorLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlz dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g YW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs aWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlv bnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAo U25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgbW1heCA9 IE1hdGgubWF4LAorICAgICAgICBtbWluID0gTWF0aC5taW47CisKKyAgICAv LyBTZXQKKyAgICB2YXIgU2V0ID0gZnVuY3Rpb24gKGl0ZW1zKSB7CisgICAg ICAgIHRoaXMuaXRlbXMgPSBbXTsKKwl0aGlzLmJpbmRpbmdzID0ge307Cisg ICAgICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy50eXBlID0g InNldCI7CisgICAgICAgIGlmIChpdGVtcykgeworICAgICAgICAgICAgZm9y ICh2YXIgaSA9IDAsIGlpID0gaXRlbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykg eworICAgICAgICAgICAgICAgIGlmIChpdGVtc1tpXSkgeworICAgICAgICAg ICAgICAgICAgICB0aGlzW3RoaXMuaXRlbXMubGVuZ3RoXSA9IHRoaXMuaXRl bXNbdGhpcy5pdGVtcy5sZW5ndGhdID0gaXRlbXNbaV07CisgICAgICAgICAg ICAgICAgICAgIHRoaXMubGVuZ3RoKys7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICBzZXRwcm90 byA9IFNldC5wcm90b3R5cGU7CisgICAgLypcCisgICAgICogU2V0LnB1c2gK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgZWFjaCBh cmd1bWVudCB0byB0aGUgY3VycmVudCBzZXQKKyAgICAgPSAob2JqZWN0KSBv cmlnaW5hbCBlbGVtZW50CisgICAgXCovCisgICAgc2V0cHJvdG8ucHVzaCA9 IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGl0ZW0sCisgICAgICAgICAg ICBsZW47CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFyZ3VtZW50 cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICBpdGVtID0g YXJndW1lbnRzW2ldOworICAgICAgICAgICAgaWYgKGl0ZW0pIHsKKyAgICAg ICAgICAgICAgICBsZW4gPSB0aGlzLml0ZW1zLmxlbmd0aDsKKyAgICAgICAg ICAgICAgICB0aGlzW2xlbl0gPSB0aGlzLml0ZW1zW2xlbl0gPSBpdGVtOwor ICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoKys7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBTZXQucG9wCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBSZW1vdmVzIGxhc3QgZWxlbWVudCBhbmQgcmV0dXJucyBp dAorICAgICA9IChvYmplY3QpIGVsZW1lbnQKKyAgICBcKi8KKyAgICBzZXRw cm90by5wb3AgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubGVuZ3Ro ICYmIGRlbGV0ZSB0aGlzW3RoaXMubGVuZ3RoLS1dOworICAgICAgICByZXR1 cm4gdGhpcy5pdGVtcy5wb3AoKTsKKyAgICB9OworICAgIC8qXAorICAgICAq IFNldC5mb3JFYWNoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBFeGVjdXRlcyBnaXZlbiBmdW5jdGlvbiBmb3IgZWFjaCBlbGVtZW50IGlu IHRoZSBzZXQKKyAgICAgKgorICAgICAqIElmIHRoZSBmdW5jdGlvbiByZXR1 cm5zIGBmYWxzZWAsIHRoZSBsb29wIHN0b3BzIHJ1bm5pbmcuCisgICAgICoq CisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBmdW5jdGlvbiB0byBydW4K KyAgICAgLSB0aGlzQXJnIChvYmplY3QpIGNvbnRleHQgb2JqZWN0IGZvciB0 aGUgY2FsbGJhY2sKKyAgICAgPSAob2JqZWN0KSBTZXQgb2JqZWN0CisgICAg XCovCisgICAgc2V0cHJvdG8uZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFj aywgdGhpc0FyZykgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0 aGlzLml0ZW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAg IGlmIChjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMuaXRlbXNbaV0sIGkp ID09PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgLypcCisgICAgICogU2V0LmFuaW1hdGUKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFuaW1hdGVzIGVhY2ggZWxl bWVudCBpbiBzZXQgaW4gc3luYy4KKyAgICAgKgorICAgICAqKgorICAgICAt IGF0dHJzIChvYmplY3QpIGtleS12YWx1ZSBwYWlycyBvZiBkZXN0aW5hdGlv biBhdHRyaWJ1dGVzCisgICAgIC0gZHVyYXRpb24gKG51bWJlcikgZHVyYXRp b24gb2YgdGhlIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMKKyAgICAgLSBl YXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgZWFzaW5nIGZ1bmN0aW9uIGZy b20gQG1pbmEgb3IgY3VzdG9tCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9u KSAjb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyB3 aGVuIHRoZSBhbmltYXRpb24gZW5kcworICAgICAqIG9yCisgICAgIC0gYW5p bWF0aW9uIChhcnJheSkgYXJyYXkgb2YgYW5pbWF0aW9uIHBhcmFtZXRlciBm b3IgZWFjaCBlbGVtZW50IGluIHNldCBpbiBmb3JtYXQgYFthdHRycywgZHVy YXRpb24sIGVhc2luZywgY2FsbGJhY2tdYAorICAgICA+IFVzYWdlCisgICAg IHwgLy8gYW5pbWF0ZSBhbGwgZWxlbWVudHMgaW4gc2V0IHRvIHJhZGl1cyAx MAorICAgICB8IHNldC5hbmltYXRlKHtyOiAxMH0sIDUwMCwgbWluYS5lYXNl aW4pOworICAgICB8IC8vIG9yCisgICAgIHwgLy8gYW5pbWF0ZSBmaXJzdCBl bGVtZW50IHRvIHJhZGl1cyAxMCwgYnV0IHNlY29uZCB0byByYWRpdXMgMjAg YW5kIGluIGRpZmZlcmVudCB0aW1lCisgICAgIHwgc2V0LmFuaW1hdGUoW3ty OiAxMH0sIDUwMCwgbWluYS5lYXNlaW5dLCBbe3I6IDIwfSwgMTUwMCwgbWlu YS5lYXNlaW5dKTsKKyAgICAgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQgZWxl bWVudAorICAgIFwqLworICAgIHNldHByb3RvLmFuaW1hdGUgPSBmdW5jdGlv biAoYXR0cnMsIG1zLCBlYXNpbmcsIGNhbGxiYWNrKSB7CisgICAgICAgIGlm ICh0eXBlb2YgZWFzaW5nID09ICJmdW5jdGlvbiIgJiYgIWVhc2luZy5sZW5n dGgpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZWFzaW5nOworICAgICAg ICAgICAgZWFzaW5nID0gbWluYS5saW5lYXI7CisgICAgICAgIH0KKyAgICAg ICAgaWYgKGF0dHJzIGluc3RhbmNlb2YgU25hcC5fLkFuaW1hdGlvbikgewor ICAgICAgICAgICAgY2FsbGJhY2sgPSBhdHRycy5jYWxsYmFjazsKKyAgICAg ICAgICAgIGVhc2luZyA9IGF0dHJzLmVhc2luZzsKKyAgICAgICAgICAgIG1z ID0gZWFzaW5nLmR1cjsKKyAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuYXR0 cjsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsK KyAgICAgICAgaWYgKFNuYXAuaXMoYXR0cnMsICJhcnJheSIpICYmIFNuYXAu aXMoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCAiYXJyYXkiKSkgeworICAgICAg ICAgICAgdmFyIGVhY2ggPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZh ciBiZWdpbiwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7 CisgICAgICAgICAgICAgICAgaWYgKGJlZ2luKSB7CisgICAgICAgICAgICAg ICAgICAgIHRoaXMuYiA9IGJlZ2luOworICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gdGhpcy5iOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBj YiA9IDAsCisgICAgICAgICAgICBzZXQgPSB0aGlzLAorICAgICAgICAgICAg Y2FsbGJhY2tlciA9IGNhbGxiYWNrICYmIGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgICAgICAgICBpZiAoKytjYiA9PSBzZXQubGVuZ3RoKSB7CisgICAgICAg ICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcyk7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHRoaXMu Zm9yRWFjaChmdW5jdGlvbiAoZWwsIGkpIHsKKyAgICAgICAgICAgIGV2ZS5v bmNlKCJzbmFwLmFuaW1jcmVhdGVkLiIgKyBlbC5pZCwgaGFuZGxlcik7Cisg ICAgICAgICAgICBpZiAoZWFjaCkgeworICAgICAgICAgICAgICAgIGFyZ3Nb aV0gJiYgZWwuYW5pbWF0ZS5hcHBseShlbCwgYXJnc1tpXSk7CisgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsLmFuaW1hdGUoYXR0 cnMsIG1zLCBlYXNpbmcsIGNhbGxiYWNrZXIpOworICAgICAgICAgICAgfQor ICAgICAgICB9KTsKKyAgICB9OworICAgIHNldHByb3RvLnJlbW92ZSA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7Cisg ICAgICAgICAgICB0aGlzLnBvcCgpLnJlbW92ZSgpOworICAgICAgICB9Cisg ICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICog U2V0LmJpbmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNw ZWNpZmllcyBob3cgdG8gaGFuZGxlIGEgc3BlY2lmaWMgYXR0cmlidXRlIHdo ZW4gYXBwbGllZAorICAgICAqIHRvIGEgc2V0LgorICAgICAqCisgICAgICoq CisgICAgIC0gYXR0ciAoc3RyaW5nKSBhdHRyaWJ1dGUgbmFtZQorICAgICAt IGNhbGxiYWNrIChmdW5jdGlvbikgZnVuY3Rpb24gdG8gcnVuCisgICAgICog b3IKKyAgICAgLSBhdHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBuYW1lCisgICAg IC0gZWxlbWVudCAoRWxlbWVudCkgc3BlY2lmaWMgZWxlbWVudCBpbiB0aGUg c2V0IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGUgdG8KKyAgICAgKiBvcgorICAg ICAtIGF0dHIgKHN0cmluZykgYXR0cmlidXRlIG5hbWUKKyAgICAgLSBlbGVt ZW50IChFbGVtZW50KSBzcGVjaWZpYyBlbGVtZW50IGluIHRoZSBzZXQgdG8g YXBwbHkgdGhlIGF0dHJpYnV0ZSB0bworICAgICAtIGVhdHRyIChzdHJpbmcp IGF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCB0byBiaW5kIHRoZSBhdHRyaWJ1 dGUgdG8KKyAgICAgPSAob2JqZWN0KSBTZXQgb2JqZWN0CisgICAgXCovCisg ICAgc2V0cHJvdG8uYmluZCA9IGZ1bmN0aW9uIChhdHRyLCBhLCBiKSB7Cisg ICAgICAgIHZhciBkYXRhID0ge307CisgICAgICAgIGlmICh0eXBlb2YgYSA9 PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRpbmdzW2F0 dHJdID0gYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBh bmFtZSA9IGIgfHwgYXR0cjsKKyAgICAgICAgICAgIHRoaXMuYmluZGluZ3Nb YXR0cl0gPSBmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIGRhdGFb YW5hbWVdID0gdjsKKyAgICAgICAgICAgICAgICBhLmF0dHIoZGF0YSk7Cisg ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgc2V0cHJvdG8uYXR0ciA9IGZ1bmN0aW9uICh2YWx1 ZSkgeworICAgICAgICB2YXIgdW5ib3VuZCA9IHt9OworICAgICAgICBmb3Ig KHZhciBrIGluIHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5iaW5k aW5nc1trXSkgeworICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3Nba10o dmFsdWVba10pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICB1bmJvdW5kW2tdID0gdmFsdWVba107CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5p dGVtcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICB0aGlz Lml0ZW1zW2ldLmF0dHIodW5ib3VuZCk7CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTZXQuY2xl YXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMg YWxsIGVsZW1lbnRzIGZyb20gdGhlIHNldAorICAgIFwqLworICAgIHNldHBy b3RvLmNsZWFyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB3aGlsZSAodGhp cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMucG9wKCk7CisgICAgICAg IH0KKyAgICB9OworICAgIC8qXAorICAgICAqIFNldC5zcGxpY2UKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgcmFuZ2Ugb2Yg ZWxlbWVudHMgZnJvbSB0aGUgc2V0CisgICAgICoqCisgICAgIC0gaW5kZXgg KG51bWJlcikgcG9zaXRpb24gb2YgdGhlIGRlbGV0aW9uCisgICAgIC0gY291 bnQgKG51bWJlcikgbnVtYmVyIG9mIGVsZW1lbnQgdG8gcmVtb3ZlCisgICAg IC0gaW5zZXJ0aW9u4oCmIChvYmplY3QpICNvcHRpb25hbCBlbGVtZW50cyB0 byBpbnNlcnQKKyAgICAgPSAob2JqZWN0KSBzZXQgZWxlbWVudHMgdGhhdCB3 ZXJlIGRlbGV0ZWQKKyAgICBcKi8KKyAgICBzZXRwcm90by5zcGxpY2UgPSBm dW5jdGlvbiAoaW5kZXgsIGNvdW50LCBpbnNlcnRpb24pIHsKKyAgICAgICAg aW5kZXggPSBpbmRleCA8IDAgPyBtbWF4KHRoaXMubGVuZ3RoICsgaW5kZXgs IDApIDogaW5kZXg7CisgICAgICAgIGNvdW50ID0gbW1heCgwLCBtbWluKHRo aXMubGVuZ3RoIC0gaW5kZXgsIGNvdW50KSk7CisgICAgICAgIHZhciB0YWls ID0gW10sCisgICAgICAgICAgICB0b2RlbCA9IFtdLAorICAgICAgICAgICAg YXJncyA9IFtdLAorICAgICAgICAgICAgaTsKKyAgICAgICAgZm9yIChpID0g MjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAg YXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHRv ZGVsLnB1c2godGhpc1tpbmRleCArIGldKTsKKyAgICAgICAgfQorICAgICAg ICBmb3IgKDsgaSA8IHRoaXMubGVuZ3RoIC0gaW5kZXg7IGkrKykgeworICAg ICAgICAgICAgdGFpbC5wdXNoKHRoaXNbaW5kZXggKyBpXSk7CisgICAgICAg IH0KKyAgICAgICAgdmFyIGFyZ2xlbiA9IGFyZ3MubGVuZ3RoOworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgYXJnbGVuICsgdGFpbC5sZW5ndGg7IGkrKykg eworICAgICAgICAgICAgdGhpcy5pdGVtc1tpbmRleCArIGldID0gdGhpc1tp bmRleCArIGldID0gaSA8IGFyZ2xlbiA/IGFyZ3NbaV0gOiB0YWlsW2kgLSBh cmdsZW5dOworICAgICAgICB9CisgICAgICAgIGkgPSB0aGlzLml0ZW1zLmxl bmd0aCA9IHRoaXMubGVuZ3RoIC09IGNvdW50IC0gYXJnbGVuOworICAgICAg ICB3aGlsZSAodGhpc1tpXSkgeworICAgICAgICAgICAgZGVsZXRlIHRoaXNb aSsrXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IFNldCh0b2Rl bCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTZXQuZXhjbHVkZQorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBnaXZlbiBl bGVtZW50IGZyb20gdGhlIHNldAorICAgICAqKgorICAgICAtIGVsZW1lbnQg KG9iamVjdCkgZWxlbWVudCB0byByZW1vdmUKKyAgICAgPSAoYm9vbGVhbikg YHRydWVgIGlmIG9iamVjdCB3YXMgZm91bmQgYW5kIHJlbW92ZWQgZnJvbSB0 aGUgc2V0CisgICAgXCovCisgICAgc2V0cHJvdG8uZXhjbHVkZSA9IGZ1bmN0 aW9uIChlbCkgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlz Lmxlbmd0aDsgaSA8IGlpOyBpKyspIGlmICh0aGlzW2ldID09IGVsKSB7Cisg ICAgICAgICAgICB0aGlzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICB9OworICAgIHNldHByb3RvLmluc2VydEFmdGVyID0gZnVuY3Rpb24g KGVsKSB7CisgICAgICAgIHZhciBpID0gdGhpcy5pdGVtcy5sZW5ndGg7Cisg ICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAgICAgICAgIHRoaXMuaXRlbXNb aV0uaW5zZXJ0QWZ0ZXIoZWwpOworICAgICAgICB9CisgICAgICAgIHJldHVy biB0aGlzOworICAgIH07CisgICAgc2V0cHJvdG8uZ2V0QkJveCA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdmFyIHggPSBbXSwKKyAgICAgICAgICAgIHkg PSBbXSwKKyAgICAgICAgICAgIHgyID0gW10sCisgICAgICAgICAgICB5MiA9 IFtdOworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5pdGVtcy5sZW5ndGg7 IGktLTspIGlmICghdGhpcy5pdGVtc1tpXS5yZW1vdmVkKSB7CisgICAgICAg ICAgICB2YXIgYm94ID0gdGhpcy5pdGVtc1tpXS5nZXRCQm94KCk7CisgICAg ICAgICAgICB4LnB1c2goYm94LngpOworICAgICAgICAgICAgeS5wdXNoKGJv eC55KTsKKyAgICAgICAgICAgIHgyLnB1c2goYm94LnggKyBib3gud2lkdGgp OworICAgICAgICAgICAgeTIucHVzaChib3gueSArIGJveC5oZWlnaHQpOwor ICAgICAgICB9CisgICAgICAgIHggPSBtbWluLmFwcGx5KDAsIHgpOworICAg ICAgICB5ID0gbW1pbi5hcHBseSgwLCB5KTsKKyAgICAgICAgeDIgPSBtbWF4 LmFwcGx5KDAsIHgyKTsKKyAgICAgICAgeTIgPSBtbWF4LmFwcGx5KDAsIHky KTsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHg6IHgsCisgICAg ICAgICAgICB5OiB5LAorICAgICAgICAgICAgeDI6IHgyLAorICAgICAgICAg ICAgeTI6IHkyLAorICAgICAgICAgICAgd2lkdGg6IHgyIC0geCwKKyAgICAg ICAgICAgIGhlaWdodDogeTIgLSB5LAorICAgICAgICAgICAgY3g6IHggKyAo eDIgLSB4KSAvIDIsCisgICAgICAgICAgICBjeTogeSArICh5MiAtIHkpIC8g MgorICAgICAgICB9OworICAgIH07CisgICAgc2V0cHJvdG8uY2xvbmUgPSBm dW5jdGlvbiAocykgeworICAgICAgICBzID0gbmV3IFNldDsKKyAgICAgICAg Zm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5pdGVtcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICBzLnB1c2godGhpcy5pdGVtc1tpXS5j bG9uZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9 OworICAgIHNldHByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAg ICAgICByZXR1cm4gIlNuYXBcdTIwMThzIHNldCI7CisgICAgfTsKKyAgICBz ZXRwcm90by50eXBlID0gInNldCI7CisgICAgLy8gZXhwb3J0CisgICAgU25h cC5TZXQgPSBTZXQ7CisgICAgU25hcC5zZXQgPSBmdW5jdGlvbiAoKSB7Cisg ICAgICAgIHZhciBzZXQgPSBuZXcgU2V0OworICAgICAgICBpZiAoYXJndW1l bnRzLmxlbmd0aCkgeworICAgICAgICAgICAgc2V0LnB1c2guYXBwbHkoc2V0 LCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2V0OworICAgIH07Cit9KTsK KworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jw b3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gCisvLyBMaWNlbnNl ZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUg IkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhj ZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBt YXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gCisvLyBo dHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8v IAorLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFn cmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQg dW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT IiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05T IE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8g U2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292 ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIg dGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxl bWVudCwgUGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgbmFtZXMgPSB7fSwKKyAg ICAgICAgcmVVbml0ID0gL1thLXpdKyQvaSwKKyAgICAgICAgU3RyID0gU3Ry aW5nOworICAgIG5hbWVzLnN0cm9rZSA9IG5hbWVzLmZpbGwgPSAiY29sb3Vy IjsKKyAgICBmdW5jdGlvbiBnZXRFbXB0eShpdGVtKSB7CisgICAgICAgIHZh ciBsID0gaXRlbVswXTsKKyAgICAgICAgc3dpdGNoIChsLnRvTG93ZXJDYXNl KCkpIHsKKyAgICAgICAgICAgIGNhc2UgInQiOiByZXR1cm4gW2wsIDAsIDBd OworICAgICAgICAgICAgY2FzZSAibSI6IHJldHVybiBbbCwgMSwgMCwgMCwg MSwgMCwgMF07CisgICAgICAgICAgICBjYXNlICJyIjogaWYgKGl0ZW0ubGVu Z3RoID09IDQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW2wsIDAsIGl0 ZW1bMl0sIGl0ZW1bM11dOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgICAgICByZXR1cm4gW2wsIDBdOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgY2FzZSAicyI6IGlmIChpdGVtLmxlbmd0aCA9PSA1KSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIFtsLCAxLCAxLCBpdGVtWzNdLCBpdGVt WzRdXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sZW5ndGggPT0g MykgeworICAgICAgICAgICAgICAgIHJldHVybiBbbCwgMSwgMV07CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBbbCwg MV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVu Y3Rpb24gZXF1YWxpc2VUcmFuc2Zvcm0odDEsIHQyLCBnZXRCQm94KSB7Cisg ICAgICAgIHQyID0gU3RyKHQyKS5yZXBsYWNlKC9cLnszfXxcdTIwMjYvZywg dDEpOworICAgICAgICB0MSA9IFNuYXAucGFyc2VUcmFuc2Zvcm1TdHJpbmco dDEpIHx8IFtdOworICAgICAgICB0MiA9IFNuYXAucGFyc2VUcmFuc2Zvcm1T dHJpbmcodDIpIHx8IFtdOworICAgICAgICB2YXIgbWF4bGVuZ3RoID0gTWF0 aC5tYXgodDEubGVuZ3RoLCB0Mi5sZW5ndGgpLAorICAgICAgICAgICAgZnJv bSA9IFtdLAorICAgICAgICAgICAgdG8gPSBbXSwKKyAgICAgICAgICAgIGkg PSAwLCBqLCBqaiwKKyAgICAgICAgICAgIHR0MSwgdHQyOworICAgICAgICBm b3IgKDsgaSA8IG1heGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0dDEg PSB0MVtpXSB8fCBnZXRFbXB0eSh0MltpXSk7CisgICAgICAgICAgICB0dDIg PSB0MltpXSB8fCBnZXRFbXB0eSh0dDEpOworICAgICAgICAgICAgaWYgKCh0 dDFbMF0gIT0gdHQyWzBdKSB8fAorICAgICAgICAgICAgICAgICh0dDFbMF0u dG9Mb3dlckNhc2UoKSA9PSAiciIgJiYgKHR0MVsyXSAhPSB0dDJbMl0gfHwg dHQxWzNdICE9IHR0MlszXSkpIHx8CisgICAgICAgICAgICAgICAgKHR0MVsw XS50b0xvd2VyQ2FzZSgpID09ICJzIiAmJiAodHQxWzNdICE9IHR0MlszXSB8 fCB0dDFbNF0gIT0gdHQyWzRdKSkKKyAgICAgICAgICAgICAgICApIHsKKyAg ICAgICAgICAgICAgICAgICAgdDEgPSBTbmFwLl8udHJhbnNmb3JtMm1hdHJp eCh0MSwgZ2V0QkJveCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdDIgPSBT bmFwLl8udHJhbnNmb3JtMm1hdHJpeCh0MiwgZ2V0QkJveCgpKTsKKyAgICAg ICAgICAgICAgICAgICAgZnJvbSA9IFtbIm0iLCB0MS5hLCB0MS5iLCB0MS5j LCB0MS5kLCB0MS5lLCB0MS5mXV07CisgICAgICAgICAgICAgICAgICAgIHRv ID0gW1sibSIsIHQyLmEsIHQyLmIsIHQyLmMsIHQyLmQsIHQyLmUsIHQyLmZd XTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBmcm9tW2ldID0gW107CisgICAgICAgICAgICB0b1tp XSA9IFtdOworICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBNYXRoLm1h eCh0dDEubGVuZ3RoLCB0dDIubGVuZ3RoKTsgaiA8IGpqOyBqKyspIHsKKyAg ICAgICAgICAgICAgICBqIGluIHR0MSAmJiAoZnJvbVtpXVtqXSA9IHR0MVtq XSk7CisgICAgICAgICAgICAgICAgaiBpbiB0dDIgJiYgKHRvW2ldW2pdID0g dHQyW2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgZnJvbTogcGF0aDJhcnJheShmcm9tKSwK KyAgICAgICAgICAgIHRvOiBwYXRoMmFycmF5KHRvKSwKKyAgICAgICAgICAg IGY6IGdldFBhdGgoZnJvbSkKKyAgICAgICAgfTsKKyAgICB9CisgICAgZnVu Y3Rpb24gZ2V0TnVtYmVyKHZhbCkgeworICAgICAgICByZXR1cm4gdmFsOwor ICAgIH0KKyAgICBmdW5jdGlvbiBnZXRVbml0KHVuaXQpIHsKKyAgICAgICAg cmV0dXJuIGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHJldHVybiAr dmFsLnRvRml4ZWQoMykgKyB1bml0OworICAgICAgICB9OworICAgIH0KKyAg ICBmdW5jdGlvbiBnZXRWaWV3Qm94KHZhbCkgeworICAgICAgICByZXR1cm4g dmFsLmpvaW4oIiAiKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0Q29sb3Vy KGNscikgeworICAgICAgICByZXR1cm4gU25hcC5yZ2IoY2xyWzBdLCBjbHJb MV0sIGNsclsyXSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFBhdGgocGF0 aCkgeworICAgICAgICB2YXIgayA9IDAsIGksIGlpLCBqLCBqaiwgb3V0LCBh LCBiID0gW107CisgICAgICAgIGZvciAoaSA9IDAsIGlpID0gcGF0aC5sZW5n dGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICBvdXQgPSAiWyI7Cisg ICAgICAgICAgICBhID0gWyciJyArIHBhdGhbaV1bMF0gKyAnIiddOworICAg ICAgICAgICAgZm9yIChqID0gMSwgamogPSBwYXRoW2ldLmxlbmd0aDsgaiA8 IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAgICBhW2pdID0gInZhbFsiICsg KGsrKykgKyAiXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQg Kz0gYSArICJdIjsKKyAgICAgICAgICAgIGJbaV0gPSBvdXQ7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKCJ2YWwiLCAicmV0dXJuIFNu YXAucGF0aC50b1N0cmluZy5jYWxsKFsiICsgYiArICJdKSIpOworICAgIH0K KyAgICBmdW5jdGlvbiBwYXRoMmFycmF5KHBhdGgpIHsKKyAgICAgICAgdmFy IG91dCA9IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRo Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFy IGogPSAxLCBqaiA9IHBhdGhbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykgewor ICAgICAgICAgICAgICAgIG91dC5wdXNoKHBhdGhbaV1bal0pOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvdXQ7CisgICAg fQorICAgIGZ1bmN0aW9uIGlzTnVtZXJpYyhvYmopIHsKKyAgICAgICAgcmV0 dXJuIGlzRmluaXRlKHBhcnNlRmxvYXQob2JqKSk7CisgICAgfQorICAgIGZ1 bmN0aW9uIGFycmF5RXF1YWwoYXJyMSwgYXJyMikgeworICAgICAgICBpZiAo IVNuYXAuaXMoYXJyMSwgImFycmF5IikgfHwgIVNuYXAuaXMoYXJyMiwgImFy cmF5IikpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg fQorICAgICAgICByZXR1cm4gYXJyMS50b1N0cmluZygpID09IGFycjIudG9T dHJpbmcoKTsKKyAgICB9CisgICAgRWxlbWVudC5wcm90b3R5cGUuZXF1YWwg PSBmdW5jdGlvbiAobmFtZSwgYikgeworICAgICAgICByZXR1cm4gZXZlKCJz bmFwLnV0aWwuZXF1YWwiLCB0aGlzLCBuYW1lLCBiKS5maXJzdERlZmluZWQo KTsKKyAgICB9OworICAgIGV2ZS5vbigic25hcC51dGlsLmVxdWFsIiwgZnVu Y3Rpb24gKG5hbWUsIGIpIHsKKyAgICAgICAgdmFyIEEsIEIsIGEgPSBTdHIo dGhpcy5hdHRyKG5hbWUpIHx8ICIiKSwKKyAgICAgICAgICAgIGVsID0gdGhp czsKKyAgICAgICAgaWYgKGlzTnVtZXJpYyhhKSAmJiBpc051bWVyaWMoYikp IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJv bTogcGFyc2VGbG9hdChhKSwKKyAgICAgICAgICAgICAgICB0bzogcGFyc2VG bG9hdChiKSwKKyAgICAgICAgICAgICAgICBmOiBnZXROdW1iZXIKKyAgICAg ICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWVzW25hbWVd ID09ICJjb2xvdXIiKSB7CisgICAgICAgICAgICBBID0gU25hcC5jb2xvcihh KTsKKyAgICAgICAgICAgIEIgPSBTbmFwLmNvbG9yKGIpOworICAgICAgICAg ICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBbQS5yLCBBLmcs IEEuYiwgQS5vcGFjaXR5XSwKKyAgICAgICAgICAgICAgICB0bzogW0Iuciwg Qi5nLCBCLmIsIEIub3BhY2l0eV0sCisgICAgICAgICAgICAgICAgZjogZ2V0 Q29sb3VyCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGlm IChuYW1lID09ICJ2aWV3Qm94IikgeworICAgICAgICAgICAgQSA9IHRoaXMu YXR0cihuYW1lKS52Yi5zcGxpdCgiICIpLm1hcChOdW1iZXIpOworICAgICAg ICAgICAgQiA9IGIuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKTsKKyAgICAgICAg ICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJvbTogQSwKKyAgICAg ICAgICAgICAgICB0bzogQiwKKyAgICAgICAgICAgICAgICBmOiBnZXRWaWV3 Qm94CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGlmIChu YW1lID09ICJ0cmFuc2Zvcm0iIHx8IG5hbWUgPT0gImdyYWRpZW50VHJhbnNm b3JtIiB8fCBuYW1lID09ICJwYXR0ZXJuVHJhbnNmb3JtIikgeworICAgICAg ICAgICAgaWYgKGIgaW5zdGFuY2VvZiBTbmFwLk1hdHJpeCkgeworICAgICAg ICAgICAgICAgIGIgPSBiLnRvVHJhbnNmb3JtU3RyaW5nKCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoIVNuYXAuXy5yZ1RyYW5zZm9ybS50 ZXN0KGIpKSB7CisgICAgICAgICAgICAgICAgYiA9IFNuYXAuXy5zdmdUcmFu c2Zvcm0yc3RyaW5nKGIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg cmV0dXJuIGVxdWFsaXNlVHJhbnNmb3JtKGEsIGIsIGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgICAgICByZXR1cm4gZWwuZ2V0QkJveCgxKTsKKyAgICAg ICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09ICJk IiB8fCBuYW1lID09ICJwYXRoIikgeworICAgICAgICAgICAgQSA9IFNuYXAu cGF0aC50b0N1YmljKGEsIGIpOworICAgICAgICAgICAgcmV0dXJuIHsKKyAg ICAgICAgICAgICAgICBmcm9tOiBwYXRoMmFycmF5KEFbMF0pLAorICAgICAg ICAgICAgICAgIHRvOiBwYXRoMmFycmF5KEFbMV0pLAorICAgICAgICAgICAg ICAgIGY6IGdldFBhdGgoQVswXSkKKyAgICAgICAgICAgIH07CisgICAgICAg IH0KKyAgICAgICAgaWYgKG5hbWUgPT0gInBvaW50cyIpIHsKKyAgICAgICAg ICAgIEEgPSBTdHIoYSkuc3BsaXQoU25hcC5fLnNlcGFyYXRvcik7CisgICAg ICAgICAgICBCID0gU3RyKGIpLnNwbGl0KFNuYXAuXy5zZXBhcmF0b3IpOwor ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBB LAorICAgICAgICAgICAgICAgIHRvOiBCLAorICAgICAgICAgICAgICAgIGY6 IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIHZhbDsgfQorICAgICAgICAgICAg fTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYVVuaXQgPSBhLm1hdGNoKHJl VW5pdCksCisgICAgICAgICAgICBiVW5pdCA9IFN0cihiKS5tYXRjaChyZVVu aXQpOworICAgICAgICBpZiAoYVVuaXQgJiYgYXJyYXlFcXVhbChhVW5pdCwg YlVuaXQpKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg ICAgIGZyb206IHBhcnNlRmxvYXQoYSksCisgICAgICAgICAgICAgICAgdG86 IHBhcnNlRmxvYXQoYiksCisgICAgICAgICAgICAgICAgZjogZ2V0VW5pdChh VW5pdCkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGZyb206IHRoaXMu YXNQWChuYW1lKSwKKyAgICAgICAgICAgICAgICB0bzogdGhpcy5hc1BYKG5h bWUsIGIpLAorICAgICAgICAgICAgICAgIGY6IGdldE51bWJlcgorICAgICAg ICAgICAgfTsKKyAgICAgICAgfQorICAgIH0pOworfSk7CisKKy8vIENvcHly aWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs IHJpZ2h0cyByZXNlcnZlZC4KKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhl IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7 CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vIAorLy8gaHR0cDovL3d3dy5h cGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyAKKy8vIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g d3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisv LyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGlj ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt aXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl LgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVy LCBnbG9iKSB7CisgICAgdmFyIGVscHJvdG8gPSBFbGVtZW50LnByb3RvdHlw ZSwKKyAgICBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgIHN1cHBvcnRz VG91Y2ggPSAiY3JlYXRlVG91Y2giIGluIGdsb2IuZG9jLAorICAgIGV2ZW50 cyA9IFsKKyAgICAgICAgImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlZG93 biIsICJtb3VzZW1vdmUiLCAibW91c2VvdXQiLAorICAgICAgICAibW91c2Vv dmVyIiwgIm1vdXNldXAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAi dG91Y2hlbmQiLAorICAgICAgICAidG91Y2hjYW5jZWwiCisgICAgXSwKKyAg ICB0b3VjaE1hcCA9IHsKKyAgICAgICAgbW91c2Vkb3duOiAidG91Y2hzdGFy dCIsCisgICAgICAgIG1vdXNlbW92ZTogInRvdWNobW92ZSIsCisgICAgICAg IG1vdXNldXA6ICJ0b3VjaGVuZCIKKyAgICB9LAorICAgIGdldFNjcm9sbCA9 IGZ1bmN0aW9uICh4eSwgZWwpIHsKKyAgICAgICAgdmFyIG5hbWUgPSB4eSA9 PSAieSIgPyAic2Nyb2xsVG9wIiA6ICJzY3JvbGxMZWZ0IiwKKyAgICAgICAg ICAgIGRvYyA9IGVsICYmIGVsLm5vZGUgPyBlbC5ub2RlLm93bmVyRG9jdW1l bnQgOiBnbG9iLmRvYzsKKyAgICAgICAgcmV0dXJuIGRvY1tuYW1lIGluIGRv Yy5kb2N1bWVudEVsZW1lbnQgPyAiZG9jdW1lbnRFbGVtZW50IiA6ICJib2R5 Il1bbmFtZV07CisgICAgfSwKKyAgICBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOwor ICAgIH0sCisgICAgcHJldmVudFRvdWNoID0gZnVuY3Rpb24gKCkgeworICAg ICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0 KCk7CisgICAgfSwKKyAgICBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICB9 LAorICAgIHN0b3BUb3VjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0 dXJuIHRoaXMub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAg ICB9LAorICAgIGFkZEV2ZW50ID0gZnVuY3Rpb24gKG9iaiwgdHlwZSwgZm4s IGVsZW1lbnQpIHsKKyAgICAgICAgdmFyIHJlYWxOYW1lID0gc3VwcG9ydHNU b3VjaCAmJiB0b3VjaE1hcFt0eXBlXSA/IHRvdWNoTWFwW3R5cGVdIDogdHlw ZSwKKyAgICAgICAgICAgIGYgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAg ICAgICAgIHZhciBzY3JvbGxZID0gZ2V0U2Nyb2xsKCJ5IiwgZWxlbWVudCks CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbFggPSBnZXRTY3JvbGwoIngi LCBlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNUb3Vj aCAmJiB0b3VjaE1hcFtoYXNdKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg ICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGUudGFyZ2V0VG91Y2hlcyAmJiBl LnRhcmdldFRvdWNoZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlc1tpXS50YXJn ZXQgPT0gb2JqIHx8IG9iai5jb250YWlucyhlLnRhcmdldFRvdWNoZXNbaV0u dGFyZ2V0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBv bGRlID0gZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gZS50 YXJnZXRUb3VjaGVzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGUub3JpZ2luYWxFdmVudCA9IG9sZGU7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCA9IHByZXZlbnRUb3VjaDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbiA9 IHN0b3BUb3VjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2 YXIgeCA9IGUuY2xpZW50WCArIHNjcm9sbFgsCisgICAgICAgICAgICAgICAg ICAgIHkgPSBlLmNsaWVudFkgKyBzY3JvbGxZOworICAgICAgICAgICAgICAg IHJldHVybiBmbi5jYWxsKGVsZW1lbnQsIGUsIHgsIHkpOworICAgICAgICAg ICAgfTsKKworICAgICAgICBpZiAodHlwZSAhPT0gcmVhbE5hbWUpIHsKKyAg ICAgICAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNl KTsKKyAgICAgICAgfQorCisgICAgICAgIG9iai5hZGRFdmVudExpc3RlbmVy KHJlYWxOYW1lLCBmLCBmYWxzZSk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgICAgIGlmICh0eXBlICE9PSByZWFsTmFtZSkg eworICAgICAgICAgICAgICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKHR5 cGUsIGYsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg b2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIocmVhbE5hbWUsIGYsIGZhbHNlKTsK KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworICAgIH0s CisgICAgZHJhZyA9IFtdLAorICAgIGRyYWdNb3ZlID0gZnVuY3Rpb24gKGUp IHsKKyAgICAgICAgdmFyIHggPSBlLmNsaWVudFgsCisgICAgICAgICAgICB5 ID0gZS5jbGllbnRZLAorICAgICAgICAgICAgc2Nyb2xsWSA9IGdldFNjcm9s bCgieSIpLAorICAgICAgICAgICAgc2Nyb2xsWCA9IGdldFNjcm9sbCgieCIp LAorICAgICAgICAgICAgZHJhZ2ksCisgICAgICAgICAgICBqID0gZHJhZy5s ZW5ndGg7CisgICAgICAgIHdoaWxlIChqLS0pIHsKKyAgICAgICAgICAgIGRy YWdpID0gZHJhZ1tqXTsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1RvdWNo KSB7CisgICAgICAgICAgICAgICAgdmFyIGkgPSBlLnRvdWNoZXMgJiYgZS50 b3VjaGVzLmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdG91Y2g7Cisg ICAgICAgICAgICAgICAgd2hpbGUgKGktLSkgeworICAgICAgICAgICAgICAg ICAgICB0b3VjaCA9IGUudG91Y2hlc1tpXTsKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHRvdWNoLmlkZW50aWZpZXIgPT0gZHJhZ2kuZWwuX2RyYWcuaWQg fHwgZHJhZ2kuZWwubm9kZS5jb250YWlucyh0b3VjaC50YXJnZXQpKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHkgPSB0b3VjaC5jbGllbnRZOworICAg ICAgICAgICAgICAgICAgICAgICAgKGUub3JpZ2luYWxFdmVudCA/IGUub3Jp Z2luYWxFdmVudCA6IGUpLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgdmFyIG5vZGUgPSBkcmFnaS5lbC5ub2RlLAorICAg ICAgICAgICAgICAgIG8sCisgICAgICAgICAgICAgICAgbmV4dCA9IG5vZGUu bmV4dFNpYmxpbmcsCisgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZS5w YXJlbnROb2RlLAorICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBub2RlLnN0 eWxlLmRpc3BsYXk7CisgICAgICAgICAgICAvLyBnbG9iLndpbi5vcGVyYSAm JiBwYXJlbnQucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAvLyBu b2RlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgICAgICAvLyBv ID0gZHJhZ2kuZWwucGFwZXIuZ2V0RWxlbWVudEJ5UG9pbnQoeCwgeSk7Cisg ICAgICAgICAgICAvLyBub2RlLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5Owor ICAgICAgICAgICAgLy8gZ2xvYi53aW4ub3BlcmEgJiYgKG5leHQgPyBwYXJl bnQuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpIDogcGFyZW50LmFwcGVuZENo aWxkKG5vZGUpKTsKKyAgICAgICAgICAgIC8vIG8gJiYgZXZlKCJzbmFwLmRy YWcub3Zlci4iICsgZHJhZ2kuZWwuaWQsIGRyYWdpLmVsLCBvKTsKKyAgICAg ICAgICAgIHggKz0gc2Nyb2xsWDsKKyAgICAgICAgICAgIHkgKz0gc2Nyb2xs WTsKKyAgICAgICAgICAgIGV2ZSgic25hcC5kcmFnLm1vdmUuIiArIGRyYWdp LmVsLmlkLCBkcmFnaS5tb3ZlX3Njb3BlIHx8IGRyYWdpLmVsLCB4IC0gZHJh Z2kuZWwuX2RyYWcueCwgeSAtIGRyYWdpLmVsLl9kcmFnLnksIHgsIHksIGUp OworICAgICAgICB9CisgICAgfSwKKyAgICBkcmFnVXAgPSBmdW5jdGlvbiAo ZSkgeworICAgICAgICBTbmFwLnVubW91c2Vtb3ZlKGRyYWdNb3ZlKS51bm1v dXNldXAoZHJhZ1VwKTsKKyAgICAgICAgdmFyIGkgPSBkcmFnLmxlbmd0aCwK KyAgICAgICAgICAgIGRyYWdpOworICAgICAgICB3aGlsZSAoaS0tKSB7Cisg ICAgICAgICAgICBkcmFnaSA9IGRyYWdbaV07CisgICAgICAgICAgICBkcmFn aS5lbC5fZHJhZyA9IHt9OworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWcu ZW5kLiIgKyBkcmFnaS5lbC5pZCwgZHJhZ2kuZW5kX3Njb3BlIHx8IGRyYWdp LnN0YXJ0X3Njb3BlIHx8IGRyYWdpLm1vdmVfc2NvcGUgfHwgZHJhZ2kuZWws IGUpOworICAgICAgICAgICAgZXZlLm9mZigic25hcC5kcmFnLiouIiArIGRy YWdpLmVsLmlkKTsKKyAgICAgICAgfQorICAgICAgICBkcmFnID0gW107Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmNsaWNrCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgY2xpY2sgZXZlbnQg aGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0 aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBA RWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW5j bGljaworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3Zl cyBhIGNsaWNrIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgZWxlbWVudAorICAg ICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQK KyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIAorICAg IC8qXAorICAgICAqIEVsZW1lbnQuZGJsY2xpY2sKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIEFkZHMgYSBkb3VibGUgY2xpY2sgZXZlbnQg aGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0 aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBA RWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW5k YmxjbGljaworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVt b3ZlcyBhIGRvdWJsZSBjbGljayBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVs ZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3Ig dGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8K KyAgICAKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1vdXNlZG93bgorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlZG93 biBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxl ciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChv YmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxl bWVudC51bm1vdXNlZG93bgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogUmVtb3ZlcyBhIG1vdXNlZG93biBldmVudCBoYW5kbGVyIGZyb20g dGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxl ciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAg ICBcKi8KKyAgICAKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1vdXNlbW92 ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIG1v dXNlbW92ZSBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0g aGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAg ICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAg ICogRWxlbWVudC51bm1vdXNlbW92ZQorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogUmVtb3ZlcyBhIG1vdXNlbW92ZSBldmVudCBoYW5kbGVy IGZyb20gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikg aGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICBcKi8KKyAgICAKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1v dXNlb3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRz IGEgbW91c2VvdXQgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAg ICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQK KyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAor ICAgICAqIEVsZW1lbnQudW5tb3VzZW91dAorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogUmVtb3ZlcyBhIG1vdXNlb3V0IGV2ZW50IGhhbmRs ZXIgZnJvbSB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9u KSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxl bWVudAorICAgIFwqLworICAgIAorICAgIC8qXAorICAgICAqIEVsZW1lbnQu bW91c2VvdmVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBB ZGRzIGEgbW91c2VvdmVyIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQK KyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2 ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAv KlwKKyAgICAgKiBFbGVtZW50LnVubW91c2VvdmVyCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGEgbW91c2VvdmVyIGV2ZW50 IGhhbmRsZXIgZnJvbSB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1 bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0 KSBARWxlbWVudAorICAgIFwqLworICAgIAorICAgIC8qXAorICAgICAqIEVs ZW1lbnQubW91c2V1cAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogQWRkcyBhIG1vdXNldXAgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVu dAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUg ZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAg IC8qXAorICAgICAqIEVsZW1lbnQudW5tb3VzZXVwCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGEgbW91c2V1cCBldmVudCBo YW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5j dGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkg QEVsZW1lbnQKKyAgICBcKi8KKyAgICAKKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnRvdWNoc3RhcnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIEFkZHMgYSB0b3VjaHN0YXJ0IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVs ZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3Ig dGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8K KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVudG91Y2hzdGFydAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBhIHRvdWNoc3Rh cnQgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBlbGVtZW50CisgICAgIC0gaGFu ZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9 IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgCisgICAgLypcCisg ICAgICogRWxlbWVudC50b3VjaG1vdmUKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEFkZHMgYSB0b3VjaG1vdmUgZXZlbnQgaGFuZGxlciB0 byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW50b3VjaG1vdmUK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgYSB0 b3VjaG1vdmUgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBlbGVtZW50CisgICAg IC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAor ICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgCisgICAg LypcCisgICAgICogRWxlbWVudC50b3VjaGVuZAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogQWRkcyBhIHRvdWNoZW5kIGV2ZW50IGhhbmRs ZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikg aGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVudG91Y2hl bmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMg YSB0b3VjaGVuZCBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAg ICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50 CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAKKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50LnRvdWNoY2FuY2VsCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgdG91Y2hjYW5jZWwgZXZl bnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1 bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0 KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQu dW50b3VjaGNhbmNlbAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyBhIHRvdWNoY2FuY2VsIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworICAgIGZvciAodmFyIGkgPSBldmVudHMubGVuZ3RoOyBpLS07KSB7 CisgICAgICAgIChmdW5jdGlvbiAoZXZlbnROYW1lKSB7CisgICAgICAgICAg ICBTbmFwW2V2ZW50TmFtZV0gPSBlbHByb3RvW2V2ZW50TmFtZV0gPSBmdW5j dGlvbiAoZm4sIHNjb3BlKSB7CisgICAgICAgICAgICAgICAgaWYgKFNuYXAu aXMoZm4sICJmdW5jdGlvbiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRo aXMuZXZlbnRzID0gdGhpcy5ldmVudHMgfHwgW107CisgICAgICAgICAgICAg ICAgICAgIHRoaXMuZXZlbnRzLnB1c2goeworICAgICAgICAgICAgICAgICAg ICAgICAgbmFtZTogZXZlbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgZjogZm4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bmJpbmQ6IGFk ZEV2ZW50KHRoaXMubm9kZSB8fCBkb2N1bWVudCwgZXZlbnROYW1lLCBmbiwg c2NvcGUgfHwgdGhpcykKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y ICh2YXIgaSA9IDAsIGlpID0gdGhpcy5ldmVudHMubGVuZ3RoOyBpIDwgaWk7 IGkrKykgaWYgKHRoaXMuZXZlbnRzW2ldLm5hbWUgPT0gZXZlbnROYW1lKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2ldLmYuY2FsbCh0aGlzKTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9OworICAgICAg ICAgICAgU25hcFsidW4iICsgZXZlbnROYW1lXSA9CisgICAgICAgICAgICBl bHByb3RvWyJ1biIgKyBldmVudE5hbWVdID0gZnVuY3Rpb24gKGZuKSB7Cisg ICAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9IHRoaXMuZXZlbnRzIHx8IFtd LAorICAgICAgICAgICAgICAgICAgICBsID0gZXZlbnRzLmxlbmd0aDsKKyAg ICAgICAgICAgICAgICB3aGlsZSAobC0tKSBpZiAoZXZlbnRzW2xdLm5hbWUg PT0gZXZlbnROYW1lICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGV2ZW50c1tsXS5mID09IGZuIHx8ICFmbikpIHsKKyAgICAgICAgICAg ICAgICAgICAgZXZlbnRzW2xdLnVuYmluZCgpOworICAgICAgICAgICAgICAg ICAgICBldmVudHMuc3BsaWNlKGwsIDEpOworICAgICAgICAgICAgICAgICAg ICAhZXZlbnRzLmxlbmd0aCAmJiBkZWxldGUgdGhpcy5ldmVudHM7CisgICAg ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAg IH07CisgICAgICAgIH0pKGV2ZW50c1tpXSk7CisgICAgfQorICAgIC8qXAor ICAgICAqIEVsZW1lbnQuaG92ZXIKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIEFkZHMgaG92ZXIgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIGVs ZW1lbnQKKyAgICAgLSBmX2luIChmdW5jdGlvbikgaGFuZGxlciBmb3IgaG92 ZXIgaW4KKyAgICAgLSBmX291dCAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIGhv dmVyIG91dAorICAgICAtIGljb250ZXh0IChvYmplY3QpICNvcHRpb25hbCBj b250ZXh0IGZvciBob3ZlciBpbiBoYW5kbGVyCisgICAgIC0gb2NvbnRleHQg KG9iamVjdCkgI29wdGlvbmFsIGNvbnRleHQgZm9yIGhvdmVyIG91dCBoYW5k bGVyCisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICBl bHByb3RvLmhvdmVyID0gZnVuY3Rpb24gKGZfaW4sIGZfb3V0LCBzY29wZV9p biwgc2NvcGVfb3V0KSB7CisgICAgICAgIHJldHVybiB0aGlzLm1vdXNlb3Zl cihmX2luLCBzY29wZV9pbikubW91c2VvdXQoZl9vdXQsIHNjb3BlX291dCB8 fCBzY29wZV9pbik7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50 LnVuaG92ZXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl bW92ZXMgaG92ZXIgZXZlbnQgaGFuZGxlcnMgZnJvbSB0aGUgZWxlbWVudAor ICAgICAtIGZfaW4gKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciBob3ZlciBpbgor ICAgICAtIGZfb3V0IChmdW5jdGlvbikgaGFuZGxlciBmb3IgaG92ZXIgb3V0 CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHBy b3RvLnVuaG92ZXIgPSBmdW5jdGlvbiAoZl9pbiwgZl9vdXQpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMudW5tb3VzZW92ZXIoZl9pbikudW5tb3VzZW91dChm X291dCk7CisgICAgfTsKKyAgICB2YXIgZHJhZ2dhYmxlID0gW107CisgICAg Ly8gU0lFUlJBIHVuY2xlYXIgd2hhdCBfY29udGV4dF8gcmVmZXJzIHRvIGZv ciBzdGFydGluZywgZW5kaW5nLCBtb3ZpbmcgdGhlIGRyYWcgZ2VzdHVyZS4K KyAgICAvLyBTSUVSUkEgRWxlbWVudC5kcmFnKCk6IF94IHBvc2l0aW9uIG9m IHRoZSBtb3VzZV86IFdoZXJlIGFyZSB0aGUgeC95IHZhbHVlcyBvZmZzZXQg ZnJvbT8KKyAgICAvLyBTSUVSUkEgRWxlbWVudC5kcmFnKCk6IG11Y2ggb2Yg dGhpcyBtZW1iZXIncyBkb2MgYXBwZWFycyB0byBiZSBkdXBsaWNhdGVkIGZv ciBzb21lIHJlYXNvbi4KKyAgICAvLyBTSUVSUkEgVW5jbGVhciBhYm91dCB0 aGlzIHNlbnRlbmNlOiBfQWRkaXRpb25hbGx5IGZvbGxvd2luZyBkcmFnIGV2 ZW50cyB3aWxsIGJlIHRyaWdnZXJlZDogZHJhZy5zdGFydC48aWQ+IG9uIHN0 YXJ0LCBkcmFnLmVuZC48aWQ+IG9uIGVuZCBhbmQgZHJhZy5tb3ZlLjxpZD4g b24gZXZlcnkgbW92ZS5fIElzIHRoZXJlIGEgZ2xvYmFsIF9kcmFnXyBvYmpl Y3QgdG8gd2hpY2ggeW91IGNhbiBhc3NpZ24gaGFuZGxlcnMga2V5ZWQgYnkg YW4gZWxlbWVudCdzIElEPworICAgIC8qXAorICAgICAqIEVsZW1lbnQuZHJh ZworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBldmVu dCBoYW5kbGVycyBmb3IgYW4gZWxlbWVudCdzIGRyYWcgZ2VzdHVyZQorICAg ICAqKgorICAgICAtIG9ubW92ZSAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIG1v dmluZworICAgICAtIG9uc3RhcnQgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciBk cmFnIHN0YXJ0CisgICAgIC0gb25lbmQgKGZ1bmN0aW9uKSBoYW5kbGVyIGZv ciBkcmFnIGVuZAorICAgICAtIG1jb250ZXh0IChvYmplY3QpICNvcHRpb25h bCBjb250ZXh0IGZvciBtb3ZpbmcgaGFuZGxlcgorICAgICAtIHNjb250ZXh0 IChvYmplY3QpICNvcHRpb25hbCBjb250ZXh0IGZvciBkcmFnIHN0YXJ0IGhh bmRsZXIKKyAgICAgLSBlY29udGV4dCAob2JqZWN0KSAjb3B0aW9uYWwgY29u dGV4dCBmb3IgZHJhZyBlbmQgaGFuZGxlcgorICAgICAqIEFkZGl0aW9uYWx5 IGZvbGxvd2luZyBgZHJhZ2AgZXZlbnRzIGFyZSB0cmlnZ2VyZWQ6IGBkcmFn LnN0YXJ0LjxpZD5gIG9uIHN0YXJ0LCAKKyAgICAgKiBgZHJhZy5lbmQuPGlk PmAgb24gZW5kIGFuZCBgZHJhZy5tb3ZlLjxpZD5gIG9uIGV2ZXJ5IG1vdmUu IFdoZW4gZWxlbWVudCBpcyBkcmFnZ2VkIG92ZXIgYW5vdGhlciBlbGVtZW50 IAorICAgICAqIGBkcmFnLm92ZXIuPGlkPmAgZmlyZXMgYXMgd2VsbC4KKyAg ICAgKgorICAgICAqIFN0YXJ0IGV2ZW50IGFuZCBzdGFydCBoYW5kbGVyIGFy ZSBjYWxsZWQgaW4gc3BlY2lmaWVkIGNvbnRleHQgb3IgaW4gY29udGV4dCBv ZiB0aGUgZWxlbWVudCB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAg ICBvIHggKG51bWJlcikgeCBwb3NpdGlvbiBvZiB0aGUgbW91c2UKKyAgICAg byB5IChudW1iZXIpIHkgcG9zaXRpb24gb2YgdGhlIG1vdXNlCisgICAgIG8g ZXZlbnQgKG9iamVjdCkgRE9NIGV2ZW50IG9iamVjdAorICAgICAqIE1vdmUg ZXZlbnQgYW5kIG1vdmUgaGFuZGxlciBhcmUgY2FsbGVkIGluIHNwZWNpZmll ZCBjb250ZXh0IG9yIGluIGNvbnRleHQgb2YgdGhlIGVsZW1lbnQgd2l0aCBm b2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgbyBkeCAobnVtYmVyKSBzaGlm dCBieSB4IGZyb20gdGhlIHN0YXJ0IHBvaW50CisgICAgIG8gZHkgKG51bWJl cikgc2hpZnQgYnkgeSBmcm9tIHRoZSBzdGFydCBwb2ludAorICAgICBvIHgg KG51bWJlcikgeCBwb3NpdGlvbiBvZiB0aGUgbW91c2UKKyAgICAgbyB5IChu dW1iZXIpIHkgcG9zaXRpb24gb2YgdGhlIG1vdXNlCisgICAgIG8gZXZlbnQg KG9iamVjdCkgRE9NIGV2ZW50IG9iamVjdAorICAgICAqIEVuZCBldmVudCBh bmQgZW5kIGhhbmRsZXIgYXJlIGNhbGxlZCBpbiBzcGVjaWZpZWQgY29udGV4 dCBvciBpbiBjb250ZXh0IG9mIHRoZSBlbGVtZW50IHdpdGggZm9sbG93aW5n IHBhcmFtZXRlcnM6CisgICAgIG8gZXZlbnQgKG9iamVjdCkgRE9NIGV2ZW50 IG9iamVjdAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisg ICAgZWxwcm90by5kcmFnID0gZnVuY3Rpb24gKG9ubW92ZSwgb25zdGFydCwg b25lbmQsIG1vdmVfc2NvcGUsIHN0YXJ0X3Njb3BlLCBlbmRfc2NvcGUpIHsK KyAgICAgICAgdmFyIGVsID0gdGhpczsKKyAgICAgICAgaWYgKCFhcmd1bWVu dHMubGVuZ3RoKSB7CisgICAgICAgICAgICB2YXIgb3JpZ1RyYW5zZm9ybTsK KyAgICAgICAgICAgIHJldHVybiBlbC5kcmFnKGZ1bmN0aW9uIChkeCwgZHkp IHsKKyAgICAgICAgICAgICAgICB0aGlzLmF0dHIoeworICAgICAgICAgICAg ICAgICAgICB0cmFuc2Zvcm06IG9yaWdUcmFuc2Zvcm0gKyAob3JpZ1RyYW5z Zm9ybSA/ICJUIiA6ICJ0IikgKyBbZHgsIGR5XQorICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAg ICAgICAgIG9yaWdUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybSgpLmxvY2Fs OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rp b24gc3RhcnQoZSwgeCwgeSkgeworICAgICAgICAgICAgKGUub3JpZ2luYWxF dmVudCB8fCBlKS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZWwu X2RyYWcueCA9IHg7CisgICAgICAgICAgICBlbC5fZHJhZy55ID0geTsKKyAg ICAgICAgICAgIGVsLl9kcmFnLmlkID0gZS5pZGVudGlmaWVyOworICAgICAg ICAgICAgIWRyYWcubGVuZ3RoICYmIFNuYXAubW91c2Vtb3ZlKGRyYWdNb3Zl KS5tb3VzZXVwKGRyYWdVcCk7CisgICAgICAgICAgICBkcmFnLnB1c2goe2Vs OiBlbCwgbW92ZV9zY29wZTogbW92ZV9zY29wZSwgc3RhcnRfc2NvcGU6IHN0 YXJ0X3Njb3BlLCBlbmRfc2NvcGU6IGVuZF9zY29wZX0pOworICAgICAgICAg ICAgb25zdGFydCAmJiBldmUub24oInNuYXAuZHJhZy5zdGFydC4iICsgZWwu aWQsIG9uc3RhcnQpOworICAgICAgICAgICAgb25tb3ZlICYmIGV2ZS5vbigi c25hcC5kcmFnLm1vdmUuIiArIGVsLmlkLCBvbm1vdmUpOworICAgICAgICAg ICAgb25lbmQgJiYgZXZlLm9uKCJzbmFwLmRyYWcuZW5kLiIgKyBlbC5pZCwg b25lbmQpOworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWcuc3RhcnQuIiAr IGVsLmlkLCBzdGFydF9zY29wZSB8fCBtb3ZlX3Njb3BlIHx8IGVsLCB4LCB5 LCBlKTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBpbml0KGUsIHgs IHkpIHsKKyAgICAgICAgICAgIGV2ZSgic25hcC5kcmFnaW5pdC4iICsgZWwu aWQsIGVsLCBlLCB4LCB5KTsKKyAgICAgICAgfQorICAgICAgICBldmUub24o InNuYXAuZHJhZ2luaXQuIiArIGVsLmlkLCBzdGFydCk7CisgICAgICAgIGVs Ll9kcmFnID0ge307CisgICAgICAgIGRyYWdnYWJsZS5wdXNoKHtlbDogZWws IHN0YXJ0OiBzdGFydCwgaW5pdDogaW5pdH0pOworICAgICAgICBlbC5tb3Vz ZWRvd24oaW5pdCk7CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9OworICAg IC8qCisgICAgICogRWxlbWVudC5vbkRyYWdPdmVyCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBTaG9ydGN1dCB0byBhc3NpZ24gZXZlbnQg aGFuZGxlciBmb3IgYGRyYWcub3Zlci48aWQ+YCBldmVudCwgd2hlcmUgYGlk YCBpcyB0aGUgZWxlbWVudCdzIGBpZGAgKHNlZSBARWxlbWVudC5pZCkKKyAg ICAgLSBmIChmdW5jdGlvbikgaGFuZGxlciBmb3IgZXZlbnQsIGZpcnN0IGFy Z3VtZW50IHdvdWxkIGJlIHRoZSBlbGVtZW50IHlvdSBhcmUgZHJhZ2dpbmcg b3ZlcgorICAgIFwqLworICAgIC8vIGVscHJvdG8ub25EcmFnT3ZlciA9IGZ1 bmN0aW9uIChmKSB7CisgICAgLy8gICAgIGYgPyBldmUub24oInNuYXAuZHJh Zy5vdmVyLiIgKyB0aGlzLmlkLCBmKSA6IGV2ZS51bmJpbmQoInNuYXAuZHJh Zy5vdmVyLiIgKyB0aGlzLmlkKTsKKyAgICAvLyB9OworICAgIC8qXAorICAg ICAqIEVsZW1lbnQudW5kcmFnCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZW1vdmVzIGFsbCBkcmFnIGV2ZW50IGhhbmRsZXJzIGZyb20g dGhlIGdpdmVuIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnVuZHJh ZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGkgPSBkcmFnZ2FibGUu bGVuZ3RoOworICAgICAgICB3aGlsZSAoaS0tKSBpZiAoZHJhZ2dhYmxlW2ld LmVsID09IHRoaXMpIHsKKyAgICAgICAgICAgIHRoaXMudW5tb3VzZWRvd24o ZHJhZ2dhYmxlW2ldLmluaXQpOworICAgICAgICAgICAgZHJhZ2dhYmxlLnNw bGljZShpLCAxKTsKKyAgICAgICAgICAgIGV2ZS51bmJpbmQoInNuYXAuZHJh Zy4qLiIgKyB0aGlzLmlkKTsKKyAgICAgICAgICAgIGV2ZS51bmJpbmQoInNu YXAuZHJhZ2luaXQuIiArIHRoaXMuaWQpOworICAgICAgICB9CisgICAgICAg ICFkcmFnZ2FibGUubGVuZ3RoICYmIFNuYXAudW5tb3VzZW1vdmUoZHJhZ01v dmUpLnVubW91c2V1cChkcmFnVXApOworICAgICAgICByZXR1cm4gdGhpczsK KyAgICB9OworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBT eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v IAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJz aW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2Ug dGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu c2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ug YXQKKy8vIAorLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ Q0VOU0UtMi4wCisvLyAKKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNh YmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8v IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVk IG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMg T1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3Ig aW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmlj IGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0 YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rp b24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7CisgICAgdmFyIGVs cHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSwKKyAgICAgICAgcHByb3RvID0g UGFwZXIucHJvdG90eXBlLAorICAgICAgICByZ3VybCA9IC9eXHMqdXJsXCgo LispXCkvLAorICAgICAgICBTdHIgPSBTdHJpbmcsCisgICAgICAgICQgPSBT bmFwLl8uJDsKKyAgICBTbmFwLmZpbHRlciA9IHt9OworICAgIC8qXAorICAg ICAqIFBhcGVyLmZpbHRlcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogQ3JlYXRlcyBhIGA8ZmlsdGVyPmAgZWxlbWVudAorICAgICAqKgor ICAgICAtIGZpbHN0ciAoc3RyaW5nKSBTVkcgZnJhZ21lbnQgb2YgZmlsdGVy IHByb3ZpZGVkIGFzIGEgc3RyaW5nCisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICAgKiBOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgZmls dGVycyBlbWJlZGRlZCBpbnRvIHRoZSBwYWdlIGluc2lkZSBhbiBlbXB0eSBT VkcgZWxlbWVudC4KKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBmID0gcGFw ZXIuZmlsdGVyKCc8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+ JyksCisgICAgIHwgICAgIGMgPSBwYXBlci5jaXJjbGUoMTAsIDEwLCAxMCku YXR0cih7CisgICAgIHwgICAgICAgICBmaWx0ZXI6IGYKKyAgICAgfCAgICAg fSk7CisgICAgXCovCisgICAgcHByb3RvLmZpbHRlciA9IGZ1bmN0aW9uIChm aWxzdHIpIHsKKyAgICAgICAgdmFyIHBhcGVyID0gdGhpczsKKyAgICAgICAg aWYgKHBhcGVyLnR5cGUgIT0gInN2ZyIpIHsKKyAgICAgICAgICAgIHBhcGVy ID0gcGFwZXIucGFwZXI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGYgPSBT bmFwLnBhcnNlKFN0cihmaWxzdHIpKSwKKyAgICAgICAgICAgIGlkID0gU25h cC5fLmlkKCksCisgICAgICAgICAgICB3aWR0aCA9IHBhcGVyLm5vZGUub2Zm c2V0V2lkdGgsCisgICAgICAgICAgICBoZWlnaHQgPSBwYXBlci5ub2RlLm9m ZnNldEhlaWdodCwKKyAgICAgICAgICAgIGZpbHRlciA9ICQoImZpbHRlciIp OworICAgICAgICAkKGZpbHRlciwgeworICAgICAgICAgICAgaWQ6IGlkLAor ICAgICAgICAgICAgZmlsdGVyVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIKKyAg ICAgICAgfSk7CisgICAgICAgIGZpbHRlci5hcHBlbmRDaGlsZChmLm5vZGUp OworICAgICAgICBwYXBlci5kZWZzLmFwcGVuZENoaWxkKGZpbHRlcik7Cisg ICAgICAgIHJldHVybiBuZXcgRWxlbWVudChmaWx0ZXIpOworICAgIH07Cisg ICAgCisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5maWx0ZXIiLCBm dW5jdGlvbiAoKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHZh ciBwID0gJCh0aGlzLm5vZGUsICJmaWx0ZXIiKTsKKyAgICAgICAgaWYgKHAp IHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IFN0cihwKS5tYXRjaChyZ3Vy bCk7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2ggJiYgU25hcC5zZWxlY3Qo bWF0Y2hbMV0pOworICAgICAgICB9CisgICAgfSk7CisgICAgZXZlLm9uKCJz bmFwLnV0aWwuYXR0ci5maWx0ZXIiLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAg ICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCAmJiB2YWx1ZS50 eXBlID09ICJmaWx0ZXIiKSB7CisgICAgICAgICAgICBldmUuc3RvcCgpOwor ICAgICAgICAgICAgdmFyIGlkID0gdmFsdWUubm9kZS5pZDsKKyAgICAgICAg ICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgICAgICAkKHZhbHVlLm5vZGUs IHtpZDogdmFsdWUuaWR9KTsKKyAgICAgICAgICAgICAgICBpZCA9IHZhbHVl LmlkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgJCh0aGlzLm5vZGUs IHsKKyAgICAgICAgICAgICAgICBmaWx0ZXI6IFNuYXAudXJsKGlkKQorICAg ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF2YWx1ZSB8 fCB2YWx1ZSA9PSAibm9uZSIpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7 CisgICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlQXR0cmlidXRlKCJmaWx0 ZXIiKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIC8qXAorICAgICAqIFNu YXAuZmlsdGVyLmJsdXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBibHVy IGZpbHRlcgorICAgICAqKgorICAgICAtIHggKG51bWJlcikgYW1vdW50IG9m IGhvcml6b250YWwgYmx1ciwgaW4gcGl4ZWxzCisgICAgIC0geSAobnVtYmVy KSAjb3B0aW9uYWwgYW1vdW50IG9mIHZlcnRpY2FsIGJsdXIsIGluIHBpeGVs cworICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAg ICA+IFVzYWdlCisgICAgIHwgdmFyIGYgPSBwYXBlci5maWx0ZXIoU25hcC5m aWx0ZXIuYmx1cig1LCAxMCkpLAorICAgICB8ICAgICBjID0gcGFwZXIuY2ly Y2xlKDEwLCAxMCwgMTApLmF0dHIoeworICAgICB8ICAgICAgICAgZmlsdGVy OiBmCisgICAgIHwgICAgIH0pOworICAgIFwqLworICAgIFNuYXAuZmlsdGVy LmJsdXIgPSBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICBpZiAoeCA9PSBu dWxsKSB7CisgICAgICAgICAgICB4ID0gMjsKKyAgICAgICAgfQorICAgICAg ICB2YXIgZGVmID0geSA9PSBudWxsID8geCA6IFt4LCB5XTsKKyAgICAgICAg cmV0dXJuIFNuYXAuZm9ybWF0KCdcPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlh dGlvbj0ie2RlZn0iLz4nLCB7CisgICAgICAgICAgICBkZWY6IGRlZgorICAg ICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLmJsdXIudG9TdHJp bmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5zaGFkb3cKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4gU1ZH IG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBzaGFkb3cgZmlsdGVyCisgICAgICoq CisgICAgIC0gZHggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250YWwgc2hp ZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4ZWxzCisgICAgIC0gZHkgKG51bWJl cikgI29wdGlvbmFsIHZlcnRpY2FsIHNoaWZ0IG9mIHRoZSBzaGFkb3csIGlu IHBpeGVscworICAgICAtIGJsdXIgKG51bWJlcikgI29wdGlvbmFsIGFtb3Vu dCBvZiBibHVyCisgICAgIC0gY29sb3IgKHN0cmluZykgI29wdGlvbmFsIGNv bG9yIG9mIHRoZSBzaGFkb3cKKyAgICAgLSBvcGFjaXR5IChudW1iZXIpICNv cHRpb25hbCBgMC4uMWAgb3BhY2l0eSBvZiB0aGUgc2hhZG93CisgICAgICog b3IKKyAgICAgLSBkeCAobnVtYmVyKSAjb3B0aW9uYWwgaG9yaXpvbnRhbCBz aGlmdCBvZiB0aGUgc2hhZG93LCBpbiBwaXhlbHMKKyAgICAgLSBkeSAobnVt YmVyKSAjb3B0aW9uYWwgdmVydGljYWwgc2hpZnQgb2YgdGhlIHNoYWRvdywg aW4gcGl4ZWxzCisgICAgIC0gY29sb3IgKHN0cmluZykgI29wdGlvbmFsIGNv bG9yIG9mIHRoZSBzaGFkb3cKKyAgICAgLSBvcGFjaXR5IChudW1iZXIpICNv cHRpb25hbCBgMC4uMWAgb3BhY2l0eSBvZiB0aGUgc2hhZG93CisgICAgICog d2hpY2ggbWFrZXMgYmx1ciBkZWZhdWx0IHRvIGA0YC4gT3IKKyAgICAgLSBk eCAobnVtYmVyKSAjb3B0aW9uYWwgaG9yaXpvbnRhbCBzaGlmdCBvZiB0aGUg c2hhZG93LCBpbiBwaXhlbHMKKyAgICAgLSBkeSAobnVtYmVyKSAjb3B0aW9u YWwgdmVydGljYWwgc2hpZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4ZWxzCisg ICAgIC0gb3BhY2l0eSAobnVtYmVyKSAjb3B0aW9uYWwgYDAuLjFgIG9wYWNp dHkgb2YgdGhlIHNoYWRvdworICAgICA9IChzdHJpbmcpIGZpbHRlciByZXBy ZXNlbnRhdGlvbgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGYgPSBwYXBl ci5maWx0ZXIoU25hcC5maWx0ZXIuc2hhZG93KDAsIDIsIDMpKSwKKyAgICAg fCAgICAgYyA9IHBhcGVyLmNpcmNsZSgxMCwgMTAsIDEwKS5hdHRyKHsKKyAg ICAgfCAgICAgICAgIGZpbHRlcjogZgorICAgICB8ICAgICB9KTsKKyAgICBc Ki8KKyAgICBTbmFwLmZpbHRlci5zaGFkb3cgPSBmdW5jdGlvbiAoZHgsIGR5 LCBibHVyLCBjb2xvciwgb3BhY2l0eSkgeworICAgICAgICBpZiAodHlwZW9m IGJsdXIgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIGNvbG9yID0gYmx1 cjsKKyAgICAgICAgICAgIG9wYWNpdHkgPSBjb2xvcjsKKyAgICAgICAgICAg IGJsdXIgPSA0OworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgY29s b3IgIT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgIG9wYWNpdHkgPSBjb2xv cjsKKyAgICAgICAgICAgIGNvbG9yID0gIiMwMDAiOworICAgICAgICB9Cisg ICAgICAgIGNvbG9yID0gY29sb3IgfHwgIiMwMDAiOworICAgICAgICBpZiAo Ymx1ciA9PSBudWxsKSB7CisgICAgICAgICAgICBibHVyID0gNDsKKyAgICAg ICAgfQorICAgICAgICBpZiAob3BhY2l0eSA9PSBudWxsKSB7CisgICAgICAg ICAgICBvcGFjaXR5ID0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHgg PT0gbnVsbCkgeworICAgICAgICAgICAgZHggPSAwOworICAgICAgICAgICAg ZHkgPSAyOworICAgICAgICB9CisgICAgICAgIGlmIChkeSA9PSBudWxsKSB7 CisgICAgICAgICAgICBkeSA9IGR4OworICAgICAgICB9CisgICAgICAgIGNv bG9yID0gU25hcC5jb2xvcihjb2xvcik7CisgICAgICAgIHJldHVybiBTbmFw LmZvcm1hdCgnPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3Rk RGV2aWF0aW9uPSJ7Ymx1cn0iLz48ZmVPZmZzZXQgZHg9IntkeH0iIGR5PSJ7 ZHl9IiByZXN1bHQ9Im9mZnNldGJsdXIiLz48ZmVGbG9vZCBmbG9vZC1jb2xv cj0ie2NvbG9yfSIvPjxmZUNvbXBvc2l0ZSBpbjI9Im9mZnNldGJsdXIiIG9w ZXJhdG9yPSJpbiIvPjxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1bmNBIHR5 cGU9ImxpbmVhciIgc2xvcGU9IntvcGFjaXR5fSIvPjwvZmVDb21wb25lbnRU cmFuc2Zlcj48ZmVNZXJnZT48ZmVNZXJnZU5vZGUvPjxmZU1lcmdlTm9kZSBp bj0iU291cmNlR3JhcGhpYyIvPjwvZmVNZXJnZT4nLCB7CisgICAgICAgICAg ICBjb2xvcjogY29sb3IsCisgICAgICAgICAgICBkeDogZHgsCisgICAgICAg ICAgICBkeTogZHksCisgICAgICAgICAgICBibHVyOiBibHVyLAorICAgICAg ICAgICAgb3BhY2l0eTogb3BhY2l0eQorICAgICAgICB9KTsKKyAgICB9Owor ICAgIFNuYXAuZmlsdGVyLnNoYWRvdy50b1N0cmluZyA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8qXAor ICAgICAqIFNuYXAuZmlsdGVyLmdyYXlzY2FsZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3VwIHN0cmlu ZyBmb3IgdGhlIGdyYXlzY2FsZSBmaWx0ZXIKKyAgICAgKioKKyAgICAgLSBh bW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRlciAoYDAuLjFgKQorICAg ICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAgIFwqLwor ICAgIFNuYXAuZmlsdGVyLmdyYXlzY2FsZSA9IGZ1bmN0aW9uIChhbW91bnQp IHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxsKSB7CisgICAgICAgICAg ICBhbW91bnQgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTbmFw LmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9 InthfSB7Yn0ge2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAge2d9IHtifSB7aH0g MCAwIDAgMCAwIDEgMCIvPicsIHsKKyAgICAgICAgICAgIGE6IDAuMjEyNiAr IDAuNzg3NCAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGI6IDAuNzE1 MiAtIDAuNzE1MiAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGM6IDAu MDcyMiAtIDAuMDcyMiAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGQ6 IDAuMjEyNiAtIDAuMjEyNiAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAg IGU6IDAuNzE1MiArIDAuMjg0OCAqICgxIC0gYW1vdW50KSwKKyAgICAgICAg ICAgIGY6IDAuMDcyMiAtIDAuMDcyMiAqICgxIC0gYW1vdW50KSwKKyAgICAg ICAgICAgIGc6IDAuMjEyNiAtIDAuMjEyNiAqICgxIC0gYW1vdW50KSwKKyAg ICAgICAgICAgIGg6IDAuMDcyMiArIDAuOTI3OCAqICgxIC0gYW1vdW50KQor ICAgICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLmdyYXlzY2Fs ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRo aXMoKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNuYXAuZmlsdGVyLnNl cGlhCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5z IGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgc2VwaWEgZmlsdGVyCisg ICAgICoqCisgICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0 ZXIgKGAwLi4xYCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50 YXRpb24KKyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5zZXBpYSA9IGZ1bmN0 aW9uIChhbW91bnQpIHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxsKSB7 CisgICAgICAgICAgICBhbW91bnQgPSAxOworICAgICAgICB9CisgICAgICAg IHJldHVybiBTbmFwLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0 cml4IiB2YWx1ZXM9InthfSB7Yn0ge2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAg e2d9IHtofSB7aX0gMCAwIDAgMCAwIDEgMCIvPicsIHsKKyAgICAgICAgICAg IGE6IDAuMzkzICsgMC42MDcgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAg ICBiOiAwLjc2OSAtIDAuNzY5ICogKDEgLSBhbW91bnQpLAorICAgICAgICAg ICAgYzogMC4xODkgLSAwLjE4OSAqICgxIC0gYW1vdW50KSwKKyAgICAgICAg ICAgIGQ6IDAuMzQ5IC0gMC4zNDkgKiAoMSAtIGFtb3VudCksCisgICAgICAg ICAgICBlOiAwLjY4NiArIDAuMzE0ICogKDEgLSBhbW91bnQpLAorICAgICAg ICAgICAgZjogMC4xNjggLSAwLjE2OCAqICgxIC0gYW1vdW50KSwKKyAgICAg ICAgICAgIGc6IDAuMjcyIC0gMC4yNzIgKiAoMSAtIGFtb3VudCksCisgICAg ICAgICAgICBoOiAwLjUzNCAtIDAuNTM0ICogKDEgLSBhbW91bnQpLAorICAg ICAgICAgICAgaTogMC4xMzEgKyAwLjg2OSAqICgxIC0gYW1vdW50KQorICAg ICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLnNlcGlhLnRvU3Ry aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOwor ICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuc2F0dXJhdGUK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4g U1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBzYXR1cmF0ZSBmaWx0ZXIKKyAg ICAgKioKKyAgICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRl ciAoYDAuLjFgKQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRh dGlvbgorICAgIFwqLworICAgIFNuYXAuZmlsdGVyLnNhdHVyYXRlID0gZnVu Y3Rpb24gKGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwp IHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJz YXR1cmF0ZSIgdmFsdWVzPSJ7YW1vdW50fSIvPicsIHsKKyAgICAgICAgICAg IGFtb3VudDogMSAtIGFtb3VudAorICAgICAgICB9KTsKKyAgICB9OworICAg IFNuYXAuZmlsdGVyLnNhdHVyYXRlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkg eworICAgICAgICByZXR1cm4gdGhpcygpOworICAgIH07CisgICAgLypcCisg ICAgICogU25hcC5maWx0ZXIuaHVlUm90YXRlCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAgc3RyaW5n IGZvciB0aGUgaHVlLXJvdGF0ZSBmaWx0ZXIKKyAgICAgKioKKyAgICAgLSBh bmdsZSAobnVtYmVyKSBhbmdsZSBvZiByb3RhdGlvbgorICAgICA9IChzdHJp bmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAgIFwqLworICAgIFNuYXAu ZmlsdGVyLmh1ZVJvdGF0ZSA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgICAg ICBhbmdsZSA9IGFuZ2xlIHx8IDA7CisgICAgICAgIHJldHVybiBTbmFwLmZv cm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0iaHVlUm90YXRlIiB2YWx1ZXM9 InthbmdsZX0iLz4nLCB7CisgICAgICAgICAgICBhbmdsZTogYW5nbGUKKyAg ICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5odWVSb3RhdGUu dG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz KCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5pbnZl cnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMg YW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBpbnZlcnQgZmlsdGVyCisg ICAgICoqCisgICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0 ZXIgKGAwLi4xYCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50 YXRpb24KKyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5pbnZlcnQgPSBmdW5j dGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkg eworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorLy8gICAg ICAgIDxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSItMSAw IDAgMCAxICAwIC0xIDAgMCAxICAwIDAgLTEgMCAxICAwIDAgMCAxIDAiIGNv bG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIvPgorICAgICAgICBy ZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1 bmNSIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3VudH0ge2Ftb3Vu dDJ9Ii8+PGZlRnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSJ7YW1v dW50fSB7YW1vdW50Mn0iLz48ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVW YWx1ZXM9InthbW91bnR9IHthbW91bnQyfSIvPjwvZmVDb21wb25lbnRUcmFu c2Zlcj4nLCB7CisgICAgICAgICAgICBhbW91bnQ6IGFtb3VudCwKKyAgICAg ICAgICAgIGFtb3VudDI6IDEgLSBhbW91bnQKKyAgICAgICAgfSk7CisgICAg fTsKKyAgICBTbmFwLmZpbHRlci5pbnZlcnQudG9TdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBTbmFwLmZpbHRlci5icmlnaHRuZXNzCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAg c3RyaW5nIGZvciB0aGUgYnJpZ2h0bmVzcyBmaWx0ZXIKKyAgICAgKioKKyAg ICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRlciAoYDAuLjFg KQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAg IFwqLworICAgIFNuYXAuZmlsdGVyLmJyaWdodG5lc3MgPSBmdW5jdGlvbiAo YW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkgeworICAg ICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1 cm4gU25hcC5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1bmNS IHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9Ii8+PGZlRnVuY0cgdHlw ZT0ibGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iLz48ZmVGdW5jQiB0eXBlPSJs aW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjwvZmVDb21wb25lbnRUcmFuc2Zl cj4nLCB7CisgICAgICAgICAgICBhbW91bnQ6IGFtb3VudAorICAgICAgICB9 KTsKKyAgICB9OworICAgIFNuYXAuZmlsdGVyLmJyaWdodG5lc3MudG9TdHJp bmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5jb250cmFzdAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBT VkcgbWFya3VwIHN0cmluZyBmb3IgdGhlIGNvbnRyYXN0IGZpbHRlcgorICAg ICAqKgorICAgICAtIGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2YgZmlsdGVy IChgMC4uMWApCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2VudGF0 aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuY29udHJhc3QgPSBmdW5j dGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkg eworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxm ZUZ1bmNSIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNl cHQ9InthbW91bnQyfSIvPjxmZUZ1bmNHIHR5cGU9ImxpbmVhciIgc2xvcGU9 InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxmZUZ1bmNCIHR5 cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91 bnQyfSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4nLCB7CisgICAgICAgICAg ICBhbW91bnQ6IGFtb3VudCwKKyAgICAgICAgICAgIGFtb3VudDI6IC41IC0g YW1vdW50IC8gMgorICAgICAgICB9KTsKKyAgICB9OworICAgIFNuYXAuZmls dGVyLmNvbnRyYXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gdGhpcygpOworICAgIH07Cit9KTsKKworLy8gQ29weXJpZ2h0 IChjKSAyMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln aHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFj aGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8g eW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5j ZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5 IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUu b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVp cmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n LCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2Ug aXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhP VVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo ZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZv ciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z IGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFw LnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2Is IEZyYWdtZW50KSB7CisgICAgdmFyIGJveCA9IFNuYXAuXy5ib3gsCisgICAg ICAgIGlzID0gU25hcC5pcywKKyAgICAgICAgZmlyc3RMZXR0ZXIgPSAvXlte YS16XSooW3RibWxyY10pL2ksCisgICAgICAgIHRvU3RyaW5nID0gZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgcmV0dXJuICJUIiArIHRoaXMuZHggKyAi LCIgKyB0aGlzLmR5OworICAgICAgICB9OworICAgIC8qXAorICAgICAqIEVs ZW1lbnQuZ2V0QWxpZ24KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJldHVybnMgc2hpZnQgbmVlZGVkIHRvIGFsaWduIHRoZSBlbGVtZW50 IHJlbGF0aXZlbHkgdG8gZ2l2ZW4gZWxlbWVudC4KKyAgICAgKiBJZiBubyBl bGVtZW50cyBzcGVjaWZpZWQsIHBhcmVudCBgPHN2Zz5gIGNvbnRhaW5lciB3 aWxsIGJlIHVzZWQuCisgICAgIC0gZWwgKG9iamVjdCkgQG9wdGlvbmFsIGFs aWdubWVudCBlbGVtZW50CisgICAgIC0gd2F5IChzdHJpbmcpIG9uZSBvZiBz aXggdmFsdWVzOiBgInRvcCJgLCBgIm1pZGRsZSJgLCBgImJvdHRvbSJgLCBg ImxlZnQiYCwgYCJjZW50ZXIiYCwgYCJyaWdodCJgCisgICAgID0gKG9iamVj dHxzdHJpbmcpIE9iamVjdCBpbiBmb3JtYXQgYHtkeDogLCBkeTogfWAgYWxz byBoYXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYXMgYSB0cmFuc2Zvcm1h dGlvbiBzdHJpbmcKKyAgICAgPiBVc2FnZQorICAgICB8IGVsLnRyYW5zZm9y bShlbC5nZXRBbGlnbihlbDIsICJ0b3AiKSk7CisgICAgICogb3IKKyAgICAg fCB2YXIgZHkgPSBlbC5nZXRBbGlnbihlbDIsICJ0b3AiKS5keTsKKyAgICBc Ki8KKyAgICBFbGVtZW50LnByb3RvdHlwZS5nZXRBbGlnbiA9IGZ1bmN0aW9u IChlbCwgd2F5KSB7CisgICAgICAgIGlmICh3YXkgPT0gbnVsbCAmJiBpcyhl bCwgInN0cmluZyIpKSB7CisgICAgICAgICAgICB3YXkgPSBlbDsKKyAgICAg ICAgICAgIGVsID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBlbCA9IGVs IHx8IHRoaXMucGFwZXI7CisgICAgICAgIHZhciBieCA9IGVsLmdldEJCb3gg PyBlbC5nZXRCQm94KCkgOiBib3goZWwpLAorICAgICAgICAgICAgYmIgPSB0 aGlzLmdldEJCb3goKSwKKyAgICAgICAgICAgIG91dCA9IHt9OworICAgICAg ICB3YXkgPSB3YXkgJiYgd2F5Lm1hdGNoKGZpcnN0TGV0dGVyKTsKKyAgICAg ICAgd2F5ID0gd2F5ID8gd2F5WzFdLnRvTG93ZXJDYXNlKCkgOiAiYyI7Cisg ICAgICAgIHN3aXRjaCAod2F5KSB7CisgICAgICAgICAgICBjYXNlICJ0IjoK KyAgICAgICAgICAgICAgICBvdXQuZHggPSAwOworICAgICAgICAgICAgICAg IG91dC5keSA9IGJ4LnkgLSBiYi55OworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBjYXNlICJiIjoKKyAgICAgICAgICAgICAgICBvdXQuZHgg PSAwOworICAgICAgICAgICAgICAgIG91dC5keSA9IGJ4LnkyIC0gYmIueTI7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIm0iOgor ICAgICAgICAgICAgICAgIG91dC5keCA9IDA7CisgICAgICAgICAgICAgICAg b3V0LmR5ID0gYnguY3kgLSBiYi5jeTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgY2FzZSAibCI6CisgICAgICAgICAgICAgICAgb3V0LmR4 ID0gYngueCAtIGJiLng7CisgICAgICAgICAgICAgICAgb3V0LmR5ID0gMDsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAiciI6Cisg ICAgICAgICAgICAgICAgb3V0LmR4ID0gYngueDIgLSBiYi54MjsKKyAgICAg ICAgICAgICAgICBvdXQuZHkgPSAwOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG91dC5keCA9 IGJ4LmN4IC0gYmIuY3g7CisgICAgICAgICAgICAgICAgb3V0LmR5ID0gMDsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG91dC50 b1N0cmluZyA9IHRvU3RyaW5nOworICAgICAgICByZXR1cm4gb3V0OworICAg IH07CisgICAgLypcCisgICAgICogRWxlbWVudC5hbGlnbgorICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogQWxpZ25zIHRoZSBlbGVtZW50IHJl bGF0aXZlbHkgdG8gZ2l2ZW4gb25lIHZpYSB0cmFuc2Zvcm1hdGlvbi4KKyAg ICAgKiBJZiBubyBlbGVtZW50cyBzcGVjaWZpZWQsIHBhcmVudCBgPHN2Zz5g IGNvbnRhaW5lciB3aWxsIGJlIHVzZWQuCisgICAgIC0gZWwgKG9iamVjdCkg QG9wdGlvbmFsIGFsaWdubWVudCBlbGVtZW50CisgICAgIC0gd2F5IChzdHJp bmcpIG9uZSBvZiBzaXggdmFsdWVzOiBgInRvcCJgLCBgIm1pZGRsZSJgLCBg ImJvdHRvbSJgLCBgImxlZnQiYCwgYCJjZW50ZXIiYCwgYCJyaWdodCJgCisg ICAgID0gKG9iamVjdCkgdGhpcyBlbGVtZW50CisgICAgID4gVXNhZ2UKKyAg ICAgfCBlbC5hbGlnbihlbDIsICJ0b3AiKTsKKyAgICAgKiBvcgorICAgICB8 IGVsLmFsaWduKCJtaWRkbGUiKTsKKyAgICBcKi8KKyAgICBFbGVtZW50LnBy b3RvdHlwZS5hbGlnbiA9IGZ1bmN0aW9uIChlbCwgd2F5KSB7CisgICAgICAg IHJldHVybiB0aGlzLnRyYW5zZm9ybSgiLi4uIiArIHRoaXMuZ2V0QWxpZ24o ZWwsIHdheSkpOworICAgIH07Cit9KTsKKworcmV0dXJuIFNuYXA7Cit9KSk7 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3RlbXBsYXRlcy9kZW1v X2V4cGxhaW4uaHRtbCBiL3dlYi9wZ2FkbWluL21pc2MvdGVtcGxhdGVzL2Rl bW9fZXhwbGFpbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjk5YjQ5ZDkKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1p bi9taXNjL3RlbXBsYXRlcy9kZW1vX2V4cGxhaW4uaHRtbApAQCAtMCwwICsx LDE4MzYgQEAKK3slIGV4dGVuZHMgImJhc2UuaHRtbCIgJX0KK3slIGJsb2Nr IHRpdGxlICV9e3sgY29uZmlnLkFQUF9OQU1FIH19eyUgZW5kYmxvY2sgJX0K K3slIGJsb2NrIGluaXRfc2NyaXB0ICV9Cit0cnkgeworICByZXF1aXJlKAor ICAgIFsncGdhZG1pbicsICdwZ2FkbWluLm1pc2MuZXhwbGFpbiddLAorICAg IGZ1bmN0aW9uKHBnQWRtaW4sIHBnRXhwbGFpbikgewordmFyIGRhdGEgPSBb CisgIHsKKyAgICAiUGxhbiI6IHsKKyAgICAgICJOb2RlIFR5cGUiOiAiQXBw ZW5kIiwKKyAgICAgICJTdGFydHVwIENvc3QiOiAzMTQuNTgsCisgICAgICAi VG90YWwgQ29zdCI6IDU0MzEuMzYsCisgICAgICAiUGxhbiBSb3dzIjogMTU3 MTAsCisgICAgICAiUGxhbiBXaWR0aCI6IDI4NywKKyAgICAgICJQbGFucyI6 IFsKKyAgICAgICAgeworICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCBK b2luIiwKKyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJNZW1i ZXIiLAorICAgICAgICAgICJKb2luIFR5cGUiOiAiUmlnaHQiLAorICAgICAg ICAgICJTdGFydHVwIENvc3QiOiAzMTQuNTgsCisgICAgICAgICAgIlRvdGFs IENvc3QiOiA0MDguNTIsCisgICAgICAgICAgIlBsYW4gUm93cyI6IDM2NTUs CisgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNDQsCisgICAgICAgICAgIkhh c2ggQ29uZCI6ICIoKGMucHJvYmVfaWQgPSBwLmlkKSBBTkQgKGMuYWdlbnRf aWQgPSBhLmlkKSkiLAorICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIs CisgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVy IiwKKyAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfY29u ZmlnX2FnZW50IiwKKyAgICAgICAgICAgICAgIkFsaWFzIjogImMiLAorICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiAyNy4zMCwKKyAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDE3MzAsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTcK KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICJOb2RlIFR5cGUiOiAiSGFzaCIsCisgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDI1OS43NiwKKyAgICAgICAgICAgICAgIlRvdGFsIENvc3Qi OiAyNTkuNzYsCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAzNjU1LAor ICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDMzNSwKKyAgICAgICAgICAg ICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAg ICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAg ICAgICAgICJUb3RhbCBDb3N0IjogMjU5Ljc2LAorICAgICAgICAgICAgICAg ICAgIlBsYW4gUm93cyI6IDM2NTUsCisgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDMzNSwKKyAgICAgICAgICAgICAgICAgICJKb2luIEZpbHRl ciI6ICIoKChwLmFnZW50X2NhcGFiaWxpdHkgSVMgTlVMTCkgT1IgKHAuYWdl bnRfY2FwYWJpbGl0eSA9IEFOWSAoYS5hZ2VudF9jYXBhYmlsaXR5X2xpc3Qp KSkgQU5EICgocC5jb2xsZWN0aW9uX21ldGhvZCA8PiBBTEwgKCd7Yix3fSc6 OmJwY2hhcltdKSkgT1IgKChwLmNvbGxlY3Rpb25fbWV0aG9kID0gJ2InOjpi cGNoYXIpIEFORCAoYS5hZ2VudF9jYXBhYmlsaXR5X2xpc3QgQD4gJ3thbGxv d19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQgKChzdHJwb3MoYS5wbGF0 Zm9ybSwgcC5wbGF0Zm9ybSkgPD4gMCkgT1IgKChhLnBsYXRmb3JtICF+ICd3 aW5kb3dzJzo6dGV4dCkgQU5EIChwLnBsYXRmb3JtID0gJ3VuaXgnOjp0ZXh0 KSkpKSBPUiAoKHAuY29sbGVjdGlvbl9tZXRob2QgPSAndyc6OmJwY2hhcikg QU5EIChzdHJwb3MoYS5wbGF0Zm9ybSwgJ3dpbmRvd3MnOjp0ZXh0KSA8PiAw KSkpKSIsCisgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBU eXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGFy ZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAg ICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnQiLAorICAgICAgICAgICAg ICAgICAgICAgICJBbGlhcyI6ICJhIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAg ICAiVG90YWwgQ29zdCI6IDE0LjAwLAorICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiA2OQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIk5vZGUg VHlwZSI6ICJNYXRlcmlhbGl6ZSIsCisgICAgICAgICAgICAgICAgICAgICAg IlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAg ICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAg ICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43OCwKKyAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBSb3dzIjogMTIsCisgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gV2lkdGgiOiAzNzcsCisgICAgICAgICAgICAgICAgICAgICAg IlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVs YXRpb24gTmFtZSI6ICJwcm9iZSIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICJBbGlhcyI6ICJwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICJUb3RhbCBDb3N0IjogNS43MiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDEyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDM3NywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIkZpbHRlciI6ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRhcmdldF90 eXBlX2lkID0gMTAwKSkiCisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAg ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIk5vZGUgVHlwZSI6ICJI YXNoIEpvaW4iLAorICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog Ik1lbWJlciIsCisgICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0IiwKKyAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogMjgzMy43NSwKKyAgICAgICAgICAi VG90YWwgQ29zdCI6IDMxMzIuNjIsCisgICAgICAgICAgIlBsYW4gUm93cyI6 IDM5NjAsCisgICAgICAgICAgIlBsYW4gV2lkdGgiOiA5MTMsCisgICAgICAg ICAgIkhhc2ggQ29uZCI6ICIoKHBfMS5pZCA9IHBzdi5wcm9iZV9pZCkgQU5E IChzZC5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHBzdi5zZXJ2ZXJfdmVyc2lvbl9p ZCkpIiwKKyAgICAgICAgICAiRmlsdGVyIjogIihwXzEuYW55X3NlcnZlcl92 ZXJzaW9uIE9SIChwc3YucHJvYmVfaWQgSVMgTk9UIE5VTEwpKSIsCisgICAg ICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIk1lcmdlIEpvaW4iLAorICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICJKb2luIFR5cGUiOiAiUmlnaHQiLAorICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogMjgyMi4xOCwKKyAgICAgICAgICAgICAgIlRvdGFsIENvc3Qi OiAyOTMyLjE5LAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMzk2MCwK KyAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzODUsCisgICAgICAgICAg ICAgICJNZXJnZSBDb25kIjogIigoY18xLnByb2JlX2lkID0gcF8xLmlkKSBB TkQgKGNfMS5zZXJ2ZXJfaWQgPSBiLnNlcnZlcl9pZCkpIiwKKyAgICAgICAg ICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAg ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisg ICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIs CisgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJwcm9iZV9jb25m aWdfc2VydmVyX3BrZXkiLAorICAgICAgICAgICAgICAgICAgIlJlbGF0aW9u IE5hbWUiOiAicHJvYmVfY29uZmlnX3NlcnZlciIsCisgICAgICAgICAgICAg ICAgICAiQWxpYXMiOiAiY18xIiwKKyAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAwLjE1LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiA3MC4xMCwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAx NzMwLAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxNworICAg ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJTb3J0IiwKKyAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAg ICAgICAgICAgICJTdGFydHVwIENvc3QiOiAyODIyLjAzLAorICAgICAgICAg ICAgICAgICAgIlRvdGFsIENvc3QiOiAyODMxLjkzLAorICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDM5NjAsCisgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDM3NiwKKyAgICAgICAgICAgICAgICAgICJTb3J0IEtl eSI6IFsicF8xLmlkIiwgImIuc2VydmVyX2lkIl0sCisgICAgICAgICAgICAg ICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2ggSm9pbiIsCisg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi T3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAyMzQ0Ljg5LAorICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0 IjogMjU4NS4zOSwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dz IjogMzk2MCwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6 IDM3NiwKKyAgICAgICAgICAgICAgICAgICAgICAiSGFzaCBDb25kIjogIihi LnNlcnZlcl9pZCA9IHMuaWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAi Sm9pbiBGaWx0ZXIiOiAiKCgocF8xLmFnZW50X2NhcGFiaWxpdHkgSVMgTlVM TCkgT1IgKHBfMS5hZ2VudF9jYXBhYmlsaXR5ID0gQU5ZIChhXzEuYWdlbnRf Y2FwYWJpbGl0eV9saXN0KSkpIEFORCAoKHBfMS5jb2xsZWN0aW9uX21ldGhv ZCA8PiAnYic6OmJwY2hhcikgT1IgKChwXzEuY29sbGVjdGlvbl9tZXRob2Qg PSAnYic6OmJwY2hhcikgQU5EIChhXzEuYWdlbnRfY2FwYWJpbGl0eV9saXN0 IEA+ICd7YWxsb3dfYmF0Y2hfcHJvYmVzfSc6OnRleHRbXSkgQU5EICgoc3Ry cG9zKGFfMS5wbGF0Zm9ybSwgcF8xLnBsYXRmb3JtKSA8PiAwKSBPUiAoKGFf MS5wbGF0Zm9ybSAhfiAnd2luZG93cyc6OnRleHQpIEFORCAocF8xLnBsYXRm b3JtID0gJ3VuaXgnOjp0ZXh0KSkpKSkpIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCBK b2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMzguOTAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJUb3RhbCBDb3N0IjogNjMuOTAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA0MDAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTA5LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAiSGFzaCBDb25kIjogIihiLnNlcnZlcl9pZCA9IHNk LnNlcnZlcl9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIEpv aW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMTkuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM4LjUw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdp ZHRoIjogMTA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhh c2ggQ29uZCI6ICIoYi5hZ2VudF9pZCA9IGFfMS5pZCkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJSZWxhdGlvbiBOYW1lIjogImFnZW50X3NlcnZlcl9iaW5kaW5nIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAi YiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlRvdGFsIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAi OiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDE0LjAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA0MDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgi OiA2OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxh dGlvbiBOYW1lIjogImFnZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkFsaWFzIjogImFfMSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90 YWwgQ29zdCI6IDE0LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDY5CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2giLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29z dCI6IDE0LjQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAxNC40MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFJvd3MiOiA0NDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRl ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0 aW9uIE5hbWUiOiAic2VydmVyX2luZm8iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJBbGlhcyI6ICJzZCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3Qi OiAxNC40MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogNDQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogOAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBd CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICB9LAor ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2giLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAyMjcw LjI0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDIyNzAuMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiAyODYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDM4MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5z IjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExv b3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMjI3MC4y NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiAyODYwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g V2lkdGgiOiAzODIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Sm9pbiBGaWx0ZXIiOiAiKE5PVCAoU3ViUGxhbiAxKSkiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJSZWxhdGlvbiBOYW1lIjogInNlcnZlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInMiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBD b3N0IjogMTIuMjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gUm93cyI6IDIyMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiTWF0ZXJpYWxpemUiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVy IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDUuODUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDI2LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzc4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJT ZXEgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUi OiAicHJvYmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiQWxpYXMiOiAicF8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog NS43MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDI2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICIoKE5PVCBkZWxl dGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0gMjAwKSkiCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJSZXN1bHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIlN1YlBsYW4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdWJwbGFuIE5hbWUiOiAi U3ViUGxhbiAxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDAuNTEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEwMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6 IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg IF0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg XQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgXQorICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIk5vZGUg VHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlv bnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0 IjogOC4yMywKKyAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4LjIzLAor ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMjIzLAorICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDU0MSwKKyAgICAgICAgICAgICAgIlBsYW5zIjog WworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAgIlBhcmVu dCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAg IlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfc2VydmVyX3ZlcnNpb24iLAorICAg ICAgICAgICAgICAgICAgIkFsaWFzIjogInBzdiIsCisgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAg ICJUb3RhbCBDb3N0IjogOC4yMywKKyAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiAyMjMsCisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6 IDU0MQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgXQorICAg ICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAg eworICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCBKb2luIiwKKyAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJNZW1iZXIiLAorICAgICAg ICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDE3My4wOCwKKyAgICAgICAgICAiVG90YWwgQ29zdCI6IDEwMzIu ODYsCisgICAgICAgICAgIlBsYW4gUm93cyI6IDc5OTcsCisgICAgICAgICAg IlBsYW4gV2lkdGgiOiA5MTMsCisgICAgICAgICAgIkhhc2ggQ29uZCI6ICIo KHBfMi5pZCA9IHBzdl8xLnByb2JlX2lkKSBBTkQgKHNkXzEuc2VydmVyX3Zl cnNpb25faWQgPSBwc3ZfMS5zZXJ2ZXJfdmVyc2lvbl9pZCkpIiwKKyAgICAg ICAgICAiRmlsdGVyIjogIihwXzIuYW55X3NlcnZlcl92ZXJzaW9uIE9SIChw c3ZfMS5wcm9iZV9pZCBJUyBOT1QgTlVMTCkpIiwKKyAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJOb2RlIFR5 cGUiOiAiTWVyZ2UgSm9pbiIsCisgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgIkpvaW4gVHlw ZSI6ICJMZWZ0IiwKKyAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDE2 MS41MCwKKyAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA2MzkuODksCisg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA3OTk3LAorICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDM4NSwKKyAgICAgICAgICAgICAgIk1lcmdlIENv bmQiOiAiKChiXzEuc2VydmVyX2lkID0gY18yLnNlcnZlcl9pZCkgQU5EIChv Y2QuZGF0YWJhc2VfbmFtZSA9IChjXzIuZGF0YWJhc2VfbmFtZSk6OnRleHQp KSIsCisgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIocF8yLmlkID0g Y18yLnByb2JlX2lkKSIsCisgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAg ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBl IjogIk1lcmdlIEpvaW4iLAorICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgIkpv aW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogODkuNjYsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29z dCI6IDUxNy43NiwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA3 OTk3LAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNzYsCisg ICAgICAgICAgICAgICAgICAiTWVyZ2UgQ29uZCI6ICIob2NkLnNlcnZlcl9p ZCA9IGJfMS5zZXJ2ZXJfaWQpIiwKKyAgICAgICAgICAgICAgICAgICJQbGFu cyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3 YXJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJv Y19kYXRhYmFzZV9wa2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAiUmVs YXRpb24gTmFtZSI6ICJvY19kYXRhYmFzZSIsCisgICAgICAgICAgICAgICAg ICAgICAgIkFsaWFzIjogIm9jZCIsCisgICAgICAgICAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAg IlRvdGFsIENvc3QiOiA1NS40MCwKKyAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogMzYsCisgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6 ICJjb25uZWN0aW9uc19hbGxvd2VkIgorICAgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJNYXRlcmlhbGl6ZSIsCisgICAgICAgICAgICAg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA4OS41MSwKKyAg ICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM1Mi4xMywKKyAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDI2NSwKKyAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM0NCwKKyAgICAgICAg ICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogODkuNTEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMzQxLjQ3LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDI2NSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNDQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIo KChwXzIuYWdlbnRfY2FwYWJpbGl0eSBJUyBOVUxMKSBPUiAocF8yLmFnZW50 X2NhcGFiaWxpdHkgPSBBTlkgKGFfMi5hZ2VudF9jYXBhYmlsaXR5X2xpc3Qp KSkgQU5EICgocF8yLmNvbGxlY3Rpb25fbWV0aG9kIDw+ICdiJzo6YnBjaGFy KSBPUiAoKHBfMi5jb2xsZWN0aW9uX21ldGhvZCA9ICdiJzo6YnBjaGFyKSBB TkQgKGFfMi5hZ2VudF9jYXBhYmlsaXR5X2xpc3QgQD4gJ3thbGxvd19iYXRj aF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQgKChzdHJwb3MoYV8yLnBsYXRmb3Jt LCBwXzIucGxhdGZvcm0pIDw+IDApIE9SICgoYV8yLnBsYXRmb3JtICF+ICd3 aW5kb3dzJzo6dGV4dCkgQU5EIChwXzIucGxhdGZvcm0gPSAndW5peCc6OnRl eHQpKSkpKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMi OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2lu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogODkuNTEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDk3LjcxLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQw MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogNzcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2Ug Q29uZCI6ICIoYl8xLnNlcnZlcl9pZCA9IHNkXzEuc2VydmVyX2lkKSIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNvcnQiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogNTUuNzksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA1Ni43OSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog NDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFdpZHRoIjogNzMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlNvcnQgS2V5IjogWyJiXzEuc2VydmVyX2lkIl0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2ggSm9p biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ YXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAxOS4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAzOC41MCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQwMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g V2lkdGgiOiA3MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkhhc2ggQ29uZCI6ICIoYl8xLmFnZW50X2lkID0gYV8yLmlkKSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu cyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlw IjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogImFnZW50X3NlcnZlcl9iaW5k aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJBbGlhcyI6ICJiXzEiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDE0LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQwMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogOAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUg VHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT dGFydHVwIENvc3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTQuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogNDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBsYW4gV2lkdGgiOiA2OSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2Rl IFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog Ik91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJhZ2VudCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFz IjogImFfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAxNC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogNjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVw IENvc3QiOiAzMy43MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDM0LjgyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA0NDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3J0IEtleSI6IFsi c2RfMS5zZXJ2ZXJfaWQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJSZWxhdGlvbiBOYW1lIjogInNlcnZlcl9pbmZvIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInNk XzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxNC40MCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQ0 MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk1hdGVy aWFsaXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA1Ljc5LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDE0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAz NzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBb CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBT Y2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFy ZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmUiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJw XzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJUb3RhbCBDb3N0IjogNS43MiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMTQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNzgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICIo KE5PVCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0gMzAwKSkiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBdCisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIF0KKyAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogNzEuODQsCisgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDc0LjQyLAorICAgICAgICAgICAgICAg ICAgIlBsYW4gUm93cyI6IDEwMzAsCisgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDQ5LAorICAgICAgICAgICAgICAgICAgIlNvcnQgS2V5Ijog WyJjXzIuc2VydmVyX2lkIiwgImNfMi5kYXRhYmFzZV9uYW1lIl0sCisgICAg ICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBT Y2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9u c2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0 aW9uIE5hbWUiOiAicHJvYmVfY29uZmlnX2RhdGFiYXNlIiwKKyAgICAgICAg ICAgICAgICAgICAgICAiQWxpYXMiOiAiY18yIiwKKyAgICAgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDIwLjMwLAorICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiAxMDMwLAorICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogNDkKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAg ICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogOC4yMywKKyAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiA4LjIzLAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog MjIzLAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDU0MSwKKyAgICAg ICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAor ICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfc2Vy dmVyX3ZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInBz dl8xIiwKKyAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAw LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4LjIzLAorICAg ICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDIyMywKKyAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNTQxCisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgICAgXQor ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIk5vZGUgVHlwZSI6 ICJIYXNoIEpvaW4iLAorICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlw IjogIk1lbWJlciIsCisgICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0IiwK KyAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMTQxLjkxLAorICAgICAgICAg ICJUb3RhbCBDb3N0IjogMTk1LjIyLAorICAgICAgICAgICJQbGFuIFJvd3Mi OiA2NiwKKyAgICAgICAgICAiUGxhbiBXaWR0aCI6IDk0NSwKKyAgICAgICAg ICAiSGFzaCBDb25kIjogIigocF8zLmlkID0gcHN2XzIucHJvYmVfaWQpIEFO RCAoc2RfMi5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHBzdl8yLnNlcnZlcl92ZXJz aW9uX2lkKSkiLAorICAgICAgICAgICJGaWx0ZXIiOiAiKHBfMy5hbnlfc2Vy dmVyX3ZlcnNpb24gT1IgKHBzdl8yLnByb2JlX2lkIElTIE5PVCBOVUxMKSki LAorICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIEpvaW4iLAorICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAg ICAgICAgICJKb2luIFR5cGUiOiAiUmlnaHQiLAorICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMTMwLjM0LAorICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDE4MC41MCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDY2 LAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQxNywKKyAgICAgICAg ICAgICAgIkhhc2ggQ29uZCI6ICIoKGNfMy5wcm9iZV9pZCA9IHBfMy5pZCkg QU5EIChjXzMuc2VydmVyX2lkID0gYl8yLnNlcnZlcl9pZCkgQU5EICgoY18z LmRhdGFiYXNlX25hbWUpOjp0ZXh0ID0gb2MuZGF0YWJhc2VfbmFtZSkgQU5E ICgoY18zLnNjaGVtYV9uYW1lKTo6dGV4dCA9IG9jLnNjaGVtYV9uYW1lKSki LAorICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIs CisgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJP dXRlciIsCisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJw cm9iZV9jb25maWdfc2NoZW1hIiwKKyAgICAgICAgICAgICAgICAgICJBbGlh cyI6ICJjXzMiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6 IDAuMDAsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDE3LjMw LAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDczMCwKKyAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogODEKKyAgICAgICAgICAgICAg ICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiSGFzaCIsCisgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMTI5LjAyLAorICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAxMjkuMDIsCisgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogNjYsCisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQw OCwKKyAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogOTYuMzUsCisgICAgICAgICAgICAgICAg ICAgICAgIlRvdGFsIENvc3QiOiAxMjkuMDIsCisgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDY2LAorICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFdpZHRoIjogNDA4LAorICAgICAgICAgICAgICAgICAgICAgICJK b2luIEZpbHRlciI6ICIoKChwXzMuYWdlbnRfY2FwYWJpbGl0eSBJUyBOVUxM KSBPUiAocF8zLmFnZW50X2NhcGFiaWxpdHkgPSBBTlkgKGFfMy5hZ2VudF9j YXBhYmlsaXR5X2xpc3QpKSkgQU5EICgocF8zLmNvbGxlY3Rpb25fbWV0aG9k IDw+ICdiJzo6YnBjaGFyKSBPUiAoKHBfMy5jb2xsZWN0aW9uX21ldGhvZCA9 ICdiJzo6YnBjaGFyKSBBTkQgKGFfMy5hZ2VudF9jYXBhYmlsaXR5X2xpc3Qg QD4gJ3thbGxvd19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQgKChzdHJw b3MoYV8zLnBsYXRmb3JtLCBwXzMucGxhdGZvcm0pIDw+IDApIE9SICgoYV8z LnBsYXRmb3JtICF+ICd3aW5kb3dzJzo6dGV4dCkgQU5EIChwXzMucGxhdGZv cm0gPSAndW5peCc6OnRleHQpKSkpKSkiLAorICAgICAgICAgICAgICAgICAg ICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQg TG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIkpvaW4gVHlwZSI6ICJMZWZ0IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDk2LjM1LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiVG90YWwgQ29zdCI6IDExOS43MSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDE0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDE0MSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJ bm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogOTYuMjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVG90YWwgQ29zdCI6IDExNS43MiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFJvd3MiOiAxNCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTM3LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIEpvaW4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlw IjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogOTYuMDUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxMTEu NjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g Um93cyI6IDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFdpZHRoIjogNzIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkhhc2ggQ29uZCI6ICIoYl8yLnNlcnZlcl9pZCA9IG9jZF8x LnNlcnZlcl9pZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog Ik91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnRfc2VydmVyX2JpbmRpbmciLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMi OiAiYl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTQuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiA0MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFdpZHRoIjogOAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJIYXNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3Rh cnR1cCBDb3N0IjogOTUuOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogOTUuOTcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA3LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2luIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDMzLjY4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA5NS45NywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gV2lkdGgiOiA3MiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJNZXJnZSBDb25kIjogIigob2Muc2Vy dmVyX2lkID0gb2NkXzEuc2VydmVyX2lkKSBBTkQgKG9jLmRhdGFiYXNlX25h bWUgPSBvY2RfMS5kYXRhYmFzZV9uYW1lKSkiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJJbmRleCBPbmx5IFNjYW4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2Fy ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkluZGV4IE5hbWUiOiAib2Nfc2NoZW1hX3BrZXkiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxh dGlvbiBOYW1lIjogIm9jX3NjaGVtYSIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDU1LjcwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiA3NzAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA2OAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJTb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDMzLjUzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBD b3N0IjogMzQuNDcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0 aCI6IDM2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJTb3J0IEtleSI6IFsib2NkXzEuc2VydmVyX2lkIiwgIm9j ZF8xLmRhdGFiYXNlX25hbWUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0 aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogIm9j X2RhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jZF8xIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTcuNTAs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiAzNzUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjog MzYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJGaWx0ZXIiOiAiY29ubmVjdGlvbnNfYWxsb3dlZCIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog IklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAiYWdlbnRfcGtleSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9u IE5hbWUiOiAiYWdlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJBbGlhcyI6ICJhXzMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMC4yOCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dz IjogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDY5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJJbmRleCBDb25kIjogIihpZCA9IGJfMi5hZ2VudF9pZCkiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2Nh biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJl bGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJzZXJ2ZXJf aW5mb19wa2V5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJS ZWxhdGlvbiBOYW1lIjogInNlcnZlcl9pbmZvIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJBbGlhcyI6ICJzZF8yIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAwLjI4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0 aCI6IDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kZXgg Q29uZCI6ICIoYl8yLnNlcnZlcl9pZCA9IHNlcnZlcl9pZCkiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAi Tm9kZSBUeXBlIjogIk1hdGVyaWFsaXplIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA1Ljc1 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNzgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjog Ik91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxh dGlvbiBOYW1lIjogInByb2JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJBbGlhcyI6ICJwXzMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzc4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICIoKE5P VCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0gNDAwKSkiCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIkhhc2giLAorICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiA4LjIzLAorICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDguMjMsCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAyMjMs CisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNTQxLAorICAgICAgICAg ICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAg ICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZV9zZXJ2ZXJf dmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAicHN2XzIi LAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisg ICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDguMjMsCisgICAgICAg ICAgICAgICAgICAiUGxhbiBSb3dzIjogMjIzLAorICAgICAgICAgICAgICAg ICAgIlBsYW4gV2lkdGgiOiA1NDEKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAg ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiTm9kZSBUeXBlIjogIk5l c3RlZCBMb29wIiwKKyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJNZW1iZXIiLAorICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc2LjY5LAorICAgICAgICAgICJU b3RhbCBDb3N0IjogMTE1LjQ2LAorICAgICAgICAgICJQbGFuIFJvd3MiOiA4 LAorICAgICAgICAgICJQbGFuIFdpZHRoIjogOTc3LAorICAgICAgICAgICJK b2luIEZpbHRlciI6ICIoYl8zLnNlcnZlcl9pZCA9IGNfNC5zZXJ2ZXJfaWQp IiwKKyAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAg ICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgICAg ICJTdGFydHVwIENvc3QiOiA3Ni41NCwKKyAgICAgICAgICAgICAgIlRvdGFs IENvc3QiOiAxMTMuMDgsCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA4 LAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDk2OCwKKyAgICAgICAg ICAgICAgIkZpbHRlciI6ICIocF80LmFueV9zZXJ2ZXJfdmVyc2lvbiBPUiAo cHN2XzMucHJvYmVfaWQgSVMgTk9UIE5VTEwpKSIsCisgICAgICAgICAgICAg ICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAg ICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAg ICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAg ICAgICAgICAiU3RhcnR1cCBDb3N0IjogNzYuNDAsCisgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDExMS4xMCwKKyAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiA4LAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiA0NDAsCisgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAiTm9k ZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAg ICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc2LjI1LAorICAgICAgICAg ICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTA4LjgyLAorICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA4LAorICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNDM2LAorICAgICAgICAgICAgICAgICAg ICAgICJKb2luIEZpbHRlciI6ICIoKChwXzQuYWdlbnRfY2FwYWJpbGl0eSBJ UyBOVUxMKSBPUiAocF80LmFnZW50X2NhcGFiaWxpdHkgPSBBTlkgKGFfNC5h Z2VudF9jYXBhYmlsaXR5X2xpc3QpKSkgQU5EICgocF80LmNvbGxlY3Rpb25f bWV0aG9kIDw+ICdiJzo6YnBjaGFyKSBPUiAoKHBfNC5jb2xsZWN0aW9uX21l dGhvZCA9ICdiJzo6YnBjaGFyKSBBTkQgKGFfNC5hZ2VudF9jYXBhYmlsaXR5 X2xpc3QgQD4gJ3thbGxvd19iYXRjaF9wcm9iZXN9Jzo6dGV4dFtdKSBBTkQg KChzdHJwb3MoYV80LnBsYXRmb3JtLCBwXzQucGxhdGZvcm0pIDw+IDApIE9S ICgoYV80LnBsYXRmb3JtICF+ICd3aW5kb3dzJzo6dGV4dCkgQU5EIChwXzQu cGxhdGZvcm0gPSAndW5peCc6OnRleHQpKSkpKSkiLAorICAgICAgICAgICAg ICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJO ZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA3Ni4xMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxMDUuMzIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAxMSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA0ODIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIob2NkXzIu c2VydmVyX2lkID0gYl8zLnNlcnZlcl9pZCkiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUg VHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjogIklubmVy IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENv c3QiOiA3NS45NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJU b3RhbCBDb3N0IjogODguOTYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogNSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNDgyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2luIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJP dXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpv aW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc1Ljk1LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogODMuMTcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g V2lkdGgiOiAxMDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk1lcmdlIENvbmQiOiAiKChvY2RfMi5zZXJ2ZXJfaWQgPSBvY18xLnNl cnZlcl9pZCkgQU5EIChvY2RfMi5kYXRhYmFzZV9uYW1lID0gb2NfMS5kYXRh YmFzZV9uYW1lKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJTb3J0IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMzMuNTMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMzQuNDcsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAz NzUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFdpZHRoIjogMzYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJTb3J0IEtleSI6IFsib2NkXzIuc2VydmVyX2lkIiwgIm9j ZF8yLmRhdGFiYXNlX25hbWUiXSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4i LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUi OiAib2NfZGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jZF8yIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3Qi OiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlRvdGFsIENvc3QiOiAxNy41MCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAzNzUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDM2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkZpbHRlciI6ICJjb25uZWN0aW9uc19hbGxvd2VkIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJTb3J0IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogNDIuNDIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0 IjogNDMuODcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFJvd3MiOiA1ODAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ydCBLZXkiOiBbIm9j XzEuc2VydmVyX2lkIiwgIm9jXzEuZGF0YWJhc2VfbmFtZSJdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUg VHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRl ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUmVsYXRpb24gTmFtZSI6ICJvY190YWJsZSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAib2NfMSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTUuODAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogNTgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMDAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk1hdGVyaWFs aXplIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFy ZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA1 LjczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFdpZHRoIjogMzc4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmUiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAicF80IiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43MiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogMzc4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiRmlsdGVyIjogIigoTk9UIGRlbGV0ZWQpIEFORCAodGFyZ2V0X3R5cGVf aWQgPSA1MDApKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXgg T25seSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ YXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBOYW1lIjog ImFnZW50X3NlcnZlcl9iaW5kaW5nX3BrZXkiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnRfc2VydmVy X2JpbmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFs aWFzIjogImJfMyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJUb3RhbCBDb3N0IjogMy4yNSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAyLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA4LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKHNlcnZlcl9pZCA9 IG9jXzEuc2VydmVyX2lkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXgg U2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJhZ2VudF9wa2V5IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdl bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAiYV80 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6 IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0 IjogMC4yOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogNjksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25k IjogIihpZCA9IGJfMy5hZ2VudF9pZCkiCisgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5l ciIsCisgICAgICAgICAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0aW9uIjog IkZvcndhcmQiLAorICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBOYW1l IjogInNlcnZlcl9pbmZvX3BrZXkiLAorICAgICAgICAgICAgICAgICAgICAg ICJSZWxhdGlvbiBOYW1lIjogInNlcnZlcl9pbmZvIiwKKyAgICAgICAgICAg ICAgICAgICAgICAiQWxpYXMiOiAic2RfMyIsCisgICAgICAgICAgICAgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAg ICAgICAgIlRvdGFsIENvc3QiOiAwLjI4LAorICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFdpZHRoIjogOCwKKyAgICAgICAgICAgICAgICAgICAgICAiSW5kZXgg Q29uZCI6ICIoYl8zLnNlcnZlcl9pZCA9IHNlcnZlcl9pZCkiCisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAg ICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAg ICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAg ICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJwcm9iZV9zZXJ2ZXJfdmVy c2lvbl91bmlxdWUiLAorICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5h bWUiOiAicHJvYmVfc2VydmVyX3ZlcnNpb24iLAorICAgICAgICAgICAgICAg ICAgIkFsaWFzIjogInBzdl8zIiwKKyAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAwLjE0LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAwLjI0LAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEs CisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDU0MSwKKyAgICAg ICAgICAgICAgICAgICJJbmRleCBDb25kIjogIigocF80LmlkID0gcHJvYmVf aWQpIEFORCAoc2RfMy5zZXJ2ZXJfdmVyc2lvbl9pZCA9IHNlcnZlcl92ZXJz aW9uX2lkKSkiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBd CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAg IkluZGV4IE5hbWUiOiAicHJvYmVfY29uZmlnX3RhYmxlX3BrZXkiLAorICAg ICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZV9jb25maWdfdGFi bGUiLAorICAgICAgICAgICAgICAiQWxpYXMiOiAiY180IiwKKyAgICAgICAg ICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICJU b3RhbCBDb3N0IjogMC4yOCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDEsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTEzLAorICAgICAg ICAgICAgICAiSW5kZXggQ29uZCI6ICIoKHBfNC5pZCA9IHByb2JlX2lkKSBB TkQgKG9jXzEuZGF0YWJhc2VfbmFtZSA9IChkYXRhYmFzZV9uYW1lKTo6dGV4 dCkgQU5EIChvY18xLnNjaGVtYV9uYW1lID0gKHNjaGVtYV9uYW1lKTo6dGV4 dCkgQU5EIChvY18xLnRhYmxlX25hbWUgPSAodGFibGVfbmFtZSk6OnRleHQp KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0sCisg ICAgICAgIHsKKyAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29w IiwKKyAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJNZW1iZXIi LAorICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDY1LjU2LAorICAgICAgICAgICJUb3RhbCBDb3N0 IjogOTcuMjMsCisgICAgICAgICAgIlBsYW4gUm93cyI6IDYsCisgICAgICAg ICAgIlBsYW4gV2lkdGgiOiA5NzcsCisgICAgICAgICAgIkpvaW4gRmlsdGVy IjogIigob2NfMi5kYXRhYmFzZV9uYW1lID0gKGNfNS5kYXRhYmFzZV9uYW1l KTo6dGV4dCkgQU5EIChvY18yLnNjaGVtYV9uYW1lID0gKGNfNS5zY2hlbWFf bmFtZSk6OnRleHQpIEFORCAob2NfMi5pbmRleF9uYW1lID0gKGNfNS5pbmRl eF9uYW1lKTo6dGV4dCkpIiwKKyAgICAgICAgICAiUGxhbnMiOiBbCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVk IExvb3AiLAorICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJPdXRlciIsCisgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiTGVmdCIs CisgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NS40MSwKKyAgICAg ICAgICAgICAgIlRvdGFsIENvc3QiOiA5NS40MiwKKyAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDYsCisgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjog OTY4LAorICAgICAgICAgICAgICAiRmlsdGVyIjogIihwXzUuYW55X3NlcnZl cl92ZXJzaW9uIE9SIChwc3ZfNC5wcm9iZV9pZCBJUyBOT1QgTlVMTCkpIiwK KyAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3Ai LAorICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi T3V0ZXIiLAorICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0 IiwKKyAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NS4yNiwK KyAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogOTMuOTMsCisgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwKKyAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogNDQwLAorICAgICAgICAgICAgICAgICAgIlBs YW5zIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIi LAorICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NS4x MiwKKyAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDkyLjIy LAorICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA2LAorICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDM2LAorICAgICAg ICAgICAgICAgICAgICAgICJKb2luIEZpbHRlciI6ICIoKChwXzUuYWdlbnRf Y2FwYWJpbGl0eSBJUyBOVUxMKSBPUiAocF81LmFnZW50X2NhcGFiaWxpdHkg PSBBTlkgKGFfNS5hZ2VudF9jYXBhYmlsaXR5X2xpc3QpKSkgQU5EICgocF81 LmNvbGxlY3Rpb25fbWV0aG9kIDw+ICdiJzo6YnBjaGFyKSBPUiAoKHBfNS5j b2xsZWN0aW9uX21ldGhvZCA9ICdiJzo6YnBjaGFyKSBBTkQgKGFfNS5hZ2Vu dF9jYXBhYmlsaXR5X2xpc3QgQD4gJ3thbGxvd19iYXRjaF9wcm9iZXN9Jzo6 dGV4dFtdKSBBTkQgKChzdHJwb3MoYV81LnBsYXRmb3JtLCBwXzUucGxhdGZv cm0pIDw+IDApIE9SICgoYV81LnBsYXRmb3JtICF+ICd3aW5kb3dzJzo6dGV4 dCkgQU5EIChwXzUucGxhdGZvcm0gPSAndW5peCc6OnRleHQpKSkpKSkiLAor ICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NC45 NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4 OS42OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjog NDgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBGaWx0ZXIi OiAiKG9jZF8zLnNlcnZlcl9pZCA9IGJfNC5zZXJ2ZXJfaWQpIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0 ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlw ZSI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogNjQuODIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDc2LjQ1LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQ4MiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTWVyZ2UgSm9pbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlv bnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA2NC44MiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDcwLjY3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFJvd3MiOiA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogMTA0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJNZXJnZSBDb25kIjogIigob2NkXzMuc2VydmVyX2lk ID0gb2NfMi5zZXJ2ZXJfaWQpIEFORCAob2NkXzMuZGF0YWJhc2VfbmFtZSA9 IG9jXzIuZGF0YWJhc2VfbmFtZSkpIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDMzLjUzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM0LjQ3 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBSb3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDM2LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiU29ydCBLZXkiOiBbIm9jZF8zLnNlcnZl cl9pZCIsICJvY2RfMy5kYXRhYmFzZV9uYW1lIl0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjog IlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxh dGlvbiBOYW1lIjogIm9jX2RhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY2RfMyIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3Rh cnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTcuNTAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dz IjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gV2lkdGgiOiAzNiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIiOiAiY29ubmVjdGlvbnNf YWxsb3dlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAi U29ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDMx LjI5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDMyLjI5LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogNDAwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDEwMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnQg S2V5IjogWyJvY18yLnNlcnZlcl9pZCIsICJvY18yLmRhdGFiYXNlX25hbWUi XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAib2NfaW5kZXgiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFz IjogIm9jXzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDE0 LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gUm93cyI6IDQwMCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTAwCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6 ICJNYXRlcmlhbGl6ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAw LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb3Rh bCBDb3N0IjogNS43MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogInByb2JlIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFz IjogInBfNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkZpbHRlciI6ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRh cmdldF90eXBlX2lkID0gNjAwKSkiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBl IjogIkluZGV4IE9ubHkgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAi Rm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5k ZXggTmFtZSI6ICJhZ2VudF9zZXJ2ZXJfYmluZGluZ19wa2V5IiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogImFn ZW50X3NlcnZlcl9iaW5kaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJBbGlhcyI6ICJiXzQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDMuMjgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogOCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjogIihz ZXJ2ZXJfaWQgPSBvY18yLnNlcnZlcl9pZCkiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICBdCisg ICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBl IjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAiYWdlbnRf cGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBO YW1lIjogImFnZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkFs aWFzIjogImFfNSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFy dHVwIENvc3QiOiAwLjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDY5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAi SW5kZXggQ29uZCI6ICIoaWQgPSBiXzQuYWdlbnRfaWQpIgorICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIF0KKyAg ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2Nh biIsCisgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJTY2FuIERp cmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAi SW5kZXggTmFtZSI6ICJzZXJ2ZXJfaW5mb19wa2V5IiwKKyAgICAgICAgICAg ICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJzZXJ2ZXJfaW5mbyIsCisg ICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInNkXzQiLAorICAgICAg ICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAgICAg ICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMC4yOCwKKyAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBXaWR0aCI6IDgsCisgICAgICAgICAgICAgICAgICAg ICAgIkluZGV4IENvbmQiOiAiKGJfNC5zZXJ2ZXJfaWQgPSBzZXJ2ZXJfaWQp IgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBd CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIi LAorICAgICAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndh cmQiLAorICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAicHJvYmVf c2VydmVyX3ZlcnNpb25fdW5pcXVlIiwKKyAgICAgICAgICAgICAgICAgICJS ZWxhdGlvbiBOYW1lIjogInByb2JlX3NlcnZlcl92ZXJzaW9uIiwKKyAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJwc3ZfNCIsCisgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNCwKKyAgICAgICAgICAgICAgICAg ICJUb3RhbCBDb3N0IjogMC4yNCwKKyAgICAgICAgICAgICAgICAgICJQbGFu IFJvd3MiOiAxLAorICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA1 NDEsCisgICAgICAgICAgICAgICAgICAiSW5kZXggQ29uZCI6ICIoKHBfNS5p ZCA9IHByb2JlX2lkKSBBTkQgKHNkXzQuc2VydmVyX3ZlcnNpb25faWQgPSBz ZXJ2ZXJfdmVyc2lvbl9pZCkpIgorICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAg ICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAg ICAgICAgICAgICJJbmRleCBOYW1lIjogInByb2JlX2NvbmZpZ19pbmRleF9w a2V5IiwKKyAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVf Y29uZmlnX2luZGV4IiwKKyAgICAgICAgICAgICAgIkFsaWFzIjogImNfNSIs CisgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE1LAorICAgICAg ICAgICAgICAiVG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICJQ bGFuIFJvd3MiOiAxLAorICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDEx MywKKyAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKChwXzUuaWQgPSBw cm9iZV9pZCkgQU5EIChiXzQuc2VydmVyX2lkID0gc2VydmVyX2lkKSkiCisg ICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQgTG9vcCIsCisg ICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiTWVtYmVyIiwKKyAg ICAgICAgICAiSm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICJTdGFy dHVwIENvc3QiOiA4NC41NSwKKyAgICAgICAgICAiVG90YWwgQ29zdCI6IDEx NS41NCwKKyAgICAgICAgICAiUGxhbiBSb3dzIjogOCwKKyAgICAgICAgICAi UGxhbiBXaWR0aCI6IDk3NywKKyAgICAgICAgICAiSm9pbiBGaWx0ZXIiOiAi KGJfNS5zZXJ2ZXJfaWQgPSBjXzYuc2VydmVyX2lkKSIsCisgICAgICAgICAg IlBsYW5zIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiTm9k ZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAgIlBhcmVu dCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAiSm9p biBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0 IjogODQuNDAsCisgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTEzLjE3 LAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogOCwKKyAgICAgICAgICAg ICAgIlBsYW4gV2lkdGgiOiA5NjgsCisgICAgICAgICAgICAgICJGaWx0ZXIi OiAiKHBfNi5hbnlfc2VydmVyX3ZlcnNpb24gT1IgKHBzdl81LnByb2JlX2lk IElTIE5PVCBOVUxMKSkiLAorICAgICAgICAgICAgICAiUGxhbnMiOiBbCisg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJOZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAi Sm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDg0LjI1LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAxMTEuMTksCisgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog OCwKKyAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNDQwLAorICAg ICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0 ZWQgTG9vcCIsCisgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxh dGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJK b2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJT dGFydHVwIENvc3QiOiA4NC4xMSwKKyAgICAgICAgICAgICAgICAgICAgICAi VG90YWwgQ29zdCI6IDEwOC45MSwKKyAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogOCwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDQzNiwKKyAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBGaWx0 ZXIiOiAiKCgocF82LmFnZW50X2NhcGFiaWxpdHkgSVMgTlVMTCkgT1IgKHBf Ni5hZ2VudF9jYXBhYmlsaXR5ID0gQU5ZIChhXzYuYWdlbnRfY2FwYWJpbGl0 eV9saXN0KSkpIEFORCAoKHBfNi5jb2xsZWN0aW9uX21ldGhvZCA8PiAnYic6 OmJwY2hhcikgT1IgKChwXzYuY29sbGVjdGlvbl9tZXRob2QgPSAnYic6OmJw Y2hhcikgQU5EIChhXzYuYWdlbnRfY2FwYWJpbGl0eV9saXN0IEA+ICd7YWxs b3dfYmF0Y2hfcHJvYmVzfSc6OnRleHRbXSkgQU5EICgoc3RycG9zKGFfNi5w bGF0Zm9ybSwgcF82LnBsYXRmb3JtKSA8PiAwKSBPUiAoKGFfNi5wbGF0Zm9y bSAhfiAnd2luZG93cyc6OnRleHQpIEFORCAocF82LnBsYXRmb3JtID0gJ3Vu aXgnOjp0ZXh0KSkpKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2lu IFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogODMuOTYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICJUb3RhbCBDb3N0IjogMTA1LjQxLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBSb3dzIjogMTEsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNDgyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAicF82 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENv c3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiA1LjcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBsYW4gUm93cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJGaWx0ZXIiOiAiKChOT1QgZGVsZXRlZCkgQU5EICh0YXJn ZXRfdHlwZV9pZCA9IDcwMCkpIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJIYXNoIEpv aW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogODMuOTYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDk5LjU4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiAxMDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFz aCBDb25kIjogIihiXzUuc2VydmVyX2lkID0gb2NkXzQuc2VydmVyX2lkKSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMiOiBbCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2Fu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnRfc2VydmVy X2JpbmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJBbGlhcyI6ICJiXzUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMTQuMDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDQw MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiSGFzaCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiA4My44OCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDgzLjg4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJv d3MiOiA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ bGFuIFdpZHRoIjogMTA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIk5vZGUgVHlwZSI6ICJNZXJnZSBKb2luIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDc2LjU5 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90 YWwgQ29zdCI6IDgzLjg4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBSb3dzIjogNiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMDQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXJnZSBDb25k IjogIigob2NkXzQuc2VydmVyX2lkID0gb2NfMy5zZXJ2ZXJfaWQpIEFORCAo b2NkXzQuZGF0YWJhc2VfbmFtZSA9IG9jXzMuZGF0YWJhc2VfbmFtZSkpIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5z IjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJP dXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMzMuNTMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM0LjQ3 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ydCBLZXkiOiBb Im9jZF80LnNlcnZlcl9pZCIsICJvY2RfNC5kYXRhYmFzZV9uYW1lIl0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAi b2NfZGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY2RfNCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAxNy41MCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogMzc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciI6ICJj b25uZWN0aW9uc19hbGxvd2VkIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNvcnQiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDQzLjA1LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiA0NC41MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1OTAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6 IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJTb3J0IEtleSI6IFsib2NfMy5zZXJ2ZXJfaWQiLCAib2NfMy5kYXRh YmFzZV9uYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBT Y2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJl bGF0aW9uIE5hbWUiOiAib2Nfc2VxdWVuY2UiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJvY18z IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDE1 LjkwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiA1OTAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMDAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAg fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAi SW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJl Y3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICJJbmRleCBOYW1lIjogImFnZW50X3BrZXkiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJhZ2VudCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJhXzYiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAwLjI4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA2OSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAiKGlkID0gYl81 LmFnZW50X2lkKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAi Tm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAgICAgICAgICAg ICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAg ICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisg ICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAic2VydmVyX2lu Zm9fcGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5h bWUiOiAic2VydmVyX2luZm8iLAorICAgICAgICAgICAgICAgICAgICAgICJB bGlhcyI6ICJzZF81IiwKKyAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1 cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93 cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA4 LAorICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjogIihiXzUu c2VydmVyX2lkID0gc2VydmVyX2lkKSIKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIk5vZGUgVHlw ZSI6ICJJbmRleCBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICJQYXJlbnQg UmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICJT Y2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAgICAg ICJJbmRleCBOYW1lIjogInByb2JlX3NlcnZlcl92ZXJzaW9uX3VuaXF1ZSIs CisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJwcm9iZV9z ZXJ2ZXJfdmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAi cHN2XzUiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAu MTQsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDAuMjQsCisg ICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAgICAg ICAgICAgICJQbGFuIFdpZHRoIjogNTQxLAorICAgICAgICAgICAgICAgICAg IkluZGV4IENvbmQiOiAiKChwXzYuaWQgPSBwcm9iZV9pZCkgQU5EIChzZF81 LnNlcnZlcl92ZXJzaW9uX2lkID0gc2VydmVyX3ZlcnNpb25faWQpKSIKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg IH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0 aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6 ICJwcm9iZV9jb25maWdfc2VxdWVuY2VfcGtleSIsCisgICAgICAgICAgICAg ICJSZWxhdGlvbiBOYW1lIjogInByb2JlX2NvbmZpZ19zZXF1ZW5jZSIsCisg ICAgICAgICAgICAgICJBbGlhcyI6ICJjXzYiLAorICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAwLjI4LAorICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAg ICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAxMTMsCisgICAgICAgICAgICAg ICJJbmRleCBDb25kIjogIigocF82LmlkID0gcHJvYmVfaWQpIEFORCAob2Nf My5kYXRhYmFzZV9uYW1lID0gKGRhdGFiYXNlX25hbWUpOjp0ZXh0KSBBTkQg KG9jXzMuc2NoZW1hX25hbWUgPSAoc2NoZW1hX25hbWUpOjp0ZXh0KSBBTkQg KG9jXzMuc2VxdWVuY2VfbmFtZSA9IChzZXF1ZW5jZV9uYW1lKTo6dGV4dCkp IgorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg ICAgICAgeworICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3Ai LAorICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk1lbWJlciIs CisgICAgICAgICAgIkpvaW4gVHlwZSI6ICJMZWZ0IiwKKyAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogNjEuOTcsCisgICAgICAgICAgIlRvdGFsIENvc3Qi OiA4OC40MCwKKyAgICAgICAgICAiUGxhbiBSb3dzIjogNSwKKyAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDk3NywKKyAgICAgICAgICAiSm9pbiBGaWx0ZXIi OiAiKChvY180LmRhdGFiYXNlX25hbWUgPSAoY183LmRhdGFiYXNlX25hbWUp Ojp0ZXh0KSBBTkQgKG9jXzQuc2NoZW1hX25hbWUgPSAoY183LnNjaGVtYV9u YW1lKTo6dGV4dCkgQU5EIChvY180LmZ1bmN0aW9uX25hbWUgPSAoY183LmZ1 bmN0aW9uX25hbWUpOjp0ZXh0KSkiLAorICAgICAgICAgICJQbGFucyI6IFsK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJO ZXN0ZWQgTG9vcCIsCisgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25z aGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJM ZWZ0IiwKKyAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYxLjgyLAor ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDg2Ljg4LAorICAgICAgICAg ICAgICAiUGxhbiBSb3dzIjogNSwKKyAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiA5NjgsCisgICAgICAgICAgICAgICJGaWx0ZXIiOiAiKHBfNy5hbnlf c2VydmVyX3ZlcnNpb24gT1IgKHBzdl82LnByb2JlX2lkIElTIE5PVCBOVUxM KSkiLAorICAgICAgICAgICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJOZXN0ZWQg TG9vcCIsCisgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjog IkxlZnQiLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYx LjY3LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA4NS42NSwK KyAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1LAorICAgICAgICAg ICAgICAgICAgIlBsYW4gV2lkdGgiOiA0NDAsCisgICAgICAgICAgICAgICAg ICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAg ICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJP dXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJ bm5lciIsCisgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6 IDYxLjUyLAorICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0Ijog ODQuMjIsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDUs CisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA0MzYsCisg ICAgICAgICAgICAgICAgICAgICAgIkpvaW4gRmlsdGVyIjogIigoKHBfNy5h Z2VudF9jYXBhYmlsaXR5IElTIE5VTEwpIE9SIChwXzcuYWdlbnRfY2FwYWJp bGl0eSA9IEFOWSAoYV83LmFnZW50X2NhcGFiaWxpdHlfbGlzdCkpKSBBTkQg KChwXzcuY29sbGVjdGlvbl9tZXRob2QgPD4gJ2InOjpicGNoYXIpIE9SICgo cF83LmNvbGxlY3Rpb25fbWV0aG9kID0gJ2InOjpicGNoYXIpIEFORCAoYV83 LmFnZW50X2NhcGFiaWxpdHlfbGlzdCBAPiAne2FsbG93X2JhdGNoX3Byb2Jl c30nOjp0ZXh0W10pIEFORCAoKHN0cnBvcyhhXzcucGxhdGZvcm0sIHBfNy5w bGF0Zm9ybSkgPD4gMCkgT1IgKChhXzcucGxhdGZvcm0gIX4gJ3dpbmRvd3Mn Ojp0ZXh0KSBBTkQgKHBfNy5wbGF0Zm9ybSA9ICd1bml4Jzo6dGV4dCkpKSkp KSIsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAg ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjogIklubmVy IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6 IDYxLjM4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29z dCI6IDgyLjMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBS b3dzIjogNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiA0ODIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFucyI6 IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk5lc3RlZCBMb29w IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJKb2luIFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYxLjIzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiA3Mi4zOSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgi OiA0ODIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbnMi OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIk1l cmdlIEpvaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBUeXBlIjogIklubmVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBD b3N0IjogNjEuMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiA2Ni42MiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDEwNCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWVyZ2UgQ29uZCI6ICIo KG9jZF81LnNlcnZlcl9pZCA9IG9jXzQuc2VydmVyX2lkKSBBTkQgKG9jZF81 LmRhdGFiYXNlX25hbWUgPSBvY180LmRhdGFiYXNlX25hbWUpKSIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNv cnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGFyZW50IFJlbGF0aW9uc2hpcCI6ICJPdXRlciIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAzMy41 MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRv dGFsIENvc3QiOiAzNC40NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnQgS2V5 IjogWyJvY2RfNS5zZXJ2ZXJfaWQiLCAib2NkXzUuZGF0YWJhc2VfbmFtZSJd LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIk5vZGUgVHlwZSI6ICJTZXEgU2NhbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJvY19kYXRhYmFzZSIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxp YXMiOiAib2NkXzUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDE3LjUwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW4gUm93cyI6IDM3NSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMzYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsdGVy IjogImNvbm5lY3Rpb25zX2FsbG93ZWQiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiTm9kZSBUeXBlIjogIlNvcnQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5l ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT dGFydHVwIENvc3QiOiAyNy43MCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAyOC41NSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDM0 MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gV2lkdGgiOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJTb3J0IEtleSI6IFsib2NfNC5zZXJ2ZXJfaWQiLCAib2Nf NC5kYXRhYmFzZV9uYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ YXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjog Im9jX2Z1bmN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJvY180IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAw LjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlRvdGFsIENvc3QiOiAxMy40MCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAzNDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDEwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJOb2RlIFR5cGUiOiAiTWF0ZXJpYWxpemUiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlw IjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogMC4wMCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDUuNzMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAz NzgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5z IjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9kZSBU eXBlIjogIlNlcSBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVsYXRp b24gTmFtZSI6ICJwcm9iZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJBbGlhcyI6ICJwXzciLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4wMCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFs IENvc3QiOiA1LjcyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiAzNzgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIiOiAiKChO T1QgZGVsZXRlZCkgQU5EICh0YXJnZXRfdHlwZV9pZCA9IDgwMCkpIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBPbmx5IFNjYW4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNo aXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAiYWdlbnRfc2VydmVyX2Jp bmRpbmdfcGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UmVsYXRpb24gTmFtZSI6ICJhZ2VudF9zZXJ2ZXJfYmluZGluZyIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxpYXMiOiAiYl82IiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAw LjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAzLjI5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBs YW4gUm93cyI6IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBXaWR0aCI6IDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiSW5kZXggQ29uZCI6ICIoc2VydmVyX2lkID0gb2NkXzUuc2VydmVyX2lk KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0s CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICJOb2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklu bmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlNjYW4gRGlyZWN0 aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi SW5kZXggTmFtZSI6ICJhZ2VudF9wa2V5IiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAiYWdlbnQiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAiQWxpYXMiOiAiYV83IiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogMC4yOCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNjksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25kIjogIihpZCA9IGJfNi5h Z2VudF9pZCkiCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICB9LAorICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIk5v ZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAgICAgICAgICAgICAgICAg ICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAg ICAgICAgICAgICAgIlNjYW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAg ICAgICAgICAgICAgICAgICAgICJJbmRleCBOYW1lIjogInNlcnZlcl9pbmZv X3BrZXkiLAorICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1l IjogInNlcnZlcl9pbmZvIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQWxp YXMiOiAic2RfNiIsCisgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENv c3QiOiAwLjI4LAorICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3Mi OiAxLAorICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogOCwK KyAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggQ29uZCI6ICIoYl82LnNl cnZlcl9pZCA9IHNlcnZlcl9pZCkiCisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9LAorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAgICAgICAiUGFyZW50IFJl bGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAiU2Nh biBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAgICAi SW5kZXggTmFtZSI6ICJwcm9iZV9zZXJ2ZXJfdmVyc2lvbl91bmlxdWUiLAor ICAgICAgICAgICAgICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfc2Vy dmVyX3ZlcnNpb24iLAorICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInBz dl82IiwKKyAgICAgICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjE0 LAorICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAwLjI0LAorICAg ICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDU0MSwKKyAgICAgICAgICAgICAgICAgICJJ bmRleCBDb25kIjogIigocF83LmlkID0gcHJvYmVfaWQpIEFORCAoc2RfNi5z ZXJ2ZXJfdmVyc2lvbl9pZCA9IHNlcnZlcl92ZXJzaW9uX2lkKSkiCisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9 LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiTm9kZSBUeXBlIjog IkluZGV4IFNjYW4iLAorICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9u c2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICJTY2FuIERpcmVjdGlv biI6ICJGb3J3YXJkIiwKKyAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAi cHJvYmVfY29uZmlnX2Z1bmN0aW9uX3BrZXkiLAorICAgICAgICAgICAgICAi UmVsYXRpb24gTmFtZSI6ICJwcm9iZV9jb25maWdfZnVuY3Rpb24iLAorICAg ICAgICAgICAgICAiQWxpYXMiOiAiY183IiwKKyAgICAgICAgICAgICAgIlN0 YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICJUb3RhbCBDb3N0 IjogMC4yOCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisgICAg ICAgICAgICAgICJQbGFuIFdpZHRoIjogMTEzLAorICAgICAgICAgICAgICAi SW5kZXggQ29uZCI6ICIoKHBfNy5pZCA9IHByb2JlX2lkKSBBTkQgKGJfNi5z ZXJ2ZXJfaWQgPSBzZXJ2ZXJfaWQpKSIKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiTm9k ZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAiUGFyZW50IFJl bGF0aW9uc2hpcCI6ICJNZW1iZXIiLAorICAgICAgICAgICJKb2luIFR5cGUi OiAiTGVmdCIsCisgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDYxLjk3LAor ICAgICAgICAgICJUb3RhbCBDb3N0IjogODguNDAsCisgICAgICAgICAgIlBs YW4gUm93cyI6IDUsCisgICAgICAgICAgIlBsYW4gV2lkdGgiOiA5NzcsCisg ICAgICAgICAgIkpvaW4gRmlsdGVyIjogIigob2NfNS5kYXRhYmFzZV9uYW1l ID0gKGNfOC5kYXRhYmFzZV9uYW1lKTo6dGV4dCkgQU5EIChvY181LnNjaGVt YV9uYW1lID0gKGNfOC5zY2hlbWFfbmFtZSk6OnRleHQpIEFORCAob2NfNS52 aWV3X25hbWUgPSAoY184LnZpZXdfbmFtZSk6OnRleHQpKSIsCisgICAgICAg ICAgIlBsYW5zIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAi Tm9kZSBUeXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAgIlBh cmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAgICAgICAi Sm9pbiBUeXBlIjogIkxlZnQiLAorICAgICAgICAgICAgICAiU3RhcnR1cCBD b3N0IjogNjEuODIsCisgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogODYu ODgsCisgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiA1LAorICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDk2OCwKKyAgICAgICAgICAgICAgIkZpbHRl ciI6ICIocF84LmFueV9zZXJ2ZXJfdmVyc2lvbiBPUiAocHN2XzcucHJvYmVf aWQgSVMgTk9UIE5VTEwpKSIsCisgICAgICAgICAgICAgICJQbGFucyI6IFsK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiTm9kZSBU eXBlIjogIk5lc3RlZCBMb29wIiwKKyAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICJKb2luIFR5cGUiOiAiTGVmdCIsCisgICAgICAgICAgICAgICAgICAiU3Rh cnR1cCBDb3N0IjogNjEuNjcsCisgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDg1LjY1LAorICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDUsCisgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDQ0MCwKKyAg ICAgICAgICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVz dGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVs YXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAi Sm9pbiBUeXBlIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogNjEuNTIsCisgICAgICAgICAgICAgICAgICAgICAg IlRvdGFsIENvc3QiOiA4NC4yMiwKKyAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogNSwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDQzNiwKKyAgICAgICAgICAgICAgICAgICAgICAiSm9pbiBGaWx0 ZXIiOiAiKCgocF84LmFnZW50X2NhcGFiaWxpdHkgSVMgTlVMTCkgT1IgKHBf OC5hZ2VudF9jYXBhYmlsaXR5ID0gQU5ZIChhXzguYWdlbnRfY2FwYWJpbGl0 eV9saXN0KSkpIEFORCAoKHBfOC5jb2xsZWN0aW9uX21ldGhvZCA8PiAnYic6 OmJwY2hhcikgT1IgKChwXzguY29sbGVjdGlvbl9tZXRob2QgPSAnYic6OmJw Y2hhcikgQU5EIChhXzguYWdlbnRfY2FwYWJpbGl0eV9saXN0IEA+ICd7YWxs b3dfYmF0Y2hfcHJvYmVzfSc6OnRleHRbXSkgQU5EICgoc3RycG9zKGFfOC5w bGF0Zm9ybSwgcF84LnBsYXRmb3JtKSA8PiAwKSBPUiAoKGFfOC5wbGF0Zm9y bSAhfiAnd2luZG93cyc6OnRleHQpIEFORCAocF84LnBsYXRmb3JtID0gJ3Vu aXgnOjp0ZXh0KSkpKSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGxh bnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiTmVzdGVkIExvb3AiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hp cCI6ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2lu IFR5cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi U3RhcnR1cCBDb3N0IjogNjEuMzgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICJUb3RhbCBDb3N0IjogODIuMzIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFuIFJvd3MiOiA2LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbiBXaWR0aCI6IDQ4MiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIlBsYW5zIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiTmVzdGVkIExvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkpvaW4gVHlwZSI6ICJJbm5lciIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0Ijog NjEuMjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwg Q29zdCI6IDcyLjM5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiUGxhbiBXaWR0aCI6IDQ4MiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiTWVyZ2UgSm9pbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIi LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKb2luIFR5 cGUiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJTdGFydHVwIENvc3QiOiA2MS4yMywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDY2LjYyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQbGFuIFdpZHRo IjogMTA0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJN ZXJnZSBDb25kIjogIigob2NkXzYuc2VydmVyX2lkID0gb2NfNS5zZXJ2ZXJf aWQpIEFORCAob2NkXzYuZGF0YWJhc2VfbmFtZSA9IG9jXzUuZGF0YWJhc2Vf bmFtZSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDMzLjUzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVG90YWwgQ29zdCI6IDM0LjQ3LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMzc1LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBX aWR0aCI6IDM2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU29ydCBLZXkiOiBbIm9jZF82LnNlcnZlcl9pZCIsICJvY2RfNi5k YXRhYmFzZV9uYW1lIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIlNlcSBTY2FuIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIk91dGVyIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogIm9j X2RhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJBbGlhcyI6ICJvY2RfNiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4w MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJUb3RhbCBDb3N0IjogMTcuNTAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMzc1LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lk dGgiOiAzNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJGaWx0ZXIiOiAiY29ubmVjdGlvbnNfYWxsb3dlZCIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJOb2RlIFR5cGUiOiAiU29ydCIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRp b25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlN0YXJ0dXAgQ29zdCI6IDI3LjcwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDI4 LjU1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi UGxhbiBSb3dzIjogMzQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDEwMCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlNvcnQgS2V5IjogWyJvY181LnNl cnZlcl9pZCIsICJvY181LmRhdGFiYXNlX25hbWUiXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW5zIjogWworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb2RlIFR5cGUi OiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlvbnNoaXAiOiAiT3V0ZXIiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJl bGF0aW9uIE5hbWUiOiAib2Nfdmlld3MiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogIm9jXzUiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDAuMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6IDEzLjQwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gUm93cyI6 IDM0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJQbGFuIFdpZHRoIjogMTAwCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJNYXRlcmlhbGl6ZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBS ZWxhdGlvbnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJTdGFydHVwIENvc3QiOiAwLjAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJUb3RhbCBDb3N0IjogNS43MywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dz IjogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxh biBXaWR0aCI6IDM3OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiUGxhbnMiOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJOb2RlIFR5cGUiOiAiU2VxIFNjYW4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50IFJlbGF0aW9uc2hpcCI6 ICJPdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJSZWxhdGlvbiBOYW1lIjogInByb2JlIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIkFsaWFzIjogInBfOCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydHVwIENv c3QiOiAwLjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVG90YWwgQ29zdCI6IDUuNzIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJQbGFuIFJvd3MiOiAxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBXaWR0aCI6IDM3 OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZp bHRlciI6ICIoKE5PVCBkZWxldGVkKSBBTkQgKHRhcmdldF90eXBlX2lkID0g OTAwKSkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IE9ubHkg U2NhbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFyZW50 IFJlbGF0aW9uc2hpcCI6ICJJbm5lciIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5kZXggTmFtZSI6ICJhZ2Vu dF9zZXJ2ZXJfYmluZGluZ19wa2V5IiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJSZWxhdGlvbiBOYW1lIjogImFnZW50X3NlcnZlcl9iaW5k aW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6 ICJiXzciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0YXJ0 dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiVG90YWwgQ29zdCI6IDMuMjksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiUGxhbiBSb3dzIjogMiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJQbGFuIFdpZHRoIjogOCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJJbmRleCBDb25kIjogIihzZXJ2ZXJfaWQgPSBvY2Rf Ni5zZXJ2ZXJfaWQpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIk5vZGUgVHlwZSI6ICJJbmRleCBTY2Fu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcmVudCBSZWxhdGlv bnNoaXAiOiAiSW5uZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAi U2NhbiBEaXJlY3Rpb24iOiAiRm9yd2FyZCIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICJJbmRleCBOYW1lIjogImFnZW50X3BrZXkiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6ICJhZ2VudCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGlhcyI6ICJhXzgiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnR1cCBDb3N0IjogMC4x NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdGFsIENvc3QiOiAw LjI4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjog MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlBsYW4gV2lkdGgiOiA2 OSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IENvbmQiOiAi KGlkID0gYl83LmFnZW50X2lkKSIKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAiTm9kZSBUeXBlIjogIkluZGV4IFNjYW4iLAorICAgICAgICAg ICAgICAgICAgICAgICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwK KyAgICAgICAgICAgICAgICAgICAgICAiU2NhbiBEaXJlY3Rpb24iOiAiRm9y d2FyZCIsCisgICAgICAgICAgICAgICAgICAgICAgIkluZGV4IE5hbWUiOiAi c2VydmVyX2luZm9fcGtleSIsCisgICAgICAgICAgICAgICAgICAgICAgIlJl bGF0aW9uIE5hbWUiOiAic2VydmVyX2luZm8iLAorICAgICAgICAgICAgICAg ICAgICAgICJBbGlhcyI6ICJzZF83IiwKKyAgICAgICAgICAgICAgICAgICAg ICAiU3RhcnR1cCBDb3N0IjogMC4xNSwKKyAgICAgICAgICAgICAgICAgICAg ICAiVG90YWwgQ29zdCI6IDAuMjgsCisgICAgICAgICAgICAgICAgICAgICAg IlBsYW4gUm93cyI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgIlBsYW4g V2lkdGgiOiA4LAorICAgICAgICAgICAgICAgICAgICAgICJJbmRleCBDb25k IjogIihiXzcuc2VydmVyX2lkID0gc2VydmVyX2lkKSIKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg Ik5vZGUgVHlwZSI6ICJJbmRleCBTY2FuIiwKKyAgICAgICAgICAgICAgICAg ICJQYXJlbnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAg ICAgICAgICJTY2FuIERpcmVjdGlvbiI6ICJGb3J3YXJkIiwKKyAgICAgICAg ICAgICAgICAgICJJbmRleCBOYW1lIjogInByb2JlX3NlcnZlcl92ZXJzaW9u X3VuaXF1ZSIsCisgICAgICAgICAgICAgICAgICAiUmVsYXRpb24gTmFtZSI6 ICJwcm9iZV9zZXJ2ZXJfdmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAi QWxpYXMiOiAicHN2XzciLAorICAgICAgICAgICAgICAgICAgIlN0YXJ0dXAg Q29zdCI6IDAuMTQsCisgICAgICAgICAgICAgICAgICAiVG90YWwgQ29zdCI6 IDAuMjQsCisgICAgICAgICAgICAgICAgICAiUGxhbiBSb3dzIjogMSwKKyAg ICAgICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogNTQxLAorICAgICAgICAg ICAgICAgICAgIkluZGV4IENvbmQiOiAiKChwXzguaWQgPSBwcm9iZV9pZCkg QU5EIChzZF83LnNlcnZlcl92ZXJzaW9uX2lkID0gc2VydmVyX3ZlcnNpb25f aWQpKSIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIF0KKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJO b2RlIFR5cGUiOiAiSW5kZXggU2NhbiIsCisgICAgICAgICAgICAgICJQYXJl bnQgUmVsYXRpb25zaGlwIjogIklubmVyIiwKKyAgICAgICAgICAgICAgIlNj YW4gRGlyZWN0aW9uIjogIkZvcndhcmQiLAorICAgICAgICAgICAgICAiSW5k ZXggTmFtZSI6ICJwcm9iZV9jb25maWdfdmlld19wa2V5IiwKKyAgICAgICAg ICAgICAgIlJlbGF0aW9uIE5hbWUiOiAicHJvYmVfY29uZmlnX3ZpZXciLAor ICAgICAgICAgICAgICAiQWxpYXMiOiAiY184IiwKKyAgICAgICAgICAgICAg IlN0YXJ0dXAgQ29zdCI6IDAuMTUsCisgICAgICAgICAgICAgICJUb3RhbCBD b3N0IjogMC4yOCwKKyAgICAgICAgICAgICAgIlBsYW4gUm93cyI6IDEsCisg ICAgICAgICAgICAgICJQbGFuIFdpZHRoIjogMTEzLAorICAgICAgICAgICAg ICAiSW5kZXggQ29uZCI6ICIoKHBfOC5pZCA9IHByb2JlX2lkKSBBTkQgKGJf Ny5zZXJ2ZXJfaWQgPSBzZXJ2ZXJfaWQpKSIKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIH0KK107 CisgICAgICBwZ0V4cGxhaW4uRHJhd0pTT05QbGFuKCQoJyNleHBsYWluLWNv bnRhaW5lcicpLCBkYXRhKTsKKyAgICB9LAorICAgIGZ1bmN0aW9uKCkgewor ICAgICAgLyogVE9ETzo6IFNob3cgcHJvcGVyIGVycm9yIGRpYWxvZyAqLwor ICAgICAgY29uc29sZS5sb2coYXJndW1lbnRzKTsKKyAgICB9KTsKK30gY2F0 Y2ggKGVycikgeworICAvKiBTaG93IHByb3BlciBlcnJvciBkaWFsb2cgKi8K KyAgY29uc29sZS5sb2coZXJyKTsKK30KK3slIGVuZGJsb2NrICV9Cit7JSBi bG9jayBib2R5ICV9Cis8ZGl2IGlkPSJleHBsYWluLWNvbnRhaW5lciI+PC9k aXY+Cit7JSBlbmRibG9jayAlfQorCit7JSBibG9jayBjc3NfbGluayAlfQor PHN0eWxlPgorYm9keSB7CisgIHBhZGRpbmctdG9wOiAyMHB4OworICBvdmVy ZmxvdzogYXV0bzsKK30KKworLmxhYmVsIHsKKyAgZGlzcGxheTogdGFibGUt Y2VsbDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgd2hpdGUtc3BhY2U6IGlu aGVyaXQ7Cit9Cis8L3N0eWxlPgoreyUgZW5kYmxvY2sgJX0K --001a1141482c4d37e60530381eb6 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 --001a1141482c4d37e60530381eb6--