{"report_id":"198dec92-3615-4009-9559-bfd533f6d8ac","version":0,"status":"done","tags":[],"date":"2026-07-27T00:17:09Z","url":{"schema":"http","addr":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","fqdn":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","domain":"xtkuwd.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":0,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"final":{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"title":"Trust Wallet","dom":{"size":6460,"mime_type":"text/html; charset=utf-8","magic":"HTML document, ASCII text, with very long lines (4759)","md5":"5a1aade75889f794057e56dce75ff9dc","sha1":"493e633ffa89e87393000b79e68041b1d6175307","sha256":"6240764b4ef53f6e32e02b251aeec5a3f7424f6cd07ecfb86bdc98d52dc44250","sha512":"60e3d374206da9102a6bcf60b24993adfa9189faee090c6f5407fff0d8028840d3c6a0cc7c4d1c46361727db674ad683256fb335d79385d624eedb87d7d6a0bc","ssdeep":"96:Chz7J+Oe/AT37J+Oe/ATg9SOt8sYferBebdtuy9efiWZnyf+cUn4K:Chz7JXeS7JXex/27xS8+NT","tlshash":"74d1d765a26009999e13c8dbfed0b714340551d3d72ecbf9b2cd9800bbdf8e655eb209","dom_hash":"domhashd6f1da3a9ac1a0844bb416131a3c8d24","first_seen":"","last_seen":"","times_seen":0,"resource_available":false,"data":null}},"submit":{"url":{"schema":"http","addr":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","fqdn":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","domain":"xtkuwd.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":0,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"tags":null,"meta":null},"settings":{"access":"public","device_type":"desktop","expires_at":"2027-08-31T00:17:09Z","useragent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0","referer":"","cookies":null,"exit_node":"qguvgzjxzsgb3vs"},"stats":{"alert_count":{"ids":0,"urlquery":0,"analyzer":10}},"detection":{"ids":null,"analyzer":[{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null},"summary":[{"fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"domain_registered":"2026-06-13","domain_rank":0,"first_seen":"2026-07-27T00:14:08.630152Z","last_seen":"2026-07-27T00:14:08.630152Z","alert_count":30,"request_count":6,"received_data":25252,"sent_data":3402,"comment":"","tags":null,"fingerprints":[{"name":"Tailwind CSS","description":"Tailwind is a utility-first CSS framework.","website":"https://tailwindcss.com/","common_platform_enumeration":"","icon":"tailwindcss.svg","categories":["UI frameworks"]},{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}]},{"fqdn":"cdn.tailwindcss.com","ip":{"addr":"104.26.3.143","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"domain_registered":"2017-07-20","domain_rank":117330,"first_seen":"2018-07-09T05:46:13Z","last_seen":"2026-07-20T08:40:19.100598Z","alert_count":0,"request_count":2,"received_data":408713,"sent_data":1022,"comment":"","tags":null,"fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]},{"name":"Vercel","description":"Vercel is a cloud platform for static frontends and serverless functions.","website":"https://vercel.com","common_platform_enumeration":"","icon":"vercel.svg","categories":["PaaS"]},{"name":"HSTS","description":"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.","website":"https://www.rfc-editor.org/rfc/rfc6797#section-6.1","common_platform_enumeration":"","icon":"","categories":["Security"]}]},{"fqdn":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"domain_registered":"2026-05-30","domain_rank":0,"first_seen":"2026-07-27T00:14:08.644174Z","last_seen":"2026-07-27T00:14:08.644174Z","alert_count":5,"request_count":1,"received_data":242,"sent_data":526,"comment":"","tags":null,"fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}]}],"files":null,"artifacts":{"windows_shortcuts":null,"files":null,"telegram":null,"pdfs":null,"clipboard":null},"sensors":{"ids":null,"analyzer":null,"urlquery":null},"javascript":{"script":[{"url":{"schema":"https","addr":"cdn.tailwindcss.com/","fqdn":"cdn.tailwindcss.com","domain":"tailwindcss.com","tld":"com"},"ip":{"addr":"104.26.3.143","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"introduction_type":"scriptElement","is_inline":false,"md5":"7a614b9a197e532c00d09a23b0996b5f","sha1":"1ff1738a40f3716e30e9031b181b0955ae578955","sha256":"176e894661aa9cdc9a5cba6c720044cbbf7b8bd80d1c9a142a7c24b1b6c50d15","sha512":"a67bc26f52d938358471be5671ff4b79e11af4e68b486aaf73a35a4c9bf3777aab51101af81563b4e5b7ba4b04dd8971fcfa9ee2c41fb10a0c1ee5604a99abd6","ssdeep":"12288:fpgrZxSAoNbJb0Wie75aUXGuyQZhK4O0s:RCVoNB0Wie75aUWmnO0s","tlshash":"e8844aa57396702647eb51e850ea1042f2beaa38840c44bcf7edd4da39e5e4440fbf79","size":407279,"data":"","first_seen":"2025-07-28T16:58:08.903462Z","last_seen":"2026-07-27T02:53:09.073714Z","times_seen":46527,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"introduction_type":"scriptElement","is_inline":true,"md5":"1b983a7a09885e7beb58a60742d13dda","sha1":"a8653667f39c8d05579de84777cf80e195e9b63d","sha256":"f76634f4dea18cac3039aa67f58d9fb35d6c78a6ef8238348e557ab4959c7b96","sha512":"33c88aa444314e9f040aa14c1bb7283fdeece0b2203cb8d4d86f46cf530832d5c123538d1216c4be06428eb88246f761fe24481f03fc38c10ae0283d5645160b","ssdeep":"","tlshash":"c8b0920600310b7a40a401ea2f8020f084f22201e258525020ca6850249c014a294a5b","size":105,"data":"","first_seen":"2026-07-10T12:33:02.682359Z","last_seen":"2026-07-27T00:23:53.387409Z","times_seen":24,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/assets/app.js","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"introduction_type":"scriptElement","is_inline":false,"md5":"a8b8844304bb7b5917b42989171cfc45","sha1":"b3b2211f736b1407f3e9b5daca4ccfe24eb6559f","sha256":"3bad8118a98135d7afd2958a6bf0c3ecd92fe939f07376d29a11ee3afcd7ecac","sha512":"1337407995152c6e1117e34f9094d3322bd948178697ae3c8bc8f9cb51826b0d2f36c84c1498364bb8b0b449ba15091e31259e0d3d284fd74b40b6209428d049","ssdeep":"","tlshash":"c021799f718105b446ff5e7f73a18b84f93141675900d121b57c8d952f30d8857b6fa8","size":1399,"data":"","first_seen":"2026-07-10T12:33:02.678313Z","last_seen":"2026-07-27T00:23:53.385651Z","times_seen":24,"alerts":{"ids":null,"analyzer":null,"urlquery":null}}],"eval":null,"write":null,"console":[{"level":"warn","text":"cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation","filename":"https://cdn.tailwindcss.com/","line_number":64,"column_number":1711}]},"http":[{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T00:16:41.596Z","timestamp":1785111401596,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"www.trustwallet.com-two-factor-authentication14.ao.yesixrq.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:11:34 GMT","end":"Tue, 20 Oct 2026 07:11:33 GMT"},"fingerprint":{"sha1":"EF:90:7B:FC:29:74:E0:BE:AA:0B:D4:81:A5:1E:C2:7E:FC:F7:00:EF","sha256":"A4:C2:14:72:86:53:F8:2F:65:53:A7:C7:B6:F6:57:DF:E0:CE:CC:A8:45:CB:E0:14:F5:79:B0:11:0E:FA:9C:5A"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.ao.yesixrq.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.vv.xtkuwd.com/\r\nUpgrade-Insecure-Requests: 1\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: cross-site\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2026 00:16:41 GMT\r\nServer: Apache\r\nLast-Modified: Wed, 22 Jul 2026 08:13:35 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 1787\r\nKeep-Alive: timeout=5, max=100\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Tailwind CSS","description":"Tailwind is a utility-first CSS framework.","website":"https://tailwindcss.com/","common_platform_enumeration":"","icon":"tailwindcss.svg","categories":["UI frameworks"]},{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":1787,"size_decoded":2030,"mime_type":"text/html","magic":"HTML document, ASCII text, with CRLF line terminators","md5":"638ca84a6d3b728187cfe65ae61fd2c5","sha1":"e83e8497be7645f4af72d1c3bcf6005d45b49e92","sha256":"79e8059e546a912ce31c2c5265cbf73b1d1047bf2aea120bbaaebefe7013113d","sha512":"831a2c0ee3b7f6be4f580248cd78dbc414c694d82e5f63315193c3e40d0376d8e6a58ba2066c544ab7716c5d259ea091f53d5c28109ed125ca77bf21c6e2681e","ssdeep":"","tlshash":"7d31de6485921d2a013354a82be09799fa978607d78a866031fd2be33ff6c90de17299","first_seen":"2026-07-20T03:07:10.521735Z","last_seen":"2026-07-27T00:23:53.380869Z","times_seen":18,"resource_available":true,"data":"PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPlRydXN0IFdhbGxldDwvdGl0bGU+DQoNCjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi50YWlsd2luZGNzcy5jb20iPjwvc2NyaXB0Pg0KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJhc3NldHMvc3R5bGUuY3NzIj4NCg0KPC9oZWFkPg0KDQo8Ym9keT4NCg0KPGRpdiBjbGFzcz0iYW5pbWF0ZWQtYmciPjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJmb3JtLWNhcmQiIGlkPSJjYXJkIiBzdHlsZT0ibWF4LXdpZHRoOjUwMHB4O21hcmdpbjo4MHB4IGF1dG87Ij4NCiANCjwhLS0gTE9HTyAtLT4NCiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHg7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0ibG9nby1wbGFjZWhvbGRlciIgc3R5bGU9Ig0KICAgIHdpZHRoOjgwcHg7DQogICAgaGVpZ2h0OjgwcHg7DQogICAgYm9yZGVyLXJhZGl1czoxNHB4Ow0KICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaW1nL1QxLnBuZycpOw0KICAgIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOw0KIj48L2Rpdj4NCiAgICA8L2Rpdj4NCjxoMj5UcnVzdCBXYWxsZXQ8L2gyPiA8L2JyPg0KICAgIDwhLS0gU1RFUFBFUiAtLT4NCiAgICA8ZGl2IGNsYXNzPSJzdGVwcGVyIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZlIj5TdGVwIEE8L2Rpdj4NCiAgICAgICAgPGRpdj5TdGVwIEI8L2Rpdj4NCiAgICAgICAgPGRpdj5Db21wbGV0ZTwvZGl2Pg0KICAgIDwvZGl2Pg0KDQogICAgPGRpdiBjbGFzcz0ic3RlcC1saW5lIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kb25lIj48L2Rpdj4NCiAgICAgICAgPGRpdj48L2Rpdj4NCiAgICAgICAgPGRpdj48L2Rpdj4NCiAgICA8L2Rpdj4NCg0KICAgIDxoMj5UcnVzdCBXYWxsZXQ8L2gyPg0KDQogICAgPHAgc3R5bGU9Im9wYWNpdHk6MC43O21hcmdpbi1ib3R0b206MTVweDsiPg0KICAgICAgICA8L2JyPiBQcm92aWRlIGEgdmFsaWQgcGhvbmUgbnVtYmVyIGFuZCBlbWFpbCBhZGRyZXNzIGZvciB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLg0KICAgIDwvcD4NCg0KICAgIDxmb3JtIGFjdGlvbj0iVHJ1c3RXYWxsZXQyLmh0bWwiIG1ldGhvZD0iR0VUIiBvbnN1Ym1pdD0iZ29Ub1N0ZXBCKHRoaXMpIj4NCg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlucHV0LW1vZGVybiIgbmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Ik5hbWUiIHJlcXVpcmVkPg0KICAgICAgICA8aW5wdXQgY2xhc3M9ImlucHV0LW1vZGVybiIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJFbWFpbCIgcmVxdWlyZWQ+DQogICAgICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQtbW9kZXJuIiBuYW1lPSJwaG9uZSIgcGxhY2Vob2xkZXI9IlBob25lIiByZXF1aXJlZD4NCg0KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZ29Ub1N0ZXBCKHRoaXMuZm9ybSkiIGNsYXNzPSJidXR0b24tbW9kZXJuIj4NCiAgICAgICAgICAgIENvbnRpbnVlDQogICAgICAgIDwvYnV0dG9uPg0KDQogICAgPC9mb3JtPg0KDQo8L2Rpdj4NCg0KPHNjcmlwdD4NCmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJzZWxlY3RlZENvbXBhbnlJZCIsICIyIik7DQpsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2VsZWN0ZWRDb21wYW55TmFtZSIsICJDb21wYW55IDIiKTsNCjwvc2NyaXB0Pg0KDQo8c2NyaXB0IHNyYz0iYXNzZXRzL2FwcC5qcyI+PC9zY3JpcHQ+DQoNCjwvYm9keT4NCjwvaHRtbD4="}},"time_used":115,"timings":{"blocked":-1,"dns":40,"connect":23,"send":0,"wait":24,"receive":0,"ssl":28},"alerts":{"ids":null,"analyzer":[{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"cdn.tailwindcss.com/","fqdn":"cdn.tailwindcss.com","domain":"tailwindcss.com","tld":"com"},"ip":{"addr":"104.26.3.143","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:41.999Z","timestamp":1785111401999,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"tailwindcss.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Fri, 17 Jul 2026 20:38:38 GMT","end":"Thu, 15 Oct 2026 21:38:35 GMT"},"fingerprint":{"sha1":"AF:4F:AD:59:FA:ED:77:04:0D:32:56:48:B0:E5:1B:38:67:6D:7D:02","sha256":"E7:FC:CF:2D:6A:CC:F5:3C:4C:1E:9D:CD:21:8A:72:A3:DB:7C:B1:50:0F:83:D1:DC:E4:AD:25:90:8F:98:37:0F"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: cdn.tailwindcss.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-Fetch-Storage-Access: none\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/2 302 \r\ndate: Mon, 27 Jul 2026 00:16:42 GMT\r\ncache-control: max-age=14400\r\nlocation: /3.4.17\r\nserver: cloudflare\r\nstrict-transport-security: max-age=63072000\r\nx-vercel-cache: MISS\r\nx-vercel-id: fra1::iad1::rwch4-1785111048941-29e52ba3a5cc\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\nage: 352\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=dgfcpYyFHA7oCeEWPX%2FKS%2BY80bD9cIrXFjv9a022%2FCbx6uPjpSx9FcSNmgtNQ4p9L2h3nxXnRiM7ViYuz%2BrGROgr3JKt%2FSWkPAuXSPq49DZ1SBkMxvOamRlV%2BlA0WdxITNg8L7E%3D\"}]}\r\ncf-ray: a21774f6aa100b31-OSL\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"302","status_text":"","fingerprints":[{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]},{"name":"Vercel","description":"Vercel is a cloud platform for static frontends and serverless functions.","website":"https://vercel.com","common_platform_enumeration":"","icon":"vercel.svg","categories":["PaaS"]},{"name":"HSTS","description":"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.","website":"https://www.rfc-editor.org/rfc/rfc6797#section-6.1","common_platform_enumeration":"","icon":"","categories":["Security"]}],"data":{"size":0,"size_decoded":0,"mime_type":"text/javascript","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T02:51:03.003348Z","times_seen":17554215,"resource_available":true,"data":null}},"time_used":28,"timings":{"blocked":-1,"dns":3,"connect":1,"send":0,"wait":7,"receive":0,"ssl":17},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/assets/style.css","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:42.002Z","timestamp":1785111402002,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"www.trustwallet.com-two-factor-authentication14.ao.yesixrq.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:11:34 GMT","end":"Tue, 20 Oct 2026 07:11:33 GMT"},"fingerprint":{"sha1":"EF:90:7B:FC:29:74:E0:BE:AA:0B:D4:81:A5:1E:C2:7E:FC:F7:00:EF","sha256":"A4:C2:14:72:86:53:F8:2F:65:53:A7:C7:B6:F6:57:DF:E0:CE:CC:A8:45:CB:E0:14:F5:79:B0:11:0E:FA:9C:5A"}}},"request":{"raw":"GET /assets/style.css HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.ao.yesixrq.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2026 00:16:42 GMT\r\nServer: Apache\r\nLast-Modified: Wed, 22 Jul 2026 08:13:35 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 6466\r\nKeep-Alive: timeout=5, max=99\r\nConnection: Keep-Alive\r\nContent-Type: text/css\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":6466,"size_decoded":6707,"mime_type":"text/css","magic":"ASCII text, with CRLF line terminators","md5":"6c685053d67fb3db44aec166212f546c","sha1":"9a92e3fe2d2ef93aeac4faa922df60f6234060f3","sha256":"977170377d13c3e91d04dd967d5d3d4bc1684f009daf39439070a8322b707fc6","sha512":"7e95116aa92e53dee573e0a4aafc89b5f00ea40dea3bdd4080691e8b59ed59ee7c4b745104329c7684b27f7c7dbbd3c16f58f83feb160f4be5eab5ff23407001","ssdeep":"192:IBXCYluumt3i/jfwR0Ti1tFd3Y9pVJHHEpjTbhEO9n:SRmPW/ns9","tlshash":"09d143a4c942350ab233d69497f2515cf6e59407ca1752ad3bed3298dfb03ec8225edc","first_seen":"2026-07-20T03:07:10.51974Z","last_seen":"2026-07-27T00:23:53.384424Z","times_seen":18,"resource_available":false,"data":"Ym9keXsNCiAgICBtYXJnaW46MDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgYmFja2dyb3VuZDojMDcwQjE0Ow0KICAgIGNvbG9yOndoaXRlOw0KICAgIG92ZXJmbG93LXg6aGlkZGVuOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBCQUNLR1JPVU5EIChVU0VEIEVWRVJZV0hFUkUpDQo9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQouY29udGFpbmVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAgZ2FwOiAyMHB4Ow0KfQ0KDQoua29sb20gew0KICBmbGV4OiAxOw0KfQ0KDQovKiBEaXQgem9yZ3Qgdm9vciBkZSBzdHJha2tlIHVpdGxpam5pbmcgdmFuIGRlIGxpanN0ICovDQouc3RyYWtrZS1saWpzdCB7DQogIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7IC8qIFpvcmd0IGRhdCB0ZWtzdCBOT09JVCBvbmRlciBoZXQgY2lqZmVyIGtvbXQgKi8NCiAgcGFkZGluZy1sZWZ0OiAyMHB4OyAgICAgICAgICAgLyogUnVpbXRlIHZvb3IgZGUgY2lqZmVycyAqLw0KICBtYXJnaW46IDA7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQouc3RyYWtrZS1saWpzdCBsaSB7DQogIG1hcmdpbi1ib3R0b206IDEwcHg7ICAgICAgICAgIC8qIFJ1aW10ZSB0dXNzZW4gZGUgb3BlZW52b2xnZW5kZSBwdW50ZW4gKi8NCiAgdGV4dC1hbGlnbjogbGVmdDsgICAgICAgICAgICAgLyogT2YgJ2p1c3RpZnknIGFscyBqZSBvb2sgZGUgcmVjaHRlcmthbnQgc3RyYWsgd2lsdCAqLw0KfQ0KDQouY29udGFpbmVyIHsNCiAgZGlzcGxheTogZmxleDsgLyogWmV0IGRlIGNvbnRhaW5lciBvbSBpbiBlZW4gZmxleGJveCAqLw0KICBnYXA6IDIwcHg7ICAgICAvKiBSdWltdGUgdHVzc2VuIGRlIHR3ZWUga29sb21tZW4gKi8NCn0NCg0KLmtvbG9tIHsNCiAgZmxleDogMTsgICAgICAgICAgIC8qIFpvcmd0IGVydm9vciBkYXQgYmVpZGUga29sb21tZW4gZXZlbiBicmVlZCB6aWpuICovDQogIHRleHQtYWxpZ246IGp1c3RpZnk7IC8qIExpam50IGRlIHRla3N0IGFhbiBiZWlkZSBrYW50ZW4gc3RyYWsgdWl0ICovDQp9DQoNCi5hbmltYXRlZC1iZ3sNCiAgICBwb3NpdGlvbjpmaXhlZDsNCiAgICBpbnNldDowOw0KICAgIHotaW5kZXg6LTI7DQogICAgYmFja2dyb3VuZDoNCiAgICAgICAgbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LDI1NSwyNTUsMC4wMykgMXB4LCB0cmFuc3BhcmVudCAxcHgpLA0KICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4wMykgMXB4LCB0cmFuc3BhcmVudCAxcHgpOw0KICAgIGJhY2tncm91bmQtc2l6ZTo2MHB4IDYwcHg7DQogICAgYW5pbWF0aW9uOmdyaWRNb3ZlIDEycyBsaW5lYXIgaW5maW5pdGU7DQp9DQoNCkBrZXlmcmFtZXMgZ3JpZE1vdmV7DQogICAgZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpO30NCiAgICB0b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSg2MHB4KTt9DQp9DQoNCi5hbmltYXRlZC1iZzo6YWZ0ZXJ7DQogICAgY29udGVudDoiIjsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICBpbnNldDowOw0KICAgIGJhY2tncm91bmQ6DQogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIzFlM2E4YTMzLHRyYW5zcGFyZW50IDQwJSksDQogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgYm90dG9tIHJpZ2h0LCM3YzNhZWQzMyx0cmFuc3BhcmVudCA0MCUpOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBUWVBPR1JBUEhZIChJTkRFWCBIRVJPIE1BVENIRVMgRk9STSBTVFlMRSkNCj09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KaDF7DQogICAgdGV4dC1hbGlnbjpjZW50ZXI7DQogICAgZm9udC1zaXplOjQycHg7DQogICAgbWFyZ2luLXRvcDo2MHB4Ow0KICAgIG1hcmdpbi1ib3R0b206MTBweDsNCn0NCg0KcHsNCiAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICBvcGFjaXR5OjAuNzsNCiAgICBtYXJnaW4tYm90dG9tOjQwcHg7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIEZPUk0gQ0FSRCAoMUEgLyAxQiBTT1VSQ0UgT0YgVFJVVEgpDQo9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi5mb3JtLWNhcmR7DQogICAgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOw0KICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsNCiAgICBib3JkZXItcmFkaXVzOjIycHg7DQogICAgcGFkZGluZzozMHB4Ow0KICAgIG1hcmdpbjo4MHB4IGF1dG87DQp9DQoNCi8qIElOUFVUUyAqLw0KLmlucHV0LW1vZGVybnsNCiAgICB3aWR0aDoxMDAlOw0KICAgIHBhZGRpbmc6MTRweDsNCiAgICBtYXJnaW4tYm90dG9tOjEycHg7DQogICAgYm9yZGVyLXJhZGl1czoxMnB4Ow0KICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOw0KICAgIGJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsNCiAgICBjb2xvcjp3aGl0ZTsNCn0NCg0KLyogQlVUVE9OICovDQouYnV0dG9uLW1vZGVybnsNCiAgICB3aWR0aDoxMDAlOw0KICAgIHBhZGRpbmc6MTZweDsNCiAgICBib3JkZXItcmFkaXVzOjEycHg7DQogICAgYm9yZGVyOm5vbmU7DQogICAgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzI1NjNlYiwjN2MzYWVkKTsNCiAgICBjb2xvcjp3aGl0ZTsNCiAgICBmb250LXdlaWdodDpib2xkOw0KICAgIGN1cnNvcjpwb2ludGVyOw0KICAgIHRyYW5zaXRpb246MC4yNXM7DQp9DQoNCi5idXR0b24tbW9kZXJuOmhvdmVyew0KICAgIGJveC1zaGFkb3c6MCAwIDI1cHggcmdiYSgxMjQsNTgsMjM3LDAuNCk7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIFNURVBQRVIgKFVOQ0hBTkdFRCBMT09LKQ0KPT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQouc3RlcHBlcnsNCiAgICBkaXNwbGF5OmZsZXg7DQogICAganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47DQogICAgZm9udC1zaXplOjEycHg7DQogICAgb3BhY2l0eTowLjc7DQogICAgbWFyZ2luLWJvdHRvbToxMHB4Ow0KfQ0KDQouc3RlcHBlciAuYWN0aXZlew0KICAgIGNvbG9yOiM2MGE1ZmE7DQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCn0NCg0KLnN0ZXAtbGluZXsNCiAgICBkaXNwbGF5OmZsZXg7DQogICAgaGVpZ2h0OjRweDsNCiAgICBiYWNrZ3JvdW5kOiMxZjI5Mzc7DQogICAgYm9yZGVyLXJhZGl1czoxMHB4Ow0KICAgIG1hcmdpbi1ib3R0b206MjBweDsNCn0NCg0KLnN0ZXAtbGluZSBkaXZ7DQogICAgZmxleDoxOw0KfQ0KDQouc3RlcC1kb25lew0KICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCM2MGE1ZmEsIzdjM2FlZCk7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIElOREVYIEdSSUQgKEFEQVBURUQgVE8gRk9STSBERVNJR04pDQo9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi5ncmlkew0KICAgIGRpc3BsYXk6Z3JpZDsNCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTsNCiAgICBnYXA6MTVweDsNCiAgICBtYXgtd2lkdGg6MTEwMHB4Ow0KICAgIG1hcmdpbjowIGF1dG87DQogICAgcGFkZGluZzowIDIwcHg7DQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6NzY4cHgpew0KICAgIC5ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpO30NCn0NCg0KQG1lZGlhKG1heC13aWR0aDo0ODBweCl7DQogICAgLmdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9DQp9DQoNCi8qIENBUkQgKE1BVENIRVMgRk9STSBTVFlMRSBOT1cpICovDQouY2FyZHsNCiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCiAgICBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7DQogICAgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOw0KICAgIGJvcmRlci1yYWRpdXM6MThweDsNCiAgICBwYWRkaW5nOjIwcHg7DQogICAgdGV4dC1hbGlnbjpjZW50ZXI7DQogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQogICAgY29sb3I6d2hpdGU7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KICAgIHRyYW5zaXRpb246MC4yNXMgZWFzZTsNCn0NCg0KLmNhcmQ6aG92ZXJ7DQogICAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTZweCk7DQogICAgYm94LXNoYWRvdzowIDE1cHggMzVweCByZ2JhKDk2LDE2NSwyNTAsMC4yNSksDQogICAgICAgICAgICAgICAwIDAgMjVweCByZ2JhKDEyNCw1OCwyMzcsMC4yNSk7DQp9DQoNCi8qIExPR08gKi8NCi5sb2dvew0KICAgIHdpZHRoOjUwcHg7DQogICAgaGVpZ2h0OjUwcHg7DQogICAgbWFyZ2luOjAgYXV0byAxMHB4IGF1dG87DQogICAgYm9yZGVyLXJhZGl1czoxNHB4Ow0KICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjNjBhNWZhLCM3YzNhZWQpOw0KfQ0KDQovKiBSSVBQTEUgKi8NCi5yaXBwbGV7DQogICAgcG9zaXRpb246YWJzb2x1dGU7DQogICAgYm9yZGVyLXJhZGl1czo1MCU7DQogICAgdHJhbnNmb3JtOnNjYWxlKDApOw0KICAgIGFuaW1hdGlvbjpyaXBwbGVBbmltIDYwMG1zIGxpbmVhcjsNCiAgICBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7DQogICAgcG9pbnRlci1ldmVudHM6bm9uZTsNCn0NCg0KQGtleWZyYW1lcyByaXBwbGVBbmltew0KICAgIHRve3RyYW5zZm9ybTpzY2FsZSg0KTtvcGFjaXR5OjA7fQ0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBGT1JNIEdSSUQgKFdPUkRTKQ0KPT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQouZHluYW1pYy1ncmlkew0KICAgIGRpc3BsYXk6Z3JpZDsNCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDYsMWZyKTsNCiAgICBnYXA6OHB4Ow0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjc2OHB4KXsNCiAgICAuZHluYW1pYy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpO30NCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgRFJPUERPV04NCj09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KLmRyb3Bkb3duew0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KICAgIG1hcmdpbi1ib3R0b206MTVweDsNCn0NCg0KLmRyb3Bkb3duLXNlbGVjdGVkew0KICAgIHBhZGRpbmc6MTRweDsNCiAgICBib3JkZXItcmFkaXVzOjEycHg7DQogICAgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7DQogICAgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOw0KICAgIGN1cnNvcjpwb2ludGVyOw0KfQ0KDQouZHJvcGRvd24tbGlzdHsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICB3aWR0aDoxMDAlOw0KICAgIG1hcmdpbi10b3A6NnB4Ow0KICAgIGJhY2tncm91bmQ6IzBmMTcyYTsNCiAgICBib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsNCiAgICBib3JkZXItcmFkaXVzOjEycHg7DQp9DQoNCi5kcm9wZG93bi1saXN0IGRpdnsNCiAgICBwYWRkaW5nOjEycHg7DQogICAgY3Vyc29yOnBvaW50ZXI7DQp9DQoNCi5kcm9wZG93bi1saXN0IGRpdjpob3ZlcnsNCiAgICBiYWNrZ3JvdW5kOiMxZTI5M2I7DQp9DQoNCi5oaWRkZW57ZGlzcGxheTpub25lO30NCg0KLmxvZ28tcGxhY2Vob2xkZXJ7DQogICAgd2lkdGg6NTRweDsNCiAgICBoZWlnaHQ6NTRweDsNCiAgICBib3JkZXItcmFkaXVzOjE0cHg7DQogICAgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCM2MGE1ZmEsIzdjM2FlZCk7DQogICAgYm94LXNoYWRvdzowIDAgMThweCByZ2JhKDk2LDE2NSwyNTAsMC4zNSk7DQp9DQouaGVyb3sNCiAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICBtYXJnaW4tdG9wOjcwcHg7DQogICAgbWFyZ2luLWJvdHRvbTo0MHB4Ow0KfQ0KDQouaGVyby10aXRsZXsNCiAgICBmb250LXNpemU6NDRweDsNCiAgICBmb250LXdlaWdodDpib2xkOw0KICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCM2MGE1ZmEsIzdjM2FlZCwjNjBhNWZhKTsNCiAgICBiYWNrZ3JvdW5kLXNpemU6MjAwJSAyMDAlOw0KICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7DQogICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7DQogICAgYW5pbWF0aW9uOmdyYWRpZW50TW92ZSAxMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7DQp9DQoNCi5oZXJvLXN1YnRpdGxlew0KICAgIG9wYWNpdHk6MC43Ow0KICAgIG1hcmdpbi10b3A6MTBweDsNCn0NCg0KQGtleWZyYW1lcyBncmFkaWVudE1vdmV7DQogICAgMCV7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246MCUgNTAlOw0KICAgIH0NCiAgICA1MCV7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCU7DQogICAgfQ0KICAgIDEwMCV7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246MCUgNTAlOw0KICAgIH0NCn0NCg0KLmZvcm0tY2FyZCB7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ=="}},"time_used":24,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/favicon.ico","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:42.307Z","timestamp":1785111402307,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"www.trustwallet.com-two-factor-authentication14.ao.yesixrq.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:11:34 GMT","end":"Tue, 20 Oct 2026 07:11:33 GMT"},"fingerprint":{"sha1":"EF:90:7B:FC:29:74:E0:BE:AA:0B:D4:81:A5:1E:C2:7E:FC:F7:00:EF","sha256":"A4:C2:14:72:86:53:F8:2F:65:53:A7:C7:B6:F6:57:DF:E0:CE:CC:A8:45:CB:E0:14:F5:79:B0:11:0E:FA:9C:5A"}}},"request":{"raw":"GET /favicon.ico HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.ao.yesixrq.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=6\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 404 Not Found\r\nDate: Mon, 27 Jul 2026 00:16:42 GMT\r\nServer: Apache\r\nContent-Length: 355\r\nKeep-Alive: timeout=5, max=95\r\nConnection: Keep-Alive\r\nContent-Type: text/html; charset=iso-8859-1\r\n\r\n","headers":null,"cookies":null,"status_code":"404","status_text":"Not Found","fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":355,"size_decoded":555,"mime_type":"text/html; charset=iso-8859-1","magic":"HTML document, ASCII text","md5":"4525b2d648f7c457a689fd96421783a5","sha1":"11bfe30ce44585a15a38e86bc094224ddfe2c08e","sha256":"cc0b4e42510d49c6decd464123ecf3b14ae9b47f9b4ed2ee64893e2d6520a264","sha512":"94e3e8246cf38ff7740e51aa115c8c455b14f78e672c2686b782c0ce30b6fa2dbd91a78b29b3964d9c0414aabd4b9391fd5db326665e25b4b8e73dae60ffe979","ssdeep":"","tlshash":"71e0c04f4057b3474011a2907dc01291e505236b38a152f93ac09467500897dc4aa2dd","first_seen":"2025-12-09T03:51:58.5943Z","last_seen":"2026-07-27T03:09:22.96148Z","times_seen":47261,"resource_available":true,"data":"PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+CjxodG1sPjxoZWFkPgo8dGl0bGU+NDA0IE5vdCBGb3VuZDwvdGl0bGU+CjwvaGVhZD48Ym9keT4KPGgxPk5vdCBGb3VuZDwvaDE+CjxwPlRoZSByZXF1ZXN0ZWQgVVJMIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuPC9wPgo8cD5BZGRpdGlvbmFsbHksIGEgNDA0IE5vdCBGb3VuZAplcnJvciB3YXMgZW5jb3VudGVyZWQgd2hpbGUgdHJ5aW5nIHRvIHVzZSBhbiBFcnJvckRvY3VtZW50IHRvIGhhbmRsZSB0aGUgcmVxdWVzdC48L3A+CjwvYm9keT48L2h0bWw+Cg=="}},"time_used":24,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com/","fqdn":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","domain":"xtkuwd.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T00:16:41.098Z","timestamp":1785111401098,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"trustwallet.com-two-factor-authentication18.vv.xtkuwd.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:02:12 GMT","end":"Tue, 20 Oct 2026 07:02:11 GMT"},"fingerprint":{"sha1":"6B:0C:7C:33:36:5C:1C:F2:14:99:D5:8B:B9:C9:C5:CA:B5:2B:33:1E","sha256":"BB:92:D6:69:49:CF:6E:F4:A7:70:64:5A:85:6B:F9:85:E3:D8:24:11:E5:21:1F:A8:2E:5D:06:5E:33:F0:CF:A5"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.vv.xtkuwd.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nUpgrade-Insecure-Requests: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: document\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-Site: none\r\nPriority: u=0, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2026 00:16:41 GMT\r\nServer: Apache\r\nLast-Modified: Wed, 22 Jul 2026 08:03:55 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 184\r\nKeep-Alive: timeout=5, max=100\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":0,"size_decoded":0,"mime_type":"","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-07-27T02:51:03.003348Z","times_seen":17554215,"resource_available":true,"data":null}},"time_used":0,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":0,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.vv.xtkuwd.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/assets/app.js","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:42.004Z","timestamp":1785111402004,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"www.trustwallet.com-two-factor-authentication14.ao.yesixrq.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:11:34 GMT","end":"Tue, 20 Oct 2026 07:11:33 GMT"},"fingerprint":{"sha1":"EF:90:7B:FC:29:74:E0:BE:AA:0B:D4:81:A5:1E:C2:7E:FC:F7:00:EF","sha256":"A4:C2:14:72:86:53:F8:2F:65:53:A7:C7:B6:F6:57:DF:E0:CE:CC:A8:45:CB:E0:14:F5:79:B0:11:0E:FA:9C:5A"}}},"request":{"raw":"GET /assets/app.js HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.ao.yesixrq.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2026 00:16:42 GMT\r\nServer: Apache\r\nLast-Modified: Wed, 22 Jul 2026 08:13:35 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 1399\r\nKeep-Alive: timeout=5, max=98\r\nConnection: Keep-Alive\r\nContent-Type: text/javascript\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":1399,"size_decoded":1647,"mime_type":"text/javascript","magic":"ASCII text, with CRLF line terminators","md5":"a8b8844304bb7b5917b42989171cfc45","sha1":"b3b2211f736b1407f3e9b5daca4ccfe24eb6559f","sha256":"3bad8118a98135d7afd2958a6bf0c3ecd92fe939f07376d29a11ee3afcd7ecac","sha512":"1337407995152c6e1117e34f9094d3322bd948178697ae3c8bc8f9cb51826b0d2f36c84c1498364bb8b0b449ba15091e31259e0d3d284fd74b40b6209428d049","ssdeep":"","tlshash":"c021799f718105b446ff5e7f73a18b84f93141675900d121b57c8d952f30d8857b6fa8","first_seen":"2026-07-10T12:33:02.678313Z","last_seen":"2026-07-27T00:23:53.385651Z","times_seen":24,"resource_available":true,"data":"ZnVuY3Rpb24gc2F2ZShrZXksdmFsdWUpew0KICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSx2YWx1ZSk7DQp9DQoNCmZ1bmN0aW9uIGxvYWQoa2V5KXsNCiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KSB8fCAiIjsNCn0NCg0KZnVuY3Rpb24gZ29Ub1N0ZXBCKGZvcm0pew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhcmQiKS5zdHlsZS5vcGFjaXR5PSIwIjsNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FyZCIpLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWCgtNTBweCkiOw0KICAgIHNldFRpbWVvdXQoKCk9PmZvcm0uc3VibWl0KCksNTAwKTsNCn0NCg0KZnVuY3Rpb24gc3VibWl0Rm9ybShmb3JtKXsNCiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOw0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYXJkIikuc3R5bGUub3BhY2l0eT0iMCI7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhcmQiKS5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZVgoNTBweCkiOw0KICAgIHNldFRpbWVvdXQoKCk9PmZvcm0uc3VibWl0KCksNTAwKTsNCn0NCg0KZnVuY3Rpb24gdG9nZ2xlRHJvcGRvd24oKXsNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZHJvcGRvd25MaXN0IikuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIik7DQp9DQoNCmZ1bmN0aW9uIHNlbGVjdFdvcmRzKHZhbCl7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRyb3Bkb3duU2VsZWN0ZWQiKS5pbm5lclRleHQgPSB2YWwrIiB3b3JkcyI7DQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndvcmRDb3VudCIpLnZhbHVlID0gdmFsOw0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkcm9wZG93bkxpc3QiKS5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsNCiAgICBnZW5lcmF0ZVdvcmRzKHZhbCk7DQp9DQoNCmZ1bmN0aW9uIGdlbmVyYXRlV29yZHMoY291bnQpew0KICAgIGxldCBib3g9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZpZWxkcyIpOw0KICAgIGJveC5pbm5lckhUTUw9IiI7DQogICAgZm9yKGxldCBpPTE7aTw9Y291bnQ7aSsrKXsNCiAgICAgICAgbGV0IGlucHV0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7DQogICAgICAgIGlucHV0LmNsYXNzTmFtZT0iaW5wdXQtbW9kZXJuIjsNCiAgICAgICAgaW5wdXQubmFtZT0id29yZF8iK2k7DQogICAgICAgIGlucHV0LnBsYWNlaG9sZGVyPSJXb3JkICIraTsNCiAgICAgICAgaW5wdXQudmFsdWU9bG9hZCgid29yZF8iK2kpOw0KICAgICAgICBpbnB1dC5vbmlucHV0PSgpPT5zYXZlKCJ3b3JkXyIraSxpbnB1dC52YWx1ZSk7DQogICAgICAgIGJveC5hcHBlbmRDaGlsZChpbnB1dCk7DQogICAgfQ0KfQ=="}},"time_used":45,"timings":{"blocked":-1,"dns":0,"connect":23,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"cdn.tailwindcss.com/3.4.17","fqdn":"cdn.tailwindcss.com","domain":"tailwindcss.com","tld":"com"},"ip":{"addr":"104.26.3.143","port":443,"asn":13335,"as":"CLOUDFLARENET","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:42.032Z","timestamp":1785111402032,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"ECDSA-P256-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"tailwindcss.com","organization":""},"issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validity":{"start":"Fri, 17 Jul 2026 20:38:38 GMT","end":"Thu, 15 Oct 2026 21:38:35 GMT"},"fingerprint":{"sha1":"AF:4F:AD:59:FA:ED:77:04:0D:32:56:48:B0:E5:1B:38:67:6D:7D:02","sha256":"E7:FC:CF:2D:6A:CC:F5:3C:4C:1E:9D:CD:21:8A:72:A3:DB:7C:B1:50:0F:83:D1:DC:E4:AD:25:90:8F:98:37:0F"}}},"request":{"raw":"GET /3.4.17 HTTP/1.1\r\nHost: cdn.tailwindcss.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: */*\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Storage-Access: none\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: cross-site\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/2 200 \r\ndate: Mon, 27 Jul 2026 00:16:42 GMT\r\ncontent-type: text/javascript\r\ncache-control: max-age=31536000\r\ncontent-encoding: br\r\nserver: cloudflare\r\nstrict-transport-security: max-age=63072000\r\nx-vercel-cache: MISS\r\nx-vercel-id: fra1::iad1::bj55r-1781146628084-40ce7f37f405\r\nnel: {\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}\r\nvary: accept-encoding\r\nage: 3964773\r\nlast-modified: Wed, 01 Jul 2026 01:49:34 GMT\r\ncf-cache-status: HIT\r\nreport-to: {\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=olFUKYnn2e0627n0D%2B0cEM5qe7lc5Zaamwrue2EoLu%2BhaoDuE81eks1DwpKXte6osnE0I%2Bri4KuIz1gOG9jJoinZCx9iBAG1Moay05TJ8jHSKFlQCpJg9h%2F%2B58%2FmHrMpYNORqgU%3D\"}]}\r\ncf-ray: a21774f6ba180b31-OSL\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"HSTS","description":"HTTP Strict Transport Security (HSTS) informs browsers that the site should only be accessed using HTTPS.","website":"https://www.rfc-editor.org/rfc/rfc6797#section-6.1","common_platform_enumeration":"","icon":"","categories":["Security"]},{"name":"Cloudflare","description":"Cloudflare is a web-infrastructure and website-security company, providing content-delivery-network services, DDoS mitigation, Internet security, and distributed domain-name-server services.","website":"https://www.cloudflare.com","common_platform_enumeration":"","icon":"CloudFlare.svg","categories":["CDN"]},{"name":"Vercel","description":"Vercel is a cloud platform for static frontends and serverless functions.","website":"https://vercel.com","common_platform_enumeration":"","icon":"vercel.svg","categories":["PaaS"]}],"data":{"size":407279,"size_decoded":127126,"mime_type":"text/javascript","magic":"JavaScript source, ASCII text, with very long lines (52853)","md5":"7a614b9a197e532c00d09a23b0996b5f","sha1":"1ff1738a40f3716e30e9031b181b0955ae578955","sha256":"176e894661aa9cdc9a5cba6c720044cbbf7b8bd80d1c9a142a7c24b1b6c50d15","sha512":"a67bc26f52d938358471be5671ff4b79e11af4e68b486aaf73a35a4c9bf3777aab51101af81563b4e5b7ba4b04dd8971fcfa9ee2c41fb10a0c1ee5604a99abd6","ssdeep":"12288:fpgrZxSAoNbJb0Wie75aUXGuyQZhK4O0s:RCVoNB0Wie75aUWmnO0s","tlshash":"e8844aa57396702647eb51e850ea1042f2beaa38840c44bcf7edd4da39e5e4440fbf79","first_seen":"2025-07-28T16:58:08.903462Z","last_seen":"2026-07-27T02:53:09.073714Z","times_seen":46527,"resource_available":true,"data":"KCgpPT57dmFyIHF2PU9iamVjdC5jcmVhdGU7dmFyIEhpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgTHY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIE12PU9iamVjdC5nZXRQcm90b3R5cGVPZixOdj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBkZj1yPT5IaShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaGY9cj0+e2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZShyKTt0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtaWMgcmVxdWlyZSBvZiAiJytyKyciIGlzIG5vdCBzdXBwb3J0ZWQnKX07dmFyIFA9KHIsZSk9PigpPT4ociYmKGU9cihyPTApKSxlKTt2YXIgeD0ocixlKT0+KCk9PihlfHxyKChlPXtleHBvcnRzOnt9fSkuZXhwb3J0cyxlKSxlLmV4cG9ydHMpLEdlPShyLGUpPT57ZGYocik7Zm9yKHZhciB0IGluIGUpSGkocix0LHtnZXQ6ZVt0XSxlbnVtZXJhYmxlOiEwfSl9LEJ2PShyLGUsdCk9PntpZihlJiZ0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKWZvcihsZXQgaSBvZiBMdihlKSkhTnYuY2FsbChyLGkpJiZpIT09ImRlZmF1bHQiJiZIaShyLGkse2dldDooKT0+ZVtpXSxlbnVtZXJhYmxlOiEodD0kdihlLGkpKXx8dC5lbnVtZXJhYmxlfSk7cmV0dXJuIHJ9LHBlPXI9PkJ2KGRmKEhpKHIhPW51bGw/cXYoTXYocikpOnt9LCJkZWZhdWx0IixyJiZyLl9fZXNNb2R1bGUmJiJkZWZhdWx0ImluIHI/e2dldDooKT0+ci5kZWZhdWx0LGVudW1lcmFibGU6ITB9Ont2YWx1ZTpyLGVudW1lcmFibGU6ITB9KSkscik7dmFyIG0sdT1QKCgpPT57bT17cGxhdGZvcm06IiIsZW52Ont9LHZlcnNpb25zOntub2RlOiIxNC4xNy42In19fSk7dmFyIEZ2LGJlLGZ0PVAoKCk9Pnt1KCk7RnY9MCxiZT17cmVhZEZpbGVTeW5jOnI9PnNlbGZbcl18fCIiLHN0YXRTeW5jOigpPT4oe210aW1lTXM6RnYrK30pLHByb21pc2VzOntyZWFkRmlsZTpyPT5Qcm9taXNlLnJlc29sdmUoc2VsZltyXXx8IiIpfX19KTt2YXIgRnM9eCgob1AsZ2YpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgbWY9Y2xhc3N7Y29uc3RydWN0b3IoZT17fSl7aWYoIShlLm1heFNpemUmJmUubWF4U2l6ZT4wKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4U2l6ZWAgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCIpO2lmKHR5cGVvZiBlLm1heEFnZT09Im51bWJlciImJmUubWF4QWdlPT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4QWdlYCBtdXN0IGJlIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAwIik7dGhpcy5tYXhTaXplPWUubWF4U2l6ZSx0aGlzLm1heEFnZT1lLm1heEFnZXx8MS8wLHRoaXMub25FdmljdGlvbj1lLm9uRXZpY3Rpb24sdGhpcy5jYWNoZT1uZXcgTWFwLHRoaXMub2xkQ2FjaGU9bmV3IE1hcCx0aGlzLl9zaXplPTB9X2VtaXRFdmljdGlvbnMoZSl7aWYodHlwZW9mIHRoaXMub25FdmljdGlvbj09ImZ1bmN0aW9uIilmb3IobGV0W3QsaV1vZiBlKXRoaXMub25FdmljdGlvbih0LGkudmFsdWUpfV9kZWxldGVJZkV4cGlyZWQoZSx0KXtyZXR1cm4gdHlwZW9mIHQuZXhwaXJ5PT0ibnVtYmVyIiYmdC5leHBpcnk8PURhdGUubm93KCk/KHR5cGVvZiB0aGlzLm9uRXZpY3Rpb249PSJmdW5jdGlvbiImJnRoaXMub25FdmljdGlvbihlLHQudmFsdWUpLHRoaXMuZGVsZXRlKGUpKTohMX1fZ2V0T3JEZWxldGVJZkV4cGlyZWQoZSx0KXtpZih0aGlzLl9kZWxldGVJZkV4cGlyZWQoZSx0KT09PSExKXJldHVybiB0LnZhbHVlfV9nZXRJdGVtVmFsdWUoZSx0KXtyZXR1cm4gdC5leHBpcnk/dGhpcy5fZ2V0T3JEZWxldGVJZkV4cGlyZWQoZSx0KTp0LnZhbHVlfV9wZWVrKGUsdCl7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIHRoaXMuX2dldEl0ZW1WYWx1ZShlLGkpfV9zZXQoZSx0KXt0aGlzLmNhY2hlLnNldChlLHQpLHRoaXMuX3NpemUrKyx0aGlzLl9zaXplPj10aGlzLm1heFNpemUmJih0aGlzLl9zaXplPTAsdGhpcy5fZW1pdEV2aWN0aW9ucyh0aGlzLm9sZENhY2hlKSx0aGlzLm9sZENhY2hlPXRoaXMuY2FjaGUsdGhpcy5jYWNoZT1uZXcgTWFwKX1fbW92ZVRvUmVjZW50KGUsdCl7dGhpcy5vbGRDYWNoZS5kZWxldGUoZSksdGhpcy5fc2V0KGUsdCl9Kl9lbnRyaWVzQXNjZW5kaW5nKCl7Zm9yKGxldCBlIG9mIHRoaXMub2xkQ2FjaGUpe2xldFt0LGldPWU7dGhpcy5jYWNoZS5oYXModCl8fHRoaXMuX2RlbGV0ZUlmRXhwaXJlZCh0LGkpPT09ITEmJih5aWVsZCBlKX1mb3IobGV0IGUgb2YgdGhpcy5jYWNoZSl7bGV0W3QsaV09ZTt0aGlzLl9kZWxldGVJZkV4cGlyZWQodCxpKT09PSExJiYoeWllbGQgZSl9fWdldChlKXtpZih0aGlzLmNhY2hlLmhhcyhlKSl7bGV0IHQ9dGhpcy5jYWNoZS5nZXQoZSk7cmV0dXJuIHRoaXMuX2dldEl0ZW1WYWx1ZShlLHQpfWlmKHRoaXMub2xkQ2FjaGUuaGFzKGUpKXtsZXQgdD10aGlzLm9sZENhY2hlLmdldChlKTtpZih0aGlzLl9kZWxldGVJZkV4cGlyZWQoZSx0KT09PSExKXJldHVybiB0aGlzLl9tb3ZlVG9SZWNlbnQoZSx0KSx0LnZhbHVlfX1zZXQoZSx0LHttYXhBZ2U6aT10aGlzLm1heEFnZT09PTEvMD92b2lkIDA6RGF0ZS5ub3coKSt0aGlzLm1heEFnZX09e30pe3RoaXMuY2FjaGUuaGFzKGUpP3RoaXMuY2FjaGUuc2V0KGUse3ZhbHVlOnQsbWF4QWdlOml9KTp0aGlzLl9zZXQoZSx7dmFsdWU6dCxleHBpcnk6aX0pfWhhcyhlKXtyZXR1cm4gdGhpcy5jYWNoZS5oYXMoZSk/IXRoaXMuX2RlbGV0ZUlmRXhwaXJlZChlLHRoaXMuY2FjaGUuZ2V0KGUpKTp0aGlzLm9sZENhY2hlLmhhcyhlKT8hdGhpcy5fZGVsZXRlSWZFeHBpcmVkKGUsdGhpcy5vbGRDYWNoZS5nZXQoZSkpOiExfXBlZWsoZSl7aWYodGhpcy5jYWNoZS5oYXMoZSkpcmV0dXJuIHRoaXMuX3BlZWsoZSx0aGlzLmNhY2hlKTtpZih0aGlzLm9sZENhY2hlLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVlayhlLHRoaXMub2xkQ2FjaGUpfWRlbGV0ZShlKXtsZXQgdD10aGlzLmNhY2hlLmRlbGV0ZShlKTtyZXR1cm4gdCYmdGhpcy5fc2l6ZS0tLHRoaXMub2xkQ2FjaGUuZGVsZXRlKGUpfHx0fWNsZWFyKCl7dGhpcy5jYWNoZS5jbGVhcigpLHRoaXMub2xkQ2FjaGUuY2xlYXIoKSx0aGlzLl9zaXplPTB9cmVzaXplKGUpe2lmKCEoZSYmZT4wKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJgbWF4U2l6ZWAgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCIpO2xldCB0PVsuLi50aGlzLl9lbnRyaWVzQXNjZW5kaW5nKCldLGk9dC5sZW5ndGgtZTtpPDA/KHRoaXMuY2FjaGU9bmV3IE1hcCh0KSx0aGlzLm9sZENhY2hlPW5ldyBNYXAsdGhpcy5fc2l6ZT10Lmxlbmd0aCk6KGk+MCYmdGhpcy5fZW1pdEV2aWN0aW9ucyh0LnNsaWNlKDAsaSkpLHRoaXMub2xkQ2FjaGU9bmV3IE1hcCh0LnNsaWNlKGkpKSx0aGlzLmNhY2hlPW5ldyBNYXAsdGhpcy5fc2l6ZT0wKSx0aGlzLm1heFNpemU9ZX0qa2V5cygpe2ZvcihsZXRbZV1vZiB0aGlzKXlpZWxkIGV9KnZhbHVlcygpe2ZvcihsZXRbLGVdb2YgdGhpcyl5aWVsZCBlfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlKXtsZXRbdCxpXT1lO3RoaXMuX2RlbGV0ZUlmRXhwaXJlZCh0LGkpPT09ITEmJih5aWVsZFt0LGkudmFsdWVdKX1mb3IobGV0IGUgb2YgdGhpcy5vbGRDYWNoZSl7bGV0W3QsaV09ZTt0aGlzLmNhY2hlLmhhcyh0KXx8dGhpcy5fZGVsZXRlSWZFeHBpcmVkKHQsaSk9PT0hMSYmKHlpZWxkW3QsaS52YWx1ZV0pfX0qZW50cmllc0Rlc2NlbmRpbmcoKXtsZXQgZT1bLi4udGhpcy5jYWNoZV07Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpe2xldCBpPWVbdF0sW24sc109aTt0aGlzLl9kZWxldGVJZkV4cGlyZWQobixzKT09PSExJiYoeWllbGRbbixzLnZhbHVlXSl9ZT1bLi4udGhpcy5vbGRDYWNoZV07Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpe2xldCBpPWVbdF0sW24sc109aTt0aGlzLmNhY2hlLmhhcyhuKXx8dGhpcy5fZGVsZXRlSWZFeHBpcmVkKG4scyk9PT0hMSYmKHlpZWxkW24scy52YWx1ZV0pfX0qZW50cmllc0FzY2VuZGluZygpe2ZvcihsZXRbZSx0XW9mIHRoaXMuX2VudHJpZXNBc2NlbmRpbmcoKSl5aWVsZFtlLHQudmFsdWVdfWdldCBzaXplKCl7aWYoIXRoaXMuX3NpemUpcmV0dXJuIHRoaXMub2xkQ2FjaGUuc2l6ZTtsZXQgZT0wO2ZvcihsZXQgdCBvZiB0aGlzLm9sZENhY2hlLmtleXMoKSl0aGlzLmNhY2hlLmhhcyh0KXx8ZSsrO3JldHVybiBNYXRoLm1pbih0aGlzLl9zaXplK2UsdGhpcy5tYXhTaXplKX19O2dmLmV4cG9ydHM9bWZ9KTt2YXIgeWYsYmY9UCgoKT0+e3UoKTt5Zj1yPT5yJiZyLl9oYXNofSk7ZnVuY3Rpb24gV2kocil7cmV0dXJuIHlmKHIse2lnbm9yZVVua25vd246ITB9KX12YXIgd2Y9UCgoKT0+e3UoKTtiZigpfSk7ZnVuY3Rpb24geHQocil7aWYocj1gJHtyfWAscj09PSIwIilyZXR1cm4iMCI7aWYoL15bKy1dPyhcZCt8XGQqXC5cZCspKGVbKy1dP1xkKyk/KCV8XHcrKT8kLy50ZXN0KHIpKXJldHVybiByLnJlcGxhY2UoL15bKy1dPy8sdD0+dD09PSItIj8iIjoiLSIpO2xldCBlPVsidmFyIiwiY2FsYyIsIm1pbiIsIm1heCIsImNsYW1wIl07Zm9yKGxldCB0IG9mIGUpaWYoci5pbmNsdWRlcyhgJHt0fShgKSlyZXR1cm5gY2FsYygke3J9ICogLTEpYH12YXIgR2k9UCgoKT0+e3UoKX0pO3ZhciB2Zix4Zj1QKCgpPT57dSgpO3ZmPVsicHJlZmxpZ2h0IiwiY29udGFpbmVyIiwiYWNjZXNzaWJpbGl0eSIsInBvaW50ZXJFdmVudHMiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJpbnNldCIsImlzb2xhdGlvbiIsInpJbmRleCIsIm9yZGVyIiwiZ3JpZENvbHVtbiIsImdyaWRDb2x1bW5TdGFydCIsImdyaWRDb2x1bW5FbmQiLCJncmlkUm93IiwiZ3JpZFJvd1N0YXJ0IiwiZ3JpZFJvd0VuZCIsImZsb2F0IiwiY2xlYXIiLCJtYXJnaW4iLCJib3hTaXppbmciLCJsaW5lQ2xhbXAiLCJkaXNwbGF5IiwiYXNwZWN0UmF0aW8iLCJzaXplIiwiaGVpZ2h0IiwibWF4SGVpZ2h0IiwibWluSGVpZ2h0Iiwid2lkdGgiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZmxleCIsImZsZXhTaHJpbmsiLCJmbGV4R3JvdyIsImZsZXhCYXNpcyIsInRhYmxlTGF5b3V0IiwiY2FwdGlvblNpZGUiLCJib3JkZXJDb2xsYXBzZSIsImJvcmRlclNwYWNpbmciLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ0cmFuc2xhdGUiLCJyb3RhdGUiLCJza2V3Iiwic2NhbGUiLCJ0cmFuc2Zvcm0iLCJhbmltYXRpb24iLCJjdXJzb3IiLCJ0b3VjaEFjdGlvbiIsInVzZXJTZWxlY3QiLCJyZXNpemUiLCJzY3JvbGxTbmFwVHlwZSIsInNjcm9sbFNuYXBBbGlnbiIsInNjcm9sbFNuYXBTdG9wIiwic2Nyb2xsTWFyZ2luIiwic2Nyb2xsUGFkZGluZyIsImxpc3RTdHlsZVBvc2l0aW9uIiwibGlzdFN0eWxlVHlwZSIsImxpc3RTdHlsZUltYWdlIiwiYXBwZWFyYW5jZSIsImNvbHVtbnMiLCJicmVha0JlZm9yZSIsImJyZWFrSW5zaWRlIiwiYnJlYWtBZnRlciIsImdyaWRBdXRvQ29sdW1ucyIsImdyaWRBdXRvRmxvdyIsImdyaWRBdXRvUm93cyIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJncmlkVGVtcGxhdGVSb3dzIiwiZmxleERpcmVjdGlvbiIsImZsZXhXcmFwIiwicGxhY2VDb250ZW50IiwicGxhY2VJdGVtcyIsImFsaWduQ29udGVudCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImp1c3RpZnlJdGVtcyIsImdhcCIsInNwYWNlIiwiZGl2aWRlV2lkdGgiLCJkaXZpZGVTdHlsZSIsImRpdmlkZUNvbG9yIiwiZGl2aWRlT3BhY2l0eSIsInBsYWNlU2VsZiIsImFsaWduU2VsZiIsImp1c3RpZnlTZWxmIiwib3ZlcmZsb3ciLCJvdmVyc2Nyb2xsQmVoYXZpb3IiLCJzY3JvbGxCZWhhdmlvciIsInRleHRPdmVyZmxvdyIsImh5cGhlbnMiLCJ3aGl0ZXNwYWNlIiwidGV4dFdyYXAiLCJ3b3JkQnJlYWsiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJPcGFjaXR5IiwiYmFja2dyb3VuZENvbG9yIiwiYmFja2dyb3VuZE9wYWNpdHkiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJncmFkaWVudENvbG9yU3RvcHMiLCJib3hEZWNvcmF0aW9uQnJlYWsiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRBdHRhY2htZW50IiwiYmFja2dyb3VuZENsaXAiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kUmVwZWF0IiwiYmFja2dyb3VuZE9yaWdpbiIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsIm9iamVjdEZpdCIsIm9iamVjdFBvc2l0aW9uIiwicGFkZGluZyIsInRleHRBbGlnbiIsInRleHRJbmRlbnQiLCJ2ZXJ0aWNhbEFsaWduIiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsInRleHRUcmFuc2Zvcm0iLCJmb250U3R5bGUiLCJmb250VmFyaWFudE51bWVyaWMiLCJsaW5lSGVpZ2h0IiwibGV0dGVyU3BhY2luZyIsInRleHRDb2xvciIsInRleHRPcGFjaXR5IiwidGV4dERlY29yYXRpb24iLCJ0ZXh0RGVjb3JhdGlvbkNvbG9yIiwidGV4dERlY29yYXRpb25TdHlsZSIsInRleHREZWNvcmF0aW9uVGhpY2tuZXNzIiwidGV4dFVuZGVybGluZU9mZnNldCIsImZvbnRTbW9vdGhpbmciLCJwbGFjZWhvbGRlckNvbG9yIiwicGxhY2Vob2xkZXJPcGFjaXR5IiwiY2FyZXRDb2xvciIsImFjY2VudENvbG9yIiwib3BhY2l0eSIsImJhY2tncm91bmRCbGVuZE1vZGUiLCJtaXhCbGVuZE1vZGUiLCJib3hTaGFkb3ciLCJib3hTaGFkb3dDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJvdXRsaW5lQ29sb3IiLCJyaW5nV2lkdGgiLCJyaW5nQ29sb3IiLCJyaW5nT3BhY2l0eSIsInJpbmdPZmZzZXRXaWR0aCIsInJpbmdPZmZzZXRDb2xvciIsImJsdXIiLCJicmlnaHRuZXNzIiwiY29udHJhc3QiLCJkcm9wU2hhZG93IiwiZ3JheXNjYWxlIiwiaHVlUm90YXRlIiwiaW52ZXJ0Iiwic2F0dXJhdGUiLCJzZXBpYSIsImZpbHRlciIsImJhY2tkcm9wQmx1ciIsImJhY2tkcm9wQnJpZ2h0bmVzcyIsImJhY2tkcm9wQ29udHJhc3QiLCJiYWNrZHJvcEdyYXlzY2FsZSIsImJhY2tkcm9wSHVlUm90YXRlIiwiYmFja2Ryb3BJbnZlcnQiLCJiYWNrZHJvcE9wYWNpdHkiLCJiYWNrZHJvcFNhdHVyYXRlIiwiYmFja2Ryb3BTZXBpYSIsImJhY2tkcm9wRmlsdGVyIiwidHJhbnNpdGlvblByb3BlcnR5IiwidHJhbnNpdGlvbkRlbGF5IiwidHJhbnNpdGlvbkR1cmF0aW9uIiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwid2lsbENoYW5nZSIsImNvbnRhaW4iLCJjb250ZW50IiwiZm9yY2VkQ29sb3JBZGp1c3QiXX0pO2Z1bmN0aW9uIGtmKHIsZSl7cmV0dXJuIHI9PT12b2lkIDA/ZTpBcnJheS5pc0FycmF5KHIpP3I6Wy4uLm5ldyBTZXQoZS5maWx0ZXIoaT0+ciE9PSExJiZyW2ldIT09ITEpLmNvbmNhdChPYmplY3Qua2V5cyhyKS5maWx0ZXIoaT0+cltpXSE9PSExKSkpXX12YXIgU2Y9UCgoKT0+e3UoKX0pO3ZhciBBZj17fTtHZShBZix7ZGVmYXVsdDooKT0+UWV9KTt2YXIgUWUsUWk9UCgoKT0+e3UoKTtRZT1uZXcgUHJveHkoe30se2dldDooKT0+U3RyaW5nfSl9KTtmdW5jdGlvbiBqcyhyLGUsdCl7dHlwZW9mIG0hPSJ1bmRlZmluZWQiJiZtLmVudi5KRVNUX1dPUktFUl9JRHx8dCYmQ2YuaGFzKHQpfHwodCYmQ2YuYWRkKHQpLGNvbnNvbGUud2FybigiIiksZS5mb3JFYWNoKGk9PmNvbnNvbGUud2FybihyLCItIixpKSkpfWZ1bmN0aW9uIHpzKHIpe3JldHVybiBRZS5kaW0ocil9dmFyIENmLEcsQmU9UCgoKT0+e3UoKTtRaSgpO0NmPW5ldyBTZXQ7Rz17aW5mbyhyLGUpe2pzKFFlLmJvbGQoUWUuY3lhbigiaW5mbyIpKSwuLi5BcnJheS5pc0FycmF5KHIpP1tyXTpbZSxyXSl9LHdhcm4ocixlKXtbImNvbnRlbnQtcHJvYmxlbXMiXS5pbmNsdWRlcyhyKXx8anMoUWUuYm9sZChRZS55ZWxsb3coIndhcm4iKSksLi4uQXJyYXkuaXNBcnJheShyKT9bcl06W2Uscl0pfSxyaXNrKHIsZSl7anMoUWUuYm9sZChRZS5tYWdlbnRhKCJyaXNrIikpLC4uLkFycmF5LmlzQXJyYXkocik/W3JdOltlLHJdKX19fSk7dmFyIF9mPXt9O0dlKF9mLHtkZWZhdWx0OigpPT5Vc30pO2Z1bmN0aW9uIHFyKHt2ZXJzaW9uOnIsZnJvbTplLHRvOnR9KXtHLndhcm4oYCR7ZX0tY29sb3ItcmVuYW1lZGAsW2BBcyBvZiBUYWlsd2luZCBDU1MgJHtyfSwgXGAke2V9XGAgaGFzIGJlZW4gcmVuYW1lZCB0byBcYCR7dH1cYC5gLCJVcGRhdGUgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcuIl0pfXZhciBVcyxWcz1QKCgpPT57dSgpO0JlKCk7VXM9e2luaGVyaXQ6ImluaGVyaXQiLGN1cnJlbnQ6ImN1cnJlbnRDb2xvciIsdHJhbnNwYXJlbnQ6InRyYW5zcGFyZW50IixibGFjazoiIzAwMCIsd2hpdGU6IiNmZmYiLHNsYXRlOns1MDoiI2Y4ZmFmYyIsMTAwOiIjZjFmNWY5IiwyMDA6IiNlMmU4ZjAiLDMwMDoiI2NiZDVlMSIsNDAwOiIjOTRhM2I4Iiw1MDA6IiM2NDc0OGIiLDYwMDoiIzQ3NTU2OSIsNzAwOiIjMzM0MTU1Iiw4MDA6IiMxZTI5M2IiLDkwMDoiIzBmMTcyYSIsOTUwOiIjMDIwNjE3In0sZ3JheTp7NTA6IiNmOWZhZmIiLDEwMDoiI2YzZjRmNiIsMjAwOiIjZTVlN2ViIiwzMDA6IiNkMWQ1ZGIiLDQwMDoiIzljYTNhZiIsNTAwOiIjNmI3MjgwIiw2MDA6IiM0YjU1NjMiLDcwMDoiIzM3NDE1MSIsODAwOiIjMWYyOTM3Iiw5MDA6IiMxMTE4MjciLDk1MDoiIzAzMDcxMiJ9LHppbmM6ezUwOiIjZmFmYWZhIiwxMDA6IiNmNGY0ZjUiLDIwMDoiI2U0ZTRlNyIsMzAwOiIjZDRkNGQ4Iiw0MDA6IiNhMWExYWEiLDUwMDoiIzcxNzE3YSIsNjAwOiIjNTI1MjViIiw3MDA6IiMzZjNmNDYiLDgwMDoiIzI3MjcyYSIsOTAwOiIjMTgxODFiIiw5NTA6IiMwOTA5MGIifSxuZXV0cmFsOns1MDoiI2ZhZmFmYSIsMTAwOiIjZjVmNWY1IiwyMDA6IiNlNWU1ZTUiLDMwMDoiI2Q0ZDRkNCIsNDAwOiIjYTNhM2EzIiw1MDA6IiM3MzczNzMiLDYwMDoiIzUyNTI1MiIsNzAwOiIjNDA0MDQwIiw4MDA6IiMyNjI2MjYiLDkwMDoiIzE3MTcxNyIsOTUwOiIjMGEwYTBhIn0sc3RvbmU6ezUwOiIjZmFmYWY5IiwxMDA6IiNmNWY1ZjQiLDIwMDoiI2U3ZTVlNCIsMzAwOiIjZDZkM2QxIiw0MDA6IiNhOGEyOWUiLDUwMDoiIzc4NzE2YyIsNjAwOiIjNTc1MzRlIiw3MDA6IiM0NDQwM2MiLDgwMDoiIzI5MjUyNCIsOTAwOiIjMWMxOTE3Iiw5NTA6IiMwYzBhMDkifSxyZWQ6ezUwOiIjZmVmMmYyIiwxMDA6IiNmZWUyZTIiLDIwMDoiI2ZlY2FjYSIsMzAwOiIjZmNhNWE1Iiw0MDA6IiNmODcxNzEiLDUwMDoiI2VmNDQ0NCIsNjAwOiIjZGMyNjI2Iiw3MDA6IiNiOTFjMWMiLDgwMDoiIzk5MWIxYiIsOTAwOiIjN2YxZDFkIiw5NTA6IiM0NTBhMGEifSxvcmFuZ2U6ezUwOiIjZmZmN2VkIiwxMDA6IiNmZmVkZDUiLDIwMDoiI2ZlZDdhYSIsMzAwOiIjZmRiYTc0Iiw0MDA6IiNmYjkyM2MiLDUwMDoiI2Y5NzMxNiIsNjAwOiIjZWE1ODBjIiw3MDA6IiNjMjQxMGMiLDgwMDoiIzlhMzQxMiIsOTAwOiIjN2MyZDEyIiw5NTA6IiM0MzE0MDcifSxhbWJlcjp7NTA6IiNmZmZiZWIiLDEwMDoiI2ZlZjNjNyIsMjAwOiIjZmRlNjhhIiwzMDA6IiNmY2QzNGQiLDQwMDoiI2ZiYmYyNCIsNTAwOiIjZjU5ZTBiIiw2MDA6IiNkOTc3MDYiLDcwMDoiI2I0NTMwOSIsODAwOiIjOTI0MDBlIiw5MDA6IiM3ODM1MGYiLDk1MDoiIzQ1MWEwMyJ9LHllbGxvdzp7NTA6IiNmZWZjZTgiLDEwMDoiI2ZlZjljMyIsMjAwOiIjZmVmMDhhIiwzMDA6IiNmZGUwNDciLDQwMDoiI2ZhY2MxNSIsNTAwOiIjZWFiMzA4Iiw2MDA6IiNjYThhMDQiLDcwMDoiI2ExNjIwNyIsODAwOiIjODU0ZDBlIiw5MDA6IiM3MTNmMTIiLDk1MDoiIzQyMjAwNiJ9LGxpbWU6ezUwOiIjZjdmZWU3IiwxMDA6IiNlY2ZjY2IiLDIwMDoiI2Q5Zjk5ZCIsMzAwOiIjYmVmMjY0Iiw0MDA6IiNhM2U2MzUiLDUwMDoiIzg0Y2MxNiIsNjAwOiIjNjVhMzBkIiw3MDA6IiM0ZDdjMGYiLDgwMDoiIzNmNjIxMiIsOTAwOiIjMzY1MzE0Iiw5NTA6IiMxYTJlMDUifSxncmVlbjp7NTA6IiNmMGZkZjQiLDEwMDoiI2RjZmNlNyIsMjAwOiIjYmJmN2QwIiwzMDA6IiM4NmVmYWMiLDQwMDoiIzRhZGU4MCIsNTAwOiIjMjJjNTVlIiw2MDA6IiMxNmEzNGEiLDcwMDoiIzE1ODAzZCIsODAwOiIjMTY2NTM0Iiw5MDA6IiMxNDUzMmQiLDk1MDoiIzA1MmUxNiJ9LGVtZXJhbGQ6ezUwOiIjZWNmZGY1IiwxMDA6IiNkMWZhZTUiLDIwMDoiI2E3ZjNkMCIsMzAwOiIjNmVlN2I3Iiw0MDA6IiMzNGQzOTkiLDUwMDoiIzEwYjk4MSIsNjAwOiIjMDU5NjY5Iiw3MDA6IiMwNDc4NTciLDgwMDoiIzA2NWY0NiIsOTAwOiIjMDY0ZTNiIiw5NTA6IiMwMjJjMjIifSx0ZWFsOns1MDoiI2YwZmRmYSIsMTAwOiIjY2NmYmYxIiwyMDA6IiM5OWY2ZTQiLDMwMDoiIzVlZWFkNCIsNDAwOiIjMmRkNGJmIiw1MDA6IiMxNGI4YTYiLDYwMDoiIzBkOTQ4OCIsNzAwOiIjMGY3NjZlIiw4MDA6IiMxMTVlNTkiLDkwMDoiIzEzNGU0YSIsOTUwOiIjMDQyZjJlIn0sY3lhbjp7NTA6IiNlY2ZlZmYiLDEwMDoiI2NmZmFmZSIsMjAwOiIjYTVmM2ZjIiwzMDA6IiM2N2U4ZjkiLDQwMDoiIzIyZDNlZSIsNTAwOiIjMDZiNmQ0Iiw2MDA6IiMwODkxYjIiLDcwMDoiIzBlNzQ5MCIsODAwOiIjMTU1ZTc1Iiw5MDA6IiMxNjRlNjMiLDk1MDoiIzA4MzM0NCJ9LHNreTp7NTA6IiNmMGY5ZmYiLDEwMDoiI2UwZjJmZSIsMjAwOiIjYmFlNmZkIiwzMDA6IiM3ZGQzZmMiLDQwMDoiIzM4YmRmOCIsNTAwOiIjMGVhNWU5Iiw2MDA6IiMwMjg0YzciLDcwMDoiIzAzNjlhMSIsODAwOiIjMDc1OTg1Iiw5MDA6IiMwYzRhNmUiLDk1MDoiIzA4MmY0OSJ9LGJsdWU6ezUwOiIjZWZmNmZmIiwxMDA6IiNkYmVhZmUiLDIwMDoiI2JmZGJmZSIsMzAwOiIjOTNjNWZkIiw0MDA6IiM2MGE1ZmEiLDUwMDoiIzNiODJmNiIsNjAwOiIjMjU2M2ViIiw3MDA6IiMxZDRlZDgiLDgwMDoiIzFlNDBhZiIsOTAwOiIjMWUzYThhIiw5NTA6IiMxNzI1NTQifSxpbmRpZ286ezUwOiIjZWVmMmZmIiwxMDA6IiNlMGU3ZmYiLDIwMDoiI2M3ZDJmZSIsMzAwOiIjYTViNGZjIiw0MDA6IiM4MThjZjgiLDUwMDoiIzYzNjZmMSIsNjAwOiIjNGY0NmU1Iiw3MDA6IiM0MzM4Y2EiLDgwMDoiIzM3MzBhMyIsOTAwOiIjMzEyZTgxIiw5NTA6IiMxZTFiNGIifSx2aW9sZXQ6ezUwOiIjZjVmM2ZmIiwxMDA6IiNlZGU5ZmUiLDIwMDoiI2RkZDZmZSIsMzAwOiIjYzRiNWZkIiw0MDA6IiNhNzhiZmEiLDUwMDoiIzhiNWNmNiIsNjAwOiIjN2MzYWVkIiw3MDA6IiM2ZDI4ZDkiLDgwMDoiIzViMjFiNiIsOTAwOiIjNGMxZDk1Iiw5NTA6IiMyZTEwNjUifSxwdXJwbGU6ezUwOiIjZmFmNWZmIiwxMDA6IiNmM2U4ZmYiLDIwMDoiI2U5ZDVmZiIsMzAwOiIjZDhiNGZlIiw0MDA6IiNjMDg0ZmMiLDUwMDoiI2E4NTVmNyIsNjAwOiIjOTMzM2VhIiw3MDA6IiM3ZTIyY2UiLDgwMDoiIzZiMjFhOCIsOTAwOiIjNTgxYzg3Iiw5NTA6IiMzYjA3NjQifSxmdWNoc2lhOns1MDoiI2ZkZjRmZiIsMTAwOiIjZmFlOGZmIiwyMDA6IiNmNWQwZmUiLDMwMDoiI2YwYWJmYyIsNDAwOiIjZTg3OWY5Iiw1MDA6IiNkOTQ2ZWYiLDYwMDoiI2MwMjZkMyIsNzAwOiIjYTIxY2FmIiw4MDA6IiM4NjE5OGYiLDkwMDoiIzcwMWE3NSIsOTUwOiIjNGEwNDRlIn0scGluazp7NTA6IiNmZGYyZjgiLDEwMDoiI2ZjZTdmMyIsMjAwOiIjZmJjZmU4IiwzMDA6IiNmOWE4ZDQiLDQwMDoiI2Y0NzJiNiIsNTAwOiIjZWM0ODk5Iiw2MDA6IiNkYjI3NzciLDcwMDoiI2JlMTg1ZCIsODAwOiIjOWQxNzRkIiw5MDA6IiM4MzE4NDMiLDk1MDoiIzUwMDcyNCJ9LHJvc2U6ezUwOiIjZmZmMWYyIiwxMDA6IiNmZmU0ZTYiLDIwMDoiI2ZlY2RkMyIsMzAwOiIjZmRhNGFmIiw0MDA6IiNmYjcxODUiLDUwMDoiI2Y0M2Y1ZSIsNjAwOiIjZTExZDQ4Iiw3MDA6IiNiZTEyM2MiLDgwMDoiIzlmMTIzOSIsOTAwOiIjODgxMzM3Iiw5NTA6IiM0YzA1MTkifSxnZXQgbGlnaHRCbHVlKCl7cmV0dXJuIHFyKHt2ZXJzaW9uOiJ2Mi4yIixmcm9tOiJsaWdodEJsdWUiLHRvOiJza3kifSksdGhpcy5za3l9LGdldCB3YXJtR3JheSgpe3JldHVybiBxcih7dmVyc2lvbjoidjMuMCIsZnJvbToid2FybUdyYXkiLHRvOiJzdG9uZSJ9KSx0aGlzLnN0b25lfSxnZXQgdHJ1ZUdyYXkoKXtyZXR1cm4gcXIoe3ZlcnNpb246InYzLjAiLGZyb206InRydWVHcmF5Iix0bzoibmV1dHJhbCJ9KSx0aGlzLm5ldXRyYWx9LGdldCBjb29sR3JheSgpe3JldHVybiBxcih7dmVyc2lvbjoidjMuMCIsZnJvbToiY29vbEdyYXkiLHRvOiJncmF5In0pLHRoaXMuZ3JheX0sZ2V0IGJsdWVHcmF5KCl7cmV0dXJuIHFyKHt2ZXJzaW9uOiJ2My4wIixmcm9tOiJibHVlR3JheSIsdG86InNsYXRlIn0pLHRoaXMuc2xhdGV9fX0pO2Z1bmN0aW9uIEhzKHIsLi4uZSl7Zm9yKGxldCB0IG9mIGUpe2ZvcihsZXQgaSBpbiB0KXI/Lmhhc093blByb3BlcnR5Py4oaSl8fChyW2ldPXRbaV0pO2ZvcihsZXQgaSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpKXI/Lmhhc093blByb3BlcnR5Py4oaSl8fChyW2ldPXRbaV0pfXJldHVybiByfXZhciBFZj1QKCgpPT57dSgpfSk7ZnVuY3Rpb24ga3Qocil7aWYoQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gcjtsZXQgZT1yLnNwbGl0KCJbIikubGVuZ3RoLTEsdD1yLnNwbGl0KCJdIikubGVuZ3RoLTE7aWYoZSE9PXQpdGhyb3cgbmV3IEVycm9yKGBQYXRoIGlzIGludmFsaWQuIEhhcyB1bmJhbGFuY2VkIGJyYWNrZXRzOiAke3J9YCk7cmV0dXJuIHIuc3BsaXQoL1wuKD8hW15cW10qXF0pfFtcW1xdXS9nKS5maWx0ZXIoQm9vbGVhbil9dmFyIFlpPVAoKCk9Pnt1KCl9KTtmdW5jdGlvbiB3ZShyLGUpe3JldHVybiBLaS5mdXR1cmUuaW5jbHVkZXMoZSk/ci5mdXR1cmU9PT0iYWxsInx8KHI/LmZ1dHVyZT8uW2VdPz9PZltlXT8/ITEpOktpLmV4cGVyaW1lbnRhbC5pbmNsdWRlcyhlKT9yLmV4cGVyaW1lbnRhbD09PSJhbGwifHwocj8uZXhwZXJpbWVudGFsPy5bZV0/P09mW2VdPz8hMSk6ITF9ZnVuY3Rpb24gVGYocil7cmV0dXJuIHIuZXhwZXJpbWVudGFsPT09ImFsbCI/S2kuZXhwZXJpbWVudGFsOk9iamVjdC5rZXlzKHI/LmV4cGVyaW1lbnRhbD8/e30pLmZpbHRlcihlPT5LaS5leHBlcmltZW50YWwuaW5jbHVkZXMoZSkmJnIuZXhwZXJpbWVudGFsW2VdKX1mdW5jdGlvbiBSZihyKXtpZihtLmVudi5KRVNUX1dPUktFUl9JRD09PXZvaWQgMCYmVGYocikubGVuZ3RoPjApe2xldCBlPVRmKHIpLm1hcCh0PT5RZS55ZWxsb3codCkpLmpvaW4oIiwgIik7Ry53YXJuKCJleHBlcmltZW50YWwtZmxhZ3MtZW5hYmxlZCIsW2BZb3UgaGF2ZSBlbmFibGVkIGV4cGVyaW1lbnRhbCBmZWF0dXJlczogJHtlfWAsIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBpbiBUYWlsd2luZCBDU1MgYXJlIG5vdCBjb3ZlcmVkIGJ5IHNlbXZlciwgbWF5IGludHJvZHVjZSBicmVha2luZyBjaGFuZ2VzLCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgdGltZS4iXSl9fXZhciBPZixLaSxjdD1QKCgpPT57dSgpO1FpKCk7QmUoKTtPZj17b3B0aW1pemVVbml2ZXJzYWxEZWZhdWx0czohMSxnZW5lcmFsaXplZE1vZGlmaWVyczohMCxkaXNhYmxlQ29sb3JPcGFjaXR5VXRpbGl0aWVzQnlEZWZhdWx0OiExLHJlbGF0aXZlQ29udGVudFBhdGhzQnlEZWZhdWx0OiExfSxLaT17ZnV0dXJlOlsiaG92ZXJPbmx5V2hlblN1cHBvcnRlZCIsInJlc3BlY3REZWZhdWx0UmluZ0NvbG9yT3BhY2l0eSIsImRpc2FibGVDb2xvck9wYWNpdHlVdGlsaXRpZXNCeURlZmF1bHQiLCJyZWxhdGl2ZUNvbnRlbnRQYXRoc0J5RGVmYXVsdCJdLGV4cGVyaW1lbnRhbDpbIm9wdGltaXplVW5pdmVyc2FsRGVmYXVsdHMiLCJnZW5lcmFsaXplZE1vZGlmaWVycyJdfX0pO2Z1bmN0aW9uIFBmKHIpeygoKT0+e2lmKHIucHVyZ2V8fCFyLmNvbnRlbnR8fCFBcnJheS5pc0FycmF5KHIuY29udGVudCkmJiEodHlwZW9mIHIuY29udGVudD09Im9iamVjdCImJnIuY29udGVudCE9PW51bGwpKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoci5jb250ZW50KSlyZXR1cm4gci5jb250ZW50LmV2ZXJ5KHQ9PnR5cGVvZiB0PT0ic3RyaW5nIj8hMDohKHR5cGVvZiB0Py5yYXchPSJzdHJpbmcifHx0Py5leHRlbnNpb24mJnR5cGVvZiB0Py5leHRlbnNpb24hPSJzdHJpbmciKSk7aWYodHlwZW9mIHIuY29udGVudD09Im9iamVjdCImJnIuY29udGVudCE9PW51bGwpe2lmKE9iamVjdC5rZXlzKHIuY29udGVudCkuc29tZSh0PT4hWyJmaWxlcyIsInJlbGF0aXZlIiwiZXh0cmFjdCIsInRyYW5zZm9ybSJdLmluY2x1ZGVzKHQpKSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KHIuY29udGVudC5maWxlcykpe2lmKCFyLmNvbnRlbnQuZmlsZXMuZXZlcnkodD0+dHlwZW9mIHQ9PSJzdHJpbmciPyEwOiEodHlwZW9mIHQ/LnJhdyE9InN0cmluZyJ8fHQ/LmV4dGVuc2lvbiYmdHlwZW9mIHQ/LmV4dGVuc2lvbiE9InN0cmluZyIpKSlyZXR1cm4hMTtpZih0eXBlb2Ygci5jb250ZW50LmV4dHJhY3Q9PSJvYmplY3QiKXtmb3IobGV0IHQgb2YgT2JqZWN0LnZhbHVlcyhyLmNvbnRlbnQuZXh0cmFjdCkpaWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITF9ZWxzZSBpZighKHIuY29udGVudC5leHRyYWN0PT09dm9pZCAwfHx0eXBlb2Ygci5jb250ZW50LmV4dHJhY3Q9PSJmdW5jdGlvbiIpKXJldHVybiExO2lmKHR5cGVvZiByLmNvbnRlbnQudHJhbnNmb3JtPT0ib2JqZWN0Iil7Zm9yKGxldCB0IG9mIE9iamVjdC52YWx1ZXMoci5jb250ZW50LnRyYW5zZm9ybSkpaWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuITF9ZWxzZSBpZighKHIuY29udGVudC50cmFuc2Zvcm09PT12b2lkIDB8fHR5cGVvZiByLmNvbnRlbnQudHJhbnNmb3JtPT0iZnVuY3Rpb24iKSlyZXR1cm4hMTtpZih0eXBlb2Ygci5jb250ZW50LnJlbGF0aXZlIT0iYm9vbGVhbiImJnR5cGVvZiByLmNvbnRlbnQucmVsYXRpdmUhPSJ1bmRlZmluZWQiKXJldHVybiExfXJldHVybiEwfXJldHVybiExfSkoKXx8Ry53YXJuKCJwdXJnZS1kZXByZWNhdGlvbiIsWyJUaGUgYHB1cmdlYC9gY29udGVudGAgb3B0aW9ucyBoYXZlIGNoYW5nZWQgaW4gVGFpbHdpbmQgQ1NTIHYzLjAuIiwiVXBkYXRlIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGVsaW1pbmF0ZSB0aGlzIHdhcm5pbmcuIiwiaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy91cGdyYWRlLWd1aWRlI2NvbmZpZ3VyZS1jb250ZW50LXNvdXJjZXMiXSksci5zYWZlbGlzdD0oKCk9PntsZXR7Y29udGVudDp0LHB1cmdlOmksc2FmZWxpc3Q6bn09cjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOkFycmF5LmlzQXJyYXkodD8uc2FmZWxpc3QpP3Quc2FmZWxpc3Q6QXJyYXkuaXNBcnJheShpPy5zYWZlbGlzdCk/aS5zYWZlbGlzdDpBcnJheS5pc0FycmF5KGk/Lm9wdGlvbnM/LnNhZmVsaXN0KT9pLm9wdGlvbnMuc2FmZWxpc3Q6W119KSgpLHIuYmxvY2tsaXN0PSgoKT0+e2xldHtibG9ja2xpc3Q6dH09cjtpZihBcnJheS5pc0FycmF5KHQpKXtpZih0LmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIHQ7Ry53YXJuKCJibG9ja2xpc3QtaW52YWxpZCIsWyJUaGUgYGJsb2NrbGlzdGAgb3B0aW9uIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncy4iLCJodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2NvbnRlbnQtY29uZmlndXJhdGlvbiNkaXNjYXJkaW5nLWNsYXNzZXMiXSl9cmV0dXJuW119KSgpLHR5cGVvZiByLnByZWZpeD09ImZ1bmN0aW9uIj8oRy53YXJuKCJwcmVmaXgtZnVuY3Rpb24iLFsiQXMgb2YgVGFpbHdpbmQgQ1NTIHYzLjAsIGBwcmVmaXhgIGNhbm5vdCBiZSBhIGZ1bmN0aW9uLiIsIlVwZGF0ZSBgcHJlZml4YCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gdG8gYmUgYSBzdHJpbmcgdG8gZWxpbWluYXRlIHRoaXMgd2FybmluZy4iLCJodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3VwZ3JhZGUtZ3VpZGUjcHJlZml4LWNhbm5vdC1iZS1hLWZ1bmN0aW9uIl0pLHIucHJlZml4PSIiKTpyLnByZWZpeD1yLnByZWZpeD8/IiIsci5jb250ZW50PXtyZWxhdGl2ZTooKCk9PntsZXR7Y29udGVudDp0fT1yO3JldHVybiB0Py5yZWxhdGl2ZT90LnJlbGF0aXZlOndlKHIsInJlbGF0aXZlQ29udGVudFBhdGhzQnlEZWZhdWx0Iil9KSgpLGZpbGVzOigoKT0+e2xldHtjb250ZW50OnQscHVyZ2U6aX09cjtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT9pOkFycmF5LmlzQXJyYXkoaT8uY29udGVudCk/aS5jb250ZW50OkFycmF5LmlzQXJyYXkodCk/dDpBcnJheS5pc0FycmF5KHQ/LmNvbnRlbnQpP3QuY29udGVudDpBcnJheS5pc0FycmF5KHQ/LmZpbGVzKT90LmZpbGVzOltdfSkoKSxleHRyYWN0OigoKT0+e2xldCB0PSgoKT0+ci5wdXJnZT8uZXh0cmFjdD9yLnB1cmdlLmV4dHJhY3Q6ci5jb250ZW50Py5leHRyYWN0P3IuY29udGVudC5leHRyYWN0OnIucHVyZ2U/LmV4dHJhY3Q/LkRFRkFVTFQ/ci5wdXJnZS5leHRyYWN0LkRFRkFVTFQ6ci5jb250ZW50Py5leHRyYWN0Py5ERUZBVUxUP3IuY29udGVudC5leHRyYWN0LkRFRkFVTFQ6ci5wdXJnZT8ub3B0aW9ucz8uZXh0cmFjdG9ycz9yLnB1cmdlLm9wdGlvbnMuZXh0cmFjdG9yczpyLmNvbnRlbnQ/Lm9wdGlvbnM/LmV4dHJhY3RvcnM/ci5jb250ZW50Lm9wdGlvbnMuZXh0cmFjdG9yczp7fSkoKSxpPXt9LG49KCgpPT57aWYoci5wdXJnZT8ub3B0aW9ucz8uZGVmYXVsdEV4dHJhY3RvcilyZXR1cm4gci5wdXJnZS5vcHRpb25zLmRlZmF1bHRFeHRyYWN0b3I7aWYoci5jb250ZW50Py5vcHRpb25zPy5kZWZhdWx0RXh0cmFjdG9yKXJldHVybiByLmNvbnRlbnQub3B0aW9ucy5kZWZhdWx0RXh0cmFjdG9yfSkoKTtpZihuIT09dm9pZCAwJiYoaS5ERUZBVUxUPW4pLHR5cGVvZiB0PT0iZnVuY3Rpb24iKWkuREVGQVVMVD10O2Vsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0e2V4dGVuc2lvbnM6cyxleHRyYWN0b3I6YX1vZiB0Pz9bXSlmb3IobGV0IG8gb2YgcylpW29dPWE7ZWxzZSB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZPYmplY3QuYXNzaWduKGksdCk7cmV0dXJuIGl9KSgpLHRyYW5zZm9ybTooKCk9PntsZXQgdD0oKCk9PnIucHVyZ2U/LnRyYW5zZm9ybT9yLnB1cmdlLnRyYW5zZm9ybTpyLmNvbnRlbnQ/LnRyYW5zZm9ybT9yLmNvbnRlbnQudHJhbnNmb3JtOnIucHVyZ2U/LnRyYW5zZm9ybT8uREVGQVVMVD9yLnB1cmdlLnRyYW5zZm9ybS5ERUZBVUxUOnIuY29udGVudD8udHJhbnNmb3JtPy5ERUZBVUxUP3IuY29udGVudC50cmFuc2Zvcm0uREVGQVVMVDp7fSkoKSxpPXt9O3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj9pLkRFRkFVTFQ9dDp0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZPYmplY3QuYXNzaWduKGksdCksaX0pKCl9O2ZvcihsZXQgdCBvZiByLmNvbnRlbnQuZmlsZXMpaWYodHlwZW9mIHQ9PSJzdHJpbmciJiYveyhbXixdKj8pfS9nLnRlc3QodCkpe0cud2FybigiaW52YWxpZC1nbG9iLWJyYWNlcyIsW2BUaGUgZ2xvYiBwYXR0ZXJuICR7enModCl9IGluIHlvdXIgVGFpbHdpbmQgQ1NTIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC5gLGBVcGRhdGUgaXQgdG8gJHt6cyh0LnJlcGxhY2UoL3soW14sXSo/KX0vZywiJDEiKSl9IHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLmBdKTticmVha31yZXR1cm4gcn12YXIgSWY9UCgoKT0+e3UoKTtjdCgpO0JlKCl9KTtmdW5jdGlvbiBrZShyKXtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikhPT0iW29iamVjdCBPYmplY3RdIilyZXR1cm4hMTtsZXQgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yocik7cmV0dXJuIGU9PT1udWxsfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsfXZhciBLdD1QKCgpPT57dSgpfSk7ZnVuY3Rpb24gU3Qocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5tYXAoZT0+U3QoZSkpOnR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGw/T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW2UsdF0pPT5bZSxTdCh0KV0pKTpyfXZhciBYaT1QKCgpPT57dSgpfSk7ZnVuY3Rpb24ganQocil7cmV0dXJuIHIucmVwbGFjZSgvXFwsL2csIlxcMmMgIil9dmFyIFppPVAoKCk9Pnt1KCl9KTt2YXIgV3MsRGY9UCgoKT0+e3UoKTtXcz17YWxpY2VibHVlOlsyNDAsMjQ4LDI1NV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNV0sYXF1YTpbMCwyNTUsMjU1XSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMl0sYXp1cmU6WzI0MCwyNTUsMjU1XSxiZWlnZTpbMjQ1LDI0NSwyMjBdLGJpc3F1ZTpbMjU1LDIyOCwxOTZdLGJsYWNrOlswLDAsMF0sYmxhbmNoZWRhbG1vbmQ6WzI1NSwyMzUsMjA1XSxibHVlOlswLDAsMjU1XSxibHVldmlvbGV0OlsxMzgsNDMsMjI2XSxicm93bjpbMTY1LDQyLDQyXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1XSxjYWRldGJsdWU6Wzk1LDE1OCwxNjBdLGNoYXJ0cmV1c2U6WzEyNywyNTUsMF0sY2hvY29sYXRlOlsyMTAsMTA1LDMwXSxjb3JhbDpbMjU1LDEyNyw4MF0sY29ybmZsb3dlcmJsdWU6WzEwMCwxNDksMjM3XSxjb3Juc2lsazpbMjU1LDI0OCwyMjBdLGNyaW1zb246WzIyMCwyMCw2MF0sY3lhbjpbMCwyNTUsMjU1XSxkYXJrYmx1ZTpbMCwwLDEzOV0sZGFya2N5YW46WzAsMTM5LDEzOV0sZGFya2dvbGRlbnJvZDpbMTg0LDEzNCwxMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5XSxkYXJrZ3JlZW46WzAsMTAwLDBdLGRhcmtncmV5OlsxNjksMTY5LDE2OV0sZGFya2toYWtpOlsxODksMTgzLDEwN10sZGFya21hZ2VudGE6WzEzOSwwLDEzOV0sZGFya29saXZlZ3JlZW46Wzg1LDEwNyw0N10sZGFya29yYW5nZTpbMjU1LDE0MCwwXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0XSxkYXJrcmVkOlsxMzksMCwwXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMl0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0M10sZGFya3NsYXRlYmx1ZTpbNzIsNjEsMTM5XSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzldLGRhcmt0dXJxdW9pc2U6WzAsMjA2LDIwOV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExXSxkZWVwcGluazpbMjU1LDIwLDE0N10sZGVlcHNreWJsdWU6WzAsMTkxLDI1NV0sZGltZ3JheTpbMTA1LDEwNSwxMDVdLGRpbWdyZXk6WzEwNSwxMDUsMTA1XSxkb2RnZXJibHVlOlszMCwxNDQsMjU1XSxmaXJlYnJpY2s6WzE3OCwzNCwzNF0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwXSxmb3Jlc3RncmVlbjpbMzQsMTM5LDM0XSxmdWNoc2lhOlsyNTUsMCwyNTVdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjBdLGdob3N0d2hpdGU6WzI0OCwyNDgsMjU1XSxnb2xkOlsyNTUsMjE1LDBdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMl0sZ3JheTpbMTI4LDEyOCwxMjhdLGdyZWVuOlswLDEyOCwwXSxncmVlbnllbGxvdzpbMTczLDI1NSw0N10sZ3JleTpbMTI4LDEyOCwxMjhdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MF0saG90cGluazpbMjU1LDEwNSwxODBdLGluZGlhbnJlZDpbMjA1LDkyLDkyXSxpbmRpZ286Wzc1LDAsMTMwXSxpdm9yeTpbMjU1LDI1NSwyNDBdLGtoYWtpOlsyNDAsMjMwLDE0MF0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NV0sbGF3bmdyZWVuOlsxMjQsMjUyLDBdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDVdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzBdLGxpZ2h0Y29yYWw6WzI0MCwxMjgsMTI4XSxsaWdodGN5YW46WzIyNCwyNTUsMjU1XSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTBdLGxpZ2h0Z3JheTpbMjExLDIxMSwyMTFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0XSxsaWdodGdyZXk6WzIxMSwyMTEsMjExXSxsaWdodHBpbms6WzI1NSwxODIsMTkzXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjJdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzBdLGxpZ2h0c2t5Ymx1ZTpbMTM1LDIwNiwyNTBdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1M10sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzXSxsaWdodHN0ZWVsYmx1ZTpbMTc2LDE5NiwyMjJdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNF0sbGltZTpbMCwyNTUsMF0sbGltZWdyZWVuOls1MCwyMDUsNTBdLGxpbmVuOlsyNTAsMjQwLDIzMF0sbWFnZW50YTpbMjU1LDAsMjU1XSxtYXJvb246WzEyOCwwLDBdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwXSxtZWRpdW1ibHVlOlswLDAsMjA1XSxtZWRpdW1vcmNoaWQ6WzE4Niw4NSwyMTFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTldLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzXSxtZWRpdW1zbGF0ZWJsdWU6WzEyMywxMDQsMjM4XSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0XSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDRdLG1lZGl1bXZpb2xldHJlZDpbMTk5LDIxLDEzM10sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTJdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTBdLG1pc3R5cm9zZTpbMjU1LDIyOCwyMjVdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczXSxuYXZ5OlswLDAsMTI4XSxvbGRsYWNlOlsyNTMsMjQ1LDIzMF0sb2xpdmU6WzEyOCwxMjgsMF0sb2xpdmVkcmFiOlsxMDcsMTQyLDM1XSxvcmFuZ2U6WzI1NSwxNjUsMF0sb3JhbmdlcmVkOlsyNTUsNjksMF0sb3JjaGlkOlsyMTgsMTEyLDIxNF0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzBdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTJdLHBhbGV0dXJxdW9pc2U6WzE3NSwyMzgsMjM4XSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0N10scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTNdLHBlYWNocHVmZjpbMjU1LDIxOCwxODVdLHBlcnU6WzIwNSwxMzMsNjNdLHBpbms6WzI1NSwxOTIsMjAzXSxwbHVtOlsyMjEsMTYwLDIyMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzBdLHB1cnBsZTpbMTI4LDAsMTI4XSxyZWJlY2NhcHVycGxlOlsxMDIsNTEsMTUzXSxyZWQ6WzI1NSwwLDBdLHJvc3licm93bjpbMTg4LDE0MywxNDNdLHJveWFsYmx1ZTpbNjUsMTA1LDIyNV0sc2FkZGxlYnJvd246WzEzOSw2OSwxOV0sc2FsbW9uOlsyNTAsMTI4LDExNF0sc2FuZHlicm93bjpbMjQ0LDE2NCw5Nl0sc2VhZ3JlZW46WzQ2LDEzOSw4N10sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4XSxzaWVubmE6WzE2MCw4Miw0NV0sc2lsdmVyOlsxOTIsMTkyLDE5Ml0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzVdLHNsYXRlYmx1ZTpbMTA2LDkwLDIwNV0sc2xhdGVncmF5OlsxMTIsMTI4LDE0NF0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NF0sc25vdzpbMjU1LDI1MCwyNTBdLHNwcmluZ2dyZWVuOlswLDI1NSwxMjddLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MF0sdGFuOlsyMTAsMTgwLDE0MF0sdGVhbDpbMCwxMjgsMTI4XSx0aGlzdGxlOlsyMTYsMTkxLDIxNl0sdG9tYXRvOlsyNTUsOTksNzFdLHR1cnF1b2lzZTpbNjQsMjI0LDIwOF0sdmlvbGV0OlsyMzgsMTMwLDIzOF0sd2hlYXQ6WzI0NSwyMjIsMTc5XSx3aGl0ZTpbMjU1LDI1NSwyNTVdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1XSx5ZWxsb3c6WzI1NSwyNTUsMF0seWVsbG93Z3JlZW46WzE1NCwyMDUsNTBdfX0pO2Z1bmN0aW9uICRyKHIse2xvb3NlOmU9ITF9PXt9KXtpZih0eXBlb2YgciE9InN0cmluZyIpcmV0dXJuIG51bGw7aWYocj1yLnRyaW0oKSxyPT09InRyYW5zcGFyZW50IilyZXR1cm57bW9kZToicmdiIixjb2xvcjpbIjAiLCIwIiwiMCJdLGFscGhhOiIwIn07aWYociBpbiBXcylyZXR1cm57bW9kZToicmdiIixjb2xvcjpXc1tyXS5tYXAocz0+cy50b1N0cmluZygpKX07bGV0IHQ9ci5yZXBsYWNlKHp2LChzLGEsbyxsLGMpPT5bIiMiLGEsYSxvLG8sbCxsLGM/YytjOiIiXS5qb2luKCIiKSkubWF0Y2goanYpO2lmKHQhPT1udWxsKXJldHVybnttb2RlOiJyZ2IiLGNvbG9yOltwYXJzZUludCh0WzFdLDE2KSxwYXJzZUludCh0WzJdLDE2KSxwYXJzZUludCh0WzNdLDE2KV0ubWFwKHM9PnMudG9TdHJpbmcoKSksYWxwaGE6dFs0XT8ocGFyc2VJbnQodFs0XSwxNikvMjU1KS50b1N0cmluZygpOnZvaWQgMH07bGV0IGk9ci5tYXRjaChVdik/P3IubWF0Y2goVnYpO2lmKGk9PT1udWxsKXJldHVybiBudWxsO2xldCBuPVtpWzJdLGlbM10saVs0XV0uZmlsdGVyKEJvb2xlYW4pLm1hcChzPT5zLnRvU3RyaW5nKCkpO3JldHVybiBuLmxlbmd0aD09PTImJm5bMF0uc3RhcnRzV2l0aCgidmFyKCIpP3ttb2RlOmlbMV0sY29sb3I6W25bMF1dLGFscGhhOm5bMV19OiFlJiZuLmxlbmd0aCE9PTN8fG4ubGVuZ3RoPDMmJiFuLnNvbWUocz0+L152YXJcKC4qP1wpJC8udGVzdChzKSk/bnVsbDp7bW9kZTppWzFdLGNvbG9yOm4sYWxwaGE6aVs1XT8udG9TdHJpbmc/LigpfX1mdW5jdGlvbiBHcyh7bW9kZTpyLGNvbG9yOmUsYWxwaGE6dH0pe2xldCBpPXQhPT12b2lkIDA7cmV0dXJuIHI9PT0icmdiYSJ8fHI9PT0iaHNsYSI/YCR7cn0oJHtlLmpvaW4oIiwgIil9JHtpP2AsICR7dH1gOiIifSlgOmAke3J9KCR7ZS5qb2luKCIgIil9JHtpP2AgLyAke3R9YDoiIn0pYH12YXIganYsenYsQXQsSmkscWYsQ3QsVXYsVnYsUXM9UCgoKT0+e3UoKTtEZigpO2p2PS9eIyhbYS1mXGRdezJ9KShbYS1mXGRdezJ9KShbYS1mXGRdezJ9KShbYS1mXGRdezJ9KT8kL2ksenY9L14jKFthLWZcZF0pKFthLWZcZF0pKFthLWZcZF0pKFthLWZcZF0pPyQvaSxBdD0vKD86XGQrfFxkKlwuXGQrKSU/LyxKaT0vKD86XHMqLFxzKnxccyspLyxxZj0vXHMqWywvXVxzKi8sQ3Q9L3ZhclwoLS0oPzpbXiApXSo/KSg/OiwoPzpbXiApXSo/fHZhclwoLS1bXiApXSo/XCkpKT9cKS8sVXY9bmV3IFJlZ0V4cChgXihyZ2JhPylcXChcXHMqKCR7QXQuc291cmNlfXwke0N0LnNvdXJjZX0pKD86JHtKaS5zb3VyY2V9KCR7QXQuc291cmNlfXwke0N0LnNvdXJjZX0pKT8oPzoke0ppLnNvdXJjZX0oJHtBdC5zb3VyY2V9fCR7Q3Quc291cmNlfSkpPyg/OiR7cWYuc291cmNlfSgke0F0LnNvdXJjZX18JHtDdC5zb3VyY2V9KSk/XFxzKlxcKSRgKSxWdj1uZXcgUmVnRXhwKGBeKGhzbGE/KVxcKFxccyooKD86JHtBdC5zb3VyY2V9KSg/OmRlZ3xyYWR8Z3JhZHx0dXJuKT98JHtDdC5zb3VyY2V9KSg/OiR7Smkuc291cmNlfSgke0F0LnNvdXJjZX18JHtDdC5zb3VyY2V9KSk/KD86JHtKaS5zb3VyY2V9KCR7QXQuc291cmNlfXwke0N0LnNvdXJjZX0pKT8oPzoke3FmLnNvdXJjZX0oJHtBdC5zb3VyY2V9fCR7Q3Quc291cmNlfSkpP1xccypcXCkkYCl9KTtmdW5jdGlvbiBKZShyLGUsdCl7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpcmV0dXJuIHIoe29wYWNpdHlWYWx1ZTplfSk7bGV0IGk9JHIocix7bG9vc2U6ITB9KTtyZXR1cm4gaT09PW51bGw/dDpHcyh7Li4uaSxhbHBoYTplfSl9ZnVuY3Rpb24gQWUoe2NvbG9yOnIscHJvcGVydHk6ZSx2YXJpYWJsZTp0fSl7bGV0IGk9W10uY29uY2F0KGUpO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXJldHVybntbdF06IjEiLC4uLk9iamVjdC5mcm9tRW50cmllcyhpLm1hcChzPT5bcyxyKHtvcGFjaXR5VmFyaWFibGU6dCxvcGFjaXR5VmFsdWU6YHZhcigke3R9LCAxKWB9KV0pKX07bGV0IG49JHIocik7cmV0dXJuIG49PT1udWxsP09iamVjdC5mcm9tRW50cmllcyhpLm1hcChzPT5bcyxyXSkpOm4uYWxwaGEhPT12b2lkIDA/T2JqZWN0LmZyb21FbnRyaWVzKGkubWFwKHM9PltzLHJdKSk6e1t0XToiMSIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKGkubWFwKHM9PltzLEdzKHsuLi5uLGFscGhhOmB2YXIoJHt0fSwgMSlgfSldKSl9fXZhciBMcj1QKCgpPT57dSgpO1FzKCl9KTtmdW5jdGlvbiB2ZShyLGUpe2xldCB0PVtdLGk9W10sbj0wLHM9ITE7Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDthKyspe2xldCBvPXJbYV07dC5sZW5ndGg9PT0wJiZvPT09ZVswXSYmIXMmJihlLmxlbmd0aD09PTF8fHIuc2xpY2UoYSxhK2UubGVuZ3RoKT09PWUpJiYoaS5wdXNoKHIuc2xpY2UobixhKSksbj1hK2UubGVuZ3RoKSxzPXM/ITE6bz09PSJcXCIsbz09PSIoInx8bz09PSJbInx8bz09PSJ7Ij90LnB1c2gobyk6KG89PT0iKSImJnRbdC5sZW5ndGgtMV09PT0iKCJ8fG89PT0iXSImJnRbdC5sZW5ndGgtMV09PT0iWyJ8fG89PT0ifSImJnRbdC5sZW5ndGgtMV09PT0ieyIpJiZ0LnBvcCgpfXJldHVybiBpLnB1c2goci5zbGljZShuKSksaX12YXIgenQ9UCgoKT0+e3UoKX0pO2Z1bmN0aW9uIGVuKHIpe3JldHVybiB2ZShyLCIsIikubWFwKHQ9PntsZXQgaT10LnRyaW0oKSxuPXtyYXc6aX0scz1pLnNwbGl0KFd2KSxhPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIHMpJGYubGFzdEluZGV4PTAsIWEuaGFzKCJLRVlXT1JEIikmJkh2LmhhcyhvKT8obi5rZXl3b3JkPW8sYS5hZGQoIktFWVdPUkQiKSk6JGYudGVzdChvKT9hLmhhcygiWCIpP2EuaGFzKCJZIik/YS5oYXMoIkJMVVIiKT9hLmhhcygiU1BSRUFEIil8fChuLnNwcmVhZD1vLGEuYWRkKCJTUFJFQUQiKSk6KG4uYmx1cj1vLGEuYWRkKCJCTFVSIikpOihuLnk9byxhLmFkZCgiWSIpKToobi54PW8sYS5hZGQoIlgiKSk6bi5jb2xvcj8obi51bmtub3dufHwobi51bmtub3duPVtdKSxuLnVua25vd24ucHVzaChvKSk6bi5jb2xvcj1vO3JldHVybiBuLnZhbGlkPW4ueCE9PXZvaWQgMCYmbi55IT09dm9pZCAwLG59KX1mdW5jdGlvbiBMZihyKXtyZXR1cm4gci5tYXAoZT0+ZS52YWxpZD9bZS5rZXl3b3JkLGUueCxlLnksZS5ibHVyLGUuc3ByZWFkLGUuY29sb3JdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik6ZS5yYXcpLmpvaW4oIiwgIil9dmFyIEh2LFd2LCRmLFlzPVAoKCk9Pnt1KCk7enQoKTtIdj1uZXcgU2V0KFsiaW5zZXQiLCJpbmhlcml0IiwiaW5pdGlhbCIsInJldmVydCIsInVuc2V0Il0pLFd2PS9cICsoPyFbXihdKlwpKS9nLCRmPS9eLT8oXGQrfFwuXGQrKSguKj8pJC9nfSk7ZnVuY3Rpb24gS3Mocil7cmV0dXJuIEd2LnNvbWUoZT0+bmV3IFJlZ0V4cChgXiR7ZX1cXCguKlxcKWApLnRlc3QocikpfWZ1bmN0aW9uIEsocixlPW51bGwsdD0hMCl7bGV0IGk9ZSYmUXYuaGFzKGUucHJvcGVydHkpO3JldHVybiByLnN0YXJ0c1dpdGgoIi0tIikmJiFpP2B2YXIoJHtyfSlgOnIuaW5jbHVkZXMoInVybCgiKT9yLnNwbGl0KC8odXJsXCguKj9cKSkvZykuZmlsdGVyKEJvb2xlYW4pLm1hcChuPT4vXnVybFwoLio/XCkkLy50ZXN0KG4pP246SyhuLGUsITEpKS5qb2luKCIiKToocj1yLnJlcGxhY2UoLyhbXlxcXSlfKy9nLChuLHMpPT5zKyIgIi5yZXBlYXQobi5sZW5ndGgtMSkpLnJlcGxhY2UoL15fL2csIiAiKS5yZXBsYWNlKC9cXF8vZywiXyIpLHQmJihyPXIudHJpbSgpKSxyPVl2KHIpLHIpfWZ1bmN0aW9uIFllKHIpe3JldHVybiByLmluY2x1ZGVzKCI9IikmJihyPXIucmVwbGFjZSgvKD0uKikvZywoZSx0KT0+e2lmKHRbMV09PT0iJyJ8fHRbMV09PT0nIicpcmV0dXJuIHQ7aWYodC5sZW5ndGg+Mil7bGV0IGk9dFt0Lmxlbmd0aC0xXTtpZih0W3QubGVuZ3RoLTJdPT09IiAiJiYoaT09PSJpInx8aT09PSJJInx8aT09PSJzInx8aT09PSJTIikpcmV0dXJuYD0iJHt0LnNsaWNlKDEsLTIpfSIgJHt0W3QubGVuZ3RoLTFdfWB9cmV0dXJuYD0iJHt0LnNsaWNlKDEpfSJgfSkpLHJ9ZnVuY3Rpb24gWXYocil7bGV0IGU9WyJ0aGVtZSJdLHQ9WyJtaW4tY29udGVudCIsIm1heC1jb250ZW50IiwiZml0LWNvbnRlbnQiLCJzYWZlLWFyZWEtaW5zZXQtdG9wIiwic2FmZS1hcmVhLWluc2V0LXJpZ2h0Iiwic2FmZS1hcmVhLWluc2V0LWJvdHRvbSIsInNhZmUtYXJlYS1pbnNldC1sZWZ0IiwidGl0bGViYXItYXJlYS14IiwidGl0bGViYXItYXJlYS15IiwidGl0bGViYXItYXJlYS13aWR0aCIsInRpdGxlYmFyLWFyZWEtaGVpZ2h0Iiwia2V5Ym9hcmQtaW5zZXQtdG9wIiwia2V5Ym9hcmQtaW5zZXQtcmlnaHQiLCJrZXlib2FyZC1pbnNldC1ib3R0b20iLCJrZXlib2FyZC1pbnNldC1sZWZ0Iiwia2V5Ym9hcmQtaW5zZXQtd2lkdGgiLCJrZXlib2FyZC1pbnNldC1oZWlnaHQiLCJyYWRpYWwtZ3JhZGllbnQiLCJsaW5lYXItZ3JhZGllbnQiLCJjb25pYy1ncmFkaWVudCIsInJlcGVhdGluZy1yYWRpYWwtZ3JhZGllbnQiLCJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50IiwicmVwZWF0aW5nLWNvbmljLWdyYWRpZW50IiwiYW5jaG9yLXNpemUiXTtyZXR1cm4gci5yZXBsYWNlKC8oY2FsY3xtaW58bWF4fGNsYW1wKVwoLitcKS9nLGk9PntsZXQgbj0iIjtmdW5jdGlvbiBzKCl7bGV0IGE9bi50cmltRW5kKCk7cmV0dXJuIGFbYS5sZW5ndGgtMV19Zm9yKGxldCBhPTA7YTxpLmxlbmd0aDthKyspe2xldCBvPWZ1bmN0aW9uKGYpe3JldHVybiBmLnNwbGl0KCIiKS5ldmVyeSgoZCxwKT0+aVthK3BdPT09ZCl9LGw9ZnVuY3Rpb24oZil7bGV0IGQ9MS8wO2ZvcihsZXQgaCBvZiBmKXtsZXQgYj1pLmluZGV4T2YoaCxhKTtiIT09LTEmJmI8ZCYmKGQ9Yil9bGV0IHA9aS5zbGljZShhLGQpO3JldHVybiBhKz1wLmxlbmd0aC0xLHB9LGM9aVthXTtpZihvKCJ2YXIiKSluKz1sKFsiKSIsIiwiXSk7ZWxzZSBpZih0LnNvbWUoZj0+byhmKSkpe2xldCBmPXQuZmluZChkPT5vKGQpKTtuKz1mLGErPWYubGVuZ3RoLTF9ZWxzZSBlLnNvbWUoZj0+byhmKSk/bis9bChbIikiXSk6bygiWyIpP24rPWwoWyJdIl0pOlsiKyIsIi0iLCIqIiwiLyJdLmluY2x1ZGVzKGMpJiYhWyIoIiwiKyIsIi0iLCIqIiwiLyIsIiwiXS5pbmNsdWRlcyhzKCkpP24rPWAgJHtjfSBgOm4rPWN9cmV0dXJuIG4ucmVwbGFjZSgvXHMrL2csIiAiKX0pfWZ1bmN0aW9uIFhzKHIpe3JldHVybiByLnN0YXJ0c1dpdGgoInVybCgiKX1mdW5jdGlvbiBacyhyKXtyZXR1cm4haXNOYU4oTnVtYmVyKHIpKXx8S3Mocil9ZnVuY3Rpb24gTXIocil7cmV0dXJuIHIuZW5kc1dpdGgoIiUiKSYmWnMoci5zbGljZSgwLC0xKSl8fEtzKHIpfWZ1bmN0aW9uIE5yKHIpe3JldHVybiByPT09IjAifHxuZXcgUmVnRXhwKGBeWystXT9bMC05XSouP1swLTldKyg/OltlRV1bKy1dP1swLTldKyk/JHtYdn0kYCkudGVzdChyKXx8S3Mocil9ZnVuY3Rpb24gTWYocil7cmV0dXJuIFp2LmhhcyhyKX1mdW5jdGlvbiBOZihyKXtsZXQgZT1lbihLKHIpKTtmb3IobGV0IHQgb2YgZSlpZighdC52YWxpZClyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBCZihyKXtsZXQgZT0wO3JldHVybiB2ZShyLCJfIikuZXZlcnkoaT0+KGk9SyhpKSxpLnN0YXJ0c1dpdGgoInZhcigiKT8hMDokcihpLHtsb29zZTohMH0pIT09bnVsbD8oZSsrLCEwKTohMSkpP2U+MDohMX1mdW5jdGlvbiBGZihyKXtsZXQgZT0wO3JldHVybiB2ZShyLCIsIikuZXZlcnkoaT0+KGk9SyhpKSxpLnN0YXJ0c1dpdGgoInZhcigiKT8hMDpYcyhpKXx8ZXgoaSl8fFsiZWxlbWVudCgiLCJpbWFnZSgiLCJjcm9zcy1mYWRlKCIsImltYWdlLXNldCgiXS5zb21lKG49Pmkuc3RhcnRzV2l0aChuKSk/KGUrKywhMCk6ITEpKT9lPjA6ITF9ZnVuY3Rpb24gZXgocil7cj1LKHIpO2ZvcihsZXQgZSBvZiBKdilpZihyLnN0YXJ0c1dpdGgoYCR7ZX0oYCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gamYocil7bGV0IGU9MDtyZXR1cm4gdmUociwiXyIpLmV2ZXJ5KGk9PihpPUsoaSksaS5zdGFydHNXaXRoKCJ2YXIoIik/ITA6dHguaGFzKGkpfHxOcihpKXx8TXIoaSk/KGUrKywhMCk6ITEpKT9lPjA6ITF9ZnVuY3Rpb24gemYocil7bGV0IGU9MDtyZXR1cm4gdmUociwiLCIpLmV2ZXJ5KGk9PihpPUsoaSksaS5zdGFydHNXaXRoKCJ2YXIoIik/ITA6aS5pbmNsdWRlcygiICIpJiYhLyhbJyJdKShbXiInXSspXDEvZy50ZXN0KGkpfHwvXlxkL2cudGVzdChpKT8hMTooZSsrLCEwKSkpP2U+MDohMX1mdW5jdGlvbiBVZihyKXtyZXR1cm4gcnguaGFzKHIpfWZ1bmN0aW9uIFZmKHIpe3JldHVybiBpeC5oYXMocil9ZnVuY3Rpb24gSGYocil7cmV0dXJuIG54LmhhcyhyKX12YXIgR3YsUXYsS3YsWHYsWnYsSnYsdHgscngsaXgsbngsQnI9UCgoKT0+e3UoKTtRcygpO1lzKCk7enQoKTtHdj1bIm1pbiIsIm1heCIsImNsYW1wIiwiY2FsYyJdO1F2PW5ldyBTZXQoWyJzY3JvbGwtdGltZWxpbmUtbmFtZSIsInRpbWVsaW5lLXNjb3BlIiwidmlldy10aW1lbGluZS1uYW1lIiwiZm9udC1wYWxldHRlIiwiYW5jaG9yLW5hbWUiLCJhbmNob3Itc2NvcGUiLCJwb3NpdGlvbi1hbmNob3IiLCJwb3NpdGlvbi10cnktb3B0aW9ucyIsInNjcm9sbC10aW1lbGluZSIsImFuaW1hdGlvbi10aW1lbGluZSIsInZpZXctdGltZWxpbmUiLCJwb3NpdGlvbi10cnkiXSk7S3Y9WyJjbSIsIm1tIiwiUSIsImluIiwicGMiLCJwdCIsInB4IiwiZW0iLCJleCIsImNoIiwicmVtIiwibGgiLCJybGgiLCJ2dyIsInZoIiwidm1pbiIsInZtYXgiLCJ2YiIsInZpIiwic3Z3Iiwic3ZoIiwibHZ3IiwibHZoIiwiZHZ3IiwiZHZoIiwiY3F3IiwiY3FoIiwiY3FpIiwiY3FiIiwiY3FtaW4iLCJjcW1heCJdLFh2PWAoPzoke0t2LmpvaW4oInwiKX0pYDtadj1uZXcgU2V0KFsidGhpbiIsIm1lZGl1bSIsInRoaWNrIl0pO0p2PW5ldyBTZXQoWyJjb25pYy1ncmFkaWVudCIsImxpbmVhci1ncmFkaWVudCIsInJhZGlhbC1ncmFkaWVudCIsInJlcGVhdGluZy1jb25pYy1ncmFkaWVudCIsInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLCJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50Il0pO3R4PW5ldyBTZXQoWyJjZW50ZXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSk7cng9bmV3IFNldChbInNlcmlmIiwic2Fucy1zZXJpZiIsIm1vbm9zcGFjZSIsImN1cnNpdmUiLCJmYW50YXN5Iiwic3lzdGVtLXVpIiwidWktc2VyaWYiLCJ1aS1zYW5zLXNlcmlmIiwidWktbW9ub3NwYWNlIiwidWktcm91bmRlZCIsIm1hdGgiLCJlbW9qaSIsImZhbmdzb25nIl0pO2l4PW5ldyBTZXQoWyJ4eC1zbWFsbCIsIngtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieC1sYXJnZSIsInh4LWxhcmdlIiwieHh4LWxhcmdlIl0pO254PW5ldyBTZXQoWyJsYXJnZXIiLCJzbWFsbGVyIl0pfSk7ZnVuY3Rpb24gV2Yocil7bGV0IGU9WyJjb3ZlciIsImNvbnRhaW4iXTtyZXR1cm4gdmUociwiLCIpLmV2ZXJ5KHQ9PntsZXQgaT12ZSh0LCJfIikuZmlsdGVyKEJvb2xlYW4pO3JldHVybiBpLmxlbmd0aD09PTEmJmUuaW5jbHVkZXMoaVswXSk/ITA6aS5sZW5ndGghPT0xJiZpLmxlbmd0aCE9PTI/ITE6aS5ldmVyeShuPT5OcihuKXx8TXIobil8fG49PT0iYXV0byIpfSl9dmFyIEdmPVAoKCk9Pnt1KCk7QnIoKTt6dCgpfSk7ZnVuY3Rpb24gUWYocixlKXtyLndhbGtDbGFzc2VzKHQ9Pnt0LnZhbHVlPWUodC52YWx1ZSksdC5yYXdzJiZ0LnJhd3MudmFsdWUmJih0LnJhd3MudmFsdWU9anQodC5yYXdzLnZhbHVlKSl9KX1mdW5jdGlvbiBZZihyLGUpe2lmKCFfdChyKSlyZXR1cm47bGV0IHQ9ci5zbGljZSgxLC0xKTtpZighIWUodCkpcmV0dXJuIEsodCl9ZnVuY3Rpb24gc3gocixlPXt9LHQpe2xldCBpPWVbcl07aWYoaSE9PXZvaWQgMClyZXR1cm4geHQoaSk7aWYoX3Qocikpe2xldCBuPVlmKHIsdCk7cmV0dXJuIG49PT12b2lkIDA/dm9pZCAwOnh0KG4pfX1mdW5jdGlvbiB0bihyLGU9e30se3ZhbGlkYXRlOnQ9KCk9PiEwfT17fSl7bGV0IGk9ZS52YWx1ZXM/LltyXTtyZXR1cm4gaSE9PXZvaWQgMD9pOmUuc3VwcG9ydHNOZWdhdGl2ZVZhbHVlcyYmci5zdGFydHNXaXRoKCItIik/c3goci5zbGljZSgxKSxlLnZhbHVlcyx0KTpZZihyLHQpfWZ1bmN0aW9uIF90KHIpe3JldHVybiByLnN0YXJ0c1dpdGgoIlsiKSYmci5lbmRzV2l0aCgiXSIpfWZ1bmN0aW9uIEtmKHIpe2xldCBlPXIubGFzdEluZGV4T2YoIi8iKSx0PXIubGFzdEluZGV4T2YoIlsiLGUpLGk9ci5pbmRleE9mKCJdIixlKTtyZXR1cm4gcltlLTFdPT09Il0ifHxyW2UrMV09PT0iWyJ8fHQhPT0tMSYmaSE9PS0xJiZ0PGUmJmU8aSYmKGU9ci5sYXN0SW5kZXhPZigiLyIsdCkpLGU9PT0tMXx8ZT09PXIubGVuZ3RoLTE/W3Isdm9pZCAwXTpfdChyKSYmIXIuaW5jbHVkZXMoIl0vWyIpP1tyLHZvaWQgMF06W3Iuc2xpY2UoMCxlKSxyLnNsaWNlKGUrMSldfWZ1bmN0aW9uIFh0KHIpe2lmKHR5cGVvZiByPT0ic3RyaW5nIiYmci5pbmNsdWRlcygiPGFscGhhLXZhbHVlPiIpKXtsZXQgZT1yO3JldHVybih7b3BhY2l0eVZhbHVlOnQ9MX0pPT5lLnJlcGxhY2UoLzxhbHBoYS12YWx1ZT4vZyx0KX1yZXR1cm4gcn1mdW5jdGlvbiBYZihyKXtyZXR1cm4gSyhyLnNsaWNlKDEsLTEpKX1mdW5jdGlvbiBheChyLGU9e30se3RhaWx3aW5kQ29uZmlnOnQ9e319PXt9KXtpZihlLnZhbHVlcz8uW3JdIT09dm9pZCAwKXJldHVybiBYdChlLnZhbHVlcz8uW3JdKTtsZXRbaSxuXT1LZihyKTtpZihuIT09dm9pZCAwKXtsZXQgcz1lLnZhbHVlcz8uW2ldPz8oX3QoaSk/aS5zbGljZSgxLC0xKTp2b2lkIDApO3JldHVybiBzPT09dm9pZCAwP3ZvaWQgMDoocz1YdChzKSxfdChuKT9KZShzLFhmKG4pKTp0LnRoZW1lPy5vcGFjaXR5Py5bbl09PT12b2lkIDA/dm9pZCAwOkplKHMsdC50aGVtZS5vcGFjaXR5W25dKSl9cmV0dXJuIHRuKHIsZSx7dmFsaWRhdGU6QmZ9KX1mdW5jdGlvbiBveChyLGU9e30pe3JldHVybiBlLnZhbHVlcz8uW3JdfWZ1bmN0aW9uIHFlKHIpe3JldHVybihlLHQpPT50bihlLHQse3ZhbGlkYXRlOnJ9KX1mdW5jdGlvbiBseChyLGUpe2xldCB0PXIuaW5kZXhPZihlKTtyZXR1cm4gdD09PS0xP1t2b2lkIDAscl06W3Iuc2xpY2UoMCx0KSxyLnNsaWNlKHQrMSldfWZ1bmN0aW9uIGVhKHIsZSx0LGkpe2lmKHQudmFsdWVzJiZlIGluIHQudmFsdWVzKWZvcihsZXR7dHlwZTpzfW9mIHI/P1tdKXtsZXQgYT1Kc1tzXShlLHQse3RhaWx3aW5kQ29uZmlnOml9KTtpZihhIT09dm9pZCAwKXJldHVyblthLHMsbnVsbF19aWYoX3QoZSkpe2xldCBzPWUuc2xpY2UoMSwtMSksW2Esb109bHgocywiOiIpO2lmKCEvXltcdy1fXSskL2cudGVzdChhKSlvPXM7ZWxzZSBpZihhIT09dm9pZCAwJiYhWmYuaW5jbHVkZXMoYSkpcmV0dXJuW107aWYoby5sZW5ndGg+MCYmWmYuaW5jbHVkZXMoYSkpcmV0dXJuW3RuKGBbJHtvfV1gLHQpLGEsbnVsbF19bGV0IG49dGEocixlLHQsaSk7Zm9yKGxldCBzIG9mIG4pcmV0dXJuIHM7cmV0dXJuW119ZnVuY3Rpb24qdGEocixlLHQsaSl7bGV0IG49d2UoaSwiZ2VuZXJhbGl6ZWRNb2RpZmllcnMiKSxbcyxhXT1LZihlKTtpZihuJiZ0Lm1vZGlmaWVycyE9bnVsbCYmKHQubW9kaWZpZXJzPT09ImFueSJ8fHR5cGVvZiB0Lm1vZGlmaWVycz09Im9iamVjdCImJihhJiZfdChhKXx8YSBpbiB0Lm1vZGlmaWVycykpfHwocz1lLGE9dm9pZCAwKSxhIT09dm9pZCAwJiZzPT09IiImJihzPSJERUZBVUxUIiksYSE9PXZvaWQgMCYmdHlwZW9mIHQubW9kaWZpZXJzPT0ib2JqZWN0Iil7bGV0IGw9dC5tb2RpZmllcnM/LlthXT8/bnVsbDtsIT09bnVsbD9hPWw6X3QoYSkmJihhPVhmKGEpKX1mb3IobGV0e3R5cGU6bH1vZiByPz9bXSl7bGV0IGM9SnNbbF0ocyx0LHt0YWlsd2luZENvbmZpZzppfSk7YyE9PXZvaWQgMCYmKHlpZWxkW2MsbCxhPz9udWxsXSl9fXZhciBKcyxaZixGcj1QKCgpPT57dSgpO1ppKCk7THIoKTtCcigpO0dpKCk7R2YoKTtjdCgpO0pzPXthbnk6dG4sY29sb3I6YXgsdXJsOnFlKFhzKSxpbWFnZTpxZShGZiksbGVuZ3RoOnFlKE5yKSxwZXJjZW50YWdlOnFlKE1yKSxwb3NpdGlvbjpxZShqZiksbG9va3VwOm94LCJnZW5lcmljLW5hbWUiOnFlKFVmKSwiZmFtaWx5LW5hbWUiOnFlKHpmKSxudW1iZXI6cWUoWnMpLCJsaW5lLXdpZHRoIjpxZShNZiksImFic29sdXRlLXNpemUiOnFlKFZmKSwicmVsYXRpdmUtc2l6ZSI6cWUoSGYpLHNoYWRvdzpxZShOZiksc2l6ZTpxZShXZil9LFpmPU9iamVjdC5rZXlzKEpzKX0pO2Z1bmN0aW9uIFgocil7cmV0dXJuIHR5cGVvZiByPT0iZnVuY3Rpb24iP3Ioe30pOnJ9dmFyIHJhPVAoKCk9Pnt1KCl9KTtmdW5jdGlvbiBadChyKXtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24ganIociwuLi5lKXtsZXQgdD1lLnBvcCgpO2ZvcihsZXQgaSBvZiBlKWZvcihsZXQgbiBpbiBpKXtsZXQgcz10KHJbbl0saVtuXSk7cz09PXZvaWQgMD9rZShyW25dKSYma2UoaVtuXSk/cltuXT1qcih7fSxyW25dLGlbbl0sdCk6cltuXT1pW25dOnJbbl09c31yZXR1cm4gcn1mdW5jdGlvbiB1eChyLC4uLmUpe3JldHVybiBadChyKT9yKC4uLmUpOnJ9ZnVuY3Rpb24gZngocil7cmV0dXJuIHIucmVkdWNlKChlLHtleHRlbmQ6dH0pPT5qcihlLHQsKGksbik9Pmk9PT12b2lkIDA/W25dOkFycmF5LmlzQXJyYXkoaSk/W24sLi4uaV06W24saV0pLHt9KX1mdW5jdGlvbiBjeChyKXtyZXR1cm57Li4uci5yZWR1Y2UoKGUsdCk9PkhzKGUsdCkse30pLGV4dGVuZDpmeChyKX19ZnVuY3Rpb24gSmYocixlKXtpZihBcnJheS5pc0FycmF5KHIpJiZrZShyWzBdKSlyZXR1cm4gci5jb25jYXQoZSk7aWYoQXJyYXkuaXNBcnJheShlKSYma2UoZVswXSkmJmtlKHIpKXJldHVybltyLC4uLmVdO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9ZnVuY3Rpb24gcHgoe2V4dGVuZDpyLC4uLmV9KXtyZXR1cm4ganIoZSxyLCh0LGkpPT4hWnQodCkmJiFpLnNvbWUoWnQpP2pyKHt9LHQsLi4uaSxKZik6KG4scyk9PmpyKHt9LC4uLlt0LC4uLmldLm1hcChhPT51eChhLG4scykpLEpmKSl9ZnVuY3Rpb24qZHgocil7bGV0IGU9a3Qocik7aWYoZS5sZW5ndGg9PT0wfHwoeWllbGQgZSxBcnJheS5pc0FycmF5KHIpKSlyZXR1cm47bGV0IHQ9L14oLio/KVxzKlwvXHMqKFteL10rKSQvLGk9ci5tYXRjaCh0KTtpZihpIT09bnVsbCl7bGV0WyxuLHNdPWksYT1rdChuKTthLmFscGhhPXMseWllbGQgYX19ZnVuY3Rpb24gaHgocil7bGV0IGU9KHQsaSk9Pntmb3IobGV0IG4gb2YgZHgodCkpe2xldCBzPTAsYT1yO2Zvcig7YSE9bnVsbCYmczxuLmxlbmd0aDspYT1hW25bcysrXV0sYT1adChhKSYmKG4uYWxwaGE9PT12b2lkIDB8fHM8PW4ubGVuZ3RoLTEpP2EoZSxpYSk6YTtpZihhIT09dm9pZCAwKXtpZihuLmFscGhhIT09dm9pZCAwKXtsZXQgbz1YdChhKTtyZXR1cm4gSmUobyxuLmFscGhhLFgobykpfXJldHVybiBrZShhKT9TdChhKTphfX1yZXR1cm4gaX07cmV0dXJuIE9iamVjdC5hc3NpZ24oZSx7dGhlbWU6ZSwuLi5pYX0pLE9iamVjdC5rZXlzKHIpLnJlZHVjZSgodCxpKT0+KHRbaV09WnQocltpXSk/cltpXShlLGlhKTpyW2ldLHQpLHt9KX1mdW5jdGlvbiBlYyhyKXtsZXQgZT1bXTtyZXR1cm4gci5mb3JFYWNoKHQ9PntlPVsuLi5lLHRdO2xldCBpPXQ/LnBsdWdpbnM/P1tdO2kubGVuZ3RoIT09MCYmaS5mb3JFYWNoKG49PntuLl9faXNPcHRpb25zRnVuY3Rpb24mJihuPW4oKSksZT1bLi4uZSwuLi5lYyhbbj8uY29uZmlnPz97fV0pXX0pfSksZX1mdW5jdGlvbiBteChyKXtyZXR1cm5bLi4ucl0ucmVkdWNlUmlnaHQoKHQsaSk9Plp0KGkpP2koe2NvcmVQbHVnaW5zOnR9KTprZihpLHQpLHZmKX1mdW5jdGlvbiBneChyKXtyZXR1cm5bLi4ucl0ucmVkdWNlUmlnaHQoKHQsaSk9PlsuLi50LC4uLmldLFtdKX1mdW5jdGlvbiBuYShyKXtsZXQgZT1bLi4uZWMocikse3ByZWZpeDoiIixpbXBvcnRhbnQ6ITEsc2VwYXJhdG9yOiI6In1dO3JldHVybiBQZihIcyh7dGhlbWU6aHgocHgoY3goZS5tYXAodD0+dD8udGhlbWU/P3t9KSkpKSxjb3JlUGx1Z2luczpteChlLm1hcCh0PT50LmNvcmVQbHVnaW5zKSkscGx1Z2luczpneChyLm1hcCh0PT50Py5wbHVnaW5zPz9bXSkpfSwuLi5lKSl9dmFyIGlhLHRjPVAoKCk9Pnt1KCk7R2koKTt4ZigpO1NmKCk7VnMoKTtFZigpO1lpKCk7SWYoKTtLdCgpO1hpKCk7RnIoKTtMcigpO3JhKCk7aWE9e2NvbG9yczpVcyxuZWdhdGl2ZShyKXtyZXR1cm4gT2JqZWN0LmtleXMocikuZmlsdGVyKGU9PnJbZV0hPT0iMCIpLnJlZHVjZSgoZSx0KT0+e2xldCBpPXh0KHJbdF0pO3JldHVybiBpIT09dm9pZCAwJiYoZVtgLSR7dH1gXT1pKSxlfSx7fSl9LGJyZWFrcG9pbnRzKHIpe3JldHVybiBPYmplY3Qua2V5cyhyKS5maWx0ZXIoZT0+dHlwZW9mIHJbZV09PSJzdHJpbmciKS5yZWR1Y2UoKGUsdCk9Pih7Li4uZSxbYHNjcmVlbi0ke3R9YF06clt0XX0pLHt9KX19fSk7dmFyIHJuPXgoKGYzLHJjKT0+e3UoKTtyYy5leHBvcnRzPXtjb250ZW50OltdLHByZXNldHM6W10sZGFya01vZGU6Im1lZGlhIix0aGVtZTp7YWNjZW50Q29sb3I6KHt0aGVtZTpyfSk9Pih7Li4ucigiY29sb3JzIiksYXV0bzoiYXV0byJ9KSxhbmltYXRpb246e25vbmU6Im5vbmUiLHNwaW46InNwaW4gMXMgbGluZWFyIGluZmluaXRlIixwaW5nOiJwaW5nIDFzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIGluZmluaXRlIixwdWxzZToicHVsc2UgMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSBpbmZpbml0ZSIsYm91bmNlOiJib3VuY2UgMXMgaW5maW5pdGUifSxhcmlhOntidXN5OididXN5PSJ0cnVlIicsY2hlY2tlZDonY2hlY2tlZD0idHJ1ZSInLGRpc2FibGVkOidkaXNhYmxlZD0idHJ1ZSInLGV4cGFuZGVkOidleHBhbmRlZD0idHJ1ZSInLGhpZGRlbjonaGlkZGVuPSJ0cnVlIicscHJlc3NlZDoncHJlc3NlZD0idHJ1ZSInLHJlYWRvbmx5OidyZWFkb25seT0idHJ1ZSInLHJlcXVpcmVkOidyZXF1aXJlZD0idHJ1ZSInLHNlbGVjdGVkOidzZWxlY3RlZD0idHJ1ZSInfSxhc3BlY3RSYXRpbzp7YXV0bzoiYXV0byIsc3F1YXJlOiIxIC8gMSIsdmlkZW86IjE2IC8gOSJ9LGJhY2tkcm9wQmx1cjooe3RoZW1lOnJ9KT0+cigiYmx1ciIpLGJhY2tkcm9wQnJpZ2h0bmVzczooe3RoZW1lOnJ9KT0+cigiYnJpZ2h0bmVzcyIpLGJhY2tkcm9wQ29udHJhc3Q6KHt0aGVtZTpyfSk9PnIoImNvbnRyYXN0IiksYmFja2Ryb3BHcmF5c2NhbGU6KHt0aGVtZTpyfSk9PnIoImdyYXlzY2FsZSIpLGJhY2tkcm9wSHVlUm90YXRlOih7dGhlbWU6cn0pPT5yKCJodWVSb3RhdGUiKSxiYWNrZHJvcEludmVydDooe3RoZW1lOnJ9KT0+cigiaW52ZXJ0IiksYmFja2Ryb3BPcGFjaXR5Oih7dGhlbWU6cn0pPT5yKCJvcGFjaXR5IiksYmFja2Ryb3BTYXR1cmF0ZTooe3RoZW1lOnJ9KT0+cigic2F0dXJhdGUiKSxiYWNrZHJvcFNlcGlhOih7dGhlbWU6cn0pPT5yKCJzZXBpYSIpLGJhY2tncm91bmRDb2xvcjooe3RoZW1lOnJ9KT0+cigiY29sb3JzIiksYmFja2dyb3VuZEltYWdlOntub25lOiJub25lIiwiZ3JhZGllbnQtdG8tdCI6ImxpbmVhci1ncmFkaWVudCh0byB0b3AsIHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSkiLCJncmFkaWVudC10by10ciI6ImxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsIHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSkiLCJncmFkaWVudC10by1yIjoibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB2YXIoLS10dy1ncmFkaWVudC1zdG9wcykpIiwiZ3JhZGllbnQtdG8tYnIiOiJsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tIHJpZ2h0LCB2YXIoLS10dy1ncmFkaWVudC1zdG9wcykpIiwiZ3JhZGllbnQtdG8tYiI6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSkiLCJncmFkaWVudC10by1ibCI6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20gbGVmdCwgdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKSIsImdyYWRpZW50LXRvLWwiOiJsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdmFyKC0tdHctZ3JhZGllbnQtc3RvcHMpKSIsImdyYWRpZW50LXRvLXRsIjoibGluZWFyLWdyYWRpZW50KHRvIHRvcCBsZWZ0LCB2YXIoLS10dy1ncmFkaWVudC1zdG9wcykpIn0sYmFja2dyb3VuZE9wYWNpdHk6KHt0aGVtZTpyfSk9PnIoIm9wYWNpdHkiKSxiYWNrZ3JvdW5kUG9zaXRpb246e2JvdHRvbToiYm90dG9tIixjZW50ZXI6ImNlbnRlciIsbGVmdDoibGVmdCIsImxlZnQtYm90dG9tIjoibGVmdCBib3R0b20iLCJsZWZ0LXRvcCI6ImxlZnQgdG9wIixyaWdodDoicmlnaHQiLCJyaWdodC1ib3R0b20iOiJyaWdodCBib3R0b20iLCJyaWdodC10b3AiOiJyaWdodCB0b3AiLHRvcDoidG9wIn0sYmFja2dyb3VuZFNpemU6e2F1dG86ImF1dG8iLGNvdmVyOiJjb3ZlciIsY29udGFpbjoiY29udGFpbiJ9LGJsdXI6ezA6IjAiLG5vbmU6IiIsc206IjRweCIsREVGQVVMVDoiOHB4IixtZDoiMTJweCIsbGc6IjE2cHgiLHhsOiIyNHB4IiwiMnhsIjoiNDBweCIsIjN4bCI6IjY0cHgifSxib3JkZXJDb2xvcjooe3RoZW1lOnJ9KT0+KHsuLi5yKCJjb2xvcnMiKSxERUZBVUxUOnIoImNvbG9ycy5ncmF5LjIwMCIsImN1cnJlbnRDb2xvciIpfSksYm9yZGVyT3BhY2l0eTooe3RoZW1lOnJ9KT0+cigib3BhY2l0eSIpLGJvcmRlclJhZGl1czp7bm9uZToiMHB4IixzbToiMC4xMjVyZW0iLERFRkFVTFQ6IjAuMjVyZW0iLG1kOiIwLjM3NXJlbSIsbGc6IjAuNXJlbSIseGw6IjAuNzVyZW0iLCIyeGwiOiIxcmVtIiwiM3hsIjoiMS41cmVtIixmdWxsOiI5OTk5cHgifSxib3JkZXJTcGFjaW5nOih7dGhlbWU6cn0pPT4oey4uLnIoInNwYWNpbmciKX0pLGJvcmRlcldpZHRoOntERUZBVUxUOiIxcHgiLDA6IjBweCIsMjoiMnB4Iiw0OiI0cHgiLDg6IjhweCJ9LGJveFNoYWRvdzp7c206IjAgMXB4IDJweCAwIHJnYigwIDAgMCAvIDAuMDUpIixERUZBVUxUOiIwIDFweCAzcHggMCByZ2IoMCAwIDAgLyAwLjEpLCAwIDFweCAycHggLTFweCByZ2IoMCAwIDAgLyAwLjEpIixtZDoiMCA0cHggNnB4IC0xcHggcmdiKDAgMCAwIC8gMC4xKSwgMCAycHggNHB4IC0ycHggcmdiKDAgMCAwIC8gMC4xKSIsbGc6IjAgMTBweCAxNXB4IC0zcHggcmdiKDAgMCAwIC8gMC4xKSwgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gMC4xKSIseGw6IjAgMjBweCAyNXB4IC01cHggcmdiKDAgMCAwIC8gMC4xKSwgMCA4cHggMTBweCAtNnB4IHJnYigwIDAgMCAvIDAuMSkiLCIyeGwiOiIwIDI1cHggNTBweCAtMTJweCByZ2IoMCAwIDAgLyAwLjI1KSIsaW5uZXI6Imluc2V0IDAgMnB4IDRweCAwIHJnYigwIDAgMCAvIDAuMDUpIixub25lOiJub25lIn0sYm94U2hhZG93Q29sb3I6KHt0aGVtZTpyfSk9PnIoImNvbG9ycyIpLGJyaWdodG5lc3M6ezA6IjAiLDUwOiIuNSIsNzU6Ii43NSIsOTA6Ii45Iiw5NToiLjk1IiwxMDA6IjEiLDEwNToiMS4wNSIsMTEwOiIxLjEiLDEyNToiMS4yNSIsMTUwOiIxLjUiLDIwMDoiMiJ9LGNhcmV0Q29sb3I6KHt0aGVtZTpyfSk9PnIoImNvbG9ycyIpLGNvbG9yczooe2NvbG9yczpyfSk9Pih7aW5oZXJpdDpyLmluaGVyaXQsY3VycmVudDpyLmN1cnJlbnQsdHJhbnNwYXJlbnQ6ci50cmFuc3BhcmVudCxibGFjazpyLmJsYWNrLHdoaXRlOnIud2hpdGUsc2xhdGU6ci5zbGF0ZSxncmF5OnIuZ3JheSx6aW5jOnIuemluYyxuZXV0cmFsOnIubmV1dHJhbCxzdG9uZTpyLnN0b25lLHJlZDpyLnJlZCxvcmFuZ2U6ci5vcmFuZ2UsYW1iZXI6ci5hbWJlcix5ZWxsb3c6ci55ZWxsb3csbGltZTpyLmxpbWUsZ3JlZW46ci5ncmVlbixlbWVyYWxkOnIuZW1lcmFsZCx0ZWFsOnIudGVhbCxjeWFuOnIuY3lhbixza3k6ci5za3ksYmx1ZTpyLmJsdWUsaW5kaWdvOnIuaW5kaWdvLHZpb2xldDpyLnZpb2xldCxwdXJwbGU6ci5wdXJwbGUsZnVjaHNpYTpyLmZ1Y2hzaWEscGluazpyLnBpbmsscm9zZTpyLnJvc2V9KSxjb2x1bW5zOnthdXRvOiJhdXRvIiwxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwxMDoiMTAiLDExOiIxMSIsMTI6IjEyIiwiM3hzIjoiMTZyZW0iLCIyeHMiOiIxOHJlbSIseHM6IjIwcmVtIixzbToiMjRyZW0iLG1kOiIyOHJlbSIsbGc6IjMycmVtIix4bDoiMzZyZW0iLCIyeGwiOiI0MnJlbSIsIjN4bCI6IjQ4cmVtIiwiNHhsIjoiNTZyZW0iLCI1eGwiOiI2NHJlbSIsIjZ4bCI6IjcycmVtIiwiN3hsIjoiODByZW0ifSxjb250YWluZXI6e30sY29udGVudDp7bm9uZToibm9uZSJ9LGNvbnRyYXN0OnswOiIwIiw1MDoiLjUiLDc1OiIuNzUiLDEwMDoiMSIsMTI1OiIxLjI1IiwxNTA6IjEuNSIsMjAwOiIyIn0sY3Vyc29yOnthdXRvOiJhdXRvIixkZWZhdWx0OiJkZWZhdWx0Iixwb2ludGVyOiJwb2ludGVyIix3YWl0OiJ3YWl0Iix0ZXh0OiJ0ZXh0Iixtb3ZlOiJtb3ZlIixoZWxwOiJoZWxwIiwibm90LWFsbG93ZWQiOiJub3QtYWxsb3dlZCIsbm9uZToibm9uZSIsImNvbnRleHQtbWVudSI6ImNvbnRleHQtbWVudSIscHJvZ3Jlc3M6InByb2dyZXNzIixjZWxsOiJjZWxsIixjcm9zc2hhaXI6ImNyb3NzaGFpciIsInZlcnRpY2FsLXRleHQiOiJ2ZXJ0aWNhbC10ZXh0IixhbGlhczoiYWxpYXMiLGNvcHk6ImNvcHkiLCJuby1kcm9wIjoibm8tZHJvcCIsZ3JhYjoiZ3JhYiIsZ3JhYmJpbmc6ImdyYWJiaW5nIiwiYWxsLXNjcm9sbCI6ImFsbC1zY3JvbGwiLCJjb2wtcmVzaXplIjoiY29sLXJlc2l6ZSIsInJvdy1yZXNpemUiOiJyb3ctcmVzaXplIiwibi1yZXNpemUiOiJuLXJlc2l6ZSIsImUtcmVzaXplIjoiZS1yZXNpemUiLCJzLXJlc2l6ZSI6InMtcmVzaXplIiwidy1yZXNpemUiOiJ3LXJlc2l6ZSIsIm5lLXJlc2l6ZSI6Im5lLXJlc2l6ZSIsIm53LXJlc2l6ZSI6Im53LXJlc2l6ZSIsInNlLXJlc2l6ZSI6InNlLXJlc2l6ZSIsInN3LXJlc2l6ZSI6InN3LXJlc2l6ZSIsImV3LXJlc2l6ZSI6ImV3LXJlc2l6ZSIsIm5zLXJlc2l6ZSI6Im5zLXJlc2l6ZSIsIm5lc3ctcmVzaXplIjoibmVzdy1yZXNpemUiLCJud3NlLXJlc2l6ZSI6Im53c2UtcmVzaXplIiwiem9vbS1pbiI6Inpvb20taW4iLCJ6b29tLW91dCI6Inpvb20tb3V0In0sZGl2aWRlQ29sb3I6KHt0aGVtZTpyfSk9PnIoImJvcmRlckNvbG9yIiksZGl2aWRlT3BhY2l0eTooe3RoZW1lOnJ9KT0+cigiYm9yZGVyT3BhY2l0eSIpLGRpdmlkZVdpZHRoOih7dGhlbWU6cn0pPT5yKCJib3JkZXJXaWR0aCIpLGRyb3BTaGFkb3c6e3NtOiIwIDFweCAxcHggcmdiKDAgMCAwIC8gMC4wNSkiLERFRkFVTFQ6WyIwIDFweCAycHggcmdiKDAgMCAwIC8gMC4xKSIsIjAgMXB4IDFweCByZ2IoMCAwIDAgLyAwLjA2KSJdLG1kOlsiMCA0cHggM3B4IHJnYigwIDAgMCAvIDAuMDcpIiwiMCAycHggMnB4IHJnYigwIDAgMCAvIDAuMDYpIl0sbGc6WyIwIDEwcHggOHB4IHJnYigwIDAgMCAvIDAuMDQpIiwiMCA0cHggM3B4IHJnYigwIDAgMCAvIDAuMSkiXSx4bDpbIjAgMjBweCAxM3B4IHJnYigwIDAgMCAvIDAuMDMpIiwiMCA4cHggNXB4IHJnYigwIDAgMCAvIDAuMDgpIl0sIjJ4bCI6IjAgMjVweCAyNXB4IHJnYigwIDAgMCAvIDAuMTUpIixub25lOiIwIDAgIzAwMDAifSxmaWxsOih7dGhlbWU6cn0pPT4oe25vbmU6Im5vbmUiLC4uLnIoImNvbG9ycyIpfSksZmxleDp7MToiMSAxIDAlIixhdXRvOiIxIDEgYXV0byIsaW5pdGlhbDoiMCAxIGF1dG8iLG5vbmU6Im5vbmUifSxmbGV4QmFzaXM6KHt0aGVtZTpyfSk9Pih7YXV0bzoiYXV0byIsLi4ucigic3BhY2luZyIpLCIxLzIiOiI1MCUiLCIxLzMiOiIzMy4zMzMzMzMlIiwiMi8zIjoiNjYuNjY2NjY3JSIsIjEvNCI6IjI1JSIsIjIvNCI6IjUwJSIsIjMvNCI6Ijc1JSIsIjEvNSI6IjIwJSIsIjIvNSI6IjQwJSIsIjMvNSI6IjYwJSIsIjQvNSI6IjgwJSIsIjEvNiI6IjE2LjY2NjY2NyUiLCIyLzYiOiIzMy4zMzMzMzMlIiwiMy82IjoiNTAlIiwiNC82IjoiNjYuNjY2NjY3JSIsIjUvNiI6IjgzLjMzMzMzMyUiLCIxLzEyIjoiOC4zMzMzMzMlIiwiMi8xMiI6IjE2LjY2NjY2NyUiLCIzLzEyIjoiMjUlIiwiNC8xMiI6IjMzLjMzMzMzMyUiLCI1LzEyIjoiNDEuNjY2NjY3JSIsIjYvMTIiOiI1MCUiLCI3LzEyIjoiNTguMzMzMzMzJSIsIjgvMTIiOiI2Ni42NjY2NjclIiwiOS8xMiI6Ijc1JSIsIjEwLzEyIjoiODMuMzMzMzMzJSIsIjExLzEyIjoiOTEuNjY2NjY3JSIsZnVsbDoiMTAwJSJ9KSxmbGV4R3Jvdzp7MDoiMCIsREVGQVVMVDoiMSJ9LGZsZXhTaHJpbms6ezA6IjAiLERFRkFVTFQ6IjEifSxmb250RmFtaWx5OntzYW5zOlsidWktc2Fucy1zZXJpZiIsInN5c3RlbS11aSIsInNhbnMtc2VyaWYiLCciQXBwbGUgQ29sb3IgRW1vamkiJywnIlNlZ29lIFVJIEVtb2ppIicsJyJTZWdvZSBVSSBTeW1ib2wiJywnIk5vdG8gQ29sb3IgRW1vamkiJ10sc2VyaWY6WyJ1aS1zZXJpZiIsIkdlb3JnaWEiLCJDYW1icmlhIiwnIlRpbWVzIE5ldyBSb21hbiInLCJUaW1lcyIsInNlcmlmIl0sbW9ubzpbInVpLW1vbm9zcGFjZSIsIlNGTW9uby1SZWd1bGFyIiwiTWVubG8iLCJNb25hY28iLCJDb25zb2xhcyIsJyJMaWJlcmF0aW9uIE1vbm8iJywnIkNvdXJpZXIgTmV3IicsIm1vbm9zcGFjZSJdfSxmb250U2l6ZTp7eHM6WyIwLjc1cmVtIix7bGluZUhlaWdodDoiMXJlbSJ9XSxzbTpbIjAuODc1cmVtIix7bGluZUhlaWdodDoiMS4yNXJlbSJ9XSxiYXNlOlsiMXJlbSIse2xpbmVIZWlnaHQ6IjEuNXJlbSJ9XSxsZzpbIjEuMTI1cmVtIix7bGluZUhlaWdodDoiMS43NXJlbSJ9XSx4bDpbIjEuMjVyZW0iLHtsaW5lSGVpZ2h0OiIxLjc1cmVtIn1dLCIyeGwiOlsiMS41cmVtIix7bGluZUhlaWdodDoiMnJlbSJ9XSwiM3hsIjpbIjEuODc1cmVtIix7bGluZUhlaWdodDoiMi4yNXJlbSJ9XSwiNHhsIjpbIjIuMjVyZW0iLHtsaW5lSGVpZ2h0OiIyLjVyZW0ifV0sIjV4bCI6WyIzcmVtIix7bGluZUhlaWdodDoiMSJ9XSwiNnhsIjpbIjMuNzVyZW0iLHtsaW5lSGVpZ2h0OiIxIn1dLCI3eGwiOlsiNC41cmVtIix7bGluZUhlaWdodDoiMSJ9XSwiOHhsIjpbIjZyZW0iLHtsaW5lSGVpZ2h0OiIxIn1dLCI5eGwiOlsiOHJlbSIse2xpbmVIZWlnaHQ6IjEifV19LGZvbnRXZWlnaHQ6e3RoaW46IjEwMCIsZXh0cmFsaWdodDoiMjAwIixsaWdodDoiMzAwIixub3JtYWw6IjQwMCIsbWVkaXVtOiI1MDAiLHNlbWlib2xkOiI2MDAiLGJvbGQ6IjcwMCIsZXh0cmFib2xkOiI4MDAiLGJsYWNrOiI5MDAifSxnYXA6KHt0aGVtZTpyfSk9PnIoInNwYWNpbmciKSxncmFkaWVudENvbG9yU3RvcHM6KHt0aGVtZTpyfSk9PnIoImNvbG9ycyIpLGdyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zOnsiMCUiOiIwJSIsIjUlIjoiNSUiLCIxMCUiOiIxMCUiLCIxNSUiOiIxNSUiLCIyMCUiOiIyMCUiLCIyNSUiOiIyNSUiLCIzMCUiOiIzMCUiLCIzNSUiOiIzNSUiLCI0MCUiOiI0MCUiLCI0NSUiOiI0NSUiLCI1MCUiOiI1MCUiLCI1NSUiOiI1NSUiLCI2MCUiOiI2MCUiLCI2NSUiOiI2NSUiLCI3MCUiOiI3MCUiLCI3NSUiOiI3NSUiLCI4MCUiOiI4MCUiLCI4NSUiOiI4NSUiLCI5MCUiOiI5MCUiLCI5NSUiOiI5NSUiLCIxMDAlIjoiMTAwJSJ9LGdyYXlzY2FsZTp7MDoiMCIsREVGQVVMVDoiMTAwJSJ9LGdyaWRBdXRvQ29sdW1uczp7YXV0bzoiYXV0byIsbWluOiJtaW4tY29udGVudCIsbWF4OiJtYXgtY29udGVudCIsZnI6Im1pbm1heCgwLCAxZnIpIn0sZ3JpZEF1dG9Sb3dzOnthdXRvOiJhdXRvIixtaW46Im1pbi1jb250ZW50IixtYXg6Im1heC1jb250ZW50IixmcjoibWlubWF4KDAsIDFmcikifSxncmlkQ29sdW1uOnthdXRvOiJhdXRvIiwic3Bhbi0xIjoic3BhbiAxIC8gc3BhbiAxIiwic3Bhbi0yIjoic3BhbiAyIC8gc3BhbiAyIiwic3Bhbi0zIjoic3BhbiAzIC8gc3BhbiAzIiwic3Bhbi00Ijoic3BhbiA0IC8gc3BhbiA0Iiwic3Bhbi01Ijoic3BhbiA1IC8gc3BhbiA1Iiwic3Bhbi02Ijoic3BhbiA2IC8gc3BhbiA2Iiwic3Bhbi03Ijoic3BhbiA3IC8gc3BhbiA3Iiwic3Bhbi04Ijoic3BhbiA4IC8gc3BhbiA4Iiwic3Bhbi05Ijoic3BhbiA5IC8gc3BhbiA5Iiwic3Bhbi0xMCI6InNwYW4gMTAgLyBzcGFuIDEwIiwic3Bhbi0xMSI6InNwYW4gMTEgLyBzcGFuIDExIiwic3Bhbi0xMiI6InNwYW4gMTIgLyBzcGFuIDEyIiwic3Bhbi1mdWxsIjoiMSAvIC0xIn0sZ3JpZENvbHVtbkVuZDp7YXV0bzoiYXV0byIsMToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIsMTA6IjEwIiwxMToiMTEiLDEyOiIxMiIsMTM6IjEzIn0sZ3JpZENvbHVtblN0YXJ0OnthdXRvOiJhdXRvIiwxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwxMDoiMTAiLDExOiIxMSIsMTI6IjEyIiwxMzoiMTMifSxncmlkUm93OnthdXRvOiJhdXRvIiwic3Bhbi0xIjoic3BhbiAxIC8gc3BhbiAxIiwic3Bhbi0yIjoic3BhbiAyIC8gc3BhbiAyIiwic3Bhbi0zIjoic3BhbiAzIC8gc3BhbiAzIiwic3Bhbi00Ijoic3BhbiA0IC8gc3BhbiA0Iiwic3Bhbi01Ijoic3BhbiA1IC8gc3BhbiA1Iiwic3Bhbi02Ijoic3BhbiA2IC8gc3BhbiA2Iiwic3Bhbi03Ijoic3BhbiA3IC8gc3BhbiA3Iiwic3Bhbi04Ijoic3BhbiA4IC8gc3BhbiA4Iiwic3Bhbi05Ijoic3BhbiA5IC8gc3BhbiA5Iiwic3Bhbi0xMCI6InNwYW4gMTAgLyBzcGFuIDEwIiwic3Bhbi0xMSI6InNwYW4gMTEgLyBzcGFuIDExIiwic3Bhbi0xMiI6InNwYW4gMTIgLyBzcGFuIDEyIiwic3Bhbi1mdWxsIjoiMSAvIC0xIn0sZ3JpZFJvd0VuZDp7YXV0bzoiYXV0byIsMToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIsMTA6IjEwIiwxMToiMTEiLDEyOiIxMiIsMTM6IjEzIn0sZ3JpZFJvd1N0YXJ0OnthdXRvOiJhdXRvIiwxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwxMDoiMTAiLDExOiIxMSIsMTI6IjEyIiwxMzoiMTMifSxncmlkVGVtcGxhdGVDb2x1bW5zOntub25lOiJub25lIixzdWJncmlkOiJzdWJncmlkIiwxOiJyZXBlYXQoMSwgbWlubWF4KDAsIDFmcikpIiwyOiJyZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpIiwzOiJyZXBlYXQoMywgbWlubWF4KDAsIDFmcikpIiw0OiJyZXBlYXQoNCwgbWlubWF4KDAsIDFmcikpIiw1OiJyZXBlYXQoNSwgbWlubWF4KDAsIDFmcikpIiw2OiJyZXBlYXQoNiwgbWlubWF4KDAsIDFmcikpIiw3OiJyZXBlYXQoNywgbWlubWF4KDAsIDFmcikpIiw4OiJyZXBlYXQoOCwgbWlubWF4KDAsIDFmcikpIiw5OiJyZXBlYXQoOSwgbWlubWF4KDAsIDFmcikpIiwxMDoicmVwZWF0KDEwLCBtaW5tYXgoMCwgMWZyKSkiLDExOiJyZXBlYXQoMTEsIG1pbm1heCgwLCAxZnIpKSIsMTI6InJlcGVhdCgxMiwgbWlubWF4KDAsIDFmcikpIn0sZ3JpZFRlbXBsYXRlUm93czp7bm9uZToibm9uZSIsc3ViZ3JpZDoic3ViZ3JpZCIsMToicmVwZWF0KDEsIG1pbm1heCgwLCAxZnIpKSIsMjoicmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKSIsMzoicmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKSIsNDoicmVwZWF0KDQsIG1pbm1heCgwLCAxZnIpKSIsNToicmVwZWF0KDUsIG1pbm1heCgwLCAxZnIpKSIsNjoicmVwZWF0KDYsIG1pbm1heCgwLCAxZnIpKSIsNzoicmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKSIsODoicmVwZWF0KDgsIG1pbm1heCgwLCAxZnIpKSIsOToicmVwZWF0KDksIG1pbm1heCgwLCAxZnIpKSIsMTA6InJlcGVhdCgxMCwgbWlubWF4KDAsIDFmcikpIiwxMToicmVwZWF0KDExLCBtaW5tYXgoMCwgMWZyKSkiLDEyOiJyZXBlYXQoMTIsIG1pbm1heCgwLCAxZnIpKSJ9LGhlaWdodDooe3RoZW1lOnJ9KT0+KHthdXRvOiJhdXRvIiwuLi5yKCJzcGFjaW5nIiksIjEvMiI6IjUwJSIsIjEvMyI6IjMzLjMzMzMzMyUiLCIyLzMiOiI2Ni42NjY2NjclIiwiMS80IjoiMjUlIiwiMi80IjoiNTAlIiwiMy80IjoiNzUlIiwiMS81IjoiMjAlIiwiMi81IjoiNDAlIiwiMy81IjoiNjAlIiwiNC81IjoiODAlIiwiMS82IjoiMTYuNjY2NjY3JSIsIjIvNiI6IjMzLjMzMzMzMyUiLCIzLzYiOiI1MCUiLCI0LzYiOiI2Ni42NjY2NjclIiwiNS82IjoiODMuMzMzMzMzJSIsZnVsbDoiMTAwJSIsc2NyZWVuOiIxMDB2aCIsc3ZoOiIxMDBzdmgiLGx2aDoiMTAwbHZoIixkdmg6IjEwMGR2aCIsbWluOiJtaW4tY29udGVudCIsbWF4OiJtYXgtY29udGVudCIsZml0OiJmaXQtY29udGVudCJ9KSxodWVSb3RhdGU6ezA6IjBkZWciLDE1OiIxNWRlZyIsMzA6IjMwZGVnIiw2MDoiNjBkZWciLDkwOiI5MGRlZyIsMTgwOiIxODBkZWcifSxpbnNldDooe3RoZW1lOnJ9KT0+KHthdXRvOiJhdXRvIiwuLi5yKCJzcGFjaW5nIiksIjEvMiI6IjUwJSIsIjEvMyI6IjMzLjMzMzMzMyUiLCIyLzMiOiI2Ni42NjY2NjclIiwiMS80IjoiMjUlIiwiMi80IjoiNTAlIiwiMy80IjoiNzUlIixmdWxsOiIxMDAlIn0pLGludmVydDp7MDoiMCIsREVGQVVMVDoiMTAwJSJ9LGtleWZyYW1lczp7c3Bpbjp7dG86e3RyYW5zZm9ybToicm90YXRlKDM2MGRlZykifX0scGluZzp7Ijc1JSwgMTAwJSI6e3RyYW5zZm9ybToic2NhbGUoMikiLG9wYWNpdHk6IjAifX0scHVsc2U6eyI1MCUiOntvcGFjaXR5OiIuNSJ9fSxib3VuY2U6eyIwJSwgMTAwJSI6e3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSIsYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ImN1YmljLWJlemllcigwLjgsMCwxLDEpIn0sIjUwJSI6e3RyYW5zZm9ybToibm9uZSIsYW5pbWF0aW9uVGltaW5nRnVuY3Rpb246ImN1YmljLWJlemllcigwLDAsMC4yLDEpIn19fSxsZXR0ZXJTcGFjaW5nOnt0aWdodGVyOiItMC4wNWVtIix0aWdodDoiLTAuMDI1ZW0iLG5vcm1hbDoiMGVtIix3aWRlOiIwLjAyNWVtIix3aWRlcjoiMC4wNWVtIix3aWRlc3Q6IjAuMWVtIn0sbGluZUhlaWdodDp7bm9uZToiMSIsdGlnaHQ6IjEuMjUiLHNudWc6IjEuMzc1Iixub3JtYWw6IjEuNSIscmVsYXhlZDoiMS42MjUiLGxvb3NlOiIyIiwzOiIuNzVyZW0iLDQ6IjFyZW0iLDU6IjEuMjVyZW0iLDY6IjEuNXJlbSIsNzoiMS43NXJlbSIsODoiMnJlbSIsOToiMi4yNXJlbSIsMTA6IjIuNXJlbSJ9LGxpc3RTdHlsZVR5cGU6e25vbmU6Im5vbmUiLGRpc2M6ImRpc2MiLGRlY2ltYWw6ImRlY2ltYWwifSxsaXN0U3R5bGVJbWFnZTp7bm9uZToibm9uZSJ9LG1hcmdpbjooe3RoZW1lOnJ9KT0+KHthdXRvOiJhdXRvIiwuLi5yKCJzcGFjaW5nIil9KSxsaW5lQ2xhbXA6ezE6IjEiLDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYifSxtYXhIZWlnaHQ6KHt0aGVtZTpyfSk9Pih7Li4ucigic3BhY2luZyIpLG5vbmU6Im5vbmUiLGZ1bGw6IjEwMCUiLHNjcmVlbjoiMTAwdmgiLHN2aDoiMTAwc3ZoIixsdmg6IjEwMGx2aCIsZHZoOiIxMDBkdmgiLG1pbjoibWluLWNvbnRlbnQiLG1heDoibWF4LWNvbnRlbnQiLGZpdDoiZml0LWNvbnRlbnQifSksbWF4V2lkdGg6KHt0aGVtZTpyLGJyZWFrcG9pbnRzOmV9KT0+KHsuLi5yKCJzcGFjaW5nIiksbm9uZToibm9uZSIseHM6IjIwcmVtIixzbToiMjRyZW0iLG1kOiIyOHJlbSIsbGc6IjMycmVtIix4bDoiMzZyZW0iLCIyeGwiOiI0MnJlbSIsIjN4bCI6IjQ4cmVtIiwiNHhsIjoiNTZyZW0iLCI1eGwiOiI2NHJlbSIsIjZ4bCI6IjcycmVtIiwiN3hsIjoiODByZW0iLGZ1bGw6IjEwMCUiLG1pbjoibWluLWNvbnRlbnQiLG1heDoibWF4LWNvbnRlbnQiLGZpdDoiZml0LWNvbnRlbnQiLHByb3NlOiI2NWNoIiwuLi5lKHIoInNjcmVlbnMiKSl9KSxtaW5IZWlnaHQ6KHt0aGVtZTpyfSk9Pih7Li4ucigic3BhY2luZyIpLGZ1bGw6IjEwMCUiLHNjcmVlbjoiMTAwdmgiLHN2aDoiMTAwc3ZoIixsdmg6IjEwMGx2aCIsZHZoOiIxMDBkdmgiLG1pbjoibWluLWNvbnRlbnQiLG1heDoibWF4LWNvbnRlbnQiLGZpdDoiZml0LWNvbnRlbnQifSksbWluV2lkdGg6KHt0aGVtZTpyfSk9Pih7Li4ucigic3BhY2luZyIpLGZ1bGw6IjEwMCUiLG1pbjoibWluLWNvbnRlbnQiLG1heDoibWF4LWNvbnRlbnQiLGZpdDoiZml0LWNvbnRlbnQifSksb2JqZWN0UG9zaXRpb246e2JvdHRvbToiYm90dG9tIixjZW50ZXI6ImNlbnRlciIsbGVmdDoibGVmdCIsImxlZnQtYm90dG9tIjoibGVmdCBib3R0b20iLCJsZWZ0LXRvcCI6ImxlZnQgdG9wIixyaWdodDoicmlnaHQiLCJyaWdodC1ib3R0b20iOiJyaWdodCBib3R0b20iLCJyaWdodC10b3AiOiJyaWdodCB0b3AiLHRvcDoidG9wIn0sb3BhY2l0eTp7MDoiMCIsNToiMC4wNSIsMTA6IjAuMSIsMTU6IjAuMTUiLDIwOiIwLjIiLDI1OiIwLjI1IiwzMDoiMC4zIiwzNToiMC4zNSIsNDA6IjAuNCIsNDU6IjAuNDUiLDUwOiIwLjUiLDU1OiIwLjU1Iiw2MDoiMC42Iiw2NToiMC42NSIsNzA6IjAuNyIsNzU6IjAuNzUiLDgwOiIwLjgiLDg1OiIwLjg1Iiw5MDoiMC45Iiw5NToiMC45NSIsMTAwOiIxIn0sb3JkZXI6e2ZpcnN0OiItOTk5OSIsbGFzdDoiOTk5OSIsbm9uZToiMCIsMToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIsMTA6IjEwIiwxMToiMTEiLDEyOiIxMiJ9LG91dGxpbmVDb2xvcjooe3RoZW1lOnJ9KT0+cigiY29sb3JzIiksb3V0bGluZU9mZnNldDp7MDoiMHB4IiwxOiIxcHgiLDI6IjJweCIsNDoiNHB4Iiw4OiI4cHgifSxvdXRsaW5lV2lkdGg6ezA6IjBweCIsMToiMXB4IiwyOiIycHgiLDQ6IjRweCIsODoiOHB4In0scGFkZGluZzooe3RoZW1lOnJ9KT0+cigic3BhY2luZyIpLHBsYWNlaG9sZGVyQ29sb3I6KHt0aGVtZTpyfSk9PnIoImNvbG9ycyIpLHBsYWNlaG9sZGVyT3BhY2l0eTooe3RoZW1lOnJ9KT0+cigib3BhY2l0eSIpLHJpbmdDb2xvcjooe3RoZW1lOnJ9KT0+KHtERUZBVUxUOnIoImNvbG9ycy5ibHVlLjUwMCIsIiMzYjgyZjYiKSwuLi5yKCJjb2xvcnMiKX0pLHJpbmdPZmZzZXRDb2xvcjooe3RoZW1lOnJ9KT0+cigiY29sb3JzIikscmluZ09mZnNldFdpZHRoOnswOiIwcHgiLDE6IjFweCIsMjoiMnB4Iiw0OiI0cHgiLDg6IjhweCJ9LHJpbmdPcGFjaXR5Oih7dGhlbWU6cn0pPT4oe0RFRkFVTFQ6IjAuNSIsLi4ucigib3BhY2l0eSIpfSkscmluZ1dpZHRoOntERUZBVUxUOiIzcHgiLDA6IjBweCIsMToiMXB4IiwyOiIycHgiLDQ6IjRweCIsODoiOHB4In0scm90YXRlOnswOiIwZGVnIiwxOiIxZGVnIiwyOiIyZGVnIiwzOiIzZGVnIiw2OiI2ZGVnIiwxMjoiMTJkZWciLDQ1OiI0NWRlZyIsOTA6IjkwZGVnIiwxODA6IjE4MGRlZyJ9LHNhdHVyYXRlOnswOiIwIiw1MDoiLjUiLDEwMDoiMSIsMTUwOiIxLjUiLDIwMDoiMiJ9LHNjYWxlOnswOiIwIiw1MDoiLjUiLDc1OiIuNzUiLDkwOiIuOSIsOTU6Ii45NSIsMTAwOiIxIiwxMDU6IjEuMDUiLDExMDoiMS4xIiwxMjU6IjEuMjUiLDE1MDoiMS41In0sc2NyZWVuczp7c206IjY0MHB4IixtZDoiNzY4cHgiLGxnOiIxMDI0cHgiLHhsOiIxMjgwcHgiLCIyeGwiOiIxNTM2cHgifSxzY3JvbGxNYXJnaW46KHt0aGVtZTpyfSk9Pih7Li4ucigic3BhY2luZyIpfSksc2Nyb2xsUGFkZGluZzooe3RoZW1lOnJ9KT0+cigic3BhY2luZyIpLHNlcGlhOnswOiIwIixERUZBVUxUOiIxMDAlIn0sc2tldzp7MDoiMGRlZyIsMToiMWRlZyIsMjoiMmRlZyIsMzoiM2RlZyIsNjoiNmRlZyIsMTI6IjEyZGVnIn0sc3BhY2U6KHt0aGVtZTpyfSk9Pih7Li4ucigic3BhY2luZyIpfSksc3BhY2luZzp7cHg6IjFweCIsMDoiMHB4IiwuNToiMC4xMjVyZW0iLDE6IjAuMjVyZW0iLDEuNToiMC4zNzVyZW0iLDI6IjAuNXJlbSIsMi41OiIwLjYyNXJlbSIsMzoiMC43NXJlbSIsMy41OiIwLjg3NXJlbSIsNDoiMXJlbSIsNToiMS4yNXJlbSIsNjoiMS41cmVtIiw3OiIxLjc1cmVtIiw4OiIycmVtIiw5OiIyLjI1cmVtIiwxMDoiMi41cmVtIiwxMToiMi43NXJlbSIsMTI6IjNyZW0iLDE0OiIzLjVyZW0iLDE2OiI0cmVtIiwyMDoiNXJlbSIsMjQ6IjZyZW0iLDI4OiI3cmVtIiwzMjoiOHJlbSIsMzY6IjlyZW0iLDQwOiIxMHJlbSIsNDQ6IjExcmVtIiw0ODoiMTJyZW0iLDUyOiIxM3JlbSIsNTY6IjE0cmVtIiw2MDoiMTVyZW0iLDY0OiIxNnJlbSIsNzI6IjE4cmVtIiw4MDoiMjByZW0iLDk2OiIyNHJlbSJ9LHN0cm9rZTooe3RoZW1lOnJ9KT0+KHtub25lOiJub25lIiwuLi5yKCJjb2xvcnMiKX0pLHN0cm9rZVdpZHRoOnswOiIwIiwxOiIxIiwyOiIyIn0sc3VwcG9ydHM6e30sZGF0YTp7fSx0ZXh0Q29sb3I6KHt0aGVtZTpyfSk9PnIoImNvbG9ycyIpLHRleHREZWNvcmF0aW9uQ29sb3I6KHt0aGVtZTpyfSk9PnIoImNvbG9ycyIpLHRleHREZWNvcmF0aW9uVGhpY2tuZXNzOnthdXRvOiJhdXRvIiwiZnJvbS1mb250IjoiZnJvbS1mb250IiwwOiIwcHgiLDE6IjFweCIsMjoiMnB4Iiw0OiI0cHgiLDg6IjhweCJ9LHRleHRJbmRlbnQ6KHt0aGVtZTpyfSk9Pih7Li4ucigic3BhY2luZyIpfSksdGV4dE9wYWNpdHk6KHt0aGVtZTpyfSk9PnIoIm9wYWNpdHkiKSx0ZXh0VW5kZXJsaW5lT2Zmc2V0OnthdXRvOiJhdXRvIiwwOiIwcHgiLDE6IjFweCIsMjoiMnB4Iiw0OiI0cHgiLDg6IjhweCJ9LHRyYW5zZm9ybU9yaWdpbjp7Y2VudGVyOiJjZW50ZXIiLHRvcDoidG9wIiwidG9wLXJpZ2h0IjoidG9wIHJpZ2h0IixyaWdodDoicmlnaHQiLCJib3R0b20tcmlnaHQiOiJib3R0b20gcmlnaHQiLGJvdHRvbToiYm90dG9tIiwiYm90dG9tLWxlZnQiOiJib3R0b20gbGVmdCIsbGVmdDoibGVmdCIsInRvcC1sZWZ0IjoidG9wIGxlZnQifSx0cmFuc2l0aW9uRGVsYXk6ezA6IjBzIiw3NToiNzVtcyIsMTAwOiIxMDBtcyIsMTUwOiIxNTBtcyIsMjAwOiIyMDBtcyIsMzAwOiIzMDBtcyIsNTAwOiI1MDBtcyIsNzAwOiI3MDBtcyIsMWUzOiIxMDAwbXMifSx0cmFuc2l0aW9uRHVyYXRpb246e0RFRkFVTFQ6IjE1MG1zIiwwOiIwcyIsNzU6Ijc1bXMiLDEwMDoiMTAwbXMiLDE1MDoiMTUwbXMiLDIwMDoiMjAwbXMiLDMwMDoiMzAwbXMiLDUwMDoiNTAwbXMiLDcwMDoiNzAwbXMiLDFlMzoiMTAwMG1zIn0sdHJhbnNpdGlvblByb3BlcnR5Ontub25lOiJub25lIixhbGw6ImFsbCIsREVGQVVMVDoiY29sb3IsIGJhY2tncm91bmQtY29sb3IsIGJvcmRlci1jb2xvciwgdGV4dC1kZWNvcmF0aW9uLWNvbG9yLCBmaWxsLCBzdHJva2UsIG9wYWNpdHksIGJveC1zaGFkb3csIHRyYW5zZm9ybSwgZmlsdGVyLCBiYWNrZHJvcC1maWx0ZXIiLGNvbG9yczoiY29sb3IsIGJhY2tncm91bmQtY29sb3IsIGJvcmRlci1jb2xvciwgdGV4dC1kZWNvcmF0aW9uLWNvbG9yLCBmaWxsLCBzdHJva2UiLG9wYWNpdHk6Im9wYWNpdHkiLHNoYWRvdzoiYm94LXNoYWRvdyIsdHJhbnNmb3JtOiJ0cmFuc2Zvcm0ifSx0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb246e0RFRkFVTFQ6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGxpbmVhcjoibGluZWFyIixpbjoiY3ViaWMtYmV6aWVyKDAuNCwgMCwgMSwgMSkiLG91dDoiY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLCJpbi1vdXQiOiJjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIn0sdHJhbnNsYXRlOih7dGhlbWU6cn0pPT4oey4uLnIoInNwYWNpbmciKSwiMS8yIjoiNTAlIiwiMS8zIjoiMzMuMzMzMzMzJSIsIjIvMyI6IjY2LjY2NjY2NyUiLCIxLzQiOiIyNSUiLCIyLzQiOiI1MCUiLCIzLzQiOiI3NSUiLGZ1bGw6IjEwMCUifSksc2l6ZTooe3RoZW1lOnJ9KT0+KHthdXRvOiJhdXRvIiwuLi5yKCJzcGFjaW5nIiksIjEvMiI6IjUwJSIsIjEvMyI6IjMzLjMzMzMzMyUiLCIyLzMiOiI2Ni42NjY2NjclIiwiMS80IjoiMjUlIiwiMi80IjoiNTAlIiwiMy80IjoiNzUlIiwiMS81IjoiMjAlIiwiMi81IjoiNDAlIiwiMy81IjoiNjAlIiwiNC81IjoiODAlIiwiMS82IjoiMTYuNjY2NjY3JSIsIjIvNiI6IjMzLjMzMzMzMyUiLCIzLzYiOiI1MCUiLCI0LzYiOiI2Ni42NjY2NjclIiwiNS82IjoiODMuMzMzMzMzJSIsIjEvMTIiOiI4LjMzMzMzMyUiLCIyLzEyIjoiMTYuNjY2NjY3JSIsIjMvMTIiOiIyNSUiLCI0LzEyIjoiMzMuMzMzMzMzJSIsIjUvMTIiOiI0MS42NjY2NjclIiwiNi8xMiI6IjUwJSIsIjcvMTIiOiI1OC4zMzMzMzMlIiwiOC8xMiI6IjY2LjY2NjY2NyUiLCI5LzEyIjoiNzUlIiwiMTAvMTIiOiI4My4zMzMzMzMlIiwiMTEvMTIiOiI5MS42NjY2NjclIixmdWxsOiIxMDAlIixtaW46Im1pbi1jb250ZW50IixtYXg6Im1heC1jb250ZW50IixmaXQ6ImZpdC1jb250ZW50In0pLHdpZHRoOih7dGhlbWU6cn0pPT4oe2F1dG86ImF1dG8iLC4uLnIoInNwYWNpbmciKSwiMS8yIjoiNTAlIiwiMS8zIjoiMzMuMzMzMzMzJSIsIjIvMyI6IjY2LjY2NjY2NyUiLCIxLzQiOiIyNSUiLCIyLzQiOiI1MCUiLCIzLzQiOiI3NSUiLCIxLzUiOiIyMCUiLCIyLzUiOiI0MCUiLCIzLzUiOiI2MCUiLCI0LzUiOiI4MCUiLCIxLzYiOiIxNi42NjY2NjclIiwiMi82IjoiMzMuMzMzMzMzJSIsIjMvNiI6IjUwJSIsIjQvNiI6IjY2LjY2NjY2NyUiLCI1LzYiOiI4My4zMzMzMzMlIiwiMS8xMiI6IjguMzMzMzMzJSIsIjIvMTIiOiIxNi42NjY2NjclIiwiMy8xMiI6IjI1JSIsIjQvMTIiOiIzMy4zMzMzMzMlIiwiNS8xMiI6IjQxLjY2NjY2NyUiLCI2LzEyIjoiNTAlIiwiNy8xMiI6IjU4LjMzMzMzMyUiLCI4LzEyIjoiNjYuNjY2NjY3JSIsIjkvMTIiOiI3NSUiLCIxMC8xMiI6IjgzLjMzMzMzMyUiLCIxMS8xMiI6IjkxLjY2NjY2NyUiLGZ1bGw6IjEwMCUiLHNjcmVlbjoiMTAwdnciLHN2dzoiMTAwc3Z3Iixsdnc6IjEwMGx2dyIsZHZ3OiIxMDBkdnciLG1pbjoibWluLWNvbnRlbnQiLG1heDoibWF4LWNvbnRlbnQiLGZpdDoiZml0LWNvbnRlbnQifSksd2lsbENoYW5nZTp7YXV0bzoiYXV0byIsc2Nyb2xsOiJzY3JvbGwtcG9zaXRpb24iLGNvbnRlbnRzOiJjb250ZW50cyIsdHJhbnNmb3JtOiJ0cmFuc2Zvcm0ifSx6SW5kZXg6e2F1dG86ImF1dG8iLDA6IjAiLDEwOiIxMCIsMjA6IjIwIiwzMDoiMzAiLDQwOiI0MCIsNTA6IjUwIn19LHBsdWdpbnM6W119fSk7ZnVuY3Rpb24gbm4ocil7bGV0IGU9KHI/LnByZXNldHM/P1tpYy5kZWZhdWx0XSkuc2xpY2UoKS5yZXZlcnNlKCkuZmxhdE1hcChuPT5ubihuIGluc3RhbmNlb2YgRnVuY3Rpb24/bigpOm4pKSx0PXtyZXNwZWN0RGVmYXVsdFJpbmdDb2xvck9wYWNpdHk6e3RoZW1lOntyaW5nQ29sb3I6KHt0aGVtZTpufSk9Pih7REVGQVVMVDoiIzNiODJmNjdmIiwuLi5uKCJjb2xvcnMiKX0pfX0sZGlzYWJsZUNvbG9yT3BhY2l0eVV0aWxpdGllc0J5RGVmYXVsdDp7Y29yZVBsdWdpbnM6e2JhY2tncm91bmRPcGFjaXR5OiExLGJvcmRlck9wYWNpdHk6ITEsZGl2aWRlT3BhY2l0eTohMSxwbGFjZWhvbGRlck9wYWNpdHk6ITEscmluZ09wYWNpdHk6ITEsdGV4dE9wYWNpdHk6ITF9fX0saT1PYmplY3Qua2V5cyh0KS5maWx0ZXIobj0+d2UocixuKSkubWFwKG49PnRbbl0pO3JldHVybltyLC4uLmksLi4uZV19dmFyIGljLG5jPVAoKCk9Pnt1KCk7aWM9cGUocm4oKSk7Y3QoKX0pO3ZhciBzYz17fTtHZShzYyx7ZGVmYXVsdDooKT0+enJ9KTtmdW5jdGlvbiB6ciguLi5yKXtsZXRbLC4uLmVdPW5uKHJbMF0pO3JldHVybiBuYShbLi4uciwuLi5lXSl9dmFyIHNhPVAoKCk9Pnt1KCk7dGMoKTtuYygpfSk7dmFyIFVyPXt9O0dlKFVyLHtkZWZhdWx0OigpPT5tZX0pO3ZhciBtZSxldD1QKCgpPT57dSgpO21lPXtyZXNvbHZlOnI9PnIsZXh0bmFtZTpyPT4iLiIrci5zcGxpdCgiLiIpLnBvcCgpfX0pO2Z1bmN0aW9uIHNuKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsfWZ1bmN0aW9uIGJ4KHIpe3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg9PT0wfWZ1bmN0aW9uIGFjKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyJ8fHIgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gYWEocil7cmV0dXJuIHNuKHIpJiZyLmNvbmZpZz09PXZvaWQgMCYmIWJ4KHIpP251bGw6c24ocikmJnIuY29uZmlnIT09dm9pZCAwJiZhYyhyLmNvbmZpZyk/bWUucmVzb2x2ZShyLmNvbmZpZyk6c24ocikmJnIuY29uZmlnIT09dm9pZCAwJiZzbihyLmNvbmZpZyk/bnVsbDphYyhyKT9tZS5yZXNvbHZlKHIpOnd4KCl9ZnVuY3Rpb24gd3goKXtmb3IobGV0IHIgb2YgeXgpdHJ5e2xldCBlPW1lLnJlc29sdmUocik7cmV0dXJuIGJlLmFjY2Vzc1N5bmMoZSksZX1jYXRjaChlKXt9cmV0dXJuIG51bGx9dmFyIHl4LG9jPVAoKCk9Pnt1KCk7ZnQoKTtldCgpO3l4PVsiLi90YWlsd2luZC5jb25maWcuanMiLCIuL3RhaWx3aW5kLmNvbmZpZy5janMiLCIuL3RhaWx3aW5kLmNvbmZpZy5tanMiLCIuL3RhaWx3aW5kLmNvbmZpZy50cyIsIi4vdGFpbHdpbmQuY29uZmlnLmN0cyIsIi4vdGFpbHdpbmQuY29uZmlnLm10cyJdfSk7dmFyIGxjPXt9O0dlKGxjLHtkZWZhdWx0OigpPT5vYX0pO3ZhciBvYSxsYT1QKCgpPT57dSgpO29hPXtwYXJzZTpyPT4oe2hyZWY6cn0pfX0pO3ZhciB1YT14KCgpPT57dSgpfSk7dmFyIGFuPXgoKHYzLGNjKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIHVjPShRaSgpLEFmKSxmYz11YSgpLEp0PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoZSx0LGksbixzLGEpe3N1cGVyKGUpO3RoaXMubmFtZT0iQ3NzU3ludGF4RXJyb3IiLHRoaXMucmVhc29uPWUscyYmKHRoaXMuZmlsZT1zKSxuJiYodGhpcy5zb3VyY2U9biksYSYmKHRoaXMucGx1Z2luPWEpLHR5cGVvZiB0IT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiJiYodHlwZW9mIHQ9PSJudW1iZXIiPyh0aGlzLmxpbmU9dCx0aGlzLmNvbHVtbj1pKToodGhpcy5saW5lPXQubGluZSx0aGlzLmNvbHVtbj10LmNvbHVtbix0aGlzLmVuZExpbmU9aS5saW5lLHRoaXMuZW5kQ29sdW1uPWkuY29sdW1uKSksdGhpcy5zZXRNZXNzYWdlKCksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsSnQpfXNldE1lc3NhZ2UoKXt0aGlzLm1lc3NhZ2U9dGhpcy5wbHVnaW4/dGhpcy5wbHVnaW4rIjogIjoiIix0aGlzLm1lc3NhZ2UrPXRoaXMuZmlsZT90aGlzLmZpbGU6Ijxjc3MgaW5wdXQ+Iix0eXBlb2YgdGhpcy5saW5lIT0idW5kZWZpbmVkIiYmKHRoaXMubWVzc2FnZSs9IjoiK3RoaXMubGluZSsiOiIrdGhpcy5jb2x1bW4pLHRoaXMubWVzc2FnZSs9IjogIit0aGlzLnJlYXNvbn1zaG93U291cmNlQ29kZShlKXtpZighdGhpcy5zb3VyY2UpcmV0dXJuIiI7bGV0IHQ9dGhpcy5zb3VyY2U7ZT09bnVsbCYmKGU9dWMuaXNDb2xvclN1cHBvcnRlZCk7bGV0IGk9Zj0+ZixuPWY9PmYscz1mPT5mO2lmKGUpe2xldHtib2xkOmYsZ3JheTpkLHJlZDpwfT11Yy5jcmVhdGVDb2xvcnMoITApO249aD0+ZihwKGgpKSxpPWg9PmQoaCksZmMmJihzPWg9PmZjKGgpKX1sZXQgYT10LnNwbGl0KC9ccj9cbi8pLG89TWF0aC5tYXgodGhpcy5saW5lLTMsMCksbD1NYXRoLm1pbih0aGlzLmxpbmUrMixhLmxlbmd0aCksYz1TdHJpbmcobCkubGVuZ3RoO3JldHVybiBhLnNsaWNlKG8sbCkubWFwKChmLGQpPT57bGV0IHA9bysxK2QsaD0iICIrKCIgIitwKS5zbGljZSgtYykrIiB8ICI7aWYocD09PXRoaXMubGluZSl7aWYoZi5sZW5ndGg+MTYwKXtsZXQgdj0yMCx5PU1hdGgubWF4KDAsdGhpcy5jb2x1bW4tdiksdz1NYXRoLm1heCh0aGlzLmNvbHVtbit2LHRoaXMuZW5kQ29sdW1uK3YpLGs9Zi5zbGljZSh5LHcpLFM9aShoLnJlcGxhY2UoL1xkL2csIiAiKSkrZi5zbGljZSgwLE1hdGgubWluKHRoaXMuY29sdW1uLTEsdi0xKSkucmVwbGFjZSgvW15cdF0vZywiICIpO3JldHVybiBuKCI+IikraShoKStzKGspK2AKIGArUytuKCJeIil9bGV0IGI9aShoLnJlcGxhY2UoL1xkL2csIiAiKSkrZi5zbGljZSgwLHRoaXMuY29sdW1uLTEpLnJlcGxhY2UoL1teXHRdL2csIiAiKTtyZXR1cm4gbigiPiIpK2koaCkrcyhmKStgCiBgK2IrbigiXiIpfXJldHVybiIgIitpKGgpK3MoZil9KS5qb2luKGAKYCl9dG9TdHJpbmcoKXtsZXQgZT10aGlzLnNob3dTb3VyY2VDb2RlKCk7cmV0dXJuIGUmJihlPWAKCmArZStgCmApLHRoaXMubmFtZSsiOiAiK3RoaXMubWVzc2FnZStlfX07Y2MuZXhwb3J0cz1KdDtKdC5kZWZhdWx0PUp0fSk7dmFyIGZhPXgoKHgzLGRjKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIHBjPXthZnRlcjpgCmAsYmVmb3JlQ2xvc2U6YApgLGJlZm9yZUNvbW1lbnQ6YApgLGJlZm9yZURlY2w6YApgLGJlZm9yZU9wZW46IiAiLGJlZm9yZVJ1bGU6YApgLGNvbG9uOiI6ICIsY29tbWVudExlZnQ6IiAiLGNvbW1lbnRSaWdodDoiICIsZW1wdHlCb2R5OiIiLGluZGVudDoiICAgICIsc2VtaWNvbG9uOiExfTtmdW5jdGlvbiB2eChyKXtyZXR1cm4gclswXS50b1VwcGVyQ2FzZSgpK3Iuc2xpY2UoMSl9dmFyIG9uPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuYnVpbGRlcj1lfWF0cnVsZShlLHQpe2xldCBpPSJAIitlLm5hbWUsbj1lLnBhcmFtcz90aGlzLnJhd1ZhbHVlKGUsInBhcmFtcyIpOiIiO2lmKHR5cGVvZiBlLnJhd3MuYWZ0ZXJOYW1lIT0idW5kZWZpbmVkIj9pKz1lLnJhd3MuYWZ0ZXJOYW1lOm4mJihpKz0iICIpLGUubm9kZXMpdGhpcy5ibG9jayhlLGkrbik7ZWxzZXtsZXQgcz0oZS5yYXdzLmJldHdlZW58fCIiKSsodD8iOyI6IiIpO3RoaXMuYnVpbGRlcihpK24rcyxlKX19YmVmb3JlQWZ0ZXIoZSx0KXtsZXQgaTtlLnR5cGU9PT0iZGVjbCI/aT10aGlzLnJhdyhlLG51bGwsImJlZm9yZURlY2wiKTplLnR5cGU9PT0iY29tbWVudCI/aT10aGlzLnJhdyhlLG51bGwsImJlZm9yZUNvbW1lbnQiKTp0PT09ImJlZm9yZSI/aT10aGlzLnJhdyhlLG51bGwsImJlZm9yZVJ1bGUiKTppPXRoaXMucmF3KGUsbnVsbCwiYmVmb3JlQ2xvc2UiKTtsZXQgbj1lLnBhcmVudCxzPTA7Zm9yKDtuJiZuLnR5cGUhPT0icm9vdCI7KXMrPTEsbj1uLnBhcmVudDtpZihpLmluY2x1ZGVzKGAKYCkpe2xldCBhPXRoaXMucmF3KGUsbnVsbCwiaW5kZW50Iik7aWYoYS5sZW5ndGgpZm9yKGxldCBvPTA7bzxzO28rKylpKz1hfXJldHVybiBpfWJsb2NrKGUsdCl7bGV0IGk9dGhpcy5yYXcoZSwiYmV0d2VlbiIsImJlZm9yZU9wZW4iKTt0aGlzLmJ1aWxkZXIodCtpKyJ7IixlLCJzdGFydCIpO2xldCBuO2Uubm9kZXMmJmUubm9kZXMubGVuZ3RoPyh0aGlzLmJvZHkoZSksbj10aGlzLnJhdyhlLCJhZnRlciIpKTpuPXRoaXMucmF3KGUsImFmdGVyIiwiZW1wdHlCb2R5IiksbiYmdGhpcy5idWlsZGVyKG4pLHRoaXMuYnVpbGRlcigifSIsZSwiZW5kIil9Ym9keShlKXtsZXQgdD1lLm5vZGVzLmxlbmd0aC0xO2Zvcig7dD4wJiZlLm5vZGVzW3RdLnR5cGU9PT0iY29tbWVudCI7KXQtPTE7bGV0IGk9dGhpcy5yYXcoZSwic2VtaWNvbG9uIik7Zm9yKGxldCBuPTA7bjxlLm5vZGVzLmxlbmd0aDtuKyspe2xldCBzPWUubm9kZXNbbl0sYT10aGlzLnJhdyhzLCJiZWZvcmUiKTthJiZ0aGlzLmJ1aWxkZXIoYSksdGhpcy5zdHJpbmdpZnkocyx0IT09bnx8aSl9fWNvbW1lbnQoZSl7bGV0IHQ9dGhpcy5yYXcoZSwibGVmdCIsImNvbW1lbnRMZWZ0IiksaT10aGlzLnJhdyhlLCJyaWdodCIsImNvbW1lbnRSaWdodCIpO3RoaXMuYnVpbGRlcigiLyoiK3QrZS50ZXh0K2krIiovIixlKX1kZWNsKGUsdCl7bGV0IGk9dGhpcy5yYXcoZSwiYmV0d2VlbiIsImNvbG9uIiksbj1lLnByb3AraSt0aGlzLnJhd1ZhbHVlKGUsInZhbHVlIik7ZS5pbXBvcnRhbnQmJihuKz1lLnJhd3MuaW1wb3J0YW50fHwiICFpbXBvcnRhbnQiKSx0JiYobis9IjsiKSx0aGlzLmJ1aWxkZXIobixlKX1kb2N1bWVudChlKXt0aGlzLmJvZHkoZSl9cmF3KGUsdCxpKXtsZXQgbjtpZihpfHwoaT10KSx0JiYobj1lLnJhd3NbdF0sdHlwZW9mIG4hPSJ1bmRlZmluZWQiKSlyZXR1cm4gbjtsZXQgcz1lLnBhcmVudDtpZihpPT09ImJlZm9yZSImJighc3x8cy50eXBlPT09InJvb3QiJiZzLmZpcnN0PT09ZXx8cyYmcy50eXBlPT09ImRvY3VtZW50IikpcmV0dXJuIiI7aWYoIXMpcmV0dXJuIHBjW2ldO2xldCBhPWUucm9vdCgpO2lmKGEucmF3Q2FjaGV8fChhLnJhd0NhY2hlPXt9KSx0eXBlb2YgYS5yYXdDYWNoZVtpXSE9InVuZGVmaW5lZCIpcmV0dXJuIGEucmF3Q2FjaGVbaV07aWYoaT09PSJiZWZvcmUifHxpPT09ImFmdGVyIilyZXR1cm4gdGhpcy5iZWZvcmVBZnRlcihlLGkpO3tsZXQgbz0icmF3Iit2eChpKTt0aGlzW29dP249dGhpc1tvXShhLGUpOmEud2FsayhsPT57aWYobj1sLnJhd3NbdF0sdHlwZW9mIG4hPSJ1bmRlZmluZWQiKXJldHVybiExfSl9cmV0dXJuIHR5cGVvZiBuPT0idW5kZWZpbmVkIiYmKG49cGNbaV0pLGEucmF3Q2FjaGVbaV09bixufXJhd0JlZm9yZUNsb3NlKGUpe2xldCB0O3JldHVybiBlLndhbGsoaT0+e2lmKGkubm9kZXMmJmkubm9kZXMubGVuZ3RoPjAmJnR5cGVvZiBpLnJhd3MuYWZ0ZXIhPSJ1bmRlZmluZWQiKXJldHVybiB0PWkucmF3cy5hZnRlcix0LmluY2x1ZGVzKGAKYCkmJih0PXQucmVwbGFjZSgvW15cbl0rJC8sIiIpKSwhMX0pLHQmJih0PXQucmVwbGFjZSgvXFMvZywiIikpLHR9cmF3QmVmb3JlQ29tbWVudChlLHQpe2xldCBpO3JldHVybiBlLndhbGtDb21tZW50cyhuPT57aWYodHlwZW9mIG4ucmF3cy5iZWZvcmUhPSJ1bmRlZmluZWQiKXJldHVybiBpPW4ucmF3cy5iZWZvcmUsaS5pbmNsdWRlcyhgCmApJiYoaT1pLnJlcGxhY2UoL1teXG5dKyQvLCIiKSksITF9KSx0eXBlb2YgaT09InVuZGVmaW5lZCI/aT10aGlzLnJhdyh0LG51bGwsImJlZm9yZURlY2wiKTppJiYoaT1pLnJlcGxhY2UoL1xTL2csIiIpKSxpfXJhd0JlZm9yZURlY2woZSx0KXtsZXQgaTtyZXR1cm4gZS53YWxrRGVjbHMobj0+e2lmKHR5cGVvZiBuLnJhd3MuYmVmb3JlIT0idW5kZWZpbmVkIilyZXR1cm4gaT1uLnJhd3MuYmVmb3JlLGkuaW5jbHVkZXMoYApgKSYmKGk9aS5yZXBsYWNlKC9bXlxuXSskLywiIikpLCExfSksdHlwZW9mIGk9PSJ1bmRlZmluZWQiP2k9dGhpcy5yYXcodCxudWxsLCJiZWZvcmVSdWxlIik6aSYmKGk9aS5yZXBsYWNlKC9cUy9nLCIiKSksaX1yYXdCZWZvcmVPcGVuKGUpe2xldCB0O3JldHVybiBlLndhbGsoaT0+e2lmKGkudHlwZSE9PSJkZWNsIiYmKHQ9aS5yYXdzLmJldHdlZW4sdHlwZW9mIHQhPSJ1bmRlZmluZWQiKSlyZXR1cm4hMX0pLHR9cmF3QmVmb3JlUnVsZShlKXtsZXQgdDtyZXR1cm4gZS53YWxrKGk9PntpZihpLm5vZGVzJiYoaS5wYXJlbnQhPT1lfHxlLmZpcnN0IT09aSkmJnR5cGVvZiBpLnJhd3MuYmVmb3JlIT0idW5kZWZpbmVkIilyZXR1cm4gdD1pLnJhd3MuYmVmb3JlLHQuaW5jbHVkZXMoYApgKSYmKHQ9dC5yZXBsYWNlKC9bXlxuXSskLywiIikpLCExfSksdCYmKHQ9dC5yZXBsYWNlKC9cUy9nLCIiKSksdH1yYXdDb2xvbihlKXtsZXQgdDtyZXR1cm4gZS53YWxrRGVjbHMoaT0+e2lmKHR5cGVvZiBpLnJhd3MuYmV0d2VlbiE9InVuZGVmaW5lZCIpcmV0dXJuIHQ9aS5yYXdzLmJldHdlZW4ucmVwbGFjZSgvW15cczpdL2csIiIpLCExfSksdH1yYXdFbXB0eUJvZHkoZSl7bGV0IHQ7cmV0dXJuIGUud2FsayhpPT57aWYoaS5ub2RlcyYmaS5ub2Rlcy5sZW5ndGg9PT0wJiYodD1pLnJhd3MuYWZ0ZXIsdHlwZW9mIHQhPSJ1bmRlZmluZWQiKSlyZXR1cm4hMX0pLHR9cmF3SW5kZW50KGUpe2lmKGUucmF3cy5pbmRlbnQpcmV0dXJuIGUucmF3cy5pbmRlbnQ7bGV0IHQ7cmV0dXJuIGUud2FsayhpPT57bGV0IG49aS5wYXJlbnQ7aWYobiYmbiE9PWUmJm4ucGFyZW50JiZuLnBhcmVudD09PWUmJnR5cGVvZiBpLnJhd3MuYmVmb3JlIT0idW5kZWZpbmVkIil7bGV0IHM9aS5yYXdzLmJlZm9yZS5zcGxpdChgCmApO3JldHVybiB0PXNbcy5sZW5ndGgtMV0sdD10LnJlcGxhY2UoL1xTL2csIiIpLCExfX0pLHR9cmF3U2VtaWNvbG9uKGUpe2xldCB0O3JldHVybiBlLndhbGsoaT0+e2lmKGkubm9kZXMmJmkubm9kZXMubGVuZ3RoJiZpLmxhc3QudHlwZT09PSJkZWNsIiYmKHQ9aS5yYXdzLnNlbWljb2xvbix0eXBlb2YgdCE9InVuZGVmaW5lZCIpKXJldHVybiExfSksdH1yYXdWYWx1ZShlLHQpe2xldCBpPWVbdF0sbj1lLnJhd3NbdF07cmV0dXJuIG4mJm4udmFsdWU9PT1pP24ucmF3Oml9cm9vdChlKXt0aGlzLmJvZHkoZSksZS5yYXdzLmFmdGVyJiZ0aGlzLmJ1aWxkZXIoZS5yYXdzLmFmdGVyKX1ydWxlKGUpe3RoaXMuYmxvY2soZSx0aGlzLnJhd1ZhbHVlKGUsInNlbGVjdG9yIikpLGUucmF3cy5vd25TZW1pY29sb24mJnRoaXMuYnVpbGRlcihlLnJhd3Mub3duU2VtaWNvbG9uLGUsImVuZCIpfXN0cmluZ2lmeShlLHQpe2lmKCF0aGlzW2UudHlwZV0pdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEFTVCBub2RlIHR5cGUgIitlLnR5cGUrIi4gTWF5YmUgeW91IG5lZWQgdG8gY2hhbmdlIFBvc3RDU1Mgc3RyaW5naWZpZXIuIik7dGhpc1tlLnR5cGVdKGUsdCl9fTtkYy5leHBvcnRzPW9uO29uLmRlZmF1bHQ9b259KTt2YXIgVnI9eCgoazMsaGMpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgeHg9ZmEoKTtmdW5jdGlvbiBjYShyLGUpe25ldyB4eChlKS5zdHJpbmdpZnkocil9aGMuZXhwb3J0cz1jYTtjYS5kZWZhdWx0PWNhfSk7dmFyIGxuPXgoKFMzLHBhKT0+e3UoKTsidXNlIHN0cmljdCI7cGEuZXhwb3J0cy5pc0NsZWFuPVN5bWJvbCgiaXNDbGVhbiIpO3BhLmV4cG9ydHMubXk9U3ltYm9sKCJteSIpfSk7dmFyIEdyPXgoKEEzLG1jKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIGt4PWFuKCksU3g9ZmEoKSxBeD1WcigpLHtpc0NsZWFuOkhyLG15OkN4fT1sbigpO2Z1bmN0aW9uIGRhKHIsZSl7bGV0IHQ9bmV3IHIuY29uc3RydWN0b3I7Zm9yKGxldCBpIGluIHIpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixpKXx8aT09PSJwcm94eUNhY2hlIiljb250aW51ZTtsZXQgbj1yW2ldLHM9dHlwZW9mIG47aT09PSJwYXJlbnQiJiZzPT09Im9iamVjdCI/ZSYmKHRbaV09ZSk6aT09PSJzb3VyY2UiP3RbaV09bjpBcnJheS5pc0FycmF5KG4pP3RbaV09bi5tYXAoYT0+ZGEoYSx0KSk6KHM9PT0ib2JqZWN0IiYmbiE9PW51bGwmJihuPWRhKG4pKSx0W2ldPW4pfXJldHVybiB0fWZ1bmN0aW9uIFdyKHIsZSl7aWYoZSYmdHlwZW9mIGUub2Zmc2V0IT0idW5kZWZpbmVkIilyZXR1cm4gZS5vZmZzZXQ7bGV0IHQ9MSxpPTEsbj0wO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKXtpZihpPT09ZS5saW5lJiZ0PT09ZS5jb2x1bW4pe249czticmVha31yW3NdPT09YApgPyh0PTEsaSs9MSk6dCs9MX1yZXR1cm4gbn12YXIgdW49Y2xhc3N7Y29uc3RydWN0b3IoZT17fSl7dGhpcy5yYXdzPXt9LHRoaXNbSHJdPSExLHRoaXNbQ3hdPSEwO2ZvcihsZXQgdCBpbiBlKWlmKHQ9PT0ibm9kZXMiKXt0aGlzLm5vZGVzPVtdO2ZvcihsZXQgaSBvZiBlW3RdKXR5cGVvZiBpLmNsb25lPT0iZnVuY3Rpb24iP3RoaXMuYXBwZW5kKGkuY2xvbmUoKSk6dGhpcy5hcHBlbmQoaSl9ZWxzZSB0aGlzW3RdPWVbdF19YWRkVG9FcnJvcihlKXtpZihlLnBvc3Rjc3NOb2RlPXRoaXMsZS5zdGFjayYmdGhpcy5zb3VyY2UmJi9cblxzezR9YXQgLy50ZXN0KGUuc3RhY2spKXtsZXQgdD10aGlzLnNvdXJjZTtlLnN0YWNrPWUuc3RhY2sucmVwbGFjZSgvXG5cc3s0fWF0IC8sYCQmJHt0LmlucHV0LmZyb219OiR7dC5zdGFydC5saW5lfToke3Quc3RhcnQuY29sdW1ufSQmYCl9cmV0dXJuIGV9YWZ0ZXIoZSl7cmV0dXJuIHRoaXMucGFyZW50Lmluc2VydEFmdGVyKHRoaXMsZSksdGhpc31hc3NpZ24oZT17fSl7Zm9yKGxldCB0IGluIGUpdGhpc1t0XT1lW3RdO3JldHVybiB0aGlzfWJlZm9yZShlKXtyZXR1cm4gdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsZSksdGhpc31jbGVhblJhd3MoZSl7ZGVsZXRlIHRoaXMucmF3cy5iZWZvcmUsZGVsZXRlIHRoaXMucmF3cy5hZnRlcixlfHxkZWxldGUgdGhpcy5yYXdzLmJldHdlZW59Y2xvbmUoZT17fSl7bGV0IHQ9ZGEodGhpcyk7Zm9yKGxldCBpIGluIGUpdFtpXT1lW2ldO3JldHVybiB0fWNsb25lQWZ0ZXIoZT17fSl7bGV0IHQ9dGhpcy5jbG9uZShlKTtyZXR1cm4gdGhpcy5wYXJlbnQuaW5zZXJ0QWZ0ZXIodGhpcyx0KSx0fWNsb25lQmVmb3JlKGU9e30pe2xldCB0PXRoaXMuY2xvbmUoZSk7cmV0dXJuIHRoaXMucGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLHQpLHR9ZXJyb3IoZSx0PXt9KXtpZih0aGlzLnNvdXJjZSl7bGV0e2VuZDppLHN0YXJ0Om59PXRoaXMucmFuZ2VCeSh0KTtyZXR1cm4gdGhpcy5zb3VyY2UuaW5wdXQuZXJyb3IoZSx7Y29sdW1uOm4uY29sdW1uLGxpbmU6bi5saW5lfSx7Y29sdW1uOmkuY29sdW1uLGxpbmU6aS5saW5lfSx0KX1yZXR1cm4gbmV3IGt4KGUpfWdldFByb3h5UHJvY2Vzc29yKCl7cmV0dXJue2dldChlLHQpe3JldHVybiB0PT09InByb3h5T2YiP2U6dD09PSJyb290Ij8oKT0+ZS5yb290KCkudG9Qcm94eSgpOmVbdF19LHNldChlLHQsaSl7cmV0dXJuIGVbdF09PT1pfHwoZVt0XT1pLCh0PT09InByb3AifHx0PT09InZhbHVlInx8dD09PSJuYW1lInx8dD09PSJwYXJhbXMifHx0PT09ImltcG9ydGFudCJ8fHQ9PT0idGV4dCIpJiZlLm1hcmtEaXJ0eSgpKSwhMH19fW1hcmtDbGVhbigpe3RoaXNbSHJdPSEwfW1hcmtEaXJ0eSgpe2lmKHRoaXNbSHJdKXt0aGlzW0hyXT0hMTtsZXQgZT10aGlzO2Zvcig7ZT1lLnBhcmVudDspZVtIcl09ITF9fW5leHQoKXtpZighdGhpcy5wYXJlbnQpcmV0dXJuO2xldCBlPXRoaXMucGFyZW50LmluZGV4KHRoaXMpO3JldHVybiB0aGlzLnBhcmVudC5ub2Rlc1tlKzFdfXBvc2l0aW9uQnkoZSl7bGV0IHQ9dGhpcy5zb3VyY2Uuc3RhcnQ7aWYoZS5pbmRleCl0PXRoaXMucG9zaXRpb25JbnNpZGUoZS5pbmRleCk7ZWxzZSBpZihlLndvcmQpe2xldCBuPXRoaXMuc291cmNlLmlucHV0LmNzcy5zbGljZShXcih0aGlzLnNvdXJjZS5pbnB1dC5jc3MsdGhpcy5zb3VyY2Uuc3RhcnQpLFdyKHRoaXMuc291cmNlLmlucHV0LmNzcyx0aGlzLnNvdXJjZS5lbmQpKS5pbmRleE9mKGUud29yZCk7biE9PS0xJiYodD10aGlzLnBvc2l0aW9uSW5zaWRlKG4pKX1yZXR1cm4gdH1wb3NpdGlvbkluc2lkZShlKXtsZXQgdD10aGlzLnNvdXJjZS5zdGFydC5jb2x1bW4saT10aGlzLnNvdXJjZS5zdGFydC5saW5lLG49V3IodGhpcy5zb3VyY2UuaW5wdXQuY3NzLHRoaXMuc291cmNlLnN0YXJ0KSxzPW4rZTtmb3IobGV0IGE9bjthPHM7YSsrKXRoaXMuc291cmNlLmlucHV0LmNzc1thXT09PWAKYD8odD0xLGkrPTEpOnQrPTE7cmV0dXJue2NvbHVtbjp0LGxpbmU6aX19cHJldigpe2lmKCF0aGlzLnBhcmVudClyZXR1cm47bGV0IGU9dGhpcy5wYXJlbnQuaW5kZXgodGhpcyk7cmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2UtMV19cmFuZ2VCeShlKXtsZXQgdD17Y29sdW1uOnRoaXMuc291cmNlLnN0YXJ0LmNvbHVtbixsaW5lOnRoaXMuc291cmNlLnN0YXJ0LmxpbmV9LGk9dGhpcy5zb3VyY2UuZW5kP3tjb2x1bW46dGhpcy5zb3VyY2UuZW5kLmNvbHVtbisxLGxpbmU6dGhpcy5zb3VyY2UuZW5kLmxpbmV9Ontjb2x1bW46dC5jb2x1bW4rMSxsaW5lOnQubGluZX07aWYoZS53b3JkKXtsZXQgcz10aGlzLnNvdXJjZS5pbnB1dC5jc3Muc2xpY2UoV3IodGhpcy5zb3VyY2UuaW5wdXQuY3NzLHRoaXMuc291cmNlLnN0YXJ0KSxXcih0aGlzLnNvdXJjZS5pbnB1dC5jc3MsdGhpcy5zb3VyY2UuZW5kKSkuaW5kZXhPZihlLndvcmQpO3MhPT0tMSYmKHQ9dGhpcy5wb3NpdGlvbkluc2lkZShzKSxpPXRoaXMucG9zaXRpb25JbnNpZGUocytlLndvcmQubGVuZ3RoKSl9ZWxzZSBlLnN0YXJ0P3Q9e2NvbHVtbjplLnN0YXJ0LmNvbHVtbixsaW5lOmUuc3RhcnQubGluZX06ZS5pbmRleCYmKHQ9dGhpcy5wb3NpdGlvbkluc2lkZShlLmluZGV4KSksZS5lbmQ/aT17Y29sdW1uOmUuZW5kLmNvbHVtbixsaW5lOmUuZW5kLmxpbmV9OnR5cGVvZiBlLmVuZEluZGV4PT0ibnVtYmVyIj9pPXRoaXMucG9zaXRpb25JbnNpZGUoZS5lbmRJbmRleCk6ZS5pbmRleCYmKGk9dGhpcy5wb3NpdGlvbkluc2lkZShlLmluZGV4KzEpKTtyZXR1cm4oaS5saW5lPHQubGluZXx8aS5saW5lPT09dC5saW5lJiZpLmNvbHVtbjw9dC5jb2x1bW4pJiYoaT17Y29sdW1uOnQuY29sdW1uKzEsbGluZTp0LmxpbmV9KSx7ZW5kOmksc3RhcnQ6dH19cmF3KGUsdCl7cmV0dXJuIG5ldyBTeCgpLnJhdyh0aGlzLGUsdCl9cmVtb3ZlKCl7cmV0dXJuIHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKSx0aGlzLnBhcmVudD12b2lkIDAsdGhpc31yZXBsYWNlV2l0aCguLi5lKXtpZih0aGlzLnBhcmVudCl7bGV0IHQ9dGhpcyxpPSExO2ZvcihsZXQgbiBvZiBlKW49PT10aGlzP2k9ITA6aT8odGhpcy5wYXJlbnQuaW5zZXJ0QWZ0ZXIodCxuKSx0PW4pOnRoaXMucGFyZW50Lmluc2VydEJlZm9yZSh0LG4pO2l8fHRoaXMucmVtb3ZlKCl9cmV0dXJuIHRoaXN9cm9vdCgpe2xldCBlPXRoaXM7Zm9yKDtlLnBhcmVudCYmZS5wYXJlbnQudHlwZSE9PSJkb2N1bWVudCI7KWU9ZS5wYXJlbnQ7cmV0dXJuIGV9dG9KU09OKGUsdCl7bGV0IGk9e30sbj10PT1udWxsO3Q9dHx8bmV3IE1hcDtsZXQgcz0wO2ZvcihsZXQgYSBpbiB0aGlzKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsYSl8fGE9PT0icGFyZW50Inx8YT09PSJwcm94eUNhY2hlIiljb250aW51ZTtsZXQgbz10aGlzW2FdO2lmKEFycmF5LmlzQXJyYXkobykpaVthXT1vLm1hcChsPT50eXBlb2YgbD09Im9iamVjdCImJmwudG9KU09OP2wudG9KU09OKG51bGwsdCk6bCk7ZWxzZSBpZih0eXBlb2Ygbz09Im9iamVjdCImJm8udG9KU09OKWlbYV09by50b0pTT04obnVsbCx0KTtlbHNlIGlmKGE9PT0ic291cmNlIil7bGV0IGw9dC5nZXQoby5pbnB1dCk7bD09bnVsbCYmKGw9cyx0LnNldChvLmlucHV0LHMpLHMrKyksaVthXT17ZW5kOm8uZW5kLGlucHV0SWQ6bCxzdGFydDpvLnN0YXJ0fX1lbHNlIGlbYV09b31yZXR1cm4gbiYmKGkuaW5wdXRzPVsuLi50LmtleXMoKV0ubWFwKGE9PmEudG9KU09OKCkpKSxpfXRvUHJveHkoKXtyZXR1cm4gdGhpcy5wcm94eUNhY2hlfHwodGhpcy5wcm94eUNhY2hlPW5ldyBQcm94eSh0aGlzLHRoaXMuZ2V0UHJveHlQcm9jZXNzb3IoKSkpLHRoaXMucHJveHlDYWNoZX10b1N0cmluZyhlPUF4KXtlLnN0cmluZ2lmeSYmKGU9ZS5zdHJpbmdpZnkpO2xldCB0PSIiO3JldHVybiBlKHRoaXMsaT0+e3QrPWl9KSx0fXdhcm4oZSx0LGkpe2xldCBuPXtub2RlOnRoaXN9O2ZvcihsZXQgcyBpbiBpKW5bc109aVtzXTtyZXR1cm4gZS53YXJuKHQsbil9Z2V0IHByb3h5T2YoKXtyZXR1cm4gdGhpc319O21jLmV4cG9ydHM9dW47dW4uZGVmYXVsdD11bn0pO3ZhciBRcj14KChDMyxnYyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBfeD1HcigpLGZuPWNsYXNzIGV4dGVuZHMgX3h7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy50eXBlPSJjb21tZW50In19O2djLmV4cG9ydHM9Zm47Zm4uZGVmYXVsdD1mbn0pO3ZhciBZcj14KChfMyx5Yyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBFeD1HcigpLGNuPWNsYXNzIGV4dGVuZHMgRXh7Y29uc3RydWN0b3IoZSl7ZSYmdHlwZW9mIGUudmFsdWUhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgZS52YWx1ZSE9InN0cmluZyImJihlPXsuLi5lLHZhbHVlOlN0cmluZyhlLnZhbHVlKX0pO3N1cGVyKGUpO3RoaXMudHlwZT0iZGVjbCJ9Z2V0IHZhcmlhYmxlKCl7cmV0dXJuIHRoaXMucHJvcC5zdGFydHNXaXRoKCItLSIpfHx0aGlzLnByb3BbMF09PT0iJCJ9fTt5Yy5leHBvcnRzPWNuO2NuLmRlZmF1bHQ9Y259KTt2YXIgRXQ9eCgoRTMsX2MpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgYmM9UXIoKSx3Yz1ZcigpLE94PUdyKCkse2lzQ2xlYW46dmMsbXk6eGN9PWxuKCksaGEsa2MsU2MsbWE7ZnVuY3Rpb24gQWMocil7cmV0dXJuIHIubWFwKGU9PihlLm5vZGVzJiYoZS5ub2Rlcz1BYyhlLm5vZGVzKSksZGVsZXRlIGUuc291cmNlLGUpKX1mdW5jdGlvbiBDYyhyKXtpZihyW3ZjXT0hMSxyLnByb3h5T2Yubm9kZXMpZm9yKGxldCBlIG9mIHIucHJveHlPZi5ub2RlcylDYyhlKX12YXIgRmU9Y2xhc3MgZXh0ZW5kcyBPeHthcHBlbmQoLi4uZSl7Zm9yKGxldCB0IG9mIGUpe2xldCBpPXRoaXMubm9ybWFsaXplKHQsdGhpcy5sYXN0KTtmb3IobGV0IG4gb2YgaSl0aGlzLnByb3h5T2Yubm9kZXMucHVzaChuKX1yZXR1cm4gdGhpcy5tYXJrRGlydHkoKSx0aGlzfWNsZWFuUmF3cyhlKXtpZihzdXBlci5jbGVhblJhd3MoZSksdGhpcy5ub2Rlcylmb3IobGV0IHQgb2YgdGhpcy5ub2Rlcyl0LmNsZWFuUmF3cyhlKX1lYWNoKGUpe2lmKCF0aGlzLnByb3h5T2Yubm9kZXMpcmV0dXJuO2xldCB0PXRoaXMuZ2V0SXRlcmF0b3IoKSxpLG47Zm9yKDt0aGlzLmluZGV4ZXNbdF08dGhpcy5wcm94eU9mLm5vZGVzLmxlbmd0aCYmKGk9dGhpcy5pbmRleGVzW3RdLG49ZSh0aGlzLnByb3h5T2Yubm9kZXNbaV0saSksbiE9PSExKTspdGhpcy5pbmRleGVzW3RdKz0xO3JldHVybiBkZWxldGUgdGhpcy5pbmRleGVzW3RdLG59ZXZlcnkoZSl7cmV0dXJuIHRoaXMubm9kZXMuZXZlcnkoZSl9Z2V0SXRlcmF0b3IoKXt0aGlzLmxhc3RFYWNofHwodGhpcy5sYXN0RWFjaD0wKSx0aGlzLmluZGV4ZXN8fCh0aGlzLmluZGV4ZXM9e30pLHRoaXMubGFzdEVhY2grPTE7bGV0IGU9dGhpcy5sYXN0RWFjaDtyZXR1cm4gdGhpcy5pbmRleGVzW2VdPTAsZX1nZXRQcm94eVByb2Nlc3Nvcigpe3JldHVybntnZXQoZSx0KXtyZXR1cm4gdD09PSJwcm94eU9mIj9lOmVbdF0/dD09PSJlYWNoInx8dHlwZW9mIHQ9PSJzdHJpbmciJiZ0LnN0YXJ0c1dpdGgoIndhbGsiKT8oLi4uaSk9PmVbdF0oLi4uaS5tYXAobj0+dHlwZW9mIG49PSJmdW5jdGlvbiI/KHMsYSk9Pm4ocy50b1Byb3h5KCksYSk6bikpOnQ9PT0iZXZlcnkifHx0PT09InNvbWUiP2k9PmVbdF0oKG4sLi4ucyk9Pmkobi50b1Byb3h5KCksLi4ucykpOnQ9PT0icm9vdCI/KCk9PmUucm9vdCgpLnRvUHJveHkoKTp0PT09Im5vZGVzIj9lLm5vZGVzLm1hcChpPT5pLnRvUHJveHkoKSk6dD09PSJmaXJzdCJ8fHQ9PT0ibGFzdCI/ZVt0XS50b1Byb3h5KCk6ZVt0XTplW3RdfSxzZXQoZSx0LGkpe3JldHVybiBlW3RdPT09aXx8KGVbdF09aSwodD09PSJuYW1lInx8dD09PSJwYXJhbXMifHx0PT09InNlbGVjdG9yIikmJmUubWFya0RpcnR5KCkpLCEwfX19aW5kZXgoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIj9lOihlLnByb3h5T2YmJihlPWUucHJveHlPZiksdGhpcy5wcm94eU9mLm5vZGVzLmluZGV4T2YoZSkpfWluc2VydEFmdGVyKGUsdCl7bGV0IGk9dGhpcy5pbmRleChlKSxuPXRoaXMubm9ybWFsaXplKHQsdGhpcy5wcm94eU9mLm5vZGVzW2ldKS5yZXZlcnNlKCk7aT10aGlzLmluZGV4KGUpO2ZvcihsZXQgYSBvZiBuKXRoaXMucHJveHlPZi5ub2Rlcy5zcGxpY2UoaSsxLDAsYSk7bGV0IHM7Zm9yKGxldCBhIGluIHRoaXMuaW5kZXhlcylzPXRoaXMuaW5kZXhlc1thXSxpPHMmJih0aGlzLmluZGV4ZXNbYV09cytuLmxlbmd0aCk7cmV0dXJuIHRoaXMubWFya0RpcnR5KCksdGhpc31pbnNlcnRCZWZvcmUoZSx0KXtsZXQgaT10aGlzLmluZGV4KGUpLG49aT09PTA/InByZXBlbmQiOiExLHM9dGhpcy5ub3JtYWxpemUodCx0aGlzLnByb3h5T2Yubm9kZXNbaV0sbikucmV2ZXJzZSgpO2k9dGhpcy5pbmRleChlKTtmb3IobGV0IG8gb2Ygcyl0aGlzLnByb3h5T2Yubm9kZXMuc3BsaWNlKGksMCxvKTtsZXQgYTtmb3IobGV0IG8gaW4gdGhpcy5pbmRleGVzKWE9dGhpcy5pbmRleGVzW29dLGk8PWEmJih0aGlzLmluZGV4ZXNbb109YStzLmxlbmd0aCk7cmV0dXJuIHRoaXMubWFya0RpcnR5KCksdGhpc31ub3JtYWxpemUoZSx0KXtpZih0eXBlb2YgZT09InN0cmluZyIpZT1BYyhrYyhlKS5ub2Rlcyk7ZWxzZSBpZih0eXBlb2YgZT09InVuZGVmaW5lZCIpZT1bXTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2U9ZS5zbGljZSgwKTtmb3IobGV0IG4gb2YgZSluLnBhcmVudCYmbi5wYXJlbnQucmVtb3ZlQ2hpbGQobiwiaWdub3JlIil9ZWxzZSBpZihlLnR5cGU9PT0icm9vdCImJnRoaXMudHlwZSE9PSJkb2N1bWVudCIpe2U9ZS5ub2Rlcy5zbGljZSgwKTtmb3IobGV0IG4gb2YgZSluLnBhcmVudCYmbi5wYXJlbnQucmVtb3ZlQ2hpbGQobiwiaWdub3JlIil9ZWxzZSBpZihlLnR5cGUpZT1bZV07ZWxzZSBpZihlLnByb3Ape2lmKHR5cGVvZiBlLnZhbHVlPT0idW5kZWZpbmVkIil0aHJvdyBuZXcgRXJyb3IoIlZhbHVlIGZpZWxkIGlzIG1pc3NlZCBpbiBub2RlIGNyZWF0aW9uIik7dHlwZW9mIGUudmFsdWUhPSJzdHJpbmciJiYoZS52YWx1ZT1TdHJpbmcoZS52YWx1ZSkpLGU9W25ldyB3YyhlKV19ZWxzZSBpZihlLnNlbGVjdG9yfHxlLnNlbGVjdG9ycyllPVtuZXcgbWEoZSldO2Vsc2UgaWYoZS5uYW1lKWU9W25ldyBoYShlKV07ZWxzZSBpZihlLnRleHQpZT1bbmV3IGJjKGUpXTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBub2RlIHR5cGUgaW4gbm9kZSBjcmVhdGlvbiIpO3JldHVybiBlLm1hcChuPT4oblt4Y118fEZlLnJlYnVpbGQobiksbj1uLnByb3h5T2Ysbi5wYXJlbnQmJm4ucGFyZW50LnJlbW92ZUNoaWxkKG4pLG5bdmNdJiZDYyhuKSxuLnJhd3N8fChuLnJhd3M9e30pLHR5cGVvZiBuLnJhd3MuYmVmb3JlPT0idW5kZWZpbmVkIiYmdCYmdHlwZW9mIHQucmF3cy5iZWZvcmUhPSJ1bmRlZmluZWQiJiYobi5yYXdzLmJlZm9yZT10LnJhd3MuYmVmb3JlLnJlcGxhY2UoL1xTL2csIiIpKSxuLnBhcmVudD10aGlzLnByb3h5T2YsbikpfXByZXBlbmQoLi4uZSl7ZT1lLnJldmVyc2UoKTtmb3IobGV0IHQgb2YgZSl7bGV0IGk9dGhpcy5ub3JtYWxpemUodCx0aGlzLmZpcnN0LCJwcmVwZW5kIikucmV2ZXJzZSgpO2ZvcihsZXQgbiBvZiBpKXRoaXMucHJveHlPZi5ub2Rlcy51bnNoaWZ0KG4pO2ZvcihsZXQgbiBpbiB0aGlzLmluZGV4ZXMpdGhpcy5pbmRleGVzW25dPXRoaXMuaW5kZXhlc1tuXStpLmxlbmd0aH1yZXR1cm4gdGhpcy5tYXJrRGlydHkoKSx0aGlzfXB1c2goZSl7cmV0dXJuIGUucGFyZW50PXRoaXMsdGhpcy5wcm94eU9mLm5vZGVzLnB1c2goZSksdGhpc31yZW1vdmVBbGwoKXtmb3IobGV0IGUgb2YgdGhpcy5wcm94eU9mLm5vZGVzKWUucGFyZW50PXZvaWQgMDtyZXR1cm4gdGhpcy5wcm94eU9mLm5vZGVzPVtdLHRoaXMubWFya0RpcnR5KCksdGhpc31yZW1vdmVDaGlsZChlKXtlPXRoaXMuaW5kZXgoZSksdGhpcy5wcm94eU9mLm5vZGVzW2VdLnBhcmVudD12b2lkIDAsdGhpcy5wcm94eU9mLm5vZGVzLnNwbGljZShlLDEpO2xldCB0O2ZvcihsZXQgaSBpbiB0aGlzLmluZGV4ZXMpdD10aGlzLmluZGV4ZXNbaV0sdD49ZSYmKHRoaXMuaW5kZXhlc1tpXT10LTEpO3JldHVybiB0aGlzLm1hcmtEaXJ0eSgpLHRoaXN9cmVwbGFjZVZhbHVlcyhlLHQsaSl7cmV0dXJuIGl8fChpPXQsdD17fSksdGhpcy53YWxrRGVjbHMobj0+e3QucHJvcHMmJiF0LnByb3BzLmluY2x1ZGVzKG4ucHJvcCl8fHQuZmFzdCYmIW4udmFsdWUuaW5jbHVkZXModC5mYXN0KXx8KG4udmFsdWU9bi52YWx1ZS5yZXBsYWNlKGUsaSkpfSksdGhpcy5tYXJrRGlydHkoKSx0aGlzfXNvbWUoZSl7cmV0dXJuIHRoaXMubm9kZXMuc29tZShlKX13YWxrKGUpe3JldHVybiB0aGlzLmVhY2goKHQsaSk9PntsZXQgbjt0cnl7bj1lKHQsaSl9Y2F0Y2gocyl7dGhyb3cgdC5hZGRUb0Vycm9yKHMpfXJldHVybiBuIT09ITEmJnQud2FsayYmKG49dC53YWxrKGUpKSxufSl9d2Fsa0F0UnVsZXMoZSx0KXtyZXR1cm4gdD9lIGluc3RhbmNlb2YgUmVnRXhwP3RoaXMud2FsaygoaSxuKT0+e2lmKGkudHlwZT09PSJhdHJ1bGUiJiZlLnRlc3QoaS5uYW1lKSlyZXR1cm4gdChpLG4pfSk6dGhpcy53YWxrKChpLG4pPT57aWYoaS50eXBlPT09ImF0cnVsZSImJmkubmFtZT09PWUpcmV0dXJuIHQoaSxuKX0pOih0PWUsdGhpcy53YWxrKChpLG4pPT57aWYoaS50eXBlPT09ImF0cnVsZSIpcmV0dXJuIHQoaSxuKX0pKX13YWxrQ29tbWVudHMoZSl7cmV0dXJuIHRoaXMud2FsaygodCxpKT0+e2lmKHQudHlwZT09PSJjb21tZW50IilyZXR1cm4gZSh0LGkpfSl9d2Fsa0RlY2xzKGUsdCl7cmV0dXJuIHQ/ZSBpbnN0YW5jZW9mIFJlZ0V4cD90aGlzLndhbGsoKGksbik9PntpZihpLnR5cGU9PT0iZGVjbCImJmUudGVzdChpLnByb3ApKXJldHVybiB0KGksbil9KTp0aGlzLndhbGsoKGksbik9PntpZihpLnR5cGU9PT0iZGVjbCImJmkucHJvcD09PWUpcmV0dXJuIHQoaSxuKX0pOih0PWUsdGhpcy53YWxrKChpLG4pPT57aWYoaS50eXBlPT09ImRlY2wiKXJldHVybiB0KGksbil9KSl9d2Fsa1J1bGVzKGUsdCl7cmV0dXJuIHQ/ZSBpbnN0YW5jZW9mIFJlZ0V4cD90aGlzLndhbGsoKGksbik9PntpZihpLnR5cGU9PT0icnVsZSImJmUudGVzdChpLnNlbGVjdG9yKSlyZXR1cm4gdChpLG4pfSk6dGhpcy53YWxrKChpLG4pPT57aWYoaS50eXBlPT09InJ1bGUiJiZpLnNlbGVjdG9yPT09ZSlyZXR1cm4gdChpLG4pfSk6KHQ9ZSx0aGlzLndhbGsoKGksbik9PntpZihpLnR5cGU9PT0icnVsZSIpcmV0dXJuIHQoaSxuKX0pKX1nZXQgZmlyc3QoKXtpZighIXRoaXMucHJveHlPZi5ub2RlcylyZXR1cm4gdGhpcy5wcm94eU9mLm5vZGVzWzBdfWdldCBsYXN0KCl7aWYoISF0aGlzLnByb3h5T2Yubm9kZXMpcmV0dXJuIHRoaXMucHJveHlPZi5ub2Rlc1t0aGlzLnByb3h5T2Yubm9kZXMubGVuZ3RoLTFdfX07RmUucmVnaXN0ZXJQYXJzZT1yPT57a2M9cn07RmUucmVnaXN0ZXJSdWxlPXI9PnttYT1yfTtGZS5yZWdpc3RlckF0UnVsZT1yPT57aGE9cn07RmUucmVnaXN0ZXJSb290PXI9PntTYz1yfTtfYy5leHBvcnRzPUZlO0ZlLmRlZmF1bHQ9RmU7RmUucmVidWlsZD1yPT57ci50eXBlPT09ImF0cnVsZSI/T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsaGEucHJvdG90eXBlKTpyLnR5cGU9PT0icnVsZSI/T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsbWEucHJvdG90eXBlKTpyLnR5cGU9PT0iZGVjbCI/T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsd2MucHJvdG90eXBlKTpyLnR5cGU9PT0iY29tbWVudCI/T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsYmMucHJvdG90eXBlKTpyLnR5cGU9PT0icm9vdCImJk9iamVjdC5zZXRQcm90b3R5cGVPZihyLFNjLnByb3RvdHlwZSksclt4Y109ITAsci5ub2RlcyYmci5ub2Rlcy5mb3JFYWNoKGU9PntGZS5yZWJ1aWxkKGUpfSl9fSk7dmFyIHBuPXgoKE8zLE9jKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIEVjPUV0KCksS3I9Y2xhc3MgZXh0ZW5kcyBFY3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnR5cGU9ImF0cnVsZSJ9YXBwZW5kKC4uLmUpe3JldHVybiB0aGlzLnByb3h5T2Yubm9kZXN8fCh0aGlzLm5vZGVzPVtdKSxzdXBlci5hcHBlbmQoLi4uZSl9cHJlcGVuZCguLi5lKXtyZXR1cm4gdGhpcy5wcm94eU9mLm5vZGVzfHwodGhpcy5ub2Rlcz1bXSksc3VwZXIucHJlcGVuZCguLi5lKX19O09jLmV4cG9ydHM9S3I7S3IuZGVmYXVsdD1LcjtFYy5yZWdpc3RlckF0UnVsZShLcil9KTt2YXIgZG49eCgoVDMsUGMpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgVHg9RXQoKSxUYyxSYyxlcj1jbGFzcyBleHRlbmRzIFR4e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHt0eXBlOiJkb2N1bWVudCIsLi4uZX0pO3RoaXMubm9kZXN8fCh0aGlzLm5vZGVzPVtdKX10b1Jlc3VsdChlPXt9KXtyZXR1cm4gbmV3IFRjKG5ldyBSYyx0aGlzLGUpLnN0cmluZ2lmeSgpfX07ZXIucmVnaXN0ZXJMYXp5UmVzdWx0PXI9PntUYz1yfTtlci5yZWdpc3RlclByb2Nlc3Nvcj1yPT57UmM9cn07UGMuZXhwb3J0cz1lcjtlci5kZWZhdWx0PWVyfSk7dmFyIERjPXgoKFIzLEljKT0+e3UoKTt2YXIgUng9InVzZWFuZG9tLTI2VDE5ODM0MFBYNzVweEpBQ0tWRVJZTUlOREJVU0hXT0xGX0dRWmJmZ2hqa2xxdnd5enJpY3QiLFB4PShyLGU9MjEpPT4odD1lKT0+e2xldCBpPSIiLG49dDtmb3IoO24tLTspaSs9cltNYXRoLnJhbmRvbSgpKnIubGVuZ3RofDBdO3JldHVybiBpfSxJeD0ocj0yMSk9PntsZXQgZT0iIix0PXI7Zm9yKDt0LS07KWUrPVJ4W01hdGgucmFuZG9tKCkqNjR8MF07cmV0dXJuIGV9O0ljLmV4cG9ydHM9e25hbm9pZDpJeCxjdXN0b21BbHBoYWJldDpQeH19KTt2YXIgcWM9eCgoKT0+e3UoKX0pO3ZhciBnYT14KChEMywkYyk9Pnt1KCk7JGMuZXhwb3J0cz17fX0pO3ZhciBtbj14KChxMyxCYyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhcntuYW5vaWQ6RHh9PURjKCkse2lzQWJzb2x1dGU6eWEscmVzb2x2ZTpiYX09KGV0KCksVXIpLHtTb3VyY2VNYXBDb25zdW1lcjpxeCxTb3VyY2VNYXBHZW5lcmF0b3I6JHh9PXFjKCkse2ZpbGVVUkxUb1BhdGg6TGMscGF0aFRvRmlsZVVSTDpobn09KGxhKCksbGMpLE1jPWFuKCksTHg9Z2EoKSx3YT11YSgpLHZhPVN5bWJvbCgiZnJvbU9mZnNldENhY2hlIiksTXg9Qm9vbGVhbihxeCYmJHgpLE5jPUJvb2xlYW4oYmEmJnlhKSxYcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9e30pe2lmKGU9PT1udWxsfHx0eXBlb2YgZT09InVuZGVmaW5lZCJ8fHR5cGVvZiBlPT0ib2JqZWN0IiYmIWUudG9TdHJpbmcpdGhyb3cgbmV3IEVycm9yKGBQb3N0Q1NTIHJlY2VpdmVkICR7ZX0gaW5zdGVhZCBvZiBDU1Mgc3RyaW5nYCk7aWYodGhpcy5jc3M9ZS50b1N0cmluZygpLHRoaXMuY3NzWzBdPT09Ilx1RkVGRiJ8fHRoaXMuY3NzWzBdPT09Ilx1RkZGRSI/KHRoaXMuaGFzQk9NPSEwLHRoaXMuY3NzPXRoaXMuY3NzLnNsaWNlKDEpKTp0aGlzLmhhc0JPTT0hMSx0LmZyb20mJighTmN8fC9eXHcrOlwvXC8vLnRlc3QodC5mcm9tKXx8eWEodC5mcm9tKT90aGlzLmZpbGU9dC5mcm9tOnRoaXMuZmlsZT1iYSh0LmZyb20pKSxOYyYmTXgpe2xldCBpPW5ldyBMeCh0aGlzLmNzcyx0KTtpZihpLnRleHQpe3RoaXMubWFwPWk7bGV0IG49aS5jb25zdW1lcigpLmZpbGU7IXRoaXMuZmlsZSYmbiYmKHRoaXMuZmlsZT10aGlzLm1hcFJlc29sdmUobikpfX10aGlzLmZpbGV8fCh0aGlzLmlkPSI8aW5wdXQgY3NzICIrRHgoNikrIj4iKSx0aGlzLm1hcCYmKHRoaXMubWFwLmZpbGU9dGhpcy5mcm9tKX1lcnJvcihlLHQsaSxuPXt9KXtsZXQgcyxhLG87aWYodCYmdHlwZW9mIHQ9PSJvYmplY3QiKXtsZXQgYz10LGY9aTtpZih0eXBlb2YgYy5vZmZzZXQ9PSJudW1iZXIiKXtsZXQgZD10aGlzLmZyb21PZmZzZXQoYy5vZmZzZXQpO3Q9ZC5saW5lLGk9ZC5jb2x9ZWxzZSB0PWMubGluZSxpPWMuY29sdW1uO2lmKHR5cGVvZiBmLm9mZnNldD09Im51bWJlciIpe2xldCBkPXRoaXMuZnJvbU9mZnNldChmLm9mZnNldCk7YT1kLmxpbmUscz1kLmNvbH1lbHNlIGE9Zi5saW5lLHM9Zi5jb2x1bW59ZWxzZSBpZighaSl7bGV0IGM9dGhpcy5mcm9tT2Zmc2V0KHQpO3Q9Yy5saW5lLGk9Yy5jb2x9bGV0IGw9dGhpcy5vcmlnaW4odCxpLGEscyk7cmV0dXJuIGw/bz1uZXcgTWMoZSxsLmVuZExpbmU9PT12b2lkIDA/bC5saW5lOntjb2x1bW46bC5jb2x1bW4sbGluZTpsLmxpbmV9LGwuZW5kTGluZT09PXZvaWQgMD9sLmNvbHVtbjp7Y29sdW1uOmwuZW5kQ29sdW1uLGxpbmU6bC5lbmRMaW5lfSxsLnNvdXJjZSxsLmZpbGUsbi5wbHVnaW4pOm89bmV3IE1jKGUsYT09PXZvaWQgMD90Ontjb2x1bW46aSxsaW5lOnR9LGE9PT12b2lkIDA/aTp7Y29sdW1uOnMsbGluZTphfSx0aGlzLmNzcyx0aGlzLmZpbGUsbi5wbHVnaW4pLG8uaW5wdXQ9e2NvbHVtbjppLGVuZENvbHVtbjpzLGVuZExpbmU6YSxsaW5lOnQsc291cmNlOnRoaXMuY3NzfSx0aGlzLmZpbGUmJihobiYmKG8uaW5wdXQudXJsPWhuKHRoaXMuZmlsZSkudG9TdHJpbmcoKSksby5pbnB1dC5maWxlPXRoaXMuZmlsZSksb31mcm9tT2Zmc2V0KGUpe2xldCB0LGk7aWYodGhpc1t2YV0paT10aGlzW3ZhXTtlbHNle2xldCBzPXRoaXMuY3NzLnNwbGl0KGAKYCk7aT1uZXcgQXJyYXkocy5sZW5ndGgpO2xldCBhPTA7Zm9yKGxldCBvPTAsbD1zLmxlbmd0aDtvPGw7bysrKWlbb109YSxhKz1zW29dLmxlbmd0aCsxO3RoaXNbdmFdPWl9dD1pW2kubGVuZ3RoLTFdO2xldCBuPTA7aWYoZT49dCluPWkubGVuZ3RoLTE7ZWxzZXtsZXQgcz1pLmxlbmd0aC0yLGE7Zm9yKDtuPHM7KWlmKGE9bisocy1uPj4xKSxlPGlbYV0pcz1hLTE7ZWxzZSBpZihlPj1pW2ErMV0pbj1hKzE7ZWxzZXtuPWE7YnJlYWt9fXJldHVybntjb2w6ZS1pW25dKzEsbGluZTpuKzF9fW1hcFJlc29sdmUoZSl7cmV0dXJuL15cdys6XC9cLy8udGVzdChlKT9lOmJhKHRoaXMubWFwLmNvbnN1bWVyKCkuc291cmNlUm9vdHx8dGhpcy5tYXAucm9vdHx8Ii4iLGUpfW9yaWdpbihlLHQsaSxuKXtpZighdGhpcy5tYXApcmV0dXJuITE7bGV0IHM9dGhpcy5tYXAuY29uc3VtZXIoKSxhPXMub3JpZ2luYWxQb3NpdGlvbkZvcih7Y29sdW1uOnQsbGluZTplfSk7aWYoIWEuc291cmNlKXJldHVybiExO2xldCBvO3R5cGVvZiBpPT0ibnVtYmVyIiYmKG89cy5vcmlnaW5hbFBvc2l0aW9uRm9yKHtjb2x1bW46bixsaW5lOml9KSk7bGV0IGw7eWEoYS5zb3VyY2UpP2w9aG4oYS5zb3VyY2UpOmw9bmV3IFVSTChhLnNvdXJjZSx0aGlzLm1hcC5jb25zdW1lcigpLnNvdXJjZVJvb3R8fGhuKHRoaXMubWFwLm1hcEZpbGUpKTtsZXQgYz17Y29sdW1uOmEuY29sdW1uLGVuZENvbHVtbjpvJiZvLmNvbHVtbixlbmRMaW5lOm8mJm8ubGluZSxsaW5lOmEubGluZSx1cmw6bC50b1N0cmluZygpfTtpZihsLnByb3RvY29sPT09ImZpbGU6IilpZihMYyljLmZpbGU9TGMobCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImZpbGU6IHByb3RvY29sIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBQb3N0Q1NTIGJ1aWxkIik7bGV0IGY9cy5zb3VyY2VDb250ZW50Rm9yKGEuc291cmNlKTtyZXR1cm4gZiYmKGMuc291cmNlPWYpLGN9dG9KU09OKCl7bGV0IGU9e307Zm9yKGxldCB0IG9mWyJoYXNCT00iLCJjc3MiLCJmaWxlIiwiaWQiXSl0aGlzW3RdIT1udWxsJiYoZVt0XT10aGlzW3RdKTtyZXR1cm4gdGhpcy5tYXAmJihlLm1hcD17Li4udGhpcy5tYXB9LGUubWFwLmNvbnN1bWVyQ2FjaGUmJihlLm1hcC5jb25zdW1lckNhY2hlPXZvaWQgMCkpLGV9Z2V0IGZyb20oKXtyZXR1cm4gdGhpcy5maWxlfHx0aGlzLmlkfX07QmMuZXhwb3J0cz1YcjtYci5kZWZhdWx0PVhyO3dhJiZ3YS5yZWdpc3RlcklucHV0JiZ3YS5yZWdpc3RlcklucHV0KFhyKX0pO3ZhciB0cj14KCgkMyxVYyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBGYz1FdCgpLGpjLHpjLFV0PWNsYXNzIGV4dGVuZHMgRmN7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy50eXBlPSJyb290Iix0aGlzLm5vZGVzfHwodGhpcy5ub2Rlcz1bXSl9bm9ybWFsaXplKGUsdCxpKXtsZXQgbj1zdXBlci5ub3JtYWxpemUoZSk7aWYodCl7aWYoaT09PSJwcmVwZW5kIil0aGlzLm5vZGVzLmxlbmd0aD4xP3QucmF3cy5iZWZvcmU9dGhpcy5ub2Rlc1sxXS5yYXdzLmJlZm9yZTpkZWxldGUgdC5yYXdzLmJlZm9yZTtlbHNlIGlmKHRoaXMuZmlyc3QhPT10KWZvcihsZXQgcyBvZiBuKXMucmF3cy5iZWZvcmU9dC5yYXdzLmJlZm9yZX1yZXR1cm4gbn1yZW1vdmVDaGlsZChlLHQpe2xldCBpPXRoaXMuaW5kZXgoZSk7cmV0dXJuIXQmJmk9PT0wJiZ0aGlzLm5vZGVzLmxlbmd0aD4xJiYodGhpcy5ub2Rlc1sxXS5yYXdzLmJlZm9yZT10aGlzLm5vZGVzW2ldLnJhd3MuYmVmb3JlKSxzdXBlci5yZW1vdmVDaGlsZChlKX10b1Jlc3VsdChlPXt9KXtyZXR1cm4gbmV3IGpjKG5ldyB6Yyx0aGlzLGUpLnN0cmluZ2lmeSgpfX07VXQucmVnaXN0ZXJMYXp5UmVzdWx0PXI9PntqYz1yfTtVdC5yZWdpc3RlclByb2Nlc3Nvcj1yPT57emM9cn07VWMuZXhwb3J0cz1VdDtVdC5kZWZhdWx0PVV0O0ZjLnJlZ2lzdGVyUm9vdChVdCl9KTt2YXIgeGE9eCgoTDMsVmMpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgWnI9e2NvbW1hKHIpe3JldHVybiBaci5zcGxpdChyLFsiLCJdLCEwKX0sc3BhY2Uocil7bGV0IGU9WyIgIixgCmAsIgkiXTtyZXR1cm4gWnIuc3BsaXQocixlKX0sc3BsaXQocixlLHQpe2xldCBpPVtdLG49IiIscz0hMSxhPTAsbz0hMSxsPSIiLGM9ITE7Zm9yKGxldCBmIG9mIHIpYz9jPSExOmY9PT0iXFwiP2M9ITA6bz9mPT09bCYmKG89ITEpOmY9PT0nIid8fGY9PT0iJyI/KG89ITAsbD1mKTpmPT09IigiP2ErPTE6Zj09PSIpIj9hPjAmJihhLT0xKTphPT09MCYmZS5pbmNsdWRlcyhmKSYmKHM9ITApLHM/KG4hPT0iIiYmaS5wdXNoKG4udHJpbSgpKSxuPSIiLHM9ITEpOm4rPWY7cmV0dXJuKHR8fG4hPT0iIikmJmkucHVzaChuLnRyaW0oKSksaX19O1ZjLmV4cG9ydHM9WnI7WnIuZGVmYXVsdD1acn0pO3ZhciBnbj14KChNMyxXYyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBIYz1FdCgpLE54PXhhKCksSnI9Y2xhc3MgZXh0ZW5kcyBIY3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnR5cGU9InJ1bGUiLHRoaXMubm9kZXN8fCh0aGlzLm5vZGVzPVtdKX1nZXQgc2VsZWN0b3JzKCl7cmV0dXJuIE54LmNvbW1hKHRoaXMuc2VsZWN0b3IpfXNldCBzZWxlY3RvcnMoZSl7bGV0IHQ9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9yLm1hdGNoKC8sXHMqLyk6bnVsbCxpPXQ/dFswXToiLCIrdGhpcy5yYXcoImJldHdlZW4iLCJiZWZvcmVPcGVuIik7dGhpcy5zZWxlY3Rvcj1lLmpvaW4oaSl9fTtXYy5leHBvcnRzPUpyO0pyLmRlZmF1bHQ9SnI7SGMucmVnaXN0ZXJSdWxlKEpyKX0pO3ZhciBRYz14KChOMyxHYyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBCeD1wbigpLEZ4PVFyKCksang9WXIoKSx6eD1tbigpLFV4PWdhKCksVng9dHIoKSxIeD1nbigpO2Z1bmN0aW9uIGVpKHIsZSl7aWYoQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gci5tYXAobj0+ZWkobikpO2xldHtpbnB1dHM6dCwuLi5pfT1yO2lmKHQpe2U9W107Zm9yKGxldCBuIG9mIHQpe2xldCBzPXsuLi5uLF9fcHJvdG9fXzp6eC5wcm90b3R5cGV9O3MubWFwJiYocy5tYXA9ey4uLnMubWFwLF9fcHJvdG9fXzpVeC5wcm90b3R5cGV9KSxlLnB1c2gocyl9fWlmKGkubm9kZXMmJihpLm5vZGVzPXIubm9kZXMubWFwKG49PmVpKG4sZSkpKSxpLnNvdXJjZSl7bGV0e2lucHV0SWQ6biwuLi5zfT1pLnNvdXJjZTtpLnNvdXJjZT1zLG4hPW51bGwmJihpLnNvdXJjZS5pbnB1dD1lW25dKX1pZihpLnR5cGU9PT0icm9vdCIpcmV0dXJuIG5ldyBWeChpKTtpZihpLnR5cGU9PT0iZGVjbCIpcmV0dXJuIG5ldyBqeChpKTtpZihpLnR5cGU9PT0icnVsZSIpcmV0dXJuIG5ldyBIeChpKTtpZihpLnR5cGU9PT0iY29tbWVudCIpcmV0dXJuIG5ldyBGeChpKTtpZihpLnR5cGU9PT0iYXRydWxlIilyZXR1cm4gbmV3IEJ4KGkpO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBub2RlIHR5cGU6ICIrci50eXBlKX1HYy5leHBvcnRzPWVpO2VpLmRlZmF1bHQ9ZWl9KTt2YXIga2E9eCgoQjMsWWMpPT57dSgpO1ljLmV4cG9ydHM9ZnVuY3Rpb24ocixlKXtyZXR1cm57Z2VuZXJhdGU6KCk9PntsZXQgdD0iIjtyZXR1cm4gcihlLGk9Pnt0Kz1pfSksW3RdfX19fSk7dmFyIGVwPXgoKEYzLEpjKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIFNhPSInIi5jaGFyQ29kZUF0KDApLEtjPSciJy5jaGFyQ29kZUF0KDApLHluPSJcXCIuY2hhckNvZGVBdCgwKSxYYz0iLyIuY2hhckNvZGVBdCgwKSxibj1gCmAuY2hhckNvZGVBdCgwKSx0aT0iICIuY2hhckNvZGVBdCgwKSx3bj0iXGYiLmNoYXJDb2RlQXQoMCksdm49IgkiLmNoYXJDb2RlQXQoMCkseG49IlxyIi5jaGFyQ29kZUF0KDApLFd4PSJbIi5jaGFyQ29kZUF0KDApLEd4PSJdIi5jaGFyQ29kZUF0KDApLFF4PSIoIi5jaGFyQ29kZUF0KDApLFl4PSIpIi5jaGFyQ29kZUF0KDApLEt4PSJ7Ii5jaGFyQ29kZUF0KDApLFh4PSJ9Ii5jaGFyQ29kZUF0KDApLFp4PSI7Ii5jaGFyQ29kZUF0KDApLEp4PSIqIi5jaGFyQ29kZUF0KDApLGUxPSI6Ii5jaGFyQ29kZUF0KDApLHQxPSJAIi5jaGFyQ29kZUF0KDApLGtuPS9bXHRcblxmXHIgIiMnKCkvO1tcXFxde31dL2csU249L1tcdFxuXGZcciAhIiMnKCk6O0BbXFxcXXt9XXxcLyg/PVwqKS9nLHIxPS8uW1xyXG4iJygvXFxdLyxaYz0vW1xkYS1mXS9pO0pjLmV4cG9ydHM9ZnVuY3Rpb24oZSx0PXt9KXtsZXQgaT1lLmNzcy52YWx1ZU9mKCksbj10Lmlnbm9yZUVycm9ycyxzLGEsbyxsLGMsZixkLHAsaCxiLHY9aS5sZW5ndGgseT0wLHc9W10saz1bXTtmdW5jdGlvbiBTKCl7cmV0dXJuIHl9ZnVuY3Rpb24gRShSKXt0aHJvdyBlLmVycm9yKCJVbmNsb3NlZCAiK1IseSl9ZnVuY3Rpb24gVCgpe3JldHVybiBrLmxlbmd0aD09PTAmJnk+PXZ9ZnVuY3Rpb24gQihSKXtpZihrLmxlbmd0aClyZXR1cm4gay5wb3AoKTtpZih5Pj12KXJldHVybjtsZXQgRj1SP1IuaWdub3JlVW5jbG9zZWQ6ITE7c3dpdGNoKHM9aS5jaGFyQ29kZUF0KHkpLHMpe2Nhc2UgYm46Y2FzZSB0aTpjYXNlIHZuOmNhc2UgeG46Y2FzZSB3bjp7bD15O2RvIGwrPTEscz1pLmNoYXJDb2RlQXQobCk7d2hpbGUocz09PXRpfHxzPT09Ym58fHM9PT12bnx8cz09PXhufHxzPT09d24pO2Y9WyJzcGFjZSIsaS5zbGljZSh5LGwpXSx5PWwtMTticmVha31jYXNlIFd4OmNhc2UgR3g6Y2FzZSBLeDpjYXNlIFh4OmNhc2UgZTE6Y2FzZSBaeDpjYXNlIFl4OntsZXQgWT1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpO2Y9W1ksWSx5XTticmVha31jYXNlIFF4OntpZihiPXcubGVuZ3RoP3cucG9wKClbMV06IiIsaD1pLmNoYXJDb2RlQXQoeSsxKSxiPT09InVybCImJmghPT1TYSYmaCE9PUtjJiZoIT09dGkmJmghPT1ibiYmaCE9PXZuJiZoIT09d24mJmghPT14bil7bD15O2Rve2lmKGQ9ITEsbD1pLmluZGV4T2YoIikiLGwrMSksbD09PS0xKWlmKG58fEYpe2w9eTticmVha31lbHNlIEUoImJyYWNrZXQiKTtmb3IocD1sO2kuY2hhckNvZGVBdChwLTEpPT09eW47KXAtPTEsZD0hZH13aGlsZShkKTtmPVsiYnJhY2tldHMiLGkuc2xpY2UoeSxsKzEpLHksbF0seT1sfWVsc2UgbD1pLmluZGV4T2YoIikiLHkrMSksYT1pLnNsaWNlKHksbCsxKSxsPT09LTF8fHIxLnRlc3QoYSk/Zj1bIigiLCIoIix5XTooZj1bImJyYWNrZXRzIixhLHksbF0seT1sKTticmVha31jYXNlIFNhOmNhc2UgS2M6e2M9cz09PVNhPyInIjonIicsbD15O2Rve2lmKGQ9ITEsbD1pLmluZGV4T2YoYyxsKzEpLGw9PT0tMSlpZihufHxGKXtsPXkrMTticmVha31lbHNlIEUoInN0cmluZyIpO2ZvcihwPWw7aS5jaGFyQ29kZUF0KHAtMSk9PT15bjspcC09MSxkPSFkfXdoaWxlKGQpO2Y9WyJzdHJpbmciLGkuc2xpY2UoeSxsKzEpLHksbF0seT1sO2JyZWFrfWNhc2UgdDE6e2tuLmxhc3RJbmRleD15KzEsa24udGVzdChpKSxrbi5sYXN0SW5kZXg9PT0wP2w9aS5sZW5ndGgtMTpsPWtuLmxhc3RJbmRleC0yLGY9WyJhdC13b3JkIixpLnNsaWNlKHksbCsxKSx5LGxdLHk9bDticmVha31jYXNlIHluOntmb3IobD15LG89ITA7aS5jaGFyQ29kZUF0KGwrMSk9PT15bjspbCs9MSxvPSFvO2lmKHM9aS5jaGFyQ29kZUF0KGwrMSksbyYmcyE9PVhjJiZzIT09dGkmJnMhPT1ibiYmcyE9PXZuJiZzIT09eG4mJnMhPT13biYmKGwrPTEsWmMudGVzdChpLmNoYXJBdChsKSkpKXtmb3IoO1pjLnRlc3QoaS5jaGFyQXQobCsxKSk7KWwrPTE7aS5jaGFyQ29kZUF0KGwrMSk9PT10aSYmKGwrPTEpfWY9WyJ3b3JkIixpLnNsaWNlKHksbCsxKSx5LGxdLHk9bDticmVha31kZWZhdWx0OntzPT09WGMmJmkuY2hhckNvZGVBdCh5KzEpPT09Sng/KGw9aS5pbmRleE9mKCIqLyIseSsyKSsxLGw9PT0wJiYobnx8Rj9sPWkubGVuZ3RoOkUoImNvbW1lbnQiKSksZj1bImNvbW1lbnQiLGkuc2xpY2UoeSxsKzEpLHksbF0seT1sKTooU24ubGFzdEluZGV4PXkrMSxTbi50ZXN0KGkpLFNuLmxhc3RJbmRleD09PTA/bD1pLmxlbmd0aC0xOmw9U24ubGFzdEluZGV4LTIsZj1bIndvcmQiLGkuc2xpY2UoeSxsKzEpLHksbF0sdy5wdXNoKGYpLHk9bCk7YnJlYWt9fXJldHVybiB5KyssZn1mdW5jdGlvbiBOKFIpe2sucHVzaChSKX1yZXR1cm57YmFjazpOLGVuZE9mRmlsZTpULG5leHRUb2tlbjpCLHBvc2l0aW9uOlN9fX0pO3ZhciBzcD14KChqMyxucCk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBpMT1wbigpLG4xPVFyKCksczE9WXIoKSxhMT10cigpLHRwPWduKCksbzE9ZXAoKSxycD17ZW1wdHk6ITAsc3BhY2U6ITB9O2Z1bmN0aW9uIGwxKHIpe2ZvcihsZXQgZT1yLmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgdD1yW2VdLGk9dFszXXx8dFsyXTtpZihpKXJldHVybiBpfX12YXIgaXA9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5pbnB1dD1lLHRoaXMucm9vdD1uZXcgYTEsdGhpcy5jdXJyZW50PXRoaXMucm9vdCx0aGlzLnNwYWNlcz0iIix0aGlzLnNlbWljb2xvbj0hMSx0aGlzLmNyZWF0ZVRva2VuaXplcigpLHRoaXMucm9vdC5zb3VyY2U9e2lucHV0OmUsc3RhcnQ6e2NvbHVtbjoxLGxpbmU6MSxvZmZzZXQ6MH19fWF0cnVsZShlKXtsZXQgdD1uZXcgaTE7dC5uYW1lPWVbMV0uc2xpY2UoMSksdC5uYW1lPT09IiImJnRoaXMudW5uYW1lZEF0cnVsZSh0LGUpLHRoaXMuaW5pdCh0LGVbMl0pO2xldCBpLG4scyxhPSExLG89ITEsbD1bXSxjPVtdO2Zvcig7IXRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpOyl7aWYoZT10aGlzLnRva2VuaXplci5uZXh0VG9rZW4oKSxpPWVbMF0saT09PSIoInx8aT09PSJbIj9jLnB1c2goaT09PSIoIj8iKSI6Il0iKTppPT09InsiJiZjLmxlbmd0aD4wP2MucHVzaCgifSIpOmk9PT1jW2MubGVuZ3RoLTFdJiZjLnBvcCgpLGMubGVuZ3RoPT09MClpZihpPT09IjsiKXt0LnNvdXJjZS5lbmQ9dGhpcy5nZXRQb3NpdGlvbihlWzJdKSx0LnNvdXJjZS5lbmQub2Zmc2V0KyssdGhpcy5zZW1pY29sb249ITA7YnJlYWt9ZWxzZSBpZihpPT09InsiKXtvPSEwO2JyZWFrfWVsc2UgaWYoaT09PSJ9Iil7aWYobC5sZW5ndGg+MCl7Zm9yKHM9bC5sZW5ndGgtMSxuPWxbc107biYmblswXT09PSJzcGFjZSI7KW49bFstLXNdO24mJih0LnNvdXJjZS5lbmQ9dGhpcy5nZXRQb3NpdGlvbihuWzNdfHxuWzJdKSx0LnNvdXJjZS5lbmQub2Zmc2V0KyspfXRoaXMuZW5kKGUpO2JyZWFrfWVsc2UgbC5wdXNoKGUpO2Vsc2UgbC5wdXNoKGUpO2lmKHRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpKXthPSEwO2JyZWFrfX10LnJhd3MuYmV0d2Vlbj10aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZChsKSxsLmxlbmd0aD8odC5yYXdzLmFmdGVyTmFtZT10aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0KGwpLHRoaXMucmF3KHQsInBhcmFtcyIsbCksYSYmKGU9bFtsLmxlbmd0aC0xXSx0LnNvdXJjZS5lbmQ9dGhpcy5nZXRQb3NpdGlvbihlWzNdfHxlWzJdKSx0LnNvdXJjZS5lbmQub2Zmc2V0KyssdGhpcy5zcGFjZXM9dC5yYXdzLmJldHdlZW4sdC5yYXdzLmJldHdlZW49IiIpKToodC5yYXdzLmFmdGVyTmFtZT0iIix0LnBhcmFtcz0iIiksbyYmKHQubm9kZXM9W10sdGhpcy5jdXJyZW50PXQpfWNoZWNrTWlzc2VkU2VtaWNvbG9uKGUpe2xldCB0PXRoaXMuY29sb24oZSk7aWYodD09PSExKXJldHVybjtsZXQgaT0wLG47Zm9yKGxldCBzPXQtMTtzPj0wJiYobj1lW3NdLCEoblswXSE9PSJzcGFjZSImJihpKz0xLGk9PT0yKSkpO3MtLSk7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiTWlzc2VkIHNlbWljb2xvbiIsblswXT09PSJ3b3JkIj9uWzNdKzE6blsyXSl9Y29sb24oZSl7bGV0IHQ9MCxpLG4scztmb3IobGV0W2Esb11vZiBlLmVudHJpZXMoKSl7aWYobj1vLHM9blswXSxzPT09IigiJiYodCs9MSkscz09PSIpIiYmKHQtPTEpLHQ9PT0wJiZzPT09IjoiKWlmKCFpKXRoaXMuZG91YmxlQ29sb24obik7ZWxzZXtpZihpWzBdPT09IndvcmQiJiZpWzFdPT09InByb2dpZCIpY29udGludWU7cmV0dXJuIGF9aT1ufXJldHVybiExfWNvbW1lbnQoZSl7bGV0IHQ9bmV3IG4xO3RoaXMuaW5pdCh0LGVbMl0pLHQuc291cmNlLmVuZD10aGlzLmdldFBvc2l0aW9uKGVbM118fGVbMl0pLHQuc291cmNlLmVuZC5vZmZzZXQrKztsZXQgaT1lWzFdLnNsaWNlKDIsLTIpO2lmKC9eXHMqJC8udGVzdChpKSl0LnRleHQ9IiIsdC5yYXdzLmxlZnQ9aSx0LnJhd3MucmlnaHQ9IiI7ZWxzZXtsZXQgbj1pLm1hdGNoKC9eKFxzKikoW15dKlxTKShccyopJC8pO3QudGV4dD1uWzJdLHQucmF3cy5sZWZ0PW5bMV0sdC5yYXdzLnJpZ2h0PW5bM119fWNyZWF0ZVRva2VuaXplcigpe3RoaXMudG9rZW5pemVyPW8xKHRoaXMuaW5wdXQpfWRlY2woZSx0KXtsZXQgaT1uZXcgczE7dGhpcy5pbml0KGksZVswXVsyXSk7bGV0IG49ZVtlLmxlbmd0aC0xXTtmb3IoblswXT09PSI7IiYmKHRoaXMuc2VtaWNvbG9uPSEwLGUucG9wKCkpLGkuc291cmNlLmVuZD10aGlzLmdldFBvc2l0aW9uKG5bM118fG5bMl18fGwxKGUpKSxpLnNvdXJjZS5lbmQub2Zmc2V0Kys7ZVswXVswXSE9PSJ3b3JkIjspZS5sZW5ndGg9PT0xJiZ0aGlzLnVua25vd25Xb3JkKGUpLGkucmF3cy5iZWZvcmUrPWUuc2hpZnQoKVsxXTtmb3IoaS5zb3VyY2Uuc3RhcnQ9dGhpcy5nZXRQb3NpdGlvbihlWzBdWzJdKSxpLnByb3A9IiI7ZS5sZW5ndGg7KXtsZXQgYz1lWzBdWzBdO2lmKGM9PT0iOiJ8fGM9PT0ic3BhY2UifHxjPT09ImNvbW1lbnQiKWJyZWFrO2kucHJvcCs9ZS5zaGlmdCgpWzFdfWkucmF3cy5iZXR3ZWVuPSIiO2xldCBzO2Zvcig7ZS5sZW5ndGg7KWlmKHM9ZS5zaGlmdCgpLHNbMF09PT0iOiIpe2kucmF3cy5iZXR3ZWVuKz1zWzFdO2JyZWFrfWVsc2Ugc1swXT09PSJ3b3JkIiYmL1x3Ly50ZXN0KHNbMV0pJiZ0aGlzLnVua25vd25Xb3JkKFtzXSksaS5yYXdzLmJldHdlZW4rPXNbMV07KGkucHJvcFswXT09PSJfInx8aS5wcm9wWzBdPT09IioiKSYmKGkucmF3cy5iZWZvcmUrPWkucHJvcFswXSxpLnByb3A9aS5wcm9wLnNsaWNlKDEpKTtsZXQgYT1bXSxvO2Zvcig7ZS5sZW5ndGgmJihvPWVbMF1bMF0sIShvIT09InNwYWNlIiYmbyE9PSJjb21tZW50IikpOylhLnB1c2goZS5zaGlmdCgpKTt0aGlzLnByZWNoZWNrTWlzc2VkU2VtaWNvbG9uKGUpO2ZvcihsZXQgYz1lLmxlbmd0aC0xO2M+PTA7Yy0tKXtpZihzPWVbY10sc1sxXS50b0xvd2VyQ2FzZSgpPT09IiFpbXBvcnRhbnQiKXtpLmltcG9ydGFudD0hMDtsZXQgZj10aGlzLnN0cmluZ0Zyb20oZSxjKTtmPXRoaXMuc3BhY2VzRnJvbUVuZChlKStmLGYhPT0iICFpbXBvcnRhbnQiJiYoaS5yYXdzLmltcG9ydGFudD1mKTticmVha31lbHNlIGlmKHNbMV0udG9Mb3dlckNhc2UoKT09PSJpbXBvcnRhbnQiKXtsZXQgZj1lLnNsaWNlKDApLGQ9IiI7Zm9yKGxldCBwPWM7cD4wO3AtLSl7bGV0IGg9ZltwXVswXTtpZihkLnRyaW0oKS5zdGFydHNXaXRoKCIhIikmJmghPT0ic3BhY2UiKWJyZWFrO2Q9Zi5wb3AoKVsxXStkfWQudHJpbSgpLnN0YXJ0c1dpdGgoIiEiKSYmKGkuaW1wb3J0YW50PSEwLGkucmF3cy5pbXBvcnRhbnQ9ZCxlPWYpfWlmKHNbMF0hPT0ic3BhY2UiJiZzWzBdIT09ImNvbW1lbnQiKWJyZWFrfWUuc29tZShjPT5jWzBdIT09InNwYWNlIiYmY1swXSE9PSJjb21tZW50IikmJihpLnJhd3MuYmV0d2Vlbis9YS5tYXAoYz0+Y1sxXSkuam9pbigiIiksYT1bXSksdGhpcy5yYXcoaSwidmFsdWUiLGEuY29uY2F0KGUpLHQpLGkudmFsdWUuaW5jbHVkZXMoIjoiKSYmIXQmJnRoaXMuY2hlY2tNaXNzZWRTZW1pY29sb24oZSl9ZG91YmxlQ29sb24oZSl7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiRG91YmxlIGNvbG9uIix7b2Zmc2V0OmVbMl19LHtvZmZzZXQ6ZVsyXStlWzFdLmxlbmd0aH0pfWVtcHR5UnVsZShlKXtsZXQgdD1uZXcgdHA7dGhpcy5pbml0KHQsZVsyXSksdC5zZWxlY3Rvcj0iIix0LnJhd3MuYmV0d2Vlbj0iIix0aGlzLmN1cnJlbnQ9dH1lbmQoZSl7dGhpcy5jdXJyZW50Lm5vZGVzJiZ0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoJiYodGhpcy5jdXJyZW50LnJhd3Muc2VtaWNvbG9uPXRoaXMuc2VtaWNvbG9uKSx0aGlzLnNlbWljb2xvbj0hMSx0aGlzLmN1cnJlbnQucmF3cy5hZnRlcj0odGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXJ8fCIiKSt0aGlzLnNwYWNlcyx0aGlzLnNwYWNlcz0iIix0aGlzLmN1cnJlbnQucGFyZW50Pyh0aGlzLmN1cnJlbnQuc291cmNlLmVuZD10aGlzLmdldFBvc2l0aW9uKGVbMl0pLHRoaXMuY3VycmVudC5zb3VyY2UuZW5kLm9mZnNldCsrLHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQucGFyZW50KTp0aGlzLnVuZXhwZWN0ZWRDbG9zZShlKX1lbmRGaWxlKCl7dGhpcy5jdXJyZW50LnBhcmVudCYmdGhpcy51bmNsb3NlZEJsb2NrKCksdGhpcy5jdXJyZW50Lm5vZGVzJiZ0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoJiYodGhpcy5jdXJyZW50LnJhd3Muc2VtaWNvbG9uPXRoaXMuc2VtaWNvbG9uKSx0aGlzLmN1cnJlbnQucmF3cy5hZnRlcj0odGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXJ8fCIiKSt0aGlzLnNwYWNlcyx0aGlzLnJvb3Quc291cmNlLmVuZD10aGlzLmdldFBvc2l0aW9uKHRoaXMudG9rZW5pemVyLnBvc2l0aW9uKCkpfWZyZWVTZW1pY29sb24oZSl7aWYodGhpcy5zcGFjZXMrPWVbMV0sdGhpcy5jdXJyZW50Lm5vZGVzKXtsZXQgdD10aGlzLmN1cnJlbnQubm9kZXNbdGhpcy5jdXJyZW50Lm5vZGVzLmxlbmd0aC0xXTt0JiZ0LnR5cGU9PT0icnVsZSImJiF0LnJhd3Mub3duU2VtaWNvbG9uJiYodC5yYXdzLm93blNlbWljb2xvbj10aGlzLnNwYWNlcyx0aGlzLnNwYWNlcz0iIil9fWdldFBvc2l0aW9uKGUpe2xldCB0PXRoaXMuaW5wdXQuZnJvbU9mZnNldChlKTtyZXR1cm57Y29sdW1uOnQuY29sLGxpbmU6dC5saW5lLG9mZnNldDplfX1pbml0KGUsdCl7dGhpcy5jdXJyZW50LnB1c2goZSksZS5zb3VyY2U9e2lucHV0OnRoaXMuaW5wdXQsc3RhcnQ6dGhpcy5nZXRQb3NpdGlvbih0KX0sZS5yYXdzLmJlZm9yZT10aGlzLnNwYWNlcyx0aGlzLnNwYWNlcz0iIixlLnR5cGUhPT0iY29tbWVudCImJih0aGlzLnNlbWljb2xvbj0hMSl9b3RoZXIoZSl7bGV0IHQ9ITEsaT1udWxsLG49ITEscz1udWxsLGE9W10sbz1lWzFdLnN0YXJ0c1dpdGgoIi0tIiksbD1bXSxjPWU7Zm9yKDtjOyl7aWYoaT1jWzBdLGwucHVzaChjKSxpPT09IigifHxpPT09IlsiKXN8fChzPWMpLGEucHVzaChpPT09IigiPyIpIjoiXSIpO2Vsc2UgaWYobyYmbiYmaT09PSJ7IilzfHwocz1jKSxhLnB1c2goIn0iKTtlbHNlIGlmKGEubGVuZ3RoPT09MClpZihpPT09IjsiKWlmKG4pe3RoaXMuZGVjbChsLG8pO3JldHVybn1lbHNlIGJyZWFrO2Vsc2UgaWYoaT09PSJ7Iil7dGhpcy5ydWxlKGwpO3JldHVybn1lbHNlIGlmKGk9PT0ifSIpe3RoaXMudG9rZW5pemVyLmJhY2sobC5wb3AoKSksdD0hMDticmVha31lbHNlIGk9PT0iOiImJihuPSEwKTtlbHNlIGk9PT1hW2EubGVuZ3RoLTFdJiYoYS5wb3AoKSxhLmxlbmd0aD09PTAmJihzPW51bGwpKTtjPXRoaXMudG9rZW5pemVyLm5leHRUb2tlbigpfWlmKHRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpJiYodD0hMCksYS5sZW5ndGg+MCYmdGhpcy51bmNsb3NlZEJyYWNrZXQocyksdCYmbil7aWYoIW8pZm9yKDtsLmxlbmd0aCYmKGM9bFtsLmxlbmd0aC0xXVswXSwhKGMhPT0ic3BhY2UiJiZjIT09ImNvbW1lbnQiKSk7KXRoaXMudG9rZW5pemVyLmJhY2sobC5wb3AoKSk7dGhpcy5kZWNsKGwsbyl9ZWxzZSB0aGlzLnVua25vd25Xb3JkKGwpfXBhcnNlKCl7bGV0IGU7Zm9yKDshdGhpcy50b2tlbml6ZXIuZW5kT2ZGaWxlKCk7KXN3aXRjaChlPXRoaXMudG9rZW5pemVyLm5leHRUb2tlbigpLGVbMF0pe2Nhc2Uic3BhY2UiOnRoaXMuc3BhY2VzKz1lWzFdO2JyZWFrO2Nhc2UiOyI6dGhpcy5mcmVlU2VtaWNvbG9uKGUpO2JyZWFrO2Nhc2UifSI6dGhpcy5lbmQoZSk7YnJlYWs7Y2FzZSJjb21tZW50Ijp0aGlzLmNvbW1lbnQoZSk7YnJlYWs7Y2FzZSJhdC13b3JkIjp0aGlzLmF0cnVsZShlKTticmVhaztjYXNlInsiOnRoaXMuZW1wdHlSdWxlKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5vdGhlcihlKTticmVha310aGlzLmVuZEZpbGUoKX1wcmVjaGVja01pc3NlZFNlbWljb2xvbigpe31yYXcoZSx0LGksbil7bGV0IHMsYSxvPWkubGVuZ3RoLGw9IiIsYz0hMCxmLGQ7Zm9yKGxldCBwPTA7cDxvO3ArPTEpcz1pW3BdLGE9c1swXSxhPT09InNwYWNlIiYmcD09PW8tMSYmIW4/Yz0hMTphPT09ImNvbW1lbnQiPyhkPWlbcC0xXT9pW3AtMV1bMF06ImVtcHR5IixmPWlbcCsxXT9pW3ArMV1bMF06ImVtcHR5IiwhcnBbZF0mJiFycFtmXT9sLnNsaWNlKC0xKT09PSIsIj9jPSExOmwrPXNbMV06Yz0hMSk6bCs9c1sxXTtpZighYyl7bGV0IHA9aS5yZWR1Y2UoKGgsYik9PmgrYlsxXSwiIik7ZS5yYXdzW3RdPXtyYXc6cCx2YWx1ZTpsfX1lW3RdPWx9cnVsZShlKXtlLnBvcCgpO2xldCB0PW5ldyB0cDt0aGlzLmluaXQodCxlWzBdWzJdKSx0LnJhd3MuYmV0d2Vlbj10aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZChlKSx0aGlzLnJhdyh0LCJzZWxlY3RvciIsZSksdGhpcy5jdXJyZW50PXR9c3BhY2VzQW5kQ29tbWVudHNGcm9tRW5kKGUpe2xldCB0LGk9IiI7Zm9yKDtlLmxlbmd0aCYmKHQ9ZVtlLmxlbmd0aC0xXVswXSwhKHQhPT0ic3BhY2UiJiZ0IT09ImNvbW1lbnQiKSk7KWk9ZS5wb3AoKVsxXStpO3JldHVybiBpfXNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0KGUpe2xldCB0LGk9IiI7Zm9yKDtlLmxlbmd0aCYmKHQ9ZVswXVswXSwhKHQhPT0ic3BhY2UiJiZ0IT09ImNvbW1lbnQiKSk7KWkrPWUuc2hpZnQoKVsxXTtyZXR1cm4gaX1zcGFjZXNGcm9tRW5kKGUpe2xldCB0LGk9IiI7Zm9yKDtlLmxlbmd0aCYmKHQ9ZVtlLmxlbmd0aC0xXVswXSx0PT09InNwYWNlIik7KWk9ZS5wb3AoKVsxXStpO3JldHVybiBpfXN0cmluZ0Zyb20oZSx0KXtsZXQgaT0iIjtmb3IobGV0IG49dDtuPGUubGVuZ3RoO24rKylpKz1lW25dWzFdO3JldHVybiBlLnNwbGljZSh0LGUubGVuZ3RoLXQpLGl9dW5jbG9zZWRCbG9jaygpe2xldCBlPXRoaXMuY3VycmVudC5zb3VyY2Uuc3RhcnQ7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiVW5jbG9zZWQgYmxvY2siLGUubGluZSxlLmNvbHVtbil9dW5jbG9zZWRCcmFja2V0KGUpe3Rocm93IHRoaXMuaW5wdXQuZXJyb3IoIlVuY2xvc2VkIGJyYWNrZXQiLHtvZmZzZXQ6ZVsyXX0se29mZnNldDplWzJdKzF9KX11bmV4cGVjdGVkQ2xvc2UoZSl7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiVW5leHBlY3RlZCB9Iix7b2Zmc2V0OmVbMl19LHtvZmZzZXQ6ZVsyXSsxfSl9dW5rbm93bldvcmQoZSl7dGhyb3cgdGhpcy5pbnB1dC5lcnJvcigiVW5rbm93biB3b3JkIix7b2Zmc2V0OmVbMF1bMl19LHtvZmZzZXQ6ZVswXVsyXStlWzBdWzFdLmxlbmd0aH0pfXVubmFtZWRBdHJ1bGUoZSx0KXt0aHJvdyB0aGlzLmlucHV0LmVycm9yKCJBdC1ydWxlIHdpdGhvdXQgbmFtZSIse29mZnNldDp0WzJdfSx7b2Zmc2V0OnRbMl0rdFsxXS5sZW5ndGh9KX19O25wLmV4cG9ydHM9aXB9KTt2YXIgQ249eCgoejMsYXApPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgdTE9RXQoKSxmMT1tbigpLGMxPXNwKCk7ZnVuY3Rpb24gQW4ocixlKXtsZXQgdD1uZXcgZjEocixlKSxpPW5ldyBjMSh0KTt0cnl7aS5wYXJzZSgpfWNhdGNoKG4pe3Rocm93IG59cmV0dXJuIGkucm9vdH1hcC5leHBvcnRzPUFuO0FuLmRlZmF1bHQ9QW47dTEucmVnaXN0ZXJQYXJzZShBbil9KTt2YXIgQWE9eCgoVTMsb3ApPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgX249Y2xhc3N7Y29uc3RydWN0b3IoZSx0PXt9KXtpZih0aGlzLnR5cGU9Indhcm5pbmciLHRoaXMudGV4dD1lLHQubm9kZSYmdC5ub2RlLnNvdXJjZSl7bGV0IGk9dC5ub2RlLnJhbmdlQnkodCk7dGhpcy5saW5lPWkuc3RhcnQubGluZSx0aGlzLmNvbHVtbj1pLnN0YXJ0LmNvbHVtbix0aGlzLmVuZExpbmU9aS5lbmQubGluZSx0aGlzLmVuZENvbHVtbj1pLmVuZC5jb2x1bW59Zm9yKGxldCBpIGluIHQpdGhpc1tpXT10W2ldfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubm9kZT90aGlzLm5vZGUuZXJyb3IodGhpcy50ZXh0LHtpbmRleDp0aGlzLmluZGV4LHBsdWdpbjp0aGlzLnBsdWdpbix3b3JkOnRoaXMud29yZH0pLm1lc3NhZ2U6dGhpcy5wbHVnaW4/dGhpcy5wbHVnaW4rIjogIit0aGlzLnRleHQ6dGhpcy50ZXh0fX07b3AuZXhwb3J0cz1fbjtfbi5kZWZhdWx0PV9ufSk7dmFyIE9uPXgoKFYzLGxwKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIHAxPUFhKCksRW49Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMucHJvY2Vzc29yPWUsdGhpcy5tZXNzYWdlcz1bXSx0aGlzLnJvb3Q9dCx0aGlzLm9wdHM9aSx0aGlzLmNzcz12b2lkIDAsdGhpcy5tYXA9dm9pZCAwfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzfXdhcm4oZSx0PXt9KXt0LnBsdWdpbnx8dGhpcy5sYXN0UGx1Z2luJiZ0aGlzLmxhc3RQbHVnaW4ucG9zdGNzc1BsdWdpbiYmKHQucGx1Z2luPXRoaXMubGFzdFBsdWdpbi5wb3N0Y3NzUGx1Z2luKTtsZXQgaT1uZXcgcDEoZSx0KTtyZXR1cm4gdGhpcy5tZXNzYWdlcy5wdXNoKGkpLGl9d2FybmluZ3MoKXtyZXR1cm4gdGhpcy5tZXNzYWdlcy5maWx0ZXIoZT0+ZS50eXBlPT09Indhcm5pbmciKX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLmNzc319O2xwLmV4cG9ydHM9RW47RW4uZGVmYXVsdD1Fbn0pO3ZhciBDYT14KChIMyxmcCk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciB1cD17fTtmcC5leHBvcnRzPWZ1bmN0aW9uKGUpe3VwW2VdfHwodXBbZV09ITAsdHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihlKSl9fSk7dmFyIE9hPXgoKEczLGhwKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIGQxPUV0KCksaDE9ZG4oKSxtMT1rYSgpLGcxPUNuKCksY3A9T24oKSx5MT10cigpLGIxPVZyKCkse2lzQ2xlYW46dHQsbXk6dzF9PWxuKCksVzM9Q2EoKSx2MT17YXRydWxlOiJBdFJ1bGUiLGNvbW1lbnQ6IkNvbW1lbnQiLGRlY2w6IkRlY2xhcmF0aW9uIixkb2N1bWVudDoiRG9jdW1lbnQiLHJvb3Q6IlJvb3QiLHJ1bGU6IlJ1bGUifSx4MT17QXRSdWxlOiEwLEF0UnVsZUV4aXQ6ITAsQ29tbWVudDohMCxDb21tZW50RXhpdDohMCxEZWNsYXJhdGlvbjohMCxEZWNsYXJhdGlvbkV4aXQ6ITAsRG9jdW1lbnQ6ITAsRG9jdW1lbnRFeGl0OiEwLE9uY2U6ITAsT25jZUV4aXQ6ITAscG9zdGNzc1BsdWdpbjohMCxwcmVwYXJlOiEwLFJvb3Q6ITAsUm9vdEV4aXQ6ITAsUnVsZTohMCxSdWxlRXhpdDohMH0sazE9e09uY2U6ITAscG9zdGNzc1BsdWdpbjohMCxwcmVwYXJlOiEwfSxycj0wO2Z1bmN0aW9uIHJpKHIpe3JldHVybiB0eXBlb2Ygcj09Im9iamVjdCImJnR5cGVvZiByLnRoZW49PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gcHAocil7bGV0IGU9ITEsdD12MVtyLnR5cGVdO3JldHVybiByLnR5cGU9PT0iZGVjbCI/ZT1yLnByb3AudG9Mb3dlckNhc2UoKTpyLnR5cGU9PT0iYXRydWxlIiYmKGU9ci5uYW1lLnRvTG93ZXJDYXNlKCkpLGUmJnIuYXBwZW5kP1t0LHQrIi0iK2UscnIsdCsiRXhpdCIsdCsiRXhpdC0iK2VdOmU/W3QsdCsiLSIrZSx0KyJFeGl0Iix0KyJFeGl0LSIrZV06ci5hcHBlbmQ/W3QscnIsdCsiRXhpdCJdOlt0LHQrIkV4aXQiXX1mdW5jdGlvbiBkcChyKXtsZXQgZTtyZXR1cm4gci50eXBlPT09ImRvY3VtZW50Ij9lPVsiRG9jdW1lbnQiLHJyLCJEb2N1bWVudEV4aXQiXTpyLnR5cGU9PT0icm9vdCI/ZT1bIlJvb3QiLHJyLCJSb290RXhpdCJdOmU9cHAocikse2V2ZW50SW5kZXg6MCxldmVudHM6ZSxpdGVyYXRvcjowLG5vZGU6cix2aXNpdG9ySW5kZXg6MCx2aXNpdG9yczpbXX19ZnVuY3Rpb24gX2Eocil7cmV0dXJuIHJbdHRdPSExLHIubm9kZXMmJnIubm9kZXMuZm9yRWFjaChlPT5fYShlKSkscn12YXIgRWE9e30scHQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuc3RyaW5naWZpZWQ9ITEsdGhpcy5wcm9jZXNzZWQ9ITE7bGV0IG47aWYodHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmKHQudHlwZT09PSJyb290Inx8dC50eXBlPT09ImRvY3VtZW50Iikpbj1fYSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBwdHx8dCBpbnN0YW5jZW9mIGNwKW49X2EodC5yb290KSx0Lm1hcCYmKHR5cGVvZiBpLm1hcD09InVuZGVmaW5lZCImJihpLm1hcD17fSksaS5tYXAuaW5saW5lfHwoaS5tYXAuaW5saW5lPSExKSxpLm1hcC5wcmV2PXQubWFwKTtlbHNle2xldCBzPWcxO2kuc3ludGF4JiYocz1pLnN5bnRheC5wYXJzZSksaS5wYXJzZXImJihzPWkucGFyc2VyKSxzLnBhcnNlJiYocz1zLnBhcnNlKTt0cnl7bj1zKHQsaSl9Y2F0Y2goYSl7dGhpcy5wcm9jZXNzZWQ9ITAsdGhpcy5lcnJvcj1hfW4mJiFuW3cxXSYmZDEucmVidWlsZChuKX10aGlzLnJlc3VsdD1uZXcgY3AoZSxuLGkpLHRoaXMuaGVscGVycz17Li4uRWEscG9zdGNzczpFYSxyZXN1bHQ6dGhpcy5yZXN1bHR9LHRoaXMucGx1Z2lucz10aGlzLnByb2Nlc3Nvci5wbHVnaW5zLm1hcChzPT50eXBlb2Ygcz09Im9iamVjdCImJnMucHJlcGFyZT97Li4ucywuLi5zLnByZXBhcmUodGhpcy5yZXN1bHQpfTpzKX1hc3luYygpe3JldHVybiB0aGlzLmVycm9yP1Byb21pc2UucmVqZWN0KHRoaXMuZXJyb3IpOnRoaXMucHJvY2Vzc2VkP1Byb21pc2UucmVzb2x2ZSh0aGlzLnJlc3VsdCk6KHRoaXMucHJvY2Vzc2luZ3x8KHRoaXMucHJvY2Vzc2luZz10aGlzLnJ1bkFzeW5jKCkpLHRoaXMucHJvY2Vzc2luZyl9Y2F0Y2goZSl7cmV0dXJuIHRoaXMuYXN5bmMoKS5jYXRjaChlKX1maW5hbGx5KGUpe3JldHVybiB0aGlzLmFzeW5jKCkudGhlbihlLGUpfWdldEFzeW5jRXJyb3IoKXt0aHJvdyBuZXcgRXJyb3IoIlVzZSBwcm9jZXNzKGNzcykudGhlbihjYikgdG8gd29yayB3aXRoIGFzeW5jIHBsdWdpbnMiKX1oYW5kbGVFcnJvcihlLHQpe2xldCBpPXRoaXMucmVzdWx0Lmxhc3RQbHVnaW47dHJ5e3QmJnQuYWRkVG9FcnJvcihlKSx0aGlzLmVycm9yPWUsZS5uYW1lPT09IkNzc1N5bnRheEVycm9yIiYmIWUucGx1Z2luPyhlLnBsdWdpbj1pLnBvc3Rjc3NQbHVnaW4sZS5zZXRNZXNzYWdlKCkpOmkucG9zdGNzc1ZlcnNpb259Y2F0Y2gobil7Y29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihuKX1yZXR1cm4gZX1wcmVwYXJlVmlzaXRvcnMoKXt0aGlzLmxpc3RlbmVycz17fTtsZXQgZT0odCxpLG4pPT57dGhpcy5saXN0ZW5lcnNbaV18fCh0aGlzLmxpc3RlbmVyc1tpXT1bXSksdGhpcy5saXN0ZW5lcnNbaV0ucHVzaChbdCxuXSl9O2ZvcihsZXQgdCBvZiB0aGlzLnBsdWdpbnMpaWYodHlwZW9mIHQ9PSJvYmplY3QiKWZvcihsZXQgaSBpbiB0KXtpZigheDFbaV0mJi9eW0EtWl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGV2ZW50ICR7aX0gaW4gJHt0LnBvc3Rjc3NQbHVnaW59LiBUcnkgdG8gdXBkYXRlIFBvc3RDU1MgKCR7dGhpcy5wcm9jZXNzb3IudmVyc2lvbn0gbm93KS5gKTtpZighazFbaV0paWYodHlwZW9mIHRbaV09PSJvYmplY3QiKWZvcihsZXQgbiBpbiB0W2ldKW49PT0iKiI/ZSh0LGksdFtpXVtuXSk6ZSh0LGkrIi0iK24udG9Mb3dlckNhc2UoKSx0W2ldW25dKTtlbHNlIHR5cGVvZiB0W2ldPT0iZnVuY3Rpb24iJiZlKHQsaSx0W2ldKX10aGlzLmhhc0xpc3RlbmVyPU9iamVjdC5rZXlzKHRoaXMubGlzdGVuZXJzKS5sZW5ndGg+MH1hc3luYyBydW5Bc3luYygpe3RoaXMucGx1Z2luPTA7Zm9yKGxldCBlPTA7ZTx0aGlzLnBsdWdpbnMubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy5wbHVnaW5zW2VdLGk9dGhpcy5ydW5PblJvb3QodCk7aWYocmkoaSkpdHJ5e2F3YWl0IGl9Y2F0Y2gobil7dGhyb3cgdGhpcy5oYW5kbGVFcnJvcihuKX19aWYodGhpcy5wcmVwYXJlVmlzaXRvcnMoKSx0aGlzLmhhc0xpc3RlbmVyKXtsZXQgZT10aGlzLnJlc3VsdC5yb290O2Zvcig7IWVbdHRdOyl7ZVt0dF09ITA7bGV0IHQ9W2RwKGUpXTtmb3IoO3QubGVuZ3RoPjA7KXtsZXQgaT10aGlzLnZpc2l0VGljayh0KTtpZihyaShpKSl0cnl7YXdhaXQgaX1jYXRjaChuKXtsZXQgcz10W3QubGVuZ3RoLTFdLm5vZGU7dGhyb3cgdGhpcy5oYW5kbGVFcnJvcihuLHMpfX19aWYodGhpcy5saXN0ZW5lcnMuT25jZUV4aXQpZm9yKGxldFt0LGldb2YgdGhpcy5saXN0ZW5lcnMuT25jZUV4aXQpe3RoaXMucmVzdWx0Lmxhc3RQbHVnaW49dDt0cnl7aWYoZS50eXBlPT09ImRvY3VtZW50Iil7bGV0IG49ZS5ub2Rlcy5tYXAocz0+aShzLHRoaXMuaGVscGVycykpO2F3YWl0IFByb21pc2UuYWxsKG4pfWVsc2UgYXdhaXQgaShlLHRoaXMuaGVscGVycyl9Y2F0Y2gobil7dGhyb3cgdGhpcy5oYW5kbGVFcnJvcihuKX19fXJldHVybiB0aGlzLnByb2Nlc3NlZD0hMCx0aGlzLnN0cmluZ2lmeSgpfXJ1bk9uUm9vdChlKXt0aGlzLnJlc3VsdC5sYXN0UGx1Z2luPWU7dHJ5e2lmKHR5cGVvZiBlPT0ib2JqZWN0IiYmZS5PbmNlKXtpZih0aGlzLnJlc3VsdC5yb290LnR5cGU9PT0iZG9jdW1lbnQiKXtsZXQgdD10aGlzLnJlc3VsdC5yb290Lm5vZGVzLm1hcChpPT5lLk9uY2UoaSx0aGlzLmhlbHBlcnMpKTtyZXR1cm4gcmkodFswXSk/UHJvbWlzZS5hbGwodCk6dH1yZXR1cm4gZS5PbmNlKHRoaXMucmVzdWx0LnJvb3QsdGhpcy5oZWxwZXJzKX1lbHNlIGlmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiBlKHRoaXMucmVzdWx0LnJvb3QsdGhpcy5yZXN1bHQpfWNhdGNoKHQpe3Rocm93IHRoaXMuaGFuZGxlRXJyb3IodCl9fXN0cmluZ2lmeSgpe2lmKHRoaXMuZXJyb3IpdGhyb3cgdGhpcy5lcnJvcjtpZih0aGlzLnN0cmluZ2lmaWVkKXJldHVybiB0aGlzLnJlc3VsdDt0aGlzLnN0cmluZ2lmaWVkPSEwLHRoaXMuc3luYygpO2xldCBlPXRoaXMucmVzdWx0Lm9wdHMsdD1iMTtlLnN5bnRheCYmKHQ9ZS5zeW50YXguc3RyaW5naWZ5KSxlLnN0cmluZ2lmaWVyJiYodD1lLnN0cmluZ2lmaWVyKSx0LnN0cmluZ2lmeSYmKHQ9dC5zdHJpbmdpZnkpO2xldCBuPW5ldyBtMSh0LHRoaXMucmVzdWx0LnJvb3QsdGhpcy5yZXN1bHQub3B0cykuZ2VuZXJhdGUoKTtyZXR1cm4gdGhpcy5yZXN1bHQuY3NzPW5bMF0sdGhpcy5yZXN1bHQubWFwPW5bMV0sdGhpcy5yZXN1bHR9c3luYygpe2lmKHRoaXMuZXJyb3IpdGhyb3cgdGhpcy5lcnJvcjtpZih0aGlzLnByb2Nlc3NlZClyZXR1cm4gdGhpcy5yZXN1bHQ7aWYodGhpcy5wcm9jZXNzZWQ9ITAsdGhpcy5wcm9jZXNzaW5nKXRocm93IHRoaXMuZ2V0QXN5bmNFcnJvcigpO2ZvcihsZXQgZSBvZiB0aGlzLnBsdWdpbnMpe2xldCB0PXRoaXMucnVuT25Sb290KGUpO2lmKHJpKHQpKXRocm93IHRoaXMuZ2V0QXN5bmNFcnJvcigpfWlmKHRoaXMucHJlcGFyZVZpc2l0b3JzKCksdGhpcy5oYXNMaXN0ZW5lcil7bGV0IGU9dGhpcy5yZXN1bHQucm9vdDtmb3IoOyFlW3R0XTspZVt0dF09ITAsdGhpcy53YWxrU3luYyhlKTtpZih0aGlzLmxpc3RlbmVycy5PbmNlRXhpdClpZihlLnR5cGU9PT0iZG9jdW1lbnQiKWZvcihsZXQgdCBvZiBlLm5vZGVzKXRoaXMudmlzaXRTeW5jKHRoaXMubGlzdGVuZXJzLk9uY2VFeGl0LHQpO2Vsc2UgdGhpcy52aXNpdFN5bmModGhpcy5saXN0ZW5lcnMuT25jZUV4aXQsZSl9cmV0dXJuIHRoaXMucmVzdWx0fXRoZW4oZSx0KXtyZXR1cm4gdGhpcy5hc3luYygpLnRoZW4oZSx0KX10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc312aXNpdFN5bmMoZSx0KXtmb3IobGV0W2ksbl1vZiBlKXt0aGlzLnJlc3VsdC5sYXN0UGx1Z2luPWk7bGV0IHM7dHJ5e3M9bih0LHRoaXMuaGVscGVycyl9Y2F0Y2goYSl7dGhyb3cgdGhpcy5oYW5kbGVFcnJvcihhLHQucHJveHlPZil9aWYodC50eXBlIT09InJvb3QiJiZ0LnR5cGUhPT0iZG9jdW1lbnQiJiYhdC5wYXJlbnQpcmV0dXJuITA7aWYocmkocykpdGhyb3cgdGhpcy5nZXRBc3luY0Vycm9yKCl9fXZpc2l0VGljayhlKXtsZXQgdD1lW2UubGVuZ3RoLTFdLHtub2RlOmksdmlzaXRvcnM6bn09dDtpZihpLnR5cGUhPT0icm9vdCImJmkudHlwZSE9PSJkb2N1bWVudCImJiFpLnBhcmVudCl7ZS5wb3AoKTtyZXR1cm59aWYobi5sZW5ndGg+MCYmdC52aXNpdG9ySW5kZXg8bi5sZW5ndGgpe2xldFthLG9dPW5bdC52aXNpdG9ySW5kZXhdO3QudmlzaXRvckluZGV4Kz0xLHQudmlzaXRvckluZGV4PT09bi5sZW5ndGgmJih0LnZpc2l0b3JzPVtdLHQudmlzaXRvckluZGV4PTApLHRoaXMucmVzdWx0Lmxhc3RQbHVnaW49YTt0cnl7cmV0dXJuIG8oaS50b1Byb3h5KCksdGhpcy5oZWxwZXJzKX1jYXRjaChsKXt0aHJvdyB0aGlzLmhhbmRsZUVycm9yKGwsaSl9fWlmKHQuaXRlcmF0b3IhPT0wKXtsZXQgYT10Lml0ZXJhdG9yLG87Zm9yKDtvPWkubm9kZXNbaS5pbmRleGVzW2FdXTspaWYoaS5pbmRleGVzW2FdKz0xLCFvW3R0XSl7b1t0dF09ITAsZS5wdXNoKGRwKG8pKTtyZXR1cm59dC5pdGVyYXRvcj0wLGRlbGV0ZSBpLmluZGV4ZXNbYV19bGV0IHM9dC5ldmVudHM7Zm9yKDt0LmV2ZW50SW5kZXg8cy5sZW5ndGg7KXtsZXQgYT1zW3QuZXZlbnRJbmRleF07aWYodC5ldmVudEluZGV4Kz0xLGE9PT1ycil7aS5ub2RlcyYmaS5ub2Rlcy5sZW5ndGgmJihpW3R0XT0hMCx0Lml0ZXJhdG9yPWkuZ2V0SXRlcmF0b3IoKSk7cmV0dXJufWVsc2UgaWYodGhpcy5saXN0ZW5lcnNbYV0pe3QudmlzaXRvcnM9dGhpcy5saXN0ZW5lcnNbYV07cmV0dXJufX1lLnBvcCgpfXdhbGtTeW5jKGUpe2VbdHRdPSEwO2xldCB0PXBwKGUpO2ZvcihsZXQgaSBvZiB0KWlmKGk9PT1ycillLm5vZGVzJiZlLmVhY2gobj0+e25bdHRdfHx0aGlzLndhbGtTeW5jKG4pfSk7ZWxzZXtsZXQgbj10aGlzLmxpc3RlbmVyc1tpXTtpZihuJiZ0aGlzLnZpc2l0U3luYyhuLGUudG9Qcm94eSgpKSlyZXR1cm59fXdhcm5pbmdzKCl7cmV0dXJuIHRoaXMuc3luYygpLndhcm5pbmdzKCl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5jb250ZW50fWdldCBjc3MoKXtyZXR1cm4gdGhpcy5zdHJpbmdpZnkoKS5jc3N9Z2V0IG1hcCgpe3JldHVybiB0aGlzLnN0cmluZ2lmeSgpLm1hcH1nZXQgbWVzc2FnZXMoKXtyZXR1cm4gdGhpcy5zeW5jKCkubWVzc2FnZXN9Z2V0IG9wdHMoKXtyZXR1cm4gdGhpcy5yZXN1bHQub3B0c31nZXQgcHJvY2Vzc29yKCl7cmV0dXJuIHRoaXMucmVzdWx0LnByb2Nlc3Nvcn1nZXQgcm9vdCgpe3JldHVybiB0aGlzLnN5bmMoKS5yb290fWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkxhenlSZXN1bHQifX07cHQucmVnaXN0ZXJQb3N0Y3NzPXI9PntFYT1yfTtocC5leHBvcnRzPXB0O3B0LmRlZmF1bHQ9cHQ7eTEucmVnaXN0ZXJMYXp5UmVzdWx0KHB0KTtoMS5yZWdpc3RlckxhenlSZXN1bHQocHQpfSk7dmFyIGdwPXgoKFkzLG1wKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIFMxPWthKCksQTE9Q24oKSxDMT1PbigpLF8xPVZyKCksUTM9Q2EoKSxUbj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsaSl7dD10LnRvU3RyaW5nKCksdGhpcy5zdHJpbmdpZmllZD0hMSx0aGlzLl9wcm9jZXNzb3I9ZSx0aGlzLl9jc3M9dCx0aGlzLl9vcHRzPWksdGhpcy5fbWFwPXZvaWQgMDtsZXQgbixzPV8xO3RoaXMucmVzdWx0PW5ldyBDMSh0aGlzLl9wcm9jZXNzb3Isbix0aGlzLl9vcHRzKSx0aGlzLnJlc3VsdC5jc3M9dDtsZXQgYT10aGlzO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnJlc3VsdCwicm9vdCIse2dldCgpe3JldHVybiBhLnJvb3R9fSk7bGV0IG89bmV3IFMxKHMsbix0aGlzLl9vcHRzLHQpO2lmKG8uaXNNYXAoKSl7bGV0W2wsY109by5nZW5lcmF0ZSgpO2wmJih0aGlzLnJlc3VsdC5jc3M9bCksYyYmKHRoaXMucmVzdWx0Lm1hcD1jKX1lbHNlIG8uY2xlYXJBbm5vdGF0aW9uKCksdGhpcy5yZXN1bHQuY3NzPW8uY3NzfWFzeW5jKCl7cmV0dXJuIHRoaXMuZXJyb3I/UHJvbWlzZS5yZWplY3QodGhpcy5lcnJvcik6UHJvbWlzZS5yZXNvbHZlKHRoaXMucmVzdWx0KX1jYXRjaChlKXtyZXR1cm4gdGhpcy5hc3luYygpLmNhdGNoKGUpfWZpbmFsbHkoZSl7cmV0dXJuIHRoaXMuYXN5bmMoKS50aGVuKGUsZSl9c3luYygpe2lmKHRoaXMuZXJyb3IpdGhyb3cgdGhpcy5lcnJvcjtyZXR1cm4gdGhpcy5yZXN1bHR9dGhlbihlLHQpe3JldHVybiB0aGlzLmFzeW5jKCkudGhlbihlLHQpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX2Nzc313YXJuaW5ncygpe3JldHVybltdfWdldCBjb250ZW50KCl7cmV0dXJuIHRoaXMucmVzdWx0LmNzc31nZXQgY3NzKCl7cmV0dXJuIHRoaXMucmVzdWx0LmNzc31nZXQgbWFwKCl7cmV0dXJuIHRoaXMucmVzdWx0Lm1hcH1nZXQgbWVzc2FnZXMoKXtyZXR1cm5bXX1nZXQgb3B0cygpe3JldHVybiB0aGlzLnJlc3VsdC5vcHRzfWdldCBwcm9jZXNzb3IoKXtyZXR1cm4gdGhpcy5yZXN1bHQucHJvY2Vzc29yfWdldCByb290KCl7aWYodGhpcy5fcm9vdClyZXR1cm4gdGhpcy5fcm9vdDtsZXQgZSx0PUExO3RyeXtlPXQodGhpcy5fY3NzLHRoaXMuX29wdHMpfWNhdGNoKGkpe3RoaXMuZXJyb3I9aX1pZih0aGlzLmVycm9yKXRocm93IHRoaXMuZXJyb3I7cmV0dXJuIHRoaXMuX3Jvb3Q9ZSxlfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIk5vV29ya1Jlc3VsdCJ9fTttcC5leHBvcnRzPVRuO1RuLmRlZmF1bHQ9VG59KTt2YXIgYnA9eCgoSzMseXApPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgRTE9ZG4oKSxPMT1PYSgpLFQxPWdwKCksUjE9dHIoKSxpcj1jbGFzc3tjb25zdHJ1Y3RvcihlPVtdKXt0aGlzLnZlcnNpb249IjguNC40OSIsdGhpcy5wbHVnaW5zPXRoaXMubm9ybWFsaXplKGUpfW5vcm1hbGl6ZShlKXtsZXQgdD1bXTtmb3IobGV0IGkgb2YgZSlpZihpLnBvc3Rjc3M9PT0hMD9pPWkoKTppLnBvc3Rjc3MmJihpPWkucG9zdGNzcyksdHlwZW9mIGk9PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KGkucGx1Z2lucykpdD10LmNvbmNhdChpLnBsdWdpbnMpO2Vsc2UgaWYodHlwZW9mIGk9PSJvYmplY3QiJiZpLnBvc3Rjc3NQbHVnaW4pdC5wdXNoKGkpO2Vsc2UgaWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpdC5wdXNoKGkpO2Vsc2UgaWYoISh0eXBlb2YgaT09Im9iamVjdCImJihpLnBhcnNlfHxpLnN0cmluZ2lmeSkpKXRocm93IG5ldyBFcnJvcihpKyIgaXMgbm90IGEgUG9zdENTUyBwbHVnaW4iKTtyZXR1cm4gdH1wcm9jZXNzKGUsdD17fSl7cmV0dXJuIXRoaXMucGx1Z2lucy5sZW5ndGgmJiF0LnBhcnNlciYmIXQuc3RyaW5naWZpZXImJiF0LnN5bnRheD9uZXcgVDEodGhpcyxlLHQpOm5ldyBPMSh0aGlzLGUsdCl9dXNlKGUpe3JldHVybiB0aGlzLnBsdWdpbnM9dGhpcy5wbHVnaW5zLmNvbmNhdCh0aGlzLm5vcm1hbGl6ZShbZV0pKSx0aGlzfX07eXAuZXhwb3J0cz1pcjtpci5kZWZhdWx0PWlyO1IxLnJlZ2lzdGVyUHJvY2Vzc29yKGlyKTtFMS5yZWdpc3RlclByb2Nlc3Nvcihpcil9KTt2YXIgJGU9eCgoWDMsQ3ApPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgd3A9cG4oKSx2cD1RcigpLFAxPUV0KCksSTE9YW4oKSx4cD1ZcigpLGtwPWRuKCksRDE9UWMoKSxxMT1tbigpLCQxPU9hKCksTDE9eGEoKSxNMT1HcigpLE4xPUNuKCksVGE9YnAoKSxCMT1PbigpLFNwPXRyKCksQXA9Z24oKSxGMT1WcigpLGoxPUFhKCk7ZnVuY3Rpb24gSiguLi5yKXtyZXR1cm4gci5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KHJbMF0pJiYocj1yWzBdKSxuZXcgVGEocil9Si5wbHVnaW49ZnVuY3Rpb24oZSx0KXtsZXQgaT0hMTtmdW5jdGlvbiBuKC4uLmEpe2NvbnNvbGUmJmNvbnNvbGUud2FybiYmIWkmJihpPSEwLGNvbnNvbGUud2FybihlK2A6IHBvc3Rjc3MucGx1Z2luIHdhcyBkZXByZWNhdGVkLiBNaWdyYXRpb24gZ3VpZGU6Cmh0dHBzOi8vZXZpbG1hcnRpYW5zLmNvbS9jaHJvbmljbGVzL3Bvc3Rjc3MtOC1wbHVnaW4tbWlncmF0aW9uYCksbS5lbnYuTEFORyYmbS5lbnYuTEFORy5zdGFydHNXaXRoKCJjbiIpJiZjb25zb2xlLndhcm4oZStgOiBcdTkxQ0NcdTk3NjIgcG9zdGNzcy5wbHVnaW4gXHU4OEFCXHU1RjAzXHU3NTI4LiBcdThGQzFcdTc5RkJcdTYzMDdcdTUzNTc6Cmh0dHBzOi8vd3d3LnczY3RlY2guY29tL3RvcGljLzIyMjZgKSk7bGV0IG89dCguLi5hKTtyZXR1cm4gby5wb3N0Y3NzUGx1Z2luPWUsby5wb3N0Y3NzVmVyc2lvbj1uZXcgVGEoKS52ZXJzaW9uLG99bGV0IHM7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJwb3N0Y3NzIix7Z2V0KCl7cmV0dXJuIHN8fChzPW4oKSksc319KSxuLnByb2Nlc3M9ZnVuY3Rpb24oYSxvLGwpe3JldHVybiBKKFtuKGwpXSkucHJvY2VzcyhhLG8pfSxufTtKLnN0cmluZ2lmeT1GMTtKLnBhcnNlPU4xO0ouZnJvbUpTT049RDE7Si5saXN0PUwxO0ouY29tbWVudD1yPT5uZXcgdnAocik7Si5hdFJ1bGU9cj0+bmV3IHdwKHIpO0ouZGVjbD1yPT5uZXcgeHAocik7Si5ydWxlPXI9Pm5ldyBBcChyKTtKLnJvb3Q9cj0+bmV3IFNwKHIpO0ouZG9jdW1lbnQ9cj0+bmV3IGtwKHIpO0ouQ3NzU3ludGF4RXJyb3I9STE7Si5EZWNsYXJhdGlvbj14cDtKLkNvbnRhaW5lcj1QMTtKLlByb2Nlc3Nvcj1UYTtKLkRvY3VtZW50PWtwO0ouQ29tbWVudD12cDtKLldhcm5pbmc9ajE7Si5BdFJ1bGU9d3A7Si5SZXN1bHQ9QjE7Si5JbnB1dD1xMTtKLlJ1bGU9QXA7Si5Sb290PVNwO0ouTm9kZT1NMTskMS5yZWdpc3RlclBvc3Rjc3MoSik7Q3AuZXhwb3J0cz1KO0ouZGVmYXVsdD1KfSk7dmFyIHJlLGVlLFozLEozLGVJLHRJLHJJLGlJLG5JLHNJLGFJLG9JLGxJLHVJLGZJLGNJLHBJLGRJLGhJLG1JLGdJLHlJLGJJLHdJLHZJLHhJLE90PVAoKCk9Pnt1KCk7cmU9cGUoJGUoKSksZWU9cmUuZGVmYXVsdCxaMz1yZS5kZWZhdWx0LnN0cmluZ2lmeSxKMz1yZS5kZWZhdWx0LmZyb21KU09OLGVJPXJlLmRlZmF1bHQucGx1Z2luLHRJPXJlLmRlZmF1bHQucGFyc2Usckk9cmUuZGVmYXVsdC5saXN0LGlJPXJlLmRlZmF1bHQuZG9jdW1lbnQsbkk9cmUuZGVmYXVsdC5jb21tZW50LHNJPXJlLmRlZmF1bHQuYXRSdWxlLGFJPXJlLmRlZmF1bHQucnVsZSxvST1yZS5kZWZhdWx0LmRlY2wsbEk9cmUuZGVmYXVsdC5yb290LHVJPXJlLmRlZmF1bHQuQ3NzU3ludGF4RXJyb3IsZkk9cmUuZGVmYXVsdC5EZWNsYXJhdGlvbixjST1yZS5kZWZhdWx0LkNvbnRhaW5lcixwST1yZS5kZWZhdWx0LlByb2Nlc3NvcixkST1yZS5kZWZhdWx0LkRvY3VtZW50LGhJPXJlLmRlZmF1bHQuQ29tbWVudCxtST1yZS5kZWZhdWx0Lldhcm5pbmcsZ0k9cmUuZGVmYXVsdC5BdFJ1bGUseUk9cmUuZGVmYXVsdC5SZXN1bHQsYkk9cmUuZGVmYXVsdC5JbnB1dCx3ST1yZS5kZWZhdWx0LlJ1bGUsdkk9cmUuZGVmYXVsdC5Sb290LHhJPXJlLmRlZmF1bHQuTm9kZX0pO3ZhciBSYT14KChTSSxfcCk9Pnt1KCk7X3AuZXhwb3J0cz1mdW5jdGlvbihyLGUsdCxpLG4pe2ZvcihlPWUuc3BsaXQ/ZS5zcGxpdCgiLiIpOmUsaT0wO2k8ZS5sZW5ndGg7aSsrKXI9cj9yW2VbaV1dOm47cmV0dXJuIHI9PT1uP3Q6cn19KTt2YXIgUG49eCgoUm4sRXApPT57dSgpOyJ1c2Ugc3RyaWN0IjtSbi5fX2VzTW9kdWxlPSEwO1JuLmRlZmF1bHQ9VjE7ZnVuY3Rpb24gejEocil7Zm9yKHZhciBlPXIudG9Mb3dlckNhc2UoKSx0PSIiLGk9ITEsbj0wO248NiYmZVtuXSE9PXZvaWQgMDtuKyspe3ZhciBzPWUuY2hhckNvZGVBdChuKSxhPXM+PTk3JiZzPD0xMDJ8fHM+PTQ4JiZzPD01NztpZihpPXM9PT0zMiwhYSlicmVhazt0Kz1lW25dfWlmKHQubGVuZ3RoIT09MCl7dmFyIG89cGFyc2VJbnQodCwxNiksbD1vPj01NTI5NiYmbzw9NTczNDM7cmV0dXJuIGx8fG89PT0wfHxvPjExMTQxMTE/WyJcdUZGRkQiLHQubGVuZ3RoKyhpPzE6MCldOltTdHJpbmcuZnJvbUNvZGVQb2ludChvKSx0Lmxlbmd0aCsoaT8xOjApXX19dmFyIFUxPS9cXC87ZnVuY3Rpb24gVjEocil7dmFyIGU9VTEudGVzdChyKTtpZighZSlyZXR1cm4gcjtmb3IodmFyIHQ9IiIsaT0wO2k8ci5sZW5ndGg7aSsrKXtpZihyW2ldPT09IlxcIil7dmFyIG49ejEoci5zbGljZShpKzEsaSs3KSk7aWYobiE9PXZvaWQgMCl7dCs9blswXSxpKz1uWzFdO2NvbnRpbnVlfWlmKHJbaSsxXT09PSJcXCIpe3QrPSJcXCIsaSsrO2NvbnRpbnVlfXIubGVuZ3RoPT09aSsxJiYodCs9cltpXSk7Y29udGludWV9dCs9cltpXX1yZXR1cm4gdH1FcC5leHBvcnRzPVJuLmRlZmF1bHR9KTt2YXIgVHA9eCgoSW4sT3ApPT57dSgpOyJ1c2Ugc3RyaWN0IjtJbi5fX2VzTW9kdWxlPSEwO0luLmRlZmF1bHQ9SDE7ZnVuY3Rpb24gSDEocil7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZT4xP2UtMTowKSxpPTE7aTxlO2krKyl0W2ktMV09YXJndW1lbnRzW2ldO2Zvcig7dC5sZW5ndGg+MDspe3ZhciBuPXQuc2hpZnQoKTtpZighcltuXSlyZXR1cm47cj1yW25dfXJldHVybiByfU9wLmV4cG9ydHM9SW4uZGVmYXVsdH0pO3ZhciBQcD14KChEbixScCk9Pnt1KCk7InVzZSBzdHJpY3QiO0RuLl9fZXNNb2R1bGU9ITA7RG4uZGVmYXVsdD1XMTtmdW5jdGlvbiBXMShyKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlPjE/ZS0xOjApLGk9MTtpPGU7aSsrKXRbaS0xXT1hcmd1bWVudHNbaV07Zm9yKDt0Lmxlbmd0aD4wOyl7dmFyIG49dC5zaGlmdCgpO3Jbbl18fChyW25dPXt9KSxyPXJbbl19fVJwLmV4cG9ydHM9RG4uZGVmYXVsdH0pO3ZhciBEcD14KChxbixJcCk9Pnt1KCk7InVzZSBzdHJpY3QiO3FuLl9fZXNNb2R1bGU9ITA7cW4uZGVmYXVsdD1HMTtmdW5jdGlvbiBHMShyKXtmb3IodmFyIGU9IiIsdD1yLmluZGV4T2YoIi8qIiksaT0wO3Q+PTA7KXtlPWUrci5zbGljZShpLHQpO3ZhciBuPXIuaW5kZXhPZigiKi8iLHQrMik7aWYobjwwKXJldHVybiBlO2k9bisyLHQ9ci5pbmRleE9mKCIvKiIsaSl9cmV0dXJuIGU9ZStyLnNsaWNlKGkpLGV9SXAuZXhwb3J0cz1xbi5kZWZhdWx0fSk7dmFyIGlpPXgocnQ9Pnt1KCk7InVzZSBzdHJpY3QiO3J0Ll9fZXNNb2R1bGU9ITA7cnQudW5lc2M9cnQuc3RyaXBDb21tZW50cz1ydC5nZXRQcm9wPXJ0LmVuc3VyZU9iamVjdD12b2lkIDA7dmFyIFExPSRuKFBuKCkpO3J0LnVuZXNjPVExLmRlZmF1bHQ7dmFyIFkxPSRuKFRwKCkpO3J0LmdldFByb3A9WTEuZGVmYXVsdDt2YXIgSzE9JG4oUHAoKSk7cnQuZW5zdXJlT2JqZWN0PUsxLmRlZmF1bHQ7dmFyIFgxPSRuKERwKCkpO3J0LnN0cmlwQ29tbWVudHM9WDEuZGVmYXVsdDtmdW5jdGlvbiAkbihyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19fSk7dmFyIGR0PXgoKG5pLExwKT0+e3UoKTsidXNlIHN0cmljdCI7bmkuX19lc01vZHVsZT0hMDtuaS5kZWZhdWx0PXZvaWQgMDt2YXIgcXA9aWkoKTtmdW5jdGlvbiAkcChyLGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgaT1lW3RdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsaS5rZXksaSl9fWZ1bmN0aW9uIFoxKHIsZSx0KXtyZXR1cm4gZSYmJHAoci5wcm90b3R5cGUsZSksdCYmJHAocix0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxyfXZhciBKMT1mdW5jdGlvbiByKGUsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QifHxlPT09bnVsbClyZXR1cm4gZTt2YXIgaT1uZXcgZS5jb25zdHJ1Y3Rvcjtmb3IodmFyIG4gaW4gZSlpZighIWUuaGFzT3duUHJvcGVydHkobikpe3ZhciBzPWVbbl0sYT10eXBlb2YgcztuPT09InBhcmVudCImJmE9PT0ib2JqZWN0Ij90JiYoaVtuXT10KTpzIGluc3RhbmNlb2YgQXJyYXk/aVtuXT1zLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gcihvLGkpfSk6aVtuXT1yKHMsaSl9cmV0dXJuIGl9LGVrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0KXt0PT09dm9pZCAwJiYodD17fSksT2JqZWN0LmFzc2lnbih0aGlzLHQpLHRoaXMuc3BhY2VzPXRoaXMuc3BhY2VzfHx7fSx0aGlzLnNwYWNlcy5iZWZvcmU9dGhpcy5zcGFjZXMuYmVmb3JlfHwiIix0aGlzLnNwYWNlcy5hZnRlcj10aGlzLnNwYWNlcy5hZnRlcnx8IiJ9dmFyIGU9ci5wcm90b3R5cGU7cmV0dXJuIGUucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKSx0aGlzLnBhcmVudD12b2lkIDAsdGhpc30sZS5yZXBsYWNlV2l0aD1mdW5jdGlvbigpe2lmKHRoaXMucGFyZW50KXtmb3IodmFyIGkgaW4gYXJndW1lbnRzKXRoaXMucGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLGFyZ3VtZW50c1tpXSk7dGhpcy5yZW1vdmUoKX1yZXR1cm4gdGhpc30sZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50LmF0KHRoaXMucGFyZW50LmluZGV4KHRoaXMpKzEpfSxlLnByZXY9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQuYXQodGhpcy5wYXJlbnQuaW5kZXgodGhpcyktMSl9LGUuY2xvbmU9ZnVuY3Rpb24oaSl7aT09PXZvaWQgMCYmKGk9e30pO3ZhciBuPUoxKHRoaXMpO2Zvcih2YXIgcyBpbiBpKW5bc109aVtzXTtyZXR1cm4gbn0sZS5hcHBlbmRUb1Byb3BlcnR5QW5kRXNjYXBlPWZ1bmN0aW9uKGksbixzKXt0aGlzLnJhd3N8fCh0aGlzLnJhd3M9e30pO3ZhciBhPXRoaXNbaV0sbz10aGlzLnJhd3NbaV07dGhpc1tpXT1hK24sb3x8cyE9PW4/dGhpcy5yYXdzW2ldPShvfHxhKStzOmRlbGV0ZSB0aGlzLnJhd3NbaV19LGUuc2V0UHJvcGVydHlBbmRFc2NhcGU9ZnVuY3Rpb24oaSxuLHMpe3RoaXMucmF3c3x8KHRoaXMucmF3cz17fSksdGhpc1tpXT1uLHRoaXMucmF3c1tpXT1zfSxlLnNldFByb3BlcnR5V2l0aG91dEVzY2FwZT1mdW5jdGlvbihpLG4pe3RoaXNbaV09bix0aGlzLnJhd3MmJmRlbGV0ZSB0aGlzLnJhd3NbaV19LGUuaXNBdFBvc2l0aW9uPWZ1bmN0aW9uKGksbil7aWYodGhpcy5zb3VyY2UmJnRoaXMuc291cmNlLnN0YXJ0JiZ0aGlzLnNvdXJjZS5lbmQpcmV0dXJuISh0aGlzLnNvdXJjZS5zdGFydC5saW5lPml8fHRoaXMuc291cmNlLmVuZC5saW5lPGl8fHRoaXMuc291cmNlLnN0YXJ0LmxpbmU9PT1pJiZ0aGlzLnNvdXJjZS5zdGFydC5jb2x1bW4+bnx8dGhpcy5zb3VyY2UuZW5kLmxpbmU9PT1pJiZ0aGlzLnNvdXJjZS5lbmQuY29sdW1uPG4pfSxlLnN0cmluZ2lmeVByb3BlcnR5PWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLnJhd3MmJnRoaXMucmF3c1tpXXx8dGhpc1tpXX0sZS52YWx1ZVRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFN0cmluZyh0aGlzLnN0cmluZ2lmeVByb3BlcnR5KCJ2YWx1ZSIpKX0sZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblt0aGlzLnJhd1NwYWNlQmVmb3JlLHRoaXMudmFsdWVUb1N0cmluZygpLHRoaXMucmF3U3BhY2VBZnRlcl0uam9pbigiIil9LFoxKHIsW3trZXk6InJhd1NwYWNlQmVmb3JlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLnJhd3MmJnRoaXMucmF3cy5zcGFjZXMmJnRoaXMucmF3cy5zcGFjZXMuYmVmb3JlO3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnNwYWNlcyYmdGhpcy5zcGFjZXMuYmVmb3JlKSxpfHwiIn0sc2V0OmZ1bmN0aW9uKGkpeygwLHFwLmVuc3VyZU9iamVjdCkodGhpcywicmF3cyIsInNwYWNlcyIpLHRoaXMucmF3cy5zcGFjZXMuYmVmb3JlPWl9fSx7a2V5OiJyYXdTcGFjZUFmdGVyIixnZXQ6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLnJhd3MmJnRoaXMucmF3cy5zcGFjZXMmJnRoaXMucmF3cy5zcGFjZXMuYWZ0ZXI7cmV0dXJuIGk9PT12b2lkIDAmJihpPXRoaXMuc3BhY2VzLmFmdGVyKSxpfHwiIn0sc2V0OmZ1bmN0aW9uKGkpeygwLHFwLmVuc3VyZU9iamVjdCkodGhpcywicmF3cyIsInNwYWNlcyIpLHRoaXMucmF3cy5zcGFjZXMuYWZ0ZXI9aX19XSkscn0oKTtuaS5kZWZhdWx0PWVrO0xwLmV4cG9ydHM9bmkuZGVmYXVsdH0pO3ZhciBTZT14KGllPT57dSgpOyJ1c2Ugc3RyaWN0IjtpZS5fX2VzTW9kdWxlPSEwO2llLlVOSVZFUlNBTD1pZS5UQUc9aWUuU1RSSU5HPWllLlNFTEVDVE9SPWllLlJPT1Q9aWUuUFNFVURPPWllLk5FU1RJTkc9aWUuSUQ9aWUuQ09NTUVOVD1pZS5DT01CSU5BVE9SPWllLkNMQVNTPWllLkFUVFJJQlVURT12b2lkIDA7dmFyIHRrPSJ0YWciO2llLlRBRz10azt2YXIgcms9InN0cmluZyI7aWUuU1RSSU5HPXJrO3ZhciBpaz0ic2VsZWN0b3IiO2llLlNFTEVDVE9SPWlrO3ZhciBuaz0icm9vdCI7aWUuUk9PVD1uazt2YXIgc2s9InBzZXVkbyI7aWUuUFNFVURPPXNrO3ZhciBhaz0ibmVzdGluZyI7aWUuTkVTVElORz1hazt2YXIgb2s9ImlkIjtpZS5JRD1vazt2YXIgbGs9ImNvbW1lbnQiO2llLkNPTU1FTlQ9bGs7dmFyIHVrPSJjb21iaW5hdG9yIjtpZS5DT01CSU5BVE9SPXVrO3ZhciBmaz0iY2xhc3MiO2llLkNMQVNTPWZrO3ZhciBjaz0iYXR0cmlidXRlIjtpZS5BVFRSSUJVVEU9Y2s7dmFyIHBrPSJ1bml2ZXJzYWwiO2llLlVOSVZFUlNBTD1wa30pO3ZhciBMbj14KChzaSxGcCk9Pnt1KCk7InVzZSBzdHJpY3QiO3NpLl9fZXNNb2R1bGU9ITA7c2kuZGVmYXVsdD12b2lkIDA7dmFyIGRrPW1rKGR0KCkpLGh0PWhrKFNlKCkpO2Z1bmN0aW9uIE1wKHIpe2lmKHR5cGVvZiBXZWFrTWFwIT0iZnVuY3Rpb24iKXJldHVybiBudWxsO3ZhciBlPW5ldyBXZWFrTWFwLHQ9bmV3IFdlYWtNYXA7cmV0dXJuKE1wPWZ1bmN0aW9uKG4pe3JldHVybiBuP3Q6ZX0pKHIpfWZ1bmN0aW9uIGhrKHIsZSl7aWYoIWUmJnImJnIuX19lc01vZHVsZSlyZXR1cm4gcjtpZihyPT09bnVsbHx8dHlwZW9mIHIhPSJvYmplY3QiJiZ0eXBlb2YgciE9ImZ1bmN0aW9uIilyZXR1cm57ZGVmYXVsdDpyfTt2YXIgdD1NcChlKTtpZih0JiZ0LmhhcyhyKSlyZXR1cm4gdC5nZXQocik7dmFyIGk9e30sbj1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBzIGluIHIpaWYocyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIscykpe3ZhciBhPW4/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpOm51bGw7YSYmKGEuZ2V0fHxhLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyxhKTppW3NdPXJbc119cmV0dXJuIGkuZGVmYXVsdD1yLHQmJnQuc2V0KHIsaSksaX1mdW5jdGlvbiBtayhyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24gZ2socixlKXt2YXIgdD10eXBlb2YgU3ltYm9sIT0idW5kZWZpbmVkIiYmcltTeW1ib2wuaXRlcmF0b3JdfHxyWyJAQGl0ZXJhdG9yIl07aWYodClyZXR1cm4odD10LmNhbGwocikpLm5leHQuYmluZCh0KTtpZihBcnJheS5pc0FycmF5KHIpfHwodD15ayhyKSl8fGUmJnImJnR5cGVvZiByLmxlbmd0aD09Im51bWJlciIpe3QmJihyPXQpO3ZhciBpPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGk+PXIubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTpyW2krK119fX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiB5ayhyLGUpe2lmKCEhcil7aWYodHlwZW9mIHI9PSJzdHJpbmciKXJldHVybiBOcChyLGUpO3ZhciB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LC0xKTtpZih0PT09Ik9iamVjdCImJnIuY29uc3RydWN0b3ImJih0PXIuY29uc3RydWN0b3IubmFtZSksdD09PSJNYXAifHx0PT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20ocik7aWYodD09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCh0KSlyZXR1cm4gTnAocixlKX19ZnVuY3Rpb24gTnAocixlKXsoZT09bnVsbHx8ZT5yLmxlbmd0aCkmJihlPXIubGVuZ3RoKTtmb3IodmFyIHQ9MCxpPW5ldyBBcnJheShlKTt0PGU7dCsrKWlbdF09clt0XTtyZXR1cm4gaX1mdW5jdGlvbiBCcChyLGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgaT1lW3RdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsaS5rZXksaSl9fWZ1bmN0aW9uIGJrKHIsZSx0KXtyZXR1cm4gZSYmQnAoci5wcm90b3R5cGUsZSksdCYmQnAocix0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxyfWZ1bmN0aW9uIHdrKHIsZSl7ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixQYShyLGUpfWZ1bmN0aW9uIFBhKHIsZSl7cmV0dXJuIFBhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGksbil7cmV0dXJuIGkuX19wcm90b19fPW4saX0sUGEocixlKX12YXIgdms9ZnVuY3Rpb24ocil7d2soZSxyKTtmdW5jdGlvbiBlKGkpe3ZhciBuO3JldHVybiBuPXIuY2FsbCh0aGlzLGkpfHx0aGlzLG4ubm9kZXN8fChuLm5vZGVzPVtdKSxufXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFwcGVuZD1mdW5jdGlvbihuKXtyZXR1cm4gbi5wYXJlbnQ9dGhpcyx0aGlzLm5vZGVzLnB1c2gobiksdGhpc30sdC5wcmVwZW5kPWZ1bmN0aW9uKG4pe3JldHVybiBuLnBhcmVudD10aGlzLHRoaXMubm9kZXMudW5zaGlmdChuKSx0aGlzfSx0LmF0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm5vZGVzW25dfSx0LmluZGV4PWZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2Ygbj09Im51bWJlciI/bjp0aGlzLm5vZGVzLmluZGV4T2Yobil9LHQucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24obil7bj10aGlzLmluZGV4KG4pLHRoaXMuYXQobikucGFyZW50PXZvaWQgMCx0aGlzLm5vZGVzLnNwbGljZShuLDEpO3ZhciBzO2Zvcih2YXIgYSBpbiB0aGlzLmluZGV4ZXMpcz10aGlzLmluZGV4ZXNbYV0scz49biYmKHRoaXMuaW5kZXhlc1thXT1zLTEpO3JldHVybiB0aGlzfSx0LnJlbW92ZUFsbD1mdW5jdGlvbigpe2Zvcih2YXIgbj1nayh0aGlzLm5vZGVzKSxzOyEocz1uKCkpLmRvbmU7KXt2YXIgYT1zLnZhbHVlO2EucGFyZW50PXZvaWQgMH1yZXR1cm4gdGhpcy5ub2Rlcz1bXSx0aGlzfSx0LmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3ZlQWxsKCl9LHQuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24obixzKXtzLnBhcmVudD10aGlzO3ZhciBhPXRoaXMuaW5kZXgobik7dGhpcy5ub2Rlcy5zcGxpY2UoYSsxLDAscykscy5wYXJlbnQ9dGhpczt2YXIgbztmb3IodmFyIGwgaW4gdGhpcy5pbmRleGVzKW89dGhpcy5pbmRleGVzW2xdLGE8PW8mJih0aGlzLmluZGV4ZXNbbF09bysxKTtyZXR1cm4gdGhpc30sdC5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24obixzKXtzLnBhcmVudD10aGlzO3ZhciBhPXRoaXMuaW5kZXgobik7dGhpcy5ub2Rlcy5zcGxpY2UoYSwwLHMpLHMucGFyZW50PXRoaXM7dmFyIG87Zm9yKHZhciBsIGluIHRoaXMuaW5kZXhlcylvPXRoaXMuaW5kZXhlc1tsXSxvPD1hJiYodGhpcy5pbmRleGVzW2xdPW8rMSk7cmV0dXJuIHRoaXN9LHQuX2ZpbmRDaGlsZEF0UG9zaXRpb249ZnVuY3Rpb24obixzKXt2YXIgYT12b2lkIDA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihvKXtpZihvLmF0UG9zaXRpb24pe3ZhciBsPW8uYXRQb3NpdGlvbihuLHMpO2lmKGwpcmV0dXJuIGE9bCwhMX1lbHNlIGlmKG8uaXNBdFBvc2l0aW9uKG4scykpcmV0dXJuIGE9bywhMX0pLGF9LHQuYXRQb3NpdGlvbj1mdW5jdGlvbihuLHMpe2lmKHRoaXMuaXNBdFBvc2l0aW9uKG4scykpcmV0dXJuIHRoaXMuX2ZpbmRDaGlsZEF0UG9zaXRpb24obixzKXx8dGhpc30sdC5faW5mZXJFbmRQb3NpdGlvbj1mdW5jdGlvbigpe3RoaXMubGFzdCYmdGhpcy5sYXN0LnNvdXJjZSYmdGhpcy5sYXN0LnNvdXJjZS5lbmQmJih0aGlzLnNvdXJjZT10aGlzLnNvdXJjZXx8e30sdGhpcy5zb3VyY2UuZW5kPXRoaXMuc291cmNlLmVuZHx8e30sT2JqZWN0LmFzc2lnbih0aGlzLnNvdXJjZS5lbmQsdGhpcy5sYXN0LnNvdXJjZS5lbmQpKX0sdC5lYWNoPWZ1bmN0aW9uKG4pe3RoaXMubGFzdEVhY2h8fCh0aGlzLmxhc3RFYWNoPTApLHRoaXMuaW5kZXhlc3x8KHRoaXMuaW5kZXhlcz17fSksdGhpcy5sYXN0RWFjaCsrO3ZhciBzPXRoaXMubGFzdEVhY2g7aWYodGhpcy5pbmRleGVzW3NdPTAsISF0aGlzLmxlbmd0aCl7Zm9yKHZhciBhLG87dGhpcy5pbmRleGVzW3NdPHRoaXMubGVuZ3RoJiYoYT10aGlzLmluZGV4ZXNbc10sbz1uKHRoaXMuYXQoYSksYSksbyE9PSExKTspdGhpcy5pbmRleGVzW3NdKz0xO2lmKGRlbGV0ZSB0aGlzLmluZGV4ZXNbc10sbz09PSExKXJldHVybiExfX0sdC53YWxrPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24ocyxhKXt2YXIgbz1uKHMsYSk7aWYobyE9PSExJiZzLmxlbmd0aCYmKG89cy53YWxrKG4pKSxvPT09ITEpcmV0dXJuITF9KX0sdC53YWxrQXR0cmlidXRlcz1mdW5jdGlvbihuKXt2YXIgcz10aGlzO3JldHVybiB0aGlzLndhbGsoZnVuY3Rpb24oYSl7aWYoYS50eXBlPT09aHQuQVRUUklCVVRFKXJldHVybiBuLmNhbGwocyxhKX0pfSx0LndhbGtDbGFzc2VzPWZ1bmN0aW9uKG4pe3ZhciBzPXRoaXM7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihhKXtpZihhLnR5cGU9PT1odC5DTEFTUylyZXR1cm4gbi5jYWxsKHMsYSl9KX0sdC53YWxrQ29tYmluYXRvcnM9ZnVuY3Rpb24obil7dmFyIHM9dGhpcztyZXR1cm4gdGhpcy53YWxrKGZ1bmN0aW9uKGEpe2lmKGEudHlwZT09PWh0LkNPTUJJTkFUT1IpcmV0dXJuIG4uY2FsbChzLGEpfSl9LHQud2Fsa0NvbW1lbnRzPWZ1bmN0aW9uKG4pe3ZhciBzPXRoaXM7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihhKXtpZihhLnR5cGU9PT1odC5DT01NRU5UKXJldHVybiBuLmNhbGwocyxhKX0pfSx0LndhbGtJZHM9ZnVuY3Rpb24obil7dmFyIHM9dGhpcztyZXR1cm4gdGhpcy53YWxrKGZ1bmN0aW9uKGEpe2lmKGEudHlwZT09PWh0LklEKXJldHVybiBuLmNhbGwocyxhKX0pfSx0LndhbGtOZXN0aW5nPWZ1bmN0aW9uKG4pe3ZhciBzPXRoaXM7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihhKXtpZihhLnR5cGU9PT1odC5ORVNUSU5HKXJldHVybiBuLmNhbGwocyxhKX0pfSx0LndhbGtQc2V1ZG9zPWZ1bmN0aW9uKG4pe3ZhciBzPXRoaXM7cmV0dXJuIHRoaXMud2FsayhmdW5jdGlvbihhKXtpZihhLnR5cGU9PT1odC5QU0VVRE8pcmV0dXJuIG4uY2FsbChzLGEpfSl9LHQud2Fsa1RhZ3M9ZnVuY3Rpb24obil7dmFyIHM9dGhpcztyZXR1cm4gdGhpcy53YWxrKGZ1bmN0aW9uKGEpe2lmKGEudHlwZT09PWh0LlRBRylyZXR1cm4gbi5jYWxsKHMsYSl9KX0sdC53YWxrVW5pdmVyc2Fscz1mdW5jdGlvbihuKXt2YXIgcz10aGlzO3JldHVybiB0aGlzLndhbGsoZnVuY3Rpb24oYSl7aWYoYS50eXBlPT09aHQuVU5JVkVSU0FMKXJldHVybiBuLmNhbGwocyxhKX0pfSx0LnNwbGl0PWZ1bmN0aW9uKG4pe3ZhciBzPXRoaXMsYT1bXTtyZXR1cm4gdGhpcy5yZWR1Y2UoZnVuY3Rpb24obyxsLGMpe3ZhciBmPW4uY2FsbChzLGwpO3JldHVybiBhLnB1c2gobCksZj8oby5wdXNoKGEpLGE9W10pOmM9PT1zLmxlbmd0aC0xJiZvLnB1c2goYSksb30sW10pfSx0Lm1hcD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5ub2Rlcy5tYXAobil9LHQucmVkdWNlPWZ1bmN0aW9uKG4scyl7cmV0dXJuIHRoaXMubm9kZXMucmVkdWNlKG4scyl9LHQuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMubm9kZXMuZXZlcnkobil9LHQuc29tZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5ub2Rlcy5zb21lKG4pfSx0LmZpbHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5ub2Rlcy5maWx0ZXIobil9LHQuc29ydD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5ub2Rlcy5zb3J0KG4pfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKFN0cmluZykuam9pbigiIil9LGJrKGUsW3trZXk6ImZpcnN0IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdCgwKX19LHtrZXk6Imxhc3QiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmF0KHRoaXMubGVuZ3RoLTEpfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGh9fV0pLGV9KGRrLmRlZmF1bHQpO3NpLmRlZmF1bHQ9dms7RnAuZXhwb3J0cz1zaS5kZWZhdWx0fSk7dmFyIERhPXgoKGFpLHpwKT0+e3UoKTsidXNlIHN0cmljdCI7YWkuX19lc01vZHVsZT0hMDthaS5kZWZhdWx0PXZvaWQgMDt2YXIgeGs9U2soTG4oKSksa2s9U2UoKTtmdW5jdGlvbiBTayhyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24ganAocixlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGk9ZVt0XTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLGkua2V5LGkpfX1mdW5jdGlvbiBBayhyLGUsdCl7cmV0dXJuIGUmJmpwKHIucHJvdG90eXBlLGUpLHQmJmpwKHIsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSkscn1mdW5jdGlvbiBDayhyLGUpe3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsSWEocixlKX1mdW5jdGlvbiBJYShyLGUpe3JldHVybiBJYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihpLG4pe3JldHVybiBpLl9fcHJvdG9fXz1uLGl9LElhKHIsZSl9dmFyIF9rPWZ1bmN0aW9uKHIpe0NrKGUscik7ZnVuY3Rpb24gZShpKXt2YXIgbjtyZXR1cm4gbj1yLmNhbGwodGhpcyxpKXx8dGhpcyxuLnR5cGU9a2suUk9PVCxufXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5yZWR1Y2UoZnVuY3Rpb24ocyxhKXtyZXR1cm4gcy5wdXNoKFN0cmluZyhhKSksc30sW10pLmpvaW4oIiwiKTtyZXR1cm4gdGhpcy50cmFpbGluZ0NvbW1hP24rIiwiOm59LHQuZXJyb3I9ZnVuY3Rpb24obixzKXtyZXR1cm4gdGhpcy5fZXJyb3I/dGhpcy5fZXJyb3IobixzKTpuZXcgRXJyb3Iobil9LEFrKGUsW3trZXk6ImVycm9yR2VuZXJhdG9yIixzZXQ6ZnVuY3Rpb24obil7dGhpcy5fZXJyb3I9bn19XSksZX0oeGsuZGVmYXVsdCk7YWkuZGVmYXVsdD1fazt6cC5leHBvcnRzPWFpLmRlZmF1bHR9KTt2YXIgJGE9eCgob2ksVXApPT57dSgpOyJ1c2Ugc3RyaWN0IjtvaS5fX2VzTW9kdWxlPSEwO29pLmRlZmF1bHQ9dm9pZCAwO3ZhciBFaz1UayhMbigpKSxPaz1TZSgpO2Z1bmN0aW9uIFRrKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBSayhyLGUpe3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIscWEocixlKX1mdW5jdGlvbiBxYShyLGUpe3JldHVybiBxYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihpLG4pe3JldHVybiBpLl9fcHJvdG9fXz1uLGl9LHFhKHIsZSl9dmFyIFBrPWZ1bmN0aW9uKHIpe1JrKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaTtyZXR1cm4gaT1yLmNhbGwodGhpcyx0KXx8dGhpcyxpLnR5cGU9T2suU0VMRUNUT1IsaX1yZXR1cm4gZX0oRWsuZGVmYXVsdCk7b2kuZGVmYXVsdD1QaztVcC5leHBvcnRzPW9pLmRlZmF1bHR9KTt2YXIgTW49eCgoX0ksVnApPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgSWs9e30sRGs9SWsuaGFzT3duUHJvcGVydHkscWs9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDt2YXIgaT17fTtmb3IodmFyIG4gaW4gdClpW25dPURrLmNhbGwoZSxuKT9lW25dOnRbbl07cmV0dXJuIGl9LCRrPS9bIC0sXC5cLzotQFxbLVxeYFx7LX5dLyxMaz0vWyAtLFwuXC86LUBcW1xdXF5gXHstfl0vLE1rPS8oXnxcXCspPyhcXFtBLUYwLTldezEsNn0pXHgyMCg/IVthLWZBLUYwLTlceDIwXSkvZyxMYT1mdW5jdGlvbiByKGUsdCl7dD1xayh0LHIub3B0aW9ucyksdC5xdW90ZXMhPSJzaW5nbGUiJiZ0LnF1b3RlcyE9ImRvdWJsZSImJih0LnF1b3Rlcz0ic2luZ2xlIik7Zm9yKHZhciBpPXQucXVvdGVzPT0iZG91YmxlIj8nIic6IiciLG49dC5pc0lkZW50aWZpZXIscz1lLmNoYXJBdCgwKSxhPSIiLG89MCxsPWUubGVuZ3RoO288bDspe3ZhciBjPWUuY2hhckF0KG8rKyksZj1jLmNoYXJDb2RlQXQoKSxkPXZvaWQgMDtpZihmPDMyfHxmPjEyNil7aWYoZj49NTUyOTYmJmY8PTU2MzE5JiZvPGwpe3ZhciBwPWUuY2hhckNvZGVBdChvKyspOyhwJjY0NTEyKT09NTYzMjA/Zj0oKGYmMTAyMyk8PDEwKSsocCYxMDIzKSs2NTUzNjpvLS19ZD0iXFwiK2YudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIiAifWVsc2UgdC5lc2NhcGVFdmVyeXRoaW5nPyRrLnRlc3QoYyk/ZD0iXFwiK2M6ZD0iXFwiK2YudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIiAiOi9bXHRcblxmXHJceDBCXS8udGVzdChjKT9kPSJcXCIrZi50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiICI6Yz09IlxcInx8IW4mJihjPT0nIicmJmk9PWN8fGM9PSInIiYmaT09Yyl8fG4mJkxrLnRlc3QoYyk/ZD0iXFwiK2M6ZD1jO2ErPWR9cmV0dXJuIG4mJigvXi1bLVxkXS8udGVzdChhKT9hPSJcXC0iK2Euc2xpY2UoMSk6L1xkLy50ZXN0KHMpJiYoYT0iXFwzIitzKyIgIithLnNsaWNlKDEpKSksYT1hLnJlcGxhY2UoTWssZnVuY3Rpb24oaCxiLHYpe3JldHVybiBiJiZiLmxlbmd0aCUyP2g6KGJ8fCIiKSt2fSksIW4mJnQud3JhcD9pK2EraTphfTtMYS5vcHRpb25zPXtlc2NhcGVFdmVyeXRoaW5nOiExLGlzSWRlbnRpZmllcjohMSxxdW90ZXM6InNpbmdsZSIsd3JhcDohMX07TGEudmVyc2lvbj0iMy4wLjAiO1ZwLmV4cG9ydHM9TGF9KTt2YXIgTmE9eCgobGksR3ApPT57dSgpOyJ1c2Ugc3RyaWN0IjtsaS5fX2VzTW9kdWxlPSEwO2xpLmRlZmF1bHQ9dm9pZCAwO3ZhciBOaz1IcChNbigpKSxCaz1paSgpLEZrPUhwKGR0KCkpLGprPVNlKCk7ZnVuY3Rpb24gSHAocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIFdwKHIsZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBpPWVbdF07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixpLmtleSxpKX19ZnVuY3Rpb24gemsocixlLHQpe3JldHVybiBlJiZXcChyLnByb3RvdHlwZSxlKSx0JiZXcChyLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHJ9ZnVuY3Rpb24gVWsocixlKXtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLE1hKHIsZSl9ZnVuY3Rpb24gTWEocixlKXtyZXR1cm4gTWE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gaS5fX3Byb3RvX189bixpfSxNYShyLGUpfXZhciBWaz1mdW5jdGlvbihyKXtVayhlLHIpO2Z1bmN0aW9uIGUoaSl7dmFyIG47cmV0dXJuIG49ci5jYWxsKHRoaXMsaSl8fHRoaXMsbi50eXBlPWprLkNMQVNTLG4uX2NvbnN0cnVjdGVkPSEwLG59dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQudmFsdWVUb1N0cmluZz1mdW5jdGlvbigpe3JldHVybiIuIityLnByb3RvdHlwZS52YWx1ZVRvU3RyaW5nLmNhbGwodGhpcyl9LHprKGUsW3trZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9LHNldDpmdW5jdGlvbihuKXtpZih0aGlzLl9jb25zdHJ1Y3RlZCl7dmFyIHM9KDAsTmsuZGVmYXVsdCkobix7aXNJZGVudGlmaWVyOiEwfSk7cyE9PW4/KCgwLEJrLmVuc3VyZU9iamVjdCkodGhpcywicmF3cyIpLHRoaXMucmF3cy52YWx1ZT1zKTp0aGlzLnJhd3MmJmRlbGV0ZSB0aGlzLnJhd3MudmFsdWV9dGhpcy5fdmFsdWU9bn19XSksZX0oRmsuZGVmYXVsdCk7bGkuZGVmYXVsdD1WaztHcC5leHBvcnRzPWxpLmRlZmF1bHR9KTt2YXIgRmE9eCgodWksUXApPT57dSgpOyJ1c2Ugc3RyaWN0Ijt1aS5fX2VzTW9kdWxlPSEwO3VpLmRlZmF1bHQ9dm9pZCAwO3ZhciBIaz1HayhkdCgpKSxXaz1TZSgpO2Z1bmN0aW9uIEdrKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBRayhyLGUpe3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsQmEocixlKX1mdW5jdGlvbiBCYShyLGUpe3JldHVybiBCYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihpLG4pe3JldHVybiBpLl9fcHJvdG9fXz1uLGl9LEJhKHIsZSl9dmFyIFlrPWZ1bmN0aW9uKHIpe1FrKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaTtyZXR1cm4gaT1yLmNhbGwodGhpcyx0KXx8dGhpcyxpLnR5cGU9V2suQ09NTUVOVCxpfXJldHVybiBlfShIay5kZWZhdWx0KTt1aS5kZWZhdWx0PVlrO1FwLmV4cG9ydHM9dWkuZGVmYXVsdH0pO3ZhciB6YT14KChmaSxZcCk9Pnt1KCk7InVzZSBzdHJpY3QiO2ZpLl9fZXNNb2R1bGU9ITA7ZmkuZGVmYXVsdD12b2lkIDA7dmFyIEtrPVprKGR0KCkpLFhrPVNlKCk7ZnVuY3Rpb24gWmsocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIEprKHIsZSl7ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixqYShyLGUpfWZ1bmN0aW9uIGphKHIsZSl7cmV0dXJuIGphPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGksbil7cmV0dXJuIGkuX19wcm90b19fPW4saX0samEocixlKX12YXIgZVM9ZnVuY3Rpb24ocil7SmsoZSxyKTtmdW5jdGlvbiBlKGkpe3ZhciBuO3JldHVybiBuPXIuY2FsbCh0aGlzLGkpfHx0aGlzLG4udHlwZT1Yay5JRCxufXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LnZhbHVlVG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrci5wcm90b3R5cGUudmFsdWVUb1N0cmluZy5jYWxsKHRoaXMpfSxlfShLay5kZWZhdWx0KTtmaS5kZWZhdWx0PWVTO1lwLmV4cG9ydHM9ZmkuZGVmYXVsdH0pO3ZhciBObj14KChjaSxacCk9Pnt1KCk7InVzZSBzdHJpY3QiO2NpLl9fZXNNb2R1bGU9ITA7Y2kuZGVmYXVsdD12b2lkIDA7dmFyIHRTPUtwKE1uKCkpLHJTPWlpKCksaVM9S3AoZHQoKSk7ZnVuY3Rpb24gS3Aocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIFhwKHIsZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBpPWVbdF07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixpLmtleSxpKX19ZnVuY3Rpb24gblMocixlLHQpe3JldHVybiBlJiZYcChyLnByb3RvdHlwZSxlKSx0JiZYcChyLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHJ9ZnVuY3Rpb24gc1MocixlKXtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLFVhKHIsZSl9ZnVuY3Rpb24gVWEocixlKXtyZXR1cm4gVWE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gaS5fX3Byb3RvX189bixpfSxVYShyLGUpfXZhciBhUz1mdW5jdGlvbihyKXtzUyhlLHIpO2Z1bmN0aW9uIGUoKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQucXVhbGlmaWVkTmFtZT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5uYW1lc3BhY2U/dGhpcy5uYW1lc3BhY2VTdHJpbmcrInwiK246bn0sdC52YWx1ZVRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVhbGlmaWVkTmFtZShyLnByb3RvdHlwZS52YWx1ZVRvU3RyaW5nLmNhbGwodGhpcykpfSxuUyhlLFt7a2V5OiJuYW1lc3BhY2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lc3BhY2V9LHNldDpmdW5jdGlvbihuKXtpZihuPT09ITB8fG49PT0iKiJ8fG49PT0iJiIpe3RoaXMuX25hbWVzcGFjZT1uLHRoaXMucmF3cyYmZGVsZXRlIHRoaXMucmF3cy5uYW1lc3BhY2U7cmV0dXJufXZhciBzPSgwLHRTLmRlZmF1bHQpKG4se2lzSWRlbnRpZmllcjohMH0pO3RoaXMuX25hbWVzcGFjZT1uLHMhPT1uPygoMCxyUy5lbnN1cmVPYmplY3QpKHRoaXMsInJhd3MiKSx0aGlzLnJhd3MubmFtZXNwYWNlPXMpOnRoaXMucmF3cyYmZGVsZXRlIHRoaXMucmF3cy5uYW1lc3BhY2V9fSx7a2V5OiJucyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZX0sc2V0OmZ1bmN0aW9uKG4pe3RoaXMubmFtZXNwYWNlPW59fSx7a2V5OiJuYW1lc3BhY2VTdHJpbmciLGdldDpmdW5jdGlvbigpe2lmKHRoaXMubmFtZXNwYWNlKXt2YXIgbj10aGlzLnN0cmluZ2lmeVByb3BlcnR5KCJuYW1lc3BhY2UiKTtyZXR1cm4gbj09PSEwPyIiOm59ZWxzZSByZXR1cm4iIn19XSksZX0oaVMuZGVmYXVsdCk7Y2kuZGVmYXVsdD1hUztacC5leHBvcnRzPWNpLmRlZmF1bHR9KTt2YXIgSGE9eCgocGksSnApPT57dSgpOyJ1c2Ugc3RyaWN0IjtwaS5fX2VzTW9kdWxlPSEwO3BpLmRlZmF1bHQ9dm9pZCAwO3ZhciBvUz11UyhObigpKSxsUz1TZSgpO2Z1bmN0aW9uIHVTKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBmUyhyLGUpe3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsVmEocixlKX1mdW5jdGlvbiBWYShyLGUpe3JldHVybiBWYT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihpLG4pe3JldHVybiBpLl9fcHJvdG9fXz1uLGl9LFZhKHIsZSl9dmFyIGNTPWZ1bmN0aW9uKHIpe2ZTKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaTtyZXR1cm4gaT1yLmNhbGwodGhpcyx0KXx8dGhpcyxpLnR5cGU9bFMuVEFHLGl9cmV0dXJuIGV9KG9TLmRlZmF1bHQpO3BpLmRlZmF1bHQ9Y1M7SnAuZXhwb3J0cz1waS5kZWZhdWx0fSk7dmFyIEdhPXgoKGRpLGVkKT0+e3UoKTsidXNlIHN0cmljdCI7ZGkuX19lc01vZHVsZT0hMDtkaS5kZWZhdWx0PXZvaWQgMDt2YXIgcFM9aFMoZHQoKSksZFM9U2UoKTtmdW5jdGlvbiBoUyhyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19ZnVuY3Rpb24gbVMocixlKXtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLFdhKHIsZSl9ZnVuY3Rpb24gV2EocixlKXtyZXR1cm4gV2E9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gaS5fX3Byb3RvX189bixpfSxXYShyLGUpfXZhciBnUz1mdW5jdGlvbihyKXttUyhlLHIpO2Z1bmN0aW9uIGUodCl7dmFyIGk7cmV0dXJuIGk9ci5jYWxsKHRoaXMsdCl8fHRoaXMsaS50eXBlPWRTLlNUUklORyxpfXJldHVybiBlfShwUy5kZWZhdWx0KTtkaS5kZWZhdWx0PWdTO2VkLmV4cG9ydHM9ZGkuZGVmYXVsdH0pO3ZhciBZYT14KChoaSx0ZCk9Pnt1KCk7InVzZSBzdHJpY3QiO2hpLl9fZXNNb2R1bGU9ITA7aGkuZGVmYXVsdD12b2lkIDA7dmFyIHlTPXdTKExuKCkpLGJTPVNlKCk7ZnVuY3Rpb24gd1Mocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIHZTKHIsZSl7ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixRYShyLGUpfWZ1bmN0aW9uIFFhKHIsZSl7cmV0dXJuIFFhPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGksbil7cmV0dXJuIGkuX19wcm90b19fPW4saX0sUWEocixlKX12YXIgeFM9ZnVuY3Rpb24ocil7dlMoZSxyKTtmdW5jdGlvbiBlKGkpe3ZhciBuO3JldHVybiBuPXIuY2FsbCh0aGlzLGkpfHx0aGlzLG4udHlwZT1iUy5QU0VVRE8sbn12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBuPXRoaXMubGVuZ3RoPyIoIit0aGlzLm1hcChTdHJpbmcpLmpvaW4oIiwiKSsiKSI6IiI7cmV0dXJuW3RoaXMucmF3U3BhY2VCZWZvcmUsdGhpcy5zdHJpbmdpZnlQcm9wZXJ0eSgidmFsdWUiKSxuLHRoaXMucmF3U3BhY2VBZnRlcl0uam9pbigiIil9LGV9KHlTLmRlZmF1bHQpO2hpLmRlZmF1bHQ9eFM7dGQuZXhwb3J0cz1oaS5kZWZhdWx0fSk7dmFyIEJuPXt9O0dlKEJuLHtkZXByZWNhdGU6KCk9PmtTfSk7ZnVuY3Rpb24ga1Mocil7cmV0dXJuIHJ9dmFyIEZuPVAoKCk9Pnt1KCl9KTt2YXIgaWQ9eCgoRUkscmQpPT57dSgpO3JkLmV4cG9ydHM9KEZuKCksQm4pLmRlcHJlY2F0ZX0pO3ZhciB0bz14KHlpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt5aS5fX2VzTW9kdWxlPSEwO3lpLmRlZmF1bHQ9dm9pZCAwO3lpLnVuZXNjYXBlVmFsdWU9SmE7dmFyIG1pPVhhKE1uKCkpLFNTPVhhKFBuKCkpLEFTPVhhKE5uKCkpLENTPVNlKCksS2E7ZnVuY3Rpb24gWGEocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIG5kKHIsZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBpPWVbdF07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixpLmtleSxpKX19ZnVuY3Rpb24gX1MocixlLHQpe3JldHVybiBlJiZuZChyLnByb3RvdHlwZSxlKSx0JiZuZChyLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLHJ9ZnVuY3Rpb24gRVMocixlKXtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLFphKHIsZSl9ZnVuY3Rpb24gWmEocixlKXtyZXR1cm4gWmE9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oaSxuKXtyZXR1cm4gaS5fX3Byb3RvX189bixpfSxaYShyLGUpfXZhciBnaT1pZCgpLE9TPS9eKCd8IikoW15dKilcMSQvLFRTPWdpKGZ1bmN0aW9uKCl7fSwiQXNzaWduaW5nIGFuIGF0dHJpYnV0ZSBhIHZhbHVlIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZXNjYXBlZCBpcyBkZXByZWNhdGVkLiBDYWxsIGF0dHJpYnV0ZS5zZXRWYWx1ZSgpIGluc3RlYWQuIiksUlM9Z2koZnVuY3Rpb24oKXt9LCJBc3NpZ25pbmcgYXR0ci5xdW90ZWQgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIG5vIGVmZmVjdC4gQXNzaWduIHRvIGF0dHIucXVvdGVNYXJrIGluc3RlYWQuIiksUFM9Z2koZnVuY3Rpb24oKXt9LCJDb25zdHJ1Y3RpbmcgYW4gQXR0cmlidXRlIHNlbGVjdG9yIHdpdGggYSB2YWx1ZSB3aXRob3V0IHNwZWNpZnlpbmcgcXVvdGVNYXJrIGlzIGRlcHJlY2F0ZWQuIE5vdGU6IFRoZSB2YWx1ZSBzaG91bGQgYmUgdW5lc2NhcGVkIG5vdy4iKTtmdW5jdGlvbiBKYShyKXt2YXIgZT0hMSx0PW51bGwsaT1yLG49aS5tYXRjaChPUyk7cmV0dXJuIG4mJih0PW5bMV0saT1uWzJdKSxpPSgwLFNTLmRlZmF1bHQpKGkpLGkhPT1yJiYoZT0hMCkse2RlcHJlY2F0ZWRVc2FnZTplLHVuZXNjYXBlZDppLHF1b3RlTWFyazp0fX1mdW5jdGlvbiBJUyhyKXtpZihyLnF1b3RlTWFyayE9PXZvaWQgMHx8ci52YWx1ZT09PXZvaWQgMClyZXR1cm4gcjtQUygpO3ZhciBlPUphKHIudmFsdWUpLHQ9ZS5xdW90ZU1hcmssaT1lLnVuZXNjYXBlZDtyZXR1cm4gci5yYXdzfHwoci5yYXdzPXt9KSxyLnJhd3MudmFsdWU9PT12b2lkIDAmJihyLnJhd3MudmFsdWU9ci52YWx1ZSksci52YWx1ZT1pLHIucXVvdGVNYXJrPXQscn12YXIgam49ZnVuY3Rpb24ocil7RVMoZSxyKTtmdW5jdGlvbiBlKGkpe3ZhciBuO3JldHVybiBpPT09dm9pZCAwJiYoaT17fSksbj1yLmNhbGwodGhpcyxJUyhpKSl8fHRoaXMsbi50eXBlPUNTLkFUVFJJQlVURSxuLnJhd3M9bi5yYXdzfHx7fSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5yYXdzLCJ1bnF1b3RlZCIse2dldDpnaShmdW5jdGlvbigpe3JldHVybiBuLnZhbHVlfSwiYXR0ci5yYXdzLnVucXVvdGVkIGlzIGRlcHJlY2F0ZWQuIENhbGwgYXR0ci52YWx1ZSBpbnN0ZWFkLiIpLHNldDpnaShmdW5jdGlvbigpe3JldHVybiBuLnZhbHVlfSwiU2V0dGluZyBhdHRyLnJhd3MudW5xdW90ZWQgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIG5vIGVmZmVjdC4gYXR0ci52YWx1ZSBpcyB1bmVzY2FwZWQgYnkgZGVmYXVsdCBub3cuIil9KSxuLl9jb25zdHJ1Y3RlZD0hMCxufXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmdldFF1b3RlZFZhbHVlPWZ1bmN0aW9uKG4pe249PT12b2lkIDAmJihuPXt9KTt2YXIgcz10aGlzLl9kZXRlcm1pbmVRdW90ZU1hcmsobiksYT1lb1tzXSxvPSgwLG1pLmRlZmF1bHQpKHRoaXMuX3ZhbHVlLGEpO3JldHVybiBvfSx0Ll9kZXRlcm1pbmVRdW90ZU1hcms9ZnVuY3Rpb24obil7cmV0dXJuIG4uc21hcnQ/dGhpcy5zbWFydFF1b3RlTWFyayhuKTp0aGlzLnByZWZlcnJlZFF1b3RlTWFyayhuKX0sdC5zZXRWYWx1ZT1mdW5jdGlvbihuLHMpe3M9PT12b2lkIDAmJihzPXt9KSx0aGlzLl92YWx1ZT1uLHRoaXMuX3F1b3RlTWFyaz10aGlzLl9kZXRlcm1pbmVRdW90ZU1hcmsocyksdGhpcy5fc3luY1Jhd1ZhbHVlKCl9LHQuc21hcnRRdW90ZU1hcms9ZnVuY3Rpb24obil7dmFyIHM9dGhpcy52YWx1ZSxhPXMucmVwbGFjZSgvW14nXS9nLCIiKS5sZW5ndGgsbz1zLnJlcGxhY2UoL1teIl0vZywiIikubGVuZ3RoO2lmKGErbz09PTApe3ZhciBsPSgwLG1pLmRlZmF1bHQpKHMse2lzSWRlbnRpZmllcjohMH0pO2lmKGw9PT1zKXJldHVybiBlLk5PX1FVT1RFO3ZhciBjPXRoaXMucHJlZmVycmVkUXVvdGVNYXJrKG4pO2lmKGM9PT1lLk5PX1FVT1RFKXt2YXIgZj10aGlzLnF1b3RlTWFya3x8bi5xdW90ZU1hcmt8fGUuRE9VQkxFX1FVT1RFLGQ9ZW9bZl0scD0oMCxtaS5kZWZhdWx0KShzLGQpO2lmKHAubGVuZ3RoPGwubGVuZ3RoKXJldHVybiBmfXJldHVybiBjfWVsc2UgcmV0dXJuIG89PT1hP3RoaXMucHJlZmVycmVkUXVvdGVNYXJrKG4pOm88YT9lLkRPVUJMRV9RVU9URTplLlNJTkdMRV9RVU9URX0sdC5wcmVmZXJyZWRRdW90ZU1hcms9ZnVuY3Rpb24obil7dmFyIHM9bi5wcmVmZXJDdXJyZW50UXVvdGVNYXJrP3RoaXMucXVvdGVNYXJrOm4ucXVvdGVNYXJrO3JldHVybiBzPT09dm9pZCAwJiYocz1uLnByZWZlckN1cnJlbnRRdW90ZU1hcms/bi5xdW90ZU1hcms6dGhpcy5xdW90ZU1hcmspLHM9PT12b2lkIDAmJihzPWUuRE9VQkxFX1FVT1RFKSxzfSx0Ll9zeW5jUmF3VmFsdWU9ZnVuY3Rpb24oKXt2YXIgbj0oMCxtaS5kZWZhdWx0KSh0aGlzLl92YWx1ZSxlb1t0aGlzLnF1b3RlTWFya10pO249PT10aGlzLl92YWx1ZT90aGlzLnJhd3MmJmRlbGV0ZSB0aGlzLnJhd3MudmFsdWU6dGhpcy5yYXdzLnZhbHVlPW59LHQuX2hhbmRsZUVzY2FwZXM9ZnVuY3Rpb24obixzKXtpZih0aGlzLl9jb25zdHJ1Y3RlZCl7dmFyIGE9KDAsbWkuZGVmYXVsdCkocyx7aXNJZGVudGlmaWVyOiEwfSk7YSE9PXM/dGhpcy5yYXdzW25dPWE6ZGVsZXRlIHRoaXMucmF3c1tuXX19LHQuX3NwYWNlc0Zvcj1mdW5jdGlvbihuKXt2YXIgcz17YmVmb3JlOiIiLGFmdGVyOiIifSxhPXRoaXMuc3BhY2VzW25dfHx7fSxvPXRoaXMucmF3cy5zcGFjZXMmJnRoaXMucmF3cy5zcGFjZXNbbl18fHt9O3JldHVybiBPYmplY3QuYXNzaWduKHMsYSxvKX0sdC5fc3RyaW5nRm9yPWZ1bmN0aW9uKG4scyxhKXtzPT09dm9pZCAwJiYocz1uKSxhPT09dm9pZCAwJiYoYT1zZCk7dmFyIG89dGhpcy5fc3BhY2VzRm9yKHMpO3JldHVybiBhKHRoaXMuc3RyaW5naWZ5UHJvcGVydHkobiksbyl9LHQub2Zmc2V0T2Y9ZnVuY3Rpb24obil7dmFyIHM9MSxhPXRoaXMuX3NwYWNlc0ZvcigiYXR0cmlidXRlIik7aWYocys9YS5iZWZvcmUubGVuZ3RoLG49PT0ibmFtZXNwYWNlInx8bj09PSJucyIpcmV0dXJuIHRoaXMubmFtZXNwYWNlP3M6LTE7aWYobj09PSJhdHRyaWJ1dGVOUyJ8fChzKz10aGlzLm5hbWVzcGFjZVN0cmluZy5sZW5ndGgsdGhpcy5uYW1lc3BhY2UmJihzKz0xKSxuPT09ImF0dHJpYnV0ZSIpKXJldHVybiBzO3MrPXRoaXMuc3RyaW5naWZ5UHJvcGVydHkoImF0dHJpYnV0ZSIpLmxlbmd0aCxzKz1hLmFmdGVyLmxlbmd0aDt2YXIgbz10aGlzLl9zcGFjZXNGb3IoIm9wZXJhdG9yIik7cys9by5iZWZvcmUubGVuZ3RoO3ZhciBsPXRoaXMuc3RyaW5naWZ5UHJvcGVydHkoIm9wZXJhdG9yIik7aWYobj09PSJvcGVyYXRvciIpcmV0dXJuIGw/czotMTtzKz1sLmxlbmd0aCxzKz1vLmFmdGVyLmxlbmd0aDt2YXIgYz10aGlzLl9zcGFjZXNGb3IoInZhbHVlIik7cys9Yy5iZWZvcmUubGVuZ3RoO3ZhciBmPXRoaXMuc3RyaW5naWZ5UHJvcGVydHkoInZhbHVlIik7aWYobj09PSJ2YWx1ZSIpcmV0dXJuIGY/czotMTtzKz1mLmxlbmd0aCxzKz1jLmFmdGVyLmxlbmd0aDt2YXIgZD10aGlzLl9zcGFjZXNGb3IoImluc2Vuc2l0aXZlIik7cmV0dXJuIHMrPWQuYmVmb3JlLmxlbmd0aCxuPT09Imluc2Vuc2l0aXZlIiYmdGhpcy5pbnNlbnNpdGl2ZT9zOi0xfSx0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIG49dGhpcyxzPVt0aGlzLnJhd1NwYWNlQmVmb3JlLCJbIl07cmV0dXJuIHMucHVzaCh0aGlzLl9zdHJpbmdGb3IoInF1YWxpZmllZEF0dHJpYnV0ZSIsImF0dHJpYnV0ZSIpKSx0aGlzLm9wZXJhdG9yJiYodGhpcy52YWx1ZXx8dGhpcy52YWx1ZT09PSIiKSYmKHMucHVzaCh0aGlzLl9zdHJpbmdGb3IoIm9wZXJhdG9yIikpLHMucHVzaCh0aGlzLl9zdHJpbmdGb3IoInZhbHVlIikpLHMucHVzaCh0aGlzLl9zdHJpbmdGb3IoImluc2Vuc2l0aXZlRmxhZyIsImluc2Vuc2l0aXZlIixmdW5jdGlvbihhLG8pe3JldHVybiBhLmxlbmd0aD4wJiYhbi5xdW90ZWQmJm8uYmVmb3JlLmxlbmd0aD09PTAmJiEobi5zcGFjZXMudmFsdWUmJm4uc3BhY2VzLnZhbHVlLmFmdGVyKSYmKG8uYmVmb3JlPSIgIiksc2QoYSxvKX0pKSkscy5wdXNoKCJdIikscy5wdXNoKHRoaXMucmF3U3BhY2VBZnRlcikscy5qb2luKCIiKX0sX1MoZSxbe2tleToicXVvdGVkIixnZXQ6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLnF1b3RlTWFyaztyZXR1cm4gbj09PSInInx8bj09PSciJ30sc2V0OmZ1bmN0aW9uKG4pe1JTKCl9fSx7a2V5OiJxdW90ZU1hcmsiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdW90ZU1hcmt9LHNldDpmdW5jdGlvbihuKXtpZighdGhpcy5fY29uc3RydWN0ZWQpe3RoaXMuX3F1b3RlTWFyaz1uO3JldHVybn10aGlzLl9xdW90ZU1hcmshPT1uJiYodGhpcy5fcXVvdGVNYXJrPW4sdGhpcy5fc3luY1Jhd1ZhbHVlKCkpfX0se2tleToicXVhbGlmaWVkQXR0cmlidXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWFsaWZpZWROYW1lKHRoaXMucmF3cy5hdHRyaWJ1dGV8fHRoaXMuYXR0cmlidXRlKX19LHtrZXk6Imluc2Vuc2l0aXZlRmxhZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZW5zaXRpdmU/ImkiOiIifX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX0sc2V0OmZ1bmN0aW9uKG4pe2lmKHRoaXMuX2NvbnN0cnVjdGVkKXt2YXIgcz1KYShuKSxhPXMuZGVwcmVjYXRlZFVzYWdlLG89cy51bmVzY2FwZWQsbD1zLnF1b3RlTWFyaztpZihhJiZUUygpLG89PT10aGlzLl92YWx1ZSYmbD09PXRoaXMuX3F1b3RlTWFyaylyZXR1cm47dGhpcy5fdmFsdWU9byx0aGlzLl9xdW90ZU1hcms9bCx0aGlzLl9zeW5jUmF3VmFsdWUoKX1lbHNlIHRoaXMuX3ZhbHVlPW59fSx7a2V5OiJpbnNlbnNpdGl2ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luc2Vuc2l0aXZlfSxzZXQ6ZnVuY3Rpb24obil7bnx8KHRoaXMuX2luc2Vuc2l0aXZlPSExLHRoaXMucmF3cyYmKHRoaXMucmF3cy5pbnNlbnNpdGl2ZUZsYWc9PT0iSSJ8fHRoaXMucmF3cy5pbnNlbnNpdGl2ZUZsYWc9PT0iaSIpJiYodGhpcy5yYXdzLmluc2Vuc2l0aXZlRmxhZz12b2lkIDApKSx0aGlzLl9pbnNlbnNpdGl2ZT1ufX0se2tleToiYXR0cmlidXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXR0cmlidXRlfSxzZXQ6ZnVuY3Rpb24obil7dGhpcy5faGFuZGxlRXNjYXBlcygiYXR0cmlidXRlIixuKSx0aGlzLl9hdHRyaWJ1dGU9bn19XSksZX0oQVMuZGVmYXVsdCk7eWkuZGVmYXVsdD1qbjtqbi5OT19RVU9URT1udWxsO2puLlNJTkdMRV9RVU9URT0iJyI7am4uRE9VQkxFX1FVT1RFPSciJzt2YXIgZW89KEthPXsiJyI6e3F1b3Rlczoic2luZ2xlIix3cmFwOiEwfSwnIic6e3F1b3RlczoiZG91YmxlIix3cmFwOiEwfX0sS2FbbnVsbF09e2lzSWRlbnRpZmllcjohMH0sS2EpO2Z1bmN0aW9uIHNkKHIsZSl7cmV0dXJuIiIrZS5iZWZvcmUrcitlLmFmdGVyfX0pO3ZhciBpbz14KChiaSxhZCk9Pnt1KCk7InVzZSBzdHJpY3QiO2JpLl9fZXNNb2R1bGU9ITA7YmkuZGVmYXVsdD12b2lkIDA7dmFyIERTPSRTKE5uKCkpLHFTPVNlKCk7ZnVuY3Rpb24gJFMocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIExTKHIsZSl7ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixybyhyLGUpfWZ1bmN0aW9uIHJvKHIsZSl7cmV0dXJuIHJvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGksbil7cmV0dXJuIGkuX19wcm90b19fPW4saX0scm8ocixlKX12YXIgTVM9ZnVuY3Rpb24ocil7TFMoZSxyKTtmdW5jdGlvbiBlKHQpe3ZhciBpO3JldHVybiBpPXIuY2FsbCh0aGlzLHQpfHx0aGlzLGkudHlwZT1xUy5VTklWRVJTQUwsaS52YWx1ZT0iKiIsaX1yZXR1cm4gZX0oRFMuZGVmYXVsdCk7YmkuZGVmYXVsdD1NUzthZC5leHBvcnRzPWJpLmRlZmF1bHR9KTt2YXIgc289eCgod2ksb2QpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt3aS5fX2VzTW9kdWxlPSEwO3dpLmRlZmF1bHQ9dm9pZCAwO3ZhciBOUz1GUyhkdCgpKSxCUz1TZSgpO2Z1bmN0aW9uIEZTKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBqUyhyLGUpe3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsbm8ocixlKX1mdW5jdGlvbiBubyhyLGUpe3JldHVybiBubz1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihpLG4pe3JldHVybiBpLl9fcHJvdG9fXz1uLGl9LG5vKHIsZSl9dmFyIHpTPWZ1bmN0aW9uKHIpe2pTKGUscik7ZnVuY3Rpb24gZSh0KXt2YXIgaTtyZXR1cm4gaT1yLmNhbGwodGhpcyx0KXx8dGhpcyxpLnR5cGU9QlMuQ09NQklOQVRPUixpfXJldHVybiBlfShOUy5kZWZhdWx0KTt3aS5kZWZhdWx0PXpTO29kLmV4cG9ydHM9d2kuZGVmYXVsdH0pO3ZhciBvbz14KCh2aSxsZCk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZpLl9fZXNNb2R1bGU9ITA7dmkuZGVmYXVsdD12b2lkIDA7dmFyIFVTPUhTKGR0KCkpLFZTPVNlKCk7ZnVuY3Rpb24gSFMocil7cmV0dXJuIHImJnIuX19lc01vZHVsZT9yOntkZWZhdWx0OnJ9fWZ1bmN0aW9uIFdTKHIsZSl7ci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixhbyhyLGUpfWZ1bmN0aW9uIGFvKHIsZSl7cmV0dXJuIGFvPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKGksbil7cmV0dXJuIGkuX19wcm90b19fPW4saX0sYW8ocixlKX12YXIgR1M9ZnVuY3Rpb24ocil7V1MoZSxyKTtmdW5jdGlvbiBlKHQpe3ZhciBpO3JldHVybiBpPXIuY2FsbCh0aGlzLHQpfHx0aGlzLGkudHlwZT1WUy5ORVNUSU5HLGkudmFsdWU9IiYiLGl9cmV0dXJuIGV9KFVTLmRlZmF1bHQpO3ZpLmRlZmF1bHQ9R1M7bGQuZXhwb3J0cz12aS5kZWZhdWx0fSk7dmFyIGZkPXgoKHpuLHVkKT0+e3UoKTsidXNlIHN0cmljdCI7em4uX19lc01vZHVsZT0hMDt6bi5kZWZhdWx0PVFTO2Z1bmN0aW9uIFFTKHIpe3JldHVybiByLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSl9dWQuZXhwb3J0cz16bi5kZWZhdWx0fSk7dmFyIGxvPXgoTT0+e3UoKTsidXNlIHN0cmljdCI7TS5fX2VzTW9kdWxlPSEwO00ud29yZD1NLnRpbGRlPU0udGFiPU0uc3RyPU0uc3BhY2U9TS5zbGFzaD1NLnNpbmdsZVF1b3RlPU0uc2VtaWNvbG9uPU0ucGx1cz1NLnBpcGU9TS5vcGVuU3F1YXJlPU0ub3BlblBhcmVudGhlc2lzPU0ubmV3bGluZT1NLmdyZWF0ZXJUaGFuPU0uZmVlZD1NLmVxdWFscz1NLmRvdWJsZVF1b3RlPU0uZG9sbGFyPU0uY3I9TS5jb21tZW50PU0uY29tbWE9TS5jb21iaW5hdG9yPU0uY29sb249TS5jbG9zZVNxdWFyZT1NLmNsb3NlUGFyZW50aGVzaXM9TS5jYXJldD1NLmJhbmc9TS5iYWNrc2xhc2g9TS5hdD1NLmFzdGVyaXNrPU0uYW1wZXJzYW5kPXZvaWQgMDt2YXIgWVM9Mzg7TS5hbXBlcnNhbmQ9WVM7dmFyIEtTPTQyO00uYXN0ZXJpc2s9S1M7dmFyIFhTPTY0O00uYXQ9WFM7dmFyIFpTPTQ0O00uY29tbWE9WlM7dmFyIEpTPTU4O00uY29sb249SlM7dmFyIGVBPTU5O00uc2VtaWNvbG9uPWVBO3ZhciB0QT00MDtNLm9wZW5QYXJlbnRoZXNpcz10QTt2YXIgckE9NDE7TS5jbG9zZVBhcmVudGhlc2lzPXJBO3ZhciBpQT05MTtNLm9wZW5TcXVhcmU9aUE7dmFyIG5BPTkzO00uY2xvc2VTcXVhcmU9bkE7dmFyIHNBPTM2O00uZG9sbGFyPXNBO3ZhciBhQT0xMjY7TS50aWxkZT1hQTt2YXIgb0E9OTQ7TS5jYXJldD1vQTt2YXIgbEE9NDM7TS5wbHVzPWxBO3ZhciB1QT02MTtNLmVxdWFscz11QTt2YXIgZkE9MTI0O00ucGlwZT1mQTt2YXIgY0E9NjI7TS5ncmVhdGVyVGhhbj1jQTt2YXIgcEE9MzI7TS5zcGFjZT1wQTt2YXIgY2Q9Mzk7TS5zaW5nbGVRdW90ZT1jZDt2YXIgZEE9MzQ7TS5kb3VibGVRdW90ZT1kQTt2YXIgaEE9NDc7TS5zbGFzaD1oQTt2YXIgbUE9MzM7TS5iYW5nPW1BO3ZhciBnQT05MjtNLmJhY2tzbGFzaD1nQTt2YXIgeUE9MTM7TS5jcj15QTt2YXIgYkE9MTI7TS5mZWVkPWJBO3ZhciB3QT0xMDtNLm5ld2xpbmU9d0E7dmFyIHZBPTk7TS50YWI9dkE7dmFyIHhBPWNkO00uc3RyPXhBO3ZhciBrQT0tMTtNLmNvbW1lbnQ9a0E7dmFyIFNBPS0yO00ud29yZD1TQTt2YXIgQUE9LTM7TS5jb21iaW5hdG9yPUFBfSk7dmFyIGhkPXgoeGk9Pnt1KCk7InVzZSBzdHJpY3QiO3hpLl9fZXNNb2R1bGU9ITA7eGkuRklFTERTPXZvaWQgMDt4aS5kZWZhdWx0PVBBO3ZhciBEPUNBKGxvKCkpLG5yLHRlO2Z1bmN0aW9uIHBkKHIpe2lmKHR5cGVvZiBXZWFrTWFwIT0iZnVuY3Rpb24iKXJldHVybiBudWxsO3ZhciBlPW5ldyBXZWFrTWFwLHQ9bmV3IFdlYWtNYXA7cmV0dXJuKHBkPWZ1bmN0aW9uKG4pe3JldHVybiBuP3Q6ZX0pKHIpfWZ1bmN0aW9uIENBKHIsZSl7aWYoIWUmJnImJnIuX19lc01vZHVsZSlyZXR1cm4gcjtpZihyPT09bnVsbHx8dHlwZW9mIHIhPSJvYmplY3QiJiZ0eXBlb2YgciE9ImZ1bmN0aW9uIilyZXR1cm57ZGVmYXVsdDpyfTt2YXIgdD1wZChlKTtpZih0JiZ0LmhhcyhyKSlyZXR1cm4gdC5nZXQocik7dmFyIGk9e30sbj1PYmplY3QuZGVmaW5lUHJvcGVydHkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7Zm9yKHZhciBzIGluIHIpaWYocyE9PSJkZWZhdWx0IiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIscykpe3ZhciBhPW4/T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLHMpOm51bGw7YSYmKGEuZ2V0fHxhLnNldCk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyxhKTppW3NdPXJbc119cmV0dXJuIGkuZGVmYXVsdD1yLHQmJnQuc2V0KHIsaSksaX12YXIgX0E9KG5yPXt9LG5yW0QudGFiXT0hMCxucltELm5ld2xpbmVdPSEwLG5yW0QuY3JdPSEwLG5yW0QuZmVlZF09ITAsbnIpLEVBPSh0ZT17fSx0ZVtELnNwYWNlXT0hMCx0ZVtELnRhYl09ITAsdGVbRC5uZXdsaW5lXT0hMCx0ZVtELmNyXT0hMCx0ZVtELmZlZWRdPSEwLHRlW0QuYW1wZXJzYW5kXT0hMCx0ZVtELmFzdGVyaXNrXT0hMCx0ZVtELmJhbmddPSEwLHRlW0QuY29tbWFdPSEwLHRlW0QuY29sb25dPSEwLHRlW0Quc2VtaWNvbG9uXT0hMCx0ZVtELm9wZW5QYXJlbnRoZXNpc109ITAsdGVbRC5jbG9zZVBhcmVudGhlc2lzXT0hMCx0ZVtELm9wZW5TcXVhcmVdPSEwLHRlW0QuY2xvc2VTcXVhcmVdPSEwLHRlW0Quc2luZ2xlUXVvdGVdPSEwLHRlW0QuZG91YmxlUXVvdGVdPSEwLHRlW0QucGx1c109ITAsdGVbRC5waXBlXT0hMCx0ZVtELnRpbGRlXT0hMCx0ZVtELmdyZWF0ZXJUaGFuXT0hMCx0ZVtELmVxdWFsc109ITAsdGVbRC5kb2xsYXJdPSEwLHRlW0QuY2FyZXRdPSEwLHRlW0Quc2xhc2hdPSEwLHRlKSx1bz17fSxkZD0iMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiI7Zm9yKFVuPTA7VW48ZGQubGVuZ3RoO1VuKyspdW9bZGQuY2hhckNvZGVBdChVbildPSEwO3ZhciBVbjtmdW5jdGlvbiBPQShyLGUpe3ZhciB0PWUsaTtkb3tpZihpPXIuY2hhckNvZGVBdCh0KSxFQVtpXSlyZXR1cm4gdC0xO2k9PT1ELmJhY2tzbGFzaD90PVRBKHIsdCkrMTp0Kyt9d2hpbGUodDxyLmxlbmd0aCk7cmV0dXJuIHQtMX1mdW5jdGlvbiBUQShyLGUpe3ZhciB0PWUsaT1yLmNoYXJDb2RlQXQodCsxKTtpZighX0FbaV0paWYodW9baV0pe3ZhciBuPTA7ZG8gdCsrLG4rKyxpPXIuY2hhckNvZGVBdCh0KzEpO3doaWxlKHVvW2ldJiZuPDYpO248NiYmaT09PUQuc3BhY2UmJnQrK31lbHNlIHQrKztyZXR1cm4gdH12YXIgUkE9e1RZUEU6MCxTVEFSVF9MSU5FOjEsU1RBUlRfQ09MOjIsRU5EX0xJTkU6MyxFTkRfQ09MOjQsU1RBUlRfUE9TOjUsRU5EX1BPUzo2fTt4aS5GSUVMRFM9UkE7ZnVuY3Rpb24gUEEocil7dmFyIGU9W10sdD1yLmNzcy52YWx1ZU9mKCksaT10LG49aS5sZW5ndGgscz0tMSxhPTEsbz0wLGw9MCxjLGYsZCxwLGgsYix2LHksdyxrLFMsRSxUO2Z1bmN0aW9uIEIoTixSKXtpZihyLnNhZmUpdCs9Uix3PXQubGVuZ3RoLTE7ZWxzZSB0aHJvdyByLmVycm9yKCJVbmNsb3NlZCAiK04sYSxvLXMsbyl9Zm9yKDtvPG47KXtzd2l0Y2goYz10LmNoYXJDb2RlQXQobyksYz09PUQubmV3bGluZSYmKHM9byxhKz0xKSxjKXtjYXNlIEQuc3BhY2U6Y2FzZSBELnRhYjpjYXNlIEQubmV3bGluZTpjYXNlIEQuY3I6Y2FzZSBELmZlZWQ6dz1vO2RvIHcrPTEsYz10LmNoYXJDb2RlQXQodyksYz09PUQubmV3bGluZSYmKHM9dyxhKz0xKTt3aGlsZShjPT09RC5zcGFjZXx8Yz09PUQubmV3bGluZXx8Yz09PUQudGFifHxjPT09RC5jcnx8Yz09PUQuZmVlZCk7VD1ELnNwYWNlLHA9YSxkPXctcy0xLGw9dzticmVhaztjYXNlIEQucGx1czpjYXNlIEQuZ3JlYXRlclRoYW46Y2FzZSBELnRpbGRlOmNhc2UgRC5waXBlOnc9bztkbyB3Kz0xLGM9dC5jaGFyQ29kZUF0KHcpO3doaWxlKGM9PT1ELnBsdXN8fGM9PT1ELmdyZWF0ZXJUaGFufHxjPT09RC50aWxkZXx8Yz09PUQucGlwZSk7VD1ELmNvbWJpbmF0b3IscD1hLGQ9by1zLGw9dzticmVhaztjYXNlIEQuYXN0ZXJpc2s6Y2FzZSBELmFtcGVyc2FuZDpjYXNlIEQuYmFuZzpjYXNlIEQuY29tbWE6Y2FzZSBELmVxdWFsczpjYXNlIEQuZG9sbGFyOmNhc2UgRC5jYXJldDpjYXNlIEQub3BlblNxdWFyZTpjYXNlIEQuY2xvc2VTcXVhcmU6Y2FzZSBELmNvbG9uOmNhc2UgRC5zZW1pY29sb246Y2FzZSBELm9wZW5QYXJlbnRoZXNpczpjYXNlIEQuY2xvc2VQYXJlbnRoZXNpczp3PW8sVD1jLHA9YSxkPW8tcyxsPXcrMTticmVhaztjYXNlIEQuc2luZ2xlUXVvdGU6Y2FzZSBELmRvdWJsZVF1b3RlOkU9Yz09PUQuc2luZ2xlUXVvdGU/IiciOiciJyx3PW87ZG8gZm9yKGg9ITEsdz10LmluZGV4T2YoRSx3KzEpLHc9PT0tMSYmQigicXVvdGUiLEUpLGI9dzt0LmNoYXJDb2RlQXQoYi0xKT09PUQuYmFja3NsYXNoOyliLT0xLGg9IWg7d2hpbGUoaCk7VD1ELnN0cixwPWEsZD1vLXMsbD13KzE7YnJlYWs7ZGVmYXVsdDpjPT09RC5zbGFzaCYmdC5jaGFyQ29kZUF0KG8rMSk9PT1ELmFzdGVyaXNrPyh3PXQuaW5kZXhPZigiKi8iLG8rMikrMSx3PT09MCYmQigiY29tbWVudCIsIiovIiksZj10LnNsaWNlKG8sdysxKSx5PWYuc3BsaXQoYApgKSx2PXkubGVuZ3RoLTEsdj4wPyhrPWErdixTPXcteVt2XS5sZW5ndGgpOihrPWEsUz1zKSxUPUQuY29tbWVudCxhPWsscD1rLGQ9dy1TKTpjPT09RC5zbGFzaD8odz1vLFQ9YyxwPWEsZD1vLXMsbD13KzEpOih3PU9BKHQsbyksVD1ELndvcmQscD1hLGQ9dy1zKSxsPXcrMTticmVha31lLnB1c2goW1QsYSxvLXMscCxkLG8sbF0pLFMmJihzPVMsUz1udWxsKSxvPWx9cmV0dXJuIGV9fSk7dmFyIGtkPXgoKGtpLHhkKT0+e3UoKTsidXNlIHN0cmljdCI7a2kuX19lc01vZHVsZT0hMDtraS5kZWZhdWx0PXZvaWQgMDt2YXIgSUE9amUoRGEoKSksZm89amUoJGEoKSksREE9amUoTmEoKSksbWQ9amUoRmEoKSkscUE9amUoemEoKSksJEE9amUoSGEoKSksY289amUoR2EoKSksTEE9amUoWWEoKSksZ2Q9Vm4odG8oKSksTUE9amUoaW8oKSkscG89amUoc28oKSksTkE9amUob28oKSksQkE9amUoZmQoKSksTz1WbihoZCgpKSxxPVZuKGxvKCkpLEZBPVZuKFNlKCkpLHVlPWlpKCksVnQsaG87ZnVuY3Rpb24geWQocil7aWYodHlwZW9mIFdlYWtNYXAhPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7dmFyIGU9bmV3IFdlYWtNYXAsdD1uZXcgV2Vha01hcDtyZXR1cm4oeWQ9ZnVuY3Rpb24obil7cmV0dXJuIG4/dDplfSkocil9ZnVuY3Rpb24gVm4ocixlKXtpZighZSYmciYmci5fX2VzTW9kdWxlKXJldHVybiByO2lmKHI9PT1udWxsfHx0eXBlb2YgciE9Im9iamVjdCImJnR5cGVvZiByIT0iZnVuY3Rpb24iKXJldHVybntkZWZhdWx0OnJ9O3ZhciB0PXlkKGUpO2lmKHQmJnQuaGFzKHIpKXJldHVybiB0LmdldChyKTt2YXIgaT17fSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmb3IodmFyIHMgaW4gcilpZihzIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixzKSl7dmFyIGE9bj9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIscyk6bnVsbDthJiYoYS5nZXR8fGEuc2V0KT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaSxzLGEpOmlbc109cltzXX1yZXR1cm4gaS5kZWZhdWx0PXIsdCYmdC5zZXQocixpKSxpfWZ1bmN0aW9uIGplKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1mdW5jdGlvbiBiZChyLGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgaT1lW3RdO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsaS5rZXksaSl9fWZ1bmN0aW9uIGpBKHIsZSx0KXtyZXR1cm4gZSYmYmQoci5wcm90b3R5cGUsZSksdCYmYmQocix0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxyfXZhciBtbz0oVnQ9e30sVnRbcS5zcGFjZV09ITAsVnRbcS5jcl09ITAsVnRbcS5mZWVkXT0hMCxWdFtxLm5ld2xpbmVdPSEwLFZ0W3EudGFiXT0hMCxWdCksekE9T2JqZWN0LmFzc2lnbih7fSxtbywoaG89e30saG9bcS5jb21tZW50XT0hMCxobykpO2Z1bmN0aW9uIHdkKHIpe3JldHVybntsaW5lOnJbTy5GSUVMRFMuU1RBUlRfTElORV0sY29sdW1uOnJbTy5GSUVMRFMuU1RBUlRfQ09MXX19ZnVuY3Rpb24gdmQocil7cmV0dXJue2xpbmU6cltPLkZJRUxEUy5FTkRfTElORV0sY29sdW1uOnJbTy5GSUVMRFMuRU5EX0NPTF19fWZ1bmN0aW9uIEh0KHIsZSx0LGkpe3JldHVybntzdGFydDp7bGluZTpyLGNvbHVtbjplfSxlbmQ6e2xpbmU6dCxjb2x1bW46aX19fWZ1bmN0aW9uIHNyKHIpe3JldHVybiBIdChyW08uRklFTERTLlNUQVJUX0xJTkVdLHJbTy5GSUVMRFMuU1RBUlRfQ09MXSxyW08uRklFTERTLkVORF9MSU5FXSxyW08uRklFTERTLkVORF9DT0xdKX1mdW5jdGlvbiBnbyhyLGUpe2lmKCEhcilyZXR1cm4gSHQocltPLkZJRUxEUy5TVEFSVF9MSU5FXSxyW08uRklFTERTLlNUQVJUX0NPTF0sZVtPLkZJRUxEUy5FTkRfTElORV0sZVtPLkZJRUxEUy5FTkRfQ09MXSl9ZnVuY3Rpb24gYXIocixlKXt2YXIgdD1yW2VdO2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdC5pbmRleE9mKCJcXCIpIT09LTEmJigoMCx1ZS5lbnN1cmVPYmplY3QpKHIsInJhd3MiKSxyW2VdPSgwLHVlLnVuZXNjKSh0KSxyLnJhd3NbZV09PT12b2lkIDAmJihyLnJhd3NbZV09dCkpLHJ9ZnVuY3Rpb24geW8ocixlKXtmb3IodmFyIHQ9LTEsaT1bXTsodD1yLmluZGV4T2YoZSx0KzEpKSE9PS0xOylpLnB1c2godCk7cmV0dXJuIGl9ZnVuY3Rpb24gVUEoKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGFyZ3VtZW50cyk7cmV0dXJuIHIuZmlsdGVyKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9PT1yLmluZGV4T2YoZSl9KX12YXIgVkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKHQsaSl7aT09PXZvaWQgMCYmKGk9e30pLHRoaXMucnVsZT10LHRoaXMub3B0aW9ucz1PYmplY3QuYXNzaWduKHtsb3NzeTohMSxzYWZlOiExfSxpKSx0aGlzLnBvc2l0aW9uPTAsdGhpcy5jc3M9dHlwZW9mIHRoaXMucnVsZT09InN0cmluZyI/dGhpcy5ydWxlOnRoaXMucnVsZS5zZWxlY3Rvcix0aGlzLnRva2Vucz0oMCxPLmRlZmF1bHQpKHtjc3M6dGhpcy5jc3MsZXJyb3I6dGhpcy5fZXJyb3JHZW5lcmF0b3IoKSxzYWZlOnRoaXMub3B0aW9ucy5zYWZlfSk7dmFyIG49Z28odGhpcy50b2tlbnNbMF0sdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdKTt0aGlzLnJvb3Q9bmV3IElBLmRlZmF1bHQoe3NvdXJjZTpufSksdGhpcy5yb290LmVycm9yR2VuZXJhdG9yPXRoaXMuX2Vycm9yR2VuZXJhdG9yKCk7dmFyIHM9bmV3IGZvLmRlZmF1bHQoe3NvdXJjZTp7c3RhcnQ6e2xpbmU6MSxjb2x1bW46MX19LHNvdXJjZUluZGV4OjB9KTt0aGlzLnJvb3QuYXBwZW5kKHMpLHRoaXMuY3VycmVudD1zLHRoaXMubG9vcCgpfXZhciBlPXIucHJvdG90eXBlO3JldHVybiBlLl9lcnJvckdlbmVyYXRvcj1mdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG4scyl7cmV0dXJuIHR5cGVvZiBpLnJ1bGU9PSJzdHJpbmciP25ldyBFcnJvcihuKTppLnJ1bGUuZXJyb3IobixzKX19LGUuYXR0cmlidXRlPWZ1bmN0aW9uKCl7dmFyIGk9W10sbj10aGlzLmN1cnJUb2tlbjtmb3IodGhpcy5wb3NpdGlvbisrO3RoaXMucG9zaXRpb248dGhpcy50b2tlbnMubGVuZ3RoJiZ0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5UWVBFXSE9PXEuY2xvc2VTcXVhcmU7KWkucHVzaCh0aGlzLmN1cnJUb2tlbiksdGhpcy5wb3NpdGlvbisrO2lmKHRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdIT09cS5jbG9zZVNxdWFyZSlyZXR1cm4gdGhpcy5leHBlY3RlZCgiY2xvc2luZyBzcXVhcmUgYnJhY2tldCIsdGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuU1RBUlRfUE9TXSk7dmFyIHM9aS5sZW5ndGgsYT17c291cmNlOkh0KG5bMV0sblsyXSx0aGlzLmN1cnJUb2tlblszXSx0aGlzLmN1cnJUb2tlbls0XSksc291cmNlSW5kZXg6bltPLkZJRUxEUy5TVEFSVF9QT1NdfTtpZihzPT09MSYmIX5bcS53b3JkXS5pbmRleE9mKGlbMF1bTy5GSUVMRFMuVFlQRV0pKXJldHVybiB0aGlzLmV4cGVjdGVkKCJhdHRyaWJ1dGUiLGlbMF1bTy5GSUVMRFMuU1RBUlRfUE9TXSk7Zm9yKHZhciBvPTAsbD0iIixjPSIiLGY9bnVsbCxkPSExO288czspe3ZhciBwPWlbb10saD10aGlzLmNvbnRlbnQocCksYj1pW28rMV07c3dpdGNoKHBbTy5GSUVMRFMuVFlQRV0pe2Nhc2UgcS5zcGFjZTppZihkPSEwLHRoaXMub3B0aW9ucy5sb3NzeSlicmVhaztpZihmKXsoMCx1ZS5lbnN1cmVPYmplY3QpKGEsInNwYWNlcyIsZik7dmFyIHY9YS5zcGFjZXNbZl0uYWZ0ZXJ8fCIiO2Euc3BhY2VzW2ZdLmFmdGVyPXYraDt2YXIgeT0oMCx1ZS5nZXRQcm9wKShhLCJyYXdzIiwic3BhY2VzIixmLCJhZnRlciIpfHxudWxsO3kmJihhLnJhd3Muc3BhY2VzW2ZdLmFmdGVyPXkraCl9ZWxzZSBsPWwraCxjPWMraDticmVhaztjYXNlIHEuYXN0ZXJpc2s6aWYoYltPLkZJRUxEUy5UWVBFXT09PXEuZXF1YWxzKWEub3BlcmF0b3I9aCxmPSJvcGVyYXRvciI7ZWxzZSBpZigoIWEubmFtZXNwYWNlfHxmPT09Im5hbWVzcGFjZSImJiFkKSYmYil7bCYmKCgwLHVlLmVuc3VyZU9iamVjdCkoYSwic3BhY2VzIiwiYXR0cmlidXRlIiksYS5zcGFjZXMuYXR0cmlidXRlLmJlZm9yZT1sLGw9IiIpLGMmJigoMCx1ZS5lbnN1cmVPYmplY3QpKGEsInJhd3MiLCJzcGFjZXMiLCJhdHRyaWJ1dGUiKSxhLnJhd3Muc3BhY2VzLmF0dHJpYnV0ZS5iZWZvcmU9bCxjPSIiKSxhLm5hbWVzcGFjZT0oYS5uYW1lc3BhY2V8fCIiKStoO3ZhciB3PSgwLHVlLmdldFByb3ApKGEsInJhd3MiLCJuYW1lc3BhY2UiKXx8bnVsbDt3JiYoYS5yYXdzLm5hbWVzcGFjZSs9aCksZj0ibmFtZXNwYWNlIn1kPSExO2JyZWFrO2Nhc2UgcS5kb2xsYXI6aWYoZj09PSJ2YWx1ZSIpe3ZhciBrPSgwLHVlLmdldFByb3ApKGEsInJhd3MiLCJ2YWx1ZSIpO2EudmFsdWUrPSIkIixrJiYoYS5yYXdzLnZhbHVlPWsrIiQiKTticmVha31jYXNlIHEuY2FyZXQ6YltPLkZJRUxEUy5UWVBFXT09PXEuZXF1YWxzJiYoYS5vcGVyYXRvcj1oLGY9Im9wZXJhdG9yIiksZD0hMTticmVhaztjYXNlIHEuY29tYmluYXRvcjppZihoPT09In4iJiZiW08uRklFTERTLlRZUEVdPT09cS5lcXVhbHMmJihhLm9wZXJhdG9yPWgsZj0ib3BlcmF0b3IiKSxoIT09InwiKXtkPSExO2JyZWFrfWJbTy5GSUVMRFMuVFlQRV09PT1xLmVxdWFscz8oYS5vcGVyYXRvcj1oLGY9Im9wZXJhdG9yIik6IWEubmFtZXNwYWNlJiYhYS5hdHRyaWJ1dGUmJihhLm5hbWVzcGFjZT0hMCksZD0hMTticmVhaztjYXNlIHEud29yZDppZihiJiZ0aGlzLmNvbnRlbnQoYik9PT0ifCImJmlbbysyXSYmaVtvKzJdW08uRklFTERTLlRZUEVdIT09cS5lcXVhbHMmJiFhLm9wZXJhdG9yJiYhYS5uYW1lc3BhY2UpYS5uYW1lc3BhY2U9aCxmPSJuYW1lc3BhY2UiO2Vsc2UgaWYoIWEuYXR0cmlidXRlfHxmPT09ImF0dHJpYnV0ZSImJiFkKXtsJiYoKDAsdWUuZW5zdXJlT2JqZWN0KShhLCJzcGFjZXMiLCJhdHRyaWJ1dGUiKSxhLnNwYWNlcy5hdHRyaWJ1dGUuYmVmb3JlPWwsbD0iIiksYyYmKCgwLHVlLmVuc3VyZU9iamVjdCkoYSwicmF3cyIsInNwYWNlcyIsImF0dHJpYnV0ZSIpLGEucmF3cy5zcGFjZXMuYXR0cmlidXRlLmJlZm9yZT1jLGM9IiIpLGEuYXR0cmlidXRlPShhLmF0dHJpYnV0ZXx8IiIpK2g7dmFyIFM9KDAsdWUuZ2V0UHJvcCkoYSwicmF3cyIsImF0dHJpYnV0ZSIpfHxudWxsO1MmJihhLnJhd3MuYXR0cmlidXRlKz1oKSxmPSJhdHRyaWJ1dGUifWVsc2UgaWYoIWEudmFsdWUmJmEudmFsdWUhPT0iInx8Zj09PSJ2YWx1ZSImJiEoZHx8YS5xdW90ZU1hcmspKXt2YXIgRT0oMCx1ZS51bmVzYykoaCksVD0oMCx1ZS5nZXRQcm9wKShhLCJyYXdzIiwidmFsdWUiKXx8IiIsQj1hLnZhbHVlfHwiIjthLnZhbHVlPUIrRSxhLnF1b3RlTWFyaz1udWxsLChFIT09aHx8VCkmJigoMCx1ZS5lbnN1cmVPYmplY3QpKGEsInJhd3MiKSxhLnJhd3MudmFsdWU9KFR8fEIpK2gpLGY9InZhbHVlIn1lbHNle3ZhciBOPWg9PT0iaSJ8fGg9PT0iSSI7KGEudmFsdWV8fGEudmFsdWU9PT0iIikmJihhLnF1b3RlTWFya3x8ZCk/KGEuaW5zZW5zaXRpdmU9TiwoIU58fGg9PT0iSSIpJiYoKDAsdWUuZW5zdXJlT2JqZWN0KShhLCJyYXdzIiksYS5yYXdzLmluc2Vuc2l0aXZlRmxhZz1oKSxmPSJpbnNlbnNpdGl2ZSIsbCYmKCgwLHVlLmVuc3VyZU9iamVjdCkoYSwic3BhY2VzIiwiaW5zZW5zaXRpdmUiKSxhLnNwYWNlcy5pbnNlbnNpdGl2ZS5iZWZvcmU9bCxsPSIiKSxjJiYoKDAsdWUuZW5zdXJlT2JqZWN0KShhLCJyYXdzIiwic3BhY2VzIiwiaW5zZW5zaXRpdmUiKSxhLnJhd3Muc3BhY2VzLmluc2Vuc2l0aXZlLmJlZm9yZT1jLGM9IiIpKTooYS52YWx1ZXx8YS52YWx1ZT09PSIiKSYmKGY9InZhbHVlIixhLnZhbHVlKz1oLGEucmF3cy52YWx1ZSYmKGEucmF3cy52YWx1ZSs9aCkpfWQ9ITE7YnJlYWs7Y2FzZSBxLnN0cjppZighYS5hdHRyaWJ1dGV8fCFhLm9wZXJhdG9yKXJldHVybiB0aGlzLmVycm9yKCJFeHBlY3RlZCBhbiBhdHRyaWJ1dGUgZm9sbG93ZWQgYnkgYW4gb3BlcmF0b3IgcHJlY2VkaW5nIHRoZSBzdHJpbmcuIix7aW5kZXg6cFtPLkZJRUxEUy5TVEFSVF9QT1NdfSk7dmFyIFI9KDAsZ2QudW5lc2NhcGVWYWx1ZSkoaCksRj1SLnVuZXNjYXBlZCxZPVIucXVvdGVNYXJrO2EudmFsdWU9RixhLnF1b3RlTWFyaz1ZLGY9InZhbHVlIiwoMCx1ZS5lbnN1cmVPYmplY3QpKGEsInJhd3MiKSxhLnJhd3MudmFsdWU9aCxkPSExO2JyZWFrO2Nhc2UgcS5lcXVhbHM6aWYoIWEuYXR0cmlidXRlKXJldHVybiB0aGlzLmV4cGVjdGVkKCJhdHRyaWJ1dGUiLHBbTy5GSUVMRFMuU1RBUlRfUE9TXSxoKTtpZihhLnZhbHVlKXJldHVybiB0aGlzLmVycm9yKCdVbmV4cGVjdGVkICI9IiBmb3VuZDsgYW4gb3BlcmF0b3Igd2FzIGFscmVhZHkgZGVmaW5lZC4nLHtpbmRleDpwW08uRklFTERTLlNUQVJUX1BPU119KTthLm9wZXJhdG9yPWEub3BlcmF0b3I/YS5vcGVyYXRvcitoOmgsZj0ib3BlcmF0b3IiLGQ9ITE7YnJlYWs7Y2FzZSBxLmNvbW1lbnQ6aWYoZilpZihkfHxiJiZiW08uRklFTERTLlRZUEVdPT09cS5zcGFjZXx8Zj09PSJpbnNlbnNpdGl2ZSIpe3ZhciBfPSgwLHVlLmdldFByb3ApKGEsInNwYWNlcyIsZiwiYWZ0ZXIiKXx8IiIsUT0oMCx1ZS5nZXRQcm9wKShhLCJyYXdzIiwic3BhY2VzIixmLCJhZnRlciIpfHxfOygwLHVlLmVuc3VyZU9iamVjdCkoYSwicmF3cyIsInNwYWNlcyIsZiksYS5yYXdzLnNwYWNlc1tmXS5hZnRlcj1RK2h9ZWxzZXt2YXIgVT1hW2ZdfHwiIixsZT0oMCx1ZS5nZXRQcm9wKShhLCJyYXdzIixmKXx8VTsoMCx1ZS5lbnN1cmVPYmplY3QpKGEsInJhd3MiKSxhLnJhd3NbZl09bGUraH1lbHNlIGM9YytoO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMuZXJyb3IoJ1VuZXhwZWN0ZWQgIicraCsnIiBmb3VuZC4nLHtpbmRleDpwW08uRklFTERTLlNUQVJUX1BPU119KX1vKyt9YXIoYSwiYXR0cmlidXRlIiksYXIoYSwibmFtZXNwYWNlIiksdGhpcy5uZXdOb2RlKG5ldyBnZC5kZWZhdWx0KGEpKSx0aGlzLnBvc2l0aW9uKyt9LGUucGFyc2VXaGl0ZXNwYWNlRXF1aXZhbGVudFRva2Vucz1mdW5jdGlvbihpKXtpPDAmJihpPXRoaXMudG9rZW5zLmxlbmd0aCk7dmFyIG49dGhpcy5wb3NpdGlvbixzPVtdLGE9IiIsbz12b2lkIDA7ZG8gaWYobW9bdGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuVFlQRV1dKXRoaXMub3B0aW9ucy5sb3NzeXx8KGErPXRoaXMuY29udGVudCgpKTtlbHNlIGlmKHRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdPT09cS5jb21tZW50KXt2YXIgbD17fTthJiYobC5iZWZvcmU9YSxhPSIiKSxvPW5ldyBtZC5kZWZhdWx0KHt2YWx1ZTp0aGlzLmNvbnRlbnQoKSxzb3VyY2U6c3IodGhpcy5jdXJyVG9rZW4pLHNvdXJjZUluZGV4OnRoaXMuY3VyclRva2VuW08uRklFTERTLlNUQVJUX1BPU10sc3BhY2VzOmx9KSxzLnB1c2gobyl9d2hpbGUoKyt0aGlzLnBvc2l0aW9uPGkpO2lmKGEpe2lmKG8pby5zcGFjZXMuYWZ0ZXI9YTtlbHNlIGlmKCF0aGlzLm9wdGlvbnMubG9zc3kpe3ZhciBjPXRoaXMudG9rZW5zW25dLGY9dGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbi0xXTtzLnB1c2gobmV3IGNvLmRlZmF1bHQoe3ZhbHVlOiIiLHNvdXJjZTpIdChjW08uRklFTERTLlNUQVJUX0xJTkVdLGNbTy5GSUVMRFMuU1RBUlRfQ09MXSxmW08uRklFTERTLkVORF9MSU5FXSxmW08uRklFTERTLkVORF9DT0xdKSxzb3VyY2VJbmRleDpjW08uRklFTERTLlNUQVJUX1BPU10sc3BhY2VzOntiZWZvcmU6YSxhZnRlcjoiIn19KSl9fXJldHVybiBzfSxlLmNvbnZlcnRXaGl0ZXNwYWNlTm9kZXNUb1NwYWNlPWZ1bmN0aW9uKGksbil7dmFyIHM9dGhpcztuPT09dm9pZCAwJiYobj0hMSk7dmFyIGE9IiIsbz0iIjtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGY9cy5sb3NzeVNwYWNlKGMuc3BhY2VzLmJlZm9yZSxuKSxkPXMubG9zc3lTcGFjZShjLnJhd1NwYWNlQmVmb3JlLG4pO2ErPWYrcy5sb3NzeVNwYWNlKGMuc3BhY2VzLmFmdGVyLG4mJmYubGVuZ3RoPT09MCksbys9ZitjLnZhbHVlK3MubG9zc3lTcGFjZShjLnJhd1NwYWNlQWZ0ZXIsbiYmZC5sZW5ndGg9PT0wKX0pLG89PT1hJiYobz12b2lkIDApO3ZhciBsPXtzcGFjZTphLHJhd1NwYWNlOm99O3JldHVybiBsfSxlLmlzTmFtZWRDb21iaW5hdG9yPWZ1bmN0aW9uKGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnBvc2l0aW9uKSx0aGlzLnRva2Vuc1tpKzBdJiZ0aGlzLnRva2Vuc1tpKzBdW08uRklFTERTLlRZUEVdPT09cS5zbGFzaCYmdGhpcy50b2tlbnNbaSsxXSYmdGhpcy50b2tlbnNbaSsxXVtPLkZJRUxEUy5UWVBFXT09PXEud29yZCYmdGhpcy50b2tlbnNbaSsyXSYmdGhpcy50b2tlbnNbaSsyXVtPLkZJRUxEUy5UWVBFXT09PXEuc2xhc2h9LGUubmFtZWRDb21iaW5hdG9yPWZ1bmN0aW9uKCl7aWYodGhpcy5pc05hbWVkQ29tYmluYXRvcigpKXt2YXIgaT10aGlzLmNvbnRlbnQodGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbisxXSksbj0oMCx1ZS51bmVzYykoaSkudG9Mb3dlckNhc2UoKSxzPXt9O24hPT1pJiYocy52YWx1ZT0iLyIraSsiLyIpO3ZhciBhPW5ldyBwby5kZWZhdWx0KHt2YWx1ZToiLyIrbisiLyIsc291cmNlOkh0KHRoaXMuY3VyclRva2VuW08uRklFTERTLlNUQVJUX0xJTkVdLHRoaXMuY3VyclRva2VuW08uRklFTERTLlNUQVJUX0NPTF0sdGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbisyXVtPLkZJRUxEUy5FTkRfTElORV0sdGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbisyXVtPLkZJRUxEUy5FTkRfQ09MXSksc291cmNlSW5kZXg6dGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuU1RBUlRfUE9TXSxyYXdzOnN9KTtyZXR1cm4gdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9uKzMsYX1lbHNlIHRoaXMudW5leHBlY3RlZCgpfSxlLmNvbWJpbmF0b3I9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO2lmKHRoaXMuY29udGVudCgpPT09InwiKXJldHVybiB0aGlzLm5hbWVzcGFjZSgpO3ZhciBuPXRoaXMubG9jYXRlTmV4dE1lYW5pbmdmdWxUb2tlbih0aGlzLnBvc2l0aW9uKTtpZihuPDB8fHRoaXMudG9rZW5zW25dW08uRklFTERTLlRZUEVdPT09cS5jb21tYXx8dGhpcy50b2tlbnNbbl1bTy5GSUVMRFMuVFlQRV09PT1xLmNsb3NlUGFyZW50aGVzaXMpe3ZhciBzPXRoaXMucGFyc2VXaGl0ZXNwYWNlRXF1aXZhbGVudFRva2VucyhuKTtpZihzLmxlbmd0aD4wKXt2YXIgYT10aGlzLmN1cnJlbnQubGFzdDtpZihhKXt2YXIgbz10aGlzLmNvbnZlcnRXaGl0ZXNwYWNlTm9kZXNUb1NwYWNlKHMpLGw9by5zcGFjZSxjPW8ucmF3U3BhY2U7YyE9PXZvaWQgMCYmKGEucmF3U3BhY2VBZnRlcis9YyksYS5zcGFjZXMuYWZ0ZXIrPWx9ZWxzZSBzLmZvckVhY2goZnVuY3Rpb24oVCl7cmV0dXJuIGkubmV3Tm9kZShUKX0pfXJldHVybn12YXIgZj10aGlzLmN1cnJUb2tlbixkPXZvaWQgMDtuPnRoaXMucG9zaXRpb24mJihkPXRoaXMucGFyc2VXaGl0ZXNwYWNlRXF1aXZhbGVudFRva2VucyhuKSk7dmFyIHA7aWYodGhpcy5pc05hbWVkQ29tYmluYXRvcigpP3A9dGhpcy5uYW1lZENvbWJpbmF0b3IoKTp0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5UWVBFXT09PXEuY29tYmluYXRvcj8ocD1uZXcgcG8uZGVmYXVsdCh7dmFsdWU6dGhpcy5jb250ZW50KCksc291cmNlOnNyKHRoaXMuY3VyclRva2VuKSxzb3VyY2VJbmRleDp0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5TVEFSVF9QT1NdfSksdGhpcy5wb3NpdGlvbisrKTptb1t0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5UWVBFXV18fGR8fHRoaXMudW5leHBlY3RlZCgpLHApe2lmKGQpe3ZhciBoPXRoaXMuY29udmVydFdoaXRlc3BhY2VOb2Rlc1RvU3BhY2UoZCksYj1oLnNwYWNlLHY9aC5yYXdTcGFjZTtwLnNwYWNlcy5iZWZvcmU9YixwLnJhd1NwYWNlQmVmb3JlPXZ9fWVsc2V7dmFyIHk9dGhpcy5jb252ZXJ0V2hpdGVzcGFjZU5vZGVzVG9TcGFjZShkLCEwKSx3PXkuc3BhY2Usaz15LnJhd1NwYWNlO2t8fChrPXcpO3ZhciBTPXt9LEU9e3NwYWNlczp7fX07dy5lbmRzV2l0aCgiICIpJiZrLmVuZHNXaXRoKCIgIik/KFMuYmVmb3JlPXcuc2xpY2UoMCx3Lmxlbmd0aC0xKSxFLnNwYWNlcy5iZWZvcmU9ay5zbGljZSgwLGsubGVuZ3RoLTEpKTp3LnN0YXJ0c1dpdGgoIiAiKSYmay5zdGFydHNXaXRoKCIgIik/KFMuYWZ0ZXI9dy5zbGljZSgxKSxFLnNwYWNlcy5hZnRlcj1rLnNsaWNlKDEpKTpFLnZhbHVlPWsscD1uZXcgcG8uZGVmYXVsdCh7dmFsdWU6IiAiLHNvdXJjZTpnbyhmLHRoaXMudG9rZW5zW3RoaXMucG9zaXRpb24tMV0pLHNvdXJjZUluZGV4OmZbTy5GSUVMRFMuU1RBUlRfUE9TXSxzcGFjZXM6UyxyYXdzOkV9KX1yZXR1cm4gdGhpcy5jdXJyVG9rZW4mJnRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdPT09cS5zcGFjZSYmKHAuc3BhY2VzLmFmdGVyPXRoaXMub3B0aW9uYWxTcGFjZSh0aGlzLmNvbnRlbnQoKSksdGhpcy5wb3NpdGlvbisrKSx0aGlzLm5ld05vZGUocCl9LGUuY29tbWE9ZnVuY3Rpb24oKXtpZih0aGlzLnBvc2l0aW9uPT09dGhpcy50b2tlbnMubGVuZ3RoLTEpe3RoaXMucm9vdC50cmFpbGluZ0NvbW1hPSEwLHRoaXMucG9zaXRpb24rKztyZXR1cm59dGhpcy5jdXJyZW50Ll9pbmZlckVuZFBvc2l0aW9uKCk7dmFyIGk9bmV3IGZvLmRlZmF1bHQoe3NvdXJjZTp7c3RhcnQ6d2QodGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbisxXSl9LHNvdXJjZUluZGV4OnRoaXMudG9rZW5zW3RoaXMucG9zaXRpb24rMV1bTy5GSUVMRFMuU1RBUlRfUE9TXX0pO3RoaXMuY3VycmVudC5wYXJlbnQuYXBwZW5kKGkpLHRoaXMuY3VycmVudD1pLHRoaXMucG9zaXRpb24rK30sZS5jb21tZW50PWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jdXJyVG9rZW47dGhpcy5uZXdOb2RlKG5ldyBtZC5kZWZhdWx0KHt2YWx1ZTp0aGlzLmNvbnRlbnQoKSxzb3VyY2U6c3IoaSksc291cmNlSW5kZXg6aVtPLkZJRUxEUy5TVEFSVF9QT1NdfSkpLHRoaXMucG9zaXRpb24rK30sZS5lcnJvcj1mdW5jdGlvbihpLG4pe3Rocm93IHRoaXMucm9vdC5lcnJvcihpLG4pfSxlLm1pc3NpbmdCYWNrc2xhc2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcigiRXhwZWN0ZWQgYSBiYWNrc2xhc2ggcHJlY2VkaW5nIHRoZSBzZW1pY29sb24uIix7aW5kZXg6dGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuU1RBUlRfUE9TXX0pfSxlLm1pc3NpbmdQYXJlbnRoZXNpcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGVjdGVkKCJvcGVuaW5nIHBhcmVudGhlc2lzIix0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5TVEFSVF9QT1NdKX0sZS5taXNzaW5nU3F1YXJlQnJhY2tldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4cGVjdGVkKCJvcGVuaW5nIHNxdWFyZSBicmFja2V0Iix0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5TVEFSVF9QT1NdKX0sZS51bmV4cGVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3IoIlVuZXhwZWN0ZWQgJyIrdGhpcy5jb250ZW50KCkrIicuIEVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycyB3aXRoIFxcIG1heSBoZWxwLiIsdGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuU1RBUlRfUE9TXSl9LGUudW5leHBlY3RlZFBpcGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcnJvcigiVW5leHBlY3RlZCAnfCcuIix0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5TVEFSVF9QT1NdKX0sZS5uYW1lc3BhY2U9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLnByZXZUb2tlbiYmdGhpcy5jb250ZW50KHRoaXMucHJldlRva2VuKXx8ITA7aWYodGhpcy5uZXh0VG9rZW5bTy5GSUVMRFMuVFlQRV09PT1xLndvcmQpcmV0dXJuIHRoaXMucG9zaXRpb24rKyx0aGlzLndvcmQoaSk7aWYodGhpcy5uZXh0VG9rZW5bTy5GSUVMRFMuVFlQRV09PT1xLmFzdGVyaXNrKXJldHVybiB0aGlzLnBvc2l0aW9uKyssdGhpcy51bml2ZXJzYWwoaSk7dGhpcy51bmV4cGVjdGVkUGlwZSgpfSxlLm5lc3Rpbmc9ZnVuY3Rpb24oKXtpZih0aGlzLm5leHRUb2tlbil7dmFyIGk9dGhpcy5jb250ZW50KHRoaXMubmV4dFRva2VuKTtpZihpPT09InwiKXt0aGlzLnBvc2l0aW9uKys7cmV0dXJufX12YXIgbj10aGlzLmN1cnJUb2tlbjt0aGlzLm5ld05vZGUobmV3IE5BLmRlZmF1bHQoe3ZhbHVlOnRoaXMuY29udGVudCgpLHNvdXJjZTpzcihuKSxzb3VyY2VJbmRleDpuW08uRklFTERTLlNUQVJUX1BPU119KSksdGhpcy5wb3NpdGlvbisrfSxlLnBhcmVudGhlc2VzPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jdXJyZW50Lmxhc3Qsbj0xO2lmKHRoaXMucG9zaXRpb24rKyxpJiZpLnR5cGU9PT1GQS5QU0VVRE8pe3ZhciBzPW5ldyBmby5kZWZhdWx0KHtzb3VyY2U6e3N0YXJ0OndkKHRoaXMudG9rZW5zW3RoaXMucG9zaXRpb25dKX0sc291cmNlSW5kZXg6dGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbl1bTy5GSUVMRFMuU1RBUlRfUE9TXX0pLGE9dGhpcy5jdXJyZW50O2ZvcihpLmFwcGVuZChzKSx0aGlzLmN1cnJlbnQ9czt0aGlzLnBvc2l0aW9uPHRoaXMudG9rZW5zLmxlbmd0aCYmbjspdGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuVFlQRV09PT1xLm9wZW5QYXJlbnRoZXNpcyYmbisrLHRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdPT09cS5jbG9zZVBhcmVudGhlc2lzJiZuLS0sbj90aGlzLnBhcnNlKCk6KHRoaXMuY3VycmVudC5zb3VyY2UuZW5kPXZkKHRoaXMuY3VyclRva2VuKSx0aGlzLmN1cnJlbnQucGFyZW50LnNvdXJjZS5lbmQ9dmQodGhpcy5jdXJyVG9rZW4pLHRoaXMucG9zaXRpb24rKyk7dGhpcy5jdXJyZW50PWF9ZWxzZXtmb3IodmFyIG89dGhpcy5jdXJyVG9rZW4sbD0iKCIsYzt0aGlzLnBvc2l0aW9uPHRoaXMudG9rZW5zLmxlbmd0aCYmbjspdGhpcy5jdXJyVG9rZW5bTy5GSUVMRFMuVFlQRV09PT1xLm9wZW5QYXJlbnRoZXNpcyYmbisrLHRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdPT09cS5jbG9zZVBhcmVudGhlc2lzJiZuLS0sYz10aGlzLmN1cnJUb2tlbixsKz10aGlzLnBhcnNlUGFyZW50aGVzaXNUb2tlbih0aGlzLmN1cnJUb2tlbiksdGhpcy5wb3NpdGlvbisrO2k/aS5hcHBlbmRUb1Byb3BlcnR5QW5kRXNjYXBlKCJ2YWx1ZSIsbCxsKTp0aGlzLm5ld05vZGUobmV3IGNvLmRlZmF1bHQoe3ZhbHVlOmwsc291cmNlOkh0KG9bTy5GSUVMRFMuU1RBUlRfTElORV0sb1tPLkZJRUxEUy5TVEFSVF9DT0xdLGNbTy5GSUVMRFMuRU5EX0xJTkVdLGNbTy5GSUVMRFMuRU5EX0NPTF0pLHNvdXJjZUluZGV4Om9bTy5GSUVMRFMuU1RBUlRfUE9TXX0pKX1pZihuKXJldHVybiB0aGlzLmV4cGVjdGVkKCJjbG9zaW5nIHBhcmVudGhlc2lzIix0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5TVEFSVF9QT1NdKX0sZS5wc2V1ZG89ZnVuY3Rpb24oKXtmb3IodmFyIGk9dGhpcyxuPSIiLHM9dGhpcy5jdXJyVG9rZW47dGhpcy5jdXJyVG9rZW4mJnRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdPT09cS5jb2xvbjspbis9dGhpcy5jb250ZW50KCksdGhpcy5wb3NpdGlvbisrO2lmKCF0aGlzLmN1cnJUb2tlbilyZXR1cm4gdGhpcy5leHBlY3RlZChbInBzZXVkby1jbGFzcyIsInBzZXVkby1lbGVtZW50Il0sdGhpcy5wb3NpdGlvbi0xKTtpZih0aGlzLmN1cnJUb2tlbltPLkZJRUxEUy5UWVBFXT09PXEud29yZCl0aGlzLnNwbGl0V29yZCghMSxmdW5jdGlvbihhLG8pe24rPWEsaS5uZXdOb2RlKG5ldyBMQS5kZWZhdWx0KHt2YWx1ZTpuLHNvdXJjZTpnbyhzLGkuY3VyclRva2VuKSxzb3VyY2VJbmRleDpzW08uRklFTERTLlNUQVJUX1BPU119KSksbz4xJiZpLm5leHRUb2tlbiYmaS5uZXh0VG9rZW5bTy5GSUVMRFMuVFlQRV09PT1xLm9wZW5QYXJlbnRoZXNpcyYmaS5lcnJvcigiTWlzcGxhY2VkIHBhcmVudGhlc2lzLiIse2luZGV4OmkubmV4dFRva2VuW08uRklFTERTLlNUQVJUX1BPU119KX0pO2Vsc2UgcmV0dXJuIHRoaXMuZXhwZWN0ZWQoWyJwc2V1ZG8tY2xhc3MiLCJwc2V1ZG8tZWxlbWVudCJdLHRoaXMuY3VyclRva2VuW08uRklFTERTLlNUQVJUX1BPU10pfSxlLnNwYWNlPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jb250ZW50KCk7dGhpcy5wb3NpdGlvbj09PTB8fHRoaXMucHJldlRva2VuW08uRklFTERTLlRZUEVdPT09cS5jb21tYXx8dGhpcy5wcmV2VG9rZW5bTy5GSUVMRFMuVFlQRV09PT1xLm9wZW5QYXJlbnRoZXNpc3x8dGhpcy5jdXJyZW50Lm5vZGVzLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnR5cGU9PT0iY29tbWVudCJ9KT8odGhpcy5zcGFjZXM9dGhpcy5vcHRpb25hbFNwYWNlKGkpLHRoaXMucG9zaXRpb24rKyk6dGhpcy5wb3NpdGlvbj09PXRoaXMudG9rZW5zLmxlbmd0aC0xfHx0aGlzLm5leHRUb2tlbltPLkZJRUxEUy5UWVBFXT09PXEuY29tbWF8fHRoaXMubmV4dFRva2VuW08uRklFTERTLlRZUEVdPT09cS5jbG9zZVBhcmVudGhlc2lzPyh0aGlzLmN1cnJlbnQubGFzdC5zcGFjZXMuYWZ0ZXI9dGhpcy5vcHRpb25hbFNwYWNlKGkpLHRoaXMucG9zaXRpb24rKyk6dGhpcy5jb21iaW5hdG9yKCl9LGUuc3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5jdXJyVG9rZW47dGhpcy5uZXdOb2RlKG5ldyBjby5kZWZhdWx0KHt2YWx1ZTp0aGlzLmNvbnRlbnQoKSxzb3VyY2U6c3IoaSksc291cmNlSW5kZXg6aVtPLkZJRUxEUy5TVEFSVF9QT1NdfSkpLHRoaXMucG9zaXRpb24rK30sZS51bml2ZXJzYWw9ZnVuY3Rpb24oaSl7dmFyIG49dGhpcy5uZXh0VG9rZW47aWYobiYmdGhpcy5jb250ZW50KG4pPT09InwiKXJldHVybiB0aGlzLnBvc2l0aW9uKyssdGhpcy5uYW1lc3BhY2UoKTt2YXIgcz10aGlzLmN1cnJUb2tlbjt0aGlzLm5ld05vZGUobmV3IE1BLmRlZmF1bHQoe3ZhbHVlOnRoaXMuY29udGVudCgpLHNvdXJjZTpzcihzKSxzb3VyY2VJbmRleDpzW08uRklFTERTLlNUQVJUX1BPU119KSxpKSx0aGlzLnBvc2l0aW9uKyt9LGUuc3BsaXRXb3JkPWZ1bmN0aW9uKGksbil7Zm9yKHZhciBzPXRoaXMsYT10aGlzLm5leHRUb2tlbixvPXRoaXMuY29udGVudCgpO2EmJn5bcS5kb2xsYXIscS5jYXJldCxxLmVxdWFscyxxLndvcmRdLmluZGV4T2YoYVtPLkZJRUxEUy5UWVBFXSk7KXt0aGlzLnBvc2l0aW9uKys7dmFyIGw9dGhpcy5jb250ZW50KCk7aWYobys9bCxsLmxhc3RJbmRleE9mKCJcXCIpPT09bC5sZW5ndGgtMSl7dmFyIGM9dGhpcy5uZXh0VG9rZW47YyYmY1tPLkZJRUxEUy5UWVBFXT09PXEuc3BhY2UmJihvKz10aGlzLnJlcXVpcmVkU3BhY2UodGhpcy5jb250ZW50KGMpKSx0aGlzLnBvc2l0aW9uKyspfWE9dGhpcy5uZXh0VG9rZW59dmFyIGY9eW8obywiLiIpLmZpbHRlcihmdW5jdGlvbihiKXt2YXIgdj1vW2ItMV09PT0iXFwiLHk9L15cZCtcLlxkKyUkLy50ZXN0KG8pO3JldHVybiF2JiYheX0pLGQ9eW8obywiIyIpLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gb1tiLTFdIT09IlxcIn0pLHA9eW8obywiI3siKTtwLmxlbmd0aCYmKGQ9ZC5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIX5wLmluZGV4T2YoYil9KSk7dmFyIGg9KDAsQkEuZGVmYXVsdCkoVUEoWzBdLmNvbmNhdChmLGQpKSk7aC5mb3JFYWNoKGZ1bmN0aW9uKGIsdil7dmFyIHk9aFt2KzFdfHxvLmxlbmd0aCx3PW8uc2xpY2UoYix5KTtpZih2PT09MCYmbilyZXR1cm4gbi5jYWxsKHMsdyxoLmxlbmd0aCk7dmFyIGssUz1zLmN1cnJUb2tlbixFPVNbTy5GSUVMRFMuU1RBUlRfUE9TXStoW3ZdLFQ9SHQoU1sxXSxTWzJdK2IsU1szXSxTWzJdKyh5LTEpKTtpZih+Zi5pbmRleE9mKGIpKXt2YXIgQj17dmFsdWU6dy5zbGljZSgxKSxzb3VyY2U6VCxzb3VyY2VJbmRleDpFfTtrPW5ldyBEQS5kZWZhdWx0KGFyKEIsInZhbHVlIikpfWVsc2UgaWYofmQuaW5kZXhPZihiKSl7dmFyIE49e3ZhbHVlOncuc2xpY2UoMSksc291cmNlOlQsc291cmNlSW5kZXg6RX07az1uZXcgcUEuZGVmYXVsdChhcihOLCJ2YWx1ZSIpKX1lbHNle3ZhciBSPXt2YWx1ZTp3LHNvdXJjZTpULHNvdXJjZUluZGV4OkV9O2FyKFIsInZhbHVlIiksaz1uZXcgJEEuZGVmYXVsdChSKX1zLm5ld05vZGUoayxpKSxpPW51bGx9KSx0aGlzLnBvc2l0aW9uKyt9LGUud29yZD1mdW5jdGlvbihpKXt2YXIgbj10aGlzLm5leHRUb2tlbjtyZXR1cm4gbiYmdGhpcy5jb250ZW50KG4pPT09InwiPyh0aGlzLnBvc2l0aW9uKyssdGhpcy5uYW1lc3BhY2UoKSk6dGhpcy5zcGxpdFdvcmQoaSl9LGUubG9vcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5wb3NpdGlvbjx0aGlzLnRva2Vucy5sZW5ndGg7KXRoaXMucGFyc2UoITApO3JldHVybiB0aGlzLmN1cnJlbnQuX2luZmVyRW5kUG9zaXRpb24oKSx0aGlzLnJvb3R9LGUucGFyc2U9ZnVuY3Rpb24oaSl7c3dpdGNoKHRoaXMuY3VyclRva2VuW08uRklFTERTLlRZUEVdKXtjYXNlIHEuc3BhY2U6dGhpcy5zcGFjZSgpO2JyZWFrO2Nhc2UgcS5jb21tZW50OnRoaXMuY29tbWVudCgpO2JyZWFrO2Nhc2UgcS5vcGVuUGFyZW50aGVzaXM6dGhpcy5wYXJlbnRoZXNlcygpO2JyZWFrO2Nhc2UgcS5jbG9zZVBhcmVudGhlc2lzOmkmJnRoaXMubWlzc2luZ1BhcmVudGhlc2lzKCk7YnJlYWs7Y2FzZSBxLm9wZW5TcXVhcmU6dGhpcy5hdHRyaWJ1dGUoKTticmVhaztjYXNlIHEuZG9sbGFyOmNhc2UgcS5jYXJldDpjYXNlIHEuZXF1YWxzOmNhc2UgcS53b3JkOnRoaXMud29yZCgpO2JyZWFrO2Nhc2UgcS5jb2xvbjp0aGlzLnBzZXVkbygpO2JyZWFrO2Nhc2UgcS5jb21tYTp0aGlzLmNvbW1hKCk7YnJlYWs7Y2FzZSBxLmFzdGVyaXNrOnRoaXMudW5pdmVyc2FsKCk7YnJlYWs7Y2FzZSBxLmFtcGVyc2FuZDp0aGlzLm5lc3RpbmcoKTticmVhaztjYXNlIHEuc2xhc2g6Y2FzZSBxLmNvbWJpbmF0b3I6dGhpcy5jb21iaW5hdG9yKCk7YnJlYWs7Y2FzZSBxLnN0cjp0aGlzLnN0cmluZygpO2JyZWFrO2Nhc2UgcS5jbG9zZVNxdWFyZTp0aGlzLm1pc3NpbmdTcXVhcmVCcmFja2V0KCk7Y2FzZSBxLnNlbWljb2xvbjp0aGlzLm1pc3NpbmdCYWNrc2xhc2goKTtkZWZhdWx0OnRoaXMudW5leHBlY3RlZCgpfX0sZS5leHBlY3RlZD1mdW5jdGlvbihpLG4scyl7aWYoQXJyYXkuaXNBcnJheShpKSl7dmFyIGE9aS5wb3AoKTtpPWkuam9pbigiLCAiKSsiIG9yICIrYX12YXIgbz0vXlthZWlvdV0vLnRlc3QoaVswXSk/ImFuIjoiYSI7cmV0dXJuIHM/dGhpcy5lcnJvcigiRXhwZWN0ZWQgIitvKyIgIitpKycsIGZvdW5kICInK3MrJyIgaW5zdGVhZC4nLHtpbmRleDpufSk6dGhpcy5lcnJvcigiRXhwZWN0ZWQgIitvKyIgIitpKyIuIix7aW5kZXg6bn0pfSxlLnJlcXVpcmVkU3BhY2U9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3NzeT8iICI6aX0sZS5vcHRpb25hbFNwYWNlPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLm9wdGlvbnMubG9zc3k/IiI6aX0sZS5sb3NzeVNwYWNlPWZ1bmN0aW9uKGksbil7cmV0dXJuIHRoaXMub3B0aW9ucy5sb3NzeT9uPyIgIjoiIjppfSxlLnBhcnNlUGFyZW50aGVzaXNUb2tlbj1mdW5jdGlvbihpKXt2YXIgbj10aGlzLmNvbnRlbnQoaSk7cmV0dXJuIGlbTy5GSUVMRFMuVFlQRV09PT1xLnNwYWNlP3RoaXMucmVxdWlyZWRTcGFjZShuKTpufSxlLm5ld05vZGU9ZnVuY3Rpb24oaSxuKXtyZXR1cm4gbiYmKC9eICskLy50ZXN0KG4pJiYodGhpcy5vcHRpb25zLmxvc3N5fHwodGhpcy5zcGFjZXM9KHRoaXMuc3BhY2VzfHwiIikrbiksbj0hMCksaS5uYW1lc3BhY2U9bixhcihpLCJuYW1lc3BhY2UiKSksdGhpcy5zcGFjZXMmJihpLnNwYWNlcy5iZWZvcmU9dGhpcy5zcGFjZXMsdGhpcy5zcGFjZXM9IiIpLHRoaXMuY3VycmVudC5hcHBlbmQoaSl9LGUuY29udGVudD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PXZvaWQgMCYmKGk9dGhpcy5jdXJyVG9rZW4pLHRoaXMuY3NzLnNsaWNlKGlbTy5GSUVMRFMuU1RBUlRfUE9TXSxpW08uRklFTERTLkVORF9QT1NdKX0sZS5sb2NhdGVOZXh0TWVhbmluZ2Z1bFRva2VuPWZ1bmN0aW9uKGkpe2k9PT12b2lkIDAmJihpPXRoaXMucG9zaXRpb24rMSk7Zm9yKHZhciBuPWk7bjx0aGlzLnRva2Vucy5sZW5ndGg7KWlmKHpBW3RoaXMudG9rZW5zW25dW08uRklFTERTLlRZUEVdXSl7bisrO2NvbnRpbnVlfWVsc2UgcmV0dXJuIG47cmV0dXJuLTF9LGpBKHIsW3trZXk6ImN1cnJUb2tlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMucG9zaXRpb25dfX0se2tleToibmV4dFRva2VuIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5wb3NpdGlvbisxXX19LHtrZXk6InByZXZUb2tlbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMucG9zaXRpb24tMV19fV0pLHJ9KCk7a2kuZGVmYXVsdD1WQTt4ZC5leHBvcnRzPWtpLmRlZmF1bHR9KTt2YXIgQWQ9eCgoU2ksU2QpPT57dSgpOyJ1c2Ugc3RyaWN0IjtTaS5fX2VzTW9kdWxlPSEwO1NpLmRlZmF1bHQ9dm9pZCAwO3ZhciBIQT1XQShrZCgpKTtmdW5jdGlvbiBXQShyKXtyZXR1cm4gciYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn19dmFyIEdBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcih0LGkpe3RoaXMuZnVuYz10fHxmdW5jdGlvbigpe30sdGhpcy5mdW5jUmVzPW51bGwsdGhpcy5vcHRpb25zPWl9dmFyIGU9ci5wcm90b3R5cGU7cmV0dXJuIGUuX3Nob3VsZFVwZGF0ZVNlbGVjdG9yPWZ1bmN0aW9uKGksbil7bj09PXZvaWQgMCYmKG49e30pO3ZhciBzPU9iamVjdC5hc3NpZ24oe30sdGhpcy5vcHRpb25zLG4pO3JldHVybiBzLnVwZGF0ZVNlbGVjdG9yPT09ITE/ITE6dHlwZW9mIGkhPSJzdHJpbmcifSxlLl9pc0xvc3N5PWZ1bmN0aW9uKGkpe2k9PT12b2lkIDAmJihpPXt9KTt2YXIgbj1PYmplY3QuYXNzaWduKHt9LHRoaXMub3B0aW9ucyxpKTtyZXR1cm4gbi5sb3NzbGVzcz09PSExfSxlLl9yb290PWZ1bmN0aW9uKGksbil7bj09PXZvaWQgMCYmKG49e30pO3ZhciBzPW5ldyBIQS5kZWZhdWx0KGksdGhpcy5fcGFyc2VPcHRpb25zKG4pKTtyZXR1cm4gcy5yb290fSxlLl9wYXJzZU9wdGlvbnM9ZnVuY3Rpb24oaSl7cmV0dXJue2xvc3N5OnRoaXMuX2lzTG9zc3koaSl9fSxlLl9ydW49ZnVuY3Rpb24oaSxuKXt2YXIgcz10aGlzO3JldHVybiBuPT09dm9pZCAwJiYobj17fSksbmV3IFByb21pc2UoZnVuY3Rpb24oYSxvKXt0cnl7dmFyIGw9cy5fcm9vdChpLG4pO1Byb21pc2UucmVzb2x2ZShzLmZ1bmMobCkpLnRoZW4oZnVuY3Rpb24oYyl7dmFyIGY9dm9pZCAwO3JldHVybiBzLl9zaG91bGRVcGRhdGVTZWxlY3RvcihpLG4pJiYoZj1sLnRvU3RyaW5nKCksaS5zZWxlY3Rvcj1mKSx7dHJhbnNmb3JtOmMscm9vdDpsLHN0cmluZzpmfX0pLnRoZW4oYSxvKX1jYXRjaChjKXtvKGMpO3JldHVybn19KX0sZS5fcnVuU3luYz1mdW5jdGlvbihpLG4pe249PT12b2lkIDAmJihuPXt9KTt2YXIgcz10aGlzLl9yb290KGksbiksYT10aGlzLmZ1bmMocyk7aWYoYSYmdHlwZW9mIGEudGhlbj09ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoIlNlbGVjdG9yIHByb2Nlc3NvciByZXR1cm5lZCBhIHByb21pc2UgdG8gYSBzeW5jaHJvbm91cyBjYWxsLiIpO3ZhciBvPXZvaWQgMDtyZXR1cm4gbi51cGRhdGVTZWxlY3RvciYmdHlwZW9mIGkhPSJzdHJpbmciJiYobz1zLnRvU3RyaW5nKCksaS5zZWxlY3Rvcj1vKSx7dHJhbnNmb3JtOmEscm9vdDpzLHN0cmluZzpvfX0sZS5hc3Q9ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5fcnVuKGksbikudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gcy5yb290fSl9LGUuYXN0U3luYz1mdW5jdGlvbihpLG4pe3JldHVybiB0aGlzLl9ydW5TeW5jKGksbikucm9vdH0sZS50cmFuc2Zvcm09ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5fcnVuKGksbikudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gcy50cmFuc2Zvcm19KX0sZS50cmFuc2Zvcm1TeW5jPWZ1bmN0aW9uKGksbil7cmV0dXJuIHRoaXMuX3J1blN5bmMoaSxuKS50cmFuc2Zvcm19LGUucHJvY2Vzcz1mdW5jdGlvbihpLG4pe3JldHVybiB0aGlzLl9ydW4oaSxuKS50aGVuKGZ1bmN0aW9uKHMpe3JldHVybiBzLnN0cmluZ3x8cy5yb290LnRvU3RyaW5nKCl9KX0sZS5wcm9jZXNzU3luYz1mdW5jdGlvbihpLG4pe3ZhciBzPXRoaXMuX3J1blN5bmMoaSxuKTtyZXR1cm4gcy5zdHJpbmd8fHMucm9vdC50b1N0cmluZygpfSxyfSgpO1NpLmRlZmF1bHQ9R0E7U2QuZXhwb3J0cz1TaS5kZWZhdWx0fSk7dmFyIENkPXgobmU9Pnt1KCk7InVzZSBzdHJpY3QiO25lLl9fZXNNb2R1bGU9ITA7bmUudW5pdmVyc2FsPW5lLnRhZz1uZS5zdHJpbmc9bmUuc2VsZWN0b3I9bmUucm9vdD1uZS5wc2V1ZG89bmUubmVzdGluZz1uZS5pZD1uZS5jb21tZW50PW5lLmNvbWJpbmF0b3I9bmUuY2xhc3NOYW1lPW5lLmF0dHJpYnV0ZT12b2lkIDA7dmFyIFFBPXplKHRvKCkpLFlBPXplKE5hKCkpLEtBPXplKHNvKCkpLFhBPXplKEZhKCkpLFpBPXplKHphKCkpLEpBPXplKG9vKCkpLGVDPXplKFlhKCkpLHRDPXplKERhKCkpLHJDPXplKCRhKCkpLGlDPXplKEdhKCkpLG5DPXplKEhhKCkpLHNDPXplKGlvKCkpO2Z1bmN0aW9uIHplKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX12YXIgYUM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBRQS5kZWZhdWx0KGUpfTtuZS5hdHRyaWJ1dGU9YUM7dmFyIG9DPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWUEuZGVmYXVsdChlKX07bmUuY2xhc3NOYW1lPW9DO3ZhciBsQz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IEtBLmRlZmF1bHQoZSl9O25lLmNvbWJpbmF0b3I9bEM7dmFyIHVDPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgWEEuZGVmYXVsdChlKX07bmUuY29tbWVudD11Qzt2YXIgZkM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBaQS5kZWZhdWx0KGUpfTtuZS5pZD1mQzt2YXIgY0M9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBKQS5kZWZhdWx0KGUpfTtuZS5uZXN0aW5nPWNDO3ZhciBwQz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGVDLmRlZmF1bHQoZSl9O25lLnBzZXVkbz1wQzt2YXIgZEM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0Qy5kZWZhdWx0KGUpfTtuZS5yb290PWRDO3ZhciBoQz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJDLmRlZmF1bHQoZSl9O25lLnNlbGVjdG9yPWhDO3ZhciBtQz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGlDLmRlZmF1bHQoZSl9O25lLnN0cmluZz1tQzt2YXIgZ0M9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuQy5kZWZhdWx0KGUpfTtuZS50YWc9Z0M7dmFyIHlDPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgc0MuZGVmYXVsdChlKX07bmUudW5pdmVyc2FsPXlDfSk7dmFyIFRkPXgoWj0+e3UoKTsidXNlIHN0cmljdCI7Wi5fX2VzTW9kdWxlPSEwO1ouaXNDb21tZW50PVouaXNDb21iaW5hdG9yPVouaXNDbGFzc05hbWU9Wi5pc0F0dHJpYnV0ZT12b2lkIDA7Wi5pc0NvbnRhaW5lcj1UQztaLmlzSWRlbnRpZmllcj12b2lkIDA7Wi5pc05hbWVzcGFjZT1SQztaLmlzTmVzdGluZz12b2lkIDA7Wi5pc05vZGU9Ym87Wi5pc1BzZXVkbz12b2lkIDA7Wi5pc1BzZXVkb0NsYXNzPU9DO1ouaXNQc2V1ZG9FbGVtZW50PU9kO1ouaXNVbml2ZXJzYWw9Wi5pc1RhZz1aLmlzU3RyaW5nPVouaXNTZWxlY3Rvcj1aLmlzUm9vdD12b2lkIDA7dmFyIGZlPVNlKCksT2UsYkM9KE9lPXt9LE9lW2ZlLkFUVFJJQlVURV09ITAsT2VbZmUuQ0xBU1NdPSEwLE9lW2ZlLkNPTUJJTkFUT1JdPSEwLE9lW2ZlLkNPTU1FTlRdPSEwLE9lW2ZlLklEXT0hMCxPZVtmZS5ORVNUSU5HXT0hMCxPZVtmZS5QU0VVRE9dPSEwLE9lW2ZlLlJPT1RdPSEwLE9lW2ZlLlNFTEVDVE9SXT0hMCxPZVtmZS5TVFJJTkddPSEwLE9lW2ZlLlRBR109ITAsT2VbZmUuVU5JVkVSU0FMXT0hMCxPZSk7ZnVuY3Rpb24gYm8ocil7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0IiYmYkNbci50eXBlXX1mdW5jdGlvbiBVZShyLGUpe3JldHVybiBibyhlKSYmZS50eXBlPT09cn12YXIgX2Q9VWUuYmluZChudWxsLGZlLkFUVFJJQlVURSk7Wi5pc0F0dHJpYnV0ZT1fZDt2YXIgd0M9VWUuYmluZChudWxsLGZlLkNMQVNTKTtaLmlzQ2xhc3NOYW1lPXdDO3ZhciB2Qz1VZS5iaW5kKG51bGwsZmUuQ09NQklOQVRPUik7Wi5pc0NvbWJpbmF0b3I9dkM7dmFyIHhDPVVlLmJpbmQobnVsbCxmZS5DT01NRU5UKTtaLmlzQ29tbWVudD14Qzt2YXIga0M9VWUuYmluZChudWxsLGZlLklEKTtaLmlzSWRlbnRpZmllcj1rQzt2YXIgU0M9VWUuYmluZChudWxsLGZlLk5FU1RJTkcpO1ouaXNOZXN0aW5nPVNDO3ZhciB3bz1VZS5iaW5kKG51bGwsZmUuUFNFVURPKTtaLmlzUHNldWRvPXdvO3ZhciBBQz1VZS5iaW5kKG51bGwsZmUuUk9PVCk7Wi5pc1Jvb3Q9QUM7dmFyIENDPVVlLmJpbmQobnVsbCxmZS5TRUxFQ1RPUik7Wi5pc1NlbGVjdG9yPUNDO3ZhciBfQz1VZS5iaW5kKG51bGwsZmUuU1RSSU5HKTtaLmlzU3RyaW5nPV9DO3ZhciBFZD1VZS5iaW5kKG51bGwsZmUuVEFHKTtaLmlzVGFnPUVkO3ZhciBFQz1VZS5iaW5kKG51bGwsZmUuVU5JVkVSU0FMKTtaLmlzVW5pdmVyc2FsPUVDO2Z1bmN0aW9uIE9kKHIpe3JldHVybiB3byhyKSYmci52YWx1ZSYmKHIudmFsdWUuc3RhcnRzV2l0aCgiOjoiKXx8ci52YWx1ZS50b0xvd2VyQ2FzZSgpPT09IjpiZWZvcmUifHxyLnZhbHVlLnRvTG93ZXJDYXNlKCk9PT0iOmFmdGVyInx8ci52YWx1ZS50b0xvd2VyQ2FzZSgpPT09IjpmaXJzdC1sZXR0ZXIifHxyLnZhbHVlLnRvTG93ZXJDYXNlKCk9PT0iOmZpcnN0LWxpbmUiKX1mdW5jdGlvbiBPQyhyKXtyZXR1cm4gd28ocikmJiFPZChyKX1mdW5jdGlvbiBUQyhyKXtyZXR1cm4hIShibyhyKSYmci53YWxrKX1mdW5jdGlvbiBSQyhyKXtyZXR1cm4gX2Qocil8fEVkKHIpfX0pO3ZhciBSZD14KEtlPT57dSgpOyJ1c2Ugc3RyaWN0IjtLZS5fX2VzTW9kdWxlPSEwO3ZhciB2bz1TZSgpO09iamVjdC5rZXlzKHZvKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3I9PT0iZGVmYXVsdCJ8fHI9PT0iX19lc01vZHVsZSJ8fHIgaW4gS2UmJktlW3JdPT09dm9bcl18fChLZVtyXT12b1tyXSl9KTt2YXIgeG89Q2QoKTtPYmplY3Qua2V5cyh4bykuZm9yRWFjaChmdW5jdGlvbihyKXtyPT09ImRlZmF1bHQifHxyPT09Il9fZXNNb2R1bGUifHxyIGluIEtlJiZLZVtyXT09PXhvW3JdfHwoS2Vbcl09eG9bcl0pfSk7dmFyIGtvPVRkKCk7T2JqZWN0LmtleXMoa28pLmZvckVhY2goZnVuY3Rpb24ocil7cj09PSJkZWZhdWx0Inx8cj09PSJfX2VzTW9kdWxlInx8ciBpbiBLZSYmS2Vbcl09PT1rb1tyXXx8KEtlW3JdPWtvW3JdKX0pfSk7dmFyIGl0PXgoKEFpLElkKT0+e3UoKTsidXNlIHN0cmljdCI7QWkuX19lc01vZHVsZT0hMDtBaS5kZWZhdWx0PXZvaWQgMDt2YXIgUEM9cUMoQWQoKSksSUM9REMoUmQoKSk7ZnVuY3Rpb24gUGQocil7aWYodHlwZW9mIFdlYWtNYXAhPSJmdW5jdGlvbiIpcmV0dXJuIG51bGw7dmFyIGU9bmV3IFdlYWtNYXAsdD1uZXcgV2Vha01hcDtyZXR1cm4oUGQ9ZnVuY3Rpb24obil7cmV0dXJuIG4/dDplfSkocil9ZnVuY3Rpb24gREMocixlKXtpZighZSYmciYmci5fX2VzTW9kdWxlKXJldHVybiByO2lmKHI9PT1udWxsfHx0eXBlb2YgciE9Im9iamVjdCImJnR5cGVvZiByIT0iZnVuY3Rpb24iKXJldHVybntkZWZhdWx0OnJ9O3ZhciB0PVBkKGUpO2lmKHQmJnQuaGFzKHIpKXJldHVybiB0LmdldChyKTt2YXIgaT17fSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmb3IodmFyIHMgaW4gcilpZihzIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixzKSl7dmFyIGE9bj9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIscyk6bnVsbDthJiYoYS5nZXR8fGEuc2V0KT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaSxzLGEpOmlbc109cltzXX1yZXR1cm4gaS5kZWZhdWx0PXIsdCYmdC5zZXQocixpKSxpfWZ1bmN0aW9uIHFDKHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX12YXIgU289ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQQy5kZWZhdWx0KGUpfTtPYmplY3QuYXNzaWduKFNvLElDKTtkZWxldGUgU28uX19lc01vZHVsZTt2YXIgJEM9U287QWkuZGVmYXVsdD0kQztJZC5leHBvcnRzPUFpLmRlZmF1bHR9KTtmdW5jdGlvbiBtdChyKXtyZXR1cm5bImZvbnRTaXplIiwib3V0bGluZSJdLmluY2x1ZGVzKHIpP2U9Pih0eXBlb2YgZT09ImZ1bmN0aW9uIiYmKGU9ZSh7fSkpLEFycmF5LmlzQXJyYXkoZSkmJihlPWVbMF0pLGUpOnI9PT0iZm9udEZhbWlseSI/ZT0+e3R5cGVvZiBlPT0iZnVuY3Rpb24iJiYoZT1lKHt9KSk7bGV0IHQ9QXJyYXkuaXNBcnJheShlKSYma2UoZVsxXSk/ZVswXTplO3JldHVybiBBcnJheS5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0fTpbImJveFNoYWRvdyIsInRyYW5zaXRpb25Qcm9wZXJ0eSIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyYW5zaXRpb25EZWxheSIsInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRTaXplIiwiYmFja2dyb3VuZENvbG9yIiwiY3Vyc29yIiwiYW5pbWF0aW9uIl0uaW5jbHVkZXMocik/ZT0+KHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoZT1lKHt9KSksQXJyYXkuaXNBcnJheShlKSYmKGU9ZS5qb2luKCIsICIpKSxlKTpbImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJncmlkVGVtcGxhdGVSb3dzIiwib2JqZWN0UG9zaXRpb24iXS5pbmNsdWRlcyhyKT9lPT4odHlwZW9mIGU9PSJmdW5jdGlvbiImJihlPWUoe30pKSx0eXBlb2YgZT09InN0cmluZyImJihlPWVlLmxpc3QuY29tbWEoZSkuam9pbigiICIpKSxlKTooZSx0PXt9KT0+KHR5cGVvZiBlPT0iZnVuY3Rpb24iJiYoZT1lKHQpKSxlKX12YXIgQ2k9UCgoKT0+e3UoKTtPdCgpO0t0KCl9KTt2YXIgQmQ9eCgoTUksT28pPT57dSgpO3ZhcntBdFJ1bGU6TEMsUnVsZTpEZH09JGUoKSxxZD1pdCgpO2Z1bmN0aW9uIEFvKHIsZSl7bGV0IHQ7dHJ5e3FkKGk9Pnt0PWl9KS5wcm9jZXNzU3luYyhyKX1jYXRjaChpKXt0aHJvdyByLmluY2x1ZGVzKCI6Iik/ZT9lLmVycm9yKCJNaXNzZWQgc2VtaWNvbG9uIik6aTplP2UuZXJyb3IoaS5tZXNzYWdlKTppfXJldHVybiB0LmF0KDApfWZ1bmN0aW9uICRkKHIsZSl7bGV0IHQ9ITE7cmV0dXJuIHIuZWFjaChpPT57aWYoaS50eXBlPT09Im5lc3RpbmciKXtsZXQgbj1lLmNsb25lKHt9KTtpLnZhbHVlIT09IiYiP2kucmVwbGFjZVdpdGgoQW8oaS52YWx1ZS5yZXBsYWNlKCImIixuLnRvU3RyaW5nKCkpKSk6aS5yZXBsYWNlV2l0aChuKSx0PSEwfWVsc2Uibm9kZXMiaW4gaSYmaS5ub2RlcyYmJGQoaSxlKSYmKHQ9ITApfSksdH1mdW5jdGlvbiBMZChyLGUpe2xldCB0PVtdO3JldHVybiByLnNlbGVjdG9ycy5mb3JFYWNoKGk9PntsZXQgbj1BbyhpLHIpO2Uuc2VsZWN0b3JzLmZvckVhY2gocz0+e2lmKCFzKXJldHVybjtsZXQgYT1BbyhzLGUpOyRkKGEsbil8fChhLnByZXBlbmQocWQuY29tYmluYXRvcih7dmFsdWU6IiAifSkpLGEucHJlcGVuZChuLmNsb25lKHt9KSkpLHQucHVzaChhLnRvU3RyaW5nKCkpfSl9KSx0fWZ1bmN0aW9uIEhuKHIsZSl7bGV0IHQ9ci5wcmV2KCk7Zm9yKGUuYWZ0ZXIocik7dCYmdC50eXBlPT09ImNvbW1lbnQiOyl7bGV0IGk9dC5wcmV2KCk7ZS5hZnRlcih0KSx0PWl9cmV0dXJuIHJ9ZnVuY3Rpb24gTUMocil7cmV0dXJuIGZ1bmN0aW9uIGUodCxpLG4scz1uKXtsZXQgYT1bXTtpZihpLmVhY2gobz0+e28udHlwZT09PSJydWxlIiYmbj9zJiYoby5zZWxlY3RvcnM9TGQodCxvKSk6by50eXBlPT09ImF0cnVsZSImJm8ubm9kZXM/cltvLm5hbWVdP2UodCxvLHMpOmlbX29dIT09ITEmJmEucHVzaChvKTphLnB1c2gobyl9KSxuJiZhLmxlbmd0aCl7bGV0IG89dC5jbG9uZSh7bm9kZXM6W119KTtmb3IobGV0IGwgb2YgYSlvLmFwcGVuZChsKTtpLnByZXBlbmQobyl9fX1mdW5jdGlvbiBDbyhyLGUsdCl7bGV0IGk9bmV3IERkKHtub2RlczpbXSxzZWxlY3RvcjpyfSk7cmV0dXJuIGkuYXBwZW5kKGUpLHQuYWZ0ZXIoaSksaX1mdW5jdGlvbiBNZChyLGUpe2xldCB0PXt9O2ZvcihsZXQgaSBvZiByKXRbaV09ITA7aWYoZSlmb3IobGV0IGkgb2YgZSl0W2kucmVwbGFjZSgvXkAvLCIiKV09ITA7cmV0dXJuIHR9ZnVuY3Rpb24gTkMocil7cj1yLnRyaW0oKTtsZXQgZT1yLm1hdGNoKC9eXCgoLiopXCkkLyk7aWYoIWUpcmV0dXJue3NlbGVjdG9yOnIsdHlwZToiYmFzaWMifTtsZXQgdD1lWzFdLm1hdGNoKC9eKHdpdGgoPzpvdXQpPyk6KC4rKSQvKTtpZih0KXtsZXQgaT10WzFdPT09IndpdGgiLG49T2JqZWN0LmZyb21FbnRyaWVzKHRbMl0udHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoYT0+W2EsITBdKSk7aWYoaSYmbi5hbGwpcmV0dXJue3R5cGU6Im5vb3AifTtsZXQgcz1hPT4hIW5bYV07cmV0dXJuIG4uYWxsP3M9KCk9PiEwOmkmJihzPWE9PmE9PT0iYWxsIj8hMTohblthXSkse2VzY2FwZXM6cyx0eXBlOiJ3aXRocnVsZXMifX1yZXR1cm57dHlwZToidW5rbm93biJ9fWZ1bmN0aW9uIEJDKHIpe2xldCBlPVtdLHQ9ci5wYXJlbnQ7Zm9yKDt0JiZ0IGluc3RhbmNlb2YgTEM7KWUucHVzaCh0KSx0PXQucGFyZW50O3JldHVybiBlfWZ1bmN0aW9uIEZDKHIpe2xldCBlPXJbTmRdO2lmKCFlKXIuYWZ0ZXIoci5ub2Rlcyk7ZWxzZXtsZXQgdD1yLm5vZGVzLGksbj0tMSxzLGEsbyxsPUJDKHIpO2lmKGwuZm9yRWFjaCgoYyxmKT0+e2lmKGUoYy5uYW1lKSlpPWMsbj1mLGE9bztlbHNle2xldCBkPW87bz1jLmNsb25lKHtub2RlczpbXX0pLGQmJm8uYXBwZW5kKGQpLHM9c3x8b319KSxpP2E/KHMuYXBwZW5kKHQpLGkuYWZ0ZXIoYSkpOmkuYWZ0ZXIodCk6ci5hZnRlcih0KSxyLm5leHQoKSYmaSl7bGV0IGM7bC5zbGljZSgwLG4rMSkuZm9yRWFjaCgoZixkLHApPT57bGV0IGg9YztjPWYuY2xvbmUoe25vZGVzOltdfSksaCYmYy5hcHBlbmQoaCk7bGV0IGI9W10seT0ocFtkLTFdfHxyKS5uZXh0KCk7Zm9yKDt5OyliLnB1c2goeSkseT15Lm5leHQoKTtjLmFwcGVuZChiKX0pLGMmJihhfHx0W3QubGVuZ3RoLTFdKS5hZnRlcihjKX19ci5yZW1vdmUoKX12YXIgX289U3ltYm9sKCJyb290UnVsZU1lcmdlU2VsIiksTmQ9U3ltYm9sKCJyb290UnVsZUVzY2FwZXMiKTtmdW5jdGlvbiBqQyhyKXtsZXR7cGFyYW1zOmV9PXIse2VzY2FwZXM6dCxzZWxlY3RvcjppLHR5cGU6bn09TkMoZSk7aWYobj09PSJ1bmtub3duIil0aHJvdyByLmVycm9yKGBVbmtub3duIEAke3IubmFtZX0gcGFyYW1ldGVyICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7aWYobj09PSJiYXNpYyImJmkpe2xldCBzPW5ldyBEZCh7bm9kZXM6ci5ub2RlcyxzZWxlY3RvcjppfSk7ci5yZW1vdmVBbGwoKSxyLmFwcGVuZChzKX1yW05kXT10LHJbX29dPXQ/IXQoImFsbCIpOm49PT0ibm9vcCJ9dmFyIEVvPVN5bWJvbCgiaGFzUm9vdFJ1bGUiKTtPby5leHBvcnRzPShyPXt9KT0+e2xldCBlPU1kKFsibWVkaWEiLCJzdXBwb3J0cyIsImxheWVyIiwiY29udGFpbmVyIiwic3RhcnRpbmctc3R5bGUiXSxyLmJ1YmJsZSksdD1NQyhlKSxpPU1kKFsiZG9jdW1lbnQiLCJmb250LWZhY2UiLCJrZXlmcmFtZXMiLCItd2Via2l0LWtleWZyYW1lcyIsIi1tb3ota2V5ZnJhbWVzIl0sci51bndyYXApLG49KHIucm9vdFJ1bGVOYW1lfHwiYXQtcm9vdCIpLnJlcGxhY2UoL15ALywiIikscz1yLnByZXNlcnZlRW1wdHk7cmV0dXJue09uY2UoYSl7YS53YWxrQXRSdWxlcyhuLG89PntqQyhvKSxhW0VvXT0hMH0pfSxwb3N0Y3NzUGx1Z2luOiJwb3N0Y3NzLW5lc3RlZCIsUm9vdEV4aXQoYSl7YVtFb10mJihhLndhbGtBdFJ1bGVzKG4sRkMpLGFbRW9dPSExKX0sUnVsZShhKXtsZXQgbz0hMSxsPWEsYz0hMSxmPVtdO2EuZWFjaChkPT57ZC50eXBlPT09InJ1bGUiPyhmLmxlbmd0aCYmKGw9Q28oYS5zZWxlY3RvcixmLGwpLGY9W10pLGM9ITAsbz0hMCxkLnNlbGVjdG9ycz1MZChhLGQpLGw9SG4oZCxsKSk6ZC50eXBlPT09ImF0cnVsZSI/KGYubGVuZ3RoJiYobD1DbyhhLnNlbGVjdG9yLGYsbCksZj1bXSksZC5uYW1lPT09bj8obz0hMCx0KGEsZCwhMCxkW19vXSksbD1IbihkLGwpKTplW2QubmFtZV0/KGM9ITAsbz0hMCx0KGEsZCwhMCksbD1IbihkLGwpKTppW2QubmFtZV0/KGM9ITAsbz0hMCx0KGEsZCwhMSksbD1IbihkLGwpKTpjJiZmLnB1c2goZCkpOmQudHlwZT09PSJkZWNsIiYmYyYmZi5wdXNoKGQpfSksZi5sZW5ndGgmJihsPUNvKGEuc2VsZWN0b3IsZixsKSksbyYmcyE9PSEwJiYoYS5yYXdzLnNlbWljb2xvbj0hMCxhLm5vZGVzLmxlbmd0aD09PTAmJmEucmVtb3ZlKCkpfX19O09vLmV4cG9ydHMucG9zdGNzcz0hMH0pO3ZhciBVZD14KChOSSx6ZCk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBGZD0vLShcd3wkKS9nLGpkPShyLGUpPT5lLnRvVXBwZXJDYXNlKCksekM9cj0+KHI9ci50b0xvd2VyQ2FzZSgpLHI9PT0iZmxvYXQiPyJjc3NGbG9hdCI6ci5zdGFydHNXaXRoKCItbXMtIik/ci5zdWJzdHIoMSkucmVwbGFjZShGZCxqZCk6ci5yZXBsYWNlKEZkLGpkKSk7emQuZXhwb3J0cz16Q30pO3ZhciBQbz14KChCSSxWZCk9Pnt1KCk7dmFyIFVDPVVkKCksVkM9e2JveEZsZXg6ITAsYm94RmxleEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGZsZXg6ITAsZmxleEdyb3c6ITAsZmxleFBvc2l0aXZlOiEwLGZsZXhTaHJpbms6ITAsZmxleE5lZ2F0aXZlOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlT3BhY2l0eTohMCxzdHJva2VXaWR0aDohMH07ZnVuY3Rpb24gVG8ocil7cmV0dXJuIHR5cGVvZiByLm5vZGVzPT0idW5kZWZpbmVkIj8hMDpSbyhyKX1mdW5jdGlvbiBSbyhyKXtsZXQgZSx0PXt9O3JldHVybiByLmVhY2goaT0+e2lmKGkudHlwZT09PSJhdHJ1bGUiKWU9IkAiK2kubmFtZSxpLnBhcmFtcyYmKGUrPSIgIitpLnBhcmFtcyksdHlwZW9mIHRbZV09PSJ1bmRlZmluZWQiP3RbZV09VG8oaSk6QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2goVG8oaSkpOnRbZV09W3RbZV0sVG8oaSldO2Vsc2UgaWYoaS50eXBlPT09InJ1bGUiKXtsZXQgbj1SbyhpKTtpZih0W2kuc2VsZWN0b3JdKWZvcihsZXQgcyBpbiBuKXRbaS5zZWxlY3Rvcl1bc109bltzXTtlbHNlIHRbaS5zZWxlY3Rvcl09bn1lbHNlIGlmKGkudHlwZT09PSJkZWNsIil7aS5wcm9wWzBdPT09Ii0iJiZpLnByb3BbMV09PT0iLSJ8fGkucGFyZW50JiZpLnBhcmVudC5zZWxlY3Rvcj09PSI6ZXhwb3J0Ij9lPWkucHJvcDplPVVDKGkucHJvcCk7bGV0IG49aS52YWx1ZTshaXNOYU4oaS52YWx1ZSkmJlZDW2VdJiYobj1wYXJzZUZsb2F0KGkudmFsdWUpKSxpLmltcG9ydGFudCYmKG4rPSIgIWltcG9ydGFudCIpLHR5cGVvZiB0W2VdPT0idW5kZWZpbmVkIj90W2VdPW46QXJyYXkuaXNBcnJheSh0W2VdKT90W2VdLnB1c2gobik6dFtlXT1bdFtlXSxuXX19KSx0fVZkLmV4cG9ydHM9Um99KTt2YXIgV249eCgoRkksUWQpPT57dSgpO3ZhciBfaT0kZSgpLEhkPS9ccyohaW1wb3J0YW50XHMqJC9pLEhDPXsiYm94LWZsZXgiOiEwLCJib3gtZmxleC1ncm91cCI6ITAsImNvbHVtbi1jb3VudCI6ITAsZmxleDohMCwiZmxleC1ncm93IjohMCwiZmxleC1wb3NpdGl2ZSI6ITAsImZsZXgtc2hyaW5rIjohMCwiZmxleC1uZWdhdGl2ZSI6ITAsImZvbnQtd2VpZ2h0IjohMCwibGluZS1jbGFtcCI6ITAsImxpbmUtaGVpZ2h0IjohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsInRhYi1zaXplIjohMCx3aWRvd3M6ITAsInotaW5kZXgiOiEwLHpvb206ITAsImZpbGwtb3BhY2l0eSI6ITAsInN0cm9rZS1kYXNob2Zmc2V0IjohMCwic3Ryb2tlLW9wYWNpdHkiOiEwLCJzdHJva2Utd2lkdGgiOiEwfTtmdW5jdGlvbiBXQyhyKXtyZXR1cm4gci5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnJlcGxhY2UoL15tcy0vLCItbXMtIikudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBXZChyLGUsdCl7dD09PSExfHx0PT09bnVsbHx8KGUuc3RhcnRzV2l0aCgiLS0iKXx8KGU9V0MoZSkpLHR5cGVvZiB0PT0ibnVtYmVyIiYmKHQ9PT0wfHxIQ1tlXT90PXQudG9TdHJpbmcoKTp0Kz0icHgiKSxlPT09ImNzcy1mbG9hdCImJihlPSJmbG9hdCIpLEhkLnRlc3QodCk/KHQ9dC5yZXBsYWNlKEhkLCIiKSxyLnB1c2goX2kuZGVjbCh7cHJvcDplLHZhbHVlOnQsaW1wb3J0YW50OiEwfSkpKTpyLnB1c2goX2kuZGVjbCh7cHJvcDplLHZhbHVlOnR9KSkpfWZ1bmN0aW9uIEdkKHIsZSx0KXtsZXQgaT1faS5hdFJ1bGUoe25hbWU6ZVsxXSxwYXJhbXM6ZVszXXx8IiJ9KTt0eXBlb2YgdD09Im9iamVjdCImJihpLm5vZGVzPVtdLElvKHQsaSkpLHIucHVzaChpKX1mdW5jdGlvbiBJbyhyLGUpe2xldCB0LGksbjtmb3IodCBpbiByKWlmKGk9clt0XSwhKGk9PT1udWxsfHx0eXBlb2YgaT09InVuZGVmaW5lZCIpKWlmKHRbMF09PT0iQCIpe2xldCBzPXQubWF0Y2goL0AoXFMrKShccysoW1xXXHddKilccyopPy8pO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBhIG9mIGkpR2QoZSxzLGEpO2Vsc2UgR2QoZSxzLGkpfWVsc2UgaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IHMgb2YgaSlXZChlLHQscyk7ZWxzZSB0eXBlb2YgaT09Im9iamVjdCI/KG49X2kucnVsZSh7c2VsZWN0b3I6dH0pLElvKGksbiksZS5wdXNoKG4pKTpXZChlLHQsaSl9UWQuZXhwb3J0cz1mdW5jdGlvbihyKXtsZXQgZT1faS5yb290KCk7cmV0dXJuIElvKHIsZSksZX19KTt2YXIgRG89eCgoakksWWQpPT57dSgpO3ZhciBHQz1QbygpO1lkLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmZS53YXJuaW5ncygpLmZvckVhY2godD0+e2xldCBpPXQucGx1Z2lufHwiUG9zdENTUyI7Y29uc29sZS53YXJuKGkrIjogIit0LnRleHQpfSksR0MoZS5yb290KX19KTt2YXIgWGQ9eCgoekksS2QpPT57dSgpO3ZhciBRQz0kZSgpLFlDPURvKCksS0M9V24oKTtLZC5leHBvcnRzPWZ1bmN0aW9uKGUpe2xldCB0PVFDKGUpO3JldHVybiBhc3luYyBpPT57bGV0IG49YXdhaXQgdC5wcm9jZXNzKGkse3BhcnNlcjpLQyxmcm9tOnZvaWQgMH0pO3JldHVybiBZQyhuKX19fSk7dmFyIEpkPXgoKFVJLFpkKT0+e3UoKTt2YXIgWEM9JGUoKSxaQz1EbygpLEpDPVduKCk7WmQuZXhwb3J0cz1mdW5jdGlvbihyKXtsZXQgZT1YQyhyKTtyZXR1cm4gdD0+e2xldCBpPWUucHJvY2Vzcyh0LHtwYXJzZXI6SkMsZnJvbTp2b2lkIDB9KTtyZXR1cm4gWkMoaSl9fX0pO3ZhciB0aD14KChWSSxlaCk9Pnt1KCk7dmFyIGVfPVBvKCksdF89V24oKSxyXz1YZCgpLGlfPUpkKCk7ZWguZXhwb3J0cz17b2JqZWN0aWZ5OmVfLHBhcnNlOnRfLGFzeW5jOnJfLHN5bmM6aV99fSk7dmFyIG9yLHJoLEhJLFdJLEdJLFFJLGloPVAoKCk9Pnt1KCk7b3I9cGUodGgoKSkscmg9b3IuZGVmYXVsdCxIST1vci5kZWZhdWx0Lm9iamVjdGlmeSxXST1vci5kZWZhdWx0LnBhcnNlLEdJPW9yLmRlZmF1bHQuYXN5bmMsUUk9b3IuZGVmYXVsdC5zeW5jfSk7ZnVuY3Rpb24gbHIocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5mbGF0TWFwKGU9PmVlKFsoMCxuaC5kZWZhdWx0KSh7YnViYmxlOlsic2NyZWVuIl19KV0pLnByb2Nlc3MoZSx7cGFyc2VyOnJofSkucm9vdC5ub2Rlcyk6bHIoW3JdKX12YXIgbmgscW89UCgoKT0+e3UoKTtPdCgpO25oPXBlKEJkKCkpO2loKCl9KTtmdW5jdGlvbiB1cihyLGUsdD0hMSl7aWYocj09PSIiKXJldHVybiBlO2xldCBpPXR5cGVvZiBlPT0ic3RyaW5nIj8oMCxzaC5kZWZhdWx0KSgpLmFzdFN5bmMoZSk6ZTtyZXR1cm4gaS53YWxrQ2xhc3NlcyhuPT57bGV0IHM9bi52YWx1ZSxhPXQmJnMuc3RhcnRzV2l0aCgiLSIpO24udmFsdWU9YT9gLSR7cn0ke3Muc2xpY2UoMSl9YDpgJHtyfSR7c31gfSksdHlwZW9mIGU9PSJzdHJpbmciP2kudG9TdHJpbmcoKTppfXZhciBzaCxHbj1QKCgpPT57dSgpO3NoPXBlKGl0KCkpfSk7ZnVuY3Rpb24gVGUocil7bGV0IGU9YWguZGVmYXVsdC5jbGFzc05hbWUoKTtyZXR1cm4gZS52YWx1ZT1yLGp0KGU/LnJhd3M/LnZhbHVlPz9lLnZhbHVlKX12YXIgYWgsZnI9UCgoKT0+e3UoKTthaD1wZShpdCgpKTtaaSgpfSk7ZnVuY3Rpb24gJG8ocil7cmV0dXJuIGp0KGAuJHtUZShyKX1gKX1mdW5jdGlvbiBRbihyLGUpe3JldHVybiAkbyhFaShyLGUpKX1mdW5jdGlvbiBFaShyLGUpe3JldHVybiBlPT09IkRFRkFVTFQiP3I6ZT09PSItInx8ZT09PSItREVGQVVMVCI/YC0ke3J9YDplLnN0YXJ0c1dpdGgoIi0iKT9gLSR7cn0ke2V9YDplLnN0YXJ0c1dpdGgoIi8iKT9gJHtyfSR7ZX1gOmAke3J9LSR7ZX1gfXZhciBMbz1QKCgpPT57dSgpO2ZyKCk7WmkoKX0pO2Z1bmN0aW9uIEwocixlPVtbcixbcl1dXSx7ZmlsdGVyRGVmYXVsdDp0PSExLC4uLml9PXt9KXtsZXQgbj1tdChyKTtyZXR1cm4gZnVuY3Rpb24oe21hdGNoVXRpbGl0aWVzOnMsdGhlbWU6YX0pe2ZvcihsZXQgbyBvZiBlKXtsZXQgbD1BcnJheS5pc0FycmF5KG9bMF0pP286W29dO3MobC5yZWR1Y2UoKGMsW2YsZF0pPT5PYmplY3QuYXNzaWduKGMse1tmXTpwPT5kLnJlZHVjZSgoaCxiKT0+QXJyYXkuaXNBcnJheShiKT9PYmplY3QuYXNzaWduKGgse1tiWzBdXTpiWzFdfSk6T2JqZWN0LmFzc2lnbihoLHtbYl06bihwKX0pLHt9KX0pLHt9KSx7Li4uaSx2YWx1ZXM6dD9PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYShyKT8/e30pLmZpbHRlcigoW2NdKT0+YyE9PSJERUZBVUxUIikpOmEocil9KX19fXZhciBvaD1QKCgpPT57dSgpO0NpKCl9KTtmdW5jdGlvbiBUdChyKXtyZXR1cm4gcj1BcnJheS5pc0FycmF5KHIpP3I6W3JdLHIubWFwKGU9PntsZXQgdD1lLnZhbHVlcy5tYXAoaT0+aS5yYXchPT12b2lkIDA/aS5yYXc6W2kubWluJiZgKG1pbi13aWR0aDogJHtpLm1pbn0pYCxpLm1heCYmYChtYXgtd2lkdGg6ICR7aS5tYXh9KWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgYW5kICIpKTtyZXR1cm4gZS5ub3Q/YG5vdCBhbGwgYW5kICR7dH1gOnR9KS5qb2luKCIsICIpfXZhciBZbj1QKCgpPT57dSgpfSk7ZnVuY3Rpb24gTW8ocil7cmV0dXJuIHIuc3BsaXQoZl8pLm1hcCh0PT57bGV0IGk9dC50cmltKCksbj17dmFsdWU6aX0scz1pLnNwbGl0KGNfKSxhPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIHMpIWEuaGFzKCJESVJFQ1RJT05TIikmJm5fLmhhcyhvKT8obi5kaXJlY3Rpb249byxhLmFkZCgiRElSRUNUSU9OUyIpKTohYS5oYXMoIlBMQVlfU1RBVEVTIikmJnNfLmhhcyhvKT8obi5wbGF5U3RhdGU9byxhLmFkZCgiUExBWV9TVEFURVMiKSk6IWEuaGFzKCJGSUxMX01PREVTIikmJmFfLmhhcyhvKT8obi5maWxsTW9kZT1vLGEuYWRkKCJGSUxMX01PREVTIikpOiFhLmhhcygiSVRFUkFUSU9OX0NPVU5UUyIpJiYob18uaGFzKG8pfHxwXy50ZXN0KG8pKT8obi5pdGVyYXRpb25Db3VudD1vLGEuYWRkKCJJVEVSQVRJT05fQ09VTlRTIikpOiFhLmhhcygiVElNSU5HX0ZVTkNUSU9OIikmJmxfLmhhcyhvKXx8IWEuaGFzKCJUSU1JTkdfRlVOQ1RJT04iKSYmdV8uc29tZShsPT5vLnN0YXJ0c1dpdGgoYCR7bH0oYCkpPyhuLnRpbWluZ0Z1bmN0aW9uPW8sYS5hZGQoIlRJTUlOR19GVU5DVElPTiIpKTohYS5oYXMoIkRVUkFUSU9OIikmJmxoLnRlc3Qobyk/KG4uZHVyYXRpb249byxhLmFkZCgiRFVSQVRJT04iKSk6IWEuaGFzKCJERUxBWSIpJiZsaC50ZXN0KG8pPyhuLmRlbGF5PW8sYS5hZGQoIkRFTEFZIikpOmEuaGFzKCJOQU1FIik/KG4udW5rbm93bnx8KG4udW5rbm93bj1bXSksbi51bmtub3duLnB1c2gobykpOihuLm5hbWU9byxhLmFkZCgiTkFNRSIpKTtyZXR1cm4gbn0pfXZhciBuXyxzXyxhXyxvXyxsXyx1XyxmXyxjXyxsaCxwXyx1aD1QKCgpPT57dSgpO25fPW5ldyBTZXQoWyJub3JtYWwiLCJyZXZlcnNlIiwiYWx0ZXJuYXRlIiwiYWx0ZXJuYXRlLXJldmVyc2UiXSksc189bmV3IFNldChbInJ1bm5pbmciLCJwYXVzZWQiXSksYV89bmV3IFNldChbIm5vbmUiLCJmb3J3YXJkcyIsImJhY2t3YXJkcyIsImJvdGgiXSksb189bmV3IFNldChbImluZmluaXRlIl0pLGxfPW5ldyBTZXQoWyJsaW5lYXIiLCJlYXNlIiwiZWFzZS1pbiIsImVhc2Utb3V0IiwiZWFzZS1pbi1vdXQiLCJzdGVwLXN0YXJ0Iiwic3RlcC1lbmQiXSksdV89WyJjdWJpYy1iZXppZXIiLCJzdGVwcyJdLGZfPS9cLCg/IVteKF0qXCkpL2csY189L1wgKyg/IVteKF0qXCkpL2csbGg9L14oLT9bXGQuXSttP3MpJC8scF89L14oXGQrKSQvfSk7dmFyIGZoLHhlLGNoPVAoKCk9Pnt1KCk7Zmg9cj0+T2JqZWN0LmFzc2lnbih7fSwuLi5PYmplY3QuZW50cmllcyhyPz97fSkuZmxhdE1hcCgoW2UsdF0pPT50eXBlb2YgdD09Im9iamVjdCI/T2JqZWN0LmVudHJpZXMoZmgodCkpLm1hcCgoW2ksbl0pPT4oe1tlKyhpPT09IkRFRkFVTFQiPyIiOmAtJHtpfWApXTpufSkpOlt7W2Ake2V9YF06dH1dKSkseGU9Zmh9KTt2YXIgZGgscGg9UCgoKT0+e2RoPSIzLjQuMTcifSk7ZnVuY3Rpb24gUnQocixlPSEwKXtyZXR1cm4gQXJyYXkuaXNBcnJheShyKT9yLm1hcCh0PT57aWYoZSYmQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0dXBsZSBzeW50YXggaXMgbm90IHN1cHBvcnRlZCBmb3IgYHNjcmVlbnNgLiIpO2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm57bmFtZTp0LnRvU3RyaW5nKCksbm90OiExLHZhbHVlczpbe21pbjp0LG1heDp2b2lkIDB9XX07bGV0W2ksbl09dDtyZXR1cm4gaT1pLnRvU3RyaW5nKCksdHlwZW9mIG49PSJzdHJpbmciP3tuYW1lOmksbm90OiExLHZhbHVlczpbe21pbjpuLG1heDp2b2lkIDB9XX06QXJyYXkuaXNBcnJheShuKT97bmFtZTppLG5vdDohMSx2YWx1ZXM6bi5tYXAocz0+bWgocykpfTp7bmFtZTppLG5vdDohMSx2YWx1ZXM6W21oKG4pXX19KTpSdChPYmplY3QuZW50cmllcyhyPz97fSksITEpfWZ1bmN0aW9uIEtuKHIpe3JldHVybiByLnZhbHVlcy5sZW5ndGghPT0xP3tyZXN1bHQ6ITEscmVhc29uOiJtdWx0aXBsZS12YWx1ZXMifTpyLnZhbHVlc1swXS5yYXchPT12b2lkIDA/e3Jlc3VsdDohMSxyZWFzb246InJhdy12YWx1ZXMifTpyLnZhbHVlc1swXS5taW4hPT12b2lkIDAmJnIudmFsdWVzWzBdLm1heCE9PXZvaWQgMD97cmVzdWx0OiExLHJlYXNvbjoibWluLWFuZC1tYXgifTp7cmVzdWx0OiEwLHJlYXNvbjpudWxsfX1mdW5jdGlvbiBoaChyLGUsdCl7bGV0IGk9WG4oZSxyKSxuPVhuKHQscikscz1LbihpKSxhPUtuKG4pO2lmKHMucmVhc29uPT09Im11bHRpcGxlLXZhbHVlcyJ8fGEucmVhc29uPT09Im11bHRpcGxlLXZhbHVlcyIpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gc29ydCBhIHNjcmVlbiB3aXRoIG11bHRpcGxlIHZhbHVlcy4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiBQbGVhc2Ugb3BlbiBhIGJ1ZyByZXBvcnQuIik7aWYocy5yZWFzb249PT0icmF3LXZhbHVlcyJ8fGEucmVhc29uPT09InJhdy12YWx1ZXMiKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIHNvcnQgYSBzY3JlZW4gd2l0aCByYXcgdmFsdWVzLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIFBsZWFzZSBvcGVuIGEgYnVnIHJlcG9ydC4iKTtpZihzLnJlYXNvbj09PSJtaW4tYW5kLW1heCJ8fGEucmVhc29uPT09Im1pbi1hbmQtbWF4Iil0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBzb3J0IGEgc2NyZWVuIHdpdGggYm90aCBtaW4gYW5kIG1heCB2YWx1ZXMuIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gUGxlYXNlIG9wZW4gYSBidWcgcmVwb3J0LiIpO2xldHttaW46byxtYXg6bH09aS52YWx1ZXNbMF0se21pbjpjLG1heDpmfT1uLnZhbHVlc1swXTtlLm5vdCYmKFtvLGxdPVtsLG9dKSx0Lm5vdCYmKFtjLGZdPVtmLGNdKSxvPW89PT12b2lkIDA/bzpwYXJzZUZsb2F0KG8pLGw9bD09PXZvaWQgMD9sOnBhcnNlRmxvYXQobCksYz1jPT09dm9pZCAwP2M6cGFyc2VGbG9hdChjKSxmPWY9PT12b2lkIDA/ZjpwYXJzZUZsb2F0KGYpO2xldFtkLHBdPXI9PT0ibWluIj9bbyxjXTpbZixsXTtyZXR1cm4gZC1wfWZ1bmN0aW9uIFhuKHIsZSl7cmV0dXJuIHR5cGVvZiByPT0ib2JqZWN0Ij9yOntuYW1lOiJhcmJpdHJhcnktc2NyZWVuIix2YWx1ZXM6W3tbZV06cn1dfX1mdW5jdGlvbiBtaCh7Im1pbi13aWR0aCI6cixtaW46ZT1yLG1heDp0LHJhdzppfT17fSl7cmV0dXJue21pbjplLG1heDp0LHJhdzppfX12YXIgWm49UCgoKT0+e3UoKX0pO2Z1bmN0aW9uIEpuKHIsZSl7ci53YWxrRGVjbHModD0+e2lmKGUuaW5jbHVkZXModC5wcm9wKSl7dC5yZW1vdmUoKTtyZXR1cm59Zm9yKGxldCBpIG9mIGUpdC52YWx1ZS5pbmNsdWRlcyhgLyB2YXIoJHtpfSlgKT90LnZhbHVlPXQudmFsdWUucmVwbGFjZShgLyB2YXIoJHtpfSlgLCIiKTp0LnZhbHVlLmluY2x1ZGVzKGAvIHZhcigke2l9LCAxKWApJiYodC52YWx1ZT10LnZhbHVlLnJlcGxhY2UoYC8gdmFyKCR7aX0sIDEpYCwiIikpfSl9dmFyIGdoPVAoKCk9Pnt1KCl9KTt2YXIgc2UsWGUsbnQsZ2UseWgsYmg9UCgoKT0+e3UoKTtmdCgpO2V0KCk7T3QoKTtvaCgpO1luKCk7ZnIoKTt1aCgpO2NoKCk7THIoKTtyYSgpO0t0KCk7Q2koKTtwaCgpO0JlKCk7Wm4oKTtZcygpO2doKCk7Y3QoKTtCcigpO09pKCk7c2U9e2NoaWxkVmFyaWFudDooe2FkZFZhcmlhbnQ6cn0pPT57cigiKiIsIiYgPiAqIil9LHBzZXVkb0VsZW1lbnRWYXJpYW50czooe2FkZFZhcmlhbnQ6cn0pPT57cigiZmlyc3QtbGV0dGVyIiwiJjo6Zmlyc3QtbGV0dGVyIikscigiZmlyc3QtbGluZSIsIiY6OmZpcnN0LWxpbmUiKSxyKCJtYXJrZXIiLFsoe2NvbnRhaW5lcjplfSk9PihKbihlLFsiLS10dy10ZXh0LW9wYWNpdHkiXSksIiYgKjo6bWFya2VyIiksKHtjb250YWluZXI6ZX0pPT4oSm4oZSxbIi0tdHctdGV4dC1vcGFjaXR5Il0pLCImOjptYXJrZXIiKV0pLHIoInNlbGVjdGlvbiIsWyImICo6OnNlbGVjdGlvbiIsIiY6OnNlbGVjdGlvbiJdKSxyKCJmaWxlIiwiJjo6ZmlsZS1zZWxlY3Rvci1idXR0b24iKSxyKCJwbGFjZWhvbGRlciIsIiY6OnBsYWNlaG9sZGVyIikscigiYmFja2Ryb3AiLCImOjpiYWNrZHJvcCIpLHIoImJlZm9yZSIsKHtjb250YWluZXI6ZX0pPT4oZS53YWxrUnVsZXModD0+e2xldCBpPSExO3Qud2Fsa0RlY2xzKCJjb250ZW50IiwoKT0+e2k9ITB9KSxpfHx0LnByZXBlbmQoZWUuZGVjbCh7cHJvcDoiY29udGVudCIsdmFsdWU6InZhcigtLXR3LWNvbnRlbnQpIn0pKX0pLCImOjpiZWZvcmUiKSkscigiYWZ0ZXIiLCh7Y29udGFpbmVyOmV9KT0+KGUud2Fsa1J1bGVzKHQ9PntsZXQgaT0hMTt0LndhbGtEZWNscygiY29udGVudCIsKCk9PntpPSEwfSksaXx8dC5wcmVwZW5kKGVlLmRlY2woe3Byb3A6ImNvbnRlbnQiLHZhbHVlOiJ2YXIoLS10dy1jb250ZW50KSJ9KSl9KSwiJjo6YWZ0ZXIiKSl9LHBzZXVkb0NsYXNzVmFyaWFudHM6KHthZGRWYXJpYW50OnIsbWF0Y2hWYXJpYW50OmUsY29uZmlnOnQscHJlZml4Oml9KT0+e2xldCBuPVtbImZpcnN0IiwiJjpmaXJzdC1jaGlsZCJdLFsibGFzdCIsIiY6bGFzdC1jaGlsZCJdLFsib25seSIsIiY6b25seS1jaGlsZCJdLFsib2RkIiwiJjpudGgtY2hpbGQob2RkKSJdLFsiZXZlbiIsIiY6bnRoLWNoaWxkKGV2ZW4pIl0sImZpcnN0LW9mLXR5cGUiLCJsYXN0LW9mLXR5cGUiLCJvbmx5LW9mLXR5cGUiLFsidmlzaXRlZCIsKHtjb250YWluZXI6YX0pPT4oSm4oYSxbIi0tdHctdGV4dC1vcGFjaXR5IiwiLS10dy1ib3JkZXItb3BhY2l0eSIsIi0tdHctYmctb3BhY2l0eSJdKSwiJjp2aXNpdGVkIildLCJ0YXJnZXQiLFsib3BlbiIsIiZbb3Blbl0iXSwiZGVmYXVsdCIsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwicGxhY2Vob2xkZXItc2hvd24iLCJhdXRvZmlsbCIsIm9wdGlvbmFsIiwicmVxdWlyZWQiLCJ2YWxpZCIsImludmFsaWQiLCJpbi1yYW5nZSIsIm91dC1vZi1yYW5nZSIsInJlYWQtb25seSIsImVtcHR5IiwiZm9jdXMtd2l0aGluIixbImhvdmVyIix3ZSh0KCksImhvdmVyT25seVdoZW5TdXBwb3J0ZWQiKT8iQG1lZGlhIChob3ZlcjogaG92ZXIpIGFuZCAocG9pbnRlcjogZmluZSkgeyAmOmhvdmVyIH0iOiImOmhvdmVyIl0sImZvY3VzIiwiZm9jdXMtdmlzaWJsZSIsImFjdGl2ZSIsImVuYWJsZWQiLCJkaXNhYmxlZCJdLm1hcChhPT5BcnJheS5pc0FycmF5KGEpP2E6W2EsYCY6JHthfWBdKTtmb3IobGV0W2Esb11vZiBuKXIoYSxsPT50eXBlb2Ygbz09ImZ1bmN0aW9uIj9vKGwpOm8pO2xldCBzPXtncm91cDooYSx7bW9kaWZpZXI6b30pPT5vP1tgOm1lcmdlKCR7aSgiLmdyb3VwIil9XFwvJHtUZShvKX0pYCwiICYiXTpbYDptZXJnZSgke2koIi5ncm91cCIpfSlgLCIgJiJdLHBlZXI6KGEse21vZGlmaWVyOm99KT0+bz9bYDptZXJnZSgke2koIi5wZWVyIil9XFwvJHtUZShvKX0pYCwiIH4gJiJdOltgOm1lcmdlKCR7aSgiLnBlZXIiKX0pYCwiIH4gJiJdfTtmb3IobGV0W2Esb11vZiBPYmplY3QuZW50cmllcyhzKSllKGEsKGw9IiIsYyk9PntsZXQgZj1LKHR5cGVvZiBsPT0iZnVuY3Rpb24iP2woYyk6bCk7Zi5pbmNsdWRlcygiJiIpfHwoZj0iJiIrZik7bGV0W2QscF09bygiIixjKSxoPW51bGwsYj1udWxsLHY9MDtmb3IobGV0IHk9MDt5PGYubGVuZ3RoOysreSl7bGV0IHc9Zlt5XTt3PT09IiYiP2g9eTp3PT09IicifHx3PT09JyInP3YrPTE6aCE9PW51bGwmJnc9PT0iICImJiF2JiYoYj15KX1yZXR1cm4gaCE9PW51bGwmJmI9PT1udWxsJiYoYj1mLmxlbmd0aCksZi5zbGljZSgwLGgpK2QrZi5zbGljZShoKzEsYikrcCtmLnNsaWNlKGIpfSx7dmFsdWVzOk9iamVjdC5mcm9tRW50cmllcyhuKSxbUHRdOntyZXNwZWN0UHJlZml4OiExfX0pfSxkaXJlY3Rpb25WYXJpYW50czooe2FkZFZhcmlhbnQ6cn0pPT57cigibHRyIiwnJjp3aGVyZShbZGlyPSJsdHIiXSwgW2Rpcj0ibHRyIl0gKiknKSxyKCJydGwiLCcmOndoZXJlKFtkaXI9InJ0bCJdLCBbZGlyPSJydGwiXSAqKScpfSxyZWR1Y2VkTW90aW9uVmFyaWFudHM6KHthZGRWYXJpYW50OnJ9KT0+e3IoIm1vdGlvbi1zYWZlIiwiQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSIpLHIoIm1vdGlvbi1yZWR1Y2UiLCJAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKX0sZGFya1ZhcmlhbnRzOih7Y29uZmlnOnIsYWRkVmFyaWFudDplfSk9PntsZXRbdCxpPSIuZGFyayJdPVtdLmNvbmNhdChyKCJkYXJrTW9kZSIsIm1lZGlhIikpO2lmKHQ9PT0hMSYmKHQ9Im1lZGlhIixHLndhcm4oImRhcmttb2RlLWZhbHNlIixbIlRoZSBgZGFya01vZGVgIG9wdGlvbiBpbiB5b3VyIFRhaWx3aW5kIENTUyBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgZmFsc2VgLCB3aGljaCBub3cgYmVoYXZlcyB0aGUgc2FtZSBhcyBgbWVkaWFgLiIsIkNoYW5nZSBgZGFya01vZGVgIHRvIGBtZWRpYWAgb3IgcmVtb3ZlIGl0IGVudGlyZWx5LiIsImh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdXBncmFkZS1ndWlkZSNyZW1vdmUtZGFyay1tb2RlLWNvbmZpZ3VyYXRpb24iXSkpLHQ9PT0idmFyaWFudCIpe2xldCBuO2lmKEFycmF5LmlzQXJyYXkoaSl8fHR5cGVvZiBpPT0iZnVuY3Rpb24iP249aTp0eXBlb2YgaT09InN0cmluZyImJihuPVtpXSksQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IHMgb2YgbilzPT09Ii5kYXJrIj8odD0hMSxHLndhcm4oImRhcmttb2RlLXZhcmlhbnQtd2l0aG91dC1zZWxlY3RvciIsWyJXaGVuIHVzaW5nIGB2YXJpYW50YCBmb3IgYGRhcmtNb2RlYCwgeW91IG11c3QgcHJvdmlkZSBhIHNlbGVjdG9yLiIsJ0V4YW1wbGU6IGBkYXJrTW9kZTogWyJ2YXJpYW50IiwgIi55b3VyLXNlbGVjdG9yICYiXWAnXSkpOnMuaW5jbHVkZXMoIiYiKXx8KHQ9ITEsRy53YXJuKCJkYXJrbW9kZS12YXJpYW50LXdpdGhvdXQtYW1wZXJzYW5kIixbIldoZW4gdXNpbmcgYHZhcmlhbnRgIGZvciBgZGFya01vZGVgLCB5b3VyIHNlbGVjdG9yIG11c3QgY29udGFpbiBgJmAuIiwnRXhhbXBsZSBgZGFya01vZGU6IFsidmFyaWFudCIsICIueW91ci1zZWxlY3RvciAmIl1gJ10pKTtpPW59dD09PSJzZWxlY3RvciI/ZSgiZGFyayIsYCY6d2hlcmUoJHtpfSwgJHtpfSAqKWApOnQ9PT0ibWVkaWEiP2UoImRhcmsiLCJAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIpOnQ9PT0idmFyaWFudCI/ZSgiZGFyayIsaSk6dD09PSJjbGFzcyImJmUoImRhcmsiLGAmOmlzKCR7aX0gKilgKX0scHJpbnRWYXJpYW50Oih7YWRkVmFyaWFudDpyfSk9PntyKCJwcmludCIsIkBtZWRpYSBwcmludCIpfSxzY3JlZW5WYXJpYW50czooe3RoZW1lOnIsYWRkVmFyaWFudDplLG1hdGNoVmFyaWFudDp0fSk9PntsZXQgaT1yKCJzY3JlZW5zIik/P3t9LG49T2JqZWN0LnZhbHVlcyhpKS5ldmVyeSh3PT50eXBlb2Ygdz09InN0cmluZyIpLHM9UnQocigic2NyZWVucyIpKSxhPW5ldyBTZXQoW10pO2Z1bmN0aW9uIG8odyl7cmV0dXJuIHcubWF0Y2goLyhcRCspJC8pPy5bMV0/PyIobm9uZSkifWZ1bmN0aW9uIGwodyl7dyE9PXZvaWQgMCYmYS5hZGQobyh3KSl9ZnVuY3Rpb24gYyh3KXtyZXR1cm4gbCh3KSxhLnNpemU9PT0xfWZvcihsZXQgdyBvZiBzKWZvcihsZXQgayBvZiB3LnZhbHVlcylsKGsubWluKSxsKGsubWF4KTtsZXQgZj1hLnNpemU8PTE7ZnVuY3Rpb24gZCh3KXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHMuZmlsdGVyKGs9PktuKGspLnJlc3VsdCkubWFwKGs9PntsZXR7bWluOlMsbWF4OkV9PWsudmFsdWVzWzBdO2lmKHc9PT0ibWluIiYmUyE9PXZvaWQgMClyZXR1cm4gaztpZih3PT09Im1pbiImJkUhPT12b2lkIDApcmV0dXJuey4uLmssbm90OiFrLm5vdH07aWYodz09PSJtYXgiJiZFIT09dm9pZCAwKXJldHVybiBrO2lmKHc9PT0ibWF4IiYmUyE9PXZvaWQgMClyZXR1cm57Li4uayxub3Q6IWsubm90fX0pLm1hcChrPT5bay5uYW1lLGtdKSl9ZnVuY3Rpb24gcCh3KXtyZXR1cm4oayxTKT0+aGgodyxrLnZhbHVlLFMudmFsdWUpfWxldCBoPXAoIm1heCIpLGI9cCgibWluIik7ZnVuY3Rpb24gdih3KXtyZXR1cm4gaz0+e2lmKG4paWYoZil7aWYodHlwZW9mIGs9PSJzdHJpbmciJiYhYyhrKSlyZXR1cm4gRy53YXJuKCJtaW5tYXgtaGF2ZS1taXhlZC11bml0cyIsWyJUaGUgYG1pbi0qYCBhbmQgYG1heC0qYCB2YXJpYW50cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGEgYHNjcmVlbnNgIGNvbmZpZ3VyYXRpb24gY29udGFpbmluZyBtaXhlZCB1bml0cy4iXSksW119ZWxzZSByZXR1cm4gRy53YXJuKCJtaXhlZC1zY3JlZW4tdW5pdHMiLFsiVGhlIGBtaW4tKmAgYW5kIGBtYXgtKmAgdmFyaWFudHMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBhIGBzY3JlZW5zYCBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgbWl4ZWQgdW5pdHMuIl0pLFtdO2Vsc2UgcmV0dXJuIEcud2FybigiY29tcGxleC1zY3JlZW4tY29uZmlnIixbIlRoZSBgbWluLSpgIGFuZCBgbWF4LSpgIHZhcmlhbnRzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggYSBgc2NyZWVuc2AgY29uZmlndXJhdGlvbiBjb250YWluaW5nIG9iamVjdHMuIl0pLFtdO3JldHVybltgQG1lZGlhICR7VHQoWG4oayx3KSl9YF19fXQoIm1heCIsdigibWF4Iikse3NvcnQ6aCx2YWx1ZXM6bj9kKCJtYXgiKTp7fX0pO2xldCB5PSJtaW4tc2NyZWVucyI7Zm9yKGxldCB3IG9mIHMpZSh3Lm5hbWUsYEBtZWRpYSAke1R0KHcpfWAse2lkOnksc29ydDpuJiZmP2I6dm9pZCAwLHZhbHVlOnd9KTt0KCJtaW4iLHYoIm1pbiIpLHtpZDp5LHNvcnQ6Yn0pfSxzdXBwb3J0c1ZhcmlhbnRzOih7bWF0Y2hWYXJpYW50OnIsdGhlbWU6ZX0pPT57cigic3VwcG9ydHMiLCh0PSIiKT0+e2xldCBpPUsodCksbj0vXlx3KlxzKlwoLy50ZXN0KGkpO3JldHVybiBpPW4/aS5yZXBsYWNlKC9cYihhbmR8b3J8bm90KVxiL2csIiAkMSAiKTppLG4/YEBzdXBwb3J0cyAke2l9YDooaS5pbmNsdWRlcygiOiIpfHwoaT1gJHtpfTogdmFyKC0tdHcpYCksaS5zdGFydHNXaXRoKCIoIikmJmkuZW5kc1dpdGgoIikiKXx8KGk9YCgke2l9KWApLGBAc3VwcG9ydHMgJHtpfWApfSx7dmFsdWVzOmUoInN1cHBvcnRzIik/P3t9fSl9LGhhc1ZhcmlhbnRzOih7bWF0Y2hWYXJpYW50OnIscHJlZml4OmV9KT0+e3IoImhhcyIsdD0+YCY6aGFzKCR7Syh0KX0pYCx7dmFsdWVzOnt9LFtQdF06e3Jlc3BlY3RQcmVmaXg6ITF9fSkscigiZ3JvdXAtaGFzIiwodCx7bW9kaWZpZXI6aX0pPT5pP2A6bWVyZ2UoJHtlKCIuZ3JvdXAiKX1cXC8ke2l9KTpoYXMoJHtLKHQpfSkgJmA6YDptZXJnZSgke2UoIi5ncm91cCIpfSk6aGFzKCR7Syh0KX0pICZgLHt2YWx1ZXM6e30sW1B0XTp7cmVzcGVjdFByZWZpeDohMX19KSxyKCJwZWVyLWhhcyIsKHQse21vZGlmaWVyOml9KT0+aT9gOm1lcmdlKCR7ZSgiLnBlZXIiKX1cXC8ke2l9KTpoYXMoJHtLKHQpfSkgfiAmYDpgOm1lcmdlKCR7ZSgiLnBlZXIiKX0pOmhhcygke0sodCl9KSB+ICZgLHt2YWx1ZXM6e30sW1B0XTp7cmVzcGVjdFByZWZpeDohMX19KX0sYXJpYVZhcmlhbnRzOih7bWF0Y2hWYXJpYW50OnIsdGhlbWU6ZX0pPT57cigiYXJpYSIsdD0+YCZbYXJpYS0ke1llKEsodCkpfV1gLHt2YWx1ZXM6ZSgiYXJpYSIpPz97fX0pLHIoImdyb3VwLWFyaWEiLCh0LHttb2RpZmllcjppfSk9Pmk/YDptZXJnZSguZ3JvdXBcXC8ke2l9KVthcmlhLSR7WWUoSyh0KSl9XSAmYDpgOm1lcmdlKC5ncm91cClbYXJpYS0ke1llKEsodCkpfV0gJmAse3ZhbHVlczplKCJhcmlhIik/P3t9fSkscigicGVlci1hcmlhIiwodCx7bW9kaWZpZXI6aX0pPT5pP2A6bWVyZ2UoLnBlZXJcXC8ke2l9KVthcmlhLSR7WWUoSyh0KSl9XSB+ICZgOmA6bWVyZ2UoLnBlZXIpW2FyaWEtJHtZZShLKHQpKX1dIH4gJmAse3ZhbHVlczplKCJhcmlhIik/P3t9fSl9LGRhdGFWYXJpYW50czooe21hdGNoVmFyaWFudDpyLHRoZW1lOmV9KT0+e3IoImRhdGEiLHQ9PmAmW2RhdGEtJHtZZShLKHQpKX1dYCx7dmFsdWVzOmUoImRhdGEiKT8/e319KSxyKCJncm91cC1kYXRhIiwodCx7bW9kaWZpZXI6aX0pPT5pP2A6bWVyZ2UoLmdyb3VwXFwvJHtpfSlbZGF0YS0ke1llKEsodCkpfV0gJmA6YDptZXJnZSguZ3JvdXApW2RhdGEtJHtZZShLKHQpKX1dICZgLHt2YWx1ZXM6ZSgiZGF0YSIpPz97fX0pLHIoInBlZXItZGF0YSIsKHQse21vZGlmaWVyOml9KT0+aT9gOm1lcmdlKC5wZWVyXFwvJHtpfSlbZGF0YS0ke1llKEsodCkpfV0gfiAmYDpgOm1lcmdlKC5wZWVyKVtkYXRhLSR7WWUoSyh0KSl9XSB+ICZgLHt2YWx1ZXM6ZSgiZGF0YSIpPz97fX0pfSxvcmllbnRhdGlvblZhcmlhbnRzOih7YWRkVmFyaWFudDpyfSk9PntyKCJwb3J0cmFpdCIsIkBtZWRpYSAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLHIoImxhbmRzY2FwZSIsIkBtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiKX0scHJlZmVyc0NvbnRyYXN0VmFyaWFudHM6KHthZGRWYXJpYW50OnJ9KT0+e3IoImNvbnRyYXN0LW1vcmUiLCJAbWVkaWEgKHByZWZlcnMtY29udHJhc3Q6IG1vcmUpIikscigiY29udHJhc3QtbGVzcyIsIkBtZWRpYSAocHJlZmVycy1jb250cmFzdDogbGVzcykiKX0sZm9yY2VkQ29sb3JzVmFyaWFudHM6KHthZGRWYXJpYW50OnJ9KT0+e3IoImZvcmNlZC1jb2xvcnMiLCJAbWVkaWEgKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKX19LFhlPVsidHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSwgdmFyKC0tdHctdHJhbnNsYXRlLXkpKSIsInJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSIsInNrZXdYKHZhcigtLXR3LXNrZXcteCkpIiwic2tld1kodmFyKC0tdHctc2tldy15KSkiLCJzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIiwic2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKSJdLmpvaW4oIiAiKSxudD1bInZhcigtLXR3LWJsdXIpIiwidmFyKC0tdHctYnJpZ2h0bmVzcykiLCJ2YXIoLS10dy1jb250cmFzdCkiLCJ2YXIoLS10dy1ncmF5c2NhbGUpIiwidmFyKC0tdHctaHVlLXJvdGF0ZSkiLCJ2YXIoLS10dy1pbnZlcnQpIiwidmFyKC0tdHctc2F0dXJhdGUpIiwidmFyKC0tdHctc2VwaWEpIiwidmFyKC0tdHctZHJvcC1zaGFkb3cpIl0uam9pbigiICIpLGdlPVsidmFyKC0tdHctYmFja2Ryb3AtYmx1cikiLCJ2YXIoLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzKSIsInZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSIsInZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSkiLCJ2YXIoLS10dy1iYWNrZHJvcC1odWUtcm90YXRlKSIsInZhcigtLXR3LWJhY2tkcm9wLWludmVydCkiLCJ2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5KSIsInZhcigtLXR3LWJhY2tkcm9wLXNhdHVyYXRlKSIsInZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKSJdLmpvaW4oIiAiKSx5aD17cHJlZmxpZ2h0Oih7YWRkQmFzZTpyfSk9PntsZXQgZT1lZS5wYXJzZShgKiw6OmFmdGVyLDo6YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnRoZW1lKCdib3JkZXJDb2xvci5ERUZBVUxUJywgY3VycmVudENvbG9yKX06OmFmdGVyLDo6YmVmb3Jley0tdHctY29udGVudDonJ306aG9zdCxodG1se2xpbmUtaGVpZ2h0OjEuNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTp0aGVtZSgnZm9udEZhbWlseS5zYW5zJywgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmLCAiQXBwbGUgQ29sb3IgRW1vamkiLCAiU2Vnb2UgVUkgRW1vamkiLCAiU2Vnb2UgVUkgU3ltYm9sIiwgIk5vdG8gQ29sb3IgRW1vamkiKTtmb250LWZlYXR1cmUtc2V0dGluZ3M6dGhlbWUoJ2ZvbnRGYW1pbHkuc2Fuc1sxXS5mb250RmVhdHVyZVNldHRpbmdzJywgbm9ybWFsKTtmb250LXZhcmlhdGlvbi1zZXR0aW5nczp0aGVtZSgnZm9udEZhbWlseS5zYW5zWzFdLmZvbnRWYXJpYXRpb25TZXR0aW5ncycsIG5vcm1hbCk7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWJvZHl7bWFyZ2luOjA7bGluZS1oZWlnaHQ6aW5oZXJpdH1ocntoZWlnaHQ6MDtjb2xvcjppbmhlcml0O2JvcmRlci10b3Atd2lkdGg6MXB4fWFiYnI6d2hlcmUoW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHByZSxzYW1we2ZvbnQtZmFtaWx5OnRoZW1lKCdmb250RmFtaWx5Lm1vbm8nLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZSk7Zm9udC1mZWF0dXJlLXNldHRpbmdzOnRoZW1lKCdmb250RmFtaWx5Lm1vbm9bMV0uZm9udEZlYXR1cmVTZXR0aW5ncycsIG5vcm1hbCk7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6dGhlbWUoJ2ZvbnRGYW1pbHkubW9ub1sxXS5mb250VmFyaWF0aW9uU2V0dGluZ3MnLCBub3JtYWwpO2ZvbnQtc2l6ZToxZW19c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdWJ7Ym90dG9tOi0uMjVlbX1zdXB7dG9wOi0uNWVtfXRhYmxle3RleHQtaW5kZW50OjA7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LWZlYXR1cmUtc2V0dGluZ3M6aW5oZXJpdDtmb250LXZhcmlhdGlvbi1zZXR0aW5nczppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6aW5oZXJpdDtsZXR0ZXItc3BhY2luZzppbmhlcml0O2NvbG9yOmluaGVyaXQ7bWFyZ2luOjA7cGFkZGluZzowfWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX1idXR0b24saW5wdXQ6d2hlcmUoW3R5cGU9YnV0dG9uXSksaW5wdXQ6d2hlcmUoW3R5cGU9cmVzZXRdKSxpbnB1dDp3aGVyZShbdHlwZT1zdWJtaXRdKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOmF1dG99Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31bdHlwZT1zZWFyY2hdey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH1zdW1tYXJ5e2Rpc3BsYXk6bGlzdC1pdGVtfWJsb2NrcXVvdGUsZGQsZGwsZmlndXJlLGgxLGgyLGgzLGg0LGg1LGg2LGhyLHAscHJle21hcmdpbjowfWZpZWxkc2V0e21hcmdpbjowO3BhZGRpbmc6MH1sZWdlbmR7cGFkZGluZzowfW1lbnUsb2wsdWx7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MH1kaWFsb2d7cGFkZGluZzowfXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH1pbnB1dDo6cGxhY2Vob2xkZXIsdGV4dGFyZWE6OnBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjp0aGVtZSgnY29sb3JzLmdyYXkuNCcsICM5Y2EzYWYpfVtyb2xlPWJ1dHRvbl0sYnV0dG9ue2N1cnNvcjpwb2ludGVyfTpkaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH1hdWRpbyxjYW52YXMsZW1iZWQsaWZyYW1lLGltZyxvYmplY3Qsc3ZnLHZpZGVve2Rpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfWltZyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31baGlkZGVuXTp3aGVyZSg6bm90KFtoaWRkZW49dW50aWwtZm91bmRdKSl7ZGlzcGxheTpub25lfWApO3IoW2VlLmNvbW1lbnQoe3RleHQ6YCEgdGFpbHdpbmRjc3MgdiR7ZGh9IHwgTUlUIExpY2Vuc2UgfCBodHRwczovL3RhaWx3aW5kY3NzLmNvbWB9KSwuLi5lLm5vZGVzXSl9LGNvbnRhaW5lcjooKCk9PntmdW5jdGlvbiByKHQ9W10pe3JldHVybiB0LmZsYXRNYXAoaT0+aS52YWx1ZXMubWFwKG49Pm4ubWluKSkuZmlsdGVyKGk9PmkhPT12b2lkIDApfWZ1bmN0aW9uIGUodCxpLG4pe2lmKHR5cGVvZiBuPT0idW5kZWZpbmVkIilyZXR1cm5bXTtpZighKHR5cGVvZiBuPT0ib2JqZWN0IiYmbiE9PW51bGwpKXJldHVyblt7c2NyZWVuOiJERUZBVUxUIixtaW5XaWR0aDowLHBhZGRpbmc6bn1dO2xldCBzPVtdO24uREVGQVVMVCYmcy5wdXNoKHtzY3JlZW46IkRFRkFVTFQiLG1pbldpZHRoOjAscGFkZGluZzpuLkRFRkFVTFR9KTtmb3IobGV0IGEgb2YgdClmb3IobGV0IG8gb2YgaSlmb3IobGV0e21pbjpsfW9mIG8udmFsdWVzKWw9PT1hJiZzLnB1c2goe21pbldpZHRoOmEscGFkZGluZzpuW28ubmFtZV19KTtyZXR1cm4gc31yZXR1cm4gZnVuY3Rpb24oe2FkZENvbXBvbmVudHM6dCx0aGVtZTppfSl7bGV0IG49UnQoaSgiY29udGFpbmVyLnNjcmVlbnMiLGkoInNjcmVlbnMiKSkpLHM9cihuKSxhPWUocyxuLGkoImNvbnRhaW5lci5wYWRkaW5nIikpLG89Yz0+e2xldCBmPWEuZmluZChkPT5kLm1pbldpZHRoPT09Yyk7cmV0dXJuIGY/e3BhZGRpbmdSaWdodDpmLnBhZGRpbmcscGFkZGluZ0xlZnQ6Zi5wYWRkaW5nfTp7fX0sbD1BcnJheS5mcm9tKG5ldyBTZXQocy5zbGljZSgpLnNvcnQoKGMsZik9PnBhcnNlSW50KGMpLXBhcnNlSW50KGYpKSkpLm1hcChjPT4oe1tgQG1lZGlhIChtaW4td2lkdGg6ICR7Y30pYF06eyIuY29udGFpbmVyIjp7Im1heC13aWR0aCI6YywuLi5vKGMpfX19KSk7dChbeyIuY29udGFpbmVyIjpPYmplY3QuYXNzaWduKHt3aWR0aDoiMTAwJSJ9LGkoImNvbnRhaW5lci5jZW50ZXIiLCExKT97bWFyZ2luUmlnaHQ6ImF1dG8iLG1hcmdpbkxlZnQ6ImF1dG8ifTp7fSxvKDApKX0sLi4ubF0pfX0pKCksYWNjZXNzaWJpbGl0eTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLnNyLW9ubHkiOntwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOiIxcHgiLGhlaWdodDoiMXB4IixwYWRkaW5nOiIwIixtYXJnaW46Ii0xcHgiLG92ZXJmbG93OiJoaWRkZW4iLGNsaXA6InJlY3QoMCwgMCwgMCwgMCkiLHdoaXRlU3BhY2U6Im5vd3JhcCIsYm9yZGVyV2lkdGg6IjAifSwiLm5vdC1zci1vbmx5Ijp7cG9zaXRpb246InN0YXRpYyIsd2lkdGg6ImF1dG8iLGhlaWdodDoiYXV0byIscGFkZGluZzoiMCIsbWFyZ2luOiIwIixvdmVyZmxvdzoidmlzaWJsZSIsY2xpcDoiYXV0byIsd2hpdGVTcGFjZToibm9ybWFsIn19KX0scG9pbnRlckV2ZW50czooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLnBvaW50ZXItZXZlbnRzLW5vbmUiOnsicG9pbnRlci1ldmVudHMiOiJub25lIn0sIi5wb2ludGVyLWV2ZW50cy1hdXRvIjp7InBvaW50ZXItZXZlbnRzIjoiYXV0byJ9fSl9LHZpc2liaWxpdHk6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii52aXNpYmxlIjp7dmlzaWJpbGl0eToidmlzaWJsZSJ9LCIuaW52aXNpYmxlIjp7dmlzaWJpbGl0eToiaGlkZGVuIn0sIi5jb2xsYXBzZSI6e3Zpc2liaWxpdHk6ImNvbGxhcHNlIn19KX0scG9zaXRpb246KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5zdGF0aWMiOntwb3NpdGlvbjoic3RhdGljIn0sIi5maXhlZCI6e3Bvc2l0aW9uOiJmaXhlZCJ9LCIuYWJzb2x1dGUiOntwb3NpdGlvbjoiYWJzb2x1dGUifSwiLnJlbGF0aXZlIjp7cG9zaXRpb246InJlbGF0aXZlIn0sIi5zdGlja3kiOntwb3NpdGlvbjoic3RpY2t5In19KX0saW5zZXQ6TCgiaW5zZXQiLFtbImluc2V0IixbImluc2V0Il1dLFtbImluc2V0LXgiLFsibGVmdCIsInJpZ2h0Il1dLFsiaW5zZXQteSIsWyJ0b3AiLCJib3R0b20iXV1dLFtbInN0YXJ0IixbImluc2V0LWlubGluZS1zdGFydCJdXSxbImVuZCIsWyJpbnNldC1pbmxpbmUtZW5kIl1dLFsidG9wIixbInRvcCJdXSxbInJpZ2h0IixbInJpZ2h0Il1dLFsiYm90dG9tIixbImJvdHRvbSJdXSxbImxlZnQiLFsibGVmdCJdXV1dLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksaXNvbGF0aW9uOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuaXNvbGF0ZSI6e2lzb2xhdGlvbjoiaXNvbGF0ZSJ9LCIuaXNvbGF0aW9uLWF1dG8iOntpc29sYXRpb246ImF1dG8ifX0pfSx6SW5kZXg6TCgiekluZGV4IixbWyJ6IixbInpJbmRleCJdXV0se3N1cHBvcnRzTmVnYXRpdmVWYWx1ZXM6ITB9KSxvcmRlcjpMKCJvcmRlciIsdm9pZCAwLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksZ3JpZENvbHVtbjpMKCJncmlkQ29sdW1uIixbWyJjb2wiLFsiZ3JpZENvbHVtbiJdXV0pLGdyaWRDb2x1bW5TdGFydDpMKCJncmlkQ29sdW1uU3RhcnQiLFtbImNvbC1zdGFydCIsWyJncmlkQ29sdW1uU3RhcnQiXV1dLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksZ3JpZENvbHVtbkVuZDpMKCJncmlkQ29sdW1uRW5kIixbWyJjb2wtZW5kIixbImdyaWRDb2x1bW5FbmQiXV1dLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksZ3JpZFJvdzpMKCJncmlkUm93IixbWyJyb3ciLFsiZ3JpZFJvdyJdXV0pLGdyaWRSb3dTdGFydDpMKCJncmlkUm93U3RhcnQiLFtbInJvdy1zdGFydCIsWyJncmlkUm93U3RhcnQiXV1dLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksZ3JpZFJvd0VuZDpMKCJncmlkUm93RW5kIixbWyJyb3ctZW5kIixbImdyaWRSb3dFbmQiXV1dLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksZmxvYXQ6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5mbG9hdC1zdGFydCI6e2Zsb2F0OiJpbmxpbmUtc3RhcnQifSwiLmZsb2F0LWVuZCI6e2Zsb2F0OiJpbmxpbmUtZW5kIn0sIi5mbG9hdC1yaWdodCI6e2Zsb2F0OiJyaWdodCJ9LCIuZmxvYXQtbGVmdCI6e2Zsb2F0OiJsZWZ0In0sIi5mbG9hdC1ub25lIjp7ZmxvYXQ6Im5vbmUifX0pfSxjbGVhcjooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmNsZWFyLXN0YXJ0Ijp7Y2xlYXI6ImlubGluZS1zdGFydCJ9LCIuY2xlYXItZW5kIjp7Y2xlYXI6ImlubGluZS1lbmQifSwiLmNsZWFyLWxlZnQiOntjbGVhcjoibGVmdCJ9LCIuY2xlYXItcmlnaHQiOntjbGVhcjoicmlnaHQifSwiLmNsZWFyLWJvdGgiOntjbGVhcjoiYm90aCJ9LCIuY2xlYXItbm9uZSI6e2NsZWFyOiJub25lIn19KX0sbWFyZ2luOkwoIm1hcmdpbiIsW1sibSIsWyJtYXJnaW4iXV0sW1sibXgiLFsibWFyZ2luLWxlZnQiLCJtYXJnaW4tcmlnaHQiXV0sWyJteSIsWyJtYXJnaW4tdG9wIiwibWFyZ2luLWJvdHRvbSJdXV0sW1sibXMiLFsibWFyZ2luLWlubGluZS1zdGFydCJdXSxbIm1lIixbIm1hcmdpbi1pbmxpbmUtZW5kIl1dLFsibXQiLFsibWFyZ2luLXRvcCJdXSxbIm1yIixbIm1hcmdpbi1yaWdodCJdXSxbIm1iIixbIm1hcmdpbi1ib3R0b20iXV0sWyJtbCIsWyJtYXJnaW4tbGVmdCJdXV1dLHtzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksYm94U2l6aW5nOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuYm94LWJvcmRlciI6eyJib3gtc2l6aW5nIjoiYm9yZGVyLWJveCJ9LCIuYm94LWNvbnRlbnQiOnsiYm94LXNpemluZyI6ImNvbnRlbnQtYm94In19KX0sbGluZUNsYW1wOih7bWF0Y2hVdGlsaXRpZXM6cixhZGRVdGlsaXRpZXM6ZSx0aGVtZTp0fSk9PntyKHsibGluZS1jbGFtcCI6aT0+KHtvdmVyZmxvdzoiaGlkZGVuIixkaXNwbGF5OiItd2Via2l0LWJveCIsIi13ZWJraXQtYm94LW9yaWVudCI6InZlcnRpY2FsIiwiLXdlYmtpdC1saW5lLWNsYW1wIjpgJHtpfWB9KX0se3ZhbHVlczp0KCJsaW5lQ2xhbXAiKX0pLGUoeyIubGluZS1jbGFtcC1ub25lIjp7b3ZlcmZsb3c6InZpc2libGUiLGRpc3BsYXk6ImJsb2NrIiwiLXdlYmtpdC1ib3gtb3JpZW50IjoiaG9yaXpvbnRhbCIsIi13ZWJraXQtbGluZS1jbGFtcCI6Im5vbmUifX0pfSxkaXNwbGF5Oih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuYmxvY2siOntkaXNwbGF5OiJibG9jayJ9LCIuaW5saW5lLWJsb2NrIjp7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sIi5pbmxpbmUiOntkaXNwbGF5OiJpbmxpbmUifSwiLmZsZXgiOntkaXNwbGF5OiJmbGV4In0sIi5pbmxpbmUtZmxleCI6e2Rpc3BsYXk6ImlubGluZS1mbGV4In0sIi50YWJsZSI6e2Rpc3BsYXk6InRhYmxlIn0sIi5pbmxpbmUtdGFibGUiOntkaXNwbGF5OiJpbmxpbmUtdGFibGUifSwiLnRhYmxlLWNhcHRpb24iOntkaXNwbGF5OiJ0YWJsZS1jYXB0aW9uIn0sIi50YWJsZS1jZWxsIjp7ZGlzcGxheToidGFibGUtY2VsbCJ9LCIudGFibGUtY29sdW1uIjp7ZGlzcGxheToidGFibGUtY29sdW1uIn0sIi50YWJsZS1jb2x1bW4tZ3JvdXAiOntkaXNwbGF5OiJ0YWJsZS1jb2x1bW4tZ3JvdXAifSwiLnRhYmxlLWZvb3Rlci1ncm91cCI6e2Rpc3BsYXk6InRhYmxlLWZvb3Rlci1ncm91cCJ9LCIudGFibGUtaGVhZGVyLWdyb3VwIjp7ZGlzcGxheToidGFibGUtaGVhZGVyLWdyb3VwIn0sIi50YWJsZS1yb3ctZ3JvdXAiOntkaXNwbGF5OiJ0YWJsZS1yb3ctZ3JvdXAifSwiLnRhYmxlLXJvdyI6e2Rpc3BsYXk6InRhYmxlLXJvdyJ9LCIuZmxvdy1yb290Ijp7ZGlzcGxheToiZmxvdy1yb290In0sIi5ncmlkIjp7ZGlzcGxheToiZ3JpZCJ9LCIuaW5saW5lLWdyaWQiOntkaXNwbGF5OiJpbmxpbmUtZ3JpZCJ9LCIuY29udGVudHMiOntkaXNwbGF5OiJjb250ZW50cyJ9LCIubGlzdC1pdGVtIjp7ZGlzcGxheToibGlzdC1pdGVtIn0sIi5oaWRkZW4iOntkaXNwbGF5OiJub25lIn19KX0sYXNwZWN0UmF0aW86TCgiYXNwZWN0UmF0aW8iLFtbImFzcGVjdCIsWyJhc3BlY3QtcmF0aW8iXV1dKSxzaXplOkwoInNpemUiLFtbInNpemUiLFsid2lkdGgiLCJoZWlnaHQiXV1dKSxoZWlnaHQ6TCgiaGVpZ2h0IixbWyJoIixbImhlaWdodCJdXV0pLG1heEhlaWdodDpMKCJtYXhIZWlnaHQiLFtbIm1heC1oIixbIm1heEhlaWdodCJdXV0pLG1pbkhlaWdodDpMKCJtaW5IZWlnaHQiLFtbIm1pbi1oIixbIm1pbkhlaWdodCJdXV0pLHdpZHRoOkwoIndpZHRoIixbWyJ3IixbIndpZHRoIl1dXSksbWluV2lkdGg6TCgibWluV2lkdGgiLFtbIm1pbi13IixbIm1pbldpZHRoIl1dXSksbWF4V2lkdGg6TCgibWF4V2lkdGgiLFtbIm1heC13IixbIm1heFdpZHRoIl1dXSksZmxleDpMKCJmbGV4IiksZmxleFNocmluazpMKCJmbGV4U2hyaW5rIixbWyJmbGV4LXNocmluayIsWyJmbGV4LXNocmluayJdXSxbInNocmluayIsWyJmbGV4LXNocmluayJdXV0pLGZsZXhHcm93OkwoImZsZXhHcm93IixbWyJmbGV4LWdyb3ciLFsiZmxleC1ncm93Il1dLFsiZ3JvdyIsWyJmbGV4LWdyb3ciXV1dKSxmbGV4QmFzaXM6TCgiZmxleEJhc2lzIixbWyJiYXNpcyIsWyJmbGV4LWJhc2lzIl1dXSksdGFibGVMYXlvdXQ6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii50YWJsZS1hdXRvIjp7InRhYmxlLWxheW91dCI6ImF1dG8ifSwiLnRhYmxlLWZpeGVkIjp7InRhYmxlLWxheW91dCI6ImZpeGVkIn19KX0sY2FwdGlvblNpZGU6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5jYXB0aW9uLXRvcCI6eyJjYXB0aW9uLXNpZGUiOiJ0b3AifSwiLmNhcHRpb24tYm90dG9tIjp7ImNhcHRpb24tc2lkZSI6ImJvdHRvbSJ9fSl9LGJvcmRlckNvbGxhcHNlOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuYm9yZGVyLWNvbGxhcHNlIjp7ImJvcmRlci1jb2xsYXBzZSI6ImNvbGxhcHNlIn0sIi5ib3JkZXItc2VwYXJhdGUiOnsiYm9yZGVyLWNvbGxhcHNlIjoic2VwYXJhdGUifX0pfSxib3JkZXJTcGFjaW5nOih7YWRkRGVmYXVsdHM6cixtYXRjaFV0aWxpdGllczplLHRoZW1lOnR9KT0+e3IoImJvcmRlci1zcGFjaW5nIix7Ii0tdHctYm9yZGVyLXNwYWNpbmcteCI6MCwiLS10dy1ib3JkZXItc3BhY2luZy15IjowfSksZSh7ImJvcmRlci1zcGFjaW5nIjppPT4oeyItLXR3LWJvcmRlci1zcGFjaW5nLXgiOmksIi0tdHctYm9yZGVyLXNwYWNpbmcteSI6aSwiQGRlZmF1bHRzIGJvcmRlci1zcGFjaW5nIjp7fSwiYm9yZGVyLXNwYWNpbmciOiJ2YXIoLS10dy1ib3JkZXItc3BhY2luZy14KSB2YXIoLS10dy1ib3JkZXItc3BhY2luZy15KSJ9KSwiYm9yZGVyLXNwYWNpbmcteCI6aT0+KHsiLS10dy1ib3JkZXItc3BhY2luZy14IjppLCJAZGVmYXVsdHMgYm9yZGVyLXNwYWNpbmciOnt9LCJib3JkZXItc3BhY2luZyI6InZhcigtLXR3LWJvcmRlci1zcGFjaW5nLXgpIHZhcigtLXR3LWJvcmRlci1zcGFjaW5nLXkpIn0pLCJib3JkZXItc3BhY2luZy15IjppPT4oeyItLXR3LWJvcmRlci1zcGFjaW5nLXkiOmksIkBkZWZhdWx0cyBib3JkZXItc3BhY2luZyI6e30sImJvcmRlci1zcGFjaW5nIjoidmFyKC0tdHctYm9yZGVyLXNwYWNpbmcteCkgdmFyKC0tdHctYm9yZGVyLXNwYWNpbmcteSkifSl9LHt2YWx1ZXM6dCgiYm9yZGVyU3BhY2luZyIpfSl9LHRyYW5zZm9ybU9yaWdpbjpMKCJ0cmFuc2Zvcm1PcmlnaW4iLFtbIm9yaWdpbiIsWyJ0cmFuc2Zvcm1PcmlnaW4iXV1dKSx0cmFuc2xhdGU6TCgidHJhbnNsYXRlIixbW1sidHJhbnNsYXRlLXgiLFtbIkBkZWZhdWx0cyB0cmFuc2Zvcm0iLHt9XSwiLS10dy10cmFuc2xhdGUteCIsWyJ0cmFuc2Zvcm0iLFhlXV1dLFsidHJhbnNsYXRlLXkiLFtbIkBkZWZhdWx0cyB0cmFuc2Zvcm0iLHt9XSwiLS10dy10cmFuc2xhdGUteSIsWyJ0cmFuc2Zvcm0iLFhlXV1dXV0se3N1cHBvcnRzTmVnYXRpdmVWYWx1ZXM6ITB9KSxyb3RhdGU6TCgicm90YXRlIixbWyJyb3RhdGUiLFtbIkBkZWZhdWx0cyB0cmFuc2Zvcm0iLHt9XSwiLS10dy1yb3RhdGUiLFsidHJhbnNmb3JtIixYZV1dXV0se3N1cHBvcnRzTmVnYXRpdmVWYWx1ZXM6ITB9KSxza2V3OkwoInNrZXciLFtbWyJza2V3LXgiLFtbIkBkZWZhdWx0cyB0cmFuc2Zvcm0iLHt9XSwiLS10dy1za2V3LXgiLFsidHJhbnNmb3JtIixYZV1dXSxbInNrZXcteSIsW1siQGRlZmF1bHRzIHRyYW5zZm9ybSIse31dLCItLXR3LXNrZXcteSIsWyJ0cmFuc2Zvcm0iLFhlXV1dXV0se3N1cHBvcnRzTmVnYXRpdmVWYWx1ZXM6ITB9KSxzY2FsZTpMKCJzY2FsZSIsW1sic2NhbGUiLFtbIkBkZWZhdWx0cyB0cmFuc2Zvcm0iLHt9XSwiLS10dy1zY2FsZS14IiwiLS10dy1zY2FsZS15IixbInRyYW5zZm9ybSIsWGVdXV0sW1sic2NhbGUteCIsW1siQGRlZmF1bHRzIHRyYW5zZm9ybSIse31dLCItLXR3LXNjYWxlLXgiLFsidHJhbnNmb3JtIixYZV1dXSxbInNjYWxlLXkiLFtbIkBkZWZhdWx0cyB0cmFuc2Zvcm0iLHt9XSwiLS10dy1zY2FsZS15IixbInRyYW5zZm9ybSIsWGVdXV1dXSx7c3VwcG9ydHNOZWdhdGl2ZVZhbHVlczohMH0pLHRyYW5zZm9ybTooe2FkZERlZmF1bHRzOnIsYWRkVXRpbGl0aWVzOmV9KT0+e3IoInRyYW5zZm9ybSIseyItLXR3LXRyYW5zbGF0ZS14IjoiMCIsIi0tdHctdHJhbnNsYXRlLXkiOiIwIiwiLS10dy1yb3RhdGUiOiIwIiwiLS10dy1za2V3LXgiOiIwIiwiLS10dy1za2V3LXkiOiIwIiwiLS10dy1zY2FsZS14IjoiMSIsIi0tdHctc2NhbGUteSI6IjEifSksZSh7Ii50cmFuc2Zvcm0iOnsiQGRlZmF1bHRzIHRyYW5zZm9ybSI6e30sdHJhbnNmb3JtOlhlfSwiLnRyYW5zZm9ybS1jcHUiOnt0cmFuc2Zvcm06WGV9LCIudHJhbnNmb3JtLWdwdSI6e3RyYW5zZm9ybTpYZS5yZXBsYWNlKCJ0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSkpIiwidHJhbnNsYXRlM2QodmFyKC0tdHctdHJhbnNsYXRlLXgpLCB2YXIoLS10dy10cmFuc2xhdGUteSksIDApIil9LCIudHJhbnNmb3JtLW5vbmUiOnt0cmFuc2Zvcm06Im5vbmUifX0pfSxhbmltYXRpb246KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmUsY29uZmlnOnR9KT0+e2xldCBpPXM9PlRlKHQoInByZWZpeCIpK3MpLG49T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGUoImtleWZyYW1lcyIpPz97fSkubWFwKChbcyxhXSk9PltzLHtbYEBrZXlmcmFtZXMgJHtpKHMpfWBdOmF9XSkpO3Ioe2FuaW1hdGU6cz0+e2xldCBhPU1vKHMpO3JldHVyblsuLi5hLmZsYXRNYXAobz0+bltvLm5hbWVdKSx7YW5pbWF0aW9uOmEubWFwKCh7bmFtZTpvLHZhbHVlOmx9KT0+bz09PXZvaWQgMHx8bltvXT09PXZvaWQgMD9sOmwucmVwbGFjZShvLGkobykpKS5qb2luKCIsICIpfV19fSx7dmFsdWVzOmUoImFuaW1hdGlvbiIpfSl9LGN1cnNvcjpMKCJjdXJzb3IiKSx0b3VjaEFjdGlvbjooe2FkZERlZmF1bHRzOnIsYWRkVXRpbGl0aWVzOmV9KT0+e3IoInRvdWNoLWFjdGlvbiIseyItLXR3LXBhbi14IjoiICIsIi0tdHctcGFuLXkiOiIgIiwiLS10dy1waW5jaC16b29tIjoiICJ9KTtsZXQgdD0idmFyKC0tdHctcGFuLXgpIHZhcigtLXR3LXBhbi15KSB2YXIoLS10dy1waW5jaC16b29tKSI7ZSh7Ii50b3VjaC1hdXRvIjp7InRvdWNoLWFjdGlvbiI6ImF1dG8ifSwiLnRvdWNoLW5vbmUiOnsidG91Y2gtYWN0aW9uIjoibm9uZSJ9LCIudG91Y2gtcGFuLXgiOnsiQGRlZmF1bHRzIHRvdWNoLWFjdGlvbiI6e30sIi0tdHctcGFuLXgiOiJwYW4teCIsInRvdWNoLWFjdGlvbiI6dH0sIi50b3VjaC1wYW4tbGVmdCI6eyJAZGVmYXVsdHMgdG91Y2gtYWN0aW9uIjp7fSwiLS10dy1wYW4teCI6InBhbi1sZWZ0IiwidG91Y2gtYWN0aW9uIjp0fSwiLnRvdWNoLXBhbi1yaWdodCI6eyJAZGVmYXVsdHMgdG91Y2gtYWN0aW9uIjp7fSwiLS10dy1wYW4teCI6InBhbi1yaWdodCIsInRvdWNoLWFjdGlvbiI6dH0sIi50b3VjaC1wYW4teSI6eyJAZGVmYXVsdHMgdG91Y2gtYWN0aW9uIjp7fSwiLS10dy1wYW4teSI6InBhbi15IiwidG91Y2gtYWN0aW9uIjp0fSwiLnRvdWNoLXBhbi11cCI6eyJAZGVmYXVsdHMgdG91Y2gtYWN0aW9uIjp7fSwiLS10dy1wYW4teSI6InBhbi11cCIsInRvdWNoLWFjdGlvbiI6dH0sIi50b3VjaC1wYW4tZG93biI6eyJAZGVmYXVsdHMgdG91Y2gtYWN0aW9uIjp7fSwiLS10dy1wYW4teSI6InBhbi1kb3duIiwidG91Y2gtYWN0aW9uIjp0fSwiLnRvdWNoLXBpbmNoLXpvb20iOnsiQGRlZmF1bHRzIHRvdWNoLWFjdGlvbiI6e30sIi0tdHctcGluY2gtem9vbSI6InBpbmNoLXpvb20iLCJ0b3VjaC1hY3Rpb24iOnR9LCIudG91Y2gtbWFuaXB1bGF0aW9uIjp7InRvdWNoLWFjdGlvbiI6Im1hbmlwdWxhdGlvbiJ9fSl9LHVzZXJTZWxlY3Q6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5zZWxlY3Qtbm9uZSI6eyJ1c2VyLXNlbGVjdCI6Im5vbmUifSwiLnNlbGVjdC10ZXh0Ijp7InVzZXItc2VsZWN0IjoidGV4dCJ9LCIuc2VsZWN0LWFsbCI6eyJ1c2VyLXNlbGVjdCI6ImFsbCJ9LCIuc2VsZWN0LWF1dG8iOnsidXNlci1zZWxlY3QiOiJhdXRvIn19KX0scmVzaXplOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIucmVzaXplLW5vbmUiOntyZXNpemU6Im5vbmUifSwiLnJlc2l6ZS15Ijp7cmVzaXplOiJ2ZXJ0aWNhbCJ9LCIucmVzaXplLXgiOntyZXNpemU6Imhvcml6b250YWwifSwiLnJlc2l6ZSI6e3Jlc2l6ZToiYm90aCJ9fSl9LHNjcm9sbFNuYXBUeXBlOih7YWRkRGVmYXVsdHM6cixhZGRVdGlsaXRpZXM6ZX0pPT57cigic2Nyb2xsLXNuYXAtdHlwZSIseyItLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3MiOiJwcm94aW1pdHkifSksZSh7Ii5zbmFwLW5vbmUiOnsic2Nyb2xsLXNuYXAtdHlwZSI6Im5vbmUifSwiLnNuYXAteCI6eyJAZGVmYXVsdHMgc2Nyb2xsLXNuYXAtdHlwZSI6e30sInNjcm9sbC1zbmFwLXR5cGUiOiJ4IHZhcigtLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3MpIn0sIi5zbmFwLXkiOnsiQGRlZmF1bHRzIHNjcm9sbC1zbmFwLXR5cGUiOnt9LCJzY3JvbGwtc25hcC10eXBlIjoieSB2YXIoLS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzKSJ9LCIuc25hcC1ib3RoIjp7IkBkZWZhdWx0cyBzY3JvbGwtc25hcC10eXBlIjp7fSwic2Nyb2xsLXNuYXAtdHlwZSI6ImJvdGggdmFyKC0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzcykifSwiLnNuYXAtbWFuZGF0b3J5Ijp7Ii0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzcyI6Im1hbmRhdG9yeSJ9LCIuc25hcC1wcm94aW1pdHkiOnsiLS10dy1zY3JvbGwtc25hcC1zdHJpY3RuZXNzIjoicHJveGltaXR5In19KX0sc2Nyb2xsU25hcEFsaWduOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuc25hcC1zdGFydCI6eyJzY3JvbGwtc25hcC1hbGlnbiI6InN0YXJ0In0sIi5zbmFwLWVuZCI6eyJzY3JvbGwtc25hcC1hbGlnbiI6ImVuZCJ9LCIuc25hcC1jZW50ZXIiOnsic2Nyb2xsLXNuYXAtYWxpZ24iOiJjZW50ZXIifSwiLnNuYXAtYWxpZ24tbm9uZSI6eyJzY3JvbGwtc25hcC1hbGlnbiI6Im5vbmUifX0pfSxzY3JvbGxTbmFwU3RvcDooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLnNuYXAtbm9ybWFsIjp7InNjcm9sbC1zbmFwLXN0b3AiOiJub3JtYWwifSwiLnNuYXAtYWx3YXlzIjp7InNjcm9sbC1zbmFwLXN0b3AiOiJhbHdheXMifX0pfSxzY3JvbGxNYXJnaW46TCgic2Nyb2xsTWFyZ2luIixbWyJzY3JvbGwtbSIsWyJzY3JvbGwtbWFyZ2luIl1dLFtbInNjcm9sbC1teCIsWyJzY3JvbGwtbWFyZ2luLWxlZnQiLCJzY3JvbGwtbWFyZ2luLXJpZ2h0Il1dLFsic2Nyb2xsLW15IixbInNjcm9sbC1tYXJnaW4tdG9wIiwic2Nyb2xsLW1hcmdpbi1ib3R0b20iXV1dLFtbInNjcm9sbC1tcyIsWyJzY3JvbGwtbWFyZ2luLWlubGluZS1zdGFydCJdXSxbInNjcm9sbC1tZSIsWyJzY3JvbGwtbWFyZ2luLWlubGluZS1lbmQiXV0sWyJzY3JvbGwtbXQiLFsic2Nyb2xsLW1hcmdpbi10b3AiXV0sWyJzY3JvbGwtbXIiLFsic2Nyb2xsLW1hcmdpbi1yaWdodCJdXSxbInNjcm9sbC1tYiIsWyJzY3JvbGwtbWFyZ2luLWJvdHRvbSJdXSxbInNjcm9sbC1tbCIsWyJzY3JvbGwtbWFyZ2luLWxlZnQiXV1dXSx7c3VwcG9ydHNOZWdhdGl2ZVZhbHVlczohMH0pLHNjcm9sbFBhZGRpbmc6TCgic2Nyb2xsUGFkZGluZyIsW1sic2Nyb2xsLXAiLFsic2Nyb2xsLXBhZGRpbmciXV0sW1sic2Nyb2xsLXB4IixbInNjcm9sbC1wYWRkaW5nLWxlZnQiLCJzY3JvbGwtcGFkZGluZy1yaWdodCJdXSxbInNjcm9sbC1weSIsWyJzY3JvbGwtcGFkZGluZy10b3AiLCJzY3JvbGwtcGFkZGluZy1ib3R0b20iXV1dLFtbInNjcm9sbC1wcyIsWyJzY3JvbGwtcGFkZGluZy1pbmxpbmUtc3RhcnQiXV0sWyJzY3JvbGwtcGUiLFsic2Nyb2xsLXBhZGRpbmctaW5saW5lLWVuZCJdXSxbInNjcm9sbC1wdCIsWyJzY3JvbGwtcGFkZGluZy10b3AiXV0sWyJzY3JvbGwtcHIiLFsic2Nyb2xsLXBhZGRpbmctcmlnaHQiXV0sWyJzY3JvbGwtcGIiLFsic2Nyb2xsLXBhZGRpbmctYm90dG9tIl1dLFsic2Nyb2xsLXBsIixbInNjcm9sbC1wYWRkaW5nLWxlZnQiXV1dXSksbGlzdFN0eWxlUG9zaXRpb246KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5saXN0LWluc2lkZSI6eyJsaXN0LXN0eWxlLXBvc2l0aW9uIjoiaW5zaWRlIn0sIi5saXN0LW91dHNpZGUiOnsibGlzdC1zdHlsZS1wb3NpdGlvbiI6Im91dHNpZGUifX0pfSxsaXN0U3R5bGVUeXBlOkwoImxpc3RTdHlsZVR5cGUiLFtbImxpc3QiLFsibGlzdFN0eWxlVHlwZSJdXV0pLGxpc3RTdHlsZUltYWdlOkwoImxpc3RTdHlsZUltYWdlIixbWyJsaXN0LWltYWdlIixbImxpc3RTdHlsZUltYWdlIl1dXSksYXBwZWFyYW5jZTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmFwcGVhcmFuY2Utbm9uZSI6e2FwcGVhcmFuY2U6Im5vbmUifSwiLmFwcGVhcmFuY2UtYXV0byI6e2FwcGVhcmFuY2U6ImF1dG8ifX0pfSxjb2x1bW5zOkwoImNvbHVtbnMiLFtbImNvbHVtbnMiLFsiY29sdW1ucyJdXV0pLGJyZWFrQmVmb3JlOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuYnJlYWstYmVmb3JlLWF1dG8iOnsiYnJlYWstYmVmb3JlIjoiYXV0byJ9LCIuYnJlYWstYmVmb3JlLWF2b2lkIjp7ImJyZWFrLWJlZm9yZSI6ImF2b2lkIn0sIi5icmVhay1iZWZvcmUtYWxsIjp7ImJyZWFrLWJlZm9yZSI6ImFsbCJ9LCIuYnJlYWstYmVmb3JlLWF2b2lkLXBhZ2UiOnsiYnJlYWstYmVmb3JlIjoiYXZvaWQtcGFnZSJ9LCIuYnJlYWstYmVmb3JlLXBhZ2UiOnsiYnJlYWstYmVmb3JlIjoicGFnZSJ9LCIuYnJlYWstYmVmb3JlLWxlZnQiOnsiYnJlYWstYmVmb3JlIjoibGVmdCJ9LCIuYnJlYWstYmVmb3JlLXJpZ2h0Ijp7ImJyZWFrLWJlZm9yZSI6InJpZ2h0In0sIi5icmVhay1iZWZvcmUtY29sdW1uIjp7ImJyZWFrLWJlZm9yZSI6ImNvbHVtbiJ9fSl9LGJyZWFrSW5zaWRlOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuYnJlYWstaW5zaWRlLWF1dG8iOnsiYnJlYWstaW5zaWRlIjoiYXV0byJ9LCIuYnJlYWstaW5zaWRlLWF2b2lkIjp7ImJyZWFrLWluc2lkZSI6ImF2b2lkIn0sIi5icmVhay1pbnNpZGUtYXZvaWQtcGFnZSI6eyJicmVhay1pbnNpZGUiOiJhdm9pZC1wYWdlIn0sIi5icmVhay1pbnNpZGUtYXZvaWQtY29sdW1uIjp7ImJyZWFrLWluc2lkZSI6ImF2b2lkLWNvbHVtbiJ9fSl9LGJyZWFrQWZ0ZXI6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5icmVhay1hZnRlci1hdXRvIjp7ImJyZWFrLWFmdGVyIjoiYXV0byJ9LCIuYnJlYWstYWZ0ZXItYXZvaWQiOnsiYnJlYWstYWZ0ZXIiOiJhdm9pZCJ9LCIuYnJlYWstYWZ0ZXItYWxsIjp7ImJyZWFrLWFmdGVyIjoiYWxsIn0sIi5icmVhay1hZnRlci1hdm9pZC1wYWdlIjp7ImJyZWFrLWFmdGVyIjoiYXZvaWQtcGFnZSJ9LCIuYnJlYWstYWZ0ZXItcGFnZSI6eyJicmVhay1hZnRlciI6InBhZ2UifSwiLmJyZWFrLWFmdGVyLWxlZnQiOnsiYnJlYWstYWZ0ZXIiOiJsZWZ0In0sIi5icmVhay1hZnRlci1yaWdodCI6eyJicmVhay1hZnRlciI6InJpZ2h0In0sIi5icmVhay1hZnRlci1jb2x1bW4iOnsiYnJlYWstYWZ0ZXIiOiJjb2x1bW4ifX0pfSxncmlkQXV0b0NvbHVtbnM6TCgiZ3JpZEF1dG9Db2x1bW5zIixbWyJhdXRvLWNvbHMiLFsiZ3JpZEF1dG9Db2x1bW5zIl1dXSksZ3JpZEF1dG9GbG93Oih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuZ3JpZC1mbG93LXJvdyI6e2dyaWRBdXRvRmxvdzoicm93In0sIi5ncmlkLWZsb3ctY29sIjp7Z3JpZEF1dG9GbG93OiJjb2x1bW4ifSwiLmdyaWQtZmxvdy1kZW5zZSI6e2dyaWRBdXRvRmxvdzoiZGVuc2UifSwiLmdyaWQtZmxvdy1yb3ctZGVuc2UiOntncmlkQXV0b0Zsb3c6InJvdyBkZW5zZSJ9LCIuZ3JpZC1mbG93LWNvbC1kZW5zZSI6e2dyaWRBdXRvRmxvdzoiY29sdW1uIGRlbnNlIn19KX0sZ3JpZEF1dG9Sb3dzOkwoImdyaWRBdXRvUm93cyIsW1siYXV0by1yb3dzIixbImdyaWRBdXRvUm93cyJdXV0pLGdyaWRUZW1wbGF0ZUNvbHVtbnM6TCgiZ3JpZFRlbXBsYXRlQ29sdW1ucyIsW1siZ3JpZC1jb2xzIixbImdyaWRUZW1wbGF0ZUNvbHVtbnMiXV1dKSxncmlkVGVtcGxhdGVSb3dzOkwoImdyaWRUZW1wbGF0ZVJvd3MiLFtbImdyaWQtcm93cyIsWyJncmlkVGVtcGxhdGVSb3dzIl1dXSksZmxleERpcmVjdGlvbjooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmZsZXgtcm93Ijp7ImZsZXgtZGlyZWN0aW9uIjoicm93In0sIi5mbGV4LXJvdy1yZXZlcnNlIjp7ImZsZXgtZGlyZWN0aW9uIjoicm93LXJldmVyc2UifSwiLmZsZXgtY29sIjp7ImZsZXgtZGlyZWN0aW9uIjoiY29sdW1uIn0sIi5mbGV4LWNvbC1yZXZlcnNlIjp7ImZsZXgtZGlyZWN0aW9uIjoiY29sdW1uLXJldmVyc2UifX0pfSxmbGV4V3JhcDooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmZsZXgtd3JhcCI6eyJmbGV4LXdyYXAiOiJ3cmFwIn0sIi5mbGV4LXdyYXAtcmV2ZXJzZSI6eyJmbGV4LXdyYXAiOiJ3cmFwLXJldmVyc2UifSwiLmZsZXgtbm93cmFwIjp7ImZsZXgtd3JhcCI6Im5vd3JhcCJ9fSl9LHBsYWNlQ29udGVudDooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLnBsYWNlLWNvbnRlbnQtY2VudGVyIjp7InBsYWNlLWNvbnRlbnQiOiJjZW50ZXIifSwiLnBsYWNlLWNvbnRlbnQtc3RhcnQiOnsicGxhY2UtY29udGVudCI6InN0YXJ0In0sIi5wbGFjZS1jb250ZW50LWVuZCI6eyJwbGFjZS1jb250ZW50IjoiZW5kIn0sIi5wbGFjZS1jb250ZW50LWJldHdlZW4iOnsicGxhY2UtY29udGVudCI6InNwYWNlLWJldHdlZW4ifSwiLnBsYWNlLWNvbnRlbnQtYXJvdW5kIjp7InBsYWNlLWNvbnRlbnQiOiJzcGFjZS1hcm91bmQifSwiLnBsYWNlLWNvbnRlbnQtZXZlbmx5Ijp7InBsYWNlLWNvbnRlbnQiOiJzcGFjZS1ldmVubHkifSwiLnBsYWNlLWNvbnRlbnQtYmFzZWxpbmUiOnsicGxhY2UtY29udGVudCI6ImJhc2VsaW5lIn0sIi5wbGFjZS1jb250ZW50LXN0cmV0Y2giOnsicGxhY2UtY29udGVudCI6InN0cmV0Y2gifX0pfSxwbGFjZUl0ZW1zOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIucGxhY2UtaXRlbXMtc3RhcnQiOnsicGxhY2UtaXRlbXMiOiJzdGFydCJ9LCIucGxhY2UtaXRlbXMtZW5kIjp7InBsYWNlLWl0ZW1zIjoiZW5kIn0sIi5wbGFjZS1pdGVtcy1jZW50ZXIiOnsicGxhY2UtaXRlbXMiOiJjZW50ZXIifSwiLnBsYWNlLWl0ZW1zLWJhc2VsaW5lIjp7InBsYWNlLWl0ZW1zIjoiYmFzZWxpbmUifSwiLnBsYWNlLWl0ZW1zLXN0cmV0Y2giOnsicGxhY2UtaXRlbXMiOiJzdHJldGNoIn19KX0sYWxpZ25Db250ZW50Oih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuY29udGVudC1ub3JtYWwiOnsiYWxpZ24tY29udGVudCI6Im5vcm1hbCJ9LCIuY29udGVudC1jZW50ZXIiOnsiYWxpZ24tY29udGVudCI6ImNlbnRlciJ9LCIuY29udGVudC1zdGFydCI6eyJhbGlnbi1jb250ZW50IjoiZmxleC1zdGFydCJ9LCIuY29udGVudC1lbmQiOnsiYWxpZ24tY29udGVudCI6ImZsZXgtZW5kIn0sIi5jb250ZW50LWJldHdlZW4iOnsiYWxpZ24tY29udGVudCI6InNwYWNlLWJldHdlZW4ifSwiLmNvbnRlbnQtYXJvdW5kIjp7ImFsaWduLWNvbnRlbnQiOiJzcGFjZS1hcm91bmQifSwiLmNvbnRlbnQtZXZlbmx5Ijp7ImFsaWduLWNvbnRlbnQiOiJzcGFjZS1ldmVubHkifSwiLmNvbnRlbnQtYmFzZWxpbmUiOnsiYWxpZ24tY29udGVudCI6ImJhc2VsaW5lIn0sIi5jb250ZW50LXN0cmV0Y2giOnsiYWxpZ24tY29udGVudCI6InN0cmV0Y2gifX0pfSxhbGlnbkl0ZW1zOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuaXRlbXMtc3RhcnQiOnsiYWxpZ24taXRlbXMiOiJmbGV4LXN0YXJ0In0sIi5pdGVtcy1lbmQiOnsiYWxpZ24taXRlbXMiOiJmbGV4LWVuZCJ9LCIuaXRlbXMtY2VudGVyIjp7ImFsaWduLWl0ZW1zIjoiY2VudGVyIn0sIi5pdGVtcy1iYXNlbGluZSI6eyJhbGlnbi1pdGVtcyI6ImJhc2VsaW5lIn0sIi5pdGVtcy1zdHJldGNoIjp7ImFsaWduLWl0ZW1zIjoic3RyZXRjaCJ9fSl9LGp1c3RpZnlDb250ZW50Oih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuanVzdGlmeS1ub3JtYWwiOnsianVzdGlmeS1jb250ZW50Ijoibm9ybWFsIn0sIi5qdXN0aWZ5LXN0YXJ0Ijp7Imp1c3RpZnktY29udGVudCI6ImZsZXgtc3RhcnQifSwiLmp1c3RpZnktZW5kIjp7Imp1c3RpZnktY29udGVudCI6ImZsZXgtZW5kIn0sIi5qdXN0aWZ5LWNlbnRlciI6eyJqdXN0aWZ5LWNvbnRlbnQiOiJjZW50ZXIifSwiLmp1c3RpZnktYmV0d2VlbiI6eyJqdXN0aWZ5LWNvbnRlbnQiOiJzcGFjZS1iZXR3ZWVuIn0sIi5qdXN0aWZ5LWFyb3VuZCI6eyJqdXN0aWZ5LWNvbnRlbnQiOiJzcGFjZS1hcm91bmQifSwiLmp1c3RpZnktZXZlbmx5Ijp7Imp1c3RpZnktY29udGVudCI6InNwYWNlLWV2ZW5seSJ9LCIuanVzdGlmeS1zdHJldGNoIjp7Imp1c3RpZnktY29udGVudCI6InN0cmV0Y2gifX0pfSxqdXN0aWZ5SXRlbXM6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5qdXN0aWZ5LWl0ZW1zLXN0YXJ0Ijp7Imp1c3RpZnktaXRlbXMiOiJzdGFydCJ9LCIuanVzdGlmeS1pdGVtcy1lbmQiOnsianVzdGlmeS1pdGVtcyI6ImVuZCJ9LCIuanVzdGlmeS1pdGVtcy1jZW50ZXIiOnsianVzdGlmeS1pdGVtcyI6ImNlbnRlciJ9LCIuanVzdGlmeS1pdGVtcy1zdHJldGNoIjp7Imp1c3RpZnktaXRlbXMiOiJzdHJldGNoIn19KX0sZ2FwOkwoImdhcCIsW1siZ2FwIixbImdhcCJdXSxbWyJnYXAteCIsWyJjb2x1bW5HYXAiXV0sWyJnYXAteSIsWyJyb3dHYXAiXV1dXSksc3BhY2U6KHttYXRjaFV0aWxpdGllczpyLGFkZFV0aWxpdGllczplLHRoZW1lOnR9KT0+e3IoeyJzcGFjZS14IjppPT4oaT1pPT09IjAiPyIwcHgiOmkseyImID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyItLXR3LXNwYWNlLXgtcmV2ZXJzZSI6IjAiLCJtYXJnaW4tcmlnaHQiOmBjYWxjKCR7aX0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKWAsIm1hcmdpbi1sZWZ0IjpgY2FsYygke2l9ICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpYH19KSwic3BhY2UteSI6aT0+KGk9aT09PSIwIj8iMHB4IjppLHsiJiA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkiOnsiLS10dy1zcGFjZS15LXJldmVyc2UiOiIwIiwibWFyZ2luLXRvcCI6YGNhbGMoJHtpfSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKWAsIm1hcmdpbi1ib3R0b20iOmBjYWxjKCR7aX0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKWB9fSl9LHt2YWx1ZXM6dCgic3BhY2UiKSxzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksZSh7Ii5zcGFjZS15LXJldmVyc2UgPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIjp7Ii0tdHctc3BhY2UteS1yZXZlcnNlIjoiMSJ9LCIuc3BhY2UteC1yZXZlcnNlID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyItLXR3LXNwYWNlLXgtcmV2ZXJzZSI6IjEifX0pfSxkaXZpZGVXaWR0aDooe21hdGNoVXRpbGl0aWVzOnIsYWRkVXRpbGl0aWVzOmUsdGhlbWU6dH0pPT57cih7ImRpdmlkZS14IjppPT4oaT1pPT09IjAiPyIwcHgiOmkseyImID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyJAZGVmYXVsdHMgYm9yZGVyLXdpZHRoIjp7fSwiLS10dy1kaXZpZGUteC1yZXZlcnNlIjoiMCIsImJvcmRlci1yaWdodC13aWR0aCI6YGNhbGMoJHtpfSAqIHZhcigtLXR3LWRpdmlkZS14LXJldmVyc2UpKWAsImJvcmRlci1sZWZ0LXdpZHRoIjpgY2FsYygke2l9ICogY2FsYygxIC0gdmFyKC0tdHctZGl2aWRlLXgtcmV2ZXJzZSkpKWB9fSksImRpdmlkZS15IjppPT4oaT1pPT09IjAiPyIwcHgiOmkseyImID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyJAZGVmYXVsdHMgYm9yZGVyLXdpZHRoIjp7fSwiLS10dy1kaXZpZGUteS1yZXZlcnNlIjoiMCIsImJvcmRlci10b3Atd2lkdGgiOmBjYWxjKCR7aX0gKiBjYWxjKDEgLSB2YXIoLS10dy1kaXZpZGUteS1yZXZlcnNlKSkpYCwiYm9yZGVyLWJvdHRvbS13aWR0aCI6YGNhbGMoJHtpfSAqIHZhcigtLXR3LWRpdmlkZS15LXJldmVyc2UpKWB9fSl9LHt2YWx1ZXM6dCgiZGl2aWRlV2lkdGgiKSx0eXBlOlsibGluZS13aWR0aCIsImxlbmd0aCIsImFueSJdfSksZSh7Ii5kaXZpZGUteS1yZXZlcnNlID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyJAZGVmYXVsdHMgYm9yZGVyLXdpZHRoIjp7fSwiLS10dy1kaXZpZGUteS1yZXZlcnNlIjoiMSJ9LCIuZGl2aWRlLXgtcmV2ZXJzZSA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkiOnsiQGRlZmF1bHRzIGJvcmRlci13aWR0aCI6e30sIi0tdHctZGl2aWRlLXgtcmV2ZXJzZSI6IjEifX0pfSxkaXZpZGVTdHlsZTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmRpdmlkZS1zb2xpZCA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkiOnsiYm9yZGVyLXN0eWxlIjoic29saWQifSwiLmRpdmlkZS1kYXNoZWQgPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIjp7ImJvcmRlci1zdHlsZSI6ImRhc2hlZCJ9LCIuZGl2aWRlLWRvdHRlZCA+IDpub3QoW2hpZGRlbl0pIH4gOm5vdChbaGlkZGVuXSkiOnsiYm9yZGVyLXN0eWxlIjoiZG90dGVkIn0sIi5kaXZpZGUtZG91YmxlID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyJib3JkZXItc3R5bGUiOiJkb3VibGUifSwiLmRpdmlkZS1ub25lID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSI6eyJib3JkZXItc3R5bGUiOiJub25lIn19KX0sZGl2aWRlQ29sb3I6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmUsY29yZVBsdWdpbnM6dH0pPT57cih7ZGl2aWRlOmk9PnQoImRpdmlkZU9wYWNpdHkiKT97WyImID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSJdOkFlKHtjb2xvcjppLHByb3BlcnR5OiJib3JkZXItY29sb3IiLHZhcmlhYmxlOiItLXR3LWRpdmlkZS1vcGFjaXR5In0pfTp7WyImID4gOm5vdChbaGlkZGVuXSkgfiA6bm90KFtoaWRkZW5dKSJdOnsiYm9yZGVyLWNvbG9yIjpYKGkpfX19LHt2YWx1ZXM6KCh7REVGQVVMVDppLC4uLm59KT0+bikoeGUoZSgiZGl2aWRlQ29sb3IiKSkpLHR5cGU6WyJjb2xvciIsImFueSJdfSl9LGRpdmlkZU9wYWNpdHk6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3IoeyJkaXZpZGUtb3BhY2l0eSI6dD0+KHtbIiYgPiA6bm90KFtoaWRkZW5dKSB+IDpub3QoW2hpZGRlbl0pIl06eyItLXR3LWRpdmlkZS1vcGFjaXR5Ijp0fX0pfSx7dmFsdWVzOmUoImRpdmlkZU9wYWNpdHkiKX0pfSxwbGFjZVNlbGY6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5wbGFjZS1zZWxmLWF1dG8iOnsicGxhY2Utc2VsZiI6ImF1dG8ifSwiLnBsYWNlLXNlbGYtc3RhcnQiOnsicGxhY2Utc2VsZiI6InN0YXJ0In0sIi5wbGFjZS1zZWxmLWVuZCI6eyJwbGFjZS1zZWxmIjoiZW5kIn0sIi5wbGFjZS1zZWxmLWNlbnRlciI6eyJwbGFjZS1zZWxmIjoiY2VudGVyIn0sIi5wbGFjZS1zZWxmLXN0cmV0Y2giOnsicGxhY2Utc2VsZiI6InN0cmV0Y2gifX0pfSxhbGlnblNlbGY6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5zZWxmLWF1dG8iOnsiYWxpZ24tc2VsZiI6ImF1dG8ifSwiLnNlbGYtc3RhcnQiOnsiYWxpZ24tc2VsZiI6ImZsZXgtc3RhcnQifSwiLnNlbGYtZW5kIjp7ImFsaWduLXNlbGYiOiJmbGV4LWVuZCJ9LCIuc2VsZi1jZW50ZXIiOnsiYWxpZ24tc2VsZiI6ImNlbnRlciJ9LCIuc2VsZi1zdHJldGNoIjp7ImFsaWduLXNlbGYiOiJzdHJldGNoIn0sIi5zZWxmLWJhc2VsaW5lIjp7ImFsaWduLXNlbGYiOiJiYXNlbGluZSJ9fSl9LGp1c3RpZnlTZWxmOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuanVzdGlmeS1zZWxmLWF1dG8iOnsianVzdGlmeS1zZWxmIjoiYXV0byJ9LCIuanVzdGlmeS1zZWxmLXN0YXJ0Ijp7Imp1c3RpZnktc2VsZiI6InN0YXJ0In0sIi5qdXN0aWZ5LXNlbGYtZW5kIjp7Imp1c3RpZnktc2VsZiI6ImVuZCJ9LCIuanVzdGlmeS1zZWxmLWNlbnRlciI6eyJqdXN0aWZ5LXNlbGYiOiJjZW50ZXIifSwiLmp1c3RpZnktc2VsZi1zdHJldGNoIjp7Imp1c3RpZnktc2VsZiI6InN0cmV0Y2gifX0pfSxvdmVyZmxvdzooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLm92ZXJmbG93LWF1dG8iOntvdmVyZmxvdzoiYXV0byJ9LCIub3ZlcmZsb3ctaGlkZGVuIjp7b3ZlcmZsb3c6ImhpZGRlbiJ9LCIub3ZlcmZsb3ctY2xpcCI6e292ZXJmbG93OiJjbGlwIn0sIi5vdmVyZmxvdy12aXNpYmxlIjp7b3ZlcmZsb3c6InZpc2libGUifSwiLm92ZXJmbG93LXNjcm9sbCI6e292ZXJmbG93OiJzY3JvbGwifSwiLm92ZXJmbG93LXgtYXV0byI6eyJvdmVyZmxvdy14IjoiYXV0byJ9LCIub3ZlcmZsb3cteS1hdXRvIjp7Im92ZXJmbG93LXkiOiJhdXRvIn0sIi5vdmVyZmxvdy14LWhpZGRlbiI6eyJvdmVyZmxvdy14IjoiaGlkZGVuIn0sIi5vdmVyZmxvdy15LWhpZGRlbiI6eyJvdmVyZmxvdy15IjoiaGlkZGVuIn0sIi5vdmVyZmxvdy14LWNsaXAiOnsib3ZlcmZsb3cteCI6ImNsaXAifSwiLm92ZXJmbG93LXktY2xpcCI6eyJvdmVyZmxvdy15IjoiY2xpcCJ9LCIub3ZlcmZsb3cteC12aXNpYmxlIjp7Im92ZXJmbG93LXgiOiJ2aXNpYmxlIn0sIi5vdmVyZmxvdy15LXZpc2libGUiOnsib3ZlcmZsb3cteSI6InZpc2libGUifSwiLm92ZXJmbG93LXgtc2Nyb2xsIjp7Im92ZXJmbG93LXgiOiJzY3JvbGwifSwiLm92ZXJmbG93LXktc2Nyb2xsIjp7Im92ZXJmbG93LXkiOiJzY3JvbGwifX0pfSxvdmVyc2Nyb2xsQmVoYXZpb3I6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5vdmVyc2Nyb2xsLWF1dG8iOnsib3ZlcnNjcm9sbC1iZWhhdmlvciI6ImF1dG8ifSwiLm92ZXJzY3JvbGwtY29udGFpbiI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yIjoiY29udGFpbiJ9LCIub3ZlcnNjcm9sbC1ub25lIjp7Im92ZXJzY3JvbGwtYmVoYXZpb3IiOiJub25lIn0sIi5vdmVyc2Nyb2xsLXktYXV0byI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yLXkiOiJhdXRvIn0sIi5vdmVyc2Nyb2xsLXktY29udGFpbiI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yLXkiOiJjb250YWluIn0sIi5vdmVyc2Nyb2xsLXktbm9uZSI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yLXkiOiJub25lIn0sIi5vdmVyc2Nyb2xsLXgtYXV0byI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yLXgiOiJhdXRvIn0sIi5vdmVyc2Nyb2xsLXgtY29udGFpbiI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yLXgiOiJjb250YWluIn0sIi5vdmVyc2Nyb2xsLXgtbm9uZSI6eyJvdmVyc2Nyb2xsLWJlaGF2aW9yLXgiOiJub25lIn19KX0sc2Nyb2xsQmVoYXZpb3I6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5zY3JvbGwtYXV0byI6eyJzY3JvbGwtYmVoYXZpb3IiOiJhdXRvIn0sIi5zY3JvbGwtc21vb3RoIjp7InNjcm9sbC1iZWhhdmlvciI6InNtb290aCJ9fSl9LHRleHRPdmVyZmxvdzooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLnRydW5jYXRlIjp7b3ZlcmZsb3c6ImhpZGRlbiIsInRleHQtb3ZlcmZsb3ciOiJlbGxpcHNpcyIsIndoaXRlLXNwYWNlIjoibm93cmFwIn0sIi5vdmVyZmxvdy1lbGxpcHNpcyI6eyJ0ZXh0LW92ZXJmbG93IjoiZWxsaXBzaXMifSwiLnRleHQtZWxsaXBzaXMiOnsidGV4dC1vdmVyZmxvdyI6ImVsbGlwc2lzIn0sIi50ZXh0LWNsaXAiOnsidGV4dC1vdmVyZmxvdyI6ImNsaXAifX0pfSxoeXBoZW5zOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuaHlwaGVucy1ub25lIjp7aHlwaGVuczoibm9uZSJ9LCIuaHlwaGVucy1tYW51YWwiOntoeXBoZW5zOiJtYW51YWwifSwiLmh5cGhlbnMtYXV0byI6e2h5cGhlbnM6ImF1dG8ifX0pfSx3aGl0ZXNwYWNlOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIud2hpdGVzcGFjZS1ub3JtYWwiOnsid2hpdGUtc3BhY2UiOiJub3JtYWwifSwiLndoaXRlc3BhY2Utbm93cmFwIjp7IndoaXRlLXNwYWNlIjoibm93cmFwIn0sIi53aGl0ZXNwYWNlLXByZSI6eyJ3aGl0ZS1zcGFjZSI6InByZSJ9LCIud2hpdGVzcGFjZS1wcmUtbGluZSI6eyJ3aGl0ZS1zcGFjZSI6InByZS1saW5lIn0sIi53aGl0ZXNwYWNlLXByZS13cmFwIjp7IndoaXRlLXNwYWNlIjoicHJlLXdyYXAifSwiLndoaXRlc3BhY2UtYnJlYWstc3BhY2VzIjp7IndoaXRlLXNwYWNlIjoiYnJlYWstc3BhY2VzIn19KX0sdGV4dFdyYXA6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii50ZXh0LXdyYXAiOnsidGV4dC13cmFwIjoid3JhcCJ9LCIudGV4dC1ub3dyYXAiOnsidGV4dC13cmFwIjoibm93cmFwIn0sIi50ZXh0LWJhbGFuY2UiOnsidGV4dC13cmFwIjoiYmFsYW5jZSJ9LCIudGV4dC1wcmV0dHkiOnsidGV4dC13cmFwIjoicHJldHR5In19KX0sd29yZEJyZWFrOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIuYnJlYWstbm9ybWFsIjp7Im92ZXJmbG93LXdyYXAiOiJub3JtYWwiLCJ3b3JkLWJyZWFrIjoibm9ybWFsIn0sIi5icmVhay13b3JkcyI6eyJvdmVyZmxvdy13cmFwIjoiYnJlYWstd29yZCJ9LCIuYnJlYWstYWxsIjp7IndvcmQtYnJlYWsiOiJicmVhay1hbGwifSwiLmJyZWFrLWtlZXAiOnsid29yZC1icmVhayI6ImtlZXAtYWxsIn19KX0sYm9yZGVyUmFkaXVzOkwoImJvcmRlclJhZGl1cyIsW1sicm91bmRlZCIsWyJib3JkZXItcmFkaXVzIl1dLFtbInJvdW5kZWQtcyIsWyJib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzIiwiYm9yZGVyLWVuZC1zdGFydC1yYWRpdXMiXV0sWyJyb3VuZGVkLWUiLFsiYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXMiLCJib3JkZXItZW5kLWVuZC1yYWRpdXMiXV0sWyJyb3VuZGVkLXQiLFsiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIl1dLFsicm91bmRlZC1yIixbImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiXV0sWyJyb3VuZGVkLWIiLFsiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiLCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIl1dLFsicm91bmRlZC1sIixbImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLCJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIl1dXSxbWyJyb3VuZGVkLXNzIixbImJvcmRlci1zdGFydC1zdGFydC1yYWRpdXMiXV0sWyJyb3VuZGVkLXNlIixbImJvcmRlci1zdGFydC1lbmQtcmFkaXVzIl1dLFsicm91bmRlZC1lZSIsWyJib3JkZXItZW5kLWVuZC1yYWRpdXMiXV0sWyJyb3VuZGVkLWVzIixbImJvcmRlci1lbmQtc3RhcnQtcmFkaXVzIl1dLFsicm91bmRlZC10bCIsWyJib3JkZXItdG9wLWxlZnQtcmFkaXVzIl1dLFsicm91bmRlZC10ciIsWyJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyJdXSxbInJvdW5kZWQtYnIiLFsiYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiXV0sWyJyb3VuZGVkLWJsIixbImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiXV1dXSksYm9yZGVyV2lkdGg6TCgiYm9yZGVyV2lkdGgiLFtbImJvcmRlciIsW1siQGRlZmF1bHRzIGJvcmRlci13aWR0aCIse31dLCJib3JkZXItd2lkdGgiXV0sW1siYm9yZGVyLXgiLFtbIkBkZWZhdWx0cyBib3JkZXItd2lkdGgiLHt9XSwiYm9yZGVyLWxlZnQtd2lkdGgiLCJib3JkZXItcmlnaHQtd2lkdGgiXV0sWyJib3JkZXIteSIsW1siQGRlZmF1bHRzIGJvcmRlci13aWR0aCIse31dLCJib3JkZXItdG9wLXdpZHRoIiwiYm9yZGVyLWJvdHRvbS13aWR0aCJdXV0sW1siYm9yZGVyLXMiLFtbIkBkZWZhdWx0cyBib3JkZXItd2lkdGgiLHt9XSwiYm9yZGVyLWlubGluZS1zdGFydC13aWR0aCJdXSxbImJvcmRlci1lIixbWyJAZGVmYXVsdHMgYm9yZGVyLXdpZHRoIix7fV0sImJvcmRlci1pbmxpbmUtZW5kLXdpZHRoIl1dLFsiYm9yZGVyLXQiLFtbIkBkZWZhdWx0cyBib3JkZXItd2lkdGgiLHt9XSwiYm9yZGVyLXRvcC13aWR0aCJdXSxbImJvcmRlci1yIixbWyJAZGVmYXVsdHMgYm9yZGVyLXdpZHRoIix7fV0sImJvcmRlci1yaWdodC13aWR0aCJdXSxbImJvcmRlci1iIixbWyJAZGVmYXVsdHMgYm9yZGVyLXdpZHRoIix7fV0sImJvcmRlci1ib3R0b20td2lkdGgiXV0sWyJib3JkZXItbCIsW1siQGRlZmF1bHRzIGJvcmRlci13aWR0aCIse31dLCJib3JkZXItbGVmdC13aWR0aCJdXV1dLHt0eXBlOlsibGluZS13aWR0aCIsImxlbmd0aCJdfSksYm9yZGVyU3R5bGU6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5ib3JkZXItc29saWQiOnsiYm9yZGVyLXN0eWxlIjoic29saWQifSwiLmJvcmRlci1kYXNoZWQiOnsiYm9yZGVyLXN0eWxlIjoiZGFzaGVkIn0sIi5ib3JkZXItZG90dGVkIjp7ImJvcmRlci1zdHlsZSI6ImRvdHRlZCJ9LCIuYm9yZGVyLWRvdWJsZSI6eyJib3JkZXItc3R5bGUiOiJkb3VibGUifSwiLmJvcmRlci1oaWRkZW4iOnsiYm9yZGVyLXN0eWxlIjoiaGlkZGVuIn0sIi5ib3JkZXItbm9uZSI6eyJib3JkZXItc3R5bGUiOiJub25lIn19KX0sYm9yZGVyQ29sb3I6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmUsY29yZVBsdWdpbnM6dH0pPT57cih7Ym9yZGVyOmk9PnQoImJvcmRlck9wYWNpdHkiKT9BZSh7Y29sb3I6aSxwcm9wZXJ0eToiYm9yZGVyLWNvbG9yIix2YXJpYWJsZToiLS10dy1ib3JkZXItb3BhY2l0eSJ9KTp7ImJvcmRlci1jb2xvciI6WChpKX19LHt2YWx1ZXM6KCh7REVGQVVMVDppLC4uLm59KT0+bikoeGUoZSgiYm9yZGVyQ29sb3IiKSkpLHR5cGU6WyJjb2xvciIsImFueSJdfSkscih7ImJvcmRlci14IjppPT50KCJib3JkZXJPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6WyJib3JkZXItbGVmdC1jb2xvciIsImJvcmRlci1yaWdodC1jb2xvciJdLHZhcmlhYmxlOiItLXR3LWJvcmRlci1vcGFjaXR5In0pOnsiYm9yZGVyLWxlZnQtY29sb3IiOlgoaSksImJvcmRlci1yaWdodC1jb2xvciI6WChpKX0sImJvcmRlci15IjppPT50KCJib3JkZXJPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6WyJib3JkZXItdG9wLWNvbG9yIiwiYm9yZGVyLWJvdHRvbS1jb2xvciJdLHZhcmlhYmxlOiItLXR3LWJvcmRlci1vcGFjaXR5In0pOnsiYm9yZGVyLXRvcC1jb2xvciI6WChpKSwiYm9yZGVyLWJvdHRvbS1jb2xvciI6WChpKX19LHt2YWx1ZXM6KCh7REVGQVVMVDppLC4uLm59KT0+bikoeGUoZSgiYm9yZGVyQ29sb3IiKSkpLHR5cGU6WyJjb2xvciIsImFueSJdfSkscih7ImJvcmRlci1zIjppPT50KCJib3JkZXJPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6ImJvcmRlci1pbmxpbmUtc3RhcnQtY29sb3IiLHZhcmlhYmxlOiItLXR3LWJvcmRlci1vcGFjaXR5In0pOnsiYm9yZGVyLWlubGluZS1zdGFydC1jb2xvciI6WChpKX0sImJvcmRlci1lIjppPT50KCJib3JkZXJPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6ImJvcmRlci1pbmxpbmUtZW5kLWNvbG9yIix2YXJpYWJsZToiLS10dy1ib3JkZXItb3BhY2l0eSJ9KTp7ImJvcmRlci1pbmxpbmUtZW5kLWNvbG9yIjpYKGkpfSwiYm9yZGVyLXQiOmk9PnQoImJvcmRlck9wYWNpdHkiKT9BZSh7Y29sb3I6aSxwcm9wZXJ0eToiYm9yZGVyLXRvcC1jb2xvciIsdmFyaWFibGU6Ii0tdHctYm9yZGVyLW9wYWNpdHkifSk6eyJib3JkZXItdG9wLWNvbG9yIjpYKGkpfSwiYm9yZGVyLXIiOmk9PnQoImJvcmRlck9wYWNpdHkiKT9BZSh7Y29sb3I6aSxwcm9wZXJ0eToiYm9yZGVyLXJpZ2h0LWNvbG9yIix2YXJpYWJsZToiLS10dy1ib3JkZXItb3BhY2l0eSJ9KTp7ImJvcmRlci1yaWdodC1jb2xvciI6WChpKX0sImJvcmRlci1iIjppPT50KCJib3JkZXJPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6ImJvcmRlci1ib3R0b20tY29sb3IiLHZhcmlhYmxlOiItLXR3LWJvcmRlci1vcGFjaXR5In0pOnsiYm9yZGVyLWJvdHRvbS1jb2xvciI6WChpKX0sImJvcmRlci1sIjppPT50KCJib3JkZXJPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6ImJvcmRlci1sZWZ0LWNvbG9yIix2YXJpYWJsZToiLS10dy1ib3JkZXItb3BhY2l0eSJ9KTp7ImJvcmRlci1sZWZ0LWNvbG9yIjpYKGkpfX0se3ZhbHVlczooKHtERUZBVUxUOmksLi4ubn0pPT5uKSh4ZShlKCJib3JkZXJDb2xvciIpKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0sYm9yZGVyT3BhY2l0eTpMKCJib3JkZXJPcGFjaXR5IixbWyJib3JkZXItb3BhY2l0eSIsWyItLXR3LWJvcmRlci1vcGFjaXR5Il1dXSksYmFja2dyb3VuZENvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplLGNvcmVQbHVnaW5zOnR9KT0+e3Ioe2JnOmk9PnQoImJhY2tncm91bmRPcGFjaXR5Iik/QWUoe2NvbG9yOmkscHJvcGVydHk6ImJhY2tncm91bmQtY29sb3IiLHZhcmlhYmxlOiItLXR3LWJnLW9wYWNpdHkifSk6eyJiYWNrZ3JvdW5kLWNvbG9yIjpYKGkpfX0se3ZhbHVlczp4ZShlKCJiYWNrZ3JvdW5kQ29sb3IiKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0sYmFja2dyb3VuZE9wYWNpdHk6TCgiYmFja2dyb3VuZE9wYWNpdHkiLFtbImJnLW9wYWNpdHkiLFsiLS10dy1iZy1vcGFjaXR5Il1dXSksYmFja2dyb3VuZEltYWdlOkwoImJhY2tncm91bmRJbWFnZSIsW1siYmciLFsiYmFja2dyb3VuZC1pbWFnZSJdXV0se3R5cGU6WyJsb29rdXAiLCJpbWFnZSIsInVybCJdfSksZ3JhZGllbnRDb2xvclN0b3BzOigoKT0+e2Z1bmN0aW9uIHIoZSl7cmV0dXJuIEplKGUsMCwicmdiKDI1NSAyNTUgMjU1IC8gMCkiKX1yZXR1cm4gZnVuY3Rpb24oe21hdGNoVXRpbGl0aWVzOmUsdGhlbWU6dCxhZGREZWZhdWx0czppfSl7aSgiZ3JhZGllbnQtY29sb3Itc3RvcHMiLHsiLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uIjoiICIsIi0tdHctZ3JhZGllbnQtdmlhLXBvc2l0aW9uIjoiICIsIi0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24iOiIgIn0pO2xldCBuPXt2YWx1ZXM6eGUodCgiZ3JhZGllbnRDb2xvclN0b3BzIikpLHR5cGU6WyJjb2xvciIsImFueSJdfSxzPXt2YWx1ZXM6dCgiZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnMiKSx0eXBlOlsibGVuZ3RoIiwicGVyY2VudGFnZSJdfTtlKHtmcm9tOmE9PntsZXQgbz1yKGEpO3JldHVybnsiQGRlZmF1bHRzIGdyYWRpZW50LWNvbG9yLXN0b3BzIjp7fSwiLS10dy1ncmFkaWVudC1mcm9tIjpgJHtYKGEpfSB2YXIoLS10dy1ncmFkaWVudC1mcm9tLXBvc2l0aW9uKWAsIi0tdHctZ3JhZGllbnQtdG8iOmAke299IHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKWAsIi0tdHctZ3JhZGllbnQtc3RvcHMiOiJ2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pIn19fSxuKSxlKHtmcm9tOmE9Pih7Ii0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbiI6YX0pfSxzKSxlKHt2aWE6YT0+e2xldCBvPXIoYSk7cmV0dXJueyJAZGVmYXVsdHMgZ3JhZGllbnQtY29sb3Itc3RvcHMiOnt9LCItLXR3LWdyYWRpZW50LXRvIjpgJHtvfSAgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pYCwiLS10dy1ncmFkaWVudC1zdG9wcyI6YHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCAke1goYSl9IHZhcigtLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbiksIHZhcigtLXR3LWdyYWRpZW50LXRvKWB9fX0sbiksZSh7dmlhOmE9Pih7Ii0tdHctZ3JhZGllbnQtdmlhLXBvc2l0aW9uIjphfSl9LHMpLGUoe3RvOmE9Pih7IkBkZWZhdWx0cyBncmFkaWVudC1jb2xvci1zdG9wcyI6e30sIi0tdHctZ3JhZGllbnQtdG8iOmAke1goYSl9IHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKWB9KX0sbiksZSh7dG86YT0+KHsiLS10dy1ncmFkaWVudC10by1wb3NpdGlvbiI6YX0pfSxzKX19KSgpLGJveERlY29yYXRpb25CcmVhazooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmRlY29yYXRpb24tc2xpY2UiOnsiYm94LWRlY29yYXRpb24tYnJlYWsiOiJzbGljZSJ9LCIuZGVjb3JhdGlvbi1jbG9uZSI6eyJib3gtZGVjb3JhdGlvbi1icmVhayI6ImNsb25lIn0sIi5ib3gtZGVjb3JhdGlvbi1zbGljZSI6eyJib3gtZGVjb3JhdGlvbi1icmVhayI6InNsaWNlIn0sIi5ib3gtZGVjb3JhdGlvbi1jbG9uZSI6eyJib3gtZGVjb3JhdGlvbi1icmVhayI6ImNsb25lIn19KX0sYmFja2dyb3VuZFNpemU6TCgiYmFja2dyb3VuZFNpemUiLFtbImJnIixbImJhY2tncm91bmQtc2l6ZSJdXV0se3R5cGU6WyJsb29rdXAiLCJsZW5ndGgiLCJwZXJjZW50YWdlIiwic2l6ZSJdfSksYmFja2dyb3VuZEF0dGFjaG1lbnQ6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5iZy1maXhlZCI6eyJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOiJmaXhlZCJ9LCIuYmctbG9jYWwiOnsiYmFja2dyb3VuZC1hdHRhY2htZW50IjoibG9jYWwifSwiLmJnLXNjcm9sbCI6eyJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOiJzY3JvbGwifX0pfSxiYWNrZ3JvdW5kQ2xpcDooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmJnLWNsaXAtYm9yZGVyIjp7ImJhY2tncm91bmQtY2xpcCI6ImJvcmRlci1ib3gifSwiLmJnLWNsaXAtcGFkZGluZyI6eyJiYWNrZ3JvdW5kLWNsaXAiOiJwYWRkaW5nLWJveCJ9LCIuYmctY2xpcC1jb250ZW50Ijp7ImJhY2tncm91bmQtY2xpcCI6ImNvbnRlbnQtYm94In0sIi5iZy1jbGlwLXRleHQiOnsiYmFja2dyb3VuZC1jbGlwIjoidGV4dCJ9fSl9LGJhY2tncm91bmRQb3NpdGlvbjpMKCJiYWNrZ3JvdW5kUG9zaXRpb24iLFtbImJnIixbImJhY2tncm91bmQtcG9zaXRpb24iXV1dLHt0eXBlOlsibG9va3VwIixbInBvc2l0aW9uIix7cHJlZmVyT25Db25mbGljdDohMH1dXX0pLGJhY2tncm91bmRSZXBlYXQ6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5iZy1yZXBlYXQiOnsiYmFja2dyb3VuZC1yZXBlYXQiOiJyZXBlYXQifSwiLmJnLW5vLXJlcGVhdCI6eyJiYWNrZ3JvdW5kLXJlcGVhdCI6Im5vLXJlcGVhdCJ9LCIuYmctcmVwZWF0LXgiOnsiYmFja2dyb3VuZC1yZXBlYXQiOiJyZXBlYXQteCJ9LCIuYmctcmVwZWF0LXkiOnsiYmFja2dyb3VuZC1yZXBlYXQiOiJyZXBlYXQteSJ9LCIuYmctcmVwZWF0LXJvdW5kIjp7ImJhY2tncm91bmQtcmVwZWF0Ijoicm91bmQifSwiLmJnLXJlcGVhdC1zcGFjZSI6eyJiYWNrZ3JvdW5kLXJlcGVhdCI6InNwYWNlIn19KX0sYmFja2dyb3VuZE9yaWdpbjooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmJnLW9yaWdpbi1ib3JkZXIiOnsiYmFja2dyb3VuZC1vcmlnaW4iOiJib3JkZXItYm94In0sIi5iZy1vcmlnaW4tcGFkZGluZyI6eyJiYWNrZ3JvdW5kLW9yaWdpbiI6InBhZGRpbmctYm94In0sIi5iZy1vcmlnaW4tY29udGVudCI6eyJiYWNrZ3JvdW5kLW9yaWdpbiI6ImNvbnRlbnQtYm94In19KX0sZmlsbDooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7ZmlsbDp0PT4oe2ZpbGw6WCh0KX0pfSx7dmFsdWVzOnhlKGUoImZpbGwiKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0sc3Ryb2tlOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHtzdHJva2U6dD0+KHtzdHJva2U6WCh0KX0pfSx7dmFsdWVzOnhlKGUoInN0cm9rZSIpKSx0eXBlOlsiY29sb3IiLCJ1cmwiLCJhbnkiXX0pfSxzdHJva2VXaWR0aDpMKCJzdHJva2VXaWR0aCIsW1sic3Ryb2tlIixbInN0cm9rZS13aWR0aCJdXV0se3R5cGU6WyJsZW5ndGgiLCJudW1iZXIiLCJwZXJjZW50YWdlIl19KSxvYmplY3RGaXQ6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5vYmplY3QtY29udGFpbiI6eyJvYmplY3QtZml0IjoiY29udGFpbiJ9LCIub2JqZWN0LWNvdmVyIjp7Im9iamVjdC1maXQiOiJjb3ZlciJ9LCIub2JqZWN0LWZpbGwiOnsib2JqZWN0LWZpdCI6ImZpbGwifSwiLm9iamVjdC1ub25lIjp7Im9iamVjdC1maXQiOiJub25lIn0sIi5vYmplY3Qtc2NhbGUtZG93biI6eyJvYmplY3QtZml0Ijoic2NhbGUtZG93biJ9fSl9LG9iamVjdFBvc2l0aW9uOkwoIm9iamVjdFBvc2l0aW9uIixbWyJvYmplY3QiLFsib2JqZWN0LXBvc2l0aW9uIl1dXSkscGFkZGluZzpMKCJwYWRkaW5nIixbWyJwIixbInBhZGRpbmciXV0sW1sicHgiLFsicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCJdXSxbInB5IixbInBhZGRpbmctdG9wIiwicGFkZGluZy1ib3R0b20iXV1dLFtbInBzIixbInBhZGRpbmctaW5saW5lLXN0YXJ0Il1dLFsicGUiLFsicGFkZGluZy1pbmxpbmUtZW5kIl1dLFsicHQiLFsicGFkZGluZy10b3AiXV0sWyJwciIsWyJwYWRkaW5nLXJpZ2h0Il1dLFsicGIiLFsicGFkZGluZy1ib3R0b20iXV0sWyJwbCIsWyJwYWRkaW5nLWxlZnQiXV1dXSksdGV4dEFsaWduOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIudGV4dC1sZWZ0Ijp7InRleHQtYWxpZ24iOiJsZWZ0In0sIi50ZXh0LWNlbnRlciI6eyJ0ZXh0LWFsaWduIjoiY2VudGVyIn0sIi50ZXh0LXJpZ2h0Ijp7InRleHQtYWxpZ24iOiJyaWdodCJ9LCIudGV4dC1qdXN0aWZ5Ijp7InRleHQtYWxpZ24iOiJqdXN0aWZ5In0sIi50ZXh0LXN0YXJ0Ijp7InRleHQtYWxpZ24iOiJzdGFydCJ9LCIudGV4dC1lbmQiOnsidGV4dC1hbGlnbiI6ImVuZCJ9fSl9LHRleHRJbmRlbnQ6TCgidGV4dEluZGVudCIsW1siaW5kZW50IixbInRleHQtaW5kZW50Il1dXSx7c3VwcG9ydHNOZWdhdGl2ZVZhbHVlczohMH0pLHZlcnRpY2FsQWxpZ246KHthZGRVdGlsaXRpZXM6cixtYXRjaFV0aWxpdGllczplfSk9PntyKHsiLmFsaWduLWJhc2VsaW5lIjp7InZlcnRpY2FsLWFsaWduIjoiYmFzZWxpbmUifSwiLmFsaWduLXRvcCI6eyJ2ZXJ0aWNhbC1hbGlnbiI6InRvcCJ9LCIuYWxpZ24tbWlkZGxlIjp7InZlcnRpY2FsLWFsaWduIjoibWlkZGxlIn0sIi5hbGlnbi1ib3R0b20iOnsidmVydGljYWwtYWxpZ24iOiJib3R0b20ifSwiLmFsaWduLXRleHQtdG9wIjp7InZlcnRpY2FsLWFsaWduIjoidGV4dC10b3AifSwiLmFsaWduLXRleHQtYm90dG9tIjp7InZlcnRpY2FsLWFsaWduIjoidGV4dC1ib3R0b20ifSwiLmFsaWduLXN1YiI6eyJ2ZXJ0aWNhbC1hbGlnbiI6InN1YiJ9LCIuYWxpZ24tc3VwZXIiOnsidmVydGljYWwtYWxpZ24iOiJzdXBlciJ9fSksZSh7YWxpZ246dD0+KHsidmVydGljYWwtYWxpZ24iOnR9KX0pfSxmb250RmFtaWx5Oih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHtmb250OnQ9PntsZXRbaSxuPXt9XT1BcnJheS5pc0FycmF5KHQpJiZrZSh0WzFdKT90Olt0XSx7Zm9udEZlYXR1cmVTZXR0aW5nczpzLGZvbnRWYXJpYXRpb25TZXR0aW5nczphfT1uO3JldHVybnsiZm9udC1mYW1pbHkiOkFycmF5LmlzQXJyYXkoaSk/aS5qb2luKCIsICIpOmksLi4ucz09PXZvaWQgMD97fTp7ImZvbnQtZmVhdHVyZS1zZXR0aW5ncyI6c30sLi4uYT09PXZvaWQgMD97fTp7ImZvbnQtdmFyaWF0aW9uLXNldHRpbmdzIjphfX19fSx7dmFsdWVzOmUoImZvbnRGYW1pbHkiKSx0eXBlOlsibG9va3VwIiwiZ2VuZXJpYy1uYW1lIiwiZmFtaWx5LW5hbWUiXX0pfSxmb250U2l6ZTooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7dGV4dDoodCx7bW9kaWZpZXI6aX0pPT57bGV0W24sc109QXJyYXkuaXNBcnJheSh0KT90Olt0XTtpZihpKXJldHVybnsiZm9udC1zaXplIjpuLCJsaW5lLWhlaWdodCI6aX07bGV0e2xpbmVIZWlnaHQ6YSxsZXR0ZXJTcGFjaW5nOm8sZm9udFdlaWdodDpsfT1rZShzKT9zOntsaW5lSGVpZ2h0OnN9O3JldHVybnsiZm9udC1zaXplIjpuLC4uLmE9PT12b2lkIDA/e306eyJsaW5lLWhlaWdodCI6YX0sLi4ubz09PXZvaWQgMD97fTp7ImxldHRlci1zcGFjaW5nIjpvfSwuLi5sPT09dm9pZCAwP3t9OnsiZm9udC13ZWlnaHQiOmx9fX19LHt2YWx1ZXM6ZSgiZm9udFNpemUiKSxtb2RpZmllcnM6ZSgibGluZUhlaWdodCIpLHR5cGU6WyJhYnNvbHV0ZS1zaXplIiwicmVsYXRpdmUtc2l6ZSIsImxlbmd0aCIsInBlcmNlbnRhZ2UiXX0pfSxmb250V2VpZ2h0OkwoImZvbnRXZWlnaHQiLFtbImZvbnQiLFsiZm9udFdlaWdodCJdXV0se3R5cGU6WyJsb29rdXAiLCJudW1iZXIiLCJhbnkiXX0pLHRleHRUcmFuc2Zvcm06KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii51cHBlcmNhc2UiOnsidGV4dC10cmFuc2Zvcm0iOiJ1cHBlcmNhc2UifSwiLmxvd2VyY2FzZSI6eyJ0ZXh0LXRyYW5zZm9ybSI6Imxvd2VyY2FzZSJ9LCIuY2FwaXRhbGl6ZSI6eyJ0ZXh0LXRyYW5zZm9ybSI6ImNhcGl0YWxpemUifSwiLm5vcm1hbC1jYXNlIjp7InRleHQtdHJhbnNmb3JtIjoibm9uZSJ9fSl9LGZvbnRTdHlsZTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLml0YWxpYyI6eyJmb250LXN0eWxlIjoiaXRhbGljIn0sIi5ub3QtaXRhbGljIjp7ImZvbnQtc3R5bGUiOiJub3JtYWwifX0pfSxmb250VmFyaWFudE51bWVyaWM6KHthZGREZWZhdWx0czpyLGFkZFV0aWxpdGllczplfSk9PntsZXQgdD0idmFyKC0tdHctb3JkaW5hbCkgdmFyKC0tdHctc2xhc2hlZC16ZXJvKSB2YXIoLS10dy1udW1lcmljLWZpZ3VyZSkgdmFyKC0tdHctbnVtZXJpYy1zcGFjaW5nKSB2YXIoLS10dy1udW1lcmljLWZyYWN0aW9uKSI7cigiZm9udC12YXJpYW50LW51bWVyaWMiLHsiLS10dy1vcmRpbmFsIjoiICIsIi0tdHctc2xhc2hlZC16ZXJvIjoiICIsIi0tdHctbnVtZXJpYy1maWd1cmUiOiIgIiwiLS10dy1udW1lcmljLXNwYWNpbmciOiIgIiwiLS10dy1udW1lcmljLWZyYWN0aW9uIjoiICJ9KSxlKHsiLm5vcm1hbC1udW1zIjp7ImZvbnQtdmFyaWFudC1udW1lcmljIjoibm9ybWFsIn0sIi5vcmRpbmFsIjp7IkBkZWZhdWx0cyBmb250LXZhcmlhbnQtbnVtZXJpYyI6e30sIi0tdHctb3JkaW5hbCI6Im9yZGluYWwiLCJmb250LXZhcmlhbnQtbnVtZXJpYyI6dH0sIi5zbGFzaGVkLXplcm8iOnsiQGRlZmF1bHRzIGZvbnQtdmFyaWFudC1udW1lcmljIjp7fSwiLS10dy1zbGFzaGVkLXplcm8iOiJzbGFzaGVkLXplcm8iLCJmb250LXZhcmlhbnQtbnVtZXJpYyI6dH0sIi5saW5pbmctbnVtcyI6eyJAZGVmYXVsdHMgZm9udC12YXJpYW50LW51bWVyaWMiOnt9LCItLXR3LW51bWVyaWMtZmlndXJlIjoibGluaW5nLW51bXMiLCJmb250LXZhcmlhbnQtbnVtZXJpYyI6dH0sIi5vbGRzdHlsZS1udW1zIjp7IkBkZWZhdWx0cyBmb250LXZhcmlhbnQtbnVtZXJpYyI6e30sIi0tdHctbnVtZXJpYy1maWd1cmUiOiJvbGRzdHlsZS1udW1zIiwiZm9udC12YXJpYW50LW51bWVyaWMiOnR9LCIucHJvcG9ydGlvbmFsLW51bXMiOnsiQGRlZmF1bHRzIGZvbnQtdmFyaWFudC1udW1lcmljIjp7fSwiLS10dy1udW1lcmljLXNwYWNpbmciOiJwcm9wb3J0aW9uYWwtbnVtcyIsImZvbnQtdmFyaWFudC1udW1lcmljIjp0fSwiLnRhYnVsYXItbnVtcyI6eyJAZGVmYXVsdHMgZm9udC12YXJpYW50LW51bWVyaWMiOnt9LCItLXR3LW51bWVyaWMtc3BhY2luZyI6InRhYnVsYXItbnVtcyIsImZvbnQtdmFyaWFudC1udW1lcmljIjp0fSwiLmRpYWdvbmFsLWZyYWN0aW9ucyI6eyJAZGVmYXVsdHMgZm9udC12YXJpYW50LW51bWVyaWMiOnt9LCItLXR3LW51bWVyaWMtZnJhY3Rpb24iOiJkaWFnb25hbC1mcmFjdGlvbnMiLCJmb250LXZhcmlhbnQtbnVtZXJpYyI6dH0sIi5zdGFja2VkLWZyYWN0aW9ucyI6eyJAZGVmYXVsdHMgZm9udC12YXJpYW50LW51bWVyaWMiOnt9LCItLXR3LW51bWVyaWMtZnJhY3Rpb24iOiJzdGFja2VkLWZyYWN0aW9ucyIsImZvbnQtdmFyaWFudC1udW1lcmljIjp0fX0pfSxsaW5lSGVpZ2h0OkwoImxpbmVIZWlnaHQiLFtbImxlYWRpbmciLFsibGluZUhlaWdodCJdXV0pLGxldHRlclNwYWNpbmc6TCgibGV0dGVyU3BhY2luZyIsW1sidHJhY2tpbmciLFsibGV0dGVyU3BhY2luZyJdXV0se3N1cHBvcnRzTmVnYXRpdmVWYWx1ZXM6ITB9KSx0ZXh0Q29sb3I6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmUsY29yZVBsdWdpbnM6dH0pPT57cih7dGV4dDppPT50KCJ0ZXh0T3BhY2l0eSIpP0FlKHtjb2xvcjppLHByb3BlcnR5OiJjb2xvciIsdmFyaWFibGU6Ii0tdHctdGV4dC1vcGFjaXR5In0pOntjb2xvcjpYKGkpfX0se3ZhbHVlczp4ZShlKCJ0ZXh0Q29sb3IiKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0sdGV4dE9wYWNpdHk6TCgidGV4dE9wYWNpdHkiLFtbInRleHQtb3BhY2l0eSIsWyItLXR3LXRleHQtb3BhY2l0eSJdXV0pLHRleHREZWNvcmF0aW9uOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIudW5kZXJsaW5lIjp7InRleHQtZGVjb3JhdGlvbi1saW5lIjoidW5kZXJsaW5lIn0sIi5vdmVybGluZSI6eyJ0ZXh0LWRlY29yYXRpb24tbGluZSI6Im92ZXJsaW5lIn0sIi5saW5lLXRocm91Z2giOnsidGV4dC1kZWNvcmF0aW9uLWxpbmUiOiJsaW5lLXRocm91Z2gifSwiLm5vLXVuZGVybGluZSI6eyJ0ZXh0LWRlY29yYXRpb24tbGluZSI6Im5vbmUifX0pfSx0ZXh0RGVjb3JhdGlvbkNvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHtkZWNvcmF0aW9uOnQ9Pih7InRleHQtZGVjb3JhdGlvbi1jb2xvciI6WCh0KX0pfSx7dmFsdWVzOnhlKGUoInRleHREZWNvcmF0aW9uQ29sb3IiKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0sdGV4dERlY29yYXRpb25TdHlsZTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmRlY29yYXRpb24tc29saWQiOnsidGV4dC1kZWNvcmF0aW9uLXN0eWxlIjoic29saWQifSwiLmRlY29yYXRpb24tZG91YmxlIjp7InRleHQtZGVjb3JhdGlvbi1zdHlsZSI6ImRvdWJsZSJ9LCIuZGVjb3JhdGlvbi1kb3R0ZWQiOnsidGV4dC1kZWNvcmF0aW9uLXN0eWxlIjoiZG90dGVkIn0sIi5kZWNvcmF0aW9uLWRhc2hlZCI6eyJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOiJkYXNoZWQifSwiLmRlY29yYXRpb24td2F2eSI6eyJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOiJ3YXZ5In19KX0sdGV4dERlY29yYXRpb25UaGlja25lc3M6TCgidGV4dERlY29yYXRpb25UaGlja25lc3MiLFtbImRlY29yYXRpb24iLFsidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyJdXV0se3R5cGU6WyJsZW5ndGgiLCJwZXJjZW50YWdlIl19KSx0ZXh0VW5kZXJsaW5lT2Zmc2V0OkwoInRleHRVbmRlcmxpbmVPZmZzZXQiLFtbInVuZGVybGluZS1vZmZzZXQiLFsidGV4dC11bmRlcmxpbmUtb2Zmc2V0Il1dXSx7dHlwZTpbImxlbmd0aCIsInBlcmNlbnRhZ2UiLCJhbnkiXX0pLGZvbnRTbW9vdGhpbmc6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5hbnRpYWxpYXNlZCI6eyItd2Via2l0LWZvbnQtc21vb3RoaW5nIjoiYW50aWFsaWFzZWQiLCItbW96LW9zeC1mb250LXNtb290aGluZyI6ImdyYXlzY2FsZSJ9LCIuc3VicGl4ZWwtYW50aWFsaWFzZWQiOnsiLXdlYmtpdC1mb250LXNtb290aGluZyI6ImF1dG8iLCItbW96LW9zeC1mb250LXNtb290aGluZyI6ImF1dG8ifX0pfSxwbGFjZWhvbGRlckNvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplLGNvcmVQbHVnaW5zOnR9KT0+e3Ioe3BsYWNlaG9sZGVyOmk9PnQoInBsYWNlaG9sZGVyT3BhY2l0eSIpP3siJjo6cGxhY2Vob2xkZXIiOkFlKHtjb2xvcjppLHByb3BlcnR5OiJjb2xvciIsdmFyaWFibGU6Ii0tdHctcGxhY2Vob2xkZXItb3BhY2l0eSJ9KX06eyImOjpwbGFjZWhvbGRlciI6e2NvbG9yOlgoaSl9fX0se3ZhbHVlczp4ZShlKCJwbGFjZWhvbGRlckNvbG9yIikpLHR5cGU6WyJjb2xvciIsImFueSJdfSl9LHBsYWNlaG9sZGVyT3BhY2l0eTooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7InBsYWNlaG9sZGVyLW9wYWNpdHkiOnQ9Pih7WyImOjpwbGFjZWhvbGRlciJdOnsiLS10dy1wbGFjZWhvbGRlci1vcGFjaXR5Ijp0fX0pfSx7dmFsdWVzOmUoInBsYWNlaG9sZGVyT3BhY2l0eSIpfSl9LGNhcmV0Q29sb3I6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3Ioe2NhcmV0OnQ9Pih7ImNhcmV0LWNvbG9yIjpYKHQpfSl9LHt2YWx1ZXM6eGUoZSgiY2FyZXRDb2xvciIpKSx0eXBlOlsiY29sb3IiLCJhbnkiXX0pfSxhY2NlbnRDb2xvcjooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7YWNjZW50OnQ9Pih7ImFjY2VudC1jb2xvciI6WCh0KX0pfSx7dmFsdWVzOnhlKGUoImFjY2VudENvbG9yIikpLHR5cGU6WyJjb2xvciIsImFueSJdfSl9LG9wYWNpdHk6TCgib3BhY2l0eSIsW1sib3BhY2l0eSIsWyJvcGFjaXR5Il1dXSksYmFja2dyb3VuZEJsZW5kTW9kZTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLmJnLWJsZW5kLW5vcm1hbCI6eyJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiOiJub3JtYWwifSwiLmJnLWJsZW5kLW11bHRpcGx5Ijp7ImJhY2tncm91bmQtYmxlbmQtbW9kZSI6Im11bHRpcGx5In0sIi5iZy1ibGVuZC1zY3JlZW4iOnsiYmFja2dyb3VuZC1ibGVuZC1tb2RlIjoic2NyZWVuIn0sIi5iZy1ibGVuZC1vdmVybGF5Ijp7ImJhY2tncm91bmQtYmxlbmQtbW9kZSI6Im92ZXJsYXkifSwiLmJnLWJsZW5kLWRhcmtlbiI6eyJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiOiJkYXJrZW4ifSwiLmJnLWJsZW5kLWxpZ2h0ZW4iOnsiYmFja2dyb3VuZC1ibGVuZC1tb2RlIjoibGlnaHRlbiJ9LCIuYmctYmxlbmQtY29sb3ItZG9kZ2UiOnsiYmFja2dyb3VuZC1ibGVuZC1tb2RlIjoiY29sb3ItZG9kZ2UifSwiLmJnLWJsZW5kLWNvbG9yLWJ1cm4iOnsiYmFja2dyb3VuZC1ibGVuZC1tb2RlIjoiY29sb3ItYnVybiJ9LCIuYmctYmxlbmQtaGFyZC1saWdodCI6eyJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiOiJoYXJkLWxpZ2h0In0sIi5iZy1ibGVuZC1zb2Z0LWxpZ2h0Ijp7ImJhY2tncm91bmQtYmxlbmQtbW9kZSI6InNvZnQtbGlnaHQifSwiLmJnLWJsZW5kLWRpZmZlcmVuY2UiOnsiYmFja2dyb3VuZC1ibGVuZC1tb2RlIjoiZGlmZmVyZW5jZSJ9LCIuYmctYmxlbmQtZXhjbHVzaW9uIjp7ImJhY2tncm91bmQtYmxlbmQtbW9kZSI6ImV4Y2x1c2lvbiJ9LCIuYmctYmxlbmQtaHVlIjp7ImJhY2tncm91bmQtYmxlbmQtbW9kZSI6Imh1ZSJ9LCIuYmctYmxlbmQtc2F0dXJhdGlvbiI6eyJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiOiJzYXR1cmF0aW9uIn0sIi5iZy1ibGVuZC1jb2xvciI6eyJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiOiJjb2xvciJ9LCIuYmctYmxlbmQtbHVtaW5vc2l0eSI6eyJiYWNrZ3JvdW5kLWJsZW5kLW1vZGUiOiJsdW1pbm9zaXR5In19KX0sbWl4QmxlbmRNb2RlOih7YWRkVXRpbGl0aWVzOnJ9KT0+e3IoeyIubWl4LWJsZW5kLW5vcm1hbCI6eyJtaXgtYmxlbmQtbW9kZSI6Im5vcm1hbCJ9LCIubWl4LWJsZW5kLW11bHRpcGx5Ijp7Im1peC1ibGVuZC1tb2RlIjoibXVsdGlwbHkifSwiLm1peC1ibGVuZC1zY3JlZW4iOnsibWl4LWJsZW5kLW1vZGUiOiJzY3JlZW4ifSwiLm1peC1ibGVuZC1vdmVybGF5Ijp7Im1peC1ibGVuZC1tb2RlIjoib3ZlcmxheSJ9LCIubWl4LWJsZW5kLWRhcmtlbiI6eyJtaXgtYmxlbmQtbW9kZSI6ImRhcmtlbiJ9LCIubWl4LWJsZW5kLWxpZ2h0ZW4iOnsibWl4LWJsZW5kLW1vZGUiOiJsaWdodGVuIn0sIi5taXgtYmxlbmQtY29sb3ItZG9kZ2UiOnsibWl4LWJsZW5kLW1vZGUiOiJjb2xvci1kb2RnZSJ9LCIubWl4LWJsZW5kLWNvbG9yLWJ1cm4iOnsibWl4LWJsZW5kLW1vZGUiOiJjb2xvci1idXJuIn0sIi5taXgtYmxlbmQtaGFyZC1saWdodCI6eyJtaXgtYmxlbmQtbW9kZSI6ImhhcmQtbGlnaHQifSwiLm1peC1ibGVuZC1zb2Z0LWxpZ2h0Ijp7Im1peC1ibGVuZC1tb2RlIjoic29mdC1saWdodCJ9LCIubWl4LWJsZW5kLWRpZmZlcmVuY2UiOnsibWl4LWJsZW5kLW1vZGUiOiJkaWZmZXJlbmNlIn0sIi5taXgtYmxlbmQtZXhjbHVzaW9uIjp7Im1peC1ibGVuZC1tb2RlIjoiZXhjbHVzaW9uIn0sIi5taXgtYmxlbmQtaHVlIjp7Im1peC1ibGVuZC1tb2RlIjoiaHVlIn0sIi5taXgtYmxlbmQtc2F0dXJhdGlvbiI6eyJtaXgtYmxlbmQtbW9kZSI6InNhdHVyYXRpb24ifSwiLm1peC1ibGVuZC1jb2xvciI6eyJtaXgtYmxlbmQtbW9kZSI6ImNvbG9yIn0sIi5taXgtYmxlbmQtbHVtaW5vc2l0eSI6eyJtaXgtYmxlbmQtbW9kZSI6Imx1bWlub3NpdHkifSwiLm1peC1ibGVuZC1wbHVzLWRhcmtlciI6eyJtaXgtYmxlbmQtbW9kZSI6InBsdXMtZGFya2VyIn0sIi5taXgtYmxlbmQtcGx1cy1saWdodGVyIjp7Im1peC1ibGVuZC1tb2RlIjoicGx1cy1saWdodGVyIn19KX0sYm94U2hhZG93OigoKT0+e2xldCByPW10KCJib3hTaGFkb3ciKSxlPVsidmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93LCAwIDAgIzAwMDApIiwidmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCkiLCJ2YXIoLS10dy1zaGFkb3cpIl0uam9pbigiLCAiKTtyZXR1cm4gZnVuY3Rpb24oe21hdGNoVXRpbGl0aWVzOnQsYWRkRGVmYXVsdHM6aSx0aGVtZTpufSl7aSgiYm94LXNoYWRvdyIseyItLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyI6IjAgMCAjMDAwMCIsIi0tdHctcmluZy1zaGFkb3ciOiIwIDAgIzAwMDAiLCItLXR3LXNoYWRvdyI6IjAgMCAjMDAwMCIsIi0tdHctc2hhZG93LWNvbG9yZWQiOiIwIDAgIzAwMDAifSksdCh7c2hhZG93OnM9PntzPXIocyk7bGV0IGE9ZW4ocyk7Zm9yKGxldCBvIG9mIGEpIW8udmFsaWR8fChvLmNvbG9yPSJ2YXIoLS10dy1zaGFkb3ctY29sb3IpIik7cmV0dXJueyJAZGVmYXVsdHMgYm94LXNoYWRvdyI6e30sIi0tdHctc2hhZG93IjpzPT09Im5vbmUiPyIwIDAgIzAwMDAiOnMsIi0tdHctc2hhZG93LWNvbG9yZWQiOnM9PT0ibm9uZSI/IjAgMCAjMDAwMCI6TGYoYSksImJveC1zaGFkb3ciOmV9fX0se3ZhbHVlczpuKCJib3hTaGFkb3ciKSx0eXBlOlsic2hhZG93Il19KX19KSgpLGJveFNoYWRvd0NvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHtzaGFkb3c6dD0+KHsiLS10dy1zaGFkb3ctY29sb3IiOlgodCksIi0tdHctc2hhZG93IjoidmFyKC0tdHctc2hhZG93LWNvbG9yZWQpIn0pfSx7dmFsdWVzOnhlKGUoImJveFNoYWRvd0NvbG9yIikpLHR5cGU6WyJjb2xvciIsImFueSJdfSl9LG91dGxpbmVTdHlsZTooe2FkZFV0aWxpdGllczpyfSk9PntyKHsiLm91dGxpbmUtbm9uZSI6e291dGxpbmU6IjJweCBzb2xpZCB0cmFuc3BhcmVudCIsIm91dGxpbmUtb2Zmc2V0IjoiMnB4In0sIi5vdXRsaW5lIjp7Im91dGxpbmUtc3R5bGUiOiJzb2xpZCJ9LCIub3V0bGluZS1kYXNoZWQiOnsib3V0bGluZS1zdHlsZSI6ImRhc2hlZCJ9LCIub3V0bGluZS1kb3R0ZWQiOnsib3V0bGluZS1zdHlsZSI6ImRvdHRlZCJ9LCIub3V0bGluZS1kb3VibGUiOnsib3V0bGluZS1zdHlsZSI6ImRvdWJsZSJ9fSl9LG91dGxpbmVXaWR0aDpMKCJvdXRsaW5lV2lkdGgiLFtbIm91dGxpbmUiLFsib3V0bGluZS13aWR0aCJdXV0se3R5cGU6WyJsZW5ndGgiLCJudW1iZXIiLCJwZXJjZW50YWdlIl19KSxvdXRsaW5lT2Zmc2V0OkwoIm91dGxpbmVPZmZzZXQiLFtbIm91dGxpbmUtb2Zmc2V0IixbIm91dGxpbmUtb2Zmc2V0Il1dXSx7dHlwZTpbImxlbmd0aCIsIm51bWJlciIsInBlcmNlbnRhZ2UiLCJhbnkiXSxzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSksb3V0bGluZUNvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHtvdXRsaW5lOnQ9Pih7Im91dGxpbmUtY29sb3IiOlgodCl9KX0se3ZhbHVlczp4ZShlKCJvdXRsaW5lQ29sb3IiKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0scmluZ1dpZHRoOih7bWF0Y2hVdGlsaXRpZXM6cixhZGREZWZhdWx0czplLGFkZFV0aWxpdGllczp0LHRoZW1lOmksY29uZmlnOm59KT0+e2xldCBzPSgoKT0+e2lmKHdlKG4oKSwicmVzcGVjdERlZmF1bHRSaW5nQ29sb3JPcGFjaXR5IikpcmV0dXJuIGkoInJpbmdDb2xvci5ERUZBVUxUIik7bGV0IGE9aSgicmluZ09wYWNpdHkuREVGQVVMVCIsIjAuNSIpO3JldHVybiBpKCJyaW5nQ29sb3IiKT8uREVGQVVMVD9KZShpKCJyaW5nQ29sb3IiKT8uREVGQVVMVCxhLGByZ2IoMTQ3IDE5NyAyNTMgLyAke2F9KWApOmByZ2IoMTQ3IDE5NyAyNTMgLyAke2F9KWB9KSgpO2UoInJpbmctd2lkdGgiLHsiLS10dy1yaW5nLWluc2V0IjoiICIsIi0tdHctcmluZy1vZmZzZXQtd2lkdGgiOmkoInJpbmdPZmZzZXRXaWR0aC5ERUZBVUxUIiwiMHB4IiksIi0tdHctcmluZy1vZmZzZXQtY29sb3IiOmkoInJpbmdPZmZzZXRDb2xvci5ERUZBVUxUIiwiI2ZmZiIpLCItLXR3LXJpbmctY29sb3IiOnMsIi0tdHctcmluZy1vZmZzZXQtc2hhZG93IjoiMCAwICMwMDAwIiwiLS10dy1yaW5nLXNoYWRvdyI6IjAgMCAjMDAwMCIsIi0tdHctc2hhZG93IjoiMCAwICMwMDAwIiwiLS10dy1zaGFkb3ctY29sb3JlZCI6IjAgMCAjMDAwMCJ9KSxyKHtyaW5nOmE9Pih7IkBkZWZhdWx0cyByaW5nLXdpZHRoIjp7fSwiLS10dy1yaW5nLW9mZnNldC1zaGFkb3ciOiJ2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpIiwiLS10dy1yaW5nLXNoYWRvdyI6YHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoJHthfSArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcilgLCJib3gtc2hhZG93IjpbInZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdykiLCJ2YXIoLS10dy1yaW5nLXNoYWRvdykiLCJ2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCkiXS5qb2luKCIsICIpfSl9LHt2YWx1ZXM6aSgicmluZ1dpZHRoIiksdHlwZToibGVuZ3RoIn0pLHQoeyIucmluZy1pbnNldCI6eyJAZGVmYXVsdHMgcmluZy13aWR0aCI6e30sIi0tdHctcmluZy1pbnNldCI6Imluc2V0In19KX0scmluZ0NvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplLGNvcmVQbHVnaW5zOnR9KT0+e3Ioe3Jpbmc6aT0+dCgicmluZ09wYWNpdHkiKT9BZSh7Y29sb3I6aSxwcm9wZXJ0eToiLS10dy1yaW5nLWNvbG9yIix2YXJpYWJsZToiLS10dy1yaW5nLW9wYWNpdHkifSk6eyItLXR3LXJpbmctY29sb3IiOlgoaSl9fSx7dmFsdWVzOk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh4ZShlKCJyaW5nQ29sb3IiKSkpLmZpbHRlcigoW2ldKT0+aSE9PSJERUZBVUxUIikpLHR5cGU6WyJjb2xvciIsImFueSJdfSl9LHJpbmdPcGFjaXR5OnI9PntsZXR7Y29uZmlnOmV9PXI7cmV0dXJuIEwoInJpbmdPcGFjaXR5IixbWyJyaW5nLW9wYWNpdHkiLFsiLS10dy1yaW5nLW9wYWNpdHkiXV1dLHtmaWx0ZXJEZWZhdWx0OiF3ZShlKCksInJlc3BlY3REZWZhdWx0UmluZ0NvbG9yT3BhY2l0eSIpfSkocil9LHJpbmdPZmZzZXRXaWR0aDpMKCJyaW5nT2Zmc2V0V2lkdGgiLFtbInJpbmctb2Zmc2V0IixbIi0tdHctcmluZy1vZmZzZXQtd2lkdGgiXV1dLHt0eXBlOiJsZW5ndGgifSkscmluZ09mZnNldENvbG9yOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHsicmluZy1vZmZzZXQiOnQ9Pih7Ii0tdHctcmluZy1vZmZzZXQtY29sb3IiOlgodCl9KX0se3ZhbHVlczp4ZShlKCJyaW5nT2Zmc2V0Q29sb3IiKSksdHlwZTpbImNvbG9yIiwiYW55Il19KX0sYmx1cjooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7Ymx1cjp0PT4oeyItLXR3LWJsdXIiOnQudHJpbSgpPT09IiI/IiAiOmBibHVyKCR7dH0pYCwiQGRlZmF1bHRzIGZpbHRlciI6e30sZmlsdGVyOm50fSl9LHt2YWx1ZXM6ZSgiYmx1ciIpfSl9LGJyaWdodG5lc3M6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3Ioe2JyaWdodG5lc3M6dD0+KHsiLS10dy1icmlnaHRuZXNzIjpgYnJpZ2h0bmVzcygke3R9KWAsIkBkZWZhdWx0cyBmaWx0ZXIiOnt9LGZpbHRlcjpudH0pfSx7dmFsdWVzOmUoImJyaWdodG5lc3MiKX0pfSxjb250cmFzdDooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7Y29udHJhc3Q6dD0+KHsiLS10dy1jb250cmFzdCI6YGNvbnRyYXN0KCR7dH0pYCwiQGRlZmF1bHRzIGZpbHRlciI6e30sZmlsdGVyOm50fSl9LHt2YWx1ZXM6ZSgiY29udHJhc3QiKX0pfSxkcm9wU2hhZG93Oih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHsiZHJvcC1zaGFkb3ciOnQ9Pih7Ii0tdHctZHJvcC1zaGFkb3ciOkFycmF5LmlzQXJyYXkodCk/dC5tYXAoaT0+YGRyb3Atc2hhZG93KCR7aX0pYCkuam9pbigiICIpOmBkcm9wLXNoYWRvdygke3R9KWAsIkBkZWZhdWx0cyBmaWx0ZXIiOnt9LGZpbHRlcjpudH0pfSx7dmFsdWVzOmUoImRyb3BTaGFkb3ciKX0pfSxncmF5c2NhbGU6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3Ioe2dyYXlzY2FsZTp0PT4oeyItLXR3LWdyYXlzY2FsZSI6YGdyYXlzY2FsZSgke3R9KWAsIkBkZWZhdWx0cyBmaWx0ZXIiOnt9LGZpbHRlcjpudH0pfSx7dmFsdWVzOmUoImdyYXlzY2FsZSIpfSl9LGh1ZVJvdGF0ZTooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7Imh1ZS1yb3RhdGUiOnQ9Pih7Ii0tdHctaHVlLXJvdGF0ZSI6YGh1ZS1yb3RhdGUoJHt0fSlgLCJAZGVmYXVsdHMgZmlsdGVyIjp7fSxmaWx0ZXI6bnR9KX0se3ZhbHVlczplKCJodWVSb3RhdGUiKSxzdXBwb3J0c05lZ2F0aXZlVmFsdWVzOiEwfSl9LGludmVydDooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7aW52ZXJ0OnQ9Pih7Ii0tdHctaW52ZXJ0IjpgaW52ZXJ0KCR7dH0pYCwiQGRlZmF1bHRzIGZpbHRlciI6e30sZmlsdGVyOm50fSl9LHt2YWx1ZXM6ZSgiaW52ZXJ0Iil9KX0sc2F0dXJhdGU6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3Ioe3NhdHVyYXRlOnQ9Pih7Ii0tdHctc2F0dXJhdGUiOmBzYXR1cmF0ZSgke3R9KWAsIkBkZWZhdWx0cyBmaWx0ZXIiOnt9LGZpbHRlcjpudH0pfSx7dmFsdWVzOmUoInNhdHVyYXRlIil9KX0sc2VwaWE6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3Ioe3NlcGlhOnQ9Pih7Ii0tdHctc2VwaWEiOmBzZXBpYSgke3R9KWAsIkBkZWZhdWx0cyBmaWx0ZXIiOnt9LGZpbHRlcjpudH0pfSx7dmFsdWVzOmUoInNlcGlhIil9KX0sZmlsdGVyOih7YWRkRGVmYXVsdHM6cixhZGRVdGlsaXRpZXM6ZX0pPT57cigiZmlsdGVyIix7Ii0tdHctYmx1ciI6IiAiLCItLXR3LWJyaWdodG5lc3MiOiIgIiwiLS10dy1jb250cmFzdCI6IiAiLCItLXR3LWdyYXlzY2FsZSI6IiAiLCItLXR3LWh1ZS1yb3RhdGUiOiIgIiwiLS10dy1pbnZlcnQiOiIgIiwiLS10dy1zYXR1cmF0ZSI6IiAiLCItLXR3LXNlcGlhIjoiICIsIi0tdHctZHJvcC1zaGFkb3ciOiIgIn0pLGUoeyIuZmlsdGVyIjp7IkBkZWZhdWx0cyBmaWx0ZXIiOnt9LGZpbHRlcjpudH0sIi5maWx0ZXItbm9uZSI6e2ZpbHRlcjoibm9uZSJ9fSl9LGJhY2tkcm9wQmx1cjooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7ImJhY2tkcm9wLWJsdXIiOnQ9Pih7Ii0tdHctYmFja2Ryb3AtYmx1ciI6dC50cmltKCk9PT0iIj8iICI6YGJsdXIoJHt0fSlgLCJAZGVmYXVsdHMgYmFja2Ryb3AtZmlsdGVyIjp7fSwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiOmdlLCJiYWNrZHJvcC1maWx0ZXIiOmdlfSl9LHt2YWx1ZXM6ZSgiYmFja2Ryb3BCbHVyIil9KX0sYmFja2Ryb3BCcmlnaHRuZXNzOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHsiYmFja2Ryb3AtYnJpZ2h0bmVzcyI6dD0+KHsiLS10dy1iYWNrZHJvcC1icmlnaHRuZXNzIjpgYnJpZ2h0bmVzcygke3R9KWAsIkBkZWZhdWx0cyBiYWNrZHJvcC1maWx0ZXIiOnt9LCItd2Via2l0LWJhY2tkcm9wLWZpbHRlciI6Z2UsImJhY2tkcm9wLWZpbHRlciI6Z2V9KX0se3ZhbHVlczplKCJiYWNrZHJvcEJyaWdodG5lc3MiKX0pfSxiYWNrZHJvcENvbnRyYXN0Oih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHsiYmFja2Ryb3AtY29udHJhc3QiOnQ9Pih7Ii0tdHctYmFja2Ryb3AtY29udHJhc3QiOmBjb250cmFzdCgke3R9KWAsIkBkZWZhdWx0cyBiYWNrZHJvcC1maWx0ZXIiOnt9LCItd2Via2l0LWJhY2tkcm9wLWZpbHRlciI6Z2UsImJhY2tkcm9wLWZpbHRlciI6Z2V9KX0se3ZhbHVlczplKCJiYWNrZHJvcENvbnRyYXN0Iil9KX0sYmFja2Ryb3BHcmF5c2NhbGU6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3IoeyJiYWNrZHJvcC1ncmF5c2NhbGUiOnQ9Pih7Ii0tdHctYmFja2Ryb3AtZ3JheXNjYWxlIjpgZ3JheXNjYWxlKCR7dH0pYCwiQGRlZmF1bHRzIGJhY2tkcm9wLWZpbHRlciI6e30sIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIjpnZSwiYmFja2Ryb3AtZmlsdGVyIjpnZX0pfSx7dmFsdWVzOmUoImJhY2tkcm9wR3JheXNjYWxlIil9KX0sYmFja2Ryb3BIdWVSb3RhdGU6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3IoeyJiYWNrZHJvcC1odWUtcm90YXRlIjp0PT4oeyItLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUiOmBodWUtcm90YXRlKCR7dH0pYCwiQGRlZmF1bHRzIGJhY2tkcm9wLWZpbHRlciI6e30sIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIjpnZSwiYmFja2Ryb3AtZmlsdGVyIjpnZX0pfSx7dmFsdWVzOmUoImJhY2tkcm9wSHVlUm90YXRlIiksc3VwcG9ydHNOZWdhdGl2ZVZhbHVlczohMH0pfSxiYWNrZHJvcEludmVydDooe21hdGNoVXRpbGl0aWVzOnIsdGhlbWU6ZX0pPT57cih7ImJhY2tkcm9wLWludmVydCI6dD0+KHsiLS10dy1iYWNrZHJvcC1pbnZlcnQiOmBpbnZlcnQoJHt0fSlgLCJAZGVmYXVsdHMgYmFja2Ryb3AtZmlsdGVyIjp7fSwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiOmdlLCJiYWNrZHJvcC1maWx0ZXIiOmdlfSl9LHt2YWx1ZXM6ZSgiYmFja2Ryb3BJbnZlcnQiKX0pfSxiYWNrZHJvcE9wYWNpdHk6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3IoeyJiYWNrZHJvcC1vcGFjaXR5Ijp0PT4oeyItLXR3LWJhY2tkcm9wLW9wYWNpdHkiOmBvcGFjaXR5KCR7dH0pYCwiQGRlZmF1bHRzIGJhY2tkcm9wLWZpbHRlciI6e30sIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIjpnZSwiYmFja2Ryb3AtZmlsdGVyIjpnZX0pfSx7dmFsdWVzOmUoImJhY2tkcm9wT3BhY2l0eSIpfSl9LGJhY2tkcm9wU2F0dXJhdGU6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e3IoeyJiYWNrZHJvcC1zYXR1cmF0ZSI6dD0+KHsiLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSI6YHNhdHVyYXRlKCR7dH0pYCwiQGRlZmF1bHRzIGJhY2tkcm9wLWZpbHRlciI6e30sIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIjpnZSwiYmFja2Ryb3AtZmlsdGVyIjpnZX0pfSx7dmFsdWVzOmUoImJhY2tkcm9wU2F0dXJhdGUiKX0pfSxiYWNrZHJvcFNlcGlhOih7bWF0Y2hVdGlsaXRpZXM6cix0aGVtZTplfSk9PntyKHsiYmFja2Ryb3Atc2VwaWEiOnQ9Pih7Ii0tdHctYmFja2Ryb3Atc2VwaWEiOmBzZXBpYSgke3R9KWAsIkBkZWZhdWx0cyBiYWNrZHJvcC1maWx0ZXIiOnt9LCItd2Via2l0LWJhY2tkcm9wLWZpbHRlciI6Z2UsImJhY2tkcm9wLWZpbHRlciI6Z2V9KX0se3ZhbHVlczplKCJiYWNrZHJvcFNlcGlhIil9KX0sYmFja2Ryb3BGaWx0ZXI6KHthZGREZWZhdWx0czpyLGFkZFV0aWxpdGllczplfSk9PntyKCJiYWNrZHJvcC1maWx0ZXIiLHsiLS10dy1iYWNrZHJvcC1ibHVyIjoiICIsIi0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcyI6IiAiLCItLXR3LWJhY2tkcm9wLWNvbnRyYXN0IjoiICIsIi0tdHctYmFja2Ryb3AtZ3JheXNjYWxlIjoiICIsIi0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSI6IiAiLCItLXR3LWJhY2tkcm9wLWludmVydCI6IiAiLCItLXR3LWJhY2tkcm9wLW9wYWNpdHkiOiIgIiwiLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSI6IiAiLCItLXR3LWJhY2tkcm9wLXNlcGlhIjoiICJ9KSxlKHsiLmJhY2tkcm9wLWZpbHRlciI6eyJAZGVmYXVsdHMgYmFja2Ryb3AtZmlsdGVyIjp7fSwiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiOmdlLCJiYWNrZHJvcC1maWx0ZXIiOmdlfSwiLmJhY2tkcm9wLWZpbHRlci1ub25lIjp7Ii13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIjoibm9uZSIsImJhY2tkcm9wLWZpbHRlciI6Im5vbmUifX0pfSx0cmFuc2l0aW9uUHJvcGVydHk6KHttYXRjaFV0aWxpdGllczpyLHRoZW1lOmV9KT0+e2xldCB0PWUoInRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbi5ERUZBVUxUIiksaT1lKCJ0cmFuc2l0aW9uRHVyYXRpb24uREVGQVVMVCIpO3Ioe3RyYW5zaXRpb246bj0+KHsidHJhbnNpdGlvbi1wcm9wZXJ0eSI6biwuLi5uPT09Im5vbmUiP3t9OnsidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iOnQsInRyYW5zaXRpb24tZHVyYXRpb24iOml9fSl9LHt2YWx1ZXM6ZSgidHJhbnNpdGlvblByb3BlcnR5Iil9KX0sdHJhbnNpdGlvbkRlbGF5OkwoInRyYW5zaXRpb25EZWxheSIsW1siZGVsYXkiLFsidHJhbnNpdGlvbkRlbGF5Il1dXSksdHJhbnNpdGlvbkR1cmF0aW9uOkwoInRyYW5zaXRpb25EdXJhdGlvbiIsW1siZHVyYXRpb24iLFsidHJhbnNpdGlvbkR1cmF0aW9uIl1dXSx7ZmlsdGVyRGVmYXVsdDohMH0pLHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjpMKCJ0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24iLFtbImVhc2UiLFsidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIl1dXSx7ZmlsdGVyRGVmYXVsdDohMH0pLHdpbGxDaGFuZ2U6TCgid2lsbENoYW5nZSIsW1sid2lsbC1jaGFuZ2UiLFsid2lsbC1jaGFuZ2UiXV1dKSxjb250YWluOih7YWRkRGVmYXVsdHM6cixhZGRVdGlsaXRpZXM6ZX0pPT57bGV0IHQ9InZhcigtLXR3LWNvbnRhaW4tc2l6ZSkgdmFyKC0tdHctY29udGFpbi1sYXlvdXQpIHZhcigtLXR3LWNvbnRhaW4tcGFpbnQpIHZhcigtLXR3LWNvbnRhaW4tc3R5bGUpIjtyKCJjb250YWluIix7Ii0tdHctY29udGFpbi1zaXplIjoiICIsIi0tdHctY29udGFpbi1sYXlvdXQiOiIgIiwiLS10dy1jb250YWluLXBhaW50IjoiICIsIi0tdHctY29udGFpbi1zdHlsZSI6IiAifSksZSh7Ii5jb250YWluLW5vbmUiOntjb250YWluOiJub25lIn0sIi5jb250YWluLWNvbnRlbnQiOntjb250YWluOiJjb250ZW50In0sIi5jb250YWluLXN0cmljdCI6e2NvbnRhaW46InN0cmljdCJ9LCIuY29udGFpbi1zaXplIjp7IkBkZWZhdWx0cyBjb250YWluIjp7fSwiLS10dy1jb250YWluLXNpemUiOiJzaXplIixjb250YWluOnR9LCIuY29udGFpbi1pbmxpbmUtc2l6ZSI6eyJAZGVmYXVsdHMgY29udGFpbiI6e30sIi0tdHctY29udGFpbi1zaXplIjoiaW5saW5lLXNpemUiLGNvbnRhaW46dH0sIi5jb250YWluLWxheW91dCI6eyJAZGVmYXVsdHMgY29udGFpbiI6e30sIi0tdHctY29udGFpbi1sYXlvdXQiOiJsYXlvdXQiLGNvbnRhaW46dH0sIi5jb250YWluLXBhaW50Ijp7IkBkZWZhdWx0cyBjb250YWluIjp7fSwiLS10dy1jb250YWluLXBhaW50IjoicGFpbnQiLGNvbnRhaW46dH0sIi5jb250YWluLXN0eWxlIjp7IkBkZWZhdWx0cyBjb250YWluIjp7fSwiLS10dy1jb250YWluLXN0eWxlIjoic3R5bGUiLGNvbnRhaW46dH19KX0sY29udGVudDpMKCJjb250ZW50IixbWyJjb250ZW50IixbIi0tdHctY29udGVudCIsWyJjb250ZW50IiwidmFyKC0tdHctY29udGVudCkiXV1dXSksZm9yY2VkQ29sb3JBZGp1c3Q6KHthZGRVdGlsaXRpZXM6cn0pPT57cih7Ii5mb3JjZWQtY29sb3ItYWRqdXN0LWF1dG8iOnsiZm9yY2VkLWNvbG9yLWFkanVzdCI6ImF1dG8ifSwiLmZvcmNlZC1jb2xvci1hZGp1c3Qtbm9uZSI6eyJmb3JjZWQtY29sb3ItYWRqdXN0Ijoibm9uZSJ9fSl9fX0pO2Z1bmN0aW9uIGhfKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuITE7aWYocj09PSJ0cnVlInx8cj09PSIxIilyZXR1cm4hMDtpZihyPT09ImZhbHNlInx8cj09PSIwIilyZXR1cm4hMTtpZihyPT09IioiKXJldHVybiEwO2xldCBlPXIuc3BsaXQoIiwiKS5tYXAodD0+dC5zcGxpdCgiOiIpWzBdKTtyZXR1cm4gZS5pbmNsdWRlcygiLXRhaWx3aW5kY3NzIik/ITE6ISFlLmluY2x1ZGVzKCJ0YWlsd2luZGNzcyIpfXZhciBaZSx3aCx2aCxlcyxObyxndCxUaSxJdD1QKCgpPT57dSgpO1plPXR5cGVvZiBtIT0idW5kZWZpbmVkIj97Tk9ERV9FTlY6InByb2R1Y3Rpb24iLERFQlVHOmhfKG0uZW52LkRFQlVHKX06e05PREVfRU5WOiJwcm9kdWN0aW9uIixERUJVRzohMX0sd2g9bmV3IE1hcCx2aD1uZXcgTWFwLGVzPW5ldyBNYXAsTm89bmV3IE1hcCxndD1uZXcgU3RyaW5nKCIqIiksVGk9U3ltYm9sKCJfX05PTkVfXyIpfSk7ZnVuY3Rpb24gY3Iocil7bGV0IGU9W10sdD0hMTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl7bGV0IG49cltpXTtpZihuPT09IjoiJiYhdCYmZS5sZW5ndGg9PT0wKXJldHVybiExO2lmKG1fLmhhcyhuKSYmcltpLTFdIT09IlxcIiYmKHQ9IXQpLCF0JiZyW2ktMV0hPT0iXFwiKXtpZih4aC5oYXMobikpZS5wdXNoKG4pO2Vsc2UgaWYoa2guaGFzKG4pKXtsZXQgcz1raC5nZXQobik7aWYoZS5sZW5ndGg8PTB8fGUucG9wKCkhPT1zKXJldHVybiExfX19cmV0dXJuIShlLmxlbmd0aD4wKX12YXIgeGgsa2gsbV8sQm89UCgoKT0+e3UoKTt4aD1uZXcgTWFwKFtbInsiLCJ9Il0sWyJbIiwiXSJdLFsiKCIsIikiXV0pLGtoPW5ldyBNYXAoQXJyYXkuZnJvbSh4aC5lbnRyaWVzKCkpLm1hcCgoW3IsZV0pPT5bZSxyXSkpLG1fPW5ldyBTZXQoWyciJywiJyIsImAiXSl9KTtmdW5jdGlvbiBwcihyKXtsZXRbZV09U2gocik7cmV0dXJuIGUuZm9yRWFjaCgoW3QsaV0pPT50LnJlbW92ZUNoaWxkKGkpKSxyLm5vZGVzLnB1c2goLi4uZS5tYXAoKFssdF0pPT50KSkscn1mdW5jdGlvbiBTaChyKXtsZXQgZT1bXSx0PW51bGw7Zm9yKGxldCBpIG9mIHIubm9kZXMpaWYoaS50eXBlPT09ImNvbWJpbmF0b3IiKWU9ZS5maWx0ZXIoKFssbl0pPT5qbyhuKS5pbmNsdWRlcygianVtcGFibGUiKSksdD1udWxsO2Vsc2UgaWYoaS50eXBlPT09InBzZXVkbyIpe2dfKGkpPyh0PWksZS5wdXNoKFtyLGksbnVsbF0pKTp0JiZ5XyhpLHQpP2UucHVzaChbcixpLHRdKTp0PW51bGw7Zm9yKGxldCBuIG9mIGkubm9kZXM/P1tdKXtsZXRbcyxhXT1TaChuKTt0PWF8fHQsZS5wdXNoKC4uLnMpfX1yZXR1cm5bZSx0XX1mdW5jdGlvbiBBaChyKXtyZXR1cm4gci52YWx1ZS5zdGFydHNXaXRoKCI6OiIpfHxGb1tyLnZhbHVlXSE9PXZvaWQgMH1mdW5jdGlvbiBnXyhyKXtyZXR1cm4gQWgocikmJmpvKHIpLmluY2x1ZGVzKCJ0ZXJtaW5hbCIpfWZ1bmN0aW9uIHlfKHIsZSl7cmV0dXJuIHIudHlwZSE9PSJwc2V1ZG8ifHxBaChyKT8hMTpqbyhlKS5pbmNsdWRlcygiYWN0aW9uYWJsZSIpfWZ1bmN0aW9uIGpvKHIpe3JldHVybiBGb1tyLnZhbHVlXT8/Rm8uX19kZWZhdWx0X199dmFyIEZvLHRzPVAoKCk9Pnt1KCk7Rm89eyI6OmFmdGVyIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOjpiYWNrZHJvcCI6WyJ0ZXJtaW5hbCIsImp1bXBhYmxlIl0sIjo6YmVmb3JlIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOjpjdWUiOlsidGVybWluYWwiXSwiOjpjdWUtcmVnaW9uIjpbInRlcm1pbmFsIl0sIjo6Zmlyc3QtbGV0dGVyIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOjpmaXJzdC1saW5lIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOjpncmFtbWFyLWVycm9yIjpbInRlcm1pbmFsIl0sIjo6bWFya2VyIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOjpwYXJ0IjpbInRlcm1pbmFsIiwiYWN0aW9uYWJsZSJdLCI6OnBsYWNlaG9sZGVyIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOjpzZWxlY3Rpb24iOlsidGVybWluYWwiLCJqdW1wYWJsZSJdLCI6OnNsb3R0ZWQiOlsidGVybWluYWwiXSwiOjpzcGVsbGluZy1lcnJvciI6WyJ0ZXJtaW5hbCJdLCI6OnRhcmdldC10ZXh0IjpbInRlcm1pbmFsIl0sIjo6ZmlsZS1zZWxlY3Rvci1idXR0b24iOlsidGVybWluYWwiLCJhY3Rpb25hYmxlIl0sIjo6ZGVlcCI6WyJhY3Rpb25hYmxlIl0sIjo6di1kZWVwIjpbImFjdGlvbmFibGUiXSwiOjpuZy1kZWVwIjpbImFjdGlvbmFibGUiXSwiOmFmdGVyIjpbInRlcm1pbmFsIiwianVtcGFibGUiXSwiOmJlZm9yZSI6WyJ0ZXJtaW5hbCIsImp1bXBhYmxlIl0sIjpmaXJzdC1sZXR0ZXIiOlsidGVybWluYWwiLCJqdW1wYWJsZSJdLCI6Zmlyc3QtbGluZSI6WyJ0ZXJtaW5hbCIsImp1bXBhYmxlIl0sIjp3aGVyZSI6W10sIjppcyI6W10sIjpoYXMiOltdLF9fZGVmYXVsdF9fOlsidGVybWluYWwiLCJhY3Rpb25hYmxlIl19fSk7ZnVuY3Rpb24gZHIocix7Y29udGV4dDplLGNhbmRpZGF0ZTp0fSl7bGV0IGk9ZT8udGFpbHdpbmRDb25maWcucHJlZml4Pz8iIixuPXIubWFwKGE9PntsZXQgbz0oMCxzdC5kZWZhdWx0KSgpLmFzdFN5bmMoYS5mb3JtYXQpO3JldHVybnsuLi5hLGFzdDphLnJlc3BlY3RQcmVmaXg/dXIoaSxvKTpvfX0pLHM9c3QuZGVmYXVsdC5yb290KHtub2Rlczpbc3QuZGVmYXVsdC5zZWxlY3Rvcih7bm9kZXM6W3N0LmRlZmF1bHQuY2xhc3NOYW1lKHt2YWx1ZTpUZSh0KX0pXX0pXX0pO2ZvcihsZXR7YXN0OmF9b2YgbilbcyxhXT13XyhzLGEpLGEud2Fsa05lc3Rpbmcobz0+by5yZXBsYWNlV2l0aCguLi5zLm5vZGVzWzBdLm5vZGVzKSkscz1hO3JldHVybiBzfWZ1bmN0aW9uIF9oKHIpe2xldCBlPVtdO2Zvcig7ci5wcmV2KCkmJnIucHJldigpLnR5cGUhPT0iY29tYmluYXRvciI7KXI9ci5wcmV2KCk7Zm9yKDtyJiZyLnR5cGUhPT0iY29tYmluYXRvciI7KWUucHVzaChyKSxyPXIubmV4dCgpO3JldHVybiBlfWZ1bmN0aW9uIGJfKHIpe3JldHVybiByLnNvcnQoKGUsdCk9PmUudHlwZT09PSJ0YWciJiZ0LnR5cGU9PT0iY2xhc3MiPy0xOmUudHlwZT09PSJjbGFzcyImJnQudHlwZT09PSJ0YWciPzE6ZS50eXBlPT09ImNsYXNzIiYmdC50eXBlPT09InBzZXVkbyImJnQudmFsdWUuc3RhcnRzV2l0aCgiOjoiKT8tMTplLnR5cGU9PT0icHNldWRvIiYmZS52YWx1ZS5zdGFydHNXaXRoKCI6OiIpJiZ0LnR5cGU9PT0iY2xhc3MiPzE6ci5pbmRleChlKS1yLmluZGV4KHQpKSxyfWZ1bmN0aW9uIFVvKHIsZSl7bGV0IHQ9ITE7ci53YWxrKGk9PntpZihpLnR5cGU9PT0iY2xhc3MiJiZpLnZhbHVlPT09ZSlyZXR1cm4gdD0hMCwhMX0pLHR8fHIucmVtb3ZlKCl9ZnVuY3Rpb24gcnMocixlLHtjb250ZXh0OnQsY2FuZGlkYXRlOmksYmFzZTpufSl7bGV0IHM9dD8udGFpbHdpbmRDb25maWc/LnNlcGFyYXRvcj8/IjoiO249bj8/dmUoaSxzKS5wb3AoKTtsZXQgYT0oMCxzdC5kZWZhdWx0KSgpLmFzdFN5bmMocik7aWYoYS53YWxrQ2xhc3NlcyhmPT57Zi5yYXdzJiZmLnZhbHVlLmluY2x1ZGVzKG4pJiYoZi5yYXdzLnZhbHVlPVRlKCgwLENoLmRlZmF1bHQpKGYucmF3cy52YWx1ZSkpKX0pLGEuZWFjaChmPT5VbyhmLG4pKSxhLmxlbmd0aD09PTApcmV0dXJuIG51bGw7bGV0IG89QXJyYXkuaXNBcnJheShlKT9kcihlLHtjb250ZXh0OnQsY2FuZGlkYXRlOml9KTplO2lmKG89PT1udWxsKXJldHVybiBhLnRvU3RyaW5nKCk7bGV0IGw9c3QuZGVmYXVsdC5jb21tZW50KHt2YWx1ZToiLypfX3NpbXBsZV9fKi8ifSksYz1zdC5kZWZhdWx0LmNvbW1lbnQoe3ZhbHVlOiIvKl9fc2ltcGxlX18qLyJ9KTtyZXR1cm4gYS53YWxrQ2xhc3NlcyhmPT57aWYoZi52YWx1ZSE9PW4pcmV0dXJuO2xldCBkPWYucGFyZW50LHA9by5ub2Rlc1swXS5ub2RlcztpZihkLm5vZGVzLmxlbmd0aD09PTEpe2YucmVwbGFjZVdpdGgoLi4ucCk7cmV0dXJufWxldCBoPV9oKGYpO2QuaW5zZXJ0QmVmb3JlKGhbMF0sbCksZC5pbnNlcnRBZnRlcihoW2gubGVuZ3RoLTFdLGMpO2ZvcihsZXQgdiBvZiBwKWQuaW5zZXJ0QmVmb3JlKGhbMF0sdi5jbG9uZSgpKTtmLnJlbW92ZSgpLGg9X2gobCk7bGV0IGI9ZC5pbmRleChsKTtkLm5vZGVzLnNwbGljZShiLGgubGVuZ3RoLC4uLmJfKHN0LmRlZmF1bHQuc2VsZWN0b3Ioe25vZGVzOmh9KSkubm9kZXMpLGwucmVtb3ZlKCksYy5yZW1vdmUoKX0pLGEud2Fsa1BzZXVkb3MoZj0+e2YudmFsdWU9PT16byYmZi5yZXBsYWNlV2l0aChmLm5vZGVzKX0pLGEuZWFjaChmPT5wcihmKSksYS50b1N0cmluZygpfWZ1bmN0aW9uIHdfKHIsZSl7bGV0IHQ9W107cmV0dXJuIHIud2Fsa1BzZXVkb3MoaT0+e2kudmFsdWU9PT16byYmdC5wdXNoKHtwc2V1ZG86aSx2YWx1ZTppLm5vZGVzWzBdLnRvU3RyaW5nKCl9KX0pLGUud2Fsa1BzZXVkb3MoaT0+e2lmKGkudmFsdWUhPT16bylyZXR1cm47bGV0IG49aS5ub2Rlc1swXS50b1N0cmluZygpLHM9dC5maW5kKGM9PmMudmFsdWU9PT1uKTtpZighcylyZXR1cm47bGV0IGE9W10sbz1pLm5leHQoKTtmb3IoO28mJm8udHlwZSE9PSJjb21iaW5hdG9yIjspYS5wdXNoKG8pLG89by5uZXh0KCk7bGV0IGw9bztzLnBzZXVkby5wYXJlbnQuaW5zZXJ0QWZ0ZXIocy5wc2V1ZG8sc3QuZGVmYXVsdC5zZWxlY3Rvcih7bm9kZXM6YS5tYXAoYz0+Yy5jbG9uZSgpKX0pKSxpLnJlbW92ZSgpLGEuZm9yRWFjaChjPT5jLnJlbW92ZSgpKSxsJiZsLnR5cGU9PT0iY29tYmluYXRvciImJmwucmVtb3ZlKCl9KSxbcixlXX12YXIgc3QsQ2gsem8sVm89UCgoKT0+e3UoKTtzdD1wZShpdCgpKSxDaD1wZShQbigpKTtmcigpO0duKCk7dHMoKTt6dCgpO3pvPSI6bWVyZ2UifSk7ZnVuY3Rpb24gaXMocixlKXtsZXQgdD0oMCxIby5kZWZhdWx0KSgpLmFzdFN5bmMocik7cmV0dXJuIHQuZWFjaChpPT57aS5ub2Rlcy5zb21lKHM9PnMudHlwZT09PSJjb21iaW5hdG9yIikmJihpLm5vZGVzPVtIby5kZWZhdWx0LnBzZXVkbyh7dmFsdWU6IjppcyIsbm9kZXM6W2kuY2xvbmUoKV19KV0pLHByKGkpfSksYCR7ZX0gJHt0LnRvU3RyaW5nKCl9YH12YXIgSG8sV289UCgoKT0+e3UoKTtIbz1wZShpdCgpKTt0cygpfSk7ZnVuY3Rpb24gR28ocil7cmV0dXJuIHZfLnRyYW5zZm9ybVN5bmMocil9ZnVuY3Rpb24qeF8ocil7bGV0IGU9MS8wO2Zvcig7ZT49MDspe2xldCB0LGk9ITE7aWYoZT09PTEvMCYmci5lbmRzV2l0aCgiXSIpKXtsZXQgYT1yLmluZGV4T2YoIlsiKTtyW2EtMV09PT0iLSI/dD1hLTE6clthLTFdPT09Ii8iPyh0PWEtMSxpPSEwKTp0PS0xfWVsc2UgZT09PTEvMCYmci5pbmNsdWRlcygiLyIpPyh0PXIubGFzdEluZGV4T2YoIi8iKSxpPSEwKTp0PXIubGFzdEluZGV4T2YoIi0iLGUpO2lmKHQ8MClicmVhaztsZXQgbj1yLnNsaWNlKDAsdCkscz1yLnNsaWNlKGk/dDp0KzEpO2U9dC0xLCEobj09PSIifHxzPT09Ii8iKSYmKHlpZWxkW24sc10pfX1mdW5jdGlvbiBrXyhyLGUpe2lmKHIubGVuZ3RoPT09MHx8ZS50YWlsd2luZENvbmZpZy5wcmVmaXg9PT0iIilyZXR1cm4gcjtmb3IobGV0IHQgb2Ygcil7bGV0W2ldPXQ7aWYoaS5vcHRpb25zLnJlc3BlY3RQcmVmaXgpe2xldCBuPWVlLnJvb3Qoe25vZGVzOlt0WzFdLmNsb25lKCldfSkscz10WzFdLnJhd3MudGFpbHdpbmQuY2xhc3NDYW5kaWRhdGU7bi53YWxrUnVsZXMoYT0+e2xldCBvPXMuc3RhcnRzV2l0aCgiLSIpO2Euc2VsZWN0b3I9dXIoZS50YWlsd2luZENvbmZpZy5wcmVmaXgsYS5zZWxlY3RvcixvKX0pLHRbMV09bi5ub2Rlc1swXX19cmV0dXJuIHJ9ZnVuY3Rpb24gU18ocixlKXtpZihyLmxlbmd0aD09PTApcmV0dXJuIHI7bGV0IHQ9W107ZnVuY3Rpb24gaShuKXtyZXR1cm4gbi5wYXJlbnQmJm4ucGFyZW50LnR5cGU9PT0iYXRydWxlIiYmbi5wYXJlbnQubmFtZT09PSJrZXlmcmFtZXMifWZvcihsZXRbbixzXW9mIHIpe2xldCBhPWVlLnJvb3Qoe25vZGVzOltzLmNsb25lKCldfSk7YS53YWxrUnVsZXMobz0+e2lmKGkobykpcmV0dXJuO2xldCBsPSgwLG5zLmRlZmF1bHQpKCkuYXN0U3luYyhvLnNlbGVjdG9yKTtsLmVhY2goYz0+VW8oYyxlKSksUWYobCxjPT5jPT09ZT9gISR7Y31gOmMpLG8uc2VsZWN0b3I9bC50b1N0cmluZygpLG8ud2Fsa0RlY2xzKGM9PmMuaW1wb3J0YW50PSEwKX0pLHQucHVzaChbey4uLm4saW1wb3J0YW50OiEwfSxhLm5vZGVzWzBdXSl9cmV0dXJuIHR9ZnVuY3Rpb24gQV8ocixlLHQpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4gZTtsZXQgaT17bW9kaWZpZXI6bnVsbCx2YWx1ZTpUaX07e2xldFtuLC4uLnNdPXZlKHIsIi8iKTtpZihzLmxlbmd0aD4xJiYobj1uKyIvIitzLnNsaWNlKDAsLTEpLmpvaW4oIi8iKSxzPXMuc2xpY2UoLTEpKSxzLmxlbmd0aCYmIXQudmFyaWFudE1hcC5oYXMocikmJihyPW4saS5tb2RpZmllcj1zWzBdLCF3ZSh0LnRhaWx3aW5kQ29uZmlnLCJnZW5lcmFsaXplZE1vZGlmaWVycyIpKSlyZXR1cm5bXX1pZihyLmVuZHNXaXRoKCJdIikmJiFyLnN0YXJ0c1dpdGgoIlsiKSl7bGV0IG49LyguKSgtPylcWyguKilcXS9nLmV4ZWMocik7aWYobil7bGV0WyxzLGEsb109bjtpZihzPT09IkAiJiZhPT09Ii0iKXJldHVybltdO2lmKHMhPT0iQCImJmE9PT0iIilyZXR1cm5bXTtyPXIucmVwbGFjZShgJHthfVske299XWAsIiIpLGkudmFsdWU9b319aWYoS28ocikmJiF0LnZhcmlhbnRNYXAuaGFzKHIpKXtsZXQgbj10Lm9mZnNldHMucmVjb3JkVmFyaWFudChyKSxzPUsoci5zbGljZSgxLC0xKSksYT12ZShzLCIsIik7aWYoYS5sZW5ndGg+MSlyZXR1cm5bXTtpZighYS5ldmVyeShscykpcmV0dXJuW107bGV0IG89YS5tYXAoKGwsYyk9Plt0Lm9mZnNldHMuYXBwbHlQYXJhbGxlbE9mZnNldChuLGMpLFJpKGwudHJpbSgpKV0pO3QudmFyaWFudE1hcC5zZXQocixvKX1pZih0LnZhcmlhbnRNYXAuaGFzKHIpKXtsZXQgbj1LbyhyKSxzPXQudmFyaWFudE9wdGlvbnMuZ2V0KHIpPy5bUHRdPz97fSxhPXQudmFyaWFudE1hcC5nZXQocikuc2xpY2UoKSxvPVtdLGw9KCgpPT4hKG58fHMucmVzcGVjdFByZWZpeD09PSExKSkoKTtmb3IobGV0W2MsZl1vZiBlKXtpZihjLmxheWVyPT09InVzZXIiKWNvbnRpbnVlO2xldCBkPWVlLnJvb3Qoe25vZGVzOltmLmNsb25lKCldfSk7Zm9yKGxldFtwLGgsYl1vZiBhKXtsZXQgdz1mdW5jdGlvbigpe3YucmF3cy5uZWVkZWRCYWNrdXB8fCh2LnJhd3MubmVlZGVkQmFja3VwPSEwLHYud2Fsa1J1bGVzKFQ9PlQucmF3cy5vcmlnaW5hbFNlbGVjdG9yPVQuc2VsZWN0b3IpKX0saz1mdW5jdGlvbihUKXtyZXR1cm4gdygpLHYuZWFjaChCPT57Qi50eXBlPT09InJ1bGUiJiYoQi5zZWxlY3RvcnM9Qi5zZWxlY3RvcnMubWFwKE49PlQoe2dldCBjbGFzc05hbWUoKXtyZXR1cm4gR28oTil9LHNlbGVjdG9yOk59KSkpfSksdn0sdj0oYj8/ZCkuY2xvbmUoKSx5PVtdLFM9aCh7Z2V0IGNvbnRhaW5lcigpe3JldHVybiB3KCksdn0sc2VwYXJhdG9yOnQudGFpbHdpbmRDb25maWcuc2VwYXJhdG9yLG1vZGlmeVNlbGVjdG9yczprLHdyYXAoVCl7bGV0IEI9di5ub2Rlczt2LnJlbW92ZUFsbCgpLFQuYXBwZW5kKEIpLHYuYXBwZW5kKFQpfSxmb3JtYXQoVCl7eS5wdXNoKHtmb3JtYXQ6VCxyZXNwZWN0UHJlZml4Omx9KX0sYXJnczppfSk7aWYoQXJyYXkuaXNBcnJheShTKSl7Zm9yKGxldFtULEJdb2YgUy5lbnRyaWVzKCkpYS5wdXNoKFt0Lm9mZnNldHMuYXBwbHlQYXJhbGxlbE9mZnNldChwLFQpLEIsdi5jbG9uZSgpXSk7Y29udGludWV9aWYodHlwZW9mIFM9PSJzdHJpbmciJiZ5LnB1c2goe2Zvcm1hdDpTLHJlc3BlY3RQcmVmaXg6bH0pLFM9PT1udWxsKWNvbnRpbnVlO3YucmF3cy5uZWVkZWRCYWNrdXAmJihkZWxldGUgdi5yYXdzLm5lZWRlZEJhY2t1cCx2LndhbGtSdWxlcyhUPT57bGV0IEI9VC5yYXdzLm9yaWdpbmFsU2VsZWN0b3I7aWYoIUJ8fChkZWxldGUgVC5yYXdzLm9yaWdpbmFsU2VsZWN0b3IsQj09PVQuc2VsZWN0b3IpKXJldHVybjtsZXQgTj1ULnNlbGVjdG9yLFI9KDAsbnMuZGVmYXVsdCkoRj0+e0Yud2Fsa0NsYXNzZXMoWT0+e1kudmFsdWU9YCR7cn0ke3QudGFpbHdpbmRDb25maWcuc2VwYXJhdG9yfSR7WS52YWx1ZX1gfSl9KS5wcm9jZXNzU3luYyhCKTt5LnB1c2goe2Zvcm1hdDpOLnJlcGxhY2UoUiwiJiIpLHJlc3BlY3RQcmVmaXg6bH0pLFQuc2VsZWN0b3I9Qn0pKSx2Lm5vZGVzWzBdLnJhd3MudGFpbHdpbmQ9ey4uLnYubm9kZXNbMF0ucmF3cy50YWlsd2luZCxwYXJlbnRMYXllcjpjLmxheWVyfTtsZXQgRT1bey4uLmMsc29ydDp0Lm9mZnNldHMuYXBwbHlWYXJpYW50T2Zmc2V0KGMuc29ydCxwLE9iamVjdC5hc3NpZ24oaSx0LnZhcmlhbnRPcHRpb25zLmdldChyKSkpLGNvbGxlY3RlZEZvcm1hdHM6KGMuY29sbGVjdGVkRm9ybWF0cz8/W10pLmNvbmNhdCh5KX0sdi5ub2Rlc1swXV07by5wdXNoKEUpfX1yZXR1cm4gb31yZXR1cm5bXX1mdW5jdGlvbiBRbyhyLGUsdD17fSl7cmV0dXJuIWtlKHIpJiYhQXJyYXkuaXNBcnJheShyKT9bW3JdLHRdOkFycmF5LmlzQXJyYXkocik/UW8oclswXSxlLHJbMV0pOihlLmhhcyhyKXx8ZS5zZXQocixscihyKSksW2UuZ2V0KHIpLHRdKX1mdW5jdGlvbiBfXyhyKXtyZXR1cm4gQ18udGVzdChyKX1mdW5jdGlvbiBFXyhyKXtpZighci5pbmNsdWRlcygiOi8vIikpcmV0dXJuITE7dHJ5e2xldCBlPW5ldyBVUkwocik7cmV0dXJuIGUuc2NoZW1lIT09IiImJmUuaG9zdCE9PSIifWNhdGNoKGUpe3JldHVybiExfX1mdW5jdGlvbiBFaChyKXtsZXQgZT0hMDtyZXR1cm4gci53YWxrRGVjbHModD0+e2lmKCFPaCh0LnByb3AsdC52YWx1ZSkpcmV0dXJuIGU9ITEsITF9KSxlfWZ1bmN0aW9uIE9oKHIsZSl7aWYoRV8oYCR7cn06JHtlfWApKXJldHVybiExO3RyeXtyZXR1cm4gZWUucGFyc2UoYGF7JHtyfToke2V9fWApLnRvUmVzdWx0KCksITB9Y2F0Y2godCl7cmV0dXJuITF9fWZ1bmN0aW9uIE9fKHIsZSl7bGV0Wyx0LGldPXIubWF0Y2goL15cWyhbYS16QS1aMC05LV9dKyk6KFxTKylcXSQvKT8/W107aWYoaT09PXZvaWQgMHx8IV9fKHQpfHwhY3IoaSkpcmV0dXJuIG51bGw7bGV0IG49SyhpLHtwcm9wZXJ0eTp0fSk7cmV0dXJuIE9oKHQsbik/W1t7c29ydDplLm9mZnNldHMuYXJiaXRyYXJ5UHJvcGVydHkociksbGF5ZXI6InV0aWxpdGllcyIsb3B0aW9uczp7cmVzcGVjdEltcG9ydGFudDohMH19LCgpPT4oe1skbyhyKV06e1t0XTpufX0pXV06bnVsbH1mdW5jdGlvbipUXyhyLGUpe2UuY2FuZGlkYXRlUnVsZU1hcC5oYXMocikmJih5aWVsZFtlLmNhbmRpZGF0ZVJ1bGVNYXAuZ2V0KHIpLCJERUZBVUxUIl0pLHlpZWxkKmZ1bmN0aW9uKihvKXtvIT09bnVsbCYmKHlpZWxkW28sIkRFRkFVTFQiXSl9KE9fKHIsZSkpO2xldCB0PXIsaT0hMSxuPWUudGFpbHdpbmRDb25maWcucHJlZml4LHM9bi5sZW5ndGgsYT10LnN0YXJ0c1dpdGgobil8fHQuc3RhcnRzV2l0aChgLSR7bn1gKTt0W3NdPT09Ii0iJiZhJiYoaT0hMCx0PW4rdC5zbGljZShzKzEpKSxpJiZlLmNhbmRpZGF0ZVJ1bGVNYXAuaGFzKHQpJiYoeWllbGRbZS5jYW5kaWRhdGVSdWxlTWFwLmdldCh0KSwiLURFRkFVTFQiXSk7Zm9yKGxldFtvLGxdb2YgeF8odCkpZS5jYW5kaWRhdGVSdWxlTWFwLmhhcyhvKSYmKHlpZWxkW2UuY2FuZGlkYXRlUnVsZU1hcC5nZXQobyksaT9gLSR7bH1gOmxdKX1mdW5jdGlvbiBSXyhyLGUpe3JldHVybiByPT09Z3Q/W2d0XTp2ZShyLGUpfWZ1bmN0aW9uKlBfKHIsZSl7Zm9yKGxldCB0IG9mIHIpdFsxXS5yYXdzLnRhaWx3aW5kPXsuLi50WzFdLnJhd3MudGFpbHdpbmQsY2xhc3NDYW5kaWRhdGU6ZSxwcmVzZXJ2ZVNvdXJjZTp0WzBdLm9wdGlvbnM/LnByZXNlcnZlU291cmNlPz8hMX0seWllbGQgdH1mdW5jdGlvbipZbyhyLGUpe2xldCB0PWUudGFpbHdpbmRDb25maWcuc2VwYXJhdG9yLFtpLC4uLm5dPVJfKHIsdCkucmV2ZXJzZSgpLHM9ITE7aS5zdGFydHNXaXRoKCIhIikmJihzPSEwLGk9aS5zbGljZSgxKSk7Zm9yKGxldCBhIG9mIFRfKGksZSkpe2xldCBvPVtdLGw9bmV3IE1hcCxbYyxmXT1hLGQ9Yy5sZW5ndGg9PT0xO2ZvcihsZXRbcCxoXW9mIGMpe2xldCBiPVtdO2lmKHR5cGVvZiBoPT0iZnVuY3Rpb24iKWZvcihsZXQgdiBvZltdLmNvbmNhdChoKGYse2lzT25seVBsdWdpbjpkfSkpKXtsZXRbeSx3XT1Rbyh2LGUucG9zdENzc05vZGVDYWNoZSk7Zm9yKGxldCBrIG9mIHkpYi5wdXNoKFt7Li4ucCxvcHRpb25zOnsuLi5wLm9wdGlvbnMsLi4ud319LGtdKX1lbHNlIGlmKGY9PT0iREVGQVVMVCJ8fGY9PT0iLURFRkFVTFQiKXtsZXQgdj1oLFt5LHddPVFvKHYsZS5wb3N0Q3NzTm9kZUNhY2hlKTtmb3IobGV0IGsgb2YgeSliLnB1c2goW3suLi5wLG9wdGlvbnM6ey4uLnAub3B0aW9ucywuLi53fX0sa10pfWlmKGIubGVuZ3RoPjApe2xldCB2PUFycmF5LmZyb20odGEocC5vcHRpb25zPy50eXBlcz8/W10sZixwLm9wdGlvbnM/P3t9LGUudGFpbHdpbmRDb25maWcpKS5tYXAoKFt5LHddKT0+dyk7di5sZW5ndGg+MCYmbC5zZXQoYix2KSxvLnB1c2goYil9fWlmKEtvKGYpKXtpZihvLmxlbmd0aD4xKXtsZXQgYj1mdW5jdGlvbih5KXtyZXR1cm4geS5sZW5ndGg9PT0xP3lbMF06eS5maW5kKHc9PntsZXQgaz1sLmdldCh3KTtyZXR1cm4gdy5zb21lKChbe29wdGlvbnM6U30sRV0pPT5FaChFKT9TLnR5cGVzLnNvbWUoKHt0eXBlOlQscHJlZmVyT25Db25mbGljdDpCfSk9PmsuaW5jbHVkZXMoVCkmJkIpOiExKX0pfSxbcCxoXT1vLnJlZHVjZSgoeSx3KT0+KHcuc29tZSgoW3tvcHRpb25zOlN9XSk9PlMudHlwZXMuc29tZSgoe3R5cGU6RX0pPT5FPT09ImFueSIpKT95WzBdLnB1c2godyk6eVsxXS5wdXNoKHcpLHkpLFtbXSxbXV0pLHY9YihoKT8/YihwKTtpZih2KW89W3ZdO2Vsc2V7bGV0IHk9by5tYXAoaz0+bmV3IFNldChbLi4ubC5nZXQoayk/P1tdXSkpO2ZvcihsZXQgayBvZiB5KWZvcihsZXQgUyBvZiBrKXtsZXQgRT0hMTtmb3IobGV0IFQgb2YgeSlrIT09VCYmVC5oYXMoUykmJihULmRlbGV0ZShTKSxFPSEwKTtFJiZrLmRlbGV0ZShTKX1sZXQgdz1bXTtmb3IobGV0W2ssU11vZiB5LmVudHJpZXMoKSlmb3IobGV0IEUgb2YgUyl7bGV0IFQ9b1trXS5tYXAoKFssQl0pPT5CKS5mbGF0KCkubWFwKEI9PkIudG9TdHJpbmcoKS5zcGxpdChgCmApLnNsaWNlKDEsLTEpLm1hcChOPT5OLnRyaW0oKSkubWFwKE49PmAgICAgICAke059YCkuam9pbihgCmApKS5qb2luKGAKCmApO3cucHVzaChgICBVc2UgXGAke3IucmVwbGFjZSgiWyIsYFske0V9OmApfVxgIGZvciBcYCR7VC50cmltKCl9XGBgKTticmVha31HLndhcm4oW2BUaGUgY2xhc3MgXGAke3J9XGAgaXMgYW1iaWd1b3VzIGFuZCBtYXRjaGVzIG11bHRpcGxlIHV0aWxpdGllcy5gLC4uLncsYElmIHRoaXMgaXMgY29udGVudCBhbmQgbm90IGEgY2xhc3MsIHJlcGxhY2UgaXQgd2l0aCBcYCR7ci5yZXBsYWNlKCJbIiwiJmxzcWI7IikucmVwbGFjZSgiXSIsIiZyc3FiOyIpfVxgIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLmBdKTtjb250aW51ZX19bz1vLm1hcChwPT5wLmZpbHRlcihoPT5FaChoWzFdKSkpfW89by5mbGF0KCksbz1BcnJheS5mcm9tKFBfKG8saSkpLG89a18obyxlKSxzJiYobz1TXyhvLGkpKTtmb3IobGV0IHAgb2YgbilvPUFfKHAsbyxlKTtmb3IobGV0IHAgb2YgbylwWzFdLnJhd3MudGFpbHdpbmQ9ey4uLnBbMV0ucmF3cy50YWlsd2luZCxjYW5kaWRhdGU6cn0scD1JXyhwLHtjb250ZXh0OmUsY2FuZGlkYXRlOnJ9KSxwIT09bnVsbCYmKHlpZWxkIHApfX1mdW5jdGlvbiBJXyhyLHtjb250ZXh0OmUsY2FuZGlkYXRlOnR9KXtpZighclswXS5jb2xsZWN0ZWRGb3JtYXRzKXJldHVybiByO2xldCBpPSEwLG47dHJ5e249ZHIoclswXS5jb2xsZWN0ZWRGb3JtYXRzLHtjb250ZXh0OmUsY2FuZGlkYXRlOnR9KX1jYXRjaHtyZXR1cm4gbnVsbH1sZXQgcz1lZS5yb290KHtub2RlczpbclsxXS5jbG9uZSgpXX0pO3JldHVybiBzLndhbGtSdWxlcyhhPT57aWYoIXNzKGEpKXRyeXtsZXQgbz1ycyhhLnNlbGVjdG9yLG4se2NhbmRpZGF0ZTp0LGNvbnRleHQ6ZX0pO2lmKG89PT1udWxsKXthLnJlbW92ZSgpO3JldHVybn1hLnNlbGVjdG9yPW99Y2F0Y2h7cmV0dXJuIGk9ITEsITF9fSksIWl8fHMubm9kZXMubGVuZ3RoPT09MD9udWxsOihyWzFdPXMubm9kZXNbMF0scil9ZnVuY3Rpb24gc3Mocil7cmV0dXJuIHIucGFyZW50JiZyLnBhcmVudC50eXBlPT09ImF0cnVsZSImJnIucGFyZW50Lm5hbWU9PT0ia2V5ZnJhbWVzIn1mdW5jdGlvbiBEXyhyKXtpZihyPT09ITApcmV0dXJuIGU9PntzcyhlKXx8ZS53YWxrRGVjbHModD0+e3QucGFyZW50LnR5cGU9PT0icnVsZSImJiFzcyh0LnBhcmVudCkmJih0LmltcG9ydGFudD0hMCl9KX07aWYodHlwZW9mIHI9PSJzdHJpbmciKXJldHVybiBlPT57c3MoZSl8fChlLnNlbGVjdG9ycz1lLnNlbGVjdG9ycy5tYXAodD0+aXModCxyKSkpfX1mdW5jdGlvbiBhcyhyLGUsdD0hMSl7bGV0IGk9W10sbj1EXyhlLnRhaWx3aW5kQ29uZmlnLmltcG9ydGFudCk7Zm9yKGxldCBzIG9mIHIpe2lmKGUubm90Q2xhc3NDYWNoZS5oYXMocykpY29udGludWU7aWYoZS5jYW5kaWRhdGVSdWxlQ2FjaGUuaGFzKHMpKXtpPWkuY29uY2F0KEFycmF5LmZyb20oZS5jYW5kaWRhdGVSdWxlQ2FjaGUuZ2V0KHMpKSk7Y29udGludWV9bGV0IGE9QXJyYXkuZnJvbShZbyhzLGUpKTtpZihhLmxlbmd0aD09PTApe2Uubm90Q2xhc3NDYWNoZS5hZGQocyk7Y29udGludWV9ZS5jbGFzc0NhY2hlLnNldChzLGEpO2xldCBvPWUuY2FuZGlkYXRlUnVsZUNhY2hlLmdldChzKT8/bmV3IFNldDtlLmNhbmRpZGF0ZVJ1bGVDYWNoZS5zZXQocyxvKTtmb3IobGV0IGwgb2YgYSl7bGV0W3tzb3J0OmMsb3B0aW9uczpmfSxkXT1sO2lmKGYucmVzcGVjdEltcG9ydGFudCYmbil7bGV0IGg9ZWUucm9vdCh7bm9kZXM6W2QuY2xvbmUoKV19KTtoLndhbGtSdWxlcyhuKSxkPWgubm9kZXNbMF19bGV0IHA9W2MsdD9kLmNsb25lKCk6ZF07by5hZGQocCksZS5ydWxlQ2FjaGUuYWRkKHApLGkucHVzaChwKX19cmV0dXJuIGl9ZnVuY3Rpb24gS28ocil7cmV0dXJuIHIuc3RhcnRzV2l0aCgiWyIpJiZyLmVuZHNXaXRoKCJdIil9dmFyIG5zLHZfLENfLG9zPVAoKCk9Pnt1KCk7T3QoKTtucz1wZShpdCgpKTtxbygpO0t0KCk7R24oKTtGcigpO0JlKCk7SXQoKTtWbygpO0xvKCk7QnIoKTtPaSgpO0JvKCk7enQoKTtjdCgpO1dvKCk7dl89KDAsbnMuZGVmYXVsdCkocj0+ci5maXJzdC5maWx0ZXIoKHt0eXBlOmV9KT0+ZT09PSJjbGFzcyIpLnBvcCgpLnZhbHVlKTtDXz0vXlthLXpfLV0vfSk7dmFyIFRoLFJoPVAoKCk9Pnt1KCk7VGg9e319KTtmdW5jdGlvbiBxXyhyKXt0cnl7cmV0dXJuIFRoLmNyZWF0ZUhhc2goIm1kNSIpLnVwZGF0ZShyLCJ1dGYtOCIpLmRpZ2VzdCgiYmluYXJ5Iil9Y2F0Y2goZSl7cmV0dXJuIiJ9fWZ1bmN0aW9uIFBoKHIsZSl7bGV0IHQ9ZS50b1N0cmluZygpO2lmKCF0LmluY2x1ZGVzKCJAdGFpbHdpbmQiKSlyZXR1cm4hMTtsZXQgaT1Oby5nZXQociksbj1xXyh0KSxzPWkhPT1uO3JldHVybiBOby5zZXQocixuKSxzfXZhciBJaD1QKCgpPT57dSgpO1JoKCk7SXQoKX0pO2Z1bmN0aW9uIHVzKHIpe3JldHVybihyPjBuKS0ocjwwbil9dmFyIERoPVAoKCk9Pnt1KCl9KTtmdW5jdGlvbiBxaChyLGUpe2xldCB0PTBuLGk9MG47Zm9yKGxldFtuLHNdb2YgZSlyJm4mJih0PXR8bixpPWl8cyk7cmV0dXJuIHImfnR8aX12YXIgJGg9UCgoKT0+e3UoKX0pO2Z1bmN0aW9uIExoKHIpe2xldCBlPW51bGw7Zm9yKGxldCB0IG9mIHIpZT1lPz90LGU9ZT50P2U6dDtyZXR1cm4gZX1mdW5jdGlvbiAkXyhyLGUpe2xldCB0PXIubGVuZ3RoLGk9ZS5sZW5ndGgsbj10PGk/dDppO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBhPXIuY2hhckNvZGVBdChzKS1lLmNoYXJDb2RlQXQocyk7aWYoYSE9PTApcmV0dXJuIGF9cmV0dXJuIHQtaX12YXIgWG8sTWg9UCgoKT0+e3UoKTtEaCgpOyRoKCk7WG89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm9mZnNldHM9e2RlZmF1bHRzOjBuLGJhc2U6MG4sY29tcG9uZW50czowbix1dGlsaXRpZXM6MG4sdmFyaWFudHM6MG4sdXNlcjowbn0sdGhpcy5sYXllclBvc2l0aW9ucz17ZGVmYXVsdHM6MG4sYmFzZToxbixjb21wb25lbnRzOjJuLHV0aWxpdGllczozbix1c2VyOjRuLHZhcmlhbnRzOjVufSx0aGlzLnJlc2VydmVkVmFyaWFudEJpdHM9MG4sdGhpcy52YXJpYW50T2Zmc2V0cz1uZXcgTWFwfWNyZWF0ZShlKXtyZXR1cm57bGF5ZXI6ZSxwYXJlbnRMYXllcjplLGFyYml0cmFyeTowbix2YXJpYW50czowbixwYXJhbGxlbEluZGV4OjBuLGluZGV4OnRoaXMub2Zmc2V0c1tlXSsrLHByb3BlcnR5T2Zmc2V0OjBuLHByb3BlcnR5OiIiLG9wdGlvbnM6W119fWFyYml0cmFyeVByb3BlcnR5KGUpe3JldHVybnsuLi50aGlzLmNyZWF0ZSgidXRpbGl0aWVzIiksYXJiaXRyYXJ5OjFuLHByb3BlcnR5OmV9fWZvclZhcmlhbnQoZSx0PTApe2xldCBpPXRoaXMudmFyaWFudE9mZnNldHMuZ2V0KGUpO2lmKGk9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBvZmZzZXQgZm9yIHVua25vd24gdmFyaWFudCAke2V9YCk7cmV0dXJuey4uLnRoaXMuY3JlYXRlKCJ2YXJpYW50cyIpLHZhcmlhbnRzOmk8PEJpZ0ludCh0KX19YXBwbHlWYXJpYW50T2Zmc2V0KGUsdCxpKXtyZXR1cm4gaS52YXJpYW50PXQudmFyaWFudHMsey4uLmUsbGF5ZXI6InZhcmlhbnRzIixwYXJlbnRMYXllcjplLmxheWVyPT09InZhcmlhbnRzIj9lLnBhcmVudExheWVyOmUubGF5ZXIsdmFyaWFudHM6ZS52YXJpYW50c3x0LnZhcmlhbnRzLG9wdGlvbnM6aS5zb3J0P1tdLmNvbmNhdChpLGUub3B0aW9ucyk6ZS5vcHRpb25zLHBhcmFsbGVsSW5kZXg6TGgoW2UucGFyYWxsZWxJbmRleCx0LnBhcmFsbGVsSW5kZXhdKX19YXBwbHlQYXJhbGxlbE9mZnNldChlLHQpe3JldHVybnsuLi5lLHBhcmFsbGVsSW5kZXg6QmlnSW50KHQpfX1yZWNvcmRWYXJpYW50cyhlLHQpe2ZvcihsZXQgaSBvZiBlKXRoaXMucmVjb3JkVmFyaWFudChpLHQoaSkpfXJlY29yZFZhcmlhbnQoZSx0PTEpe3JldHVybiB0aGlzLnZhcmlhbnRPZmZzZXRzLnNldChlLDFuPDx0aGlzLnJlc2VydmVkVmFyaWFudEJpdHMpLHRoaXMucmVzZXJ2ZWRWYXJpYW50Qml0cys9QmlnSW50KHQpLHsuLi50aGlzLmNyZWF0ZSgidmFyaWFudHMiKSx2YXJpYW50czp0aGlzLnZhcmlhbnRPZmZzZXRzLmdldChlKX19Y29tcGFyZShlLHQpe2lmKGUubGF5ZXIhPT10LmxheWVyKXJldHVybiB0aGlzLmxheWVyUG9zaXRpb25zW2UubGF5ZXJdLXRoaXMubGF5ZXJQb3NpdGlvbnNbdC5sYXllcl07aWYoZS5wYXJlbnRMYXllciE9PXQucGFyZW50TGF5ZXIpcmV0dXJuIHRoaXMubGF5ZXJQb3NpdGlvbnNbZS5wYXJlbnRMYXllcl0tdGhpcy5sYXllclBvc2l0aW9uc1t0LnBhcmVudExheWVyXTtmb3IobGV0IGkgb2YgZS5vcHRpb25zKWZvcihsZXQgbiBvZiB0Lm9wdGlvbnMpe2lmKGkuaWQhPT1uLmlkfHwhaS5zb3J0fHwhbi5zb3J0KWNvbnRpbnVlO2xldCBzPUxoKFtpLnZhcmlhbnQsbi52YXJpYW50XSk/PzBuLGE9fihzfHMtMW4pLG89ZS52YXJpYW50cyZhLGw9dC52YXJpYW50cyZhO2lmKG8hPT1sKWNvbnRpbnVlO2xldCBjPWkuc29ydCh7dmFsdWU6aS52YWx1ZSxtb2RpZmllcjppLm1vZGlmaWVyfSx7dmFsdWU6bi52YWx1ZSxtb2RpZmllcjpuLm1vZGlmaWVyfSk7aWYoYyE9PTApcmV0dXJuIGN9cmV0dXJuIGUudmFyaWFudHMhPT10LnZhcmlhbnRzP2UudmFyaWFudHMtdC52YXJpYW50czplLnBhcmFsbGVsSW5kZXghPT10LnBhcmFsbGVsSW5kZXg/ZS5wYXJhbGxlbEluZGV4LXQucGFyYWxsZWxJbmRleDplLmFyYml0cmFyeSE9PXQuYXJiaXRyYXJ5P2UuYXJiaXRyYXJ5LXQuYXJiaXRyYXJ5OmUucHJvcGVydHlPZmZzZXQhPT10LnByb3BlcnR5T2Zmc2V0P2UucHJvcGVydHlPZmZzZXQtdC5wcm9wZXJ0eU9mZnNldDplLmluZGV4LXQuaW5kZXh9cmVjYWxjdWxhdGVWYXJpYW50T2Zmc2V0cygpe2xldCBlPUFycmF5LmZyb20odGhpcy52YXJpYW50T2Zmc2V0cy5lbnRyaWVzKCkpLmZpbHRlcigoW25dKT0+bi5zdGFydHNXaXRoKCJbIikpLnNvcnQoKFtuXSxbc10pPT4kXyhuLHMpKSx0PWUubWFwKChbLG5dKT0+bikuc29ydCgobixzKT0+dXMobi1zKSk7cmV0dXJuIGUubWFwKChbLG5dLHMpPT5bbix0W3NdXSkuZmlsdGVyKChbbixzXSk9Pm4hPT1zKX1yZW1hcEFyYml0cmFyeVZhcmlhbnRPZmZzZXRzKGUpe2xldCB0PXRoaXMucmVjYWxjdWxhdGVWYXJpYW50T2Zmc2V0cygpO3JldHVybiB0Lmxlbmd0aD09PTA/ZTplLm1hcChpPT57bGV0W24sc109aTtyZXR1cm4gbj17Li4ubix2YXJpYW50czpxaChuLnZhcmlhbnRzLHQpfSxbbixzXX0pfXNvcnRBcmJpdHJhcnlQcm9wZXJ0aWVzKGUpe2xldCB0PW5ldyBTZXQ7Zm9yKGxldFthXW9mIGUpYS5hcmJpdHJhcnk9PT0xbiYmdC5hZGQoYS5wcm9wZXJ0eSk7aWYodC5zaXplPT09MClyZXR1cm4gZTtsZXQgaT1BcnJheS5mcm9tKHQpLnNvcnQoKSxuPW5ldyBNYXAscz0xbjtmb3IobGV0IGEgb2YgaSluLnNldChhLHMrKyk7cmV0dXJuIGUubWFwKGE9PntsZXRbbyxsXT1hO3JldHVybiBvPXsuLi5vLHByb3BlcnR5T2Zmc2V0Om4uZ2V0KG8ucHJvcGVydHkpPz8wbn0sW28sbF19KX1zb3J0KGUpe3JldHVybiBlPXRoaXMucmVtYXBBcmJpdHJhcnlWYXJpYW50T2Zmc2V0cyhlKSxlPXRoaXMuc29ydEFyYml0cmFyeVByb3BlcnRpZXMoZSksZS5zb3J0KChbdF0sW2ldKT0+dXModGhpcy5jb21wYXJlKHQsaSkpKX19fSk7ZnVuY3Rpb24gdGwocixlKXtsZXQgdD1yLnRhaWx3aW5kQ29uZmlnLnByZWZpeDtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0K2V9ZnVuY3Rpb24gQmgoe3R5cGU6cj0iYW55IiwuLi5lfSl7bGV0IHQ9W10uY29uY2F0KHIpO3JldHVybnsuLi5lLHR5cGVzOnQubWFwKGk9PkFycmF5LmlzQXJyYXkoaSk/e3R5cGU6aVswXSwuLi5pWzFdfTp7dHlwZTppLHByZWZlck9uQ29uZmxpY3Q6ITF9KX19ZnVuY3Rpb24gTF8ocil7bGV0IGU9W10sdD0iIixpPTA7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBzPXJbbl07aWYocz09PSJcXCIpdCs9IlxcIityWysrbl07ZWxzZSBpZihzPT09InsiKSsraSxlLnB1c2godC50cmltKCkpLHQ9IiI7ZWxzZSBpZihzPT09In0iKXtpZigtLWk8MCl0aHJvdyBuZXcgRXJyb3IoIllvdXIgeyBhbmQgfSBhcmUgdW5iYWxhbmNlZC4iKTtlLnB1c2godC50cmltKCkpLHQ9IiJ9ZWxzZSB0Kz1zfXJldHVybiB0Lmxlbmd0aD4wJiZlLnB1c2godC50cmltKCkpLGU9ZS5maWx0ZXIobj0+biE9PSIiKSxlfWZ1bmN0aW9uIE1fKHIsZSx7YmVmb3JlOnQ9W119PXt9KXtpZih0PVtdLmNvbmNhdCh0KSx0Lmxlbmd0aDw9MCl7ci5wdXNoKGUpO3JldHVybn1sZXQgaT1yLmxlbmd0aC0xO2ZvcihsZXQgbiBvZiB0KXtsZXQgcz1yLmluZGV4T2Yobik7cyE9PS0xJiYoaT1NYXRoLm1pbihpLHMpKX1yLnNwbGljZShpLDAsZSl9ZnVuY3Rpb24gRmgocil7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/ci5mbGF0TWFwKGU9PiFBcnJheS5pc0FycmF5KGUpJiYha2UoZSk/ZTpscihlKSk6RmgoW3JdKX1mdW5jdGlvbiBOXyhyLGUpe3JldHVybigwLFpvLmRlZmF1bHQpKGk9PntsZXQgbj1bXTtyZXR1cm4gZSYmZShpKSxpLndhbGtDbGFzc2VzKHM9PntuLnB1c2gocy52YWx1ZSl9KSxufSkudHJhbnNmb3JtU3luYyhyKX1mdW5jdGlvbiBCXyhyKXtyLndhbGtQc2V1ZG9zKGU9PntlLnZhbHVlPT09Ijpub3QiJiZlLnJlbW92ZSgpfSl9ZnVuY3Rpb24gRl8ocixlPXtjb250YWluc05vbk9uRGVtYW5kYWJsZTohMX0sdD0wKXtsZXQgaT1bXSxuPVtdO3IudHlwZT09PSJydWxlIj9uLnB1c2goLi4uci5zZWxlY3RvcnMpOnIudHlwZT09PSJhdHJ1bGUiJiZyLndhbGtSdWxlcyhzPT5uLnB1c2goLi4ucy5zZWxlY3RvcnMpKTtmb3IobGV0IHMgb2Ygbil7bGV0IGE9Tl8ocyxCXyk7YS5sZW5ndGg9PT0wJiYoZS5jb250YWluc05vbk9uRGVtYW5kYWJsZT0hMCk7Zm9yKGxldCBvIG9mIGEpaS5wdXNoKG8pfXJldHVybiB0PT09MD9bZS5jb250YWluc05vbk9uRGVtYW5kYWJsZXx8aS5sZW5ndGg9PT0wLGldOml9ZnVuY3Rpb24gZnMocil7cmV0dXJuIEZoKHIpLmZsYXRNYXAoZT0+e2xldCB0PW5ldyBNYXAsW2ksbl09Rl8oZSk7cmV0dXJuIGkmJm4udW5zaGlmdChndCksbi5tYXAocz0+KHQuaGFzKGUpfHx0LnNldChlLGUpLFtzLHQuZ2V0KGUpXSkpfSl9ZnVuY3Rpb24gbHMocil7cmV0dXJuIHIuc3RhcnRzV2l0aCgiQCIpfHxyLmluY2x1ZGVzKCImIil9ZnVuY3Rpb24gUmkocil7cj1yLnJlcGxhY2UoL1xuKy9nLCIiKS5yZXBsYWNlKC9cc3sxLH0vZywiICIpLnRyaW0oKTtsZXQgZT1MXyhyKS5tYXAodD0+e2lmKCF0LnN0YXJ0c1dpdGgoIkAiKSlyZXR1cm4oe2Zvcm1hdDpzfSk9PnModCk7bGV0WyxpLG5dPS9AKFxTKikoIC4rfFsoe10uKik/L2cuZXhlYyh0KTtyZXR1cm4oe3dyYXA6c30pPT5zKGVlLmF0UnVsZSh7bmFtZTppLHBhcmFtczpuPy50cmltKCk/PyIifSkpfSkucmV2ZXJzZSgpO3JldHVybiB0PT57Zm9yKGxldCBpIG9mIGUpaSh0KX19ZnVuY3Rpb24gal8ocixlLHt2YXJpYW50TGlzdDp0LHZhcmlhbnRNYXA6aSxvZmZzZXRzOm4sY2xhc3NMaXN0OnN9KXtmdW5jdGlvbiBhKHAsaCl7cmV0dXJuIHA/KDAsTmguZGVmYXVsdCkocixwLGgpOnJ9ZnVuY3Rpb24gbyhwKXtyZXR1cm4gdXIoci5wcmVmaXgscCl9ZnVuY3Rpb24gbChwLGgpe3JldHVybiBwPT09Z3Q/Z3Q6aC5yZXNwZWN0UHJlZml4P2UudGFpbHdpbmRDb25maWcucHJlZml4K3A6cH1mdW5jdGlvbiBjKHAsaCxiPXt9KXtsZXQgdj1rdChwKSx5PWEoWyJ0aGVtZSIsLi4udl0saCk7cmV0dXJuIG10KHZbMF0pKHksYil9bGV0IGY9MCxkPXtwb3N0Y3NzOmVlLHByZWZpeDpvLGU6VGUsY29uZmlnOmEsdGhlbWU6Yyxjb3JlUGx1Z2luczpwPT5BcnJheS5pc0FycmF5KHIuY29yZVBsdWdpbnMpP3IuY29yZVBsdWdpbnMuaW5jbHVkZXMocCk6YShbImNvcmVQbHVnaW5zIixwXSwhMCksdmFyaWFudHM6KCk9PltdLGFkZEJhc2UocCl7Zm9yKGxldFtoLGJdb2YgZnMocCkpe2xldCB2PWwoaCx7fSkseT1uLmNyZWF0ZSgiYmFzZSIpO2UuY2FuZGlkYXRlUnVsZU1hcC5oYXModil8fGUuY2FuZGlkYXRlUnVsZU1hcC5zZXQodixbXSksZS5jYW5kaWRhdGVSdWxlTWFwLmdldCh2KS5wdXNoKFt7c29ydDp5LGxheWVyOiJiYXNlIn0sYl0pfX0sYWRkRGVmYXVsdHMocCxoKXtsZXQgYj17W2BAZGVmYXVsdHMgJHtwfWBdOmh9O2ZvcihsZXRbdix5XW9mIGZzKGIpKXtsZXQgdz1sKHYse30pO2UuY2FuZGlkYXRlUnVsZU1hcC5oYXModyl8fGUuY2FuZGlkYXRlUnVsZU1hcC5zZXQodyxbXSksZS5jYW5kaWRhdGVSdWxlTWFwLmdldCh3KS5wdXNoKFt7c29ydDpuLmNyZWF0ZSgiZGVmYXVsdHMiKSxsYXllcjoiZGVmYXVsdHMifSx5XSl9fSxhZGRDb21wb25lbnRzKHAsaCl7aD1PYmplY3QuYXNzaWduKHt9LHtwcmVzZXJ2ZVNvdXJjZTohMSxyZXNwZWN0UHJlZml4OiEwLHJlc3BlY3RJbXBvcnRhbnQ6ITF9LEFycmF5LmlzQXJyYXkoaCk/e306aCk7Zm9yKGxldFt2LHldb2YgZnMocCkpe2xldCB3PWwodixoKTtzLmFkZCh3KSxlLmNhbmRpZGF0ZVJ1bGVNYXAuaGFzKHcpfHxlLmNhbmRpZGF0ZVJ1bGVNYXAuc2V0KHcsW10pLGUuY2FuZGlkYXRlUnVsZU1hcC5nZXQodykucHVzaChbe3NvcnQ6bi5jcmVhdGUoImNvbXBvbmVudHMiKSxsYXllcjoiY29tcG9uZW50cyIsb3B0aW9uczpofSx5XSl9fSxhZGRVdGlsaXRpZXMocCxoKXtoPU9iamVjdC5hc3NpZ24oe30se3ByZXNlcnZlU291cmNlOiExLHJlc3BlY3RQcmVmaXg6ITAscmVzcGVjdEltcG9ydGFudDohMH0sQXJyYXkuaXNBcnJheShoKT97fTpoKTtmb3IobGV0W3YseV1vZiBmcyhwKSl7bGV0IHc9bCh2LGgpO3MuYWRkKHcpLGUuY2FuZGlkYXRlUnVsZU1hcC5oYXModyl8fGUuY2FuZGlkYXRlUnVsZU1hcC5zZXQodyxbXSksZS5jYW5kaWRhdGVSdWxlTWFwLmdldCh3KS5wdXNoKFt7c29ydDpuLmNyZWF0ZSgidXRpbGl0aWVzIiksbGF5ZXI6InV0aWxpdGllcyIsb3B0aW9uczpofSx5XSl9fSxtYXRjaFV0aWxpdGllczpmdW5jdGlvbihwLGgpe2g9Qmgoey4uLntyZXNwZWN0UHJlZml4OiEwLHJlc3BlY3RJbXBvcnRhbnQ6ITAsbW9kaWZpZXJzOiExfSwuLi5ofSk7bGV0IHY9bi5jcmVhdGUoInV0aWxpdGllcyIpO2ZvcihsZXQgeSBpbiBwKXtsZXQgUz1mdW5jdGlvbihULHtpc09ubHlQbHVnaW46Qn0pe2xldFtOLFIsRl09ZWEoaC50eXBlcyxULGgscik7aWYoTj09PXZvaWQgMClyZXR1cm5bXTtpZighaC50eXBlcy5zb21lKCh7dHlwZTpVfSk9PlU9PT1SKSlpZihCKUcud2FybihbYFVubmVjZXNzYXJ5IHR5cGVoaW50IFxgJHtSfVxgIGluIFxgJHt5fS0ke1R9XGAuYCxgWW91IGNhbiBzYWZlbHkgdXBkYXRlIGl0IHRvIFxgJHt5fS0ke1QucmVwbGFjZShSKyI6IiwiIil9XGAuYF0pO2Vsc2UgcmV0dXJuW107aWYoIWNyKE4pKXJldHVybltdO2xldCBZPXtnZXQgbW9kaWZpZXIoKXtyZXR1cm4gaC5tb2RpZmllcnN8fEcud2FybihgbW9kaWZpZXItdXNlZC13aXRob3V0LW9wdGlvbnMtZm9yLSR7eX1gLFsiWW91ciBwbHVnaW4gbXVzdCBzZXQgYG1vZGlmaWVyczogdHJ1ZWAgaW4gaXRzIG9wdGlvbnMgdG8gc3VwcG9ydCBtb2RpZmllcnMuIl0pLEZ9fSxfPXdlKHIsImdlbmVyYWxpemVkTW9kaWZpZXJzIik7cmV0dXJuW10uY29uY2F0KF8/ayhOLFkpOmsoTikpLmZpbHRlcihCb29sZWFuKS5tYXAoVT0+KHtbUW4oeSxUKV06VX0pKX0sdz1sKHksaCksaz1wW3ldO3MuYWRkKFt3LGhdKTtsZXQgRT1be3NvcnQ6dixsYXllcjoidXRpbGl0aWVzIixvcHRpb25zOmh9LFNdO2UuY2FuZGlkYXRlUnVsZU1hcC5oYXModyl8fGUuY2FuZGlkYXRlUnVsZU1hcC5zZXQodyxbXSksZS5jYW5kaWRhdGVSdWxlTWFwLmdldCh3KS5wdXNoKEUpfX0sbWF0Y2hDb21wb25lbnRzOmZ1bmN0aW9uKHAsaCl7aD1CaCh7Li4ue3Jlc3BlY3RQcmVmaXg6ITAscmVzcGVjdEltcG9ydGFudDohMSxtb2RpZmllcnM6ITF9LC4uLmh9KTtsZXQgdj1uLmNyZWF0ZSgiY29tcG9uZW50cyIpO2ZvcihsZXQgeSBpbiBwKXtsZXQgUz1mdW5jdGlvbihULHtpc09ubHlQbHVnaW46Qn0pe2xldFtOLFIsRl09ZWEoaC50eXBlcyxULGgscik7aWYoTj09PXZvaWQgMClyZXR1cm5bXTtpZighaC50eXBlcy5zb21lKCh7dHlwZTpVfSk9PlU9PT1SKSlpZihCKUcud2FybihbYFVubmVjZXNzYXJ5IHR5cGVoaW50IFxgJHtSfVxgIGluIFxgJHt5fS0ke1R9XGAuYCxgWW91IGNhbiBzYWZlbHkgdXBkYXRlIGl0IHRvIFxgJHt5fS0ke1QucmVwbGFjZShSKyI6IiwiIil9XGAuYF0pO2Vsc2UgcmV0dXJuW107aWYoIWNyKE4pKXJldHVybltdO2xldCBZPXtnZXQgbW9kaWZpZXIoKXtyZXR1cm4gaC5tb2RpZmllcnN8fEcud2FybihgbW9kaWZpZXItdXNlZC13aXRob3V0LW9wdGlvbnMtZm9yLSR7eX1gLFsiWW91ciBwbHVnaW4gbXVzdCBzZXQgYG1vZGlmaWVyczogdHJ1ZWAgaW4gaXRzIG9wdGlvbnMgdG8gc3VwcG9ydCBtb2RpZmllcnMuIl0pLEZ9fSxfPXdlKHIsImdlbmVyYWxpemVkTW9kaWZpZXJzIik7cmV0dXJuW10uY29uY2F0KF8/ayhOLFkpOmsoTikpLmZpbHRlcihCb29sZWFuKS5tYXAoVT0+KHtbUW4oeSxUKV06VX0pKX0sdz1sKHksaCksaz1wW3ldO3MuYWRkKFt3LGhdKTtsZXQgRT1be3NvcnQ6dixsYXllcjoiY29tcG9uZW50cyIsb3B0aW9uczpofSxTXTtlLmNhbmRpZGF0ZVJ1bGVNYXAuaGFzKHcpfHxlLmNhbmRpZGF0ZVJ1bGVNYXAuc2V0KHcsW10pLGUuY2FuZGlkYXRlUnVsZU1hcC5nZXQodykucHVzaChFKX19LGFkZFZhcmlhbnQocCxoLGI9e30pe2g9W10uY29uY2F0KGgpLm1hcCh2PT57aWYodHlwZW9mIHYhPSJzdHJpbmciKXJldHVybih5PXt9KT0+e2xldHthcmdzOncsbW9kaWZ5U2VsZWN0b3JzOmssY29udGFpbmVyOlMsc2VwYXJhdG9yOkUsd3JhcDpULGZvcm1hdDpCfT15LE49dihPYmplY3QuYXNzaWduKHttb2RpZnlTZWxlY3RvcnM6ayxjb250YWluZXI6UyxzZXBhcmF0b3I6RX0sYi50eXBlPT09Sm8uTWF0Y2hWYXJpYW50JiZ7YXJnczp3LHdyYXA6VCxmb3JtYXQ6Qn0pKTtpZih0eXBlb2YgTj09InN0cmluZyImJiFscyhOKSl0aHJvdyBuZXcgRXJyb3IoYFlvdXIgY3VzdG9tIHZhcmlhbnQgXGAke3B9XGAgaGFzIGFuIGludmFsaWQgZm9ybWF0IHN0cmluZy4gTWFrZSBzdXJlIGl0J3MgYW4gYXQtcnVsZSBvciBjb250YWlucyBhIFxgJlxgIHBsYWNlaG9sZGVyLmApO3JldHVybiBBcnJheS5pc0FycmF5KE4pP04uZmlsdGVyKFI9PnR5cGVvZiBSPT0ic3RyaW5nIikubWFwKFI9PlJpKFIpKTpOJiZ0eXBlb2YgTj09InN0cmluZyImJlJpKE4pKHkpfTtpZighbHModikpdGhyb3cgbmV3IEVycm9yKGBZb3VyIGN1c3RvbSB2YXJpYW50IFxgJHtwfVxgIGhhcyBhbiBpbnZhbGlkIGZvcm1hdCBzdHJpbmcuIE1ha2Ugc3VyZSBpdCdzIGFuIGF0LXJ1bGUgb3IgY29udGFpbnMgYSBcYCZcYCBwbGFjZWhvbGRlci5gKTtyZXR1cm4gUmkodil9KSxNXyh0LHAsYiksaS5zZXQocCxoKSxlLnZhcmlhbnRPcHRpb25zLnNldChwLGIpfSxtYXRjaFZhcmlhbnQocCxoLGIpe2xldCB2PWI/LmlkPz8rK2YseT1wPT09IkAiLHc9d2UociwiZ2VuZXJhbGl6ZWRNb2RpZmllcnMiKTtmb3IobGV0W1MsRV1vZiBPYmplY3QuZW50cmllcyhiPy52YWx1ZXM/P3t9KSlTIT09IkRFRkFVTFQiJiZkLmFkZFZhcmlhbnQoeT9gJHtwfSR7U31gOmAke3B9LSR7U31gLCh7YXJnczpULGNvbnRhaW5lcjpCfSk9PmgoRSx3P3ttb2RpZmllcjpUPy5tb2RpZmllcixjb250YWluZXI6Qn06e2NvbnRhaW5lcjpCfSksey4uLmIsdmFsdWU6RSxpZDp2LHR5cGU6Sm8uTWF0Y2hWYXJpYW50LHZhcmlhbnRJbmZvOmVsLkJhc2V9KTtsZXQgaz0iREVGQVVMVCJpbihiPy52YWx1ZXM/P3t9KTtkLmFkZFZhcmlhbnQocCwoe2FyZ3M6Uyxjb250YWluZXI6RX0pPT5TPy52YWx1ZT09PVRpJiYhaz9udWxsOmgoUz8udmFsdWU9PT1UaT9iLnZhbHVlcy5ERUZBVUxUOlM/LnZhbHVlPz8odHlwZW9mIFM9PSJzdHJpbmciP1M6IiIpLHc/e21vZGlmaWVyOlM/Lm1vZGlmaWVyLGNvbnRhaW5lcjpFfTp7Y29udGFpbmVyOkV9KSx7Li4uYixpZDp2LHR5cGU6Sm8uTWF0Y2hWYXJpYW50LHZhcmlhbnRJbmZvOmVsLkR5bmFtaWN9KX19O3JldHVybiBkfWZ1bmN0aW9uIGNzKHIpe3JldHVybiBybC5oYXMocil8fHJsLnNldChyLG5ldyBNYXApLHJsLmdldChyKX1mdW5jdGlvbiBqaChyLGUpe2xldCB0PSExLGk9bmV3IE1hcDtmb3IobGV0IG4gb2Ygcil7aWYoIW4pY29udGludWU7bGV0IHM9b2EucGFyc2UobiksYT1zLmhhc2g/cy5ocmVmLnJlcGxhY2Uocy5oYXNoLCIiKTpzLmhyZWY7YT1zLnNlYXJjaD9hLnJlcGxhY2Uocy5zZWFyY2gsIiIpOmE7bGV0IG89YmUuc3RhdFN5bmMoZGVjb2RlVVJJQ29tcG9uZW50KGEpLHt0aHJvd0lmTm9FbnRyeTohMX0pPy5tdGltZU1zOyFvfHwoKCFlLmhhcyhuKXx8bz5lLmdldChuKSkmJih0PSEwKSxpLnNldChuLG8pKX1yZXR1cm5bdCxpXX1mdW5jdGlvbiB6aChyKXtyLndhbGtBdFJ1bGVzKGU9PntbInJlc3BvbnNpdmUiLCJ2YXJpYW50cyJdLmluY2x1ZGVzKGUubmFtZSkmJih6aChlKSxlLmJlZm9yZShlLm5vZGVzKSxlLnJlbW92ZSgpKX0pfWZ1bmN0aW9uIHpfKHIpe2xldCBlPVtdO3JldHVybiByLmVhY2godD0+e3QudHlwZT09PSJhdHJ1bGUiJiZbInJlc3BvbnNpdmUiLCJ2YXJpYW50cyJdLmluY2x1ZGVzKHQubmFtZSkmJih0Lm5hbWU9ImxheWVyIix0LnBhcmFtcz0idXRpbGl0aWVzIil9KSxyLndhbGtBdFJ1bGVzKCJsYXllciIsdD0+e2lmKHpoKHQpLHQucGFyYW1zPT09ImJhc2UiKXtmb3IobGV0IGkgb2YgdC5ub2RlcyllLnB1c2goZnVuY3Rpb24oe2FkZEJhc2U6bn0pe24oaSx7cmVzcGVjdFByZWZpeDohMX0pfSk7dC5yZW1vdmUoKX1lbHNlIGlmKHQucGFyYW1zPT09ImNvbXBvbmVudHMiKXtmb3IobGV0IGkgb2YgdC5ub2RlcyllLnB1c2goZnVuY3Rpb24oe2FkZENvbXBvbmVudHM6bn0pe24oaSx7cmVzcGVjdFByZWZpeDohMSxwcmVzZXJ2ZVNvdXJjZTohMH0pfSk7dC5yZW1vdmUoKX1lbHNlIGlmKHQucGFyYW1zPT09InV0aWxpdGllcyIpe2ZvcihsZXQgaSBvZiB0Lm5vZGVzKWUucHVzaChmdW5jdGlvbih7YWRkVXRpbGl0aWVzOm59KXtuKGkse3Jlc3BlY3RQcmVmaXg6ITEscHJlc2VydmVTb3VyY2U6ITB9KX0pO3QucmVtb3ZlKCl9fSksZX1mdW5jdGlvbiBVXyhyLGUpe2xldCB0PU9iamVjdC5lbnRyaWVzKHsuLi5zZSwuLi55aH0pLm1hcCgoW2wsY10pPT5yLnRhaWx3aW5kQ29uZmlnLmNvcmVQbHVnaW5zLmluY2x1ZGVzKGwpP2M6bnVsbCkuZmlsdGVyKEJvb2xlYW4pLGk9ci50YWlsd2luZENvbmZpZy5wbHVnaW5zLm1hcChsPT4obC5fX2lzT3B0aW9uc0Z1bmN0aW9uJiYobD1sKCkpLHR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6bC5oYW5kbGVyKSksbj16XyhlKSxzPVtzZS5jaGlsZFZhcmlhbnQsc2UucHNldWRvRWxlbWVudFZhcmlhbnRzLHNlLnBzZXVkb0NsYXNzVmFyaWFudHMsc2UuaGFzVmFyaWFudHMsc2UuYXJpYVZhcmlhbnRzLHNlLmRhdGFWYXJpYW50c10sYT1bc2Uuc3VwcG9ydHNWYXJpYW50cyxzZS5yZWR1Y2VkTW90aW9uVmFyaWFudHMsc2UucHJlZmVyc0NvbnRyYXN0VmFyaWFudHMsc2Uuc2NyZWVuVmFyaWFudHMsc2Uub3JpZW50YXRpb25WYXJpYW50cyxzZS5kaXJlY3Rpb25WYXJpYW50cyxzZS5kYXJrVmFyaWFudHMsc2UuZm9yY2VkQ29sb3JzVmFyaWFudHMsc2UucHJpbnRWYXJpYW50XTtyZXR1cm4oci50YWlsd2luZENvbmZpZy5kYXJrTW9kZT09PSJjbGFzcyJ8fEFycmF5LmlzQXJyYXkoci50YWlsd2luZENvbmZpZy5kYXJrTW9kZSkmJnIudGFpbHdpbmRDb25maWcuZGFya01vZGVbMF09PT0iY2xhc3MiKSYmKGE9W3NlLnN1cHBvcnRzVmFyaWFudHMsc2UucmVkdWNlZE1vdGlvblZhcmlhbnRzLHNlLnByZWZlcnNDb250cmFzdFZhcmlhbnRzLHNlLmRhcmtWYXJpYW50cyxzZS5zY3JlZW5WYXJpYW50cyxzZS5vcmllbnRhdGlvblZhcmlhbnRzLHNlLmRpcmVjdGlvblZhcmlhbnRzLHNlLmZvcmNlZENvbG9yc1ZhcmlhbnRzLHNlLnByaW50VmFyaWFudF0pLFsuLi50LC4uLnMsLi4uaSwuLi5hLC4uLm5dfWZ1bmN0aW9uIFZfKHIsZSl7bGV0IHQ9W10saT1uZXcgTWFwO2UudmFyaWFudE1hcD1pO2xldCBuPW5ldyBYbztlLm9mZnNldHM9bjtsZXQgcz1uZXcgU2V0LGE9al8oZS50YWlsd2luZENvbmZpZyxlLHt2YXJpYW50TGlzdDp0LHZhcmlhbnRNYXA6aSxvZmZzZXRzOm4sY2xhc3NMaXN0OnN9KTtmb3IobGV0IGYgb2YgcilpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgZCBvZiBmKWQoYSk7ZWxzZSBmPy4oYSk7bi5yZWNvcmRWYXJpYW50cyh0LGY9PmkuZ2V0KGYpLmxlbmd0aCk7Zm9yKGxldFtmLGRdb2YgaS5lbnRyaWVzKCkpZS52YXJpYW50TWFwLnNldChmLGQubWFwKChwLGgpPT5bbi5mb3JWYXJpYW50KGYsaCkscF0pKTtsZXQgbz0oZS50YWlsd2luZENvbmZpZy5zYWZlbGlzdD8/W10pLmZpbHRlcihCb29sZWFuKTtpZihvLmxlbmd0aD4wKXtsZXQgZj1bXTtmb3IobGV0IGQgb2Ygbyl7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXtlLmNoYW5nZWRDb250ZW50LnB1c2goe2NvbnRlbnQ6ZCxleHRlbnNpb246Imh0bWwifSk7Y29udGludWV9aWYoZCBpbnN0YW5jZW9mIFJlZ0V4cCl7Ry53YXJuKCJyb290LXJlZ2V4IixbIlJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gYHNhZmVsaXN0YCB3b3JrIGRpZmZlcmVudGx5IGluIFRhaWx3aW5kIENTUyB2My4wLiIsIlVwZGF0ZSB5b3VyIGBzYWZlbGlzdGAgY29uZmlndXJhdGlvbiB0byBlbGltaW5hdGUgdGhpcyB3YXJuaW5nLiIsImh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY29udGVudC1jb25maWd1cmF0aW9uI3NhZmVsaXN0aW5nLWNsYXNzZXMiXSk7Y29udGludWV9Zi5wdXNoKGQpfWlmKGYubGVuZ3RoPjApe2xldCBkPW5ldyBNYXAscD1lLnRhaWx3aW5kQ29uZmlnLnByZWZpeC5sZW5ndGgsaD1mLnNvbWUoYj0+Yi5wYXR0ZXJuLnNvdXJjZS5pbmNsdWRlcygiISIpKTtmb3IobGV0IGIgb2Ygcyl7bGV0IHY9QXJyYXkuaXNBcnJheShiKT8oKCk9PntsZXRbeSx3XT1iLFM9T2JqZWN0LmtleXModz8udmFsdWVzPz97fSkubWFwKEU9PkVpKHksRSkpO3JldHVybiB3Py5zdXBwb3J0c05lZ2F0aXZlVmFsdWVzJiYoUz1bLi4uUywuLi5TLm1hcChFPT4iLSIrRSldLFM9Wy4uLlMsLi4uUy5tYXAoRT0+RS5zbGljZSgwLHApKyItIitFLnNsaWNlKHApKV0pLHcudHlwZXMuc29tZSgoe3R5cGU6RX0pPT5FPT09ImNvbG9yIikmJihTPVsuLi5TLC4uLlMuZmxhdE1hcChFPT5PYmplY3Qua2V5cyhlLnRhaWx3aW5kQ29uZmlnLnRoZW1lLm9wYWNpdHkpLm1hcChUPT5gJHtFfS8ke1R9YCkpXSksaCYmdz8ucmVzcGVjdEltcG9ydGFudCYmKFM9Wy4uLlMsLi4uUy5tYXAoRT0+IiEiK0UpXSksU30pKCk6W2JdO2ZvcihsZXQgeSBvZiB2KWZvcihsZXR7cGF0dGVybjp3LHZhcmlhbnRzOms9W119b2YgZilpZih3Lmxhc3RJbmRleD0wLGQuaGFzKHcpfHxkLnNldCh3LDApLCEhdy50ZXN0KHkpKXtkLnNldCh3LGQuZ2V0KHcpKzEpLGUuY2hhbmdlZENvbnRlbnQucHVzaCh7Y29udGVudDp5LGV4dGVuc2lvbjoiaHRtbCJ9KTtmb3IobGV0IFMgb2YgayllLmNoYW5nZWRDb250ZW50LnB1c2goe2NvbnRlbnQ6UytlLnRhaWx3aW5kQ29uZmlnLnNlcGFyYXRvcit5LGV4dGVuc2lvbjoiaHRtbCJ9KX19Zm9yKGxldFtiLHZdb2YgZC5lbnRyaWVzKCkpdj09PTAmJkcud2FybihbYFRoZSBzYWZlbGlzdCBwYXR0ZXJuIFxgJHtifVxgIGRvZXNuJ3QgbWF0Y2ggYW55IFRhaWx3aW5kIENTUyBjbGFzc2VzLmAsIkZpeCB0aGlzIHBhdHRlcm4gb3IgcmVtb3ZlIGl0IGZyb20geW91ciBgc2FmZWxpc3RgIGNvbmZpZ3VyYXRpb24uIiwiaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250ZW50LWNvbmZpZ3VyYXRpb24jc2FmZWxpc3RpbmctY2xhc3NlcyJdKX19bGV0IGw9W10uY29uY2F0KGUudGFpbHdpbmRDb25maWcuZGFya01vZGU/PyJtZWRpYSIpWzFdPz8iZGFyayIsYz1bdGwoZSxsKSx0bChlLCJncm91cCIpLHRsKGUsInBlZXIiKV07ZS5nZXRDbGFzc09yZGVyPWZ1bmN0aW9uKGQpe2xldCBwPVsuLi5kXS5zb3J0KCh5LHcpPT55PT09dz8wOnk8dz8tMToxKSxoPW5ldyBNYXAocC5tYXAoeT0+W3ksbnVsbF0pKSxiPWFzKG5ldyBTZXQocCksZSwhMCk7Yj1lLm9mZnNldHMuc29ydChiKTtsZXQgdj1CaWdJbnQoYy5sZW5ndGgpO2ZvcihsZXRbLHldb2YgYil7bGV0IHc9eS5yYXdzLnRhaWx3aW5kLmNhbmRpZGF0ZTtoLnNldCh3LGguZ2V0KHcpPz92KyspfXJldHVybiBkLm1hcCh5PT57bGV0IHc9aC5nZXQoeSk/P251bGwsaz1jLmluZGV4T2YoeSk7cmV0dXJuIHc9PT1udWxsJiZrIT09LTEmJih3PUJpZ0ludChrKSksW3ksd119KX0sZS5nZXRDbGFzc0xpc3Q9ZnVuY3Rpb24oZD17fSl7bGV0IHA9W107Zm9yKGxldCBoIG9mIHMpaWYoQXJyYXkuaXNBcnJheShoKSl7bGV0W2Isdl09aCx5PVtdLHc9T2JqZWN0LmtleXModj8ubW9kaWZpZXJzPz97fSk7dj8udHlwZXM/LnNvbWUoKHt0eXBlOkV9KT0+RT09PSJjb2xvciIpJiZ3LnB1c2goLi4uT2JqZWN0LmtleXMoZS50YWlsd2luZENvbmZpZy50aGVtZS5vcGFjaXR5Pz97fSkpO2xldCBrPXttb2RpZmllcnM6d30sUz1kLmluY2x1ZGVNZXRhZGF0YSYmdy5sZW5ndGg+MDtmb3IobGV0W0UsVF1vZiBPYmplY3QuZW50cmllcyh2Py52YWx1ZXM/P3t9KSl7aWYoVD09bnVsbCljb250aW51ZTtsZXQgQj1FaShiLEUpO2lmKHAucHVzaChTP1tCLGtdOkIpLHY/LnN1cHBvcnRzTmVnYXRpdmVWYWx1ZXMmJnh0KFQpKXtsZXQgTj1FaShiLGAtJHtFfWApO3kucHVzaChTP1tOLGtdOk4pfX1wLnB1c2goLi4ueSl9ZWxzZSBwLnB1c2goaCk7cmV0dXJuIHB9LGUuZ2V0VmFyaWFudHM9ZnVuY3Rpb24oKXtsZXQgZD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykudG9VcHBlckNhc2UoKSxwPVtdO2ZvcihsZXRbaCxiXW9mIGUudmFyaWFudE9wdGlvbnMuZW50cmllcygpKWIudmFyaWFudEluZm8hPT1lbC5CYXNlJiZwLnB1c2goe25hbWU6aCxpc0FyYml0cmFyeTpiLnR5cGU9PT1TeW1ib2wuZm9yKCJNQVRDSF9WQVJJQU5UIiksdmFsdWVzOk9iamVjdC5rZXlzKGIudmFsdWVzPz97fSksaGFzRGFzaDpoIT09IkAiLHNlbGVjdG9ycyh7bW9kaWZpZXI6dix2YWx1ZTp5fT17fSl7bGV0IHc9YFRBSUxXSU5EUExBQ0VIT0xERVIke2R9YCxrPWVlLnJ1bGUoe3NlbGVjdG9yOmAuJHt3fWB9KSxTPWVlLnJvb3Qoe25vZGVzOltrLmNsb25lKCldfSksRT1TLnRvU3RyaW5nKCksVD0oZS52YXJpYW50TWFwLmdldChoKT8/W10pLmZsYXRNYXAoKFtsZSxBXSk9PkEpLEI9W107Zm9yKGxldCBsZSBvZiBUKXtsZXQgQT1bXSxDPXthcmdzOnttb2RpZmllcjp2LHZhbHVlOmIudmFsdWVzPy5beV0/P3l9LHNlcGFyYXRvcjplLnRhaWx3aW5kQ29uZmlnLnNlcGFyYXRvcixtb2RpZnlTZWxlY3RvcnMoVil7cmV0dXJuIFMuZWFjaChFZT0+e0VlLnR5cGU9PT0icnVsZSImJihFZS5zZWxlY3RvcnM9RWUuc2VsZWN0b3JzLm1hcChJZT0+Vih7Z2V0IGNsYXNzTmFtZSgpe3JldHVybiBHbyhJZSl9LHNlbGVjdG9yOkllfSkpKX0pLFN9LGZvcm1hdChWKXtBLnB1c2goVil9LHdyYXAoVil7QS5wdXNoKGBAJHtWLm5hbWV9ICR7Vi5wYXJhbXN9IHsgJiB9YCl9LGNvbnRhaW5lcjpTfSxoZT1sZShDKTtpZihBLmxlbmd0aD4wJiZCLnB1c2goQSksQXJyYXkuaXNBcnJheShoZSkpZm9yKGxldCBWIG9mIGhlKUE9W10sVihDKSxCLnB1c2goQSl9bGV0IE49W10sUj1TLnRvU3RyaW5nKCk7RSE9PVImJihTLndhbGtSdWxlcyhsZT0+e2xldCBBPWxlLnNlbGVjdG9yLEM9KDAsWm8uZGVmYXVsdCkoaGU9PntoZS53YWxrQ2xhc3NlcyhWPT57Vi52YWx1ZT1gJHtofSR7ZS50YWlsd2luZENvbmZpZy5zZXBhcmF0b3J9JHtWLnZhbHVlfWB9KX0pLnByb2Nlc3NTeW5jKEEpO04ucHVzaChBLnJlcGxhY2UoQywiJiIpLnJlcGxhY2UodywiJiIpKX0pLFMud2Fsa0F0UnVsZXMobGU9PntOLnB1c2goYEAke2xlLm5hbWV9ICgke2xlLnBhcmFtc30pIHsgJiB9YCl9KSk7bGV0IEY9ISh5IGluKGIudmFsdWVzPz97fSkpLFk9YltQdF0/P3t9LF89KCgpPT4hKEZ8fFkucmVzcGVjdFByZWZpeD09PSExKSkoKTtCPUIubWFwKGxlPT5sZS5tYXAoQT0+KHtmb3JtYXQ6QSxyZXNwZWN0UHJlZml4Ol99KSkpLE49Ti5tYXAobGU9Pih7Zm9ybWF0OmxlLHJlc3BlY3RQcmVmaXg6X30pKTtsZXQgUT17Y2FuZGlkYXRlOncsY29udGV4dDplfSxVPUIubWFwKGxlPT5ycyhgLiR7d31gLGRyKGxlLFEpLFEpLnJlcGxhY2UoYC4ke3d9YCwiJiIpLnJlcGxhY2UoInsgJiB9IiwiIikudHJpbSgpKTtyZXR1cm4gTi5sZW5ndGg+MCYmVS5wdXNoKGRyKE4sUSkudG9TdHJpbmcoKS5yZXBsYWNlKGAuJHt3fWAsIiYiKSksVX19KTtyZXR1cm4gcH19ZnVuY3Rpb24gVWgocixlKXshci5jbGFzc0NhY2hlLmhhcyhlKXx8KHIubm90Q2xhc3NDYWNoZS5hZGQoZSksci5jbGFzc0NhY2hlLmRlbGV0ZShlKSxyLmFwcGx5Q2xhc3NDYWNoZS5kZWxldGUoZSksci5jYW5kaWRhdGVSdWxlTWFwLmRlbGV0ZShlKSxyLmNhbmRpZGF0ZVJ1bGVDYWNoZS5kZWxldGUoZSksci5zdHlsZXNoZWV0Q2FjaGU9bnVsbCl9ZnVuY3Rpb24gSF8ocixlKXtsZXQgdD1lLnJhd3MudGFpbHdpbmQuY2FuZGlkYXRlO2lmKCEhdCl7Zm9yKGxldCBpIG9mIHIucnVsZUNhY2hlKWlbMV0ucmF3cy50YWlsd2luZC5jYW5kaWRhdGU9PT10JiZyLnJ1bGVDYWNoZS5kZWxldGUoaSk7VWgocix0KX19ZnVuY3Rpb24gaWwocixlPVtdLHQ9ZWUucm9vdCgpKXtsZXQgaT17ZGlzcG9zYWJsZXM6W10scnVsZUNhY2hlOm5ldyBTZXQsY2FuZGlkYXRlUnVsZUNhY2hlOm5ldyBNYXAsY2xhc3NDYWNoZTpuZXcgTWFwLGFwcGx5Q2xhc3NDYWNoZTpuZXcgTWFwLG5vdENsYXNzQ2FjaGU6bmV3IFNldChyLmJsb2NrbGlzdD8/W10pLHBvc3RDc3NOb2RlQ2FjaGU6bmV3IE1hcCxjYW5kaWRhdGVSdWxlTWFwOm5ldyBNYXAsdGFpbHdpbmRDb25maWc6cixjaGFuZ2VkQ29udGVudDplLHZhcmlhbnRNYXA6bmV3IE1hcCxzdHlsZXNoZWV0Q2FjaGU6bnVsbCx2YXJpYW50T3B0aW9uczpuZXcgTWFwLG1hcmtJbnZhbGlkVXRpbGl0eUNhbmRpZGF0ZTpzPT5VaChpLHMpLG1hcmtJbnZhbGlkVXRpbGl0eU5vZGU6cz0+SF8oaSxzKX0sbj1VXyhpLHQpO3JldHVybiBWXyhuLGkpLGl9ZnVuY3Rpb24gVmgocixlLHQsaSxuLHMpe2xldCBhPWUub3B0cy5mcm9tLG89aSE9PW51bGw7WmUuREVCVUcmJmNvbnNvbGUubG9nKCJTb3VyY2UgcGF0aDoiLGEpO2xldCBsO2lmKG8mJmhyLmhhcyhhKSlsPWhyLmdldChhKTtlbHNlIGlmKFBpLmhhcyhuKSl7bGV0IHA9UGkuZ2V0KG4pO0R0LmdldChwKS5hZGQoYSksaHIuc2V0KGEscCksbD1wfWxldCBjPVBoKGEscik7aWYobCl7bGV0W3AsaF09amgoWy4uLnNdLGNzKGwpKTtpZighcCYmIWMpcmV0dXJuW2wsITEsaF19aWYoaHIuaGFzKGEpKXtsZXQgcD1oci5nZXQoYSk7aWYoRHQuaGFzKHApJiYoRHQuZ2V0KHApLmRlbGV0ZShhKSxEdC5nZXQocCkuc2l6ZT09PTApKXtEdC5kZWxldGUocCk7Zm9yKGxldFtoLGJdb2YgUGkpYj09PXAmJlBpLmRlbGV0ZShoKTtmb3IobGV0IGggb2YgcC5kaXNwb3NhYmxlcy5zcGxpY2UoMCkpaChwKX19WmUuREVCVUcmJmNvbnNvbGUubG9nKCJTZXR0aW5nIHVwIG5ldyBjb250ZXh0Li4uIik7bGV0IGY9aWwodCxbXSxyKTtPYmplY3QuYXNzaWduKGYse3VzZXJDb25maWdQYXRoOml9KTtsZXRbLGRdPWpoKFsuLi5zXSxjcyhmKSk7cmV0dXJuIFBpLnNldChuLGYpLGhyLnNldChhLGYpLER0LmhhcyhmKXx8RHQuc2V0KGYsbmV3IFNldCksRHQuZ2V0KGYpLmFkZChhKSxbZiwhMCxkXX12YXIgTmgsWm8sUHQsSm8sZWwscmwsaHIsUGksRHQsT2k9UCgoKT0+e3UoKTtmdCgpO2xhKCk7T3QoKTtOaD1wZShSYSgpKSxabz1wZShpdCgpKTtDaSgpO3FvKCk7R24oKTtLdCgpO2ZyKCk7TG8oKTtGcigpO2JoKCk7SXQoKTtJdCgpO1lpKCk7QmUoKTtHaSgpO0JvKCk7b3MoKTtJaCgpO01oKCk7Y3QoKTtWbygpO1B0PVN5bWJvbCgpLEpvPXtBZGRWYXJpYW50OlN5bWJvbC5mb3IoIkFERF9WQVJJQU5UIiksTWF0Y2hWYXJpYW50OlN5bWJvbC5mb3IoIk1BVENIX1ZBUklBTlQiKX0sZWw9e0Jhc2U6MTw8MCxEeW5hbWljOjE8PDF9O3JsPW5ldyBXZWFrTWFwO2hyPXdoLFBpPXZoLER0PWVzfSk7ZnVuY3Rpb24gbmwocil7cmV0dXJuIHIuaWdub3JlP1tdOnIuZ2xvYj9tLmVudi5ST0xMVVBfV0FUQ0g9PT0idHJ1ZSI/W3t0eXBlOiJkZXBlbmRlbmN5IixmaWxlOnIuYmFzZX1dOlt7dHlwZToiZGlyLWRlcGVuZGVuY3kiLGRpcjpyLmJhc2UsZ2xvYjpyLmdsb2J9XTpbe3R5cGU6ImRlcGVuZGVuY3kiLGZpbGU6ci5iYXNlfV19dmFyIEhoPVAoKCk9Pnt1KCl9KTtmdW5jdGlvbiBXaChyLGUpe3JldHVybntoYW5kbGVyOnIsY29uZmlnOmV9fXZhciBHaCxRaD1QKCgpPT57dSgpO1doLndpdGhPcHRpb25zPWZ1bmN0aW9uKHIsZT0oKT0+KHt9KSl7bGV0IHQ9ZnVuY3Rpb24oaSl7cmV0dXJue19fb3B0aW9uczppLGhhbmRsZXI6cihpKSxjb25maWc6ZShpKX19O3JldHVybiB0Ll9faXNPcHRpb25zRnVuY3Rpb249ITAsdC5fX3BsdWdpbkZ1bmN0aW9uPXIsdC5fX2NvbmZpZ0Z1bmN0aW9uPWUsdH07R2g9V2h9KTt2YXIgc2w9e307R2Uoc2wse2RlZmF1bHQ6KCk9PldffSk7dmFyIFdfLGFsPVAoKCk9Pnt1KCk7UWgoKTtXXz1HaH0pO3ZhciBLaD14KCh6NCxZaCk9Pnt1KCk7dmFyIEdfPShhbCgpLHNsKS5kZWZhdWx0LFFfPXtvdmVyZmxvdzoiaGlkZGVuIixkaXNwbGF5OiItd2Via2l0LWJveCIsIi13ZWJraXQtYm94LW9yaWVudCI6InZlcnRpY2FsIn0sWV89R18oZnVuY3Rpb24oe21hdGNoVXRpbGl0aWVzOnIsYWRkVXRpbGl0aWVzOmUsdGhlbWU6dCx2YXJpYW50czppfSl7bGV0IG49dCgibGluZUNsYW1wIik7cih7ImxpbmUtY2xhbXAiOnM9Pih7Li4uUV8sIi13ZWJraXQtbGluZS1jbGFtcCI6YCR7c31gfSl9LHt2YWx1ZXM6bn0pLGUoW3siLmxpbmUtY2xhbXAtbm9uZSI6eyItd2Via2l0LWxpbmUtY2xhbXAiOiJ1bnNldCJ9fV0saSgibGluZUNsYW1wIikpfSx7dGhlbWU6e2xpbmVDbGFtcDp7MToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiJ9fSx2YXJpYW50czp7bGluZUNsYW1wOlsicmVzcG9uc2l2ZSJdfX0pO1loLmV4cG9ydHM9WV99KTtmdW5jdGlvbiBvbChyKXtyLmNvbnRlbnQuZmlsZXMubGVuZ3RoPT09MCYmRy53YXJuKCJjb250ZW50LXByb2JsZW1zIixbIlRoZSBgY29udGVudGAgb3B0aW9uIGluIHlvdXIgVGFpbHdpbmQgQ1NTIGNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZyBvciBlbXB0eS4iLCJDb25maWd1cmUgeW91ciBjb250ZW50IHNvdXJjZXMgb3IgeW91ciBnZW5lcmF0ZWQgQ1NTIHdpbGwgYmUgbWlzc2luZyBzdHlsZXMuIiwiaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250ZW50LWNvbmZpZ3VyYXRpb24iXSk7dHJ5e2xldCBlPUtoKCk7ci5wbHVnaW5zLmluY2x1ZGVzKGUpJiYoRy53YXJuKCJsaW5lLWNsYW1wLWluLWNvcmUiLFsiQXMgb2YgVGFpbHdpbmQgQ1NTIHYzLjMsIHRoZSBgQHRhaWx3aW5kY3NzL2xpbmUtY2xhbXBgIHBsdWdpbiBpcyBub3cgaW5jbHVkZWQgYnkgZGVmYXVsdC4iLCJSZW1vdmUgaXQgZnJvbSB0aGUgYHBsdWdpbnNgIGFycmF5IGluIHlvdXIgY29uZmlndXJhdGlvbiB0byBlbGltaW5hdGUgdGhpcyB3YXJuaW5nLiJdKSxyLnBsdWdpbnM9ci5wbHVnaW5zLmZpbHRlcih0PT50IT09ZSkpfWNhdGNoe31yZXR1cm4gcn12YXIgWGg9UCgoKT0+e3UoKTtCZSgpfSk7dmFyIFpoLEpoPVAoKCk9Pnt1KCk7Wmg9KCk9PiExfSk7dmFyIHBzLGVtPVAoKCk9Pnt1KCk7cHM9e3N5bmM6cj0+W10uY29uY2F0KHIpLGdlbmVyYXRlVGFza3M6cj0+W3tkeW5hbWljOiExLGJhc2U6Ii4iLG5lZ2F0aXZlOltdLHBvc2l0aXZlOltdLmNvbmNhdChyKSxwYXR0ZXJuczpbXS5jb25jYXQocil9XSxlc2NhcGVQYXRoOnI9PnJ9fSk7dmFyIGxsLHRtPVAoKCk9Pnt1KCk7bGw9cj0+cn0pO3ZhciBybSxpbT1QKCgpPT57dSgpO3JtPSgpPT4iIn0pO2Z1bmN0aW9uIG5tKHIpe2xldCBlPXIsdD1ybShyKTtyZXR1cm4gdCE9PSIuIiYmKGU9ci5zdWJzdHIodC5sZW5ndGgpLGUuY2hhckF0KDApPT09Ii8iJiYoZT1lLnN1YnN0cigxKSkpLGUuc3Vic3RyKDAsMik9PT0iLi8iP2U9ZS5zdWJzdHIoMik6ZS5jaGFyQXQoMCk9PT0iLyImJihlPWUuc3Vic3RyKDEpKSx7YmFzZTp0LGdsb2I6ZX19dmFyIHNtPVAoKCk9Pnt1KCk7aW0oKX0pO3ZhciBkcz14KFZlPT57dSgpOyJ1c2Ugc3RyaWN0IjtWZS5pc0ludGVnZXI9cj0+dHlwZW9mIHI9PSJudW1iZXIiP051bWJlci5pc0ludGVnZXIocik6dHlwZW9mIHI9PSJzdHJpbmciJiZyLnRyaW0oKSE9PSIiP051bWJlci5pc0ludGVnZXIoTnVtYmVyKHIpKTohMTtWZS5maW5kPShyLGUpPT5yLm5vZGVzLmZpbmQodD0+dC50eXBlPT09ZSk7VmUuZXhjZWVkc0xpbWl0PShyLGUsdD0xLGkpPT5pPT09ITF8fCFWZS5pc0ludGVnZXIocil8fCFWZS5pc0ludGVnZXIoZSk/ITE6KE51bWJlcihlKS1OdW1iZXIocikpL051bWJlcih0KT49aTtWZS5lc2NhcGVOb2RlPShyLGU9MCx0KT0+e2xldCBpPXIubm9kZXNbZV07IWl8fCh0JiZpLnR5cGU9PT10fHxpLnR5cGU9PT0ib3BlbiJ8fGkudHlwZT09PSJjbG9zZSIpJiZpLmVzY2FwZWQhPT0hMCYmKGkudmFsdWU9IlxcIitpLnZhbHVlLGkuZXNjYXBlZD0hMCl9O1ZlLmVuY2xvc2VCcmFjZT1yPT5yLnR5cGUhPT0iYnJhY2UiPyExOnIuY29tbWFzPj4wK3IucmFuZ2VzPj4wPT0wPyhyLmludmFsaWQ9ITAsITApOiExO1ZlLmlzSW52YWxpZEJyYWNlPXI9PnIudHlwZSE9PSJicmFjZSI/ITE6ci5pbnZhbGlkPT09ITB8fHIuZG9sbGFyPyEwOnIuY29tbWFzPj4wK3IucmFuZ2VzPj4wPT0wfHxyLm9wZW4hPT0hMHx8ci5jbG9zZSE9PSEwPyhyLmludmFsaWQ9ITAsITApOiExO1ZlLmlzT3Blbk9yQ2xvc2U9cj0+ci50eXBlPT09Im9wZW4ifHxyLnR5cGU9PT0iY2xvc2UiPyEwOnIub3Blbj09PSEwfHxyLmNsb3NlPT09ITA7VmUucmVkdWNlPXI9PnIucmVkdWNlKChlLHQpPT4odC50eXBlPT09InRleHQiJiZlLnB1c2godC52YWx1ZSksdC50eXBlPT09InJhbmdlIiYmKHQudHlwZT0idGV4dCIpLGUpLFtdKTtWZS5mbGF0dGVuPSguLi5yKT0+e2xldCBlPVtdLHQ9aT0+e2ZvcihsZXQgbj0wO248aS5sZW5ndGg7bisrKXtsZXQgcz1pW25dO2lmKEFycmF5LmlzQXJyYXkocykpe3Qocyk7Y29udGludWV9cyE9PXZvaWQgMCYmZS5wdXNoKHMpfXJldHVybiBlfTtyZXR1cm4gdChyKSxlfX0pO3ZhciBocz14KChaNCxvbSk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBhbT1kcygpO29tLmV4cG9ydHM9KHIsZT17fSk9PntsZXQgdD0oaSxuPXt9KT0+e2xldCBzPWUuZXNjYXBlSW52YWxpZCYmYW0uaXNJbnZhbGlkQnJhY2UobiksYT1pLmludmFsaWQ9PT0hMCYmZS5lc2NhcGVJbnZhbGlkPT09ITAsbz0iIjtpZihpLnZhbHVlKXJldHVybihzfHxhKSYmYW0uaXNPcGVuT3JDbG9zZShpKT8iXFwiK2kudmFsdWU6aS52YWx1ZTtpZihpLnZhbHVlKXJldHVybiBpLnZhbHVlO2lmKGkubm9kZXMpZm9yKGxldCBsIG9mIGkubm9kZXMpbys9dChsKTtyZXR1cm4gb307cmV0dXJuIHQocil9fSk7dmFyIHVtPXgoKEo0LGxtKT0+e3UoKTsidXNlIHN0cmljdCI7bG0uZXhwb3J0cz1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PSJudW1iZXIiP3Itcj09MDp0eXBlb2Ygcj09InN0cmluZyImJnIudHJpbSgpIT09IiI/TnVtYmVyLmlzRmluaXRlP051bWJlci5pc0Zpbml0ZSgrcik6aXNGaW5pdGUoK3IpOiExfX0pO3ZhciBibT14KChlNix5bSk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBmbT11bSgpLFd0PShyLGUsdCk9PntpZihmbShyKT09PSExKXRocm93IG5ldyBUeXBlRXJyb3IoInRvUmVnZXhSYW5nZTogZXhwZWN0ZWQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyIik7aWYoZT09PXZvaWQgMHx8cj09PWUpcmV0dXJuIFN0cmluZyhyKTtpZihmbShlKT09PSExKXRocm93IG5ldyBUeXBlRXJyb3IoInRvUmVnZXhSYW5nZTogZXhwZWN0ZWQgdGhlIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIG51bWJlci4iKTtsZXQgaT17cmVsYXhaZXJvczohMCwuLi50fTt0eXBlb2YgaS5zdHJpY3RaZXJvcz09ImJvb2xlYW4iJiYoaS5yZWxheFplcm9zPWkuc3RyaWN0WmVyb3M9PT0hMSk7bGV0IG49U3RyaW5nKGkucmVsYXhaZXJvcykscz1TdHJpbmcoaS5zaG9ydGhhbmQpLGE9U3RyaW5nKGkuY2FwdHVyZSksbz1TdHJpbmcoaS53cmFwKSxsPXIrIjoiK2UrIj0iK24rcythK287aWYoV3QuY2FjaGUuaGFzT3duUHJvcGVydHkobCkpcmV0dXJuIFd0LmNhY2hlW2xdLnJlc3VsdDtsZXQgYz1NYXRoLm1pbihyLGUpLGY9TWF0aC5tYXgocixlKTtpZihNYXRoLmFicyhjLWYpPT09MSl7bGV0IHY9cisifCIrZTtyZXR1cm4gaS5jYXB0dXJlP2AoJHt2fSlgOmkud3JhcD09PSExP3Y6YCg/OiR7dn0pYH1sZXQgZD1nbShyKXx8Z20oZSkscD17bWluOnIsbWF4OmUsYTpjLGI6Zn0saD1bXSxiPVtdO2lmKGQmJihwLmlzUGFkZGVkPWQscC5tYXhMZW49U3RyaW5nKHAubWF4KS5sZW5ndGgpLGM8MCl7bGV0IHY9ZjwwP01hdGguYWJzKGYpOjE7Yj1jbSh2LE1hdGguYWJzKGMpLHAsaSksYz1wLmE9MH1yZXR1cm4gZj49MCYmKGg9Y20oYyxmLHAsaSkpLHAubmVnYXRpdmVzPWIscC5wb3NpdGl2ZXM9aCxwLnJlc3VsdD1LXyhiLGgsaSksaS5jYXB0dXJlPT09ITA/cC5yZXN1bHQ9YCgke3AucmVzdWx0fSlgOmkud3JhcCE9PSExJiZoLmxlbmd0aCtiLmxlbmd0aD4xJiYocC5yZXN1bHQ9YCg/OiR7cC5yZXN1bHR9KWApLFd0LmNhY2hlW2xdPXAscC5yZXN1bHR9O2Z1bmN0aW9uIEtfKHIsZSx0KXtsZXQgaT11bChyLGUsIi0iLCExLHQpfHxbXSxuPXVsKGUsciwiIiwhMSx0KXx8W10scz11bChyLGUsIi0/IiwhMCx0KXx8W107cmV0dXJuIGkuY29uY2F0KHMpLmNvbmNhdChuKS5qb2luKCJ8Iil9ZnVuY3Rpb24gWF8ocixlKXtsZXQgdD0xLGk9MSxuPWRtKHIsdCkscz1uZXcgU2V0KFtlXSk7Zm9yKDtyPD1uJiZuPD1lOylzLmFkZChuKSx0Kz0xLG49ZG0ocix0KTtmb3Iobj1obShlKzEsaSktMTtyPG4mJm48PWU7KXMuYWRkKG4pLGkrPTEsbj1obShlKzEsaSktMTtyZXR1cm4gcz1bLi4uc10scy5zb3J0KGVFKSxzfWZ1bmN0aW9uIFpfKHIsZSx0KXtpZihyPT09ZSlyZXR1cm57cGF0dGVybjpyLGNvdW50OltdLGRpZ2l0czowfTtsZXQgaT1KXyhyLGUpLG49aS5sZW5ndGgscz0iIixhPTA7Zm9yKGxldCBvPTA7bzxuO28rKyl7bGV0W2wsY109aVtvXTtsPT09Yz9zKz1sOmwhPT0iMCJ8fGMhPT0iOSI/cys9dEUobCxjLHQpOmErK31yZXR1cm4gYSYmKHMrPXQuc2hvcnRoYW5kPT09ITA/IlxcZCI6IlswLTldIikse3BhdHRlcm46cyxjb3VudDpbYV0sZGlnaXRzOm59fWZ1bmN0aW9uIGNtKHIsZSx0LGkpe2xldCBuPVhfKHIsZSkscz1bXSxhPXIsbztmb3IobGV0IGw9MDtsPG4ubGVuZ3RoO2wrKyl7bGV0IGM9bltsXSxmPVpfKFN0cmluZyhhKSxTdHJpbmcoYyksaSksZD0iIjtpZighdC5pc1BhZGRlZCYmbyYmby5wYXR0ZXJuPT09Zi5wYXR0ZXJuKXtvLmNvdW50Lmxlbmd0aD4xJiZvLmNvdW50LnBvcCgpLG8uY291bnQucHVzaChmLmNvdW50WzBdKSxvLnN0cmluZz1vLnBhdHRlcm4rbW0oby5jb3VudCksYT1jKzE7Y29udGludWV9dC5pc1BhZGRlZCYmKGQ9ckUoYyx0LGkpKSxmLnN0cmluZz1kK2YucGF0dGVybittbShmLmNvdW50KSxzLnB1c2goZiksYT1jKzEsbz1mfXJldHVybiBzfWZ1bmN0aW9uIHVsKHIsZSx0LGksbil7bGV0IHM9W107Zm9yKGxldCBhIG9mIHIpe2xldHtzdHJpbmc6b309YTshaSYmIXBtKGUsInN0cmluZyIsbykmJnMucHVzaCh0K28pLGkmJnBtKGUsInN0cmluZyIsbykmJnMucHVzaCh0K28pfXJldHVybiBzfWZ1bmN0aW9uIEpfKHIsZSl7bGV0IHQ9W107Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspdC5wdXNoKFtyW2ldLGVbaV1dKTtyZXR1cm4gdH1mdW5jdGlvbiBlRShyLGUpe3JldHVybiByPmU/MTplPnI/LTE6MH1mdW5jdGlvbiBwbShyLGUsdCl7cmV0dXJuIHIuc29tZShpPT5pW2VdPT09dCl9ZnVuY3Rpb24gZG0ocixlKXtyZXR1cm4gTnVtYmVyKFN0cmluZyhyKS5zbGljZSgwLC1lKSsiOSIucmVwZWF0KGUpKX1mdW5jdGlvbiBobShyLGUpe3JldHVybiByLXIlTWF0aC5wb3coMTAsZSl9ZnVuY3Rpb24gbW0ocil7bGV0W2U9MCx0PSIiXT1yO3JldHVybiB0fHxlPjE/YHske2UrKHQ/IiwiK3Q6IiIpfX1gOiIifWZ1bmN0aW9uIHRFKHIsZSx0KXtyZXR1cm5gWyR7cn0ke2Utcj09MT8iIjoiLSJ9JHtlfV1gfWZ1bmN0aW9uIGdtKHIpe3JldHVybi9eLT8oMCspXGQvLnRlc3Qocil9ZnVuY3Rpb24gckUocixlLHQpe2lmKCFlLmlzUGFkZGVkKXJldHVybiByO2xldCBpPU1hdGguYWJzKGUubWF4TGVuLVN0cmluZyhyKS5sZW5ndGgpLG49dC5yZWxheFplcm9zIT09ITE7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDE6cmV0dXJuIG4/IjA/IjoiMCI7Y2FzZSAyOnJldHVybiBuPyIwezAsMn0iOiIwMCI7ZGVmYXVsdDpyZXR1cm4gbj9gMHswLCR7aX19YDpgMHske2l9fWB9fVd0LmNhY2hlPXt9O1d0LmNsZWFyQ2FjaGU9KCk9Pld0LmNhY2hlPXt9O3ltLmV4cG9ydHM9V3R9KTt2YXIgcGw9eCgodDYsQ20pPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgaUU9KEZuKCksQm4pLHdtPWJtKCksdm09cj0+ciE9PW51bGwmJnR5cGVvZiByPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkociksbkU9cj0+ZT0+cj09PSEwP051bWJlcihlKTpTdHJpbmcoZSksZmw9cj0+dHlwZW9mIHI9PSJudW1iZXIifHx0eXBlb2Ygcj09InN0cmluZyImJnIhPT0iIixJaT1yPT5OdW1iZXIuaXNJbnRlZ2VyKCtyKSxjbD1yPT57bGV0IGU9YCR7cn1gLHQ9LTE7aWYoZVswXT09PSItIiYmKGU9ZS5zbGljZSgxKSksZT09PSIwIilyZXR1cm4hMTtmb3IoO2VbKyt0XT09PSIwIjspO3JldHVybiB0PjB9LHNFPShyLGUsdCk9PnR5cGVvZiByPT0ic3RyaW5nInx8dHlwZW9mIGU9PSJzdHJpbmciPyEwOnQuc3RyaW5naWZ5PT09ITAsYUU9KHIsZSx0KT0+e2lmKGU+MCl7bGV0IGk9clswXT09PSItIj8iLSI6IiI7aSYmKHI9ci5zbGljZSgxKSkscj1pK3IucGFkU3RhcnQoaT9lLTE6ZSwiMCIpfXJldHVybiB0PT09ITE/U3RyaW5nKHIpOnJ9LG1zPShyLGUpPT57bGV0IHQ9clswXT09PSItIj8iLSI6IiI7Zm9yKHQmJihyPXIuc2xpY2UoMSksZS0tKTtyLmxlbmd0aDxlOylyPSIwIityO3JldHVybiB0PyItIityOnJ9LG9FPShyLGUsdCk9PntyLm5lZ2F0aXZlcy5zb3J0KChvLGwpPT5vPGw/LTE6bz5sPzE6MCksci5wb3NpdGl2ZXMuc29ydCgobyxsKT0+bzxsPy0xOm8+bD8xOjApO2xldCBpPWUuY2FwdHVyZT8iIjoiPzoiLG49IiIscz0iIixhO3JldHVybiByLnBvc2l0aXZlcy5sZW5ndGgmJihuPXIucG9zaXRpdmVzLm1hcChvPT5tcyhTdHJpbmcobyksdCkpLmpvaW4oInwiKSksci5uZWdhdGl2ZXMubGVuZ3RoJiYocz1gLSgke2l9JHtyLm5lZ2F0aXZlcy5tYXAobz0+bXMoU3RyaW5nKG8pLHQpKS5qb2luKCJ8Iil9KWApLG4mJnM/YT1gJHtufXwke3N9YDphPW58fHMsZS53cmFwP2AoJHtpfSR7YX0pYDphfSx4bT0ocixlLHQsaSk9PntpZih0KXJldHVybiB3bShyLGUse3dyYXA6ITEsLi4uaX0pO2xldCBuPVN0cmluZy5mcm9tQ2hhckNvZGUocik7aWYocj09PWUpcmV0dXJuIG47bGV0IHM9U3RyaW5nLmZyb21DaGFyQ29kZShlKTtyZXR1cm5gWyR7bn0tJHtzfV1gfSxrbT0ocixlLHQpPT57aWYoQXJyYXkuaXNBcnJheShyKSl7bGV0IGk9dC53cmFwPT09ITAsbj10LmNhcHR1cmU/IiI6Ij86IjtyZXR1cm4gaT9gKCR7bn0ke3Iuam9pbigifCIpfSlgOnIuam9pbigifCIpfXJldHVybiB3bShyLGUsdCl9LFNtPSguLi5yKT0+bmV3IFJhbmdlRXJyb3IoIkludmFsaWQgcmFuZ2UgYXJndW1lbnRzOiAiK2lFLmluc3BlY3QoLi4ucikpLEFtPShyLGUsdCk9PntpZih0LnN0cmljdFJhbmdlcz09PSEwKXRocm93IFNtKFtyLGVdKTtyZXR1cm5bXX0sbEU9KHIsZSk9PntpZihlLnN0cmljdFJhbmdlcz09PSEwKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHN0ZXAgIiR7cn0iIHRvIGJlIGEgbnVtYmVyYCk7cmV0dXJuW119LHVFPShyLGUsdD0xLGk9e30pPT57bGV0IG49TnVtYmVyKHIpLHM9TnVtYmVyKGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG4pfHwhTnVtYmVyLmlzSW50ZWdlcihzKSl7aWYoaS5zdHJpY3RSYW5nZXM9PT0hMCl0aHJvdyBTbShbcixlXSk7cmV0dXJuW119bj09PTAmJihuPTApLHM9PT0wJiYocz0wKTtsZXQgYT1uPnMsbz1TdHJpbmcociksbD1TdHJpbmcoZSksYz1TdHJpbmcodCk7dD1NYXRoLm1heChNYXRoLmFicyh0KSwxKTtsZXQgZj1jbChvKXx8Y2wobCl8fGNsKGMpLGQ9Zj9NYXRoLm1heChvLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCk6MCxwPWY9PT0hMSYmc0UocixlLGkpPT09ITEsaD1pLnRyYW5zZm9ybXx8bkUocCk7aWYoaS50b1JlZ2V4JiZ0PT09MSlyZXR1cm4geG0obXMocixkKSxtcyhlLGQpLCEwLGkpO2xldCBiPXtuZWdhdGl2ZXM6W10scG9zaXRpdmVzOltdfSx2PWs9PmJbazwwPyJuZWdhdGl2ZXMiOiJwb3NpdGl2ZXMiXS5wdXNoKE1hdGguYWJzKGspKSx5PVtdLHc9MDtmb3IoO2E/bj49czpuPD1zOylpLnRvUmVnZXg9PT0hMCYmdD4xP3Yobik6eS5wdXNoKGFFKGgobix3KSxkLHApKSxuPWE/bi10Om4rdCx3Kys7cmV0dXJuIGkudG9SZWdleD09PSEwP3Q+MT9vRShiLGksZCk6a20oeSxudWxsLHt3cmFwOiExLC4uLml9KTp5fSxmRT0ocixlLHQ9MSxpPXt9KT0+e2lmKCFJaShyKSYmci5sZW5ndGg+MXx8IUlpKGUpJiZlLmxlbmd0aD4xKXJldHVybiBBbShyLGUsaSk7bGV0IG49aS50cmFuc2Zvcm18fChwPT5TdHJpbmcuZnJvbUNoYXJDb2RlKHApKSxzPWAke3J9YC5jaGFyQ29kZUF0KDApLGE9YCR7ZX1gLmNoYXJDb2RlQXQoMCksbz1zPmEsbD1NYXRoLm1pbihzLGEpLGM9TWF0aC5tYXgocyxhKTtpZihpLnRvUmVnZXgmJnQ9PT0xKXJldHVybiB4bShsLGMsITEsaSk7bGV0IGY9W10sZD0wO2Zvcig7bz9zPj1hOnM8PWE7KWYucHVzaChuKHMsZCkpLHM9bz9zLXQ6cyt0LGQrKztyZXR1cm4gaS50b1JlZ2V4PT09ITA/a20oZixudWxsLHt3cmFwOiExLG9wdGlvbnM6aX0pOmZ9LGdzPShyLGUsdCxpPXt9KT0+e2lmKGU9PW51bGwmJmZsKHIpKXJldHVybltyXTtpZighZmwocil8fCFmbChlKSlyZXR1cm4gQW0ocixlLGkpO2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiBncyhyLGUsMSx7dHJhbnNmb3JtOnR9KTtpZih2bSh0KSlyZXR1cm4gZ3MocixlLDAsdCk7bGV0IG49ey4uLml9O3JldHVybiBuLmNhcHR1cmU9PT0hMCYmKG4ud3JhcD0hMCksdD10fHxuLnN0ZXB8fDEsSWkodCk/SWkocikmJklpKGUpP3VFKHIsZSx0LG4pOmZFKHIsZSxNYXRoLm1heChNYXRoLmFicyh0KSwxKSxuKTp0IT1udWxsJiYhdm0odCk/bEUodCxuKTpncyhyLGUsMSx0KX07Q20uZXhwb3J0cz1nc30pO3ZhciBPbT14KChyNixFbSk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBjRT1wbCgpLF9tPWRzKCkscEU9KHIsZT17fSk9PntsZXQgdD0oaSxuPXt9KT0+e2xldCBzPV9tLmlzSW52YWxpZEJyYWNlKG4pLGE9aS5pbnZhbGlkPT09ITAmJmUuZXNjYXBlSW52YWxpZD09PSEwLG89cz09PSEwfHxhPT09ITAsbD1lLmVzY2FwZUludmFsaWQ9PT0hMD8iXFwiOiIiLGM9IiI7aWYoaS5pc09wZW49PT0hMClyZXR1cm4gbCtpLnZhbHVlO2lmKGkuaXNDbG9zZT09PSEwKXJldHVybiBjb25zb2xlLmxvZygibm9kZS5pc0Nsb3NlIixsLGkudmFsdWUpLGwraS52YWx1ZTtpZihpLnR5cGU9PT0ib3BlbiIpcmV0dXJuIG8/bCtpLnZhbHVlOiIoIjtpZihpLnR5cGU9PT0iY2xvc2UiKXJldHVybiBvP2wraS52YWx1ZToiKSI7aWYoaS50eXBlPT09ImNvbW1hIilyZXR1cm4gaS5wcmV2LnR5cGU9PT0iY29tbWEiPyIiOm8/aS52YWx1ZToifCI7aWYoaS52YWx1ZSlyZXR1cm4gaS52YWx1ZTtpZihpLm5vZGVzJiZpLnJhbmdlcz4wKXtsZXQgZj1fbS5yZWR1Y2UoaS5ub2RlcyksZD1jRSguLi5mLHsuLi5lLHdyYXA6ITEsdG9SZWdleDohMCxzdHJpY3RaZXJvczohMH0pO2lmKGQubGVuZ3RoIT09MClyZXR1cm4gZi5sZW5ndGg+MSYmZC5sZW5ndGg+MT9gKCR7ZH0pYDpkfWlmKGkubm9kZXMpZm9yKGxldCBmIG9mIGkubm9kZXMpYys9dChmLGkpO3JldHVybiBjfTtyZXR1cm4gdChyKX07RW0uZXhwb3J0cz1wRX0pO3ZhciBQbT14KChpNixSbSk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBkRT1wbCgpLFRtPWhzKCksbXI9ZHMoKSxHdD0ocj0iIixlPSIiLHQ9ITEpPT57bGV0IGk9W107aWYocj1bXS5jb25jYXQociksZT1bXS5jb25jYXQoZSksIWUubGVuZ3RoKXJldHVybiByO2lmKCFyLmxlbmd0aClyZXR1cm4gdD9tci5mbGF0dGVuKGUpLm1hcChuPT5geyR7bn19YCk6ZTtmb3IobGV0IG4gb2YgcilpZihBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgcyBvZiBuKWkucHVzaChHdChzLGUsdCkpO2Vsc2UgZm9yKGxldCBzIG9mIGUpdD09PSEwJiZ0eXBlb2Ygcz09InN0cmluZyImJihzPWB7JHtzfX1gKSxpLnB1c2goQXJyYXkuaXNBcnJheShzKT9HdChuLHMsdCk6bitzKTtyZXR1cm4gbXIuZmxhdHRlbihpKX0saEU9KHIsZT17fSk9PntsZXQgdD1lLnJhbmdlTGltaXQ9PT12b2lkIDA/MWUzOmUucmFuZ2VMaW1pdCxpPShuLHM9e30pPT57bi5xdWV1ZT1bXTtsZXQgYT1zLG89cy5xdWV1ZTtmb3IoO2EudHlwZSE9PSJicmFjZSImJmEudHlwZSE9PSJyb290IiYmYS5wYXJlbnQ7KWE9YS5wYXJlbnQsbz1hLnF1ZXVlO2lmKG4uaW52YWxpZHx8bi5kb2xsYXIpe28ucHVzaChHdChvLnBvcCgpLFRtKG4sZSkpKTtyZXR1cm59aWYobi50eXBlPT09ImJyYWNlIiYmbi5pbnZhbGlkIT09ITAmJm4ubm9kZXMubGVuZ3RoPT09Mil7by5wdXNoKEd0KG8ucG9wKCksWyJ7fSJdKSk7cmV0dXJufWlmKG4ubm9kZXMmJm4ucmFuZ2VzPjApe2xldCBkPW1yLnJlZHVjZShuLm5vZGVzKTtpZihtci5leGNlZWRzTGltaXQoLi4uZCxlLnN0ZXAsdCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImV4cGFuZGVkIGFycmF5IGxlbmd0aCBleGNlZWRzIHJhbmdlIGxpbWl0LiBVc2Ugb3B0aW9ucy5yYW5nZUxpbWl0IHRvIGluY3JlYXNlIG9yIGRpc2FibGUgdGhlIGxpbWl0LiIpO2xldCBwPWRFKC4uLmQsZSk7cC5sZW5ndGg9PT0wJiYocD1UbShuLGUpKSxvLnB1c2goR3Qoby5wb3AoKSxwKSksbi5ub2Rlcz1bXTtyZXR1cm59bGV0IGw9bXIuZW5jbG9zZUJyYWNlKG4pLGM9bi5xdWV1ZSxmPW47Zm9yKDtmLnR5cGUhPT0iYnJhY2UiJiZmLnR5cGUhPT0icm9vdCImJmYucGFyZW50OylmPWYucGFyZW50LGM9Zi5xdWV1ZTtmb3IobGV0IGQ9MDtkPG4ubm9kZXMubGVuZ3RoO2QrKyl7bGV0IHA9bi5ub2Rlc1tkXTtpZihwLnR5cGU9PT0iY29tbWEiJiZuLnR5cGU9PT0iYnJhY2UiKXtkPT09MSYmYy5wdXNoKCIiKSxjLnB1c2goIiIpO2NvbnRpbnVlfWlmKHAudHlwZT09PSJjbG9zZSIpe28ucHVzaChHdChvLnBvcCgpLGMsbCkpO2NvbnRpbnVlfWlmKHAudmFsdWUmJnAudHlwZSE9PSJvcGVuIil7Yy5wdXNoKEd0KGMucG9wKCkscC52YWx1ZSkpO2NvbnRpbnVlfXAubm9kZXMmJmkocCxuKX1yZXR1cm4gY307cmV0dXJuIG1yLmZsYXR0ZW4oaShyKSl9O1JtLmV4cG9ydHM9aEV9KTt2YXIgRG09eCgobjYsSW0pPT57dSgpOyJ1c2Ugc3RyaWN0IjtJbS5leHBvcnRzPXtNQVhfTEVOR1RIOjFlNCxDSEFSXzA6IjAiLENIQVJfOToiOSIsQ0hBUl9VUFBFUkNBU0VfQToiQSIsQ0hBUl9MT1dFUkNBU0VfQToiYSIsQ0hBUl9VUFBFUkNBU0VfWjoiWiIsQ0hBUl9MT1dFUkNBU0VfWjoieiIsQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiIoIixDSEFSX1JJR0hUX1BBUkVOVEhFU0VTOiIpIixDSEFSX0FTVEVSSVNLOiIqIixDSEFSX0FNUEVSU0FORDoiJiIsQ0hBUl9BVDoiQCIsQ0hBUl9CQUNLU0xBU0g6IlxcIixDSEFSX0JBQ0tUSUNLOiJgIixDSEFSX0NBUlJJQUdFX1JFVFVSTjoiXHIiLENIQVJfQ0lSQ1VNRkxFWF9BQ0NFTlQ6Il4iLENIQVJfQ09MT046IjoiLENIQVJfQ09NTUE6IiwiLENIQVJfRE9MTEFSOiIkIixDSEFSX0RPVDoiLiIsQ0hBUl9ET1VCTEVfUVVPVEU6JyInLENIQVJfRVFVQUw6Ij0iLENIQVJfRVhDTEFNQVRJT05fTUFSSzoiISIsQ0hBUl9GT1JNX0ZFRUQ6IlxmIixDSEFSX0ZPUldBUkRfU0xBU0g6Ii8iLENIQVJfSEFTSDoiIyIsQ0hBUl9IWVBIRU5fTUlOVVM6Ii0iLENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUOiI8IixDSEFSX0xFRlRfQ1VSTFlfQlJBQ0U6InsiLENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDoiWyIsQ0hBUl9MSU5FX0ZFRUQ6YApgLENIQVJfTk9fQlJFQUtfU1BBQ0U6Ilx4QTAiLENIQVJfUEVSQ0VOVDoiJSIsQ0hBUl9QTFVTOiIrIixDSEFSX1FVRVNUSU9OX01BUks6Ij8iLENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVDoiPiIsQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRToifSIsQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDoiXSIsQ0hBUl9TRU1JQ09MT046IjsiLENIQVJfU0lOR0xFX1FVT1RFOiInIixDSEFSX1NQQUNFOiIgIixDSEFSX1RBQjoiCSIsQ0hBUl9VTkRFUlNDT1JFOiJfIixDSEFSX1ZFUlRJQ0FMX0xJTkU6InwiLENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFOiJcdUZFRkYifX0pO3ZhciBObT14KChzNixNbSk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBtRT1ocygpLHtNQVhfTEVOR1RIOnFtLENIQVJfQkFDS1NMQVNIOmRsLENIQVJfQkFDS1RJQ0s6Z0UsQ0hBUl9DT01NQTp5RSxDSEFSX0RPVDpiRSxDSEFSX0xFRlRfUEFSRU5USEVTRVM6d0UsQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzp2RSxDSEFSX0xFRlRfQ1VSTFlfQlJBQ0U6eEUsQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRTprRSxDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQ6JG0sQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDpMbSxDSEFSX0RPVUJMRV9RVU9URTpTRSxDSEFSX1NJTkdMRV9RVU9URTpBRSxDSEFSX05PX0JSRUFLX1NQQUNFOkNFLENIQVJfWkVST19XSURUSF9OT0JSRUFLX1NQQUNFOl9FfT1EbSgpLEVFPShyLGU9e30pPT57aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7bGV0IHQ9ZXx8e30saT10eXBlb2YgdC5tYXhMZW5ndGg9PSJudW1iZXIiP01hdGgubWluKHFtLHQubWF4TGVuZ3RoKTpxbTtpZihyLmxlbmd0aD5pKXRocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoICgke3IubGVuZ3RofSksIGV4Y2VlZHMgbWF4IGNoYXJhY3RlcnMgKCR7aX0pYCk7bGV0IG49e3R5cGU6InJvb3QiLGlucHV0OnIsbm9kZXM6W119LHM9W25dLGE9bixvPW4sbD0wLGM9ci5sZW5ndGgsZj0wLGQ9MCxwLGg9KCk9PnJbZisrXSxiPXY9PntpZih2LnR5cGU9PT0idGV4dCImJm8udHlwZT09PSJkb3QiJiYoby50eXBlPSJ0ZXh0IiksbyYmby50eXBlPT09InRleHQiJiZ2LnR5cGU9PT0idGV4dCIpe28udmFsdWUrPXYudmFsdWU7cmV0dXJufXJldHVybiBhLm5vZGVzLnB1c2godiksdi5wYXJlbnQ9YSx2LnByZXY9byxvPXYsdn07Zm9yKGIoe3R5cGU6ImJvcyJ9KTtmPGM7KWlmKGE9c1tzLmxlbmd0aC0xXSxwPWgoKSwhKHA9PT1fRXx8cD09PUNFKSl7aWYocD09PWRsKXtiKHt0eXBlOiJ0ZXh0Iix2YWx1ZTooZS5rZWVwRXNjYXBpbmc/cDoiIikraCgpfSk7Y29udGludWV9aWYocD09PUxtKXtiKHt0eXBlOiJ0ZXh0Iix2YWx1ZToiXFwiK3B9KTtjb250aW51ZX1pZihwPT09JG0pe2wrKztsZXQgdjtmb3IoO2Y8YyYmKHY9aCgpKTspe2lmKHArPXYsdj09PSRtKXtsKys7Y29udGludWV9aWYodj09PWRsKXtwKz1oKCk7Y29udGludWV9aWYodj09PUxtJiYobC0tLGw9PT0wKSlicmVha31iKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpwfSk7Y29udGludWV9aWYocD09PXdFKXthPWIoe3R5cGU6InBhcmVuIixub2RlczpbXX0pLHMucHVzaChhKSxiKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpwfSk7Y29udGludWV9aWYocD09PXZFKXtpZihhLnR5cGUhPT0icGFyZW4iKXtiKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpwfSk7Y29udGludWV9YT1zLnBvcCgpLGIoe3R5cGU6InRleHQiLHZhbHVlOnB9KSxhPXNbcy5sZW5ndGgtMV07Y29udGludWV9aWYocD09PVNFfHxwPT09QUV8fHA9PT1nRSl7bGV0IHY9cCx5O2ZvcihlLmtlZXBRdW90ZXMhPT0hMCYmKHA9IiIpO2Y8YyYmKHk9aCgpKTspe2lmKHk9PT1kbCl7cCs9eStoKCk7Y29udGludWV9aWYoeT09PXYpe2Uua2VlcFF1b3Rlcz09PSEwJiYocCs9eSk7YnJlYWt9cCs9eX1iKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpwfSk7Y29udGludWV9aWYocD09PXhFKXtkKys7bGV0IHY9by52YWx1ZSYmby52YWx1ZS5zbGljZSgtMSk9PT0iJCJ8fGEuZG9sbGFyPT09ITA7YT1iKHt0eXBlOiJicmFjZSIsb3BlbjohMCxjbG9zZTohMSxkb2xsYXI6dixkZXB0aDpkLGNvbW1hczowLHJhbmdlczowLG5vZGVzOltdfSkscy5wdXNoKGEpLGIoe3R5cGU6Im9wZW4iLHZhbHVlOnB9KTtjb250aW51ZX1pZihwPT09a0Upe2lmKGEudHlwZSE9PSJicmFjZSIpe2Ioe3R5cGU6InRleHQiLHZhbHVlOnB9KTtjb250aW51ZX1sZXQgdj0iY2xvc2UiO2E9cy5wb3AoKSxhLmNsb3NlPSEwLGIoe3R5cGU6dix2YWx1ZTpwfSksZC0tLGE9c1tzLmxlbmd0aC0xXTtjb250aW51ZX1pZihwPT09eUUmJmQ+MCl7aWYoYS5yYW5nZXM+MCl7YS5yYW5nZXM9MDtsZXQgdj1hLm5vZGVzLnNoaWZ0KCk7YS5ub2Rlcz1bdix7dHlwZToidGV4dCIsdmFsdWU6bUUoYSl9XX1iKHt0eXBlOiJjb21tYSIsdmFsdWU6cH0pLGEuY29tbWFzKys7Y29udGludWV9aWYocD09PWJFJiZkPjAmJmEuY29tbWFzPT09MCl7bGV0IHY9YS5ub2RlcztpZihkPT09MHx8di5sZW5ndGg9PT0wKXtiKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpwfSk7Y29udGludWV9aWYoby50eXBlPT09ImRvdCIpe2lmKGEucmFuZ2U9W10sby52YWx1ZSs9cCxvLnR5cGU9InJhbmdlIixhLm5vZGVzLmxlbmd0aCE9PTMmJmEubm9kZXMubGVuZ3RoIT09NSl7YS5pbnZhbGlkPSEwLGEucmFuZ2VzPTAsby50eXBlPSJ0ZXh0Ijtjb250aW51ZX1hLnJhbmdlcysrLGEuYXJncz1bXTtjb250aW51ZX1pZihvLnR5cGU9PT0icmFuZ2UiKXt2LnBvcCgpO2xldCB5PXZbdi5sZW5ndGgtMV07eS52YWx1ZSs9by52YWx1ZStwLG89eSxhLnJhbmdlcy0tO2NvbnRpbnVlfWIoe3R5cGU6ImRvdCIsdmFsdWU6cH0pO2NvbnRpbnVlfWIoe3R5cGU6InRleHQiLHZhbHVlOnB9KX1kbyBpZihhPXMucG9wKCksYS50eXBlIT09InJvb3QiKXthLm5vZGVzLmZvckVhY2godz0+e3cubm9kZXN8fCh3LnR5cGU9PT0ib3BlbiImJih3LmlzT3Blbj0hMCksdy50eXBlPT09ImNsb3NlIiYmKHcuaXNDbG9zZT0hMCksdy5ub2Rlc3x8KHcudHlwZT0idGV4dCIpLHcuaW52YWxpZD0hMCl9KTtsZXQgdj1zW3MubGVuZ3RoLTFdLHk9di5ub2Rlcy5pbmRleE9mKGEpO3Yubm9kZXMuc3BsaWNlKHksMSwuLi5hLm5vZGVzKX13aGlsZShzLmxlbmd0aD4wKTtyZXR1cm4gYih7dHlwZToiZW9zIn0pLG59O01tLmV4cG9ydHM9RUV9KTt2YXIgam09eCgoYTYsRm0pPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgQm09aHMoKSxPRT1PbSgpLFRFPVBtKCksUkU9Tm0oKSxMZT0ocixlPXt9KT0+e2xldCB0PVtdO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBpIG9mIHIpe2xldCBuPUxlLmNyZWF0ZShpLGUpO0FycmF5LmlzQXJyYXkobik/dC5wdXNoKC4uLm4pOnQucHVzaChuKX1lbHNlIHQ9W10uY29uY2F0KExlLmNyZWF0ZShyLGUpKTtyZXR1cm4gZSYmZS5leHBhbmQ9PT0hMCYmZS5ub2R1cGVzPT09ITAmJih0PVsuLi5uZXcgU2V0KHQpXSksdH07TGUucGFyc2U9KHIsZT17fSk9PlJFKHIsZSk7TGUuc3RyaW5naWZ5PShyLGU9e30pPT50eXBlb2Ygcj09InN0cmluZyI/Qm0oTGUucGFyc2UocixlKSxlKTpCbShyLGUpO0xlLmNvbXBpbGU9KHIsZT17fSk9Pih0eXBlb2Ygcj09InN0cmluZyImJihyPUxlLnBhcnNlKHIsZSkpLE9FKHIsZSkpO0xlLmV4cGFuZD0ocixlPXt9KT0+e3R5cGVvZiByPT0ic3RyaW5nIiYmKHI9TGUucGFyc2UocixlKSk7bGV0IHQ9VEUocixlKTtyZXR1cm4gZS5ub2VtcHR5PT09ITAmJih0PXQuZmlsdGVyKEJvb2xlYW4pKSxlLm5vZHVwZXM9PT0hMCYmKHQ9Wy4uLm5ldyBTZXQodCldKSx0fTtMZS5jcmVhdGU9KHIsZT17fSk9PnI9PT0iInx8ci5sZW5ndGg8Mz9bcl06ZS5leHBhbmQhPT0hMD9MZS5jb21waWxlKHIsZSk6TGUuZXhwYW5kKHIsZSk7Rm0uZXhwb3J0cz1MZX0pO3ZhciBEaT14KChvNixXbSk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBQRT0oZXQoKSxVciksYXQ9IlxcXFwvIix6bT1gW14ke2F0fV1gLHl0PSJcXC4iLElFPSJcXCsiLERFPSJcXD8iLHlzPSJcXC8iLHFFPSIoPz0uKSIsVW09IlteL10iLGhsPWAoPzoke3lzfXwkKWAsVm09YCg/Ol58JHt5c30pYCxtbD1gJHt5dH17MSwyfSR7aGx9YCwkRT1gKD8hJHt5dH0pYCxMRT1gKD8hJHtWbX0ke21sfSlgLE1FPWAoPyEke3l0fXswLDF9JHtobH0pYCxORT1gKD8hJHttbH0pYCxCRT1gW14uJHt5c31dYCxGRT1gJHtVbX0qP2AsSG09e0RPVF9MSVRFUkFMOnl0LFBMVVNfTElURVJBTDpJRSxRTUFSS19MSVRFUkFMOkRFLFNMQVNIX0xJVEVSQUw6eXMsT05FX0NIQVI6cUUsUU1BUks6VW0sRU5EX0FOQ0hPUjpobCxET1RTX1NMQVNIOm1sLE5PX0RPVDokRSxOT19ET1RTOkxFLE5PX0RPVF9TTEFTSDpNRSxOT19ET1RTX1NMQVNIOk5FLFFNQVJLX05PX0RPVDpCRSxTVEFSOkZFLFNUQVJUX0FOQ0hPUjpWbX0sakU9ey4uLkhtLFNMQVNIX0xJVEVSQUw6YFske2F0fV1gLFFNQVJLOnptLFNUQVI6YCR7em19Kj9gLERPVFNfU0xBU0g6YCR7eXR9ezEsMn0oPzpbJHthdH1dfCQpYCxOT19ET1Q6YCg/ISR7eXR9KWAsTk9fRE9UUzpgKD8hKD86XnxbJHthdH1dKSR7eXR9ezEsMn0oPzpbJHthdH1dfCQpKWAsTk9fRE9UX1NMQVNIOmAoPyEke3l0fXswLDF9KD86WyR7YXR9XXwkKSlgLE5PX0RPVFNfU0xBU0g6YCg/ISR7eXR9ezEsMn0oPzpbJHthdH1dfCQpKWAsUU1BUktfTk9fRE9UOmBbXi4ke2F0fV1gLFNUQVJUX0FOQ0hPUjpgKD86XnxbJHthdH1dKWAsRU5EX0FOQ0hPUjpgKD86WyR7YXR9XXwkKWB9LHpFPXthbG51bToiYS16QS1aMC05IixhbHBoYToiYS16QS1aIixhc2NpaToiXFx4MDAtXFx4N0YiLGJsYW5rOiIgXFx0IixjbnRybDoiXFx4MDAtXFx4MUZcXHg3RiIsZGlnaXQ6IjAtOSIsZ3JhcGg6IlxceDIxLVxceDdFIixsb3dlcjoiYS16IixwcmludDoiXFx4MjAtXFx4N0UgIixwdW5jdDoiXFwtIVwiIyQlJicoKVxcKissLi86Ozw9Pj9AW1xcXV5fYHt8fX4iLHNwYWNlOiIgXFx0XFxyXFxuXFx2XFxmIix1cHBlcjoiQS1aIix3b3JkOiJBLVphLXowLTlfIix4ZGlnaXQ6IkEtRmEtZjAtOSJ9O1dtLmV4cG9ydHM9e01BWF9MRU5HVEg6MTAyNCo2NCxQT1NJWF9SRUdFWF9TT1VSQ0U6ekUsUkVHRVhfQkFDS1NMQVNIOi9cXCg/IVsqKz9eJHt9KHwpW1xdXSkvZyxSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUzovXlteQCFbXF0uLCQqKz9ee30oKXxcXC9dKy8sUkVHRVhfU1BFQ0lBTF9DSEFSUzovWy0qKz8uXiR7fSh8KVtcXV0vLFJFR0VYX1NQRUNJQUxfQ0hBUlNfQkFDS1JFRjovKFxcPykoKFxXKShcMyopKS9nLFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMOi8oWy0qKz8uXiR7fSh8KVtcXV0pL2csUkVHRVhfUkVNT1ZFX0JBQ0tTTEFTSDovKD86XFsuKj9bXlxcXVxdfFxcKD89LikpL2csUkVQTEFDRU1FTlRTOnsiKioqIjoiKiIsIioqLyoqIjoiKioiLCIqKi8qKi8qKiI6IioqIn0sQ0hBUl8wOjQ4LENIQVJfOTo1NyxDSEFSX1VQUEVSQ0FTRV9BOjY1LENIQVJfTE9XRVJDQVNFX0E6OTcsQ0hBUl9VUFBFUkNBU0VfWjo5MCxDSEFSX0xPV0VSQ0FTRV9aOjEyMixDSEFSX0xFRlRfUEFSRU5USEVTRVM6NDAsQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzo0MSxDSEFSX0FTVEVSSVNLOjQyLENIQVJfQU1QRVJTQU5EOjM4LENIQVJfQVQ6NjQsQ0hBUl9CQUNLV0FSRF9TTEFTSDo5MixDSEFSX0NBUlJJQUdFX1JFVFVSTjoxMyxDSEFSX0NJUkNVTUZMRVhfQUNDRU5UOjk0LENIQVJfQ09MT046NTgsQ0hBUl9DT01NQTo0NCxDSEFSX0RPVDo0NixDSEFSX0RPVUJMRV9RVU9URTozNCxDSEFSX0VRVUFMOjYxLENIQVJfRVhDTEFNQVRJT05fTUFSSzozMyxDSEFSX0ZPUk1fRkVFRDoxMixDSEFSX0ZPUldBUkRfU0xBU0g6NDcsQ0hBUl9HUkFWRV9BQ0NFTlQ6OTYsQ0hBUl9IQVNIOjM1LENIQVJfSFlQSEVOX01JTlVTOjQ1LENIQVJfTEVGVF9BTkdMRV9CUkFDS0VUOjYwLENIQVJfTEVGVF9DVVJMWV9CUkFDRToxMjMsQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOjkxLENIQVJfTElORV9GRUVEOjEwLENIQVJfTk9fQlJFQUtfU1BBQ0U6MTYwLENIQVJfUEVSQ0VOVDozNyxDSEFSX1BMVVM6NDMsQ0hBUl9RVUVTVElPTl9NQVJLOjYzLENIQVJfUklHSFRfQU5HTEVfQlJBQ0tFVDo2MixDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOjEyNSxDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUOjkzLENIQVJfU0VNSUNPTE9OOjU5LENIQVJfU0lOR0xFX1FVT1RFOjM5LENIQVJfU1BBQ0U6MzIsQ0hBUl9UQUI6OSxDSEFSX1VOREVSU0NPUkU6OTUsQ0hBUl9WRVJUSUNBTF9MSU5FOjEyNCxDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRTo2NTI3OSxTRVA6UEUuc2VwLGV4dGdsb2JDaGFycyhyKXtyZXR1cm57IiEiOnt0eXBlOiJuZWdhdGUiLG9wZW46Iig/Oig/ISg/OiIsY2xvc2U6YCkpJHtyLlNUQVJ9KWB9LCI/Ijp7dHlwZToicW1hcmsiLG9wZW46Iig/OiIsY2xvc2U6Iik/In0sIisiOnt0eXBlOiJwbHVzIixvcGVuOiIoPzoiLGNsb3NlOiIpKyJ9LCIqIjp7dHlwZToic3RhciIsb3BlbjoiKD86IixjbG9zZToiKSoifSwiQCI6e3R5cGU6ImF0IixvcGVuOiIoPzoiLGNsb3NlOiIpIn19fSxnbG9iQ2hhcnMocil7cmV0dXJuIHI9PT0hMD9qRTpIbX19fSk7dmFyIHFpPXgoUmU9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBVRT0oZXQoKSxVciksVkU9bS5wbGF0Zm9ybT09PSJ3aW4zMiIse1JFR0VYX0JBQ0tTTEFTSDpIRSxSRUdFWF9SRU1PVkVfQkFDS1NMQVNIOldFLFJFR0VYX1NQRUNJQUxfQ0hBUlM6R0UsUkVHRVhfU1BFQ0lBTF9DSEFSU19HTE9CQUw6UUV9PURpKCk7UmUuaXNPYmplY3Q9cj0+ciE9PW51bGwmJnR5cGVvZiByPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkocik7UmUuaGFzUmVnZXhDaGFycz1yPT5HRS50ZXN0KHIpO1JlLmlzUmVnZXhDaGFyPXI9PnIubGVuZ3RoPT09MSYmUmUuaGFzUmVnZXhDaGFycyhyKTtSZS5lc2NhcGVSZWdleD1yPT5yLnJlcGxhY2UoUUUsIlxcJDEiKTtSZS50b1Bvc2l4U2xhc2hlcz1yPT5yLnJlcGxhY2UoSEUsIi8iKTtSZS5yZW1vdmVCYWNrc2xhc2hlcz1yPT5yLnJlcGxhY2UoV0UsZT0+ZT09PSJcXCI/IiI6ZSk7UmUuc3VwcG9ydHNMb29rYmVoaW5kcz0oKT0+e2xldCByPW0udmVyc2lvbi5zbGljZSgxKS5zcGxpdCgiLiIpLm1hcChOdW1iZXIpO3JldHVybiByLmxlbmd0aD09PTMmJnJbMF0+PTl8fHJbMF09PT04JiZyWzFdPj0xMH07UmUuaXNXaW5kb3dzPXI9PnImJnR5cGVvZiByLndpbmRvd3M9PSJib29sZWFuIj9yLndpbmRvd3M6VkU9PT0hMHx8VUUuc2VwPT09IlxcIjtSZS5lc2NhcGVMYXN0PShyLGUsdCk9PntsZXQgaT1yLmxhc3RJbmRleE9mKGUsdCk7cmV0dXJuIGk9PT0tMT9yOnJbaS0xXT09PSJcXCI/UmUuZXNjYXBlTGFzdChyLGUsaS0xKTpgJHtyLnNsaWNlKDAsaSl9XFwke3Iuc2xpY2UoaSl9YH07UmUucmVtb3ZlUHJlZml4PShyLGU9e30pPT57bGV0IHQ9cjtyZXR1cm4gdC5zdGFydHNXaXRoKCIuLyIpJiYodD10LnNsaWNlKDIpLGUucHJlZml4PSIuLyIpLHR9O1JlLndyYXBPdXRwdXQ9KHIsZT17fSx0PXt9KT0+e2xldCBpPXQuY29udGFpbnM/IiI6Il4iLG49dC5jb250YWlucz8iIjoiJCIscz1gJHtpfSg/OiR7cn0pJHtufWA7cmV0dXJuIGUubmVnYXRlZD09PSEwJiYocz1gKD86Xig/ISR7c30pLiokKWApLHN9fSk7dmFyIGVnPXgoKHU2LEptKT0+e3UoKTsidXNlIHN0cmljdCI7dmFyIEdtPXFpKCkse0NIQVJfQVNURVJJU0s6Z2wsQ0hBUl9BVDpZRSxDSEFSX0JBQ0tXQVJEX1NMQVNIOiRpLENIQVJfQ09NTUE6S0UsQ0hBUl9ET1Q6eWwsQ0hBUl9FWENMQU1BVElPTl9NQVJLOmJsLENIQVJfRk9SV0FSRF9TTEFTSDpRbSxDSEFSX0xFRlRfQ1VSTFlfQlJBQ0U6d2wsQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOnZsLENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDpYRSxDSEFSX1BMVVM6WkUsQ0hBUl9RVUVTVElPTl9NQVJLOlltLENIQVJfUklHSFRfQ1VSTFlfQlJBQ0U6SkUsQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUzpLbSxDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUOmUyfT1EaSgpLFhtPXI9PnI9PT1RbXx8cj09PSRpLFptPXI9PntyLmlzUHJlZml4IT09ITAmJihyLmRlcHRoPXIuaXNHbG9ic3Rhcj8xLzA6MSl9LHQyPShyLGUpPT57bGV0IHQ9ZXx8e30saT1yLmxlbmd0aC0xLG49dC5wYXJ0cz09PSEwfHx0LnNjYW5Ub0VuZD09PSEwLHM9W10sYT1bXSxvPVtdLGw9cixjPS0xLGY9MCxkPTAscD0hMSxoPSExLGI9ITEsdj0hMSx5PSExLHc9ITEsaz0hMSxTPSExLEU9ITEsVD0hMSxCPTAsTixSLEY9e3ZhbHVlOiIiLGRlcHRoOjAsaXNHbG9iOiExfSxZPSgpPT5jPj1pLF89KCk9PmwuY2hhckNvZGVBdChjKzEpLFE9KCk9PihOPVIsbC5jaGFyQ29kZUF0KCsrYykpO2Zvcig7YzxpOyl7Uj1RKCk7bGV0IGhlO2lmKFI9PT0kaSl7az1GLmJhY2tzbGFzaGVzPSEwLFI9USgpLFI9PT13bCYmKHc9ITApO2NvbnRpbnVlfWlmKHc9PT0hMHx8Uj09PXdsKXtmb3IoQisrO1koKSE9PSEwJiYoUj1RKCkpOyl7aWYoUj09PSRpKXtrPUYuYmFja3NsYXNoZXM9ITAsUSgpO2NvbnRpbnVlfWlmKFI9PT13bCl7QisrO2NvbnRpbnVlfWlmKHchPT0hMCYmUj09PXlsJiYoUj1RKCkpPT09eWwpe2lmKHA9Ri5pc0JyYWNlPSEwLGI9Ri5pc0dsb2I9ITAsVD0hMCxuPT09ITApY29udGludWU7YnJlYWt9aWYodyE9PSEwJiZSPT09S0Upe2lmKHA9Ri5pc0JyYWNlPSEwLGI9Ri5pc0dsb2I9ITAsVD0hMCxuPT09ITApY29udGludWU7YnJlYWt9aWYoUj09PUpFJiYoQi0tLEI9PT0wKSl7dz0hMSxwPUYuaXNCcmFjZT0hMCxUPSEwO2JyZWFrfX1pZihuPT09ITApY29udGludWU7YnJlYWt9aWYoUj09PVFtKXtpZihzLnB1c2goYyksYS5wdXNoKEYpLEY9e3ZhbHVlOiIiLGRlcHRoOjAsaXNHbG9iOiExfSxUPT09ITApY29udGludWU7aWYoTj09PXlsJiZjPT09ZisxKXtmKz0yO2NvbnRpbnVlfWQ9YysxO2NvbnRpbnVlfWlmKHQubm9leHQhPT0hMCYmKFI9PT1aRXx8Uj09PVlFfHxSPT09Z2x8fFI9PT1ZbXx8Uj09PWJsKT09PSEwJiZfKCk9PT12bCl7aWYoYj1GLmlzR2xvYj0hMCx2PUYuaXNFeHRnbG9iPSEwLFQ9ITAsUj09PWJsJiZjPT09ZiYmKEU9ITApLG49PT0hMCl7Zm9yKDtZKCkhPT0hMCYmKFI9USgpKTspe2lmKFI9PT0kaSl7az1GLmJhY2tzbGFzaGVzPSEwLFI9USgpO2NvbnRpbnVlfWlmKFI9PT1LbSl7Yj1GLmlzR2xvYj0hMCxUPSEwO2JyZWFrfX1jb250aW51ZX1icmVha31pZihSPT09Z2wpe2lmKE49PT1nbCYmKHk9Ri5pc0dsb2JzdGFyPSEwKSxiPUYuaXNHbG9iPSEwLFQ9ITAsbj09PSEwKWNvbnRpbnVlO2JyZWFrfWlmKFI9PT1ZbSl7aWYoYj1GLmlzR2xvYj0hMCxUPSEwLG49PT0hMCljb250aW51ZTticmVha31pZihSPT09WEUpe2Zvcig7WSgpIT09ITAmJihoZT1RKCkpOyl7aWYoaGU9PT0kaSl7az1GLmJhY2tzbGFzaGVzPSEwLFEoKTtjb250aW51ZX1pZihoZT09PWUyKXtoPUYuaXNCcmFja2V0PSEwLGI9Ri5pc0dsb2I9ITAsVD0hMDticmVha319aWYobj09PSEwKWNvbnRpbnVlO2JyZWFrfWlmKHQubm9uZWdhdGUhPT0hMCYmUj09PWJsJiZjPT09Zil7Uz1GLm5lZ2F0ZWQ9ITAsZisrO2NvbnRpbnVlfWlmKHQubm9wYXJlbiE9PSEwJiZSPT09dmwpe2lmKGI9Ri5pc0dsb2I9ITAsbj09PSEwKXtmb3IoO1koKSE9PSEwJiYoUj1RKCkpOyl7aWYoUj09PXZsKXtrPUYuYmFja3NsYXNoZXM9ITAsUj1RKCk7Y29udGludWV9aWYoUj09PUttKXtUPSEwO2JyZWFrfX1jb250aW51ZX1icmVha31pZihiPT09ITApe2lmKFQ9ITAsbj09PSEwKWNvbnRpbnVlO2JyZWFrfX10Lm5vZXh0PT09ITAmJih2PSExLGI9ITEpO2xldCBVPWwsbGU9IiIsQT0iIjtmPjAmJihsZT1sLnNsaWNlKDAsZiksbD1sLnNsaWNlKGYpLGQtPWYpLFUmJmI9PT0hMCYmZD4wPyhVPWwuc2xpY2UoMCxkKSxBPWwuc2xpY2UoZCkpOmI9PT0hMD8oVT0iIixBPWwpOlU9bCxVJiZVIT09IiImJlUhPT0iLyImJlUhPT1sJiZYbShVLmNoYXJDb2RlQXQoVS5sZW5ndGgtMSkpJiYoVT1VLnNsaWNlKDAsLTEpKSx0LnVuZXNjYXBlPT09ITAmJihBJiYoQT1HbS5yZW1vdmVCYWNrc2xhc2hlcyhBKSksVSYmaz09PSEwJiYoVT1HbS5yZW1vdmVCYWNrc2xhc2hlcyhVKSkpO2xldCBDPXtwcmVmaXg6bGUsaW5wdXQ6cixzdGFydDpmLGJhc2U6VSxnbG9iOkEsaXNCcmFjZTpwLGlzQnJhY2tldDpoLGlzR2xvYjpiLGlzRXh0Z2xvYjp2LGlzR2xvYnN0YXI6eSxuZWdhdGVkOlMsbmVnYXRlZEV4dGdsb2I6RX07aWYodC50b2tlbnM9PT0hMCYmKEMubWF4RGVwdGg9MCxYbShSKXx8YS5wdXNoKEYpLEMudG9rZW5zPWEpLHQucGFydHM9PT0hMHx8dC50b2tlbnM9PT0hMCl7bGV0IGhlO2ZvcihsZXQgVj0wO1Y8cy5sZW5ndGg7VisrKXtsZXQgRWU9aGU/aGUrMTpmLEllPXNbVl0sRGU9ci5zbGljZShFZSxJZSk7dC50b2tlbnMmJihWPT09MCYmZiE9PTA/KGFbVl0uaXNQcmVmaXg9ITAsYVtWXS52YWx1ZT1sZSk6YVtWXS52YWx1ZT1EZSxabShhW1ZdKSxDLm1heERlcHRoKz1hW1ZdLmRlcHRoKSwoViE9PTB8fERlIT09IiIpJiZvLnB1c2goRGUpLGhlPUllfWlmKGhlJiZoZSsxPHIubGVuZ3RoKXtsZXQgVj1yLnNsaWNlKGhlKzEpO28ucHVzaChWKSx0LnRva2VucyYmKGFbYS5sZW5ndGgtMV0udmFsdWU9VixabShhW2EubGVuZ3RoLTFdKSxDLm1heERlcHRoKz1hW2EubGVuZ3RoLTFdLmRlcHRoKX1DLnNsYXNoZXM9cyxDLnBhcnRzPW99cmV0dXJuIEN9O0ptLmV4cG9ydHM9dDJ9KTt2YXIgaWc9eCgoZjYscmcpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgYnM9RGkoKSxNZT1xaSgpLHtNQVhfTEVOR1RIOndzLFBPU0lYX1JFR0VYX1NPVVJDRTpyMixSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUzppMixSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUY6bjIsUkVQTEFDRU1FTlRTOnRnfT1icyxzMj0ocixlKT0+e2lmKHR5cGVvZiBlLmV4cGFuZFJhbmdlPT0iZnVuY3Rpb24iKXJldHVybiBlLmV4cGFuZFJhbmdlKC4uLnIsZSk7ci5zb3J0KCk7bGV0IHQ9YFske3Iuam9pbigiLSIpfV1gO3RyeXtuZXcgUmVnRXhwKHQpfWNhdGNoKGkpe3JldHVybiByLm1hcChuPT5NZS5lc2NhcGVSZWdleChuKSkuam9pbigiLi4iKX1yZXR1cm4gdH0sZ3I9KHIsZSk9PmBNaXNzaW5nICR7cn06ICIke2V9IiAtIHVzZSAiXFxcXCR7ZX0iIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc2AseGw9KHIsZSk9PntpZih0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtyPXRnW3JdfHxyO2xldCB0PXsuLi5lfSxpPXR5cGVvZiB0Lm1heExlbmd0aD09Im51bWJlciI/TWF0aC5taW4od3MsdC5tYXhMZW5ndGgpOndzLG49ci5sZW5ndGg7aWYobj5pKXRocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoOiAke259LCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBsZW5ndGg6ICR7aX1gKTtsZXQgcz17dHlwZToiYm9zIix2YWx1ZToiIixvdXRwdXQ6dC5wcmVwZW5kfHwiIn0sYT1bc10sbz10LmNhcHR1cmU/IiI6Ij86IixsPU1lLmlzV2luZG93cyhlKSxjPWJzLmdsb2JDaGFycyhsKSxmPWJzLmV4dGdsb2JDaGFycyhjKSx7RE9UX0xJVEVSQUw6ZCxQTFVTX0xJVEVSQUw6cCxTTEFTSF9MSVRFUkFMOmgsT05FX0NIQVI6YixET1RTX1NMQVNIOnYsTk9fRE9UOnksTk9fRE9UX1NMQVNIOncsTk9fRE9UU19TTEFTSDprLFFNQVJLOlMsUU1BUktfTk9fRE9UOkUsU1RBUjpULFNUQVJUX0FOQ0hPUjpCfT1jLE49JD0+YCgke299KD86KD8hJHtCfSR7JC5kb3Q/djpkfSkuKSo/KWAsUj10LmRvdD8iIjp5LEY9dC5kb3Q/UzpFLFk9dC5iYXNoPT09ITA/Tih0KTpUO3QuY2FwdHVyZSYmKFk9YCgke1l9KWApLHR5cGVvZiB0Lm5vZXh0PT0iYm9vbGVhbiImJih0Lm5vZXh0Z2xvYj10Lm5vZXh0KTtsZXQgXz17aW5wdXQ6cixpbmRleDotMSxzdGFydDowLGRvdDp0LmRvdD09PSEwLGNvbnN1bWVkOiIiLG91dHB1dDoiIixwcmVmaXg6IiIsYmFja3RyYWNrOiExLG5lZ2F0ZWQ6ITEsYnJhY2tldHM6MCxicmFjZXM6MCxwYXJlbnM6MCxxdW90ZXM6MCxnbG9ic3RhcjohMSx0b2tlbnM6YX07cj1NZS5yZW1vdmVQcmVmaXgocixfKSxuPXIubGVuZ3RoO2xldCBRPVtdLFU9W10sbGU9W10sQT1zLEMsaGU9KCk9Pl8uaW5kZXg9PT1uLTEsVj1fLnBlZWs9KCQ9MSk9PnJbXy5pbmRleCskXSxFZT1fLmFkdmFuY2U9KCk9PnJbKytfLmluZGV4XXx8IiIsSWU9KCk9PnIuc2xpY2UoXy5pbmRleCsxKSxEZT0oJD0iIixhZT0wKT0+e18uY29uc3VtZWQrPSQsXy5pbmRleCs9YWV9LGppPSQ9PntfLm91dHB1dCs9JC5vdXRwdXQhPW51bGw/JC5vdXRwdXQ6JC52YWx1ZSxEZSgkLnZhbHVlKX0sSXY9KCk9PntsZXQgJD0xO2Zvcig7VigpPT09IiEiJiYoVigyKSE9PSIoInx8VigzKT09PSI/Iik7KUVlKCksXy5zdGFydCsrLCQrKztyZXR1cm4gJCUyPT0wPyExOihfLm5lZ2F0ZWQ9ITAsXy5zdGFydCsrLCEwKX0semk9JD0+e19bJF0rKyxsZS5wdXNoKCQpfSxGdD0kPT57X1skXS0tLGxlLnBvcCgpfSxXPSQ9PntpZihBLnR5cGU9PT0iZ2xvYnN0YXIiKXtsZXQgYWU9Xy5icmFjZXM+MCYmKCQudHlwZT09PSJjb21tYSJ8fCQudHlwZT09PSJicmFjZSIpLEk9JC5leHRnbG9iPT09ITB8fFEubGVuZ3RoJiYoJC50eXBlPT09InBpcGUifHwkLnR5cGU9PT0icGFyZW4iKTskLnR5cGUhPT0ic2xhc2giJiYkLnR5cGUhPT0icGFyZW4iJiYhYWUmJiFJJiYoXy5vdXRwdXQ9Xy5vdXRwdXQuc2xpY2UoMCwtQS5vdXRwdXQubGVuZ3RoKSxBLnR5cGU9InN0YXIiLEEudmFsdWU9IioiLEEub3V0cHV0PVksXy5vdXRwdXQrPUEub3V0cHV0KX1pZihRLmxlbmd0aCYmJC50eXBlIT09InBhcmVuIiYmKFFbUS5sZW5ndGgtMV0uaW5uZXIrPSQudmFsdWUpLCgkLnZhbHVlfHwkLm91dHB1dCkmJmppKCQpLEEmJkEudHlwZT09PSJ0ZXh0IiYmJC50eXBlPT09InRleHQiKXtBLnZhbHVlKz0kLnZhbHVlLEEub3V0cHV0PShBLm91dHB1dHx8IiIpKyQudmFsdWU7cmV0dXJufSQucHJldj1BLGEucHVzaCgkKSxBPSR9LFVpPSgkLGFlKT0+e2xldCBJPXsuLi5mW2FlXSxjb25kaXRpb25zOjEsaW5uZXI6IiJ9O0kucHJldj1BLEkucGFyZW5zPV8ucGFyZW5zLEkub3V0cHV0PV8ub3V0cHV0O2xldCBIPSh0LmNhcHR1cmU/IigiOiIiKStJLm9wZW47emkoInBhcmVucyIpLFcoe3R5cGU6JCx2YWx1ZTphZSxvdXRwdXQ6Xy5vdXRwdXQ/IiI6Yn0pLFcoe3R5cGU6InBhcmVuIixleHRnbG9iOiEwLHZhbHVlOkVlKCksb3V0cHV0Okh9KSxRLnB1c2goSSl9LER2PSQ9PntsZXQgYWU9JC5jbG9zZSsodC5jYXB0dXJlPyIpIjoiIiksSTtpZigkLnR5cGU9PT0ibmVnYXRlIil7bGV0IEg9WTtpZigkLmlubmVyJiYkLmlubmVyLmxlbmd0aD4xJiYkLmlubmVyLmluY2x1ZGVzKCIvIikmJihIPU4odCkpLChIIT09WXx8aGUoKXx8L15cKSskLy50ZXN0KEllKCkpKSYmKGFlPSQuY2xvc2U9YCkkKSkke0h9YCksJC5pbm5lci5pbmNsdWRlcygiKiIpJiYoST1JZSgpKSYmL15cLlteXFwvLl0rJC8udGVzdChJKSl7bGV0IGNlPXhsKEksey4uLmUsZmFzdHBhdGhzOiExfSkub3V0cHV0O2FlPSQuY2xvc2U9YCkke2NlfSkke0h9KWB9JC5wcmV2LnR5cGU9PT0iYm9zIiYmKF8ubmVnYXRlZEV4dGdsb2I9ITApfVcoe3R5cGU6InBhcmVuIixleHRnbG9iOiEwLHZhbHVlOkMsb3V0cHV0OmFlfSksRnQoInBhcmVucyIpfTtpZih0LmZhc3RwYXRocyE9PSExJiYhLyheWyohXXxbLygpW1xde30iXSkvLnRlc3Qocikpe2xldCAkPSExLGFlPXIucmVwbGFjZShuMiwoSSxILGNlLENlLHllLEJzKT0+Q2U9PT0iXFwiPygkPSEwLEkpOkNlPT09Ij8iP0g/SCtDZSsoeWU/Uy5yZXBlYXQoeWUubGVuZ3RoKToiIik6QnM9PT0wP0YrKHllP1MucmVwZWF0KHllLmxlbmd0aCk6IiIpOlMucmVwZWF0KGNlLmxlbmd0aCk6Q2U9PT0iLiI/ZC5yZXBlYXQoY2UubGVuZ3RoKTpDZT09PSIqIj9IP0grQ2UrKHllP1k6IiIpOlk6SD9JOmBcXCR7SX1gKTtyZXR1cm4gJD09PSEwJiYodC51bmVzY2FwZT09PSEwP2FlPWFlLnJlcGxhY2UoL1xcL2csIiIpOmFlPWFlLnJlcGxhY2UoL1xcKy9nLEk9PkkubGVuZ3RoJTI9PTA/IlxcXFwiOkk/IlxcIjoiIikpLGFlPT09ciYmdC5jb250YWlucz09PSEwPyhfLm91dHB1dD1yLF8pOihfLm91dHB1dD1NZS53cmFwT3V0cHV0KGFlLF8sZSksXyl9Zm9yKDshaGUoKTspe2lmKEM9RWUoKSxDPT09IlwwIiljb250aW51ZTtpZihDPT09IlxcIil7bGV0IEk9VigpO2lmKEk9PT0iLyImJnQuYmFzaCE9PSEwfHxJPT09Ii4ifHxJPT09IjsiKWNvbnRpbnVlO2lmKCFJKXtDKz0iXFwiLFcoe3R5cGU6InRleHQiLHZhbHVlOkN9KTtjb250aW51ZX1sZXQgSD0vXlxcKy8uZXhlYyhJZSgpKSxjZT0wO2lmKEgmJkhbMF0ubGVuZ3RoPjImJihjZT1IWzBdLmxlbmd0aCxfLmluZGV4Kz1jZSxjZSUyIT0wJiYoQys9IlxcIikpLHQudW5lc2NhcGU9PT0hMD9DPUVlKCk6Qys9RWUoKSxfLmJyYWNrZXRzPT09MCl7Vyh7dHlwZToidGV4dCIsdmFsdWU6Q30pO2NvbnRpbnVlfX1pZihfLmJyYWNrZXRzPjAmJihDIT09Il0ifHxBLnZhbHVlPT09IlsifHxBLnZhbHVlPT09IlteIikpe2lmKHQucG9zaXghPT0hMSYmQz09PSI6Iil7bGV0IEk9QS52YWx1ZS5zbGljZSgxKTtpZihJLmluY2x1ZGVzKCJbIikmJihBLnBvc2l4PSEwLEkuaW5jbHVkZXMoIjoiKSkpe2xldCBIPUEudmFsdWUubGFzdEluZGV4T2YoIlsiKSxjZT1BLnZhbHVlLnNsaWNlKDAsSCksQ2U9QS52YWx1ZS5zbGljZShIKzIpLHllPXIyW0NlXTtpZih5ZSl7QS52YWx1ZT1jZSt5ZSxfLmJhY2t0cmFjaz0hMCxFZSgpLCFzLm91dHB1dCYmYS5pbmRleE9mKEEpPT09MSYmKHMub3V0cHV0PWIpO2NvbnRpbnVlfX19KEM9PT0iWyImJlYoKSE9PSI6Inx8Qz09PSItIiYmVigpPT09Il0iKSYmKEM9YFxcJHtDfWApLEM9PT0iXSImJihBLnZhbHVlPT09IlsifHxBLnZhbHVlPT09IlteIikmJihDPWBcXCR7Q31gKSx0LnBvc2l4PT09ITAmJkM9PT0iISImJkEudmFsdWU9PT0iWyImJihDPSJeIiksQS52YWx1ZSs9QyxqaSh7dmFsdWU6Q30pO2NvbnRpbnVlfWlmKF8ucXVvdGVzPT09MSYmQyE9PSciJyl7Qz1NZS5lc2NhcGVSZWdleChDKSxBLnZhbHVlKz1DLGppKHt2YWx1ZTpDfSk7Y29udGludWV9aWYoQz09PSciJyl7Xy5xdW90ZXM9Xy5xdW90ZXM9PT0xPzA6MSx0LmtlZXBRdW90ZXM9PT0hMCYmVyh7dHlwZToidGV4dCIsdmFsdWU6Q30pO2NvbnRpbnVlfWlmKEM9PT0iKCIpe3ppKCJwYXJlbnMiKSxXKHt0eXBlOiJwYXJlbiIsdmFsdWU6Q30pO2NvbnRpbnVlfWlmKEM9PT0iKSIpe2lmKF8ucGFyZW5zPT09MCYmdC5zdHJpY3RCcmFja2V0cz09PSEwKXRocm93IG5ldyBTeW50YXhFcnJvcihncigib3BlbmluZyIsIigiKSk7bGV0IEk9UVtRLmxlbmd0aC0xXTtpZihJJiZfLnBhcmVucz09PUkucGFyZW5zKzEpe0R2KFEucG9wKCkpO2NvbnRpbnVlfVcoe3R5cGU6InBhcmVuIix2YWx1ZTpDLG91dHB1dDpfLnBhcmVucz8iKSI6IlxcKSJ9KSxGdCgicGFyZW5zIik7Y29udGludWV9aWYoQz09PSJbIil7aWYodC5ub2JyYWNrZXQ9PT0hMHx8IUllKCkuaW5jbHVkZXMoIl0iKSl7aWYodC5ub2JyYWNrZXQhPT0hMCYmdC5zdHJpY3RCcmFja2V0cz09PSEwKXRocm93IG5ldyBTeW50YXhFcnJvcihncigiY2xvc2luZyIsIl0iKSk7Qz1gXFwke0N9YH1lbHNlIHppKCJicmFja2V0cyIpO1coe3R5cGU6ImJyYWNrZXQiLHZhbHVlOkN9KTtjb250aW51ZX1pZihDPT09Il0iKXtpZih0Lm5vYnJhY2tldD09PSEwfHxBJiZBLnR5cGU9PT0iYnJhY2tldCImJkEudmFsdWUubGVuZ3RoPT09MSl7Vyh7dHlwZToidGV4dCIsdmFsdWU6QyxvdXRwdXQ6YFxcJHtDfWB9KTtjb250aW51ZX1pZihfLmJyYWNrZXRzPT09MCl7aWYodC5zdHJpY3RCcmFja2V0cz09PSEwKXRocm93IG5ldyBTeW50YXhFcnJvcihncigib3BlbmluZyIsIlsiKSk7Vyh7dHlwZToidGV4dCIsdmFsdWU6QyxvdXRwdXQ6YFxcJHtDfWB9KTtjb250aW51ZX1GdCgiYnJhY2tldHMiKTtsZXQgST1BLnZhbHVlLnNsaWNlKDEpO2lmKEEucG9zaXghPT0hMCYmSVswXT09PSJeIiYmIUkuaW5jbHVkZXMoIi8iKSYmKEM9YC8ke0N9YCksQS52YWx1ZSs9QyxqaSh7dmFsdWU6Q30pLHQubGl0ZXJhbEJyYWNrZXRzPT09ITF8fE1lLmhhc1JlZ2V4Q2hhcnMoSSkpY29udGludWU7bGV0IEg9TWUuZXNjYXBlUmVnZXgoQS52YWx1ZSk7aWYoXy5vdXRwdXQ9Xy5vdXRwdXQuc2xpY2UoMCwtQS52YWx1ZS5sZW5ndGgpLHQubGl0ZXJhbEJyYWNrZXRzPT09ITApe18ub3V0cHV0Kz1ILEEudmFsdWU9SDtjb250aW51ZX1BLnZhbHVlPWAoJHtvfSR7SH18JHtBLnZhbHVlfSlgLF8ub3V0cHV0Kz1BLnZhbHVlO2NvbnRpbnVlfWlmKEM9PT0ieyImJnQubm9icmFjZSE9PSEwKXt6aSgiYnJhY2VzIik7bGV0IEk9e3R5cGU6ImJyYWNlIix2YWx1ZTpDLG91dHB1dDoiKCIsb3V0cHV0SW5kZXg6Xy5vdXRwdXQubGVuZ3RoLHRva2Vuc0luZGV4Ol8udG9rZW5zLmxlbmd0aH07VS5wdXNoKEkpLFcoSSk7Y29udGludWV9aWYoQz09PSJ9Iil7bGV0IEk9VVtVLmxlbmd0aC0xXTtpZih0Lm5vYnJhY2U9PT0hMHx8IUkpe1coe3R5cGU6InRleHQiLHZhbHVlOkMsb3V0cHV0OkN9KTtjb250aW51ZX1sZXQgSD0iKSI7aWYoSS5kb3RzPT09ITApe2xldCBjZT1hLnNsaWNlKCksQ2U9W107Zm9yKGxldCB5ZT1jZS5sZW5ndGgtMTt5ZT49MCYmKGEucG9wKCksY2VbeWVdLnR5cGUhPT0iYnJhY2UiKTt5ZS0tKWNlW3llXS50eXBlIT09ImRvdHMiJiZDZS51bnNoaWZ0KGNlW3llXS52YWx1ZSk7SD1zMihDZSx0KSxfLmJhY2t0cmFjaz0hMH1pZihJLmNvbW1hIT09ITAmJkkuZG90cyE9PSEwKXtsZXQgY2U9Xy5vdXRwdXQuc2xpY2UoMCxJLm91dHB1dEluZGV4KSxDZT1fLnRva2Vucy5zbGljZShJLnRva2Vuc0luZGV4KTtJLnZhbHVlPUkub3V0cHV0PSJcXHsiLEM9SD0iXFx9IixfLm91dHB1dD1jZTtmb3IobGV0IHllIG9mIENlKV8ub3V0cHV0Kz15ZS5vdXRwdXR8fHllLnZhbHVlfVcoe3R5cGU6ImJyYWNlIix2YWx1ZTpDLG91dHB1dDpIfSksRnQoImJyYWNlcyIpLFUucG9wKCk7Y29udGludWV9aWYoQz09PSJ8Iil7US5sZW5ndGg+MCYmUVtRLmxlbmd0aC0xXS5jb25kaXRpb25zKyssVyh7dHlwZToidGV4dCIsdmFsdWU6Q30pO2NvbnRpbnVlfWlmKEM9PT0iLCIpe2xldCBJPUMsSD1VW1UubGVuZ3RoLTFdO0gmJmxlW2xlLmxlbmd0aC0xXT09PSJicmFjZXMiJiYoSC5jb21tYT0hMCxJPSJ8IiksVyh7dHlwZToiY29tbWEiLHZhbHVlOkMsb3V0cHV0Okl9KTtjb250aW51ZX1pZihDPT09Ii8iKXtpZihBLnR5cGU9PT0iZG90IiYmXy5pbmRleD09PV8uc3RhcnQrMSl7Xy5zdGFydD1fLmluZGV4KzEsXy5jb25zdW1lZD0iIixfLm91dHB1dD0iIixhLnBvcCgpLEE9cztjb250aW51ZX1XKHt0eXBlOiJzbGFzaCIsdmFsdWU6QyxvdXRwdXQ6aH0pO2NvbnRpbnVlfWlmKEM9PT0iLiIpe2lmKF8uYnJhY2VzPjAmJkEudHlwZT09PSJkb3QiKXtBLnZhbHVlPT09Ii4iJiYoQS5vdXRwdXQ9ZCk7bGV0IEk9VVtVLmxlbmd0aC0xXTtBLnR5cGU9ImRvdHMiLEEub3V0cHV0Kz1DLEEudmFsdWUrPUMsSS5kb3RzPSEwO2NvbnRpbnVlfWlmKF8uYnJhY2VzK18ucGFyZW5zPT09MCYmQS50eXBlIT09ImJvcyImJkEudHlwZSE9PSJzbGFzaCIpe1coe3R5cGU6InRleHQiLHZhbHVlOkMsb3V0cHV0OmR9KTtjb250aW51ZX1XKHt0eXBlOiJkb3QiLHZhbHVlOkMsb3V0cHV0OmR9KTtjb250aW51ZX1pZihDPT09Ij8iKXtpZighKEEmJkEudmFsdWU9PT0iKCIpJiZ0Lm5vZXh0Z2xvYiE9PSEwJiZWKCk9PT0iKCImJlYoMikhPT0iPyIpe1VpKCJxbWFyayIsQyk7Y29udGludWV9aWYoQSYmQS50eXBlPT09InBhcmVuIil7bGV0IEg9VigpLGNlPUM7aWYoSD09PSI8IiYmIU1lLnN1cHBvcnRzTG9va2JlaGluZHMoKSl0aHJvdyBuZXcgRXJyb3IoIk5vZGUuanMgdjEwIG9yIGhpZ2hlciBpcyByZXF1aXJlZCBmb3IgcmVnZXggbG9va2JlaGluZHMiKTsoQS52YWx1ZT09PSIoIiYmIS9bIT08Ol0vLnRlc3QoSCl8fEg9PT0iPCImJiEvPChbIT1dfFx3Kz4pLy50ZXN0KEllKCkpKSYmKGNlPWBcXCR7Q31gKSxXKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpDLG91dHB1dDpjZX0pO2NvbnRpbnVlfWlmKHQuZG90IT09ITAmJihBLnR5cGU9PT0ic2xhc2gifHxBLnR5cGU9PT0iYm9zIikpe1coe3R5cGU6InFtYXJrIix2YWx1ZTpDLG91dHB1dDpFfSk7Y29udGludWV9Vyh7dHlwZToicW1hcmsiLHZhbHVlOkMsb3V0cHV0OlN9KTtjb250aW51ZX1pZihDPT09IiEiKXtpZih0Lm5vZXh0Z2xvYiE9PSEwJiZWKCk9PT0iKCImJihWKDIpIT09Ij8ifHwhL1shPTw6XS8udGVzdChWKDMpKSkpe1VpKCJuZWdhdGUiLEMpO2NvbnRpbnVlfWlmKHQubm9uZWdhdGUhPT0hMCYmXy5pbmRleD09PTApe0l2KCk7Y29udGludWV9fWlmKEM9PT0iKyIpe2lmKHQubm9leHRnbG9iIT09ITAmJlYoKT09PSIoIiYmVigyKSE9PSI/Iil7VWkoInBsdXMiLEMpO2NvbnRpbnVlfWlmKEEmJkEudmFsdWU9PT0iKCJ8fHQucmVnZXg9PT0hMSl7Vyh7dHlwZToicGx1cyIsdmFsdWU6QyxvdXRwdXQ6cH0pO2NvbnRpbnVlfWlmKEEmJihBLnR5cGU9PT0iYnJhY2tldCJ8fEEudHlwZT09PSJwYXJlbiJ8fEEudHlwZT09PSJicmFjZSIpfHxfLnBhcmVucz4wKXtXKHt0eXBlOiJwbHVzIix2YWx1ZTpDfSk7Y29udGludWV9Vyh7dHlwZToicGx1cyIsdmFsdWU6cH0pO2NvbnRpbnVlfWlmKEM9PT0iQCIpe2lmKHQubm9leHRnbG9iIT09ITAmJlYoKT09PSIoIiYmVigyKSE9PSI/Iil7Vyh7dHlwZToiYXQiLGV4dGdsb2I6ITAsdmFsdWU6QyxvdXRwdXQ6IiJ9KTtjb250aW51ZX1XKHt0eXBlOiJ0ZXh0Iix2YWx1ZTpDfSk7Y29udGludWV9aWYoQyE9PSIqIil7KEM9PT0iJCJ8fEM9PT0iXiIpJiYoQz1gXFwke0N9YCk7bGV0IEk9aTIuZXhlYyhJZSgpKTtJJiYoQys9SVswXSxfLmluZGV4Kz1JWzBdLmxlbmd0aCksVyh7dHlwZToidGV4dCIsdmFsdWU6Q30pO2NvbnRpbnVlfWlmKEEmJihBLnR5cGU9PT0iZ2xvYnN0YXIifHxBLnN0YXI9PT0hMCkpe0EudHlwZT0ic3RhciIsQS5zdGFyPSEwLEEudmFsdWUrPUMsQS5vdXRwdXQ9WSxfLmJhY2t0cmFjaz0hMCxfLmdsb2JzdGFyPSEwLERlKEMpO2NvbnRpbnVlfWxldCAkPUllKCk7aWYodC5ub2V4dGdsb2IhPT0hMCYmL15cKFteP10vLnRlc3QoJCkpe1VpKCJzdGFyIixDKTtjb250aW51ZX1pZihBLnR5cGU9PT0ic3RhciIpe2lmKHQubm9nbG9ic3Rhcj09PSEwKXtEZShDKTtjb250aW51ZX1sZXQgST1BLnByZXYsSD1JLnByZXYsY2U9SS50eXBlPT09InNsYXNoInx8SS50eXBlPT09ImJvcyIsQ2U9SCYmKEgudHlwZT09PSJzdGFyInx8SC50eXBlPT09Imdsb2JzdGFyIik7aWYodC5iYXNoPT09ITAmJighY2V8fCRbMF0mJiRbMF0hPT0iLyIpKXtXKHt0eXBlOiJzdGFyIix2YWx1ZTpDLG91dHB1dDoiIn0pO2NvbnRpbnVlfWxldCB5ZT1fLmJyYWNlcz4wJiYoSS50eXBlPT09ImNvbW1hInx8SS50eXBlPT09ImJyYWNlIiksQnM9US5sZW5ndGgmJihJLnR5cGU9PT0icGlwZSJ8fEkudHlwZT09PSJwYXJlbiIpO2lmKCFjZSYmSS50eXBlIT09InBhcmVuIiYmIXllJiYhQnMpe1coe3R5cGU6InN0YXIiLHZhbHVlOkMsb3V0cHV0OiIifSk7Y29udGludWV9Zm9yKDskLnNsaWNlKDAsMyk9PT0iLyoqIjspe2xldCBWaT1yW18uaW5kZXgrNF07aWYoVmkmJlZpIT09Ii8iKWJyZWFrOyQ9JC5zbGljZSgzKSxEZSgiLyoqIiwzKX1pZihJLnR5cGU9PT0iYm9zIiYmaGUoKSl7QS50eXBlPSJnbG9ic3RhciIsQS52YWx1ZSs9QyxBLm91dHB1dD1OKHQpLF8ub3V0cHV0PUEub3V0cHV0LF8uZ2xvYnN0YXI9ITAsRGUoQyk7Y29udGludWV9aWYoSS50eXBlPT09InNsYXNoIiYmSS5wcmV2LnR5cGUhPT0iYm9zIiYmIUNlJiZoZSgpKXtfLm91dHB1dD1fLm91dHB1dC5zbGljZSgwLC0oSS5vdXRwdXQrQS5vdXRwdXQpLmxlbmd0aCksSS5vdXRwdXQ9YCg/OiR7SS5vdXRwdXR9YCxBLnR5cGU9Imdsb2JzdGFyIixBLm91dHB1dD1OKHQpKyh0LnN0cmljdFNsYXNoZXM/IikiOiJ8JCkiKSxBLnZhbHVlKz1DLF8uZ2xvYnN0YXI9ITAsXy5vdXRwdXQrPUkub3V0cHV0K0Eub3V0cHV0LERlKEMpO2NvbnRpbnVlfWlmKEkudHlwZT09PSJzbGFzaCImJkkucHJldi50eXBlIT09ImJvcyImJiRbMF09PT0iLyIpe2xldCBWaT0kWzFdIT09dm9pZCAwPyJ8JCI6IiI7Xy5vdXRwdXQ9Xy5vdXRwdXQuc2xpY2UoMCwtKEkub3V0cHV0K0Eub3V0cHV0KS5sZW5ndGgpLEkub3V0cHV0PWAoPzoke0kub3V0cHV0fWAsQS50eXBlPSJnbG9ic3RhciIsQS5vdXRwdXQ9YCR7Tih0KX0ke2h9fCR7aH0ke1ZpfSlgLEEudmFsdWUrPUMsXy5vdXRwdXQrPUkub3V0cHV0K0Eub3V0cHV0LF8uZ2xvYnN0YXI9ITAsRGUoQytFZSgpKSxXKHt0eXBlOiJzbGFzaCIsdmFsdWU6Ii8iLG91dHB1dDoiIn0pO2NvbnRpbnVlfWlmKEkudHlwZT09PSJib3MiJiYkWzBdPT09Ii8iKXtBLnR5cGU9Imdsb2JzdGFyIixBLnZhbHVlKz1DLEEub3V0cHV0PWAoPzpefCR7aH18JHtOKHQpfSR7aH0pYCxfLm91dHB1dD1BLm91dHB1dCxfLmdsb2JzdGFyPSEwLERlKEMrRWUoKSksVyh7dHlwZToic2xhc2giLHZhbHVlOiIvIixvdXRwdXQ6IiJ9KTtjb250aW51ZX1fLm91dHB1dD1fLm91dHB1dC5zbGljZSgwLC1BLm91dHB1dC5sZW5ndGgpLEEudHlwZT0iZ2xvYnN0YXIiLEEub3V0cHV0PU4odCksQS52YWx1ZSs9QyxfLm91dHB1dCs9QS5vdXRwdXQsXy5nbG9ic3Rhcj0hMCxEZShDKTtjb250aW51ZX1sZXQgYWU9e3R5cGU6InN0YXIiLHZhbHVlOkMsb3V0cHV0Oll9O2lmKHQuYmFzaD09PSEwKXthZS5vdXRwdXQ9Ii4qPyIsKEEudHlwZT09PSJib3MifHxBLnR5cGU9PT0ic2xhc2giKSYmKGFlLm91dHB1dD1SK2FlLm91dHB1dCksVyhhZSk7Y29udGludWV9aWYoQSYmKEEudHlwZT09PSJicmFja2V0Inx8QS50eXBlPT09InBhcmVuIikmJnQucmVnZXg9PT0hMCl7YWUub3V0cHV0PUMsVyhhZSk7Y29udGludWV9KF8uaW5kZXg9PT1fLnN0YXJ0fHxBLnR5cGU9PT0ic2xhc2gifHxBLnR5cGU9PT0iZG90IikmJihBLnR5cGU9PT0iZG90Ij8oXy5vdXRwdXQrPXcsQS5vdXRwdXQrPXcpOnQuZG90PT09ITA/KF8ub3V0cHV0Kz1rLEEub3V0cHV0Kz1rKTooXy5vdXRwdXQrPVIsQS5vdXRwdXQrPVIpLFYoKSE9PSIqIiYmKF8ub3V0cHV0Kz1iLEEub3V0cHV0Kz1iKSksVyhhZSl9Zm9yKDtfLmJyYWNrZXRzPjA7KXtpZih0LnN0cmljdEJyYWNrZXRzPT09ITApdGhyb3cgbmV3IFN5bnRheEVycm9yKGdyKCJjbG9zaW5nIiwiXSIpKTtfLm91dHB1dD1NZS5lc2NhcGVMYXN0KF8ub3V0cHV0LCJbIiksRnQoImJyYWNrZXRzIil9Zm9yKDtfLnBhcmVucz4wOyl7aWYodC5zdHJpY3RCcmFja2V0cz09PSEwKXRocm93IG5ldyBTeW50YXhFcnJvcihncigiY2xvc2luZyIsIikiKSk7Xy5vdXRwdXQ9TWUuZXNjYXBlTGFzdChfLm91dHB1dCwiKCIpLEZ0KCJwYXJlbnMiKX1mb3IoO18uYnJhY2VzPjA7KXtpZih0LnN0cmljdEJyYWNrZXRzPT09ITApdGhyb3cgbmV3IFN5bnRheEVycm9yKGdyKCJjbG9zaW5nIiwifSIpKTtfLm91dHB1dD1NZS5lc2NhcGVMYXN0KF8ub3V0cHV0LCJ7IiksRnQoImJyYWNlcyIpfWlmKHQuc3RyaWN0U2xhc2hlcyE9PSEwJiYoQS50eXBlPT09InN0YXIifHxBLnR5cGU9PT0iYnJhY2tldCIpJiZXKHt0eXBlOiJtYXliZV9zbGFzaCIsdmFsdWU6IiIsb3V0cHV0OmAke2h9P2B9KSxfLmJhY2t0cmFjaz09PSEwKXtfLm91dHB1dD0iIjtmb3IobGV0ICQgb2YgXy50b2tlbnMpXy5vdXRwdXQrPSQub3V0cHV0IT1udWxsPyQub3V0cHV0OiQudmFsdWUsJC5zdWZmaXgmJihfLm91dHB1dCs9JC5zdWZmaXgpfXJldHVybiBffTt4bC5mYXN0cGF0aHM9KHIsZSk9PntsZXQgdD17Li4uZX0saT10eXBlb2YgdC5tYXhMZW5ndGg9PSJudW1iZXIiP01hdGgubWluKHdzLHQubWF4TGVuZ3RoKTp3cyxuPXIubGVuZ3RoO2lmKG4+aSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoYElucHV0IGxlbmd0aDogJHtufSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke2l9YCk7cj10Z1tyXXx8cjtsZXQgcz1NZS5pc1dpbmRvd3MoZSkse0RPVF9MSVRFUkFMOmEsU0xBU0hfTElURVJBTDpvLE9ORV9DSEFSOmwsRE9UU19TTEFTSDpjLE5PX0RPVDpmLE5PX0RPVFM6ZCxOT19ET1RTX1NMQVNIOnAsU1RBUjpoLFNUQVJUX0FOQ0hPUjpifT1icy5nbG9iQ2hhcnMocyksdj10LmRvdD9kOmYseT10LmRvdD9wOmYsdz10LmNhcHR1cmU/IiI6Ij86IixrPXtuZWdhdGVkOiExLHByZWZpeDoiIn0sUz10LmJhc2g9PT0hMD8iLio/IjpoO3QuY2FwdHVyZSYmKFM9YCgke1N9KWApO2xldCBFPVI9PlIubm9nbG9ic3Rhcj09PSEwP1M6YCgke3d9KD86KD8hJHtifSR7Ui5kb3Q/YzphfSkuKSo/KWAsVD1SPT57c3dpdGNoKFIpe2Nhc2UiKiI6cmV0dXJuYCR7dn0ke2x9JHtTfWA7Y2FzZSIuKiI6cmV0dXJuYCR7YX0ke2x9JHtTfWA7Y2FzZSIqLioiOnJldHVybmAke3Z9JHtTfSR7YX0ke2x9JHtTfWA7Y2FzZSIqLyoiOnJldHVybmAke3Z9JHtTfSR7b30ke2x9JHt5fSR7U31gO2Nhc2UiKioiOnJldHVybiB2K0UodCk7Y2FzZSIqKi8qIjpyZXR1cm5gKD86JHt2fSR7RSh0KX0ke299KT8ke3l9JHtsfSR7U31gO2Nhc2UiKiovKi4qIjpyZXR1cm5gKD86JHt2fSR7RSh0KX0ke299KT8ke3l9JHtTfSR7YX0ke2x9JHtTfWA7Y2FzZSIqKi8uKiI6cmV0dXJuYCg/OiR7dn0ke0UodCl9JHtvfSk/JHthfSR7bH0ke1N9YDtkZWZhdWx0OntsZXQgRj0vXiguKj8pXC4oXHcrKSQvLmV4ZWMoUik7aWYoIUYpcmV0dXJuO2xldCBZPVQoRlsxXSk7cmV0dXJuIFk/WSthK0ZbMl06dm9pZCAwfX19LEI9TWUucmVtb3ZlUHJlZml4KHIsayksTj1UKEIpO3JldHVybiBOJiZ0LnN0cmljdFNsYXNoZXMhPT0hMCYmKE4rPWAke299P2ApLE59O3JnLmV4cG9ydHM9eGx9KTt2YXIgc2c9eCgoYzYsbmcpPT57dSgpOyJ1c2Ugc3RyaWN0Ijt2YXIgYTI9KGV0KCksVXIpLG8yPWVnKCksa2w9aWcoKSxTbD1xaSgpLGwyPURpKCksdTI9cj0+ciYmdHlwZW9mIHI9PSJvYmplY3QiJiYhQXJyYXkuaXNBcnJheShyKSxkZT0ocixlLHQ9ITEpPT57aWYoQXJyYXkuaXNBcnJheShyKSl7bGV0IGY9ci5tYXAocD0+ZGUocCxlLHQpKTtyZXR1cm4gcD0+e2ZvcihsZXQgaCBvZiBmKXtsZXQgYj1oKHApO2lmKGIpcmV0dXJuIGJ9cmV0dXJuITF9fWxldCBpPXUyKHIpJiZyLnRva2VucyYmci5pbnB1dDtpZihyPT09IiJ8fHR5cGVvZiByIT0ic3RyaW5nIiYmIWkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgcGF0dGVybiB0byBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbj1lfHx7fSxzPVNsLmlzV2luZG93cyhlKSxhPWk/ZGUuY29tcGlsZVJlKHIsZSk6ZGUubWFrZVJlKHIsZSwhMSwhMCksbz1hLnN0YXRlO2RlbGV0ZSBhLnN0YXRlO2xldCBsPSgpPT4hMTtpZihuLmlnbm9yZSl7bGV0IGY9ey4uLmUsaWdub3JlOm51bGwsb25NYXRjaDpudWxsLG9uUmVzdWx0Om51bGx9O2w9ZGUobi5pZ25vcmUsZix0KX1sZXQgYz0oZixkPSExKT0+e2xldHtpc01hdGNoOnAsbWF0Y2g6aCxvdXRwdXQ6Yn09ZGUudGVzdChmLGEsZSx7Z2xvYjpyLHBvc2l4OnN9KSx2PXtnbG9iOnIsc3RhdGU6byxyZWdleDphLHBvc2l4OnMsaW5wdXQ6ZixvdXRwdXQ6YixtYXRjaDpoLGlzTWF0Y2g6cH07cmV0dXJuIHR5cGVvZiBuLm9uUmVzdWx0PT0iZnVuY3Rpb24iJiZuLm9uUmVzdWx0KHYpLHA9PT0hMT8odi5pc01hdGNoPSExLGQ/djohMSk6bChmKT8odHlwZW9mIG4ub25JZ25vcmU9PSJmdW5jdGlvbiImJm4ub25JZ25vcmUodiksdi5pc01hdGNoPSExLGQ/djohMSk6KHR5cGVvZiBuLm9uTWF0Y2g9PSJmdW5jdGlvbiImJm4ub25NYXRjaCh2KSxkP3Y6ITApfTtyZXR1cm4gdCYmKGMuc3RhdGU9byksY307ZGUudGVzdD0ocixlLHQse2dsb2I6aSxwb3NpeDpufT17fSk9PntpZih0eXBlb2YgciE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgaW5wdXQgdG8gYmUgYSBzdHJpbmciKTtpZihyPT09IiIpcmV0dXJue2lzTWF0Y2g6ITEsb3V0cHV0OiIifTtsZXQgcz10fHx7fSxhPXMuZm9ybWF0fHwobj9TbC50b1Bvc2l4U2xhc2hlczpudWxsKSxvPXI9PT1pLGw9byYmYT9hKHIpOnI7cmV0dXJuIG89PT0hMSYmKGw9YT9hKHIpOnIsbz1sPT09aSksKG89PT0hMXx8cy5jYXB0dXJlPT09ITApJiYocy5tYXRjaEJhc2U9PT0hMHx8cy5iYXNlbmFtZT09PSEwP289ZGUubWF0Y2hCYXNlKHIsZSx0LG4pOm89ZS5leGVjKGwpKSx7aXNNYXRjaDpCb29sZWFuKG8pLG1hdGNoOm8sb3V0cHV0Omx9fTtkZS5tYXRjaEJhc2U9KHIsZSx0LGk9U2wuaXNXaW5kb3dzKHQpKT0+KGUgaW5zdGFuY2VvZiBSZWdFeHA/ZTpkZS5tYWtlUmUoZSx0KSkudGVzdChhMi5iYXNlbmFtZShyKSk7ZGUuaXNNYXRjaD0ocixlLHQpPT5kZShlLHQpKHIpO2RlLnBhcnNlPShyLGUpPT5BcnJheS5pc0FycmF5KHIpP3IubWFwKHQ9PmRlLnBhcnNlKHQsZSkpOmtsKHIsey4uLmUsZmFzdHBhdGhzOiExfSk7ZGUuc2Nhbj0ocixlKT0+bzIocixlKTtkZS5jb21waWxlUmU9KHIsZSx0PSExLGk9ITEpPT57aWYodD09PSEwKXJldHVybiByLm91dHB1dDtsZXQgbj1lfHx7fSxzPW4uY29udGFpbnM/IiI6Il4iLGE9bi5jb250YWlucz8iIjoiJCIsbz1gJHtzfSg/OiR7ci5vdXRwdXR9KSR7YX1gO3ImJnIubmVnYXRlZD09PSEwJiYobz1gXig/ISR7b30pLiokYCk7bGV0IGw9ZGUudG9SZWdleChvLGUpO3JldHVybiBpPT09ITAmJihsLnN0YXRlPXIpLGx9O2RlLm1ha2VSZT0ocixlPXt9LHQ9ITEsaT0hMSk9PntpZighcnx8dHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBuPXtuZWdhdGVkOiExLGZhc3RwYXRoczohMH07cmV0dXJuIGUuZmFzdHBhdGhzIT09ITEmJihyWzBdPT09Ii4ifHxyWzBdPT09IioiKSYmKG4ub3V0cHV0PWtsLmZhc3RwYXRocyhyLGUpKSxuLm91dHB1dHx8KG49a2wocixlKSksZGUuY29tcGlsZVJlKG4sZSx0LGkpfTtkZS50b1JlZ2V4PShyLGUpPT57dHJ5e2xldCB0PWV8fHt9O3JldHVybiBuZXcgUmVnRXhwKHIsdC5mbGFnc3x8KHQubm9jYXNlPyJpIjoiIikpfWNhdGNoKHQpe2lmKGUmJmUuZGVidWc9PT0hMCl0aHJvdyB0O3JldHVybi8kXi99fTtkZS5jb25zdGFudHM9bDI7bmcuZXhwb3J0cz1kZX0pO3ZhciBvZz14KChwNixhZyk9Pnt1KCk7InVzZSBzdHJpY3QiO2FnLmV4cG9ydHM9c2coKX0pO3ZhciBkZz14KChkNixwZyk9Pnt1KCk7InVzZSBzdHJpY3QiO3ZhciBsZz0oRm4oKSxCbiksdWc9am0oKSxvdD1vZygpLEFsPXFpKCksZmc9cj0+cj09PSIifHxyPT09Ii4vIixjZz1yPT57bGV0IGU9ci5pbmRleE9mKCJ7Iik7cmV0dXJuIGU+LTEmJnIuaW5kZXhPZigifSIsZSk+LTF9LG9lPShyLGUsdCk9PntlPVtdLmNvbmNhdChlKSxyPVtdLmNvbmNhdChyKTtsZXQgaT1uZXcgU2V0LG49bmV3IFNldCxzPW5ldyBTZXQsYT0wLG89Zj0+e3MuYWRkKGYub3V0cHV0KSx0JiZ0Lm9uUmVzdWx0JiZ0Lm9uUmVzdWx0KGYpfTtmb3IobGV0IGY9MDtmPGUubGVuZ3RoO2YrKyl7bGV0IGQ9b3QoU3RyaW5nKGVbZl0pLHsuLi50LG9uUmVzdWx0Om99LCEwKSxwPWQuc3RhdGUubmVnYXRlZHx8ZC5zdGF0ZS5uZWdhdGVkRXh0Z2xvYjtwJiZhKys7Zm9yKGxldCBoIG9mIHIpe2xldCBiPWQoaCwhMCk7IShwPyFiLmlzTWF0Y2g6Yi5pc01hdGNoKXx8KHA/aS5hZGQoYi5vdXRwdXQpOihpLmRlbGV0ZShiLm91dHB1dCksbi5hZGQoYi5vdXRwdXQpKSl9fWxldCBjPShhPT09ZS5sZW5ndGg/Wy4uLnNdOlsuLi5uXSkuZmlsdGVyKGY9PiFpLmhhcyhmKSk7aWYodCYmYy5sZW5ndGg9PT0wKXtpZih0LmZhaWxnbG9iPT09ITApdGhyb3cgbmV3IEVycm9yKGBObyBtYXRjaGVzIGZvdW5kIGZvciAiJHtlLmpvaW4oIiwgIil9ImApO2lmKHQubm9udWxsPT09ITB8fHQubnVsbGdsb2I9PT0hMClyZXR1cm4gdC51bmVzY2FwZT9lLm1hcChmPT5mLnJlcGxhY2UoL1xcL2csIiIpKTplfXJldHVybiBjfTtvZS5tYXRjaD1vZTtvZS5tYXRjaGVyPShyLGUpPT5vdChyLGUpO29lLmlzTWF0Y2g9KHIsZSx0KT0+b3QoZSx0KShyKTtvZS5hbnk9b2UuaXNNYXRjaDtvZS5ub3Q9KHIsZSx0PXt9KT0+e2U9W10uY29uY2F0KGUpLm1hcChTdHJpbmcpO2xldCBpPW5ldyBTZXQsbj1bXSxzPW89Pnt0Lm9uUmVzdWx0JiZ0Lm9uUmVzdWx0KG8pLG4ucHVzaChvLm91dHB1dCl9LGE9bmV3IFNldChvZShyLGUsey4uLnQsb25SZXN1bHQ6c30pKTtmb3IobGV0IG8gb2YgbilhLmhhcyhvKXx8aS5hZGQobyk7cmV0dXJuWy4uLmldfTtvZS5jb250YWlucz0ocixlLHQpPT57aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIGEgc3RyaW5nOiAiJHtsZy5pbnNwZWN0KHIpfSJgKTtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLnNvbWUoaT0+b2UuY29udGFpbnMocixpLHQpKTtpZih0eXBlb2YgZT09InN0cmluZyIpe2lmKGZnKHIpfHxmZyhlKSlyZXR1cm4hMTtpZihyLmluY2x1ZGVzKGUpfHxyLnN0YXJ0c1dpdGgoIi4vIikmJnIuc2xpY2UoMikuaW5jbHVkZXMoZSkpcmV0dXJuITB9cmV0dXJuIG9lLmlzTWF0Y2gocixlLHsuLi50LGNvbnRhaW5zOiEwfSl9O29lLm1hdGNoS2V5cz0ocixlLHQpPT57aWYoIUFsLmlzT2JqZWN0KHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHRoZSBmaXJzdCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QiKTtsZXQgaT1vZShPYmplY3Qua2V5cyhyKSxlLHQpLG49e307Zm9yKGxldCBzIG9mIGkpbltzXT1yW3NdO3JldHVybiBufTtvZS5zb21lPShyLGUsdCk9PntsZXQgaT1bXS5jb25jYXQocik7Zm9yKGxldCBuIG9mW10uY29uY2F0KGUpKXtsZXQgcz1vdChTdHJpbmcobiksdCk7aWYoaS5zb21lKGE9PnMoYSkpKXJldHVybiEwfXJldHVybiExfTtvZS5ldmVyeT0ocixlLHQpPT57bGV0IGk9W10uY29uY2F0KHIpO2ZvcihsZXQgbiBvZltdLmNvbmNhdChlKSl7bGV0IHM9b3QoU3RyaW5nKG4pLHQpO2lmKCFpLmV2ZXJ5KGE9PnMoYSkpKXJldHVybiExfXJldHVybiEwfTtvZS5hbGw9KHIsZSx0KT0+e2lmKHR5cGVvZiByIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBhIHN0cmluZzogIiR7bGcuaW5zcGVjdChyKX0iYCk7cmV0dXJuW10uY29uY2F0KGUpLmV2ZXJ5KGk9Pm90KGksdCkocikpfTtvZS5jYXB0dXJlPShyLGUsdCk9PntsZXQgaT1BbC5pc1dpbmRvd3ModCkscz1vdC5tYWtlUmUoU3RyaW5nKHIpLHsuLi50LGNhcHR1cmU6ITB9KS5leGVjKGk/QWwudG9Qb3NpeFNsYXNoZXMoZSk6ZSk7aWYocylyZXR1cm4gcy5zbGljZSgxKS5tYXAoYT0+YT09PXZvaWQgMD8iIjphKX07b2UubWFrZVJlPSguLi5yKT0+b3QubWFrZVJlKC4uLnIpO29lLnNjYW49KC4uLnIpPT5vdC5zY2FuKC4uLnIpO29lLnBhcnNlPShyLGUpPT57bGV0IHQ9W107Zm9yKGxldCBpIG9mW10uY29uY2F0KHJ8fFtdKSlmb3IobGV0IG4gb2YgdWcoU3RyaW5nKGkpLGUpKXQucHVzaChvdC5wYXJzZShuLGUpKTtyZXR1cm4gdH07b2UuYnJhY2VzPShyLGUpPT57aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7cmV0dXJuIGUmJmUubm9icmFjZT09PSEwfHwhY2cocik/W3JdOnVnKHIsZSl9O29lLmJyYWNlRXhwYW5kPShyLGUpPT57aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgc3RyaW5nIik7cmV0dXJuIG9lLmJyYWNlcyhyLHsuLi5lLGV4cGFuZDohMH0pfTtvZS5oYXNCcmFjZXM9Y2c7cGcuZXhwb3J0cz1vZX0pO2Z1bmN0aW9uIG1nKHIsZSl7bGV0IHQ9ZS5jb250ZW50LmZpbGVzO3Q9dC5maWx0ZXIobz0+dHlwZW9mIG89PSJzdHJpbmciKSx0PXQubWFwKGxsKTtsZXQgaT1wcy5nZW5lcmF0ZVRhc2tzKHQpLG49W10scz1bXTtmb3IobGV0IG8gb2YgaSluLnB1c2goLi4uby5wb3NpdGl2ZS5tYXAobD0+Z2cobCwhMSkpKSxzLnB1c2goLi4uby5uZWdhdGl2ZS5tYXAobD0+Z2cobCwhMCkpKTtsZXQgYT1bLi4ubiwuLi5zXTtyZXR1cm4gYT1jMihyLGEpLGE9YS5mbGF0TWFwKHAyKSxhPWEubWFwKGYyKSxhfWZ1bmN0aW9uIGdnKHIsZSl7bGV0IHQ9e29yaWdpbmFsOnIsYmFzZTpyLGlnbm9yZTplLHBhdHRlcm46cixnbG9iOm51bGx9O3JldHVybiBaaChyKSYmT2JqZWN0LmFzc2lnbih0LG5tKHIpKSx0fWZ1bmN0aW9uIGYyKHIpe2xldCBlPWxsKHIuYmFzZSk7cmV0dXJuIGU9cHMuZXNjYXBlUGF0aChlKSxyLnBhdHRlcm49ci5nbG9iP2Ake2V9LyR7ci5nbG9ifWA6ZSxyLnBhdHRlcm49ci5pZ25vcmU/YCEke3IucGF0dGVybn1gOnIucGF0dGVybixyfWZ1bmN0aW9uIGMyKHIsZSl7bGV0IHQ9W107cmV0dXJuIHIudXNlckNvbmZpZ1BhdGgmJnIudGFpbHdpbmRDb25maWcuY29udGVudC5yZWxhdGl2ZSYmKHQ9W21lLmRpcm5hbWUoci51c2VyQ29uZmlnUGF0aCldKSxlLm1hcChpPT4oaS5iYXNlPW1lLnJlc29sdmUoLi4udCxpLmJhc2UpLGkpKX1mdW5jdGlvbiBwMihyKXtsZXQgZT1bcl07dHJ5e2xldCB0PWJlLnJlYWxwYXRoU3luYyhyLmJhc2UpO3QhPT1yLmJhc2UmJmUucHVzaCh7Li4ucixiYXNlOnR9KX1jYXRjaHt9cmV0dXJuIGV9ZnVuY3Rpb24geWcocixlLHQpe2xldCBpPXIudGFpbHdpbmRDb25maWcuY29udGVudC5maWxlcy5maWx0ZXIoYT0+dHlwZW9mIGEucmF3PT0ic3RyaW5nIikubWFwKCh7cmF3OmEsZXh0ZW5zaW9uOm89Imh0bWwifSk9Pih7Y29udGVudDphLGV4dGVuc2lvbjpvfSkpLFtuLHNdPWgyKGUsdCk7Zm9yKGxldCBhIG9mIG4pe2xldCBvPW1lLmV4dG5hbWUoYSkuc2xpY2UoMSk7aS5wdXNoKHtmaWxlOmEsZXh0ZW5zaW9uOm99KX1yZXR1cm5baSxzXX1mdW5jdGlvbiBkMihyKXtpZighci5zb21lKHM9PnMuaW5jbHVkZXMoIioqIikmJiF3Zy50ZXN0KHMpKSlyZXR1cm4oKT0+e307bGV0IHQ9W10saT1bXTtmb3IobGV0IHMgb2Ygcil7bGV0IGE9aGcuZGVmYXVsdC5tYXRjaGVyKHMpO3dnLnRlc3QocykmJmkucHVzaChhKSx0LnB1c2goYSl9bGV0IG49ITE7cmV0dXJuIHM9PntpZihufHxpLnNvbWUoZj0+ZihzKSkpcmV0dXJuO2xldCBhPXQuZmluZEluZGV4KGY9PmYocykpO2lmKGE9PT0tMSlyZXR1cm47bGV0IG89clthXSxsPW1lLnJlbGF0aXZlKG0uY3dkKCksbyk7bFswXSE9PSIuIiYmKGw9YC4vJHtsfWApO2xldCBjPWJnLmZpbmQoZj0+cy5pbmNsdWRlcyhmKSk7YyYmKG49ITAsRy53YXJuKCJicm9hZC1jb250ZW50LWdsb2ItcGF0dGVybiIsW2BZb3VyIFxgY29udGVudFxgIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgYSBwYXR0ZXJuIHdoaWNoIGxvb2tzIGxpa2UgaXQncyBhY2NpZGVudGFsbHkgbWF0Y2hpbmcgYWxsIG9mIFxgJHtjfVxgIGFuZCBjYW4gY2F1c2Ugc2VyaW91cyBwZXJmb3JtYW5jZSBpc3N1ZXMuYCxgUGF0dGVybjogXGAke2x9XGBgLCJTZWUgb3VyIGRvY3VtZW50YXRpb24gZm9yIHJlY29tbWVuZGF0aW9uczoiLCJodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2NvbnRlbnQtY29uZmlndXJhdGlvbiNwYXR0ZXJuLXJlY29tbWVuZGF0aW9ucyJdKSl9fWZ1bmN0aW9uIGgyKHIsZSl7bGV0IHQ9ci5tYXAobz0+by5wYXR0ZXJuKSxpPW5ldyBNYXAsbj1kMih0KSxzPW5ldyBTZXQ7WmUuREVCVUcmJmNvbnNvbGUudGltZSgiRmluZGluZyBjaGFuZ2VkIGZpbGVzIik7bGV0IGE9cHMuc3luYyh0LHthYnNvbHV0ZTohMH0pO2ZvcihsZXQgbyBvZiBhKXtuKG8pO2xldCBsPWUuZ2V0KG8pfHwtMS8wLGM9YmUuc3RhdFN5bmMobykubXRpbWVNcztjPmwmJihzLmFkZChvKSxpLnNldChvLGMpKX1yZXR1cm4gWmUuREVCVUcmJmNvbnNvbGUudGltZUVuZCgiRmluZGluZyBjaGFuZ2VkIGZpbGVzIiksW3MsaV19dmFyIGhnLGJnLHdnLHZnPVAoKCk9Pnt1KCk7ZnQoKTtldCgpO0poKCk7ZW0oKTt0bSgpO3NtKCk7SXQoKTtCZSgpO2hnPXBlKGRnKCkpO2JnPVsibm9kZV9tb2R1bGVzIl0sd2c9bmV3IFJlZ0V4cChgKCR7YmcubWFwKHI9PlN0cmluZy5yYXdgXGIke3J9XGJgKS5qb2luKCJ8Iil9KWApfSk7ZnVuY3Rpb24geGcoKXt9dmFyIGtnPVAoKCk9Pnt1KCl9KTtmdW5jdGlvbiBiMihyLGUpe2ZvcihsZXQgdCBvZiBlKXtsZXQgaT1gJHtyfSR7dH1gO2lmKGJlLmV4aXN0c1N5bmMoaSkmJmJlLnN0YXRTeW5jKGkpLmlzRmlsZSgpKXJldHVybiBpfWZvcihsZXQgdCBvZiBlKXtsZXQgaT1gJHtyfS9pbmRleCR7dH1gO2lmKGJlLmV4aXN0c1N5bmMoaSkpcmV0dXJuIGl9cmV0dXJuIG51bGx9ZnVuY3Rpb24qU2cocixlLHQsaT1tZS5leHRuYW1lKHIpKXtsZXQgbj1iMihtZS5yZXNvbHZlKGUsciksbTIuaW5jbHVkZXMoaSk/ZzI6eTIpO2lmKG49PT1udWxsfHx0LmhhcyhuKSlyZXR1cm47dC5hZGQobikseWllbGQgbixlPW1lLmRpcm5hbWUobiksaT1tZS5leHRuYW1lKG4pO2xldCBzPWJlLnJlYWRGaWxlU3luYyhuLCJ1dGYtOCIpO2ZvcihsZXQgYSBvZlsuLi5zLm1hdGNoQWxsKC9pbXBvcnRbXHNcU10qP1snIl0oLnszLH0/KVsnIl0vZ2kpLC4uLnMubWF0Y2hBbGwoL2ltcG9ydFtcc1xTXSpmcm9tW1xzXFNdKj9bJyJdKC57Myx9PylbJyJdL2dpKSwuLi5zLm1hdGNoQWxsKC9yZXF1aXJlXChbJyJgXSguKylbJyJgXVwpL2dpKV0pIWFbMV0uc3RhcnRzV2l0aCgiLiIpfHwoeWllbGQqU2coYVsxXSxlLHQsaSkpfWZ1bmN0aW9uIENsKHIpe3JldHVybiByPT09bnVsbD9uZXcgU2V0Om5ldyBTZXQoU2cocixtZS5kaXJuYW1lKHIpLG5ldyBTZXQpKX12YXIgbTIsZzIseTIsQWc9UCgoKT0+e3UoKTtmdCgpO2V0KCk7bTI9WyIuanMiLCIuY2pzIiwiLm1qcyJdLGcyPVsiIiwiLmpzIiwiLmNqcyIsIi5tanMiLCIudHMiLCIuY3RzIiwiLm10cyIsIi5qc3giLCIudHN4Il0seTI9WyIiLCIudHMiLCIuY3RzIiwiLm10cyIsIi50c3giLCIuanMiLCIuY2pzIiwiLm1qcyIsIi5qc3giXX0pO2Z1bmN0aW9uIHcyKHIsZSl7aWYoX2wuaGFzKHIpKXJldHVybiBfbC5nZXQocik7bGV0IHQ9bWcocixlKTtyZXR1cm4gX2wuc2V0KHIsdCkuZ2V0KHIpfWZ1bmN0aW9uIHYyKHIpe2xldCBlPWFhKHIpO2lmKGUhPT1udWxsKXtsZXRbaSxuLHMsYV09X2cuZ2V0KGUpfHxbXSxvPUNsKGUpLGw9ITEsYz1uZXcgTWFwO2ZvcihsZXQgcCBvZiBvKXtsZXQgaD1iZS5zdGF0U3luYyhwKS5tdGltZU1zO2Muc2V0KHAsaCksKCFhfHwhYS5oYXMocCl8fGg+YS5nZXQocCkpJiYobD0hMCl9aWYoIWwpcmV0dXJuW2ksZSxuLHNdO2ZvcihsZXQgcCBvZiBvKWRlbGV0ZSBoZi5jYWNoZVtwXTtsZXQgZj1vbCh6cih4ZyhlKSkpLGQ9V2koZik7cmV0dXJuIF9nLnNldChlLFtmLGQsbyxjXSksW2YsZSxkLG9dfWxldCB0PXpyKHI/LmNvbmZpZz8/cj8/e30pO3JldHVybiB0PW9sKHQpLFt0LG51bGwsV2kodCksW11dfWZ1bmN0aW9uIEVsKHIpe3JldHVybih7dGFpbHdpbmREaXJlY3RpdmVzOmUscmVnaXN0ZXJEZXBlbmRlbmN5OnR9KT0+KGksbik9PntsZXRbcyxhLG8sbF09djIociksYz1uZXcgU2V0KGwpO2lmKGUuc2l6ZT4wKXtjLmFkZChuLm9wdHMuZnJvbSk7Zm9yKGxldCBiIG9mIG4ubWVzc2FnZXMpYi50eXBlPT09ImRlcGVuZGVuY3kiJiZjLmFkZChiLmZpbGUpfWxldFtmLCxkXT1WaChpLG4scyxhLG8sYykscD1jcyhmKSxoPXcyKGYscyk7aWYoZS5zaXplPjApe2ZvcihsZXQgeSBvZiBoKWZvcihsZXQgdyBvZiBubCh5KSl0KHcpO2xldFtiLHZdPXlnKGYsaCxwKTtmb3IobGV0IHkgb2YgYilmLmNoYW5nZWRDb250ZW50LnB1c2goeSk7Zm9yKGxldFt5LHddb2Ygdi5lbnRyaWVzKCkpZC5zZXQoeSx3KX1mb3IobGV0IGIgb2YgbCl0KHt0eXBlOiJkZXBlbmRlbmN5IixmaWxlOmJ9KTtmb3IobGV0W2Isdl1vZiBkLmVudHJpZXMoKSlwLnNldChiLHYpO3JldHVybiBmfX12YXIgQ2csX2csX2wsRWc9UCgoKT0+e3UoKTtmdCgpO0NnPXBlKEZzKCkpO3dmKCk7c2EoKTtvYygpO09pKCk7SGgoKTtYaCgpO3ZnKCk7a2coKTtBZygpO19nPW5ldyBDZy5kZWZhdWx0KHttYXhTaXplOjEwMH0pLF9sPW5ldyBXZWFrTWFwfSk7ZnVuY3Rpb24gT2wocil7bGV0IGU9bmV3IFNldCx0PW5ldyBTZXQsaT1uZXcgU2V0O2lmKHIud2Fsa0F0UnVsZXMobj0+e24ubmFtZT09PSJhcHBseSImJmkuYWRkKG4pLG4ubmFtZT09PSJpbXBvcnQiJiYobi5wYXJhbXM9PT0nInRhaWx3aW5kY3NzL2Jhc2UiJ3x8bi5wYXJhbXM9PT0iJ3RhaWx3aW5kY3NzL2Jhc2UnIj8obi5uYW1lPSJ0YWlsd2luZCIsbi5wYXJhbXM9ImJhc2UiKTpuLnBhcmFtcz09PScidGFpbHdpbmRjc3MvY29tcG9uZW50cyInfHxuLnBhcmFtcz09PSIndGFpbHdpbmRjc3MvY29tcG9uZW50cyciPyhuLm5hbWU9InRhaWx3aW5kIixuLnBhcmFtcz0iY29tcG9uZW50cyIpOm4ucGFyYW1zPT09JyJ0YWlsd2luZGNzcy91dGlsaXRpZXMiJ3x8bi5wYXJhbXM9PT0iJ3RhaWx3aW5kY3NzL3V0aWxpdGllcyciPyhuLm5hbWU9InRhaWx3aW5kIixuLnBhcmFtcz0idXRpbGl0aWVzIik6KG4ucGFyYW1zPT09JyJ0YWlsd2luZGNzcy9zY3JlZW5zIid8fG4ucGFyYW1zPT09Iid0YWlsd2luZGNzcy9zY3JlZW5zJyJ8fG4ucGFyYW1zPT09JyJ0YWlsd2luZGNzcy92YXJpYW50cyInfHxuLnBhcmFtcz09PSIndGFpbHdpbmRjc3MvdmFyaWFudHMnIikmJihuLm5hbWU9InRhaWx3aW5kIixuLnBhcmFtcz0idmFyaWFudHMiKSksbi5uYW1lPT09InRhaWx3aW5kIiYmKG4ucGFyYW1zPT09InNjcmVlbnMiJiYobi5wYXJhbXM9InZhcmlhbnRzIiksZS5hZGQobi5wYXJhbXMpKSxbImxheWVyIiwicmVzcG9uc2l2ZSIsInZhcmlhbnRzIl0uaW5jbHVkZXMobi5uYW1lKSYmKFsicmVzcG9uc2l2ZSIsInZhcmlhbnRzIl0uaW5jbHVkZXMobi5uYW1lKSYmRy53YXJuKGAke24ubmFtZX0tYXQtcnVsZS1kZXByZWNhdGVkYCxbYFRoZSBcYEAke24ubmFtZX1cYCBkaXJlY3RpdmUgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBUYWlsd2luZCBDU1MgdjMuMC5gLCJVc2UgYEBsYXllciB1dGlsaXRpZXNgIG9yIGBAbGF5ZXIgY29tcG9uZW50c2AgaW5zdGVhZC4iLCJodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3VwZ3JhZGUtZ3VpZGUjcmVwbGFjZS12YXJpYW50cy13aXRoLWxheWVyIl0pLHQuYWRkKG4pKX0pLCFlLmhhcygiYmFzZSIpfHwhZS5oYXMoImNvbXBvbmVudHMiKXx8IWUuaGFzKCJ1dGlsaXRpZXMiKSl7Zm9yKGxldCBuIG9mIHQpaWYobi5uYW1lPT09ImxheWVyIiYmWyJiYXNlIiwiY29tcG9uZW50cyIsInV0aWxpdGllcyJdLmluY2x1ZGVzKG4ucGFyYW1zKSl7aWYoIWUuaGFzKG4ucGFyYW1zKSl0aHJvdyBuLmVycm9yKGBcYEBsYXllciAke24ucGFyYW1zfVxgIGlzIHVzZWQgYnV0IG5vIG1hdGNoaW5nIFxgQHRhaWx3aW5kICR7bi5wYXJhbXN9XGAgZGlyZWN0aXZlIGlzIHByZXNlbnQuYCl9ZWxzZSBpZihuLm5hbWU9PT0icmVzcG9uc2l2ZSIpe2lmKCFlLmhhcygidXRpbGl0aWVzIikpdGhyb3cgbi5lcnJvcigiYEByZXNwb25zaXZlYCBpcyB1c2VkIGJ1dCBgQHRhaWx3aW5kIHV0aWxpdGllc2AgaXMgbWlzc2luZy4iKX1lbHNlIGlmKG4ubmFtZT09PSJ2YXJpYW50cyImJiFlLmhhcygidXRpbGl0aWVzIikpdGhyb3cgbi5lcnJvcigiYEB2YXJpYW50c2AgaXMgdXNlZCBidXQgYEB0YWlsd2luZCB1dGlsaXRpZXNgIGlzIG1pc3NpbmcuIil9cmV0dXJue3RhaWx3aW5kRGlyZWN0aXZlczplLGFwcGx5RGlyZWN0aXZlczppfX12YXIgT2c9UCgoKT0+e3UoKTtCZSgpfSk7ZnVuY3Rpb24gUXQocixlPXZvaWQgMCx0PXZvaWQgMCl7cmV0dXJuIHIubWFwKGk9PntsZXQgbj1pLmNsb25lKCk7cmV0dXJuIHQhPT12b2lkIDAmJihuLnJhd3MudGFpbHdpbmQ9ey4uLm4ucmF3cy50YWlsd2luZCwuLi50fSksZSE9PXZvaWQgMCYmVGcobixzPT57aWYocy5yYXdzLnRhaWx3aW5kPy5wcmVzZXJ2ZVNvdXJjZT09PSEwJiZzLnNvdXJjZSlyZXR1cm4hMTtzLnNvdXJjZT1lfSksbn0pfWZ1bmN0aW9uIFRnKHIsZSl7ZShyKSE9PSExJiZyLmVhY2g/Lih0PT5UZyh0LGUpKX12YXIgUmc9UCgoKT0+e3UoKX0pO2Z1bmN0aW9uIFRsKHIpe3JldHVybiByPUFycmF5LmlzQXJyYXkocik/cjpbcl0scj1yLm1hcChlPT5lIGluc3RhbmNlb2YgUmVnRXhwP2Uuc291cmNlOmUpLHIuam9pbigiIil9ZnVuY3Rpb24gTmUocil7cmV0dXJuIG5ldyBSZWdFeHAoVGwociksImciKX1mdW5jdGlvbiBxdChyKXtyZXR1cm5gKD86JHtyLm1hcChUbCkuam9pbigifCIpfSlgfWZ1bmN0aW9uIFJsKHIpe3JldHVybmAoPzoke1RsKHIpfSk/YH1mdW5jdGlvbiBJZyhyKXtyZXR1cm4gciYmeDIudGVzdChyKT9yLnJlcGxhY2UoUGcsIlxcJCYiKTpyfHwiIn12YXIgUGcseDIsRGc9UCgoKT0+e3UoKTtQZz0vW1xcXiQuKis/KClbXF17fXxdL2cseDI9UmVnRXhwKFBnLnNvdXJjZSl9KTtmdW5jdGlvbiBxZyhyKXtsZXQgZT1BcnJheS5mcm9tKGsyKHIpKTtyZXR1cm4gdD0+e2xldCBpPVtdO2ZvcihsZXQgbiBvZiBlKWZvcihsZXQgcyBvZiB0Lm1hdGNoKG4pPz9bXSlpLnB1c2goQzIocykpO2ZvcihsZXQgbiBvZiBpLnNsaWNlKCkpe2xldCBzPXZlKG4sIi4iKTtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErKyl7bGV0IG89c1thXTtpZihhPj1zLmxlbmd0aC0xKXtpLnB1c2gobyk7Y29udGludWV9bGV0IGw9TnVtYmVyKHNbYSsxXSk7aXNOYU4obCk/aS5wdXNoKG8pOmErK319cmV0dXJuIGl9fWZ1bmN0aW9uKmsyKHIpe2xldCBlPXIudGFpbHdpbmRDb25maWcuc2VwYXJhdG9yLHQ9ci50YWlsd2luZENvbmZpZy5wcmVmaXghPT0iIj9SbChOZShbLy0/LyxJZyhyLnRhaWx3aW5kQ29uZmlnLnByZWZpeCldKSk6IiIsaT1xdChbL1xbW15cczonImBdKzpbXlxzXFtcXV0rXF0vLC9cW1teXHM6JyJgXF1dKzpbXlxzXSs/XFtbXlxzXStcXVteXHNdKz9cXS8sTmUoW3F0KFsvLT8oPzpcdyspLywvQCg/Olx3KykvXSksUmwocXQoW05lKFtxdChbLy0oPzpcdystKSpcWydbXlxzXSsnXF0vLC8tKD86XHcrLSkqXFsiW15cc10rIlxdLywvLSg/Olx3Ky0pKlxbYFteXHNdK2BcXS8sLy0oPzpcdystKSpcWyg/OlteXHNcW1xdXStcW1teXHNcW1xdXStcXSkqW15cczpcW1xdXStcXS9dKSwvKD8hW3soW11dKS8sLyg/OlwvW15ccyciYFxcPjwkXSopPy9dKSxOZShbcXQoWy8tKD86XHcrLSkqXFsnW15cc10rJ1xdLywvLSg/Olx3Ky0pKlxbIlteXHNdKyJcXS8sLy0oPzpcdystKSpcW2BbXlxzXStgXF0vLC8tKD86XHcrLSkqXFsoPzpbXlxzXFtcXV0rXFtbXlxzXFtcXV0rXF0pKlteXHNcW1xdXStcXS9dKSwvKD8hW3soW11dKS8sLyg/OlwvW15ccyciYFxcJF0qKT8vXSksL1stXC9dW15ccyciYFxcJD17PjxdKi9dKSldKV0pLG49W3F0KFtOZShbL0BcW1teXHMiJ2BdK1xdKFwvW15ccyInYF0rKT8vLGVdKSxOZShbLyhbXlxzIidgXFtcXF0rLSk/XFtbXlxzIidgXStcXVwvW1x3Xy1dKy8sZV0pLE5lKFsvKFteXHMiJ2BcW1xcXSstKT9cW1teXHMiJ2BdK1xdLyxlXSksTmUoWy9bXlxzIidgXFtcXF0rLyxlXSldKSxxdChbTmUoWy8oW15ccyInYFxbXFxdKy0pP1xbW15cc2BdK1xdXC9bXHdfLV0rLyxlXSksTmUoWy8oW15ccyInYFxbXFxdKy0pP1xbW15cc2BdK1xdLyxlXSksTmUoWy9bXlxzYFxbXFxdKy8sZV0pXSldO2ZvcihsZXQgcyBvZiBuKXlpZWxkIE5lKFsiKCg/PSgoIixzLCIpKykpXFwyKT8iLC8hPy8sdCxpXSk7eWllbGQvW148PiInYFxzLigpe31bXF0jPSUkXVtePD4iJ2Bccygpe31bXF0jPSUkXSpbXjw+IidgXHMuKCl7fVtcXSM9JTokXS9nfWZ1bmN0aW9uIEMyKHIpe2lmKCFyLmluY2x1ZGVzKCItWyIpKXJldHVybiByO2xldCBlPTAsdD1bXSxpPXIubWF0Y2hBbGwoUzIpO2k9QXJyYXkuZnJvbShpKS5mbGF0TWFwKG49PntsZXRbLC4uLnNdPW47cmV0dXJuIHMubWFwKChhLG8pPT5PYmplY3QuYXNzaWduKFtdLG4se2luZGV4Om4uaW5kZXgrbywwOmF9KSl9KTtmb3IobGV0IG4gb2YgaSl7bGV0IHM9blswXSxhPXRbdC5sZW5ndGgtMV07aWYocz09PWE/dC5wb3AoKToocz09PSInInx8cz09PSciJ3x8cz09PSJgIikmJnQucHVzaChzKSwhYSl7aWYocz09PSJbIil7ZSsrO2NvbnRpbnVlfWVsc2UgaWYocz09PSJdIil7ZS0tO2NvbnRpbnVlfWlmKGU8MClyZXR1cm4gci5zdWJzdHJpbmcoMCxuLmluZGV4LTEpO2lmKGU9PT0wJiYhQTIudGVzdChzKSlyZXR1cm4gci5zdWJzdHJpbmcoMCxuLmluZGV4KX19cmV0dXJuIHJ9dmFyIFMyLEEyLCRnPVAoKCk9Pnt1KCk7RGcoKTt6dCgpO1MyPS8oW1xbXF0nImBdKShbXlxbXF0nImBdKT8vZyxBMj0vW14iJ2Bcczw+XF1dKy99KTtmdW5jdGlvbiBfMihyLGUpe2xldCB0PXIudGFpbHdpbmRDb25maWcuY29udGVudC5leHRyYWN0O3JldHVybiB0W2VdfHx0LkRFRkFVTFR8fE1nW2VdfHxNZy5ERUZBVUxUKHIpfWZ1bmN0aW9uIEUyKHIsZSl7bGV0IHQ9ci5jb250ZW50LnRyYW5zZm9ybTtyZXR1cm4gdFtlXXx8dC5ERUZBVUxUfHxOZ1tlXXx8TmcuREVGQVVMVH1mdW5jdGlvbiBPMihyLGUsdCxpKXtMaS5oYXMoZSl8fExpLnNldChlLG5ldyBMZy5kZWZhdWx0KHttYXhTaXplOjI1ZTN9KSk7Zm9yKGxldCBuIG9mIHIuc3BsaXQoYApgKSlpZihuPW4udHJpbSgpLCFpLmhhcyhuKSlpZihpLmFkZChuKSxMaS5nZXQoZSkuaGFzKG4pKWZvcihsZXQgcyBvZiBMaS5nZXQoZSkuZ2V0KG4pKXQuYWRkKHMpO2Vsc2V7bGV0IHM9ZShuKS5maWx0ZXIobz0+byE9PSIhKiIpLGE9bmV3IFNldChzKTtmb3IobGV0IG8gb2YgYSl0LmFkZChvKTtMaS5nZXQoZSkuc2V0KG4sYSl9fWZ1bmN0aW9uIFQyKHIsZSl7bGV0IHQ9ZS5vZmZzZXRzLnNvcnQociksaT17YmFzZTpuZXcgU2V0LGRlZmF1bHRzOm5ldyBTZXQsY29tcG9uZW50czpuZXcgU2V0LHV0aWxpdGllczpuZXcgU2V0LHZhcmlhbnRzOm5ldyBTZXR9O2ZvcihsZXRbbixzXW9mIHQpaVtuLmxheWVyXS5hZGQocyk7cmV0dXJuIGl9ZnVuY3Rpb24gUGwocil7cmV0dXJuIGFzeW5jIGU9PntsZXQgdD17YmFzZTpudWxsLGNvbXBvbmVudHM6bnVsbCx1dGlsaXRpZXM6bnVsbCx2YXJpYW50czpudWxsfTtpZihlLndhbGtBdFJ1bGVzKHk9Pnt5Lm5hbWU9PT0idGFpbHdpbmQiJiZPYmplY3Qua2V5cyh0KS5pbmNsdWRlcyh5LnBhcmFtcykmJih0W3kucGFyYW1zXT15KX0pLE9iamVjdC52YWx1ZXModCkuZXZlcnkoeT0+eT09PW51bGwpKXJldHVybiBlO2xldCBpPW5ldyBTZXQoWy4uLnIuY2FuZGlkYXRlcz8/W10sZ3RdKSxuPW5ldyBTZXQ7YnQuREVCVUcmJmNvbnNvbGUudGltZSgiUmVhZGluZyBjaGFuZ2VkIGZpbGVzIik7bGV0IHM9W107Zm9yKGxldCB5IG9mIHIuY2hhbmdlZENvbnRlbnQpe2xldCB3PUUyKHIudGFpbHdpbmRDb25maWcseS5leHRlbnNpb24pLGs9XzIocix5LmV4dGVuc2lvbik7cy5wdXNoKFt5LHt0cmFuc2Zvcm1lcjp3LGV4dHJhY3RvcjprfV0pfWxldCBhPTUwMDtmb3IobGV0IHk9MDt5PHMubGVuZ3RoO3krPWEpe2xldCB3PXMuc2xpY2UoeSx5K2EpO2F3YWl0IFByb21pc2UuYWxsKHcubWFwKGFzeW5jKFt7ZmlsZTprLGNvbnRlbnQ6U30se3RyYW5zZm9ybWVyOkUsZXh0cmFjdG9yOlR9XSk9PntTPWs/YXdhaXQgYmUucHJvbWlzZXMucmVhZEZpbGUoaywidXRmOCIpOlMsTzIoRShTKSxULGksbil9KSl9YnQuREVCVUcmJmNvbnNvbGUudGltZUVuZCgiUmVhZGluZyBjaGFuZ2VkIGZpbGVzIik7bGV0IG89ci5jbGFzc0NhY2hlLnNpemU7YnQuREVCVUcmJmNvbnNvbGUudGltZSgiR2VuZXJhdGUgcnVsZXMiKSxidC5ERUJVRyYmY29uc29sZS50aW1lKCJTb3J0aW5nIGNhbmRpZGF0ZXMiKTtsZXQgbD1uZXcgU2V0KFsuLi5pXS5zb3J0KCh5LHcpPT55PT09dz8wOnk8dz8tMToxKSk7YnQuREVCVUcmJmNvbnNvbGUudGltZUVuZCgiU29ydGluZyBjYW5kaWRhdGVzIiksYXMobCxyKSxidC5ERUJVRyYmY29uc29sZS50aW1lRW5kKCJHZW5lcmF0ZSBydWxlcyIpLGJ0LkRFQlVHJiZjb25zb2xlLnRpbWUoIkJ1aWxkIHN0eWxlc2hlZXQiKSwoci5zdHlsZXNoZWV0Q2FjaGU9PT1udWxsfHxyLmNsYXNzQ2FjaGUuc2l6ZSE9PW8pJiYoci5zdHlsZXNoZWV0Q2FjaGU9VDIoWy4uLnIucnVsZUNhY2hlXSxyKSksYnQuREVCVUcmJmNvbnNvbGUudGltZUVuZCgiQnVpbGQgc3R5bGVzaGVldCIpO2xldHtkZWZhdWx0czpjLGJhc2U6Zixjb21wb25lbnRzOmQsdXRpbGl0aWVzOnAsdmFyaWFudHM6aH09ci5zdHlsZXNoZWV0Q2FjaGU7dC5iYXNlJiYodC5iYXNlLmJlZm9yZShRdChbLi4uYywuLi5mXSx0LmJhc2Uuc291cmNlLHtsYXllcjoiYmFzZSJ9KSksdC5iYXNlLnJlbW92ZSgpKSx0LmNvbXBvbmVudHMmJih0LmNvbXBvbmVudHMuYmVmb3JlKFF0KFsuLi5kXSx0LmNvbXBvbmVudHMuc291cmNlLHtsYXllcjoiY29tcG9uZW50cyJ9KSksdC5jb21wb25lbnRzLnJlbW92ZSgpKSx0LnV0aWxpdGllcyYmKHQudXRpbGl0aWVzLmJlZm9yZShRdChbLi4ucF0sdC51dGlsaXRpZXMuc291cmNlLHtsYXllcjoidXRpbGl0aWVzIn0pKSx0LnV0aWxpdGllcy5yZW1vdmUoKSk7bGV0IGI9QXJyYXkuZnJvbShoKS5maWx0ZXIoeT0+e2xldCB3PXkucmF3cy50YWlsd2luZD8ucGFyZW50TGF5ZXI7cmV0dXJuIHc9PT0iY29tcG9uZW50cyI/dC5jb21wb25lbnRzIT09bnVsbDp3PT09InV0aWxpdGllcyI/dC51dGlsaXRpZXMhPT1udWxsOiEwfSk7dC52YXJpYW50cz8odC52YXJpYW50cy5iZWZvcmUoUXQoYix0LnZhcmlhbnRzLnNvdXJjZSx7bGF5ZXI6InZhcmlhbnRzIn0pKSx0LnZhcmlhbnRzLnJlbW92ZSgpKTpiLmxlbmd0aD4wJiZlLmFwcGVuZChRdChiLGUuc291cmNlLHtsYXllcjoidmFyaWFudHMifSkpLGUuc291cmNlLmVuZD1lLnNvdXJjZS5lbmQ/P2Uuc291cmNlLnN0YXJ0O2xldCB2PWIuc29tZSh5PT55LnJhd3MudGFpbHdpbmQ/LnBhcmVudExheWVyPT09InV0aWxpdGllcyIpO3QudXRpbGl0aWVzJiZwLnNpemU9PT0wJiYhdiYmRy53YXJuKCJjb250ZW50LXByb2JsZW1zIixbIk5vIHV0aWxpdHkgY2xhc3NlcyB3ZXJlIGRldGVjdGVkIGluIHlvdXIgc291cmNlIGZpbGVzLiBJZiB0aGlzIGlzIHVuZXhwZWN0ZWQsIGRvdWJsZS1jaGVjayB0aGUgYGNvbnRlbnRgIG9wdGlvbiBpbiB5b3VyIFRhaWx3aW5kIENTUyBjb25maWd1cmF0aW9uLiIsImh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY29udGVudC1jb25maWd1cmF0aW9uIl0pLGJ0LkRFQlVHJiYoY29uc29sZS5sb2coIlBvdGVudGlhbCBjbGFzc2VzOiAiLGkuc2l6ZSksY29uc29sZS5sb2coIkFjdGl2ZSBjb250ZXh0czogIixlcy5zaXplKSksci5jaGFuZ2VkQ29udGVudD1bXSxlLndhbGtBdFJ1bGVzKCJsYXllciIseT0+e09iamVjdC5rZXlzKHQpLmluY2x1ZGVzKHkucGFyYW1zKSYmeS5yZW1vdmUoKX0pfX12YXIgTGcsYnQsTWcsTmcsTGksQmc9UCgoKT0+e3UoKTtmdCgpO0xnPXBlKEZzKCkpO0l0KCk7b3MoKTtCZSgpO1JnKCk7JGcoKTtidD1aZSxNZz17REVGQVVMVDpxZ30sTmc9e0RFRkFVTFQ6cj0+cixzdmVsdGU6cj0+ci5yZXBsYWNlKC8oPzpefFxzKWNsYXNzOi9nLCIgIil9O0xpPW5ldyBXZWFrTWFwfSk7ZnVuY3Rpb24geHMocil7bGV0IGU9bmV3IE1hcDtlZS5yb290KHtub2Rlczpbci5jbG9uZSgpXX0pLndhbGtSdWxlcyhzPT57KDAsdnMuZGVmYXVsdCkoYT0+e2Eud2Fsa0NsYXNzZXMobz0+e2xldCBsPW8ucGFyZW50LnRvU3RyaW5nKCksYz1lLmdldChsKTtjfHxlLnNldChsLGM9bmV3IFNldCksYy5hZGQoby52YWx1ZSl9KX0pLnByb2Nlc3NTeW5jKHMuc2VsZWN0b3IpfSk7bGV0IGk9QXJyYXkuZnJvbShlLnZhbHVlcygpLHM9PkFycmF5LmZyb20ocykpLG49aS5mbGF0KCk7cmV0dXJuIE9iamVjdC5hc3NpZ24obix7Z3JvdXBzOml9KX1mdW5jdGlvbiBJbChyKXtyZXR1cm4gUjIuYXN0U3luYyhyKX1mdW5jdGlvbiBGZyhyLGUpe2xldCB0PW5ldyBTZXQ7Zm9yKGxldCBpIG9mIHIpdC5hZGQoaS5zcGxpdChlKS5wb3AoKSk7cmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gamcocixlKXtsZXQgdD1yLnRhaWx3aW5kQ29uZmlnLnByZWZpeDtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0K2V9ZnVuY3Rpb24qemcocil7Zm9yKHlpZWxkIHI7ci5wYXJlbnQ7KXlpZWxkIHIucGFyZW50LHI9ci5wYXJlbnR9ZnVuY3Rpb24gUDIocixlPXt9KXtsZXQgdD1yLm5vZGVzO3Iubm9kZXM9W107bGV0IGk9ci5jbG9uZShlKTtyZXR1cm4gci5ub2Rlcz10LGl9ZnVuY3Rpb24gSTIocil7Zm9yKGxldCBlIG9mIHpnKHIpKWlmKHIhPT1lKXtpZihlLnR5cGU9PT0icm9vdCIpYnJlYWs7cj1QMihlLHtub2Rlczpbcl19KX1yZXR1cm4gcn1mdW5jdGlvbiBEMihyLGUpe2xldCB0PW5ldyBNYXA7cmV0dXJuIHIud2Fsa1J1bGVzKGk9Pntmb3IobGV0IGEgb2YgemcoaSkpaWYoYS5yYXdzLnRhaWx3aW5kPy5sYXllciE9PXZvaWQgMClyZXR1cm47bGV0IG49STIoaSkscz1lLm9mZnNldHMuY3JlYXRlKCJ1c2VyIik7Zm9yKGxldCBhIG9mIHhzKGkpKXtsZXQgbz10LmdldChhKXx8W107dC5zZXQoYSxvKSxvLnB1c2goW3tsYXllcjoidXNlciIsc29ydDpzLGltcG9ydGFudDohMX0sbl0pfX0pLHR9ZnVuY3Rpb24gcTIocixlKXtmb3IobGV0IHQgb2Ygcil7aWYoZS5ub3RDbGFzc0NhY2hlLmhhcyh0KXx8ZS5hcHBseUNsYXNzQ2FjaGUuaGFzKHQpKWNvbnRpbnVlO2lmKGUuY2xhc3NDYWNoZS5oYXModCkpe2UuYXBwbHlDbGFzc0NhY2hlLnNldCh0LGUuY2xhc3NDYWNoZS5nZXQodCkubWFwKChbbixzXSk9PltuLHMuY2xvbmUoKV0pKTtjb250aW51ZX1sZXQgaT1BcnJheS5mcm9tKFlvKHQsZSkpO2lmKGkubGVuZ3RoPT09MCl7ZS5ub3RDbGFzc0NhY2hlLmFkZCh0KTtjb250aW51ZX1lLmFwcGx5Q2xhc3NDYWNoZS5zZXQodCxpKX1yZXR1cm4gZS5hcHBseUNsYXNzQ2FjaGV9ZnVuY3Rpb24gJDIocil7bGV0IGU9bnVsbDtyZXR1cm57Z2V0OnQ9PihlPWV8fHIoKSxlLmdldCh0KSksaGFzOnQ9PihlPWV8fHIoKSxlLmhhcyh0KSl9fWZ1bmN0aW9uIEwyKHIpe3JldHVybntnZXQ6ZT0+ci5mbGF0TWFwKHQ9PnQuZ2V0KGUpfHxbXSksaGFzOmU9PnIuc29tZSh0PT50LmhhcyhlKSl9fWZ1bmN0aW9uIFVnKHIpe2xldCBlPXIuc3BsaXQoL1tcc1x0XG5dKy9nKTtyZXR1cm4gZVtlLmxlbmd0aC0xXT09PSIhaW1wb3J0YW50Ij9bZS5zbGljZSgwLC0xKSwhMF06W2UsITFdfWZ1bmN0aW9uIFZnKHIsZSx0KXtsZXQgaT1uZXcgU2V0LG49W107aWYoci53YWxrQXRSdWxlcygiYXBwbHkiLGw9PntsZXRbY109VWcobC5wYXJhbXMpO2ZvcihsZXQgZiBvZiBjKWkuYWRkKGYpO24ucHVzaChsKX0pLG4ubGVuZ3RoPT09MClyZXR1cm47bGV0IHM9TDIoW3QscTIoaSxlKV0pO2Z1bmN0aW9uIGEobCxjLGYpe2xldCBkPUlsKGwpLHA9SWwoYyksYj1JbChgLiR7VGUoZil9YCkubm9kZXNbMF0ubm9kZXNbMF07cmV0dXJuIGQuZWFjaCh2PT57bGV0IHk9bmV3IFNldDtwLmVhY2godz0+e2xldCBrPSExO3c9dy5jbG9uZSgpLHcud2Fsa0NsYXNzZXMoUz0+e1MudmFsdWU9PT1iLnZhbHVlJiYoa3x8KFMucmVwbGFjZVdpdGgoLi4udi5ub2Rlcy5tYXAoRT0+RS5jbG9uZSgpKSkseS5hZGQodyksaz0hMCkpfSl9KTtmb3IobGV0IHcgb2YgeSl7bGV0IGs9W1tdXTtmb3IobGV0IFMgb2Ygdy5ub2RlcylTLnR5cGU9PT0iY29tYmluYXRvciI/KGsucHVzaChTKSxrLnB1c2goW10pKTprW2subGVuZ3RoLTFdLnB1c2goUyk7dy5ub2Rlcz1bXTtmb3IobGV0IFMgb2YgaylBcnJheS5pc0FycmF5KFMpJiZTLnNvcnQoKEUsVCk9PkUudHlwZT09PSJ0YWciJiZULnR5cGU9PT0iY2xhc3MiPy0xOkUudHlwZT09PSJjbGFzcyImJlQudHlwZT09PSJ0YWciPzE6RS50eXBlPT09ImNsYXNzIiYmVC50eXBlPT09InBzZXVkbyImJlQudmFsdWUuc3RhcnRzV2l0aCgiOjoiKT8tMTpFLnR5cGU9PT0icHNldWRvIiYmRS52YWx1ZS5zdGFydHNXaXRoKCI6OiIpJiZULnR5cGU9PT0iY2xhc3MiPzE6MCksdy5ub2Rlcz13Lm5vZGVzLmNvbmNhdChTKX12LnJlcGxhY2VXaXRoKC4uLnkpfSksZC50b1N0cmluZygpfWxldCBvPW5ldyBNYXA7Zm9yKGxldCBsIG9mIG4pe2xldFtjXT1vLmdldChsLnBhcmVudCl8fFtbXSxsLnNvdXJjZV07by5zZXQobC5wYXJlbnQsW2MsbC5zb3VyY2VdKTtsZXRbZixkXT1VZyhsLnBhcmFtcyk7aWYobC5wYXJlbnQudHlwZT09PSJhdHJ1bGUiKXtpZihsLnBhcmVudC5uYW1lPT09InNjcmVlbiIpe2xldCBwPWwucGFyZW50LnBhcmFtczt0aHJvdyBsLmVycm9yKGBAYXBwbHkgaXMgbm90IHN1cHBvcnRlZCB3aXRoaW4gbmVzdGVkIGF0LXJ1bGVzIGxpa2UgQHNjcmVlbi4gV2Ugc3VnZ2VzdCB5b3Ugd3JpdGUgdGhpcyBhcyBAYXBwbHkgJHtmLm1hcChoPT5gJHtwfToke2h9YCkuam9pbigiICIpfSBpbnN0ZWFkLmApfXRocm93IGwuZXJyb3IoYEBhcHBseSBpcyBub3Qgc3VwcG9ydGVkIHdpdGhpbiBuZXN0ZWQgYXQtcnVsZXMgbGlrZSBAJHtsLnBhcmVudC5uYW1lfS4gWW91IGNhbiBmaXggdGhpcyBieSB1bi1uZXN0aW5nIEAke2wucGFyZW50Lm5hbWV9LmApfWZvcihsZXQgcCBvZiBmKXtpZihbamcoZSwiZ3JvdXAiKSxqZyhlLCJwZWVyIildLmluY2x1ZGVzKHApKXRocm93IGwuZXJyb3IoYEBhcHBseSBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCB0aGUgJyR7cH0nIHV0aWxpdHlgKTtpZighcy5oYXMocCkpdGhyb3cgbC5lcnJvcihgVGhlIFxgJHtwfVxgIGNsYXNzIGRvZXMgbm90IGV4aXN0LiBJZiBcYCR7cH1cYCBpcyBhIGN1c3RvbSBjbGFzcywgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgd2l0aGluIGEgXGBAbGF5ZXJcYCBkaXJlY3RpdmUuYCk7bGV0IGg9cy5nZXQocCk7Zm9yKGxldFssYl1vZiBoKWIudHlwZSE9PSJhdHJ1bGUiJiZiLndhbGtSdWxlcygoKT0+e3Rocm93IGwuZXJyb3IoW2BUaGUgXGAke3B9XGAgY2xhc3MgY2Fubm90IGJlIHVzZWQgd2l0aCBcYEBhcHBseVxgIGJlY2F1c2UgXGBAYXBwbHlcYCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBuZXN0ZWQgQ1NTLmAsIlJld3JpdGUgdGhlIHNlbGVjdG9yIHdpdGhvdXQgbmVzdGluZyBvciBjb25maWd1cmUgdGhlIGB0YWlsd2luZGNzcy9uZXN0aW5nYCBwbHVnaW46IiwiaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy91c2luZy13aXRoLXByZXByb2Nlc3NvcnMjbmVzdGluZyJdLmpvaW4oYApgKSl9KTtjLnB1c2goW3AsZCxoXSl9fWZvcihsZXRbbCxbYyxmXV1vZiBvKXtsZXQgZD1bXTtmb3IobGV0W2gsYix2XW9mIGMpe2xldCB5PVtoLC4uLkZnKFtoXSxlLnRhaWx3aW5kQ29uZmlnLnNlcGFyYXRvcildO2ZvcihsZXRbdyxrXW9mIHYpe2xldCBTPXhzKGwpLEU9eHMoayk7aWYoRT1FLmdyb3Vwcy5maWx0ZXIoUj0+Ui5zb21lKEY9PnkuaW5jbHVkZXMoRikpKS5mbGF0KCksRT1FLmNvbmNhdChGZyhFLGUudGFpbHdpbmRDb25maWcuc2VwYXJhdG9yKSksUy5zb21lKFI9PkUuaW5jbHVkZXMoUikpKXRocm93IGsuZXJyb3IoYFlvdSBjYW5ub3QgXGBAYXBwbHlcYCB0aGUgXGAke2h9XGAgdXRpbGl0eSBoZXJlIGJlY2F1c2UgaXQgY3JlYXRlcyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kuYCk7bGV0IEI9ZWUucm9vdCh7bm9kZXM6W2suY2xvbmUoKV19KTtCLndhbGsoUj0+e1Iuc291cmNlPWZ9KSwoay50eXBlIT09ImF0cnVsZSJ8fGsudHlwZT09PSJhdHJ1bGUiJiZrLm5hbWUhPT0ia2V5ZnJhbWVzIikmJkIud2Fsa1J1bGVzKFI9PntpZigheHMoUikuc29tZShVPT5VPT09aCkpe1IucmVtb3ZlKCk7cmV0dXJufWxldCBGPXR5cGVvZiBlLnRhaWx3aW5kQ29uZmlnLmltcG9ydGFudD09InN0cmluZyI/ZS50YWlsd2luZENvbmZpZy5pbXBvcnRhbnQ6bnVsbCxfPWwucmF3cy50YWlsd2luZCE9PXZvaWQgMCYmRiYmbC5zZWxlY3Rvci5pbmRleE9mKEYpPT09MD9sLnNlbGVjdG9yLnNsaWNlKEYubGVuZ3RoKTpsLnNlbGVjdG9yO189PT0iIiYmKF89bC5zZWxlY3RvciksUi5zZWxlY3Rvcj1hKF8sUi5zZWxlY3RvcixoKSxGJiZfIT09bC5zZWxlY3RvciYmKFIuc2VsZWN0b3I9aXMoUi5zZWxlY3RvcixGKSksUi53YWxrRGVjbHMoVT0+e1UuaW1wb3J0YW50PXcuaW1wb3J0YW50fHxifSk7bGV0IFE9KDAsdnMuZGVmYXVsdCkoKS5hc3RTeW5jKFIuc2VsZWN0b3IpO1EuZWFjaChVPT5wcihVKSksUi5zZWxlY3Rvcj1RLnRvU3RyaW5nKCl9KSwhIUIubm9kZXNbMF0mJmQucHVzaChbdy5zb3J0LEIubm9kZXNbMF1dKX19bGV0IHA9ZS5vZmZzZXRzLnNvcnQoZCkubWFwKGg9PmhbMV0pO2wuYWZ0ZXIocCl9Zm9yKGxldCBsIG9mIG4pbC5wYXJlbnQubm9kZXMubGVuZ3RoPjE/bC5yZW1vdmUoKTpsLnBhcmVudC5yZW1vdmUoKTtWZyhyLGUsdCl9ZnVuY3Rpb24gRGwocil7cmV0dXJuIGU9PntsZXQgdD0kMigoKT0+RDIoZSxyKSk7VmcoZSxyLHQpfX12YXIgdnMsUjIsSGc9UCgoKT0+e3UoKTtPdCgpO3ZzPXBlKGl0KCkpO29zKCk7ZnIoKTtXbygpO3RzKCk7UjI9KDAsdnMuZGVmYXVsdCkoKX0pO3ZhciBXZz14KChucSxrcyk9Pnt1KCk7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoaSxuLHMpe2lmKCFpKXJldHVybiBudWxsO3IuY2FzZVNlbnNpdGl2ZXx8KGk9aS50b0xvd2VyQ2FzZSgpKTt2YXIgYT1yLnRocmVzaG9sZD09PW51bGw/bnVsbDpyLnRocmVzaG9sZCppLmxlbmd0aCxvPXIudGhyZXNob2xkQWJzb2x1dGUsbDthIT09bnVsbCYmbyE9PW51bGw/bD1NYXRoLm1pbihhLG8pOmEhPT1udWxsP2w9YTpvIT09bnVsbD9sPW86bD1udWxsO3ZhciBjLGYsZCxwLGgsYj1uLmxlbmd0aDtmb3IoaD0wO2g8YjtoKyspaWYoZj1uW2hdLHMmJihmPWZbc10pLCEhZiYmKHIuY2FzZVNlbnNpdGl2ZT9kPWY6ZD1mLnRvTG93ZXJDYXNlKCkscD10KGksZCxsKSwobD09PW51bGx8fHA8bCkmJihsPXAscyYmci5yZXR1cm5XaW5uaW5nT2JqZWN0P2M9bltoXTpjPWYsci5yZXR1cm5GaXJzdE1hdGNoKSkpcmV0dXJuIGM7cmV0dXJuIGN8fHIubnVsbFJlc3VsdFZhbHVlfXIudGhyZXNob2xkPS40LHIudGhyZXNob2xkQWJzb2x1dGU9MjAsci5jYXNlU2Vuc2l0aXZlPSExLHIubnVsbFJlc3VsdFZhbHVlPW51bGwsci5yZXR1cm5XaW5uaW5nT2JqZWN0PW51bGwsci5yZXR1cm5GaXJzdE1hdGNoPSExLHR5cGVvZiBrcyE9InVuZGVmaW5lZCImJmtzLmV4cG9ydHM/a3MuZXhwb3J0cz1yOndpbmRvdy5kaWRZb3VNZWFuPXI7dmFyIGU9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiB0KGksbixzKXtzPXN8fHM9PT0wP3M6ZTt2YXIgYT1pLmxlbmd0aCxvPW4ubGVuZ3RoO2lmKGE9PT0wKXJldHVybiBNYXRoLm1pbihzKzEsbyk7aWYobz09PTApcmV0dXJuIE1hdGgubWluKHMrMSxhKTtpZihNYXRoLmFicyhhLW8pPnMpcmV0dXJuIHMrMTt2YXIgbD1bXSxjLGYsZCxwLGg7Zm9yKGM9MDtjPD1vO2MrKylsW2NdPVtjXTtmb3IoZj0wO2Y8PWE7ZisrKWxbMF1bZl09Zjtmb3IoYz0xO2M8PW87YysrKXtmb3IoZD1lLHA9MSxjPnMmJihwPWMtcyksaD1vKzEsaD5zK2MmJihoPXMrYyksZj0xO2Y8PWE7ZisrKWY8cHx8Zj5oP2xbY11bZl09cysxOm4uY2hhckF0KGMtMSk9PT1pLmNoYXJBdChmLTEpP2xbY11bZl09bFtjLTFdW2YtMV06bFtjXVtmXT1NYXRoLm1pbihsW2MtMV1bZi0xXSsxLE1hdGgubWluKGxbY11bZi0xXSsxLGxbYy0xXVtmXSsxKSksbFtjXVtmXTxkJiYoZD1sW2NdW2ZdKTtpZihkPnMpcmV0dXJuIHMrMX1yZXR1cm4gbFtvXVthXX19KSgpfSk7dmFyIFFnPXgoKHNxLEdnKT0+e3UoKTt2YXIgcWw9IigiLmNoYXJDb2RlQXQoMCksJGw9IikiLmNoYXJDb2RlQXQoMCksU3M9IiciLmNoYXJDb2RlQXQoMCksTGw9JyInLmNoYXJDb2RlQXQoMCksTWw9IlxcIi5jaGFyQ29kZUF0KDApLHlyPSIvIi5jaGFyQ29kZUF0KDApLE5sPSIsIi5jaGFyQ29kZUF0KDApLEJsPSI6Ii5jaGFyQ29kZUF0KDApLEFzPSIqIi5jaGFyQ29kZUF0KDApLE0yPSJ1Ii5jaGFyQ29kZUF0KDApLE4yPSJVIi5jaGFyQ29kZUF0KDApLEIyPSIrIi5jaGFyQ29kZUF0KDApLEYyPS9eW2EtZjAtOT8tXSskL2k7R2cuZXhwb3J0cz1mdW5jdGlvbihyKXtmb3IodmFyIGU9W10sdD1yLGksbixzLGEsbyxsLGMsZixkPTAscD10LmNoYXJDb2RlQXQoZCksaD10Lmxlbmd0aCxiPVt7bm9kZXM6ZX1dLHY9MCx5LHc9IiIsaz0iIixTPSIiO2Q8aDspaWYocDw9MzIpe2k9ZDtkbyBpKz0xLHA9dC5jaGFyQ29kZUF0KGkpO3doaWxlKHA8PTMyKTthPXQuc2xpY2UoZCxpKSxzPWVbZS5sZW5ndGgtMV0scD09PSRsJiZ2P1M9YTpzJiZzLnR5cGU9PT0iZGl2Ij8ocy5hZnRlcj1hLHMuc291cmNlRW5kSW5kZXgrPWEubGVuZ3RoKTpwPT09Tmx8fHA9PT1CbHx8cD09PXlyJiZ0LmNoYXJDb2RlQXQoaSsxKSE9PUFzJiYoIXl8fHkmJnkudHlwZT09PSJmdW5jdGlvbiImJiExKT9rPWE6ZS5wdXNoKHt0eXBlOiJzcGFjZSIsc291cmNlSW5kZXg6ZCxzb3VyY2VFbmRJbmRleDppLHZhbHVlOmF9KSxkPWl9ZWxzZSBpZihwPT09U3N8fHA9PT1MbCl7aT1kLG49cD09PVNzPyInIjonIicsYT17dHlwZToic3RyaW5nIixzb3VyY2VJbmRleDpkLHF1b3RlOm59O2RvIGlmKG89ITEsaT10LmluZGV4T2YobixpKzEpLH5pKWZvcihsPWk7dC5jaGFyQ29kZUF0KGwtMSk9PT1NbDspbC09MSxvPSFvO2Vsc2UgdCs9bixpPXQubGVuZ3RoLTEsYS51bmNsb3NlZD0hMDt3aGlsZShvKTthLnZhbHVlPXQuc2xpY2UoZCsxLGkpLGEuc291cmNlRW5kSW5kZXg9YS51bmNsb3NlZD9pOmkrMSxlLnB1c2goYSksZD1pKzEscD10LmNoYXJDb2RlQXQoZCl9ZWxzZSBpZihwPT09eXImJnQuY2hhckNvZGVBdChkKzEpPT09QXMpaT10LmluZGV4T2YoIiovIixkKSxhPXt0eXBlOiJjb21tZW50Iixzb3VyY2VJbmRleDpkLHNvdXJjZUVuZEluZGV4OmkrMn0saT09PS0xJiYoYS51bmNsb3NlZD0hMCxpPXQubGVuZ3RoLGEuc291cmNlRW5kSW5kZXg9aSksYS52YWx1ZT10LnNsaWNlKGQrMixpKSxlLnB1c2goYSksZD1pKzIscD10LmNoYXJDb2RlQXQoZCk7ZWxzZSBpZigocD09PXlyfHxwPT09QXMpJiZ5JiZ5LnR5cGU9PT0iZnVuY3Rpb24iKWE9dFtkXSxlLnB1c2goe3R5cGU6IndvcmQiLHNvdXJjZUluZGV4OmQtay5sZW5ndGgsc291cmNlRW5kSW5kZXg6ZCthLmxlbmd0aCx2YWx1ZTphfSksZCs9MSxwPXQuY2hhckNvZGVBdChkKTtlbHNlIGlmKHA9PT15cnx8cD09PU5sfHxwPT09QmwpYT10W2RdLGUucHVzaCh7dHlwZToiZGl2Iixzb3VyY2VJbmRleDpkLWsubGVuZ3RoLHNvdXJjZUVuZEluZGV4OmQrYS5sZW5ndGgsdmFsdWU6YSxiZWZvcmU6ayxhZnRlcjoiIn0pLGs9IiIsZCs9MSxwPXQuY2hhckNvZGVBdChkKTtlbHNlIGlmKHFsPT09cCl7aT1kO2RvIGkrPTEscD10LmNoYXJDb2RlQXQoaSk7d2hpbGUocDw9MzIpO2lmKGY9ZCxhPXt0eXBlOiJmdW5jdGlvbiIsc291cmNlSW5kZXg6ZC13Lmxlbmd0aCx2YWx1ZTp3LGJlZm9yZTp0LnNsaWNlKGYrMSxpKX0sZD1pLHc9PT0idXJsIiYmcCE9PVNzJiZwIT09TGwpe2ktPTE7ZG8gaWYobz0hMSxpPXQuaW5kZXhPZigiKSIsaSsxKSx+aSlmb3IobD1pO3QuY2hhckNvZGVBdChsLTEpPT09TWw7KWwtPTEsbz0hbztlbHNlIHQrPSIpIixpPXQubGVuZ3RoLTEsYS51bmNsb3NlZD0hMDt3aGlsZShvKTtjPWk7ZG8gYy09MSxwPXQuY2hhckNvZGVBdChjKTt3aGlsZShwPD0zMik7ZjxjPyhkIT09YysxP2Eubm9kZXM9W3t0eXBlOiJ3b3JkIixzb3VyY2VJbmRleDpkLHNvdXJjZUVuZEluZGV4OmMrMSx2YWx1ZTp0LnNsaWNlKGQsYysxKX1dOmEubm9kZXM9W10sYS51bmNsb3NlZCYmYysxIT09aT8oYS5hZnRlcj0iIixhLm5vZGVzLnB1c2goe3R5cGU6InNwYWNlIixzb3VyY2VJbmRleDpjKzEsc291cmNlRW5kSW5kZXg6aSx2YWx1ZTp0LnNsaWNlKGMrMSxpKX0pKTooYS5hZnRlcj10LnNsaWNlKGMrMSxpKSxhLnNvdXJjZUVuZEluZGV4PWkpKTooYS5hZnRlcj0iIixhLm5vZGVzPVtdKSxkPWkrMSxhLnNvdXJjZUVuZEluZGV4PWEudW5jbG9zZWQ/aTpkLHA9dC5jaGFyQ29kZUF0KGQpLGUucHVzaChhKX1lbHNlIHYrPTEsYS5hZnRlcj0iIixhLnNvdXJjZUVuZEluZGV4PWQrMSxlLnB1c2goYSksYi5wdXNoKGEpLGU9YS5ub2Rlcz1bXSx5PWE7dz0iIn1lbHNlIGlmKCRsPT09cCYmdilkKz0xLHA9dC5jaGFyQ29kZUF0KGQpLHkuYWZ0ZXI9Uyx5LnNvdXJjZUVuZEluZGV4Kz1TLmxlbmd0aCxTPSIiLHYtPTEsYltiLmxlbmd0aC0xXS5zb3VyY2VFbmRJbmRleD1kLGIucG9wKCkseT1iW3ZdLGU9eS5ub2RlcztlbHNle2k9ZDtkbyBwPT09TWwmJihpKz0xKSxpKz0xLHA9dC5jaGFyQ29kZUF0KGkpO3doaWxlKGk8aCYmIShwPD0zMnx8cD09PVNzfHxwPT09TGx8fHA9PT1ObHx8cD09PUJsfHxwPT09eXJ8fHA9PT1xbHx8cD09PUFzJiZ5JiZ5LnR5cGU9PT0iZnVuY3Rpb24iJiYhMHx8cD09PXlyJiZ5LnR5cGU9PT0iZnVuY3Rpb24iJiYhMHx8cD09PSRsJiZ2KSk7YT10LnNsaWNlKGQsaSkscWw9PT1wP3c9YTooTTI9PT1hLmNoYXJDb2RlQXQoMCl8fE4yPT09YS5jaGFyQ29kZUF0KDApKSYmQjI9PT1hLmNoYXJDb2RlQXQoMSkmJkYyLnRlc3QoYS5zbGljZSgyKSk/ZS5wdXNoKHt0eXBlOiJ1bmljb2RlLXJhbmdlIixzb3VyY2VJbmRleDpkLHNvdXJjZUVuZEluZGV4OmksdmFsdWU6YX0pOmUucHVzaCh7dHlwZToid29yZCIsc291cmNlSW5kZXg6ZCxzb3VyY2VFbmRJbmRleDppLHZhbHVlOmF9KSxkPWl9Zm9yKGQ9Yi5sZW5ndGgtMTtkO2QtPTEpYltkXS51bmNsb3NlZD0hMCxiW2RdLnNvdXJjZUVuZEluZGV4PXQubGVuZ3RoO3JldHVybiBiWzBdLm5vZGVzfX0pO3ZhciBLZz14KChhcSxZZyk9Pnt1KCk7WWcuZXhwb3J0cz1mdW5jdGlvbiByKGUsdCxpKXt2YXIgbixzLGEsbztmb3Iobj0wLHM9ZS5sZW5ndGg7bjxzO24rPTEpYT1lW25dLGl8fChvPXQoYSxuLGUpKSxvIT09ITEmJmEudHlwZT09PSJmdW5jdGlvbiImJkFycmF5LmlzQXJyYXkoYS5ub2RlcykmJnIoYS5ub2Rlcyx0LGkpLGkmJnQoYSxuLGUpfX0pO3ZhciBleT14KChvcSxKZyk9Pnt1KCk7ZnVuY3Rpb24gWGcocixlKXt2YXIgdD1yLnR5cGUsaT1yLnZhbHVlLG4scztyZXR1cm4gZSYmKHM9ZShyKSkhPT12b2lkIDA/czp0PT09IndvcmQifHx0PT09InNwYWNlIj9pOnQ9PT0ic3RyaW5nIj8obj1yLnF1b3RlfHwiIixuK2krKHIudW5jbG9zZWQ/IiI6bikpOnQ9PT0iY29tbWVudCI/Ii8qIitpKyhyLnVuY2xvc2VkPyIiOiIqLyIpOnQ9PT0iZGl2Ij8oci5iZWZvcmV8fCIiKStpKyhyLmFmdGVyfHwiIik6QXJyYXkuaXNBcnJheShyLm5vZGVzKT8obj1aZyhyLm5vZGVzLGUpLHQhPT0iZnVuY3Rpb24iP246aSsiKCIrKHIuYmVmb3JlfHwiIikrbisoci5hZnRlcnx8IiIpKyhyLnVuY2xvc2VkPyIiOiIpIikpOml9ZnVuY3Rpb24gWmcocixlKXt2YXIgdCxpO2lmKEFycmF5LmlzQXJyYXkocikpe2Zvcih0PSIiLGk9ci5sZW5ndGgtMTt+aTtpLT0xKXQ9WGcocltpXSxlKSt0O3JldHVybiB0fXJldHVybiBYZyhyLGUpfUpnLmV4cG9ydHM9Wmd9KTt2YXIgcnk9eCgobHEsdHkpPT57dSgpO3ZhciBDcz0iLSIuY2hhckNvZGVBdCgwKSxfcz0iKyIuY2hhckNvZGVBdCgwKSxGbD0iLiIuY2hhckNvZGVBdCgwKSxqMj0iZSIuY2hhckNvZGVBdCgwKSx6Mj0iRSIuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBVMihyKXt2YXIgZT1yLmNoYXJDb2RlQXQoMCksdDtpZihlPT09X3N8fGU9PT1Dcyl7aWYodD1yLmNoYXJDb2RlQXQoMSksdD49NDgmJnQ8PTU3KXJldHVybiEwO3ZhciBpPXIuY2hhckNvZGVBdCgyKTtyZXR1cm4gdD09PUZsJiZpPj00OCYmaTw9NTd9cmV0dXJuIGU9PT1GbD8odD1yLmNoYXJDb2RlQXQoMSksdD49NDgmJnQ8PTU3KTplPj00OCYmZTw9NTd9dHkuZXhwb3J0cz1mdW5jdGlvbihyKXt2YXIgZT0wLHQ9ci5sZW5ndGgsaSxuLHM7aWYodD09PTB8fCFVMihyKSlyZXR1cm4hMTtmb3IoaT1yLmNoYXJDb2RlQXQoZSksKGk9PT1fc3x8aT09PUNzKSYmZSsrO2U8dCYmKGk9ci5jaGFyQ29kZUF0KGUpLCEoaTw0OHx8aT41NykpOyllKz0xO2lmKGk9ci5jaGFyQ29kZUF0KGUpLG49ci5jaGFyQ29kZUF0KGUrMSksaT09PUZsJiZuPj00OCYmbjw9NTcpZm9yKGUrPTI7ZTx0JiYoaT1yLmNoYXJDb2RlQXQoZSksIShpPDQ4fHxpPjU3KSk7KWUrPTE7aWYoaT1yLmNoYXJDb2RlQXQoZSksbj1yLmNoYXJDb2RlQXQoZSsxKSxzPXIuY2hhckNvZGVBdChlKzIpLChpPT09ajJ8fGk9PT16MikmJihuPj00OCYmbjw9NTd8fChuPT09X3N8fG49PT1DcykmJnM+PTQ4JiZzPD01NykpZm9yKGUrPW49PT1fc3x8bj09PUNzPzM6MjtlPHQmJihpPXIuY2hhckNvZGVBdChlKSwhKGk8NDh8fGk+NTcpKTspZSs9MTtyZXR1cm57bnVtYmVyOnIuc2xpY2UoMCxlKSx1bml0OnIuc2xpY2UoZSl9fX0pO3ZhciBheT14KCh1cSxzeSk9Pnt1KCk7dmFyIFYyPVFnKCksaXk9S2coKSxueT1leSgpO2Z1bmN0aW9uICR0KHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgJHQ/KHRoaXMubm9kZXM9VjIociksdGhpcyk6bmV3ICR0KHIpfSR0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMubm9kZXMpP255KHRoaXMubm9kZXMpOiIifTskdC5wcm90b3R5cGUud2Fsaz1mdW5jdGlvbihyLGUpe3JldHVybiBpeSh0aGlzLm5vZGVzLHIsZSksdGhpc307JHQudW5pdD1yeSgpOyR0LndhbGs9aXk7JHQuc3RyaW5naWZ5PW55O3N5LmV4cG9ydHM9JHR9KTtmdW5jdGlvbiB6bChyKXtyZXR1cm4gdHlwZW9mIHI9PSJvYmplY3QiJiZyIT09bnVsbH1mdW5jdGlvbiBIMihyLGUpe2xldCB0PWt0KGUpO2RvIGlmKHQucG9wKCksKDAsTWkuZGVmYXVsdCkocix0KSE9PXZvaWQgMClicmVhazt3aGlsZSh0Lmxlbmd0aCk7cmV0dXJuIHQubGVuZ3RoP3Q6dm9pZCAwfWZ1bmN0aW9uIGJyKHIpe3JldHVybiB0eXBlb2Ygcj09InN0cmluZyI/cjpyLnJlZHVjZSgoZSx0LGkpPT50LmluY2x1ZGVzKCIuIik/YCR7ZX1bJHt0fV1gOmk9PT0wP3Q6YCR7ZX0uJHt0fWAsIiIpfWZ1bmN0aW9uIGx5KHIpe3JldHVybiByLm1hcChlPT5gJyR7ZX0nYCkuam9pbigiLCAiKX1mdW5jdGlvbiB1eShyKXtyZXR1cm4gbHkoT2JqZWN0LmtleXMocikpfWZ1bmN0aW9uIFVsKHIsZSx0LGk9e30pe2xldCBuPUFycmF5LmlzQXJyYXkoZSk/YnIoZSk6ZS5yZXBsYWNlKC9eWyciXSt8WyciXSskL2csIiIpLHM9QXJyYXkuaXNBcnJheShlKT9lOmt0KG4pLGE9KDAsTWkuZGVmYXVsdCkoci50aGVtZSxzLHQpO2lmKGE9PT12b2lkIDApe2xldCBsPWAnJHtufScgZG9lcyBub3QgZXhpc3QgaW4geW91ciB0aGVtZSBjb25maWcuYCxjPXMuc2xpY2UoMCwtMSksZj0oMCxNaS5kZWZhdWx0KShyLnRoZW1lLGMpO2lmKHpsKGYpKXtsZXQgZD1PYmplY3Qua2V5cyhmKS5maWx0ZXIoaD0+VWwocixbLi4uYyxoXSkuaXNWYWxpZCkscD0oMCxveS5kZWZhdWx0KShzW3MubGVuZ3RoLTFdLGQpO3A/bCs9YCBEaWQgeW91IG1lYW4gJyR7YnIoWy4uLmMscF0pfSc/YDpkLmxlbmd0aD4wJiYobCs9YCAnJHticihjKX0nIGhhcyB0aGUgZm9sbG93aW5nIHZhbGlkIGtleXM6ICR7bHkoZCl9YCl9ZWxzZXtsZXQgZD1IMihyLnRoZW1lLG4pO2lmKGQpe2xldCBwPSgwLE1pLmRlZmF1bHQpKHIudGhlbWUsZCk7emwocCk/bCs9YCAnJHticihkKX0nIGhhcyB0aGUgZm9sbG93aW5nIGtleXM6ICR7dXkocCl9YDpsKz1gICcke2JyKGQpfScgaXMgbm90IGFuIG9iamVjdC5gfWVsc2UgbCs9YCBZb3VyIHRoZW1lIGhhcyB0aGUgZm9sbG93aW5nIHRvcC1sZXZlbCBrZXlzOiAke3V5KHIudGhlbWUpfWB9cmV0dXJue2lzVmFsaWQ6ITEsZXJyb3I6bH19aWYoISh0eXBlb2YgYT09InN0cmluZyJ8fHR5cGVvZiBhPT0ibnVtYmVyInx8dHlwZW9mIGE9PSJmdW5jdGlvbiJ8fGEgaW5zdGFuY2VvZiBTdHJpbmd8fGEgaW5zdGFuY2VvZiBOdW1iZXJ8fEFycmF5LmlzQXJyYXkoYSkpKXtsZXQgbD1gJyR7bn0nIHdhcyBmb3VuZCBidXQgZG9lcyBub3QgcmVzb2x2ZSB0byBhIHN0cmluZy5gO2lmKHpsKGEpKXtsZXQgYz1PYmplY3Qua2V5cyhhKS5maWx0ZXIoZj0+VWwocixbLi4ucyxmXSkuaXNWYWxpZCk7Yy5sZW5ndGgmJihsKz1gIERpZCB5b3UgbWVhbiBzb21ldGhpbmcgbGlrZSAnJHticihbLi4ucyxjWzBdXSl9Jz9gKX1yZXR1cm57aXNWYWxpZDohMSxlcnJvcjpsfX1sZXRbb109cztyZXR1cm57aXNWYWxpZDohMCx2YWx1ZTptdChvKShhLGkpfX1mdW5jdGlvbiBXMihyLGUsdCl7ZT1lLm1hcChuPT5meShyLG4sdCkpO2xldCBpPVsiIl07Zm9yKGxldCBuIG9mIGUpbi50eXBlPT09ImRpdiImJm4udmFsdWU9PT0iLCI/aS5wdXNoKCIiKTppW2kubGVuZ3RoLTFdKz1qbC5kZWZhdWx0LnN0cmluZ2lmeShuKTtyZXR1cm4gaX1mdW5jdGlvbiBmeShyLGUsdCl7aWYoZS50eXBlPT09ImZ1bmN0aW9uIiYmdFtlLnZhbHVlXSE9PXZvaWQgMCl7bGV0IGk9VzIocixlLm5vZGVzLHQpO2UudHlwZT0id29yZCIsZS52YWx1ZT10W2UudmFsdWVdKHIsLi4uaSl9cmV0dXJuIGV9ZnVuY3Rpb24gRzIocixlLHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5zb21lKG49PmUuaW5jbHVkZXMoYCR7bn0oYCkpPygwLGpsLmRlZmF1bHQpKGUpLndhbGsobj0+e2Z5KHIsbix0KX0pLnRvU3RyaW5nKCk6ZX1mdW5jdGlvbipZMihyKXtyPXIucmVwbGFjZSgvXlsnIl0rfFsnIl0rJC9nLCIiKTtsZXQgZT1yLm1hdGNoKC9eKFteXHNdKykoPyFbXlxbXSpcXSkoPzpccypcL1xzKihbXlwvXHNdKykpJC8pLHQ7eWllbGRbcix2b2lkIDBdLGUmJihyPWVbMV0sdD1lWzJdLHlpZWxkW3IsdF0pfWZ1bmN0aW9uIEsyKHIsZSx0KXtsZXQgaT1BcnJheS5mcm9tKFkyKGUpKS5tYXAoKFtuLHNdKT0+T2JqZWN0LmFzc2lnbihVbChyLG4sdCx7b3BhY2l0eVZhbHVlOnN9KSx7cmVzb2x2ZWRQYXRoOm4sYWxwaGE6c30pKTtyZXR1cm4gaS5maW5kKG49Pm4uaXNWYWxpZCk/P2lbMF19ZnVuY3Rpb24gY3kocil7bGV0IGU9ci50YWlsd2luZENvbmZpZyx0PXt0aGVtZTooaSxuLC4uLnMpPT57bGV0e2lzVmFsaWQ6YSx2YWx1ZTpvLGVycm9yOmwsYWxwaGE6Y309SzIoZSxuLHMubGVuZ3RoP3M6dm9pZCAwKTtpZighYSl7bGV0IHA9aS5wYXJlbnQsaD1wPy5yYXdzLnRhaWx3aW5kPy5jYW5kaWRhdGU7aWYocCYmaCE9PXZvaWQgMCl7ci5tYXJrSW52YWxpZFV0aWxpdHlOb2RlKHApLHAucmVtb3ZlKCksRy53YXJuKCJpbnZhbGlkLXRoZW1lLWtleS1pbi1jbGFzcyIsW2BUaGUgdXRpbGl0eSBcYCR7aH1cYCBjb250YWlucyBhbiBpbnZhbGlkIHRoZW1lIHZhbHVlIGFuZCB3YXMgbm90IGdlbmVyYXRlZC5gXSk7cmV0dXJufXRocm93IGkuZXJyb3IobCl9bGV0IGY9WHQobyksZD1mIT09dm9pZCAwJiZ0eXBlb2YgZj09ImZ1bmN0aW9uIjtyZXR1cm4oYyE9PXZvaWQgMHx8ZCkmJihjPT09dm9pZCAwJiYoYz0xKSxvPUplKGYsYyxmKSksb30sc2NyZWVuOihpLG4pPT57bj1uLnJlcGxhY2UoL15bJyJdKy9nLCIiKS5yZXBsYWNlKC9bJyJdKyQvZywiIik7bGV0IGE9UnQoZS50aGVtZS5zY3JlZW5zKS5maW5kKCh7bmFtZTpvfSk9Pm89PT1uKTtpZighYSl0aHJvdyBpLmVycm9yKGBUaGUgJyR7bn0nIHNjcmVlbiBkb2VzIG5vdCBleGlzdCBpbiB5b3VyIHRoZW1lLmApO3JldHVybiBUdChhKX19O3JldHVybiBpPT57aS53YWxrKG49PntsZXQgcz1RMltuLnR5cGVdO3MhPT12b2lkIDAmJihuW3NdPUcyKG4sbltzXSx0KSl9KX19dmFyIE1pLG95LGpsLFEyLHB5PVAoKCk9Pnt1KCk7TWk9cGUoUmEoKSksb3k9cGUoV2coKSk7Q2koKTtqbD1wZShheSgpKTtabigpO1luKCk7WWkoKTtMcigpO0ZyKCk7QmUoKTtRMj17YXRydWxlOiJwYXJhbXMiLGRlY2w6InZhbHVlIn19KTtmdW5jdGlvbiBkeSh7dGFpbHdpbmRDb25maWc6e3RoZW1lOnJ9fSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Uud2Fsa0F0UnVsZXMoInNjcmVlbiIsdD0+e2xldCBpPXQucGFyYW1zLHM9UnQoci5zY3JlZW5zKS5maW5kKCh7bmFtZTphfSk9PmE9PT1pKTtpZighcyl0aHJvdyB0LmVycm9yKGBObyBcYCR7aX1cYCBzY3JlZW4gZm91bmQuYCk7dC5uYW1lPSJtZWRpYSIsdC5wYXJhbXM9VHQocyl9KX19dmFyIGh5PVAoKCk9Pnt1KCk7Wm4oKTtZbigpfSk7ZnVuY3Rpb24gWDIocil7bGV0IGU9ci5maWx0ZXIobz0+by50eXBlIT09InBzZXVkbyJ8fG8ubm9kZXMubGVuZ3RoPjA/ITA6by52YWx1ZS5zdGFydHNXaXRoKCI6OiIpfHxbIjpiZWZvcmUiLCI6YWZ0ZXIiLCI6Zmlyc3QtbGluZSIsIjpmaXJzdC1sZXR0ZXIiXS5pbmNsdWRlcyhvLnZhbHVlKSkucmV2ZXJzZSgpLHQ9bmV3IFNldChbInRhZyIsImNsYXNzIiwiaWQiLCJhdHRyaWJ1dGUiXSksaT1lLmZpbmRJbmRleChvPT50LmhhcyhvLnR5cGUpKTtpZihpPT09LTEpcmV0dXJuIGUucmV2ZXJzZSgpLmpvaW4oIiIpLnRyaW0oKTtsZXQgbj1lW2ldLHM9bXlbbi50eXBlXT9teVtuLnR5cGVdKG4pOm47ZT1lLnNsaWNlKDAsaSk7bGV0IGE9ZS5maW5kSW5kZXgobz0+by50eXBlPT09ImNvbWJpbmF0b3IiJiZvLnZhbHVlPT09Ij4iKTtyZXR1cm4gYSE9PS0xJiYoZS5zcGxpY2UoMCxhKSxlLnVuc2hpZnQoRXMuZGVmYXVsdC51bml2ZXJzYWwoKSkpLFtzLC4uLmUucmV2ZXJzZSgpXS5qb2luKCIiKS50cmltKCl9ZnVuY3Rpb24gSjIocil7cmV0dXJuIFZsLmhhcyhyKXx8Vmwuc2V0KHIsWjIudHJhbnNmb3JtU3luYyhyKSksVmwuZ2V0KHIpfWZ1bmN0aW9uIEhsKHt0YWlsd2luZENvbmZpZzpyfSl7cmV0dXJuIGU9PntsZXQgdD1uZXcgTWFwLGk9bmV3IFNldDtpZihlLndhbGtBdFJ1bGVzKCJkZWZhdWx0cyIsbj0+e2lmKG4ubm9kZXMmJm4ubm9kZXMubGVuZ3RoPjApe2kuYWRkKG4pO3JldHVybn1sZXQgcz1uLnBhcmFtczt0LmhhcyhzKXx8dC5zZXQocyxuZXcgU2V0KSx0LmdldChzKS5hZGQobi5wYXJlbnQpLG4ucmVtb3ZlKCl9KSx3ZShyLCJvcHRpbWl6ZVVuaXZlcnNhbERlZmF1bHRzIikpZm9yKGxldCBuIG9mIGkpe2xldCBzPW5ldyBNYXAsYT10LmdldChuLnBhcmFtcyk/P1tdO2ZvcihsZXQgbyBvZiBhKWZvcihsZXQgbCBvZiBKMihvLnNlbGVjdG9yKSl7bGV0IGM9bC5pbmNsdWRlcygiOi0iKXx8bC5pbmNsdWRlcygiOjotIil8fGwuaW5jbHVkZXMoIjpoYXMiKT9sOiJfX0RFRkFVTFRfXyIsZj1zLmdldChjKT8/bmV3IFNldDtzLnNldChjLGYpLGYuYWRkKGwpfWlmKHMuc2l6ZT09PTApe24ucmVtb3ZlKCk7Y29udGludWV9Zm9yKGxldFssb11vZiBzKXtsZXQgbD1lZS5ydWxlKHtzb3VyY2U6bi5zb3VyY2V9KTtsLnNlbGVjdG9ycz1bLi4ub10sbC5hcHBlbmQobi5ub2Rlcy5tYXAoYz0+Yy5jbG9uZSgpKSksbi5iZWZvcmUobCl9bi5yZW1vdmUoKX1lbHNlIGlmKGkuc2l6ZSl7bGV0IG49ZWUucnVsZSh7c2VsZWN0b3JzOlsiKiIsIjo6YmVmb3JlIiwiOjphZnRlciJdfSk7Zm9yKGxldCBhIG9mIGkpbi5hcHBlbmQoYS5ub2Rlcyksbi5wYXJlbnR8fGEuYmVmb3JlKG4pLG4uc291cmNlfHwobi5zb3VyY2U9YS5zb3VyY2UpLGEucmVtb3ZlKCk7bGV0IHM9bi5jbG9uZSh7c2VsZWN0b3JzOlsiOjpiYWNrZHJvcCJdfSk7bi5hZnRlcihzKX19fXZhciBFcyxteSxaMixWbCxneT1QKCgpPT57dSgpO090KCk7RXM9cGUoaXQoKSk7Y3QoKTtteT17aWQocil7cmV0dXJuIEVzLmRlZmF1bHQuYXR0cmlidXRlKHthdHRyaWJ1dGU6ImlkIixvcGVyYXRvcjoiPSIsdmFsdWU6ci52YWx1ZSxxdW90ZU1hcms6JyInfSl9fTtaMj0oMCxFcy5kZWZhdWx0KShyPT5yLm1hcChlPT57bGV0IHQ9ZS5zcGxpdChpPT5pLnR5cGU9PT0iY29tYmluYXRvciImJmkudmFsdWU9PT0iICIpLnBvcCgpO3JldHVybiBYMih0KX0pKSxWbD1uZXcgTWFwfSk7ZnVuY3Rpb24gV2woKXtmdW5jdGlvbiByKGUpe2xldCB0PW51bGw7ZS5lYWNoKGk9PntpZighZU8uaGFzKGkudHlwZSkpe3Q9bnVsbDtyZXR1cm59aWYodD09PW51bGwpe3Q9aTtyZXR1cm59bGV0IG49eXlbaS50eXBlXTtpLnR5cGU9PT0iYXRydWxlIiYmaS5uYW1lPT09ImZvbnQtZmFjZSI/dD1pOm4uZXZlcnkocz0+KGlbc10/PyIiKS5yZXBsYWNlKC9ccysvZywiICIpPT09KHRbc10/PyIiKS5yZXBsYWNlKC9ccysvZywiICIpKT8oaS5ub2RlcyYmdC5hcHBlbmQoaS5ub2RlcyksaS5yZW1vdmUoKSk6dD1pfSksZS5lYWNoKGk9PntpLnR5cGU9PT0iYXRydWxlIiYmcihpKX0pfXJldHVybiBlPT57cihlKX19dmFyIHl5LGVPLGJ5PVAoKCk9Pnt1KCk7eXk9e2F0cnVsZTpbIm5hbWUiLCJwYXJhbXMiXSxydWxlOlsic2VsZWN0b3IiXX0sZU89bmV3IFNldChPYmplY3Qua2V5cyh5eSkpfSk7ZnVuY3Rpb24gR2woKXtyZXR1cm4gcj0+e3Iud2Fsa1J1bGVzKGU9PntsZXQgdD1uZXcgTWFwLGk9bmV3IFNldChbXSksbj1uZXcgTWFwO2Uud2Fsa0RlY2xzKHM9PntpZihzLnBhcmVudD09PWUpe2lmKHQuaGFzKHMucHJvcCkpe2lmKHQuZ2V0KHMucHJvcCkudmFsdWU9PT1zLnZhbHVlKXtpLmFkZCh0LmdldChzLnByb3ApKSx0LnNldChzLnByb3Ascyk7cmV0dXJufW4uaGFzKHMucHJvcCl8fG4uc2V0KHMucHJvcCxuZXcgU2V0KSxuLmdldChzLnByb3ApLmFkZCh0LmdldChzLnByb3ApKSxuLmdldChzLnByb3ApLmFkZChzKX10LnNldChzLnByb3Ascyl9fSk7Zm9yKGxldCBzIG9mIGkpcy5yZW1vdmUoKTtmb3IobGV0IHMgb2Ygbi52YWx1ZXMoKSl7bGV0IGE9bmV3IE1hcDtmb3IobGV0IG8gb2Ygcyl7bGV0IGw9ck8oby52YWx1ZSk7bCE9PW51bGwmJihhLmhhcyhsKXx8YS5zZXQobCxuZXcgU2V0KSxhLmdldChsKS5hZGQobykpfWZvcihsZXQgbyBvZiBhLnZhbHVlcygpKXtsZXQgbD1BcnJheS5mcm9tKG8pLnNsaWNlKDAsLTEpO2ZvcihsZXQgYyBvZiBsKWMucmVtb3ZlKCl9fX0pfX1mdW5jdGlvbiByTyhyKXtsZXQgZT0vXi0/XGQqLj9cZCsoW1x3JV0rKT8kL2cuZXhlYyhyKTtyZXR1cm4gZT9lWzFdPz90TzpudWxsfXZhciB0Tyx3eT1QKCgpPT57dSgpO3RPPVN5bWJvbCgidW5pdGxlc3MtbnVtYmVyIil9KTtmdW5jdGlvbiBpTyhyKXtpZighci53YWxrQXRSdWxlcylyZXR1cm47bGV0IGU9bmV3IFNldDtpZihyLndhbGtBdFJ1bGVzKCJhcHBseSIsdD0+e2UuYWRkKHQucGFyZW50KX0pLGUuc2l6ZSE9PTApZm9yKGxldCB0IG9mIGUpe2xldCBpPVtdLG49W107Zm9yKGxldCBzIG9mIHQubm9kZXMpcy50eXBlPT09ImF0cnVsZSImJnMubmFtZT09PSJhcHBseSI/KG4ubGVuZ3RoPjAmJihpLnB1c2gobiksbj1bXSksaS5wdXNoKFtzXSkpOm4ucHVzaChzKTtpZihuLmxlbmd0aD4wJiZpLnB1c2gobiksaS5sZW5ndGghPT0xKXtmb3IobGV0IHMgb2ZbLi4uaV0ucmV2ZXJzZSgpKXtsZXQgYT10LmNsb25lKHtub2RlczpbXX0pO2EuYXBwZW5kKHMpLHQuYWZ0ZXIoYSl9dC5yZW1vdmUoKX19fWZ1bmN0aW9uIE9zKCl7cmV0dXJuIHI9PntpTyhyKX19dmFyIHZ5PVAoKCk9Pnt1KCl9KTtmdW5jdGlvbiBUcyhyKXtyZXR1cm4gYXN5bmMgZnVuY3Rpb24oZSx0KXtsZXR7dGFpbHdpbmREaXJlY3RpdmVzOmksYXBwbHlEaXJlY3RpdmVzOm59PU9sKGUpO09zKCkoZSx0KTtsZXQgcz1yKHt0YWlsd2luZERpcmVjdGl2ZXM6aSxhcHBseURpcmVjdGl2ZXM6bixyZWdpc3RlckRlcGVuZGVuY3koYSl7dC5tZXNzYWdlcy5wdXNoKHtwbHVnaW46InRhaWx3aW5kY3NzIixwYXJlbnQ6dC5vcHRzLmZyb20sLi4uYX0pfSxjcmVhdGVDb250ZXh0KGEsbyl7cmV0dXJuIGlsKGEsbyxlKX19KShlLHQpO2lmKHMudGFpbHdpbmRDb25maWcuc2VwYXJhdG9yPT09Ii0iKXRocm93IG5ldyBFcnJvcigiVGhlICctJyBjaGFyYWN0ZXIgY2Fubm90IGJlIHVzZWQgYXMgYSBjdXN0b20gc2VwYXJhdG9yIGluIEpJVCBtb2RlIGR1ZSB0byBwYXJzaW5nIGFtYmlndWl0eS4gUGxlYXNlIHVzZSBhbm90aGVyIGNoYXJhY3RlciBsaWtlICdfJyBpbnN0ZWFkLiIpO1JmKHMudGFpbHdpbmRDb25maWcpLGF3YWl0IFBsKHMpKGUsdCksT3MoKShlLHQpLERsKHMpKGUsdCksY3kocykoZSx0KSxkeShzKShlLHQpLEhsKHMpKGUsdCksV2wocykoZSx0KSxHbChzKShlLHQpfX12YXIgeHk9UCgoKT0+e3UoKTtPZygpO0JnKCk7SGcoKTtweSgpO2h5KCk7Z3koKTtieSgpO3d5KCk7dnkoKTtPaSgpO2N0KCl9KTtmdW5jdGlvbiBreShyLGUpe2xldCB0PW51bGwsaT1udWxsO3JldHVybiByLndhbGtBdFJ1bGVzKCJjb25maWciLG49PntpZihpPW4uc291cmNlPy5pbnB1dC5maWxlPz9lLm9wdHMuZnJvbT8/bnVsbCxpPT09bnVsbCl0aHJvdyBuLmVycm9yKCJUaGUgYEBjb25maWdgIGRpcmVjdGl2ZSBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNldHRpbmcgYGZyb21gIGluIHlvdXIgUG9zdENTUyBjb25maWcuIik7aWYodCl0aHJvdyBuLmVycm9yKCJPbmx5IG9uZSBgQGNvbmZpZ2AgZGlyZWN0aXZlIGlzIGFsbG93ZWQgcGVyIGZpbGUuIik7bGV0IHM9bi5wYXJhbXMubWF0Y2goLyhbJyJdKSguKj8pXDEvKTtpZighcyl0aHJvdyBuLmVycm9yKCJBIHBhdGggaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgYEBjb25maWdgIGRpcmVjdGl2ZS4iKTtsZXQgYT1zWzJdO2lmKG1lLmlzQWJzb2x1dGUoYSkpdGhyb3cgbi5lcnJvcigiVGhlIGBAY29uZmlnYCBkaXJlY3RpdmUgY2Fubm90IGJlIHVzZWQgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoLiIpO2lmKHQ9bWUucmVzb2x2ZShtZS5kaXJuYW1lKGkpLGEpLCFiZS5leGlzdHNTeW5jKHQpKXRocm93IG4uZXJyb3IoYFRoZSBjb25maWcgZmlsZSBhdCAiJHthfSIgZG9lcyBub3QgZXhpc3QuIE1ha2Ugc3VyZSB0aGUgcGF0aCBpcyBjb3JyZWN0IGFuZCB0aGUgZmlsZSBleGlzdHMuYCk7bi5yZW1vdmUoKX0pLHR8fG51bGx9dmFyIFN5PVAoKCk9Pnt1KCk7ZnQoKTtldCgpfSk7dmFyIEF5PXgoKFdxLFFsKT0+e3UoKTtFZygpO3h5KCk7SXQoKTtTeSgpO1FsLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue3Bvc3Rjc3NQbHVnaW46InRhaWx3aW5kY3NzIixwbHVnaW5zOltaZS5ERUJVRyYmZnVuY3Rpb24odCl7cmV0dXJuIGNvbnNvbGUubG9nKGAKYCksY29uc29sZS50aW1lKCJKSVQgVE9UQUwiKSx0fSxhc3luYyBmdW5jdGlvbih0LGkpe2U9a3kodCxpKT8/ZTtsZXQgbj1FbChlKTtpZih0LnR5cGU9PT0iZG9jdW1lbnQiKXtsZXQgcz10Lm5vZGVzLmZpbHRlcihhPT5hLnR5cGU9PT0icm9vdCIpO2ZvcihsZXQgYSBvZiBzKWEudHlwZT09PSJyb290IiYmYXdhaXQgVHMobikoYSxpKTtyZXR1cm59YXdhaXQgVHMobikodCxpKX0sWmUuREVCVUcmJmZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLnRpbWVFbmQoIkpJVCBUT1RBTCIpLGNvbnNvbGUubG9nKGAKYCksdH1dLmZpbHRlcihCb29sZWFuKX19O1FsLmV4cG9ydHMucG9zdGNzcz0hMH0pO3ZhciBfeT14KChHcSxDeSk9Pnt1KCk7Q3kuZXhwb3J0cz1BeSgpfSk7dmFyIFlsPXgoKFFxLEV5KT0+e3UoKTtFeS5leHBvcnRzPSgpPT5bImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTE0IiwiY2hyb21lIDExMyIsImNocm9tZSAxMDkiLCJlZGdlIDExNCIsImZpcmVmb3ggMTE0IiwiaW9zX3NhZiAxNi41IiwiaW9zX3NhZiAxNi40IiwiaW9zX3NhZiAxNi4zIiwiaW9zX3NhZiAxNi4xIiwib3BlcmEgOTkiLCJzYWZhcmkgMTYuNSIsInNhbXN1bmcgMjEiXX0pO3ZhciBScz17fTtHZShScyx7YWdlbnRzOigpPT5uTyxmZWF0dXJlOigpPT5zT30pO2Z1bmN0aW9uIHNPKCl7cmV0dXJue3N0YXR1czoiY3IiLHRpdGxlOiJDU1MgRmVhdHVyZSBRdWVyaWVzIixzdGF0czp7aWU6eyI2IjoibiIsIjciOiJuIiwiOCI6Im4iLCI5IjoibiIsIjEwIjoibiIsIjExIjoibiIsIjUuNSI6Im4ifSxlZGdlOnsiMTIiOiJ5IiwiMTMiOiJ5IiwiMTQiOiJ5IiwiMTUiOiJ5IiwiMTYiOiJ5IiwiMTciOiJ5IiwiMTgiOiJ5IiwiNzkiOiJ5IiwiODAiOiJ5IiwiODEiOiJ5IiwiODMiOiJ5IiwiODQiOiJ5IiwiODUiOiJ5IiwiODYiOiJ5IiwiODciOiJ5IiwiODgiOiJ5IiwiODkiOiJ5IiwiOTAiOiJ5IiwiOTEiOiJ5IiwiOTIiOiJ5IiwiOTMiOiJ5IiwiOTQiOiJ5IiwiOTUiOiJ5IiwiOTYiOiJ5IiwiOTciOiJ5IiwiOTgiOiJ5IiwiOTkiOiJ5IiwiMTAwIjoieSIsIjEwMSI6InkiLCIxMDIiOiJ5IiwiMTAzIjoieSIsIjEwNCI6InkiLCIxMDUiOiJ5IiwiMTA2IjoieSIsIjEwNyI6InkiLCIxMDgiOiJ5IiwiMTA5IjoieSIsIjExMCI6InkiLCIxMTEiOiJ5IiwiMTEyIjoieSIsIjExMyI6InkiLCIxMTQiOiJ5In0sZmlyZWZveDp7IjIiOiJuIiwiMyI6Im4iLCI0IjoibiIsIjUiOiJuIiwiNiI6Im4iLCI3IjoibiIsIjgiOiJuIiwiOSI6Im4iLCIxMCI6Im4iLCIxMSI6Im4iLCIxMiI6Im4iLCIxMyI6Im4iLCIxNCI6Im4iLCIxNSI6Im4iLCIxNiI6Im4iLCIxNyI6Im4iLCIxOCI6Im4iLCIxOSI6Im4iLCIyMCI6Im4iLCIyMSI6Im4iLCIyMiI6InkiLCIyMyI6InkiLCIyNCI6InkiLCIyNSI6InkiLCIyNiI6InkiLCIyNyI6InkiLCIyOCI6InkiLCIyOSI6InkiLCIzMCI6InkiLCIzMSI6InkiLCIzMiI6InkiLCIzMyI6InkiLCIzNCI6InkiLCIzNSI6InkiLCIzNiI6InkiLCIzNyI6InkiLCIzOCI6InkiLCIzOSI6InkiLCI0MCI6InkiLCI0MSI6InkiLCI0MiI6InkiLCI0MyI6InkiLCI0NCI6InkiLCI0NSI6InkiLCI0NiI6InkiLCI0NyI6InkiLCI0OCI6InkiLCI0OSI6InkiLCI1MCI6InkiLCI1MSI6InkiLCI1MiI6InkiLCI1MyI6InkiLCI1NCI6InkiLCI1NSI6InkiLCI1NiI6InkiLCI1NyI6InkiLCI1OCI6InkiLCI1OSI6InkiLCI2MCI6InkiLCI2MSI6InkiLCI2MiI6InkiLCI2MyI6InkiLCI2NCI6InkiLCI2NSI6InkiLCI2NiI6InkiLCI2NyI6InkiLCI2OCI6InkiLCI2OSI6InkiLCI3MCI6InkiLCI3MSI6InkiLCI3MiI6InkiLCI3MyI6InkiLCI3NCI6InkiLCI3NSI6InkiLCI3NiI6InkiLCI3NyI6InkiLCI3OCI6InkiLCI3OSI6InkiLCI4MCI6InkiLCI4MSI6InkiLCI4MiI6InkiLCI4MyI6InkiLCI4NCI6InkiLCI4NSI6InkiLCI4NiI6InkiLCI4NyI6InkiLCI4OCI6InkiLCI4OSI6InkiLCI5MCI6InkiLCI5MSI6InkiLCI5MiI6InkiLCI5MyI6InkiLCI5NCI6InkiLCI5NSI6InkiLCI5NiI6InkiLCI5NyI6InkiLCI5OCI6InkiLCI5OSI6InkiLCIxMDAiOiJ5IiwiMTAxIjoieSIsIjEwMiI6InkiLCIxMDMiOiJ5IiwiMTA0IjoieSIsIjEwNSI6InkiLCIxMDYiOiJ5IiwiMTA3IjoieSIsIjEwOCI6InkiLCIxMDkiOiJ5IiwiMTEwIjoieSIsIjExMSI6InkiLCIxMTIiOiJ5IiwiMTEzIjoieSIsIjExNCI6InkiLCIxMTUiOiJ5IiwiMTE2IjoieSIsIjExNyI6InkiLCIzLjUiOiJuIiwiMy42IjoibiJ9LGNocm9tZTp7IjQiOiJuIiwiNSI6Im4iLCI2IjoibiIsIjciOiJuIiwiOCI6Im4iLCI5IjoibiIsIjEwIjoibiIsIjExIjoibiIsIjEyIjoibiIsIjEzIjoibiIsIjE0IjoibiIsIjE1IjoibiIsIjE2IjoibiIsIjE3IjoibiIsIjE4IjoibiIsIjE5IjoibiIsIjIwIjoibiIsIjIxIjoibiIsIjIyIjoibiIsIjIzIjoibiIsIjI0IjoibiIsIjI1IjoibiIsIjI2IjoibiIsIjI3IjoibiIsIjI4IjoieSIsIjI5IjoieSIsIjMwIjoieSIsIjMxIjoieSIsIjMyIjoieSIsIjMzIjoieSIsIjM0IjoieSIsIjM1IjoieSIsIjM2IjoieSIsIjM3IjoieSIsIjM4IjoieSIsIjM5IjoieSIsIjQwIjoieSIsIjQxIjoieSIsIjQyIjoieSIsIjQzIjoieSIsIjQ0IjoieSIsIjQ1IjoieSIsIjQ2IjoieSIsIjQ3IjoieSIsIjQ4IjoieSIsIjQ5IjoieSIsIjUwIjoieSIsIjUxIjoieSIsIjUyIjoieSIsIjUzIjoieSIsIjU0IjoieSIsIjU1IjoieSIsIjU2IjoieSIsIjU3IjoieSIsIjU4IjoieSIsIjU5IjoieSIsIjYwIjoieSIsIjYxIjoieSIsIjYyIjoieSIsIjYzIjoieSIsIjY0IjoieSIsIjY1IjoieSIsIjY2IjoieSIsIjY3IjoieSIsIjY4IjoieSIsIjY5IjoieSIsIjcwIjoieSIsIjcxIjoieSIsIjcyIjoieSIsIjczIjoieSIsIjc0IjoieSIsIjc1IjoieSIsIjc2IjoieSIsIjc3IjoieSIsIjc4IjoieSIsIjc5IjoieSIsIjgwIjoieSIsIjgxIjoieSIsIjgzIjoieSIsIjg0IjoieSIsIjg1IjoieSIsIjg2IjoieSIsIjg3IjoieSIsIjg4IjoieSIsIjg5IjoieSIsIjkwIjoieSIsIjkxIjoieSIsIjkyIjoieSIsIjkzIjoieSIsIjk0IjoieSIsIjk1IjoieSIsIjk2IjoieSIsIjk3IjoieSIsIjk4IjoieSIsIjk5IjoieSIsIjEwMCI6InkiLCIxMDEiOiJ5IiwiMTAyIjoieSIsIjEwMyI6InkiLCIxMDQiOiJ5IiwiMTA1IjoieSIsIjEwNiI6InkiLCIxMDciOiJ5IiwiMTA4IjoieSIsIjEwOSI6InkiLCIxMTAiOiJ5IiwiMTExIjoieSIsIjExMiI6InkiLCIxMTMiOiJ5IiwiMTE0IjoieSIsIjExNSI6InkiLCIxMTYiOiJ5IiwiMTE3IjoieSJ9LHNhZmFyaTp7IjQiOiJuIiwiNSI6Im4iLCI2IjoibiIsIjciOiJuIiwiOCI6Im4iLCI5IjoieSIsIjEwIjoieSIsIjExIjoieSIsIjEyIjoieSIsIjEzIjoieSIsIjE0IjoieSIsIjE1IjoieSIsIjE3IjoieSIsIjkuMSI6InkiLCIxMC4xIjoieSIsIjExLjEiOiJ5IiwiMTIuMSI6InkiLCIxMy4xIjoieSIsIjE0LjEiOiJ5IiwiMTUuMSI6InkiLCIxNS4yLTE1LjMiOiJ5IiwiMTUuNCI6InkiLCIxNS41IjoieSIsIjE1LjYiOiJ5IiwiMTYuMCI6InkiLCIxNi4xIjoieSIsIjE2LjIiOiJ5IiwiMTYuMyI6InkiLCIxNi40IjoieSIsIjE2LjUiOiJ5IiwiMTYuNiI6InkiLFRQOiJ5IiwiMy4xIjoibiIsIjMuMiI6Im4iLCI1LjEiOiJuIiwiNi4xIjoibiIsIjcuMSI6Im4ifSxvcGVyYTp7IjkiOiJuIiwiMTEiOiJuIiwiMTIiOiJuIiwiMTUiOiJ5IiwiMTYiOiJ5IiwiMTciOiJ5IiwiMTgiOiJ5IiwiMTkiOiJ5IiwiMjAiOiJ5IiwiMjEiOiJ5IiwiMjIiOiJ5IiwiMjMiOiJ5IiwiMjQiOiJ5IiwiMjUiOiJ5IiwiMjYiOiJ5IiwiMjciOiJ5IiwiMjgiOiJ5IiwiMjkiOiJ5IiwiMzAiOiJ5IiwiMzEiOiJ5IiwiMzIiOiJ5IiwiMzMiOiJ5IiwiMzQiOiJ5IiwiMzUiOiJ5IiwiMzYiOiJ5IiwiMzciOiJ5IiwiMzgiOiJ5IiwiMzkiOiJ5IiwiNDAiOiJ5IiwiNDEiOiJ5IiwiNDIiOiJ5IiwiNDMiOiJ5IiwiNDQiOiJ5IiwiNDUiOiJ5IiwiNDYiOiJ5IiwiNDciOiJ5IiwiNDgiOiJ5IiwiNDkiOiJ5IiwiNTAiOiJ5IiwiNTEiOiJ5IiwiNTIiOiJ5IiwiNTMiOiJ5IiwiNTQiOiJ5IiwiNTUiOiJ5IiwiNTYiOiJ5IiwiNTciOiJ5IiwiNTgiOiJ5IiwiNjAiOiJ5IiwiNjIiOiJ5IiwiNjMiOiJ5IiwiNjQiOiJ5IiwiNjUiOiJ5IiwiNjYiOiJ5IiwiNjciOiJ5IiwiNjgiOiJ5IiwiNjkiOiJ5IiwiNzAiOiJ5IiwiNzEiOiJ5IiwiNzIiOiJ5IiwiNzMiOiJ5IiwiNzQiOiJ5IiwiNzUiOiJ5IiwiNzYiOiJ5IiwiNzciOiJ5IiwiNzgiOiJ5IiwiNzkiOiJ5IiwiODAiOiJ5IiwiODEiOiJ5IiwiODIiOiJ5IiwiODMiOiJ5IiwiODQiOiJ5IiwiODUiOiJ5IiwiODYiOiJ5IiwiODciOiJ5IiwiODgiOiJ5IiwiODkiOiJ5IiwiOTAiOiJ5IiwiOTEiOiJ5IiwiOTIiOiJ5IiwiOTMiOiJ5IiwiOTQiOiJ5IiwiOTUiOiJ5IiwiOTYiOiJ5IiwiOTciOiJ5IiwiOTgiOiJ5IiwiOTkiOiJ5IiwiMTAwIjoieSIsIjEyLjEiOiJ5IiwiOS41LTkuNiI6Im4iLCIxMC4wLTEwLjEiOiJuIiwiMTAuNSI6Im4iLCIxMC42IjoibiIsIjExLjEiOiJuIiwiMTEuNSI6Im4iLCIxMS42IjoibiJ9LGlvc19zYWY6eyI4IjoibiIsIjE3IjoieSIsIjkuMC05LjIiOiJ5IiwiOS4zIjoieSIsIjEwLjAtMTAuMiI6InkiLCIxMC4zIjoieSIsIjExLjAtMTEuMiI6InkiLCIxMS4zLTExLjQiOiJ5IiwiMTIuMC0xMi4xIjoieSIsIjEyLjItMTIuNSI6InkiLCIxMy4wLTEzLjEiOiJ5IiwiMTMuMiI6InkiLCIxMy4zIjoieSIsIjEzLjQtMTMuNyI6InkiLCIxNC4wLTE0LjQiOiJ5IiwiMTQuNS0xNC44IjoieSIsIjE1LjAtMTUuMSI6InkiLCIxNS4yLTE1LjMiOiJ5IiwiMTUuNCI6InkiLCIxNS41IjoieSIsIjE1LjYiOiJ5IiwiMTYuMCI6InkiLCIxNi4xIjoieSIsIjE2LjIiOiJ5IiwiMTYuMyI6InkiLCIxNi40IjoieSIsIjE2LjUiOiJ5IiwiMTYuNiI6InkiLCIzLjIiOiJuIiwiNC4wLTQuMSI6Im4iLCI0LjItNC4zIjoibiIsIjUuMC01LjEiOiJuIiwiNi4wLTYuMSI6Im4iLCI3LjAtNy4xIjoibiIsIjguMS04LjQiOiJuIn0sb3BfbWluaTp7YWxsOiJ5In0sYW5kcm9pZDp7IjMiOiJuIiwiNCI6Im4iLCIxMTQiOiJ5IiwiNC40IjoieSIsIjQuNC4zLTQuNC40IjoieSIsIjIuMSI6Im4iLCIyLjIiOiJuIiwiMi4zIjoibiIsIjQuMSI6Im4iLCI0LjItNC4zIjoibiJ9LGJiOnsiNyI6Im4iLCIxMCI6Im4ifSxvcF9tb2I6eyIxMCI6Im4iLCIxMSI6Im4iLCIxMiI6Im4iLCI3MyI6InkiLCIxMS4xIjoibiIsIjExLjUiOiJuIiwiMTIuMSI6Im4ifSxhbmRfY2hyOnsiMTE0IjoieSJ9LGFuZF9mZjp7IjExNSI6InkifSxpZV9tb2I6eyIxMCI6Im4iLCIxMSI6Im4ifSxhbmRfdWM6eyIxNS41IjoieSJ9LHNhbXN1bmc6eyI0IjoieSIsIjIwIjoieSIsIjIxIjoieSIsIjUuMC01LjQiOiJ5IiwiNi4yLTYuNCI6InkiLCI3LjItNy40IjoieSIsIjguMiI6InkiLCI5LjIiOiJ5IiwiMTAuMSI6InkiLCIxMS4xLTExLjIiOiJ5IiwiMTIuMCI6InkiLCIxMy4wIjoieSIsIjE0LjAiOiJ5IiwiMTUuMCI6InkiLCIxNi4wIjoieSIsIjE3LjAiOiJ5IiwiMTguMCI6InkiLCIxOS4wIjoieSJ9LGFuZF9xcTp7IjEzLjEiOiJ5In0sYmFpZHU6eyIxMy4xOCI6InkifSxrYWlvczp7IjIuNSI6InkiLCIzLjAtMy4xIjoieSJ9fX19dmFyIG5PLFBzPVAoKCk9Pnt1KCk7bk89e2llOntwcmVmaXg6Im1zIn0sZWRnZTp7cHJlZml4OiJ3ZWJraXQiLHByZWZpeF9leGNlcHRpb25zOnsiMTIiOiJtcyIsIjEzIjoibXMiLCIxNCI6Im1zIiwiMTUiOiJtcyIsIjE2IjoibXMiLCIxNyI6Im1zIiwiMTgiOiJtcyJ9fSxmaXJlZm94OntwcmVmaXg6Im1veiJ9LGNocm9tZTp7cHJlZml4OiJ3ZWJraXQifSxzYWZhcmk6e3ByZWZpeDoid2Via2l0In0sb3BlcmE6e3ByZWZpeDoid2Via2l0IixwcmVmaXhfZXhjZXB0aW9uczp7IjkiOiJvIiwiMTEiOiJvIiwiMTIiOiJvIiwiOS41LTkuNiI6Im8iLCIxMC4wLTEwLjEiOiJvIiwiMTAuNSI6Im8iLCIxMC42IjoibyIsIjExLjEiOiJvIiwiMTEuNSI6Im8iLCIxMS42IjoibyIsIjEyLjEiOiJvIn19LGlvc19zYWY6e3ByZWZpeDoid2Via2l0In0sb3BfbWluaTp7cHJlZml4OiJvIn0sYW5kcm9pZDp7cHJlZml4OiJ3ZWJraXQifSxiYjp7cHJlZml4OiJ3ZWJraXQifSxvcF9tb2I6e3ByZWZpeDoibyIscHJlZml4X2V4Y2VwdGlvbnM6eyI3MyI6IndlYmtpdCJ9fSxhbmRfY2hyOntwcmVmaXg6IndlYmtpdCJ9LGFuZF9mZjp7cHJlZml4OiJtb3oifSxpZV9tb2I6e3ByZWZpeDoibXMifSxhbmRfdWM6e3ByZWZpeDoid2Via2l0IixwcmVmaXhfZXhjZXB0aW9uczp7IjE1LjUiOiJ3ZWJraXQifX0sc2Ftc3VuZzp7cHJlZml4OiJ3ZWJraXQifSxhbmRfcXE6e3ByZWZpeDoid2Via2l0In0sYmFpZHU6e3ByZWZpeDoid2Via2l0In0sa2Fpb3M6e3ByZWZpeDoibW96In19fSk7dmFyIE95PXgoKCk9Pnt1KCl9KTt2YXIgX2U9eCgoWHEsTHQpPT57dSgpO3ZhcntsaXN0OktsfT0kZSgpO0x0LmV4cG9ydHMuZXJyb3I9ZnVuY3Rpb24ocil7bGV0IGU9bmV3IEVycm9yKHIpO3Rocm93IGUuYXV0b3ByZWZpeGVyPSEwLGV9O0x0LmV4cG9ydHMudW5pcT1mdW5jdGlvbihyKXtyZXR1cm5bLi4ubmV3IFNldChyKV19O0x0LmV4cG9ydHMucmVtb3ZlTm90ZT1mdW5jdGlvbihyKXtyZXR1cm4gci5pbmNsdWRlcygiICIpP3Iuc3BsaXQoIiAiKVswXTpyfTtMdC5leHBvcnRzLmVzY2FwZVJlZ2V4cD1mdW5jdGlvbihyKXtyZXR1cm4gci5yZXBsYWNlKC9bJCgpKistLj9bXFxcXV57fH1dL2csIlxcJCYiKX07THQuZXhwb3J0cy5yZWdleHA9ZnVuY3Rpb24ocixlPSEwKXtyZXR1cm4gZSYmKHI9dGhpcy5lc2NhcGVSZWdleHAocikpLG5ldyBSZWdFeHAoYChefFtcXHMsKF0pKCR7cn0oJHxbXFxzKCxdKSlgLCJnaSIpfTtMdC5leHBvcnRzLmVkaXRMaXN0PWZ1bmN0aW9uKHIsZSl7bGV0IHQ9S2wuY29tbWEociksaT1lKHQsW10pO2lmKHQ9PT1pKXJldHVybiByO2xldCBuPXIubWF0Y2goLyxccyovKTtyZXR1cm4gbj1uP25bMF06IiwgIixpLmpvaW4obil9O0x0LmV4cG9ydHMuc3BsaXRTZWxlY3Rvcj1mdW5jdGlvbihyKXtyZXR1cm4gS2wuY29tbWEocikubWFwKGU9PktsLnNwYWNlKGUpLm1hcCh0PT50LnNwbGl0KC8oPz1cLnwjKS9nKSkpfX0pO3ZhciBNdD14KChacSxQeSk9Pnt1KCk7dmFyIGFPPVlsKCksVHk9KFBzKCksUnMpLmFnZW50cyxvTz1fZSgpLFJ5PWNsYXNze3N0YXRpYyBwcmVmaXhlcygpe2lmKHRoaXMucHJlZml4ZXNDYWNoZSlyZXR1cm4gdGhpcy5wcmVmaXhlc0NhY2hlO3RoaXMucHJlZml4ZXNDYWNoZT1bXTtmb3IobGV0IGUgaW4gVHkpdGhpcy5wcmVmaXhlc0NhY2hlLnB1c2goYC0ke1R5W2VdLnByZWZpeH0tYCk7cmV0dXJuIHRoaXMucHJlZml4ZXNDYWNoZT1vTy51bmlxKHRoaXMucHJlZml4ZXNDYWNoZSkuc29ydCgoZSx0KT0+dC5sZW5ndGgtZS5sZW5ndGgpLHRoaXMucHJlZml4ZXNDYWNoZX1zdGF0aWMgd2l0aFByZWZpeChlKXtyZXR1cm4gdGhpcy5wcmVmaXhlc1JlZ2V4cHx8KHRoaXMucHJlZml4ZXNSZWdleHA9bmV3IFJlZ0V4cCh0aGlzLnByZWZpeGVzKCkuam9pbigifCIpKSksdGhpcy5wcmVmaXhlc1JlZ2V4cC50ZXN0KGUpfWNvbnN0cnVjdG9yKGUsdCxpLG4pe3RoaXMuZGF0YT1lLHRoaXMub3B0aW9ucz1pfHx7fSx0aGlzLmJyb3dzZXJzbGlzdE9wdHM9bnx8e30sdGhpcy5zZWxlY3RlZD10aGlzLnBhcnNlKHQpfXBhcnNlKGUpe2xldCB0PXt9O2ZvcihsZXQgaSBpbiB0aGlzLmJyb3dzZXJzbGlzdE9wdHMpdFtpXT10aGlzLmJyb3dzZXJzbGlzdE9wdHNbaV07cmV0dXJuIHQucGF0aD10aGlzLm9wdGlvbnMuZnJvbSxhTyhlLHQpfXByZWZpeChlKXtsZXRbdCxpXT1lLnNwbGl0KCIgIiksbj10aGlzLmRhdGFbdF0scz1uLnByZWZpeF9leGNlcHRpb25zJiZuLnByZWZpeF9leGNlcHRpb25zW2ldO3JldHVybiBzfHwocz1uLnByZWZpeCksYC0ke3N9LWB9aXNTZWxlY3RlZChlKXtyZXR1cm4gdGhpcy5zZWxlY3RlZC5pbmNsdWRlcyhlKX19O1B5LmV4cG9ydHM9Unl9KTt2YXIgTmk9eCgoSnEsSXkpPT57dSgpO0l5LmV4cG9ydHM9e3ByZWZpeChyKXtsZXQgZT1yLm1hdGNoKC9eKC1cdystKS8pO3JldHVybiBlP2VbMF06IiJ9LHVucHJlZml4ZWQocil7cmV0dXJuIHIucmVwbGFjZSgvXi1cdystLywiIil9fX0pO3ZhciB3cj14KChlJCxxeSk9Pnt1KCk7dmFyIGxPPU10KCksRHk9TmkoKSx1Tz1fZSgpO2Z1bmN0aW9uIFhsKHIsZSl7bGV0IHQ9bmV3IHIuY29uc3RydWN0b3I7Zm9yKGxldCBpIG9mIE9iamVjdC5rZXlzKHJ8fHt9KSl7bGV0IG49cltpXTtpPT09InBhcmVudCImJnR5cGVvZiBuPT0ib2JqZWN0Ij9lJiYodFtpXT1lKTppPT09InNvdXJjZSJ8fGk9PT1udWxsP3RbaV09bjpBcnJheS5pc0FycmF5KG4pP3RbaV09bi5tYXAocz0+WGwocyx0KSk6aSE9PSJfYXV0b3ByZWZpeGVyUHJlZml4IiYmaSE9PSJfYXV0b3ByZWZpeGVyVmFsdWVzIiYmaSE9PSJwcm94eUNhY2hlIiYmKHR5cGVvZiBuPT0ib2JqZWN0IiYmbiE9PW51bGwmJihuPVhsKG4sdCkpLHRbaV09bil9cmV0dXJuIHR9dmFyIElzPWNsYXNze3N0YXRpYyBoYWNrKGUpe3JldHVybiB0aGlzLmhhY2tzfHwodGhpcy5oYWNrcz17fSksZS5uYW1lcy5tYXAodD0+KHRoaXMuaGFja3NbdF09ZSx0aGlzLmhhY2tzW3RdKSl9c3RhdGljIGxvYWQoZSx0LGkpe2xldCBuPXRoaXMuaGFja3MmJnRoaXMuaGFja3NbZV07cmV0dXJuIG4/bmV3IG4oZSx0LGkpOm5ldyB0aGlzKGUsdCxpKX1zdGF0aWMgY2xvbmUoZSx0KXtsZXQgaT1YbChlKTtmb3IobGV0IG4gaW4gdClpW25dPXRbbl07cmV0dXJuIGl9Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMucHJlZml4ZXM9dCx0aGlzLm5hbWU9ZSx0aGlzLmFsbD1pfXBhcmVudFByZWZpeChlKXtsZXQgdDtyZXR1cm4gdHlwZW9mIGUuX2F1dG9wcmVmaXhlclByZWZpeCE9InVuZGVmaW5lZCI/dD1lLl9hdXRvcHJlZml4ZXJQcmVmaXg6ZS50eXBlPT09ImRlY2wiJiZlLnByb3BbMF09PT0iLSI/dD1EeS5wcmVmaXgoZS5wcm9wKTplLnR5cGU9PT0icm9vdCI/dD0hMTplLnR5cGU9PT0icnVsZSImJmUuc2VsZWN0b3IuaW5jbHVkZXMoIjotIikmJi86KC1cdystKS8udGVzdChlLnNlbGVjdG9yKT90PWUuc2VsZWN0b3IubWF0Y2goLzooLVx3Ky0pLylbMV06ZS50eXBlPT09ImF0cnVsZSImJmUubmFtZVswXT09PSItIj90PUR5LnByZWZpeChlLm5hbWUpOnQ9dGhpcy5wYXJlbnRQcmVmaXgoZS5wYXJlbnQpLGxPLnByZWZpeGVzKCkuaW5jbHVkZXModCl8fCh0PSExKSxlLl9hdXRvcHJlZml4ZXJQcmVmaXg9dCxlLl9hdXRvcHJlZml4ZXJQcmVmaXh9cHJvY2VzcyhlLHQpe2lmKCF0aGlzLmNoZWNrKGUpKXJldHVybjtsZXQgaT10aGlzLnBhcmVudFByZWZpeChlKSxuPXRoaXMucHJlZml4ZXMuZmlsdGVyKGE9PiFpfHxpPT09dU8ucmVtb3ZlTm90ZShhKSkscz1bXTtmb3IobGV0IGEgb2Ygbil0aGlzLmFkZChlLGEscy5jb25jYXQoW2FdKSx0KSYmcy5wdXNoKGEpO3JldHVybiBzfWNsb25lKGUsdCl7cmV0dXJuIElzLmNsb25lKGUsdCl9fTtxeS5leHBvcnRzPUlzfSk7dmFyIGo9eCgodCQsTXkpPT57dSgpO3ZhciBmTz13cigpLGNPPU10KCksJHk9X2UoKSxMeT1jbGFzcyBleHRlbmRzIGZPe2NoZWNrKCl7cmV0dXJuITB9cHJlZml4ZWQoZSx0KXtyZXR1cm4gdCtlfW5vcm1hbGl6ZShlKXtyZXR1cm4gZX1vdGhlclByZWZpeGVzKGUsdCl7Zm9yKGxldCBpIG9mIGNPLnByZWZpeGVzKCkpaWYoaSE9PXQmJmUuaW5jbHVkZXMoaSkpcmV0dXJuITA7cmV0dXJuITF9c2V0KGUsdCl7cmV0dXJuIGUucHJvcD10aGlzLnByZWZpeGVkKGUucHJvcCx0KSxlfW5lZWRDYXNjYWRlKGUpe3JldHVybiBlLl9hdXRvcHJlZml4ZXJDYXNjYWRlfHwoZS5fYXV0b3ByZWZpeGVyQ2FzY2FkZT10aGlzLmFsbC5vcHRpb25zLmNhc2NhZGUhPT0hMSYmZS5yYXcoImJlZm9yZSIpLmluY2x1ZGVzKGAKYCkpLGUuX2F1dG9wcmVmaXhlckNhc2NhZGV9bWF4UHJlZml4ZWQoZSx0KXtpZih0Ll9hdXRvcHJlZml4ZXJNYXgpcmV0dXJuIHQuX2F1dG9wcmVmaXhlck1heDtsZXQgaT0wO2ZvcihsZXQgbiBvZiBlKW49JHkucmVtb3ZlTm90ZShuKSxuLmxlbmd0aD5pJiYoaT1uLmxlbmd0aCk7cmV0dXJuIHQuX2F1dG9wcmVmaXhlck1heD1pLHQuX2F1dG9wcmVmaXhlck1heH1jYWxjQmVmb3JlKGUsdCxpPSIiKXtsZXQgcz10aGlzLm1heFByZWZpeGVkKGUsdCktJHkucmVtb3ZlTm90ZShpKS5sZW5ndGgsYT10LnJhdygiYmVmb3JlIik7cmV0dXJuIHM+MCYmKGErPUFycmF5KHMpLmZpbGwoIiAiKS5qb2luKCIiKSksYX1yZXN0b3JlQmVmb3JlKGUpe2xldCB0PWUucmF3KCJiZWZvcmUiKS5zcGxpdChgCmApLGk9dFt0Lmxlbmd0aC0xXTt0aGlzLmFsbC5ncm91cChlKS51cChuPT57bGV0IHM9bi5yYXcoImJlZm9yZSIpLnNwbGl0KGAKYCksYT1zW3MubGVuZ3RoLTFdO2EubGVuZ3RoPGkubGVuZ3RoJiYoaT1hKX0pLHRbdC5sZW5ndGgtMV09aSxlLnJhd3MuYmVmb3JlPXQuam9pbihgCmApfWluc2VydChlLHQsaSl7bGV0IG49dGhpcy5zZXQodGhpcy5jbG9uZShlKSx0KTtpZighKCFufHxlLnBhcmVudC5zb21lKGE9PmEucHJvcD09PW4ucHJvcCYmYS52YWx1ZT09PW4udmFsdWUpKSlyZXR1cm4gdGhpcy5uZWVkQ2FzY2FkZShlKSYmKG4ucmF3cy5iZWZvcmU9dGhpcy5jYWxjQmVmb3JlKGksZSx0KSksZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsbil9aXNBbHJlYWR5KGUsdCl7bGV0IGk9dGhpcy5hbGwuZ3JvdXAoZSkudXAobj0+bi5wcm9wPT09dCk7cmV0dXJuIGl8fChpPXRoaXMuYWxsLmdyb3VwKGUpLmRvd24obj0+bi5wcm9wPT09dCkpLGl9YWRkKGUsdCxpLG4pe2xldCBzPXRoaXMucHJlZml4ZWQoZS5wcm9wLHQpO2lmKCEodGhpcy5pc0FscmVhZHkoZSxzKXx8dGhpcy5vdGhlclByZWZpeGVzKGUudmFsdWUsdCkpKXJldHVybiB0aGlzLmluc2VydChlLHQsaSxuKX1wcm9jZXNzKGUsdCl7aWYoIXRoaXMubmVlZENhc2NhZGUoZSkpe3N1cGVyLnByb2Nlc3MoZSx0KTtyZXR1cm59bGV0IGk9c3VwZXIucHJvY2VzcyhlLHQpOyFpfHwhaS5sZW5ndGh8fCh0aGlzLnJlc3RvcmVCZWZvcmUoZSksZS5yYXdzLmJlZm9yZT10aGlzLmNhbGNCZWZvcmUoaSxlKSl9b2xkKGUsdCl7cmV0dXJuW3RoaXMucHJlZml4ZWQoZSx0KV19fTtNeS5leHBvcnRzPUx5fSk7dmFyIEJ5PXgoKHIkLE55KT0+e3UoKTtOeS5leHBvcnRzPWZ1bmN0aW9uIHIoZSl7cmV0dXJue211bDp0PT5uZXcgcihlKnQpLGRpdjp0PT5uZXcgcihlL3QpLHNpbXBsaWZ5OigpPT5uZXcgcihlKSx0b1N0cmluZzooKT0+ZS50b1N0cmluZygpfX19KTt2YXIgenk9eCgoaSQsankpPT57dSgpO3ZhciBwTz1CeSgpLGRPPXdyKCksWmw9X2UoKSxoTz0vKG1pbnxtYXgpLXJlc29sdXRpb25ccyo6XHMqXGQqXC4/XGQrKGRwcHh8ZHBjbXxkcGl8eCkvZ2ksbU89LyhtaW58bWF4KS1yZXNvbHV0aW9uKFxzKjpccyopKFxkKlwuP1xkKykoZHBweHxkcGNtfGRwaXx4KS9pLEZ5PWNsYXNzIGV4dGVuZHMgZE97cHJlZml4TmFtZShlLHQpe3JldHVybiBlPT09Ii1tb3otIj90KyItLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW8iOmUrdCsiLWRldmljZS1waXhlbC1yYXRpbyJ9cHJlZml4UXVlcnkoZSx0LGksbixzKXtyZXR1cm4gbj1uZXcgcE8obikscz09PSJkcGkiP249bi5kaXYoOTYpOnM9PT0iZHBjbSImJihuPW4ubXVsKDIuNTQpLmRpdig5NikpLG49bi5zaW1wbGlmeSgpLGU9PT0iLW8tIiYmKG49bi5uKyIvIituLmQpLHRoaXMucHJlZml4TmFtZShlLHQpK2krbn1jbGVhbihlKXtpZighdGhpcy5iYWQpe3RoaXMuYmFkPVtdO2ZvcihsZXQgdCBvZiB0aGlzLnByZWZpeGVzKXRoaXMuYmFkLnB1c2godGhpcy5wcmVmaXhOYW1lKHQsIm1pbiIpKSx0aGlzLmJhZC5wdXNoKHRoaXMucHJlZml4TmFtZSh0LCJtYXgiKSl9ZS5wYXJhbXM9WmwuZWRpdExpc3QoZS5wYXJhbXMsdD0+dC5maWx0ZXIoaT0+dGhpcy5iYWQuZXZlcnkobj0+IWkuaW5jbHVkZXMobikpKSl9cHJvY2VzcyhlKXtsZXQgdD10aGlzLnBhcmVudFByZWZpeChlKSxpPXQ/W3RdOnRoaXMucHJlZml4ZXM7ZS5wYXJhbXM9WmwuZWRpdExpc3QoZS5wYXJhbXMsKG4scyk9Pntmb3IobGV0IGEgb2Ygbil7aWYoIWEuaW5jbHVkZXMoIm1pbi1yZXNvbHV0aW9uIikmJiFhLmluY2x1ZGVzKCJtYXgtcmVzb2x1dGlvbiIpKXtzLnB1c2goYSk7Y29udGludWV9Zm9yKGxldCBvIG9mIGkpe2xldCBsPWEucmVwbGFjZShoTyxjPT57bGV0IGY9Yy5tYXRjaChtTyk7cmV0dXJuIHRoaXMucHJlZml4UXVlcnkobyxmWzFdLGZbMl0sZlszXSxmWzRdKX0pO3MucHVzaChsKX1zLnB1c2goYSl9cmV0dXJuIFpsLnVuaXEocyl9KX19O2p5LmV4cG9ydHM9Rnl9KTt2YXIgVnk9eCgobiQsVXkpPT57dSgpO3ZhciBKbD0iKCIuY2hhckNvZGVBdCgwKSxldT0iKSIuY2hhckNvZGVBdCgwKSxEcz0iJyIuY2hhckNvZGVBdCgwKSx0dT0nIicuY2hhckNvZGVBdCgwKSxydT0iXFwiLmNoYXJDb2RlQXQoMCksdnI9Ii8iLmNoYXJDb2RlQXQoMCksaXU9IiwiLmNoYXJDb2RlQXQoMCksbnU9IjoiLmNoYXJDb2RlQXQoMCkscXM9IioiLmNoYXJDb2RlQXQoMCksZ089InUiLmNoYXJDb2RlQXQoMCkseU89IlUiLmNoYXJDb2RlQXQoMCksYk89IisiLmNoYXJDb2RlQXQoMCksd089L15bYS1mMC05Py1dKyQvaTtVeS5leHBvcnRzPWZ1bmN0aW9uKHIpe2Zvcih2YXIgZT1bXSx0PXIsaSxuLHMsYSxvLGwsYyxmLGQ9MCxwPXQuY2hhckNvZGVBdChkKSxoPXQubGVuZ3RoLGI9W3tub2RlczplfV0sdj0wLHksdz0iIixrPSIiLFM9IiI7ZDxoOylpZihwPD0zMil7aT1kO2RvIGkrPTEscD10LmNoYXJDb2RlQXQoaSk7d2hpbGUocDw9MzIpO2E9dC5zbGljZShkLGkpLHM9ZVtlLmxlbmd0aC0xXSxwPT09ZXUmJnY/Uz1hOnMmJnMudHlwZT09PSJkaXYiPyhzLmFmdGVyPWEscy5zb3VyY2VFbmRJbmRleCs9YS5sZW5ndGgpOnA9PT1pdXx8cD09PW51fHxwPT09dnImJnQuY2hhckNvZGVBdChpKzEpIT09cXMmJigheXx8eSYmeS50eXBlPT09ImZ1bmN0aW9uIiYmeS52YWx1ZSE9PSJjYWxjIik/az1hOmUucHVzaCh7dHlwZToic3BhY2UiLHNvdXJjZUluZGV4OmQsc291cmNlRW5kSW5kZXg6aSx2YWx1ZTphfSksZD1pfWVsc2UgaWYocD09PURzfHxwPT09dHUpe2k9ZCxuPXA9PT1Ecz8iJyI6JyInLGE9e3R5cGU6InN0cmluZyIsc291cmNlSW5kZXg6ZCxxdW90ZTpufTtkbyBpZihvPSExLGk9dC5pbmRleE9mKG4saSsxKSx+aSlmb3IobD1pO3QuY2hhckNvZGVBdChsLTEpPT09cnU7KWwtPTEsbz0hbztlbHNlIHQrPW4saT10Lmxlbmd0aC0xLGEudW5jbG9zZWQ9ITA7d2hpbGUobyk7YS52YWx1ZT10LnNsaWNlKGQrMSxpKSxhLnNvdXJjZUVuZEluZGV4PWEudW5jbG9zZWQ/aTppKzEsZS5wdXNoKGEpLGQ9aSsxLHA9dC5jaGFyQ29kZUF0KGQpfWVsc2UgaWYocD09PXZyJiZ0LmNoYXJDb2RlQXQoZCsxKT09PXFzKWk9dC5pbmRleE9mKCIqLyIsZCksYT17dHlwZToiY29tbWVudCIsc291cmNlSW5kZXg6ZCxzb3VyY2VFbmRJbmRleDppKzJ9LGk9PT0tMSYmKGEudW5jbG9zZWQ9ITAsaT10Lmxlbmd0aCxhLnNvdXJjZUVuZEluZGV4PWkpLGEudmFsdWU9dC5zbGljZShkKzIsaSksZS5wdXNoKGEpLGQ9aSsyLHA9dC5jaGFyQ29kZUF0KGQpO2Vsc2UgaWYoKHA9PT12cnx8cD09PXFzKSYmeSYmeS50eXBlPT09ImZ1bmN0aW9uIiYmeS52YWx1ZT09PSJjYWxjIilhPXRbZF0sZS5wdXNoKHt0eXBlOiJ3b3JkIixzb3VyY2VJbmRleDpkLWsubGVuZ3RoLHNvdXJjZUVuZEluZGV4OmQrYS5sZW5ndGgsdmFsdWU6YX0pLGQrPTEscD10LmNoYXJDb2RlQXQoZCk7ZWxzZSBpZihwPT09dnJ8fHA9PT1pdXx8cD09PW51KWE9dFtkXSxlLnB1c2goe3R5cGU6ImRpdiIsc291cmNlSW5kZXg6ZC1rLmxlbmd0aCxzb3VyY2VFbmRJbmRleDpkK2EubGVuZ3RoLHZhbHVlOmEsYmVmb3JlOmssYWZ0ZXI6IiJ9KSxrPSIiLGQrPTEscD10LmNoYXJDb2RlQXQoZCk7ZWxzZSBpZihKbD09PXApe2k9ZDtkbyBpKz0xLHA9dC5jaGFyQ29kZUF0KGkpO3doaWxlKHA8PTMyKTtpZihmPWQsYT17dHlwZToiZnVuY3Rpb24iLHNvdXJjZUluZGV4OmQtdy5sZW5ndGgsdmFsdWU6dyxiZWZvcmU6dC5zbGljZShmKzEsaSl9LGQ9aSx3PT09InVybCImJnAhPT1EcyYmcCE9PXR1KXtpLT0xO2RvIGlmKG89ITEsaT10LmluZGV4T2YoIikiLGkrMSksfmkpZm9yKGw9aTt0LmNoYXJDb2RlQXQobC0xKT09PXJ1OylsLT0xLG89IW87ZWxzZSB0Kz0iKSIsaT10Lmxlbmd0aC0xLGEudW5jbG9zZWQ9ITA7d2hpbGUobyk7Yz1pO2RvIGMtPTEscD10LmNoYXJDb2RlQXQoYyk7d2hpbGUocDw9MzIpO2Y8Yz8oZCE9PWMrMT9hLm5vZGVzPVt7dHlwZToid29yZCIsc291cmNlSW5kZXg6ZCxzb3VyY2VFbmRJbmRleDpjKzEsdmFsdWU6dC5zbGljZShkLGMrMSl9XTphLm5vZGVzPVtdLGEudW5jbG9zZWQmJmMrMSE9PWk/KGEuYWZ0ZXI9IiIsYS5ub2Rlcy5wdXNoKHt0eXBlOiJzcGFjZSIsc291cmNlSW5kZXg6YysxLHNvdXJjZUVuZEluZGV4OmksdmFsdWU6dC5zbGljZShjKzEsaSl9KSk6KGEuYWZ0ZXI9dC5zbGljZShjKzEsaSksYS5zb3VyY2VFbmRJbmRleD1pKSk6KGEuYWZ0ZXI9IiIsYS5ub2Rlcz1bXSksZD1pKzEsYS5zb3VyY2VFbmRJbmRleD1hLnVuY2xvc2VkP2k6ZCxwPXQuY2hhckNvZGVBdChkKSxlLnB1c2goYSl9ZWxzZSB2Kz0xLGEuYWZ0ZXI9IiIsYS5zb3VyY2VFbmRJbmRleD1kKzEsZS5wdXNoKGEpLGIucHVzaChhKSxlPWEubm9kZXM9W10seT1hO3c9IiJ9ZWxzZSBpZihldT09PXAmJnYpZCs9MSxwPXQuY2hhckNvZGVBdChkKSx5LmFmdGVyPVMseS5zb3VyY2VFbmRJbmRleCs9Uy5sZW5ndGgsUz0iIix2LT0xLGJbYi5sZW5ndGgtMV0uc291cmNlRW5kSW5kZXg9ZCxiLnBvcCgpLHk9Ylt2XSxlPXkubm9kZXM7ZWxzZXtpPWQ7ZG8gcD09PXJ1JiYoaSs9MSksaSs9MSxwPXQuY2hhckNvZGVBdChpKTt3aGlsZShpPGgmJiEocDw9MzJ8fHA9PT1Ec3x8cD09PXR1fHxwPT09aXV8fHA9PT1udXx8cD09PXZyfHxwPT09Smx8fHA9PT1xcyYmeSYmeS50eXBlPT09ImZ1bmN0aW9uIiYmeS52YWx1ZT09PSJjYWxjInx8cD09PXZyJiZ5LnR5cGU9PT0iZnVuY3Rpb24iJiZ5LnZhbHVlPT09ImNhbGMifHxwPT09ZXUmJnYpKTthPXQuc2xpY2UoZCxpKSxKbD09PXA/dz1hOihnTz09PWEuY2hhckNvZGVBdCgwKXx8eU89PT1hLmNoYXJDb2RlQXQoMCkpJiZiTz09PWEuY2hhckNvZGVBdCgxKSYmd08udGVzdChhLnNsaWNlKDIpKT9lLnB1c2goe3R5cGU6InVuaWNvZGUtcmFuZ2UiLHNvdXJjZUluZGV4OmQsc291cmNlRW5kSW5kZXg6aSx2YWx1ZTphfSk6ZS5wdXNoKHt0eXBlOiJ3b3JkIixzb3VyY2VJbmRleDpkLHNvdXJjZUVuZEluZGV4OmksdmFsdWU6YX0pLGQ9aX1mb3IoZD1iLmxlbmd0aC0xO2Q7ZC09MSliW2RdLnVuY2xvc2VkPSEwLGJbZF0uc291cmNlRW5kSW5kZXg9dC5sZW5ndGg7cmV0dXJuIGJbMF0ubm9kZXN9fSk7dmFyIFd5PXgoKHMkLEh5KT0+e3UoKTtIeS5leHBvcnRzPWZ1bmN0aW9uIHIoZSx0LGkpe3ZhciBuLHMsYSxvO2ZvcihuPTAscz1lLmxlbmd0aDtuPHM7bis9MSlhPWVbbl0saXx8KG89dChhLG4sZSkpLG8hPT0hMSYmYS50eXBlPT09ImZ1bmN0aW9uIiYmQXJyYXkuaXNBcnJheShhLm5vZGVzKSYmcihhLm5vZGVzLHQsaSksaSYmdChhLG4sZSl9fSk7dmFyIEt5PXgoKGEkLFl5KT0+e3UoKTtmdW5jdGlvbiBHeShyLGUpe3ZhciB0PXIudHlwZSxpPXIudmFsdWUsbixzO3JldHVybiBlJiYocz1lKHIpKSE9PXZvaWQgMD9zOnQ9PT0id29yZCJ8fHQ9PT0ic3BhY2UiP2k6dD09PSJzdHJpbmciPyhuPXIucXVvdGV8fCIiLG4raSsoci51bmNsb3NlZD8iIjpuKSk6dD09PSJjb21tZW50Ij8iLyoiK2krKHIudW5jbG9zZWQ/IiI6IiovIik6dD09PSJkaXYiPyhyLmJlZm9yZXx8IiIpK2krKHIuYWZ0ZXJ8fCIiKTpBcnJheS5pc0FycmF5KHIubm9kZXMpPyhuPVF5KHIubm9kZXMsZSksdCE9PSJmdW5jdGlvbiI/bjppKyIoIisoci5iZWZvcmV8fCIiKStuKyhyLmFmdGVyfHwiIikrKHIudW5jbG9zZWQ/IiI6IikiKSk6aX1mdW5jdGlvbiBReShyLGUpe3ZhciB0LGk7aWYoQXJyYXkuaXNBcnJheShyKSl7Zm9yKHQ9IiIsaT1yLmxlbmd0aC0xO35pO2ktPTEpdD1HeShyW2ldLGUpK3Q7cmV0dXJuIHR9cmV0dXJuIEd5KHIsZSl9WXkuZXhwb3J0cz1ReX0pO3ZhciBaeT14KChvJCxYeSk9Pnt1KCk7dmFyICRzPSItIi5jaGFyQ29kZUF0KDApLExzPSIrIi5jaGFyQ29kZUF0KDApLHN1PSIuIi5jaGFyQ29kZUF0KDApLHZPPSJlIi5jaGFyQ29kZUF0KDApLHhPPSJFIi5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIGtPKHIpe3ZhciBlPXIuY2hhckNvZGVBdCgwKSx0O2lmKGU9PT1Mc3x8ZT09PSRzKXtpZih0PXIuY2hhckNvZGVBdCgxKSx0Pj00OCYmdDw9NTcpcmV0dXJuITA7dmFyIGk9ci5jaGFyQ29kZUF0KDIpO3JldHVybiB0PT09c3UmJmk+PTQ4JiZpPD01N31yZXR1cm4gZT09PXN1Pyh0PXIuY2hhckNvZGVBdCgxKSx0Pj00OCYmdDw9NTcpOmU+PTQ4JiZlPD01N31YeS5leHBvcnRzPWZ1bmN0aW9uKHIpe3ZhciBlPTAsdD1yLmxlbmd0aCxpLG4scztpZih0PT09MHx8IWtPKHIpKXJldHVybiExO2ZvcihpPXIuY2hhckNvZGVBdChlKSwoaT09PUxzfHxpPT09JHMpJiZlKys7ZTx0JiYoaT1yLmNoYXJDb2RlQXQoZSksIShpPDQ4fHxpPjU3KSk7KWUrPTE7aWYoaT1yLmNoYXJDb2RlQXQoZSksbj1yLmNoYXJDb2RlQXQoZSsxKSxpPT09c3UmJm4+PTQ4JiZuPD01Nylmb3IoZSs9MjtlPHQmJihpPXIuY2hhckNvZGVBdChlKSwhKGk8NDh8fGk+NTcpKTspZSs9MTtpZihpPXIuY2hhckNvZGVBdChlKSxuPXIuY2hhckNvZGVBdChlKzEpLHM9ci5jaGFyQ29kZUF0KGUrMiksKGk9PT12T3x8aT09PXhPKSYmKG4+PTQ4JiZuPD01N3x8KG49PT1Mc3x8bj09PSRzKSYmcz49NDgmJnM8PTU3KSlmb3IoZSs9bj09PUxzfHxuPT09JHM/MzoyO2U8dCYmKGk9ci5jaGFyQ29kZUF0KGUpLCEoaTw0OHx8aT41NykpOyllKz0xO3JldHVybntudW1iZXI6ci5zbGljZSgwLGUpLHVuaXQ6ci5zbGljZShlKX19fSk7dmFyIE1zPXgoKGwkLHRiKT0+e3UoKTt2YXIgU089VnkoKSxKeT1XeSgpLGViPUt5KCk7ZnVuY3Rpb24gTnQocil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBOdD8odGhpcy5ub2Rlcz1TTyhyKSx0aGlzKTpuZXcgTnQocil9TnQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/ZWIodGhpcy5ub2Rlcyk6IiJ9O050LnByb3RvdHlwZS53YWxrPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIEp5KHRoaXMubm9kZXMscixlKSx0aGlzfTtOdC51bml0PVp5KCk7TnQud2Fsaz1KeTtOdC5zdHJpbmdpZnk9ZWI7dGIuZXhwb3J0cz1OdH0pO3ZhciBhYj14KCh1JCxzYik9Pnt1KCk7dmFye2xpc3Q6QU99PSRlKCkscmI9TXMoKSxDTz1NdCgpLGliPU5pKCksbmI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wcm9wcz1bInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9uLXByb3BlcnR5Il0sdGhpcy5wcmVmaXhlcz1lfWFkZChlLHQpe2xldCBpLG4scz10aGlzLnByZWZpeGVzLmFkZFtlLnByb3BdLGE9dGhpcy5ydWxlVmVuZG9yUHJlZml4ZXMoZSksbz1hfHxzJiZzLnByZWZpeGVzfHxbXSxsPXRoaXMucGFyc2UoZS52YWx1ZSksYz1sLm1hcChoPT50aGlzLmZpbmRQcm9wKGgpKSxmPVtdO2lmKGMuc29tZShoPT5oWzBdPT09Ii0iKSlyZXR1cm47Zm9yKGxldCBoIG9mIGwpe2lmKG49dGhpcy5maW5kUHJvcChoKSxuWzBdPT09Ii0iKWNvbnRpbnVlO2xldCBiPXRoaXMucHJlZml4ZXMuYWRkW25dO2lmKCEoIWJ8fCFiLnByZWZpeGVzKSlmb3IoaSBvZiBiLnByZWZpeGVzKXtpZihhJiYhYS5zb21lKHk9PmkuaW5jbHVkZXMoeSkpKWNvbnRpbnVlO2xldCB2PXRoaXMucHJlZml4ZXMucHJlZml4ZWQobixpKTt2IT09Ii1tcy10cmFuc2Zvcm0iJiYhYy5pbmNsdWRlcyh2KSYmKHRoaXMuZGlzYWJsZWQobixpKXx8Zi5wdXNoKHRoaXMuY2xvbmUobix2LGgpKSl9fWw9bC5jb25jYXQoZik7bGV0IGQ9dGhpcy5zdHJpbmdpZnkobCkscD10aGlzLnN0cmluZ2lmeSh0aGlzLmNsZWFuRnJvbVVucHJlZml4ZWQobCwiLXdlYmtpdC0iKSk7aWYoby5pbmNsdWRlcygiLXdlYmtpdC0iKSYmdGhpcy5jbG9uZUJlZm9yZShlLGAtd2Via2l0LSR7ZS5wcm9wfWAscCksdGhpcy5jbG9uZUJlZm9yZShlLGUucHJvcCxwKSxvLmluY2x1ZGVzKCItby0iKSl7bGV0IGg9dGhpcy5zdHJpbmdpZnkodGhpcy5jbGVhbkZyb21VbnByZWZpeGVkKGwsIi1vLSIpKTt0aGlzLmNsb25lQmVmb3JlKGUsYC1vLSR7ZS5wcm9wfWAsaCl9Zm9yKGkgb2YgbylpZihpIT09Ii13ZWJraXQtIiYmaSE9PSItby0iKXtsZXQgaD10aGlzLnN0cmluZ2lmeSh0aGlzLmNsZWFuT3RoZXJQcmVmaXhlcyhsLGkpKTt0aGlzLmNsb25lQmVmb3JlKGUsaStlLnByb3AsaCl9ZCE9PWUudmFsdWUmJiF0aGlzLmFscmVhZHkoZSxlLnByb3AsZCkmJih0aGlzLmNoZWNrRm9yV2FybmluZyh0LGUpLGUuY2xvbmVCZWZvcmUoKSxlLnZhbHVlPWQpfWZpbmRQcm9wKGUpe2xldCB0PWVbMF0udmFsdWU7aWYoL15cZC8udGVzdCh0KSl7Zm9yKGxldFtpLG5db2YgZS5lbnRyaWVzKCkpaWYoaSE9PTAmJm4udHlwZT09PSJ3b3JkIilyZXR1cm4gbi52YWx1ZX1yZXR1cm4gdH1hbHJlYWR5KGUsdCxpKXtyZXR1cm4gZS5wYXJlbnQuc29tZShuPT5uLnByb3A9PT10JiZuLnZhbHVlPT09aSl9Y2xvbmVCZWZvcmUoZSx0LGkpe3RoaXMuYWxyZWFkeShlLHQsaSl8fGUuY2xvbmVCZWZvcmUoe3Byb3A6dCx2YWx1ZTppfSl9Y2hlY2tGb3JXYXJuaW5nKGUsdCl7aWYodC5wcm9wIT09InRyYW5zaXRpb24tcHJvcGVydHkiKXJldHVybjtsZXQgaT0hMSxuPSExO3QucGFyZW50LmVhY2gocz0+e2lmKHMudHlwZSE9PSJkZWNsInx8cy5wcm9wLmluZGV4T2YoInRyYW5zaXRpb24tIikhPT0wKXJldHVybjtsZXQgYT1BTy5jb21tYShzLnZhbHVlKTtpZihzLnByb3A9PT0idHJhbnNpdGlvbi1wcm9wZXJ0eSIpe2EuZm9yRWFjaChvPT57bGV0IGw9dGhpcy5wcmVmaXhlcy5hZGRbb107bCYmbC5wcmVmaXhlcyYmbC5wcmVmaXhlcy5sZW5ndGg+MCYmKGk9ITApfSk7cmV0dXJufXJldHVybiBuPW58fGEubGVuZ3RoPjEsITF9KSxpJiZuJiZ0Lndhcm4oZSwiUmVwbGFjZSB0cmFuc2l0aW9uLXByb3BlcnR5IHRvIHRyYW5zaXRpb24sIGJlY2F1c2UgQXV0b3ByZWZpeGVyIGNvdWxkIG5vdCBzdXBwb3J0IGFueSBjYXNlcyBvZiB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCBvdGhlciB0cmFuc2l0aW9uLSoiKX1yZW1vdmUoZSl7bGV0IHQ9dGhpcy5wYXJzZShlLnZhbHVlKTt0PXQuZmlsdGVyKGE9PntsZXQgbz10aGlzLnByZWZpeGVzLnJlbW92ZVt0aGlzLmZpbmRQcm9wKGEpXTtyZXR1cm4hb3x8IW8ucmVtb3ZlfSk7bGV0IGk9dGhpcy5zdHJpbmdpZnkodCk7aWYoZS52YWx1ZT09PWkpcmV0dXJuO2lmKHQubGVuZ3RoPT09MCl7ZS5yZW1vdmUoKTtyZXR1cm59bGV0IG49ZS5wYXJlbnQuc29tZShhPT5hLnByb3A9PT1lLnByb3AmJmEudmFsdWU9PT1pKSxzPWUucGFyZW50LnNvbWUoYT0+YSE9PWUmJmEucHJvcD09PWUucHJvcCYmYS52YWx1ZS5sZW5ndGg+aS5sZW5ndGgpO2lmKG58fHMpe2UucmVtb3ZlKCk7cmV0dXJufWUudmFsdWU9aX1wYXJzZShlKXtsZXQgdD1yYihlKSxpPVtdLG49W107Zm9yKGxldCBzIG9mIHQubm9kZXMpbi5wdXNoKHMpLHMudHlwZT09PSJkaXYiJiZzLnZhbHVlPT09IiwiJiYoaS5wdXNoKG4pLG49W10pO3JldHVybiBpLnB1c2gobiksaS5maWx0ZXIocz0+cy5sZW5ndGg+MCl9c3RyaW5naWZ5KGUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iIjtsZXQgdD1bXTtmb3IobGV0IGkgb2YgZSlpW2kubGVuZ3RoLTFdLnR5cGUhPT0iZGl2IiYmaS5wdXNoKHRoaXMuZGl2KGUpKSx0PXQuY29uY2F0KGkpO3JldHVybiB0WzBdLnR5cGU9PT0iZGl2IiYmKHQ9dC5zbGljZSgxKSksdFt0Lmxlbmd0aC0xXS50eXBlPT09ImRpdiImJih0PXQuc2xpY2UoMCwtMisxfHx2b2lkIDApKSxyYi5zdHJpbmdpZnkoe25vZGVzOnR9KX1jbG9uZShlLHQsaSl7bGV0IG49W10scz0hMTtmb3IobGV0IGEgb2YgaSkhcyYmYS50eXBlPT09IndvcmQiJiZhLnZhbHVlPT09ZT8obi5wdXNoKHt0eXBlOiJ3b3JkIix2YWx1ZTp0fSkscz0hMCk6bi5wdXNoKGEpO3JldHVybiBufWRpdihlKXtmb3IobGV0IHQgb2YgZSlmb3IobGV0IGkgb2YgdClpZihpLnR5cGU9PT0iZGl2IiYmaS52YWx1ZT09PSIsIilyZXR1cm4gaTtyZXR1cm57dHlwZToiZGl2Iix2YWx1ZToiLCIsYWZ0ZXI6IiAifX1jbGVhbk90aGVyUHJlZml4ZXMoZSx0KXtyZXR1cm4gZS5maWx0ZXIoaT0+e2xldCBuPWliLnByZWZpeCh0aGlzLmZpbmRQcm9wKGkpKTtyZXR1cm4gbj09PSIifHxuPT09dH0pfWNsZWFuRnJvbVVucHJlZml4ZWQoZSx0KXtsZXQgaT1lLm1hcChzPT50aGlzLmZpbmRQcm9wKHMpKS5maWx0ZXIocz0+cy5zbGljZSgwLHQubGVuZ3RoKT09PXQpLm1hcChzPT50aGlzLnByZWZpeGVzLnVucHJlZml4ZWQocykpLG49W107Zm9yKGxldCBzIG9mIGUpe2xldCBhPXRoaXMuZmluZFByb3Aocyksbz1pYi5wcmVmaXgoYSk7IWkuaW5jbHVkZXMoYSkmJihvPT09dHx8bz09PSIiKSYmbi5wdXNoKHMpfXJldHVybiBufWRpc2FibGVkKGUsdCl7bGV0IGk9WyJvcmRlciIsImp1c3RpZnktY29udGVudCIsImFsaWduLXNlbGYiLCJhbGlnbi1jb250ZW50Il07aWYoZS5pbmNsdWRlcygiZmxleCIpfHxpLmluY2x1ZGVzKGUpKXtpZih0aGlzLnByZWZpeGVzLm9wdGlvbnMuZmxleGJveD09PSExKXJldHVybiEwO2lmKHRoaXMucHJlZml4ZXMub3B0aW9ucy5mbGV4Ym94PT09Im5vLTIwMDkiKXJldHVybiB0LmluY2x1ZGVzKCIyMDA5Iil9fXJ1bGVWZW5kb3JQcmVmaXhlcyhlKXtsZXR7cGFyZW50OnR9PWU7aWYodC50eXBlIT09InJ1bGUiKXJldHVybiExO2lmKCF0LnNlbGVjdG9yLmluY2x1ZGVzKCI6LSIpKXJldHVybiExO2xldCBpPUNPLnByZWZpeGVzKCkuZmlsdGVyKG49PnQuc2VsZWN0b3IuaW5jbHVkZXMoIjoiK24pKTtyZXR1cm4gaS5sZW5ndGg+MD9pOiExfX07c2IuZXhwb3J0cz1uYn0pO3ZhciB4cj14KChmJCxsYik9Pnt1KCk7dmFyIF9PPV9lKCksb2I9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LGksbil7dGhpcy51bnByZWZpeGVkPWUsdGhpcy5wcmVmaXhlZD10LHRoaXMuc3RyaW5nPWl8fHQsdGhpcy5yZWdleHA9bnx8X08ucmVnZXhwKHQpfWNoZWNrKGUpe3JldHVybiBlLmluY2x1ZGVzKHRoaXMuc3RyaW5nKT8hIWUubWF0Y2godGhpcy5yZWdleHApOiExfX07bGIuZXhwb3J0cz1vYn0pO3ZhciBIZT14KChjJCxmYik9Pnt1KCk7dmFyIEVPPXdyKCksT089eHIoKSxUTz1OaSgpLFJPPV9lKCksdWI9Y2xhc3MgZXh0ZW5kcyBFT3tzdGF0aWMgc2F2ZShlLHQpe2xldCBpPXQucHJvcCxuPVtdO2ZvcihsZXQgcyBpbiB0Ll9hdXRvcHJlZml4ZXJWYWx1ZXMpe2xldCBhPXQuX2F1dG9wcmVmaXhlclZhbHVlc1tzXTtpZihhPT09dC52YWx1ZSljb250aW51ZTtsZXQgbyxsPVRPLnByZWZpeChpKTtpZihsPT09Ii1waWUtIiljb250aW51ZTtpZihsPT09cyl7bz10LnZhbHVlPWEsbi5wdXNoKG8pO2NvbnRpbnVlfWxldCBjPWUucHJlZml4ZWQoaSxzKSxmPXQucGFyZW50O2lmKCFmLmV2ZXJ5KGI9PmIucHJvcCE9PWMpKXtuLnB1c2gobyk7Y29udGludWV9bGV0IGQ9YS5yZXBsYWNlKC9ccysvLCIgIik7aWYoZi5zb21lKGI9PmIucHJvcD09PXQucHJvcCYmYi52YWx1ZS5yZXBsYWNlKC9ccysvLCIgIik9PT1kKSl7bi5wdXNoKG8pO2NvbnRpbnVlfWxldCBoPXRoaXMuY2xvbmUodCx7dmFsdWU6YX0pO289dC5wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsaCksbi5wdXNoKG8pfXJldHVybiBufWNoZWNrKGUpe2xldCB0PWUudmFsdWU7cmV0dXJuIHQuaW5jbHVkZXModGhpcy5uYW1lKT8hIXQubWF0Y2godGhpcy5yZWdleHAoKSk6ITF9cmVnZXhwKCl7cmV0dXJuIHRoaXMucmVnZXhwQ2FjaGV8fCh0aGlzLnJlZ2V4cENhY2hlPVJPLnJlZ2V4cCh0aGlzLm5hbWUpKX1yZXBsYWNlKGUsdCl7cmV0dXJuIGUucmVwbGFjZSh0aGlzLnJlZ2V4cCgpLGAkMSR7dH0kMmApfXZhbHVlKGUpe3JldHVybiBlLnJhd3MudmFsdWUmJmUucmF3cy52YWx1ZS52YWx1ZT09PWUudmFsdWU/ZS5yYXdzLnZhbHVlLnJhdzplLnZhbHVlfWFkZChlLHQpe2UuX2F1dG9wcmVmaXhlclZhbHVlc3x8KGUuX2F1dG9wcmVmaXhlclZhbHVlcz17fSk7bGV0IGk9ZS5fYXV0b3ByZWZpeGVyVmFsdWVzW3RdfHx0aGlzLnZhbHVlKGUpLG47ZG8gaWYobj1pLGk9dGhpcy5yZXBsYWNlKGksdCksaT09PSExKXJldHVybjt3aGlsZShpIT09bik7ZS5fYXV0b3ByZWZpeGVyVmFsdWVzW3RdPWl9b2xkKGUpe3JldHVybiBuZXcgT08odGhpcy5uYW1lLGUrdGhpcy5uYW1lKX19O2ZiLmV4cG9ydHM9dWJ9KTt2YXIgQnQ9eCgocCQsY2IpPT57dSgpO2NiLmV4cG9ydHM9e319KTt2YXIgb3U9eCgoZCQsaGIpPT57dSgpO3ZhciBwYj1NcygpLFBPPUhlKCksSU89QnQoKS5pbnNlcnRBcmVhcyxETz0vKF58W14tXSlsaW5lYXItZ3JhZGllbnRcKFxzKih0b3B8bGVmdHxyaWdodHxib3R0b20pL2kscU89LyhefFteLV0pcmFkaWFsLWdyYWRpZW50XChccypcZCsoXHcqfCUpXHMrXGQrKFx3KnwlKVxzKiwvaSwkTz0vKCFccyopP2F1dG9wcmVmaXhlcjpccyppZ25vcmVccytuZXh0L2ksTE89LyghXHMqKT9hdXRvcHJlZml4ZXJccypncmlkOlxzKihvbnxvZmZ8KG5vLSk/YXV0b3BsYWNlKS9pLE1PPVsid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgiLCJtYXgtd2lkdGgiLCJtaW4taGVpZ2h0IiwibWF4LWhlaWdodCIsImlubGluZS1zaXplIiwibWluLWlubGluZS1zaXplIiwibWF4LWlubGluZS1zaXplIiwiYmxvY2stc2l6ZSIsIm1pbi1ibG9jay1zaXplIiwibWF4LWJsb2NrLXNpemUiXTtmdW5jdGlvbiBhdShyKXtyZXR1cm4gci5wYXJlbnQuc29tZShlPT5lLnByb3A9PT0iZ3JpZC10ZW1wbGF0ZSJ8fGUucHJvcD09PSJncmlkLXRlbXBsYXRlLWFyZWFzIil9ZnVuY3Rpb24gTk8ocil7bGV0IGU9ci5wYXJlbnQuc29tZShpPT5pLnByb3A9PT0iZ3JpZC10ZW1wbGF0ZS1yb3dzIiksdD1yLnBhcmVudC5zb21lKGk9PmkucHJvcD09PSJncmlkLXRlbXBsYXRlLWNvbHVtbnMiKTtyZXR1cm4gZSYmdH12YXIgZGI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5wcmVmaXhlcz1lfWFkZChlLHQpe2xldCBpPXRoaXMucHJlZml4ZXMuYWRkWyJAcmVzb2x1dGlvbiJdLG49dGhpcy5wcmVmaXhlcy5hZGRbIkBrZXlmcmFtZXMiXSxzPXRoaXMucHJlZml4ZXMuYWRkWyJAdmlld3BvcnQiXSxhPXRoaXMucHJlZml4ZXMuYWRkWyJAc3VwcG9ydHMiXTtlLndhbGtBdFJ1bGVzKGY9PntpZihmLm5hbWU9PT0ia2V5ZnJhbWVzIil7aWYoIXRoaXMuZGlzYWJsZWQoZix0KSlyZXR1cm4gbiYmbi5wcm9jZXNzKGYpfWVsc2UgaWYoZi5uYW1lPT09InZpZXdwb3J0Iil7aWYoIXRoaXMuZGlzYWJsZWQoZix0KSlyZXR1cm4gcyYmcy5wcm9jZXNzKGYpfWVsc2UgaWYoZi5uYW1lPT09InN1cHBvcnRzIil7aWYodGhpcy5wcmVmaXhlcy5vcHRpb25zLnN1cHBvcnRzIT09ITEmJiF0aGlzLmRpc2FibGVkKGYsdCkpcmV0dXJuIGEucHJvY2VzcyhmKX1lbHNlIGlmKGYubmFtZT09PSJtZWRpYSImJmYucGFyYW1zLmluY2x1ZGVzKCItcmVzb2x1dGlvbiIpJiYhdGhpcy5kaXNhYmxlZChmLHQpKXJldHVybiBpJiZpLnByb2Nlc3MoZil9KSxlLndhbGtSdWxlcyhmPT57aWYoIXRoaXMuZGlzYWJsZWQoZix0KSlyZXR1cm4gdGhpcy5wcmVmaXhlcy5hZGQuc2VsZWN0b3JzLm1hcChkPT5kLnByb2Nlc3MoZix0KSl9KTtmdW5jdGlvbiBvKGYpe3JldHVybiBmLnBhcmVudC5ub2Rlcy5zb21lKGQ9PntpZihkLnR5cGUhPT0iZGVjbCIpcmV0dXJuITE7bGV0IHA9ZC5wcm9wPT09ImRpc3BsYXkiJiYvKGlubGluZS0pP2dyaWQvLnRlc3QoZC52YWx1ZSksaD1kLnByb3Auc3RhcnRzV2l0aCgiZ3JpZC10ZW1wbGF0ZSIpLGI9L15ncmlkLShbQS16XSstKT9nYXAvLnRlc3QoZC5wcm9wKTtyZXR1cm4gcHx8aHx8Yn0pfWZ1bmN0aW9uIGwoZil7cmV0dXJuIGYucGFyZW50LnNvbWUoZD0+ZC5wcm9wPT09ImRpc3BsYXkiJiYvKGlubGluZS0pP2ZsZXgvLnRlc3QoZC52YWx1ZSkpfWxldCBjPXRoaXMuZ3JpZFN0YXR1cyhlLHQpJiZ0aGlzLnByZWZpeGVzLmFkZFsiZ3JpZC1hcmVhIl0mJnRoaXMucHJlZml4ZXMuYWRkWyJncmlkLWFyZWEiXS5wcmVmaXhlcztyZXR1cm4gZS53YWxrRGVjbHMoZj0+e2lmKHRoaXMuZGlzYWJsZWREZWNsKGYsdCkpcmV0dXJuO2xldCBkPWYucGFyZW50LHA9Zi5wcm9wLGg9Zi52YWx1ZTtpZihwPT09ImdyaWQtcm93LXNwYW4iKXt0Lndhcm4oImdyaWQtcm93LXNwYW4gaXMgbm90IHBhcnQgb2YgZmluYWwgR3JpZCBMYXlvdXQuIFVzZSBncmlkLXJvdy4iLHtub2RlOmZ9KTtyZXR1cm59ZWxzZSBpZihwPT09ImdyaWQtY29sdW1uLXNwYW4iKXt0Lndhcm4oImdyaWQtY29sdW1uLXNwYW4gaXMgbm90IHBhcnQgb2YgZmluYWwgR3JpZCBMYXlvdXQuIFVzZSBncmlkLWNvbHVtbi4iLHtub2RlOmZ9KTtyZXR1cm59ZWxzZSBpZihwPT09ImRpc3BsYXkiJiZoPT09ImJveCIpe3Qud2FybigiWW91IHNob3VsZCB3cml0ZSBkaXNwbGF5OiBmbGV4IGJ5IGZpbmFsIHNwZWMgaW5zdGVhZCBvZiBkaXNwbGF5OiBib3giLHtub2RlOmZ9KTtyZXR1cm59ZWxzZSBpZihwPT09InRleHQtZW1waGFzaXMtcG9zaXRpb24iKShoPT09InVuZGVyInx8aD09PSJvdmVyIikmJnQud2FybigiWW91IHNob3VsZCB1c2UgMiB2YWx1ZXMgZm9yIHRleHQtZW1waGFzaXMtcG9zaXRpb24gRm9yIGV4YW1wbGUsIGB1bmRlciBsZWZ0YCBpbnN0ZWFkIG9mIGp1c3QgYHVuZGVyYC4iLHtub2RlOmZ9KTtlbHNlIGlmKC9eKGFsaWdufGp1c3RpZnl8cGxhY2UpLShpdGVtc3xjb250ZW50KSQvLnRlc3QocCkmJmwoZikpKGg9PT0ic3RhcnQifHxoPT09ImVuZCIpJiZ0Lndhcm4oYCR7aH0gdmFsdWUgaGFzIG1peGVkIHN1cHBvcnQsIGNvbnNpZGVyIHVzaW5nIGZsZXgtJHtofSBpbnN0ZWFkYCx7bm9kZTpmfSk7ZWxzZSBpZihwPT09InRleHQtZGVjb3JhdGlvbi1za2lwIiYmaD09PSJpbmsiKXQud2FybigiUmVwbGFjZSB0ZXh0LWRlY29yYXRpb24tc2tpcDogaW5rIHRvIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogYXV0bywgYmVjYXVzZSBzcGVjIGhhZCBiZWVuIGNoYW5nZWQiLHtub2RlOmZ9KTtlbHNle2lmKGMmJnRoaXMuZ3JpZFN0YXR1cyhmLHQpKWlmKGYudmFsdWU9PT0ic3ViZ3JpZCImJnQud2FybigiSUUgZG9lcyBub3Qgc3VwcG9ydCBzdWJncmlkIix7bm9kZTpmfSksL14oYWxpZ258anVzdGlmeXxwbGFjZSktaXRlbXMkLy50ZXN0KHApJiZvKGYpKXtsZXQgdj1wLnJlcGxhY2UoIi1pdGVtcyIsIi1zZWxmIik7dC53YXJuKGBJRSBkb2VzIG5vdCBzdXBwb3J0ICR7cH0gb24gZ3JpZCBjb250YWluZXJzLiBUcnkgdXNpbmcgJHt2fSBvbiBjaGlsZCBlbGVtZW50cyBpbnN0ZWFkOiAke2YucGFyZW50LnNlbGVjdG9yfSA+ICogeyAke3Z9OiAke2YudmFsdWV9IH1gLHtub2RlOmZ9KX1lbHNlIGlmKC9eKGFsaWdufGp1c3RpZnl8cGxhY2UpLWNvbnRlbnQkLy50ZXN0KHApJiZvKGYpKXQud2FybihgSUUgZG9lcyBub3Qgc3VwcG9ydCAke2YucHJvcH0gb24gZ3JpZCBjb250YWluZXJzYCx7bm9kZTpmfSk7ZWxzZSBpZihwPT09ImRpc3BsYXkiJiZmLnZhbHVlPT09ImNvbnRlbnRzIil7dC53YXJuKCJQbGVhc2UgZG8gbm90IHVzZSBkaXNwbGF5OiBjb250ZW50czsgaWYgeW91IGhhdmUgZ3JpZCBzZXR0aW5nIGVuYWJsZWQiLHtub2RlOmZ9KTtyZXR1cm59ZWxzZSBpZihmLnByb3A9PT0iZ3JpZC1nYXAiKXtsZXQgdj10aGlzLmdyaWRTdGF0dXMoZix0KTt2PT09ImF1dG9wbGFjZSImJiFOTyhmKSYmIWF1KGYpP3Qud2FybigiZ3JpZC1nYXAgb25seSB3b3JrcyBpZiBncmlkLXRlbXBsYXRlKC1hcmVhcykgaXMgYmVpbmcgdXNlZCBvciBib3RoIHJvd3MgYW5kIGNvbHVtbnMgaGF2ZSBiZWVuIGRlY2xhcmVkIGFuZCBjZWxscyBoYXZlIG5vdCBiZWVuIG1hbnVhbGx5IHBsYWNlZCBpbnNpZGUgdGhlIGV4cGxpY2l0IGdyaWQiLHtub2RlOmZ9KToodj09PSEwfHx2PT09Im5vLWF1dG9wbGFjZSIpJiYhYXUoZikmJnQud2FybigiZ3JpZC1nYXAgb25seSB3b3JrcyBpZiBncmlkLXRlbXBsYXRlKC1hcmVhcykgaXMgYmVpbmcgdXNlZCIse25vZGU6Zn0pfWVsc2UgaWYocD09PSJncmlkLWF1dG8tY29sdW1ucyIpe3Qud2FybigiZ3JpZC1hdXRvLWNvbHVtbnMgaXMgbm90IHN1cHBvcnRlZCBieSBJRSIse25vZGU6Zn0pO3JldHVybn1lbHNlIGlmKHA9PT0iZ3JpZC1hdXRvLXJvd3MiKXt0Lndhcm4oImdyaWQtYXV0by1yb3dzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgSUUiLHtub2RlOmZ9KTtyZXR1cm59ZWxzZSBpZihwPT09ImdyaWQtYXV0by1mbG93Iil7bGV0IHY9ZC5zb21lKHc9PncucHJvcD09PSJncmlkLXRlbXBsYXRlLXJvd3MiKSx5PWQuc29tZSh3PT53LnByb3A9PT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIik7YXUoZik/dC53YXJuKCJncmlkLWF1dG8tZmxvdyBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFIix7bm9kZTpmfSk6aC5pbmNsdWRlcygiZGVuc2UiKT90Lndhcm4oImdyaWQtYXV0by1mbG93OiBkZW5zZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IElFIix7bm9kZTpmfSk6IXYmJiF5JiZ0Lndhcm4oImdyaWQtYXV0by1mbG93IHdvcmtzIG9ubHkgaWYgZ3JpZC10ZW1wbGF0ZS1yb3dzIGFuZCBncmlkLXRlbXBsYXRlLWNvbHVtbnMgYXJlIHByZXNlbnQgaW4gdGhlIHNhbWUgcnVsZSIse25vZGU6Zn0pO3JldHVybn1lbHNlIGlmKGguaW5jbHVkZXMoImF1dG8tZml0Iikpe3Qud2FybigiYXV0by1maXQgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCBieSBJRSIse25vZGU6Zix3b3JkOiJhdXRvLWZpdCJ9KTtyZXR1cm59ZWxzZSBpZihoLmluY2x1ZGVzKCJhdXRvLWZpbGwiKSl7dC53YXJuKCJhdXRvLWZpbGwgdmFsdWUgaXMgbm90IHN1cHBvcnRlZCBieSBJRSIse25vZGU6Zix3b3JkOiJhdXRvLWZpbGwifSk7cmV0dXJufWVsc2UgcC5zdGFydHNXaXRoKCJncmlkLXRlbXBsYXRlIikmJmguaW5jbHVkZXMoIlsiKSYmdC53YXJuKCJBdXRvcHJlZml4ZXIgY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgbGluZSBuYW1lcy4gVHJ5IHVzaW5nIGdyaWQtdGVtcGxhdGUtYXJlYXMgaW5zdGVhZC4iLHtub2RlOmYsd29yZDoiWyJ9KTtpZihoLmluY2x1ZGVzKCJyYWRpYWwtZ3JhZGllbnQiKSlpZihxTy50ZXN0KGYudmFsdWUpKXQud2FybigiR3JhZGllbnQgaGFzIG91dGRhdGVkIGRpcmVjdGlvbiBzeW50YXguIE5ldyBzeW50YXggaXMgbGlrZSBgY2xvc2VzdC1zaWRlIGF0IDAgMGAgaW5zdGVhZCBvZiBgMCAwLCBjbG9zZXN0LXNpZGVgLiIse25vZGU6Zn0pO2Vsc2V7bGV0IHY9cGIoaCk7Zm9yKGxldCB5IG9mIHYubm9kZXMpaWYoeS50eXBlPT09ImZ1bmN0aW9uIiYmeS52YWx1ZT09PSJyYWRpYWwtZ3JhZGllbnQiKWZvcihsZXQgdyBvZiB5Lm5vZGVzKXcudHlwZT09PSJ3b3JkIiYmKHcudmFsdWU9PT0iY292ZXIiP3Qud2FybigiR3JhZGllbnQgaGFzIG91dGRhdGVkIGRpcmVjdGlvbiBzeW50YXguIFJlcGxhY2UgYGNvdmVyYCB0byBgZmFydGhlc3QtY29ybmVyYC4iLHtub2RlOmZ9KTp3LnZhbHVlPT09ImNvbnRhaW4iJiZ0Lndhcm4oIkdyYWRpZW50IGhhcyBvdXRkYXRlZCBkaXJlY3Rpb24gc3ludGF4LiBSZXBsYWNlIGBjb250YWluYCB0byBgY2xvc2VzdC1zaWRlYC4iLHtub2RlOmZ9KSl9aC5pbmNsdWRlcygibGluZWFyLWdyYWRpZW50IikmJkRPLnRlc3QoaCkmJnQud2FybigiR3JhZGllbnQgaGFzIG91dGRhdGVkIGRpcmVjdGlvbiBzeW50YXguIE5ldyBzeW50YXggaXMgbGlrZSBgdG8gbGVmdGAgaW5zdGVhZCBvZiBgcmlnaHRgLiIse25vZGU6Zn0pfU1PLmluY2x1ZGVzKGYucHJvcCkmJihmLnZhbHVlLmluY2x1ZGVzKCItZmlsbC1hdmFpbGFibGUiKXx8KGYudmFsdWUuaW5jbHVkZXMoImZpbGwtYXZhaWxhYmxlIik/dC53YXJuKCJSZXBsYWNlIGZpbGwtYXZhaWxhYmxlIHRvIHN0cmV0Y2gsIGJlY2F1c2Ugc3BlYyBoYWQgYmVlbiBjaGFuZ2VkIix7bm9kZTpmfSk6Zi52YWx1ZS5pbmNsdWRlcygiZmlsbCIpJiZwYihoKS5ub2Rlcy5zb21lKHk9PnkudHlwZT09PSJ3b3JkIiYmeS52YWx1ZT09PSJmaWxsIikmJnQud2FybigiUmVwbGFjZSBmaWxsIHRvIHN0cmV0Y2gsIGJlY2F1c2Ugc3BlYyBoYWQgYmVlbiBjaGFuZ2VkIix7bm9kZTpmfSkpKTtsZXQgYjtpZihmLnByb3A9PT0idHJhbnNpdGlvbiJ8fGYucHJvcD09PSJ0cmFuc2l0aW9uLXByb3BlcnR5IilyZXR1cm4gdGhpcy5wcmVmaXhlcy50cmFuc2l0aW9uLmFkZChmLHQpO2lmKGYucHJvcD09PSJhbGlnbi1zZWxmIil7aWYodGhpcy5kaXNwbGF5VHlwZShmKSE9PSJncmlkIiYmdGhpcy5wcmVmaXhlcy5vcHRpb25zLmZsZXhib3ghPT0hMSYmKGI9dGhpcy5wcmVmaXhlcy5hZGRbImFsaWduLXNlbGYiXSxiJiZiLnByZWZpeGVzJiZiLnByb2Nlc3MoZikpLHRoaXMuZ3JpZFN0YXR1cyhmLHQpIT09ITEmJihiPXRoaXMucHJlZml4ZXMuYWRkWyJncmlkLXJvdy1hbGlnbiJdLGImJmIucHJlZml4ZXMpKXJldHVybiBiLnByb2Nlc3MoZix0KX1lbHNlIGlmKGYucHJvcD09PSJqdXN0aWZ5LXNlbGYiKXtpZih0aGlzLmdyaWRTdGF0dXMoZix0KSE9PSExJiYoYj10aGlzLnByZWZpeGVzLmFkZFsiZ3JpZC1jb2x1bW4tYWxpZ24iXSxiJiZiLnByZWZpeGVzKSlyZXR1cm4gYi5wcm9jZXNzKGYsdCl9ZWxzZSBpZihmLnByb3A9PT0icGxhY2Utc2VsZiIpe2lmKGI9dGhpcy5wcmVmaXhlcy5hZGRbInBsYWNlLXNlbGYiXSxiJiZiLnByZWZpeGVzJiZ0aGlzLmdyaWRTdGF0dXMoZix0KSE9PSExKXJldHVybiBiLnByb2Nlc3MoZix0KX1lbHNlIGlmKGI9dGhpcy5wcmVmaXhlcy5hZGRbZi5wcm9wXSxiJiZiLnByZWZpeGVzKXJldHVybiBiLnByb2Nlc3MoZix0KX0pLHRoaXMuZ3JpZFN0YXR1cyhlLHQpJiZJTyhlLHRoaXMuZGlzYWJsZWQpLGUud2Fsa0RlY2xzKGY9PntpZih0aGlzLmRpc2FibGVkVmFsdWUoZix0KSlyZXR1cm47bGV0IGQ9dGhpcy5wcmVmaXhlcy51bnByZWZpeGVkKGYucHJvcCkscD10aGlzLnByZWZpeGVzLnZhbHVlcygiYWRkIixkKTtpZihBcnJheS5pc0FycmF5KHApKWZvcihsZXQgaCBvZiBwKWgucHJvY2VzcyYmaC5wcm9jZXNzKGYsdCk7UE8uc2F2ZSh0aGlzLnByZWZpeGVzLGYpfSl9cmVtb3ZlKGUsdCl7bGV0IGk9dGhpcy5wcmVmaXhlcy5yZW1vdmVbIkByZXNvbHV0aW9uIl07ZS53YWxrQXRSdWxlcygobixzKT0+e3RoaXMucHJlZml4ZXMucmVtb3ZlW2BAJHtuLm5hbWV9YF0/dGhpcy5kaXNhYmxlZChuLHQpfHxuLnBhcmVudC5yZW1vdmVDaGlsZChzKTpuLm5hbWU9PT0ibWVkaWEiJiZuLnBhcmFtcy5pbmNsdWRlcygiLXJlc29sdXRpb24iKSYmaSYmaS5jbGVhbihuKX0pO2ZvcihsZXQgbiBvZiB0aGlzLnByZWZpeGVzLnJlbW92ZS5zZWxlY3RvcnMpZS53YWxrUnVsZXMoKHMsYSk9PntuLmNoZWNrKHMpJiYodGhpcy5kaXNhYmxlZChzLHQpfHxzLnBhcmVudC5yZW1vdmVDaGlsZChhKSl9KTtyZXR1cm4gZS53YWxrRGVjbHMoKG4scyk9PntpZih0aGlzLmRpc2FibGVkKG4sdCkpcmV0dXJuO2xldCBhPW4ucGFyZW50LG89dGhpcy5wcmVmaXhlcy51bnByZWZpeGVkKG4ucHJvcCk7aWYoKG4ucHJvcD09PSJ0cmFuc2l0aW9uInx8bi5wcm9wPT09InRyYW5zaXRpb24tcHJvcGVydHkiKSYmdGhpcy5wcmVmaXhlcy50cmFuc2l0aW9uLnJlbW92ZShuKSx0aGlzLnByZWZpeGVzLnJlbW92ZVtuLnByb3BdJiZ0aGlzLnByZWZpeGVzLnJlbW92ZVtuLnByb3BdLnJlbW92ZSl7bGV0IGw9dGhpcy5wcmVmaXhlcy5ncm91cChuKS5kb3duKGM9PnRoaXMucHJlZml4ZXMubm9ybWFsaXplKGMucHJvcCk9PT1vKTtpZihvPT09ImZsZXgtZmxvdyImJihsPSEwKSxuLnByb3A9PT0iLXdlYmtpdC1ib3gtb3JpZW50Iil7bGV0IGM9eyJmbGV4LWRpcmVjdGlvbiI6ITAsImZsZXgtZmxvdyI6ITB9O2lmKCFuLnBhcmVudC5zb21lKGY9PmNbZi5wcm9wXSkpcmV0dXJufWlmKGwmJiF0aGlzLndpdGhIYWNrVmFsdWUobikpe24ucmF3KCJiZWZvcmUiKS5pbmNsdWRlcyhgCmApJiZ0aGlzLnJlZHVjZVNwYWNlcyhuKSxhLnJlbW92ZUNoaWxkKHMpO3JldHVybn19Zm9yKGxldCBsIG9mIHRoaXMucHJlZml4ZXMudmFsdWVzKCJyZW1vdmUiLG8pKXtpZighbC5jaGVja3x8IWwuY2hlY2sobi52YWx1ZSkpY29udGludWU7aWYobz1sLnVucHJlZml4ZWQsdGhpcy5wcmVmaXhlcy5ncm91cChuKS5kb3duKGY9PmYudmFsdWUuaW5jbHVkZXMobykpKXthLnJlbW92ZUNoaWxkKHMpO3JldHVybn19fSl9d2l0aEhhY2tWYWx1ZShlKXtyZXR1cm4gZS5wcm9wPT09Ii13ZWJraXQtYmFja2dyb3VuZC1jbGlwIiYmZS52YWx1ZT09PSJ0ZXh0In1kaXNhYmxlZFZhbHVlKGUsdCl7cmV0dXJuIHRoaXMuZ3JpZFN0YXR1cyhlLHQpPT09ITEmJmUudHlwZT09PSJkZWNsIiYmZS5wcm9wPT09ImRpc3BsYXkiJiZlLnZhbHVlLmluY2x1ZGVzKCJncmlkIil8fHRoaXMucHJlZml4ZXMub3B0aW9ucy5mbGV4Ym94PT09ITEmJmUudHlwZT09PSJkZWNsIiYmZS5wcm9wPT09ImRpc3BsYXkiJiZlLnZhbHVlLmluY2x1ZGVzKCJmbGV4Iil8fGUudHlwZT09PSJkZWNsIiYmZS5wcm9wPT09ImNvbnRlbnQiPyEwOnRoaXMuZGlzYWJsZWQoZSx0KX1kaXNhYmxlZERlY2woZSx0KXtpZih0aGlzLmdyaWRTdGF0dXMoZSx0KT09PSExJiZlLnR5cGU9PT0iZGVjbCImJihlLnByb3AuaW5jbHVkZXMoImdyaWQiKXx8ZS5wcm9wPT09Imp1c3RpZnktaXRlbXMiKSlyZXR1cm4hMDtpZih0aGlzLnByZWZpeGVzLm9wdGlvbnMuZmxleGJveD09PSExJiZlLnR5cGU9PT0iZGVjbCIpe2xldCBpPVsib3JkZXIiLCJqdXN0aWZ5LWNvbnRlbnQiLCJhbGlnbi1pdGVtcyIsImFsaWduLWNvbnRlbnQiXTtpZihlLnByb3AuaW5jbHVkZXMoImZsZXgiKXx8aS5pbmNsdWRlcyhlLnByb3ApKXJldHVybiEwfXJldHVybiB0aGlzLmRpc2FibGVkKGUsdCl9ZGlzYWJsZWQoZSx0KXtpZighZSlyZXR1cm4hMTtpZihlLl9hdXRvcHJlZml4ZXJEaXNhYmxlZCE9PXZvaWQgMClyZXR1cm4gZS5fYXV0b3ByZWZpeGVyRGlzYWJsZWQ7aWYoZS5wYXJlbnQpe2xldCBuPWUucHJldigpO2lmKG4mJm4udHlwZT09PSJjb21tZW50IiYmJE8udGVzdChuLnRleHQpKXJldHVybiBlLl9hdXRvcHJlZml4ZXJEaXNhYmxlZD0hMCxlLl9hdXRvcHJlZml4ZXJTZWxmRGlzYWJsZWQ9ITAsITB9bGV0IGk9bnVsbDtpZihlLm5vZGVzKXtsZXQgbjtlLmVhY2gocz0+e3MudHlwZT09PSJjb21tZW50IiYmLyghXHMqKT9hdXRvcHJlZml4ZXI6XHMqKG9mZnxvbikvaS50ZXN0KHMudGV4dCkmJih0eXBlb2YgbiE9InVuZGVmaW5lZCI/dC53YXJuKCJTZWNvbmQgQXV0b3ByZWZpeGVyIGNvbnRyb2wgY29tbWVudCB3YXMgaWdub3JlZC4gQXV0b3ByZWZpeGVyIGFwcGxpZXMgY29udHJvbCBjb21tZW50IHRvIHdob2xlIGJsb2NrLCBub3QgdG8gbmV4dCBydWxlcy4iLHtub2RlOnN9KTpuPS9vbi9pLnRlc3Qocy50ZXh0KSl9KSxuIT09dm9pZCAwJiYoaT0hbil9aWYoIWUubm9kZXN8fGk9PT1udWxsKWlmKGUucGFyZW50KXtsZXQgbj10aGlzLmRpc2FibGVkKGUucGFyZW50LHQpO2UucGFyZW50Ll9hdXRvcHJlZml4ZXJTZWxmRGlzYWJsZWQ9PT0hMD9pPSExOmk9bn1lbHNlIGk9ITE7cmV0dXJuIGUuX2F1dG9wcmVmaXhlckRpc2FibGVkPWksaX1yZWR1Y2VTcGFjZXMoZSl7bGV0IHQ9ITE7aWYodGhpcy5wcmVmaXhlcy5ncm91cChlKS51cCgoKT0+KHQ9ITAsITApKSx0KXJldHVybjtsZXQgaT1lLnJhdygiYmVmb3JlIikuc3BsaXQoYApgKSxuPWlbaS5sZW5ndGgtMV0ubGVuZ3RoLHM9ITE7dGhpcy5wcmVmaXhlcy5ncm91cChlKS5kb3duKGE9PntpPWEucmF3KCJiZWZvcmUiKS5zcGxpdChgCmApO2xldCBvPWkubGVuZ3RoLTE7aVtvXS5sZW5ndGg+biYmKHM9PT0hMSYmKHM9aVtvXS5sZW5ndGgtbiksaVtvXT1pW29dLnNsaWNlKDAsLXMpLGEucmF3cy5iZWZvcmU9aS5qb2luKGAKYCkpfSl9ZGlzcGxheVR5cGUoZSl7Zm9yKGxldCB0IG9mIGUucGFyZW50Lm5vZGVzKWlmKHQucHJvcD09PSJkaXNwbGF5Iil7aWYodC52YWx1ZS5pbmNsdWRlcygiZmxleCIpKXJldHVybiJmbGV4IjtpZih0LnZhbHVlLmluY2x1ZGVzKCJncmlkIikpcmV0dXJuImdyaWQifXJldHVybiExfWdyaWRTdGF0dXMoZSx0KXtpZighZSlyZXR1cm4hMTtpZihlLl9hdXRvcHJlZml4ZXJHcmlkU3RhdHVzIT09dm9pZCAwKXJldHVybiBlLl9hdXRvcHJlZml4ZXJHcmlkU3RhdHVzO2xldCBpPW51bGw7aWYoZS5ub2Rlcyl7bGV0IG47ZS5lYWNoKHM9PntpZihzLnR5cGU9PT0iY29tbWVudCImJkxPLnRlc3Qocy50ZXh0KSl7bGV0IGE9LzpccyphdXRvcGxhY2UvaS50ZXN0KHMudGV4dCksbz0vbm8tYXV0b3BsYWNlL2kudGVzdChzLnRleHQpO3R5cGVvZiBuIT0idW5kZWZpbmVkIj90Lndhcm4oIlNlY29uZCBBdXRvcHJlZml4ZXIgZ3JpZCBjb250cm9sIGNvbW1lbnQgd2FzIGlnbm9yZWQuIEF1dG9wcmVmaXhlciBhcHBsaWVzIGNvbnRyb2wgY29tbWVudHMgdG8gdGhlIHdob2xlIGJsb2NrLCBub3QgdG8gdGhlIG5leHQgcnVsZXMuIix7bm9kZTpzfSk6YT9uPSJhdXRvcGxhY2UiOm8/bj0hMDpuPS9vbi9pLnRlc3Qocy50ZXh0KX19KSxuIT09dm9pZCAwJiYoaT1uKX1pZihlLnR5cGU9PT0iYXRydWxlIiYmZS5uYW1lPT09InN1cHBvcnRzIil7bGV0IG49ZS5wYXJhbXM7bi5pbmNsdWRlcygiZ3JpZCIpJiZuLmluY2x1ZGVzKCJhdXRvIikmJihpPSExKX1pZighZS5ub2Rlc3x8aT09PW51bGwpaWYoZS5wYXJlbnQpe2xldCBuPXRoaXMuZ3JpZFN0YXR1cyhlLnBhcmVudCx0KTtlLnBhcmVudC5fYXV0b3ByZWZpeGVyU2VsZkRpc2FibGVkPT09ITA/aT0hMTppPW59ZWxzZSB0eXBlb2YgdGhpcy5wcmVmaXhlcy5vcHRpb25zLmdyaWQhPSJ1bmRlZmluZWQiP2k9dGhpcy5wcmVmaXhlcy5vcHRpb25zLmdyaWQ6dHlwZW9mIG0uZW52LkFVVE9QUkVGSVhFUl9HUklEIT0idW5kZWZpbmVkIj9tLmVudi5BVVRPUFJFRklYRVJfR1JJRD09PSJhdXRvcGxhY2UiP2k9ImF1dG9wbGFjZSI6aT0hMDppPSExO3JldHVybiBlLl9hdXRvcHJlZml4ZXJHcmlkU3RhdHVzPWksaX19O2hiLmV4cG9ydHM9ZGJ9KTt2YXIgZ2I9eCgoaCQsbWIpPT57dSgpO21iLmV4cG9ydHM9e0E6e0E6eyIyIjoiSyBFIEYgRyBBIEIgSkMifSxCOnsiMSI6IkMgTCBNIEggTiBEIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIGEgYiBjIGQgZSBmIGcgaCBpIGogbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiBJIn0sQzp7IjEiOiIyIDMgNCA1IDYgNyA4IDkgQUIgQkIgQ0IgREIgRUIgRkIgR0IgSEIgSUIgSkIgS0IgTEIgTUIgTkIgT0IgUEIgUUIgUkIgU0IgVEIgVUIgVkIgV0IgWEIgWUIgWkIgYUIgYkIgY0IgMEIgZEIgMUIgZUIgZkIgZ0IgaEIgaUIgakIga0IgbEIgbUIgbkIgb0IgbSBwQiBxQiByQiBzQiB0QiBQIFEgUiAyQiBTIFQgVSBWIFcgWCBZIFogYSBiIGMgZCBlIGYgZyBoIGkgaiBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IEkgdUIgM0IgNEIiLCIyIjoiMCAxIEtDIHpCIEogSyBFIEYgRyBBIEIgQyBMIE0gSCBOIEQgTyBrIGwgTEMgTUMifSxEOnsiMSI6IjggOSBBQiBCQiBDQiBEQiBFQiBGQiBHQiBIQiBJQiBKQiBLQiBMQiBNQiBOQiBPQiBQQiBRQiBSQiBTQiBUQiBVQiBWQiBXQiBYQiBZQiBaQiBhQiBiQiBjQiAwQiBkQiAxQiBlQiBmQiBnQiBoQiBpQiBqQiBrQiBsQiBtQiBuQiBvQiBtIHBCIHFCIHJCIHNCIHRCIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBhIGIgYyBkIGUgZiBnIGggaSBqIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogSSB1QiAzQiA0QiIsIjIiOiIwIDEgMiAzIDQgNSA2IDcgSiBLIEUgRiBHIEEgQiBDIEwgTSBIIE4gRCBPIGsgbCJ9LEU6eyIxIjoiRyBBIEIgQyBMIE0gSCBEIFJDIDZCIHZCIHdCIDdCIFNDIFRDIDhCIDlCIHhCIEFDIHlCIEJDIENDIERDIEVDIEZDIEdDIFVDIiwiMiI6IjAgSiBLIEUgRiBOQyA1QiBPQyBQQyBRQyJ9LEY6eyIxIjoiMSAyIDMgNCA1IDYgNyA4IDkgSCBOIEQgTyBrIGwgQUIgQkIgQ0IgREIgRUIgRkIgR0IgSEIgSUIgSkIgS0IgTEIgTUIgTkIgT0IgUEIgUUIgUkIgU0IgVEIgVUIgVkIgV0IgWEIgWUIgWkIgYUIgYkIgY0IgZEIgZUIgZkIgZ0IgaEIgaUIgakIga0IgbEIgbUIgbkIgb0IgbSBwQiBxQiByQiBzQiB0QiBQIFEgUiAyQiBTIFQgVSBWIFcgWCBZIFogYSBiIGMgZCBlIGYgZyBoIGkgaiB3QiIsIjIiOiJHIEIgQyBWQyBXQyBYQyBZQyB2QiBIQyBaQyJ9LEc6eyIxIjoiRCBmQyBnQyBoQyBpQyBqQyBrQyBsQyBtQyBuQyBvQyBwQyBxQyByQyBzQyB0QyA4QiA5QiB4QiBBQyB5QiBCQyBDQyBEQyBFQyBGQyBHQyIsIjIiOiJGIDVCIGFDIElDIGJDIGNDIGRDIGVDIn0sSDp7IjEiOiJ1QyJ9LEk6eyIxIjoiSSB6QyAwQyIsIjIiOiJ6QiBKIHZDIHdDIHhDIHlDIElDIn0sSjp7IjIiOiJFIEEifSxLOnsiMSI6Im0iLCIyIjoiQSBCIEMgdkIgSEMgd0IifSxMOnsiMSI6IkkifSxNOnsiMSI6InVCIn0sTjp7IjIiOiJBIEIifSxPOnsiMSI6InhCIn0sUDp7IjEiOiJKIGsgbCAxQyAyQyAzQyA0QyA1QyA2QiA2QyA3QyA4QyA5QyBBRCB5QiBCRCBDRCBERCJ9LFE6eyIxIjoiN0IifSxSOnsiMSI6IkVEIn0sUzp7IjEiOiJGRCBHRCJ9fSxCOjQsQzoiQ1NTIEZlYXR1cmUgUXVlcmllcyJ9fSk7dmFyIHZiPXgoKG0kLHdiKT0+e3UoKTtmdW5jdGlvbiB5YihyKXtyZXR1cm4gcltyLmxlbmd0aC0xXX12YXIgYmI9e3BhcnNlKHIpe2xldCBlPVsiIl0sdD1bZV07Zm9yKGxldCBpIG9mIHIpe2lmKGk9PT0iKCIpe2U9WyIiXSx5Yih0KS5wdXNoKGUpLHQucHVzaChlKTtjb250aW51ZX1pZihpPT09IikiKXt0LnBvcCgpLGU9eWIodCksZS5wdXNoKCIiKTtjb250aW51ZX1lW2UubGVuZ3RoLTFdKz1pfXJldHVybiB0WzBdfSxzdHJpbmdpZnkocil7bGV0IGU9IiI7Zm9yKGxldCB0IG9mIHIpe2lmKHR5cGVvZiB0PT0ib2JqZWN0Iil7ZSs9YCgke2JiLnN0cmluZ2lmeSh0KX0pYDtjb250aW51ZX1lKz10fXJldHVybiBlfX07d2IuZXhwb3J0cz1iYn0pO3ZhciBDYj14KChnJCxBYik9Pnt1KCk7dmFyIEJPPWdiKCkse2ZlYXR1cmU6Rk99PShQcygpLFJzKSx7cGFyc2U6ak99PSRlKCksek89TXQoKSxsdT12YigpLFVPPUhlKCksVk89X2UoKSx4Yj1GTyhCTyksa2I9W107Zm9yKGxldCByIGluIHhiLnN0YXRzKXtsZXQgZT14Yi5zdGF0c1tyXTtmb3IobGV0IHQgaW4gZSl7bGV0IGk9ZVt0XTsveS8udGVzdChpKSYma2IucHVzaChyKyIgIit0KX19dmFyIFNiPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5QcmVmaXhlcz1lLHRoaXMuYWxsPXR9cHJlZml4ZXIoKXtpZih0aGlzLnByZWZpeGVyQ2FjaGUpcmV0dXJuIHRoaXMucHJlZml4ZXJDYWNoZTtsZXQgZT10aGlzLmFsbC5icm93c2Vycy5zZWxlY3RlZC5maWx0ZXIoaT0+a2IuaW5jbHVkZXMoaSkpLHQ9bmV3IHpPKHRoaXMuYWxsLmJyb3dzZXJzLmRhdGEsZSx0aGlzLmFsbC5vcHRpb25zKTtyZXR1cm4gdGhpcy5wcmVmaXhlckNhY2hlPW5ldyB0aGlzLlByZWZpeGVzKHRoaXMuYWxsLmRhdGEsdCx0aGlzLmFsbC5vcHRpb25zKSx0aGlzLnByZWZpeGVyQ2FjaGV9cGFyc2UoZSl7bGV0IHQ9ZS5zcGxpdCgiOiIpLGk9dFswXSxuPXRbMV07cmV0dXJuIG58fChuPSIiKSxbaS50cmltKCksbi50cmltKCldfXZpcnR1YWwoZSl7bGV0W3QsaV09dGhpcy5wYXJzZShlKSxuPWpPKCJhe30iKS5maXJzdDtyZXR1cm4gbi5hcHBlbmQoe3Byb3A6dCx2YWx1ZTppLHJhd3M6e2JlZm9yZToiIn19KSxufXByZWZpeGVkKGUpe2xldCB0PXRoaXMudmlydHVhbChlKTtpZih0aGlzLmRpc2FibGVkKHQuZmlyc3QpKXJldHVybiB0Lm5vZGVzO2xldCBpPXt3YXJuOigpPT5udWxsfSxuPXRoaXMucHJlZml4ZXIoKS5hZGRbdC5maXJzdC5wcm9wXTtuJiZuLnByb2Nlc3MmJm4ucHJvY2Vzcyh0LmZpcnN0LGkpO2ZvcihsZXQgcyBvZiB0Lm5vZGVzKXtmb3IobGV0IGEgb2YgdGhpcy5wcmVmaXhlcigpLnZhbHVlcygiYWRkIix0LmZpcnN0LnByb3ApKWEucHJvY2VzcyhzKTtVTy5zYXZlKHRoaXMuYWxsLHMpfXJldHVybiB0Lm5vZGVzfWlzTm90KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJi9ub3RccyovaS50ZXN0KGUpfWlzT3IoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmL1xzKm9yXHMqL2kudGVzdChlKX1pc1Byb3AoZSl7cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0IiYmZS5sZW5ndGg9PT0xJiZ0eXBlb2YgZVswXT09InN0cmluZyJ9aXNIYWNrKGUsdCl7cmV0dXJuIW5ldyBSZWdFeHAoYChcXCh8XFxzKSR7Vk8uZXNjYXBlUmVnZXhwKHQpfTpgKS50ZXN0KGUpfXRvUmVtb3ZlKGUsdCl7bGV0W2ksbl09dGhpcy5wYXJzZShlKSxzPXRoaXMuYWxsLnVucHJlZml4ZWQoaSksYT10aGlzLmFsbC5jbGVhbmVyKCk7aWYoYS5yZW1vdmVbaV0mJmEucmVtb3ZlW2ldLnJlbW92ZSYmIXRoaXMuaXNIYWNrKHQscykpcmV0dXJuITA7Zm9yKGxldCBvIG9mIGEudmFsdWVzKCJyZW1vdmUiLHMpKWlmKG8uY2hlY2sobikpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlKGUsdCl7bGV0IGk9MDtmb3IoO2k8ZS5sZW5ndGg7KXtpZighdGhpcy5pc05vdChlW2ktMV0pJiZ0aGlzLmlzUHJvcChlW2ldKSYmdGhpcy5pc09yKGVbaSsxXSkpe2lmKHRoaXMudG9SZW1vdmUoZVtpXVswXSx0KSl7ZS5zcGxpY2UoaSwyKTtjb250aW51ZX1pKz0yO2NvbnRpbnVlfXR5cGVvZiBlW2ldPT0ib2JqZWN0IiYmKGVbaV09dGhpcy5yZW1vdmUoZVtpXSx0KSksaSs9MX1yZXR1cm4gZX1jbGVhbkJyYWNrZXRzKGUpe3JldHVybiBlLm1hcCh0PT50eXBlb2YgdCE9Im9iamVjdCI/dDp0Lmxlbmd0aD09PTEmJnR5cGVvZiB0WzBdPT0ib2JqZWN0Ij90aGlzLmNsZWFuQnJhY2tldHModFswXSk6dGhpcy5jbGVhbkJyYWNrZXRzKHQpKX1jb252ZXJ0KGUpe2xldCB0PVsiIl07Zm9yKGxldCBpIG9mIGUpdC5wdXNoKFtgJHtpLnByb3B9OiAke2kudmFsdWV9YF0pLHQucHVzaCgiIG9yICIpO3JldHVybiB0W3QubGVuZ3RoLTFdPSIiLHR9bm9ybWFsaXplKGUpe2lmKHR5cGVvZiBlIT0ib2JqZWN0IilyZXR1cm4gZTtpZihlPWUuZmlsdGVyKHQ9PnQhPT0iIiksdHlwZW9mIGVbMF09PSJzdHJpbmciKXtsZXQgdD1lWzBdLnRyaW0oKTtpZih0LmluY2x1ZGVzKCI6Iil8fHQ9PT0ic2VsZWN0b3IifHx0PT09Im5vdCBzZWxlY3RvciIpcmV0dXJuW2x1LnN0cmluZ2lmeShlKV19cmV0dXJuIGUubWFwKHQ9PnRoaXMubm9ybWFsaXplKHQpKX1hZGQoZSx0KXtyZXR1cm4gZS5tYXAoaT0+e2lmKHRoaXMuaXNQcm9wKGkpKXtsZXQgbj10aGlzLnByZWZpeGVkKGlbMF0pO3JldHVybiBuLmxlbmd0aD4xP3RoaXMuY29udmVydChuKTppfXJldHVybiB0eXBlb2YgaT09Im9iamVjdCI/dGhpcy5hZGQoaSx0KTppfSl9cHJvY2VzcyhlKXtsZXQgdD1sdS5wYXJzZShlLnBhcmFtcyk7dD10aGlzLm5vcm1hbGl6ZSh0KSx0PXRoaXMucmVtb3ZlKHQsZS5wYXJhbXMpLHQ9dGhpcy5hZGQodCxlLnBhcmFtcyksdD10aGlzLmNsZWFuQnJhY2tldHModCksZS5wYXJhbXM9bHUuc3RyaW5naWZ5KHQpfWRpc2FibGVkKGUpe2lmKCF0aGlzLmFsbC5vcHRpb25zLmdyaWQmJihlLnByb3A9PT0iZGlzcGxheSImJmUudmFsdWUuaW5jbHVkZXMoImdyaWQiKXx8ZS5wcm9wLmluY2x1ZGVzKCJncmlkIil8fGUucHJvcD09PSJqdXN0aWZ5LWl0ZW1zIikpcmV0dXJuITA7aWYodGhpcy5hbGwub3B0aW9ucy5mbGV4Ym94PT09ITEpe2lmKGUucHJvcD09PSJkaXNwbGF5IiYmZS52YWx1ZS5pbmNsdWRlcygiZmxleCIpKXJldHVybiEwO2xldCB0PVsib3JkZXIiLCJqdXN0aWZ5LWNvbnRlbnQiLCJhbGlnbi1pdGVtcyIsImFsaWduLWNvbnRlbnQiXTtpZihlLnByb3AuaW5jbHVkZXMoImZsZXgiKXx8dC5pbmNsdWRlcyhlLnByb3ApKXJldHVybiEwfXJldHVybiExfX07QWIuZXhwb3J0cz1TYn0pO3ZhciBPYj14KCh5JCxFYik9Pnt1KCk7dmFyIF9iPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcmVmaXg9dCx0aGlzLnByZWZpeGVkPWUucHJlZml4ZWQodGhpcy5wcmVmaXgpLHRoaXMucmVnZXhwPWUucmVnZXhwKHRoaXMucHJlZml4KSx0aGlzLnByZWZpeGVkcz1lLnBvc3NpYmxlKCkubWFwKGk9PltlLnByZWZpeGVkKGkpLGUucmVnZXhwKGkpXSksdGhpcy51bnByZWZpeGVkPWUubmFtZSx0aGlzLm5hbWVSZWdleHA9ZS5yZWdleHAoKX1pc0hhY2soZSl7bGV0IHQ9ZS5wYXJlbnQuaW5kZXgoZSkrMSxpPWUucGFyZW50Lm5vZGVzO2Zvcig7dDxpLmxlbmd0aDspe2xldCBuPWlbdF0uc2VsZWN0b3I7aWYoIW4pcmV0dXJuITA7aWYobi5pbmNsdWRlcyh0aGlzLnVucHJlZml4ZWQpJiZuLm1hdGNoKHRoaXMubmFtZVJlZ2V4cCkpcmV0dXJuITE7bGV0IHM9ITE7Zm9yKGxldFthLG9db2YgdGhpcy5wcmVmaXhlZHMpaWYobi5pbmNsdWRlcyhhKSYmbi5tYXRjaChvKSl7cz0hMDticmVha31pZighcylyZXR1cm4hMDt0Kz0xfXJldHVybiEwfWNoZWNrKGUpe3JldHVybiEoIWUuc2VsZWN0b3IuaW5jbHVkZXModGhpcy5wcmVmaXhlZCl8fCFlLnNlbGVjdG9yLm1hdGNoKHRoaXMucmVnZXhwKXx8dGhpcy5pc0hhY2soZSkpfX07RWIuZXhwb3J0cz1fYn0pO3ZhciBrcj14KChiJCxSYik9Pnt1KCk7dmFye2xpc3Q6SE99PSRlKCksV089T2IoKSxHTz13cigpLFFPPU10KCksWU89X2UoKSxUYj1jbGFzcyBleHRlbmRzIEdPe2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcihlLHQsaSk7dGhpcy5yZWdleHBDYWNoZT1uZXcgTWFwfWNoZWNrKGUpe3JldHVybiBlLnNlbGVjdG9yLmluY2x1ZGVzKHRoaXMubmFtZSk/ISFlLnNlbGVjdG9yLm1hdGNoKHRoaXMucmVnZXhwKCkpOiExfXByZWZpeGVkKGUpe3JldHVybiB0aGlzLm5hbWUucmVwbGFjZSgvXihcVyopLyxgJDEke2V9YCl9cmVnZXhwKGUpe2lmKCF0aGlzLnJlZ2V4cENhY2hlLmhhcyhlKSl7bGV0IHQ9ZT90aGlzLnByZWZpeGVkKGUpOnRoaXMubmFtZTt0aGlzLnJlZ2V4cENhY2hlLnNldChlLG5ldyBSZWdFeHAoYChefFteOiInPV0pJHtZTy5lc2NhcGVSZWdleHAodCl9YCwiZ2kiKSl9cmV0dXJuIHRoaXMucmVnZXhwQ2FjaGUuZ2V0KGUpfXBvc3NpYmxlKCl7cmV0dXJuIFFPLnByZWZpeGVzKCl9cHJlZml4ZWRzKGUpe2lmKGUuX2F1dG9wcmVmaXhlclByZWZpeGVkcyl7aWYoZS5fYXV0b3ByZWZpeGVyUHJlZml4ZWRzW3RoaXMubmFtZV0pcmV0dXJuIGUuX2F1dG9wcmVmaXhlclByZWZpeGVkc31lbHNlIGUuX2F1dG9wcmVmaXhlclByZWZpeGVkcz17fTtsZXQgdD17fTtpZihlLnNlbGVjdG9yLmluY2x1ZGVzKCIsIikpe2xldCBuPUhPLmNvbW1hKGUuc2VsZWN0b3IpLmZpbHRlcihzPT5zLmluY2x1ZGVzKHRoaXMubmFtZSkpO2ZvcihsZXQgcyBvZiB0aGlzLnBvc3NpYmxlKCkpdFtzXT1uLm1hcChhPT50aGlzLnJlcGxhY2UoYSxzKSkuam9pbigiLCAiKX1lbHNlIGZvcihsZXQgaSBvZiB0aGlzLnBvc3NpYmxlKCkpdFtpXT10aGlzLnJlcGxhY2UoZS5zZWxlY3RvcixpKTtyZXR1cm4gZS5fYXV0b3ByZWZpeGVyUHJlZml4ZWRzW3RoaXMubmFtZV09dCxlLl9hdXRvcHJlZml4ZXJQcmVmaXhlZHN9YWxyZWFkeShlLHQsaSl7bGV0IG49ZS5wYXJlbnQuaW5kZXgoZSktMTtmb3IoO24+PTA7KXtsZXQgcz1lLnBhcmVudC5ub2Rlc1tuXTtpZihzLnR5cGUhPT0icnVsZSIpcmV0dXJuITE7bGV0IGE9ITE7Zm9yKGxldCBvIGluIHRbdGhpcy5uYW1lXSl7bGV0IGw9dFt0aGlzLm5hbWVdW29dO2lmKHMuc2VsZWN0b3I9PT1sKXtpZihpPT09bylyZXR1cm4hMDthPSEwO2JyZWFrfX1pZighYSlyZXR1cm4hMTtuLT0xfXJldHVybiExfXJlcGxhY2UoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKHRoaXMucmVnZXhwKCksYCQxJHt0aGlzLnByZWZpeGVkKHQpfWApfWFkZChlLHQpe2xldCBpPXRoaXMucHJlZml4ZWRzKGUpO2lmKHRoaXMuYWxyZWFkeShlLGksdCkpcmV0dXJuO2xldCBuPXRoaXMuY2xvbmUoZSx7c2VsZWN0b3I6aVt0aGlzLm5hbWVdW3RdfSk7ZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsbil9b2xkKGUpe3JldHVybiBuZXcgV08odGhpcyxlKX19O1JiLmV4cG9ydHM9VGJ9KTt2YXIgRGI9eCgodyQsSWIpPT57dSgpO3ZhciBLTz13cigpLFBiPWNsYXNzIGV4dGVuZHMgS097YWRkKGUsdCl7bGV0IGk9dCtlLm5hbWU7aWYoZS5wYXJlbnQuc29tZShhPT5hLm5hbWU9PT1pJiZhLnBhcmFtcz09PWUucGFyYW1zKSlyZXR1cm47bGV0IHM9dGhpcy5jbG9uZShlLHtuYW1lOml9KTtyZXR1cm4gZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGUscyl9cHJvY2VzcyhlKXtsZXQgdD10aGlzLnBhcmVudFByZWZpeChlKTtmb3IobGV0IGkgb2YgdGhpcy5wcmVmaXhlcykoIXR8fHQ9PT1pKSYmdGhpcy5hZGQoZSxpKX19O0liLmV4cG9ydHM9UGJ9KTt2YXIgJGI9eCgodiQscWIpPT57dSgpO3ZhciBYTz1rcigpLHV1PWNsYXNzIGV4dGVuZHMgWE97cHJlZml4ZWQoZSl7cmV0dXJuIGU9PT0iLXdlYmtpdC0iPyI6LXdlYmtpdC1mdWxsLXNjcmVlbiI6ZT09PSItbW96LSI/IjotbW96LWZ1bGwtc2NyZWVuIjpgOiR7ZX1mdWxsc2NyZWVuYH19O3V1Lm5hbWVzPVsiOmZ1bGxzY3JlZW4iXTtxYi5leHBvcnRzPXV1fSk7dmFyIE1iPXgoKHgkLExiKT0+e3UoKTt2YXIgWk89a3IoKSxmdT1jbGFzcyBleHRlbmRzIFpPe3Bvc3NpYmxlKCl7cmV0dXJuIHN1cGVyLnBvc3NpYmxlKCkuY29uY2F0KFsiLW1vei0gb2xkIiwiLW1zLSBvbGQiXSl9cHJlZml4ZWQoZSl7cmV0dXJuIGU9PT0iLXdlYmtpdC0iPyI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIiOmU9PT0iLW1zLSI/Ijo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIjplPT09Ii1tcy0gb2xkIj8iOi1tcy1pbnB1dC1wbGFjZWhvbGRlciI6ZT09PSItbW96LSBvbGQiPyI6LW1vei1wbGFjZWhvbGRlciI6YDo6JHtlfXBsYWNlaG9sZGVyYH19O2Z1Lm5hbWVzPVsiOjpwbGFjZWhvbGRlciJdO0xiLmV4cG9ydHM9ZnV9KTt2YXIgQmI9eCgoayQsTmIpPT57dSgpO3ZhciBKTz1rcigpLGN1PWNsYXNzIGV4dGVuZHMgSk97cHJlZml4ZWQoZSl7cmV0dXJuIGU9PT0iLW1zLSI/IjotbXMtaW5wdXQtcGxhY2Vob2xkZXIiOmA6JHtlfXBsYWNlaG9sZGVyLXNob3duYH19O2N1Lm5hbWVzPVsiOnBsYWNlaG9sZGVyLXNob3duIl07TmIuZXhwb3J0cz1jdX0pO3ZhciBqYj14KChTJCxGYik9Pnt1KCk7dmFyIGVUPWtyKCksdFQ9X2UoKSxwdT1jbGFzcyBleHRlbmRzIGVUe2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcihlLHQsaSk7dGhpcy5wcmVmaXhlcyYmKHRoaXMucHJlZml4ZXM9dFQudW5pcSh0aGlzLnByZWZpeGVzLm1hcChuPT4iLXdlYmtpdC0iKSkpfXByZWZpeGVkKGUpe3JldHVybiBlPT09Ii13ZWJraXQtIj8iOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiI6YDo6JHtlfWZpbGUtc2VsZWN0b3ItYnV0dG9uYH19O3B1Lm5hbWVzPVsiOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiJdO0ZiLmV4cG9ydHM9cHV9KTt2YXIgUGU9eCgoQSQsemIpPT57dSgpO3piLmV4cG9ydHM9ZnVuY3Rpb24ocil7bGV0IGU7cmV0dXJuIHI9PT0iLXdlYmtpdC0gMjAwOSJ8fHI9PT0iLW1vei0iP2U9MjAwOTpyPT09Ii1tcy0iP2U9MjAxMjpyPT09Ii13ZWJraXQtIiYmKGU9ImZpbmFsIikscj09PSItd2Via2l0LSAyMDA5IiYmKHI9Ii13ZWJraXQtIiksW2Uscl19fSk7dmFyIFdiPXgoKEMkLEhiKT0+e3UoKTt2YXIgVWI9JGUoKS5saXN0LFZiPVBlKCksclQ9aigpLFNyPWNsYXNzIGV4dGVuZHMgclR7cHJlZml4ZWQoZSx0KXtsZXQgaTtyZXR1cm5baSx0XT1WYih0KSxpPT09MjAwOT90KyJib3gtZmxleCI6c3VwZXIucHJlZml4ZWQoZSx0KX1ub3JtYWxpemUoKXtyZXR1cm4iZmxleCJ9c2V0KGUsdCl7bGV0IGk9VmIodClbMF07aWYoaT09PTIwMDkpcmV0dXJuIGUudmFsdWU9VWIuc3BhY2UoZS52YWx1ZSlbMF0sZS52YWx1ZT1Tci5vbGRWYWx1ZXNbZS52YWx1ZV18fGUudmFsdWUsc3VwZXIuc2V0KGUsdCk7aWYoaT09PTIwMTIpe2xldCBuPVViLnNwYWNlKGUudmFsdWUpO24ubGVuZ3RoPT09MyYmblsyXT09PSIwIiYmKGUudmFsdWU9bi5zbGljZSgwLDIpLmNvbmNhdCgiMHB4Iikuam9pbigiICIpKX1yZXR1cm4gc3VwZXIuc2V0KGUsdCl9fTtTci5uYW1lcz1bImZsZXgiLCJib3gtZmxleCJdO1NyLm9sZFZhbHVlcz17YXV0bzoiMSIsbm9uZToiMCJ9O0hiLmV4cG9ydHM9U3J9KTt2YXIgWWI9eCgoXyQsUWIpPT57dSgpO3ZhciBHYj1QZSgpLGlUPWooKSxkdT1jbGFzcyBleHRlbmRzIGlUe3ByZWZpeGVkKGUsdCl7bGV0IGk7cmV0dXJuW2ksdF09R2IodCksaT09PTIwMDk/dCsiYm94LW9yZGluYWwtZ3JvdXAiOmk9PT0yMDEyP3QrImZsZXgtb3JkZXIiOnN1cGVyLnByZWZpeGVkKGUsdCl9bm9ybWFsaXplKCl7cmV0dXJuIm9yZGVyIn1zZXQoZSx0KXtyZXR1cm4gR2IodClbMF09PT0yMDA5JiYvXGQvLnRlc3QoZS52YWx1ZSk/KGUudmFsdWU9KHBhcnNlSW50KGUudmFsdWUpKzEpLnRvU3RyaW5nKCksc3VwZXIuc2V0KGUsdCkpOnN1cGVyLnNldChlLHQpfX07ZHUubmFtZXM9WyJvcmRlciIsImZsZXgtb3JkZXIiLCJib3gtb3JkaW5hbC1ncm91cCJdO1FiLmV4cG9ydHM9ZHV9KTt2YXIgWGI9eCgoRSQsS2IpPT57dSgpO3ZhciBuVD1qKCksaHU9Y2xhc3MgZXh0ZW5kcyBuVHtjaGVjayhlKXtsZXQgdD1lLnZhbHVlO3JldHVybiF0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImFscGhhKCIpJiYhdC5pbmNsdWRlcygiRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQiKSYmIXQuaW5jbHVkZXMoImRhdGE6aW1hZ2Uvc3ZnK3htbCIpfX07aHUubmFtZXM9WyJmaWx0ZXIiXTtLYi5leHBvcnRzPWh1fSk7dmFyIEpiPXgoKE8kLFpiKT0+e3UoKTt2YXIgc1Q9aigpLG11PWNsYXNzIGV4dGVuZHMgc1R7aW5zZXJ0KGUsdCxpLG4pe2lmKHQhPT0iLW1zLSIpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSk7bGV0IHM9dGhpcy5jbG9uZShlKSxhPWUucHJvcC5yZXBsYWNlKC9lbmQkLywic3RhcnQiKSxvPXQrZS5wcm9wLnJlcGxhY2UoL2VuZCQvLCJzcGFuIik7aWYoIWUucGFyZW50LnNvbWUobD0+bC5wcm9wPT09bykpe2lmKHMucHJvcD1vLGUudmFsdWUuaW5jbHVkZXMoInNwYW4iKSlzLnZhbHVlPWUudmFsdWUucmVwbGFjZSgvc3BhblxzL2ksIiIpO2Vsc2V7bGV0IGw7aWYoZS5wYXJlbnQud2Fsa0RlY2xzKGEsYz0+e2w9Y30pLGwpe2xldCBjPU51bWJlcihlLnZhbHVlKS1OdW1iZXIobC52YWx1ZSkrIiI7cy52YWx1ZT1jfWVsc2UgZS53YXJuKG4sYENhbiBub3QgcHJlZml4ICR7ZS5wcm9wfSAoJHthfSBpcyBub3QgZm91bmQpYCl9ZS5jbG9uZUJlZm9yZShzKX19fTttdS5uYW1lcz1bImdyaWQtcm93LWVuZCIsImdyaWQtY29sdW1uLWVuZCJdO1piLmV4cG9ydHM9bXV9KTt2YXIgdHc9eCgoVCQsZXcpPT57dSgpO3ZhciBhVD1qKCksZ3U9Y2xhc3MgZXh0ZW5kcyBhVHtjaGVjayhlKXtyZXR1cm4hZS52YWx1ZS5zcGxpdCgvXHMrLykuc29tZSh0PT57bGV0IGk9dC50b0xvd2VyQ2FzZSgpO3JldHVybiBpPT09InJldmVyc2UifHxpPT09ImFsdGVybmF0ZS1yZXZlcnNlIn0pfX07Z3UubmFtZXM9WyJhbmltYXRpb24iLCJhbmltYXRpb24tZGlyZWN0aW9uIl07ZXcuZXhwb3J0cz1ndX0pO3ZhciBpdz14KChSJCxydyk9Pnt1KCk7dmFyIG9UPVBlKCksbFQ9aigpLHl1PWNsYXNzIGV4dGVuZHMgbFR7aW5zZXJ0KGUsdCxpKXtsZXQgbjtpZihbbix0XT1vVCh0KSxuIT09MjAwOSlyZXR1cm4gc3VwZXIuaW5zZXJ0KGUsdCxpKTtsZXQgcz1lLnZhbHVlLnNwbGl0KC9ccysvKS5maWx0ZXIoZD0+ZCE9PSJ3cmFwIiYmZCE9PSJub3dyYXAiJiYid3JhcC1yZXZlcnNlIik7aWYocy5sZW5ndGg9PT0wfHxlLnBhcmVudC5zb21lKGQ9PmQucHJvcD09PXQrImJveC1vcmllbnQifHxkLnByb3A9PT10KyJib3gtZGlyZWN0aW9uIikpcmV0dXJuO2xldCBvPXNbMF0sbD1vLmluY2x1ZGVzKCJyb3ciKT8iaG9yaXpvbnRhbCI6InZlcnRpY2FsIixjPW8uaW5jbHVkZXMoInJldmVyc2UiKT8icmV2ZXJzZSI6Im5vcm1hbCIsZj10aGlzLmNsb25lKGUpO3JldHVybiBmLnByb3A9dCsiYm94LW9yaWVudCIsZi52YWx1ZT1sLHRoaXMubmVlZENhc2NhZGUoZSkmJihmLnJhd3MuYmVmb3JlPXRoaXMuY2FsY0JlZm9yZShpLGUsdCkpLGUucGFyZW50Lmluc2VydEJlZm9yZShlLGYpLGY9dGhpcy5jbG9uZShlKSxmLnByb3A9dCsiYm94LWRpcmVjdGlvbiIsZi52YWx1ZT1jLHRoaXMubmVlZENhc2NhZGUoZSkmJihmLnJhd3MuYmVmb3JlPXRoaXMuY2FsY0JlZm9yZShpLGUsdCkpLGUucGFyZW50Lmluc2VydEJlZm9yZShlLGYpfX07eXUubmFtZXM9WyJmbGV4LWZsb3ciLCJib3gtZGlyZWN0aW9uIiwiYm94LW9yaWVudCJdO3J3LmV4cG9ydHM9eXV9KTt2YXIgc3c9eCgoUCQsbncpPT57dSgpO3ZhciB1VD1QZSgpLGZUPWooKSxidT1jbGFzcyBleHRlbmRzIGZUe25vcm1hbGl6ZSgpe3JldHVybiJmbGV4In1wcmVmaXhlZChlLHQpe2xldCBpO3JldHVybltpLHRdPXVUKHQpLGk9PT0yMDA5P3QrImJveC1mbGV4IjppPT09MjAxMj90KyJmbGV4LXBvc2l0aXZlIjpzdXBlci5wcmVmaXhlZChlLHQpfX07YnUubmFtZXM9WyJmbGV4LWdyb3ciLCJmbGV4LXBvc2l0aXZlIl07bncuZXhwb3J0cz1idX0pO3ZhciBvdz14KChJJCxhdyk9Pnt1KCk7dmFyIGNUPVBlKCkscFQ9aigpLHd1PWNsYXNzIGV4dGVuZHMgcFR7c2V0KGUsdCl7aWYoY1QodClbMF0hPT0yMDA5KXJldHVybiBzdXBlci5zZXQoZSx0KX19O3d1Lm5hbWVzPVsiZmxleC13cmFwIl07YXcuZXhwb3J0cz13dX0pO3ZhciB1dz14KChEJCxsdyk9Pnt1KCk7dmFyIGRUPWooKSxBcj1CdCgpLHZ1PWNsYXNzIGV4dGVuZHMgZFR7aW5zZXJ0KGUsdCxpLG4pe2lmKHQhPT0iLW1zLSIpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSk7bGV0IHM9QXIucGFyc2UoZSksW2Esb109QXIudHJhbnNsYXRlKHMsMCwyKSxbbCxjXT1Bci50cmFuc2xhdGUocywxLDMpO1tbImdyaWQtcm93IixhXSxbImdyaWQtcm93LXNwYW4iLG9dLFsiZ3JpZC1jb2x1bW4iLGxdLFsiZ3JpZC1jb2x1bW4tc3BhbiIsY11dLmZvckVhY2goKFtmLGRdKT0+e0FyLmluc2VydERlY2woZSxmLGQpfSksQXIud2FyblRlbXBsYXRlU2VsZWN0b3JOb3RGb3VuZChlLG4pLEFyLndhcm5JZkdyaWRSb3dDb2x1bW5FeGlzdHMoZSxuKX19O3Z1Lm5hbWVzPVsiZ3JpZC1hcmVhIl07bHcuZXhwb3J0cz12dX0pO3ZhciBjdz14KChxJCxmdyk9Pnt1KCk7dmFyIGhUPWooKSxCaT1CdCgpLHh1PWNsYXNzIGV4dGVuZHMgaFR7aW5zZXJ0KGUsdCxpKXtpZih0IT09Ii1tcy0iKXJldHVybiBzdXBlci5pbnNlcnQoZSx0LGkpO2lmKGUucGFyZW50LnNvbWUoYT0+YS5wcm9wPT09Ii1tcy1ncmlkLXJvdy1hbGlnbiIpKXJldHVybjtsZXRbW24sc11dPUJpLnBhcnNlKGUpO3M/KEJpLmluc2VydERlY2woZSwiZ3JpZC1yb3ctYWxpZ24iLG4pLEJpLmluc2VydERlY2woZSwiZ3JpZC1jb2x1bW4tYWxpZ24iLHMpKTooQmkuaW5zZXJ0RGVjbChlLCJncmlkLXJvdy1hbGlnbiIsbiksQmkuaW5zZXJ0RGVjbChlLCJncmlkLWNvbHVtbi1hbGlnbiIsbikpfX07eHUubmFtZXM9WyJwbGFjZS1zZWxmIl07ZncuZXhwb3J0cz14dX0pO3ZhciBkdz14KCgkJCxwdyk9Pnt1KCk7dmFyIG1UPWooKSxrdT1jbGFzcyBleHRlbmRzIG1Ue2NoZWNrKGUpe2xldCB0PWUudmFsdWU7cmV0dXJuIXQuaW5jbHVkZXMoIi8iKXx8dC5pbmNsdWRlcygic3BhbiIpfW5vcm1hbGl6ZShlKXtyZXR1cm4gZS5yZXBsYWNlKCItc3RhcnQiLCIiKX1wcmVmaXhlZChlLHQpe2xldCBpPXN1cGVyLnByZWZpeGVkKGUsdCk7cmV0dXJuIHQ9PT0iLW1zLSImJihpPWkucmVwbGFjZSgiLXN0YXJ0IiwiIikpLGl9fTtrdS5uYW1lcz1bImdyaWQtcm93LXN0YXJ0IiwiZ3JpZC1jb2x1bW4tc3RhcnQiXTtwdy5leHBvcnRzPWt1fSk7dmFyIGd3PXgoKEwkLG13KT0+e3UoKTt2YXIgaHc9UGUoKSxnVD1qKCksQ3I9Y2xhc3MgZXh0ZW5kcyBnVHtjaGVjayhlKXtyZXR1cm4gZS5wYXJlbnQmJiFlLnBhcmVudC5zb21lKHQ9PnQucHJvcCYmdC5wcm9wLnN0YXJ0c1dpdGgoImdyaWQtIikpfXByZWZpeGVkKGUsdCl7bGV0IGk7cmV0dXJuW2ksdF09aHcodCksaT09PTIwMTI/dCsiZmxleC1pdGVtLWFsaWduIjpzdXBlci5wcmVmaXhlZChlLHQpfW5vcm1hbGl6ZSgpe3JldHVybiJhbGlnbi1zZWxmIn1zZXQoZSx0KXtsZXQgaT1odyh0KVswXTtpZihpPT09MjAxMilyZXR1cm4gZS52YWx1ZT1Dci5vbGRWYWx1ZXNbZS52YWx1ZV18fGUudmFsdWUsc3VwZXIuc2V0KGUsdCk7aWYoaT09PSJmaW5hbCIpcmV0dXJuIHN1cGVyLnNldChlLHQpfX07Q3IubmFtZXM9WyJhbGlnbi1zZWxmIiwiZmxleC1pdGVtLWFsaWduIl07Q3Iub2xkVmFsdWVzPXsiZmxleC1lbmQiOiJlbmQiLCJmbGV4LXN0YXJ0Ijoic3RhcnQifTttdy5leHBvcnRzPUNyfSk7dmFyIGJ3PXgoKE0kLHl3KT0+e3UoKTt2YXIgeVQ9aigpLGJUPV9lKCksU3U9Y2xhc3MgZXh0ZW5kcyB5VHtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoZSx0LGkpO3RoaXMucHJlZml4ZXMmJih0aGlzLnByZWZpeGVzPWJULnVuaXEodGhpcy5wcmVmaXhlcy5tYXAobj0+bj09PSItbXMtIj8iLXdlYmtpdC0iOm4pKSl9fTtTdS5uYW1lcz1bImFwcGVhcmFuY2UiXTt5dy5leHBvcnRzPVN1fSk7dmFyIHh3PXgoKE4kLHZ3KT0+e3UoKTt2YXIgd3c9UGUoKSx3VD1qKCksQXU9Y2xhc3MgZXh0ZW5kcyB3VHtub3JtYWxpemUoKXtyZXR1cm4iZmxleC1iYXNpcyJ9cHJlZml4ZWQoZSx0KXtsZXQgaTtyZXR1cm5baSx0XT13dyh0KSxpPT09MjAxMj90KyJmbGV4LXByZWZlcnJlZC1zaXplIjpzdXBlci5wcmVmaXhlZChlLHQpfXNldChlLHQpe2xldCBpO2lmKFtpLHRdPXd3KHQpLGk9PT0yMDEyfHxpPT09ImZpbmFsIilyZXR1cm4gc3VwZXIuc2V0KGUsdCl9fTtBdS5uYW1lcz1bImZsZXgtYmFzaXMiLCJmbGV4LXByZWZlcnJlZC1zaXplIl07dncuZXhwb3J0cz1BdX0pO3ZhciBTdz14KChCJCxrdyk9Pnt1KCk7dmFyIHZUPWooKSxDdT1jbGFzcyBleHRlbmRzIHZUe25vcm1hbGl6ZSgpe3JldHVybiB0aGlzLm5hbWUucmVwbGFjZSgiYm94LWltYWdlIiwiYm9yZGVyIil9cHJlZml4ZWQoZSx0KXtsZXQgaT1zdXBlci5wcmVmaXhlZChlLHQpO3JldHVybiB0PT09Ii13ZWJraXQtIiYmKGk9aS5yZXBsYWNlKCJib3JkZXIiLCJib3gtaW1hZ2UiKSksaX19O0N1Lm5hbWVzPVsibWFzay1ib3JkZXIiLCJtYXNrLWJvcmRlci1zb3VyY2UiLCJtYXNrLWJvcmRlci1zbGljZSIsIm1hc2stYm9yZGVyLXdpZHRoIiwibWFzay1ib3JkZXItb3V0c2V0IiwibWFzay1ib3JkZXItcmVwZWF0IiwibWFzay1ib3gtaW1hZ2UiLCJtYXNrLWJveC1pbWFnZS1zb3VyY2UiLCJtYXNrLWJveC1pbWFnZS1zbGljZSIsIm1hc2stYm94LWltYWdlLXdpZHRoIiwibWFzay1ib3gtaW1hZ2Utb3V0c2V0IiwibWFzay1ib3gtaW1hZ2UtcmVwZWF0Il07a3cuZXhwb3J0cz1DdX0pO3ZhciBDdz14KChGJCxBdyk9Pnt1KCk7dmFyIHhUPWooKSxsdD1jbGFzcyBleHRlbmRzIHhUe2luc2VydChlLHQsaSl7bGV0IG49ZS5wcm9wPT09Im1hc2stY29tcG9zaXRlIixzO24/cz1lLnZhbHVlLnNwbGl0KCIsIik6cz1lLnZhbHVlLm1hdGNoKGx0LnJlZ2V4cCl8fFtdLHM9cy5tYXAoYz0+Yy50cmltKCkpLmZpbHRlcihjPT5jKTtsZXQgYT1zLmxlbmd0aCxvO2lmKGEmJihvPXRoaXMuY2xvbmUoZSksby52YWx1ZT1zLm1hcChjPT5sdC5vbGRWYWx1ZXNbY118fGMpLmpvaW4oIiwgIikscy5pbmNsdWRlcygiaW50ZXJzZWN0IikmJihvLnZhbHVlKz0iLCB4b3IiKSxvLnByb3A9dCsibWFzay1jb21wb3NpdGUiKSxuKXJldHVybiBhPyh0aGlzLm5lZWRDYXNjYWRlKGUpJiYoby5yYXdzLmJlZm9yZT10aGlzLmNhbGNCZWZvcmUoaSxlLHQpKSxlLnBhcmVudC5pbnNlcnRCZWZvcmUoZSxvKSk6dm9pZCAwO2xldCBsPXRoaXMuY2xvbmUoZSk7cmV0dXJuIGwucHJvcD10K2wucHJvcCxhJiYobC52YWx1ZT1sLnZhbHVlLnJlcGxhY2UobHQucmVnZXhwLCIiKSksdGhpcy5uZWVkQ2FzY2FkZShlKSYmKGwucmF3cy5iZWZvcmU9dGhpcy5jYWxjQmVmb3JlKGksZSx0KSksZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsbCksYT8odGhpcy5uZWVkQ2FzY2FkZShlKSYmKG8ucmF3cy5iZWZvcmU9dGhpcy5jYWxjQmVmb3JlKGksZSx0KSksZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsbykpOmV9fTtsdC5uYW1lcz1bIm1hc2siLCJtYXNrLWNvbXBvc2l0ZSJdO2x0Lm9sZFZhbHVlcz17YWRkOiJzb3VyY2Utb3ZlciIsc3VidHJhY3Q6InNvdXJjZS1vdXQiLGludGVyc2VjdDoic291cmNlLWluIixleGNsdWRlOiJ4b3IifTtsdC5yZWdleHA9bmV3IFJlZ0V4cChgXFxzKygke09iamVjdC5rZXlzKGx0Lm9sZFZhbHVlcykuam9pbigifCIpfSlcXGIoPyFcXCkpXFxzKig/PVssXSlgLCJpZyIpO0F3LmV4cG9ydHM9bHR9KTt2YXIgT3c9eCgoaiQsRXcpPT57dSgpO3ZhciBfdz1QZSgpLGtUPWooKSxfcj1jbGFzcyBleHRlbmRzIGtUe3ByZWZpeGVkKGUsdCl7bGV0IGk7cmV0dXJuW2ksdF09X3codCksaT09PTIwMDk/dCsiYm94LWFsaWduIjppPT09MjAxMj90KyJmbGV4LWFsaWduIjpzdXBlci5wcmVmaXhlZChlLHQpfW5vcm1hbGl6ZSgpe3JldHVybiJhbGlnbi1pdGVtcyJ9c2V0KGUsdCl7bGV0IGk9X3codClbMF07cmV0dXJuKGk9PT0yMDA5fHxpPT09MjAxMikmJihlLnZhbHVlPV9yLm9sZFZhbHVlc1tlLnZhbHVlXXx8ZS52YWx1ZSksc3VwZXIuc2V0KGUsdCl9fTtfci5uYW1lcz1bImFsaWduLWl0ZW1zIiwiZmxleC1hbGlnbiIsImJveC1hbGlnbiJdO19yLm9sZFZhbHVlcz17ImZsZXgtZW5kIjoiZW5kIiwiZmxleC1zdGFydCI6InN0YXJ0In07RXcuZXhwb3J0cz1fcn0pO3ZhciBSdz14KCh6JCxUdyk9Pnt1KCk7dmFyIFNUPWooKSxfdT1jbGFzcyBleHRlbmRzIFNUe3NldChlLHQpe3JldHVybiB0PT09Ii1tcy0iJiZlLnZhbHVlPT09ImNvbnRhaW4iJiYoZS52YWx1ZT0iZWxlbWVudCIpLHN1cGVyLnNldChlLHQpfWluc2VydChlLHQsaSl7aWYoIShlLnZhbHVlPT09ImFsbCImJnQ9PT0iLW1zLSIpKXJldHVybiBzdXBlci5pbnNlcnQoZSx0LGkpfX07X3UubmFtZXM9WyJ1c2VyLXNlbGVjdCJdO1R3LmV4cG9ydHM9X3V9KTt2YXIgRHc9eCgoVSQsSXcpPT57dSgpO3ZhciBQdz1QZSgpLEFUPWooKSxFdT1jbGFzcyBleHRlbmRzIEFUe25vcm1hbGl6ZSgpe3JldHVybiJmbGV4LXNocmluayJ9cHJlZml4ZWQoZSx0KXtsZXQgaTtyZXR1cm5baSx0XT1Qdyh0KSxpPT09MjAxMj90KyJmbGV4LW5lZ2F0aXZlIjpzdXBlci5wcmVmaXhlZChlLHQpfXNldChlLHQpe2xldCBpO2lmKFtpLHRdPVB3KHQpLGk9PT0yMDEyfHxpPT09ImZpbmFsIilyZXR1cm4gc3VwZXIuc2V0KGUsdCl9fTtFdS5uYW1lcz1bImZsZXgtc2hyaW5rIiwiZmxleC1uZWdhdGl2ZSJdO0l3LmV4cG9ydHM9RXV9KTt2YXIgJHc9eCgoViQscXcpPT57dSgpO3ZhciBDVD1qKCksT3U9Y2xhc3MgZXh0ZW5kcyBDVHtwcmVmaXhlZChlLHQpe3JldHVybmAke3R9Y29sdW1uLSR7ZX1gfW5vcm1hbGl6ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiaW5zaWRlIik/ImJyZWFrLWluc2lkZSI6ZS5pbmNsdWRlcygiYmVmb3JlIik/ImJyZWFrLWJlZm9yZSI6ImJyZWFrLWFmdGVyIn1zZXQoZSx0KXtyZXR1cm4oZS5wcm9wPT09ImJyZWFrLWluc2lkZSImJmUudmFsdWU9PT0iYXZvaWQtY29sdW1uInx8ZS52YWx1ZT09PSJhdm9pZC1wYWdlIikmJihlLnZhbHVlPSJhdm9pZCIpLHN1cGVyLnNldChlLHQpfWluc2VydChlLHQsaSl7aWYoZS5wcm9wIT09ImJyZWFrLWluc2lkZSIpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSk7aWYoISgvcmVnaW9uL2kudGVzdChlLnZhbHVlKXx8L3BhZ2UvaS50ZXN0KGUudmFsdWUpKSlyZXR1cm4gc3VwZXIuaW5zZXJ0KGUsdCxpKX19O091Lm5hbWVzPVsiYnJlYWstaW5zaWRlIiwicGFnZS1icmVhay1pbnNpZGUiLCJjb2x1bW4tYnJlYWstaW5zaWRlIiwiYnJlYWstYmVmb3JlIiwicGFnZS1icmVhay1iZWZvcmUiLCJjb2x1bW4tYnJlYWstYmVmb3JlIiwiYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWFmdGVyIiwiY29sdW1uLWJyZWFrLWFmdGVyIl07cXcuZXhwb3J0cz1PdX0pO3ZhciBNdz14KChIJCxMdyk9Pnt1KCk7dmFyIF9UPWooKSxUdT1jbGFzcyBleHRlbmRzIF9Ue3ByZWZpeGVkKGUsdCl7cmV0dXJuIHQrInByaW50LWNvbG9yLWFkanVzdCJ9bm9ybWFsaXplKCl7cmV0dXJuImNvbG9yLWFkanVzdCJ9fTtUdS5uYW1lcz1bImNvbG9yLWFkanVzdCIsInByaW50LWNvbG9yLWFkanVzdCJdO0x3LmV4cG9ydHM9VHV9KTt2YXIgQnc9eCgoVyQsTncpPT57dSgpO3ZhciBFVD1qKCksRXI9Y2xhc3MgZXh0ZW5kcyBFVHtpbnNlcnQoZSx0LGkpe2lmKHQ9PT0iLW1zLSIpe2xldCBuPXRoaXMuc2V0KHRoaXMuY2xvbmUoZSksdCk7dGhpcy5uZWVkQ2FzY2FkZShlKSYmKG4ucmF3cy5iZWZvcmU9dGhpcy5jYWxjQmVmb3JlKGksZSx0KSk7bGV0IHM9Imx0ciI7cmV0dXJuIGUucGFyZW50Lm5vZGVzLmZvckVhY2goYT0+e2EucHJvcD09PSJkaXJlY3Rpb24iJiYoYS52YWx1ZT09PSJydGwifHxhLnZhbHVlPT09Imx0ciIpJiYocz1hLnZhbHVlKX0pLG4udmFsdWU9RXIubXNWYWx1ZXNbc11bZS52YWx1ZV18fGUudmFsdWUsZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsbil9cmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSl9fTtFci5uYW1lcz1bIndyaXRpbmctbW9kZSJdO0VyLm1zVmFsdWVzPXtsdHI6eyJob3Jpem9udGFsLXRiIjoibHItdGIiLCJ2ZXJ0aWNhbC1ybCI6InRiLXJsIiwidmVydGljYWwtbHIiOiJ0Yi1sciJ9LHJ0bDp7Imhvcml6b250YWwtdGIiOiJybC10YiIsInZlcnRpY2FsLXJsIjoiYnQtcmwiLCJ2ZXJ0aWNhbC1sciI6ImJ0LWxyIn19O053LmV4cG9ydHM9RXJ9KTt2YXIganc9eCgoRyQsRncpPT57dSgpO3ZhciBPVD1qKCksUnU9Y2xhc3MgZXh0ZW5kcyBPVHtzZXQoZSx0KXtyZXR1cm4gZS52YWx1ZT1lLnZhbHVlLnJlcGxhY2UoL1xzK2ZpbGwoXHMpLywiJDEiKSxzdXBlci5zZXQoZSx0KX19O1J1Lm5hbWVzPVsiYm9yZGVyLWltYWdlIl07RncuZXhwb3J0cz1SdX0pO3ZhciBWdz14KChRJCxVdyk9Pnt1KCk7dmFyIHp3PVBlKCksVFQ9aigpLE9yPWNsYXNzIGV4dGVuZHMgVFR7cHJlZml4ZWQoZSx0KXtsZXQgaTtyZXR1cm5baSx0XT16dyh0KSxpPT09MjAxMj90KyJmbGV4LWxpbmUtcGFjayI6c3VwZXIucHJlZml4ZWQoZSx0KX1ub3JtYWxpemUoKXtyZXR1cm4iYWxpZ24tY29udGVudCJ9c2V0KGUsdCl7bGV0IGk9encodClbMF07aWYoaT09PTIwMTIpcmV0dXJuIGUudmFsdWU9T3Iub2xkVmFsdWVzW2UudmFsdWVdfHxlLnZhbHVlLHN1cGVyLnNldChlLHQpO2lmKGk9PT0iZmluYWwiKXJldHVybiBzdXBlci5zZXQoZSx0KX19O09yLm5hbWVzPVsiYWxpZ24tY29udGVudCIsImZsZXgtbGluZS1wYWNrIl07T3Iub2xkVmFsdWVzPXsiZmxleC1lbmQiOiJlbmQiLCJmbGV4LXN0YXJ0Ijoic3RhcnQiLCJzcGFjZS1iZXR3ZWVuIjoianVzdGlmeSIsInNwYWNlLWFyb3VuZCI6ImRpc3RyaWJ1dGUifTtVdy5leHBvcnRzPU9yfSk7dmFyIFd3PXgoKFkkLEh3KT0+e3UoKTt2YXIgUlQ9aigpLFdlPWNsYXNzIGV4dGVuZHMgUlR7cHJlZml4ZWQoZSx0KXtyZXR1cm4gdD09PSItbW96LSI/dCsoV2UudG9Nb3ppbGxhW2VdfHxlKTpzdXBlci5wcmVmaXhlZChlLHQpfW5vcm1hbGl6ZShlKXtyZXR1cm4gV2UudG9Ob3JtYWxbZV18fGV9fTtXZS5uYW1lcz1bImJvcmRlci1yYWRpdXMiXTtXZS50b01vemlsbGE9e307V2UudG9Ob3JtYWw9e307Zm9yKGxldCByIG9mWyJ0b3AiLCJib3R0b20iXSlmb3IobGV0IGUgb2ZbImxlZnQiLCJyaWdodCJdKXtsZXQgdD1gYm9yZGVyLSR7cn0tJHtlfS1yYWRpdXNgLGk9YGJvcmRlci1yYWRpdXMtJHtyfSR7ZX1gO1dlLm5hbWVzLnB1c2godCksV2UubmFtZXMucHVzaChpKSxXZS50b01vemlsbGFbdF09aSxXZS50b05vcm1hbFtpXT10fUh3LmV4cG9ydHM9V2V9KTt2YXIgUXc9eCgoSyQsR3cpPT57dSgpO3ZhciBQVD1qKCksUHU9Y2xhc3MgZXh0ZW5kcyBQVHtwcmVmaXhlZChlLHQpe3JldHVybiBlLmluY2x1ZGVzKCItc3RhcnQiKT90K2UucmVwbGFjZSgiLWJsb2NrLXN0YXJ0IiwiLWJlZm9yZSIpOnQrZS5yZXBsYWNlKCItYmxvY2stZW5kIiwiLWFmdGVyIil9bm9ybWFsaXplKGUpe3JldHVybiBlLmluY2x1ZGVzKCItYmVmb3JlIik/ZS5yZXBsYWNlKCItYmVmb3JlIiwiLWJsb2NrLXN0YXJ0Iik6ZS5yZXBsYWNlKCItYWZ0ZXIiLCItYmxvY2stZW5kIil9fTtQdS5uYW1lcz1bImJvcmRlci1ibG9jay1zdGFydCIsImJvcmRlci1ibG9jay1lbmQiLCJtYXJnaW4tYmxvY2stc3RhcnQiLCJtYXJnaW4tYmxvY2stZW5kIiwicGFkZGluZy1ibG9jay1zdGFydCIsInBhZGRpbmctYmxvY2stZW5kIiwiYm9yZGVyLWJlZm9yZSIsImJvcmRlci1hZnRlciIsIm1hcmdpbi1iZWZvcmUiLCJtYXJnaW4tYWZ0ZXIiLCJwYWRkaW5nLWJlZm9yZSIsInBhZGRpbmctYWZ0ZXIiXTtHdy5leHBvcnRzPVB1fSk7dmFyIEt3PXgoKFgkLFl3KT0+e3UoKTt2YXIgSVQ9aigpLHtwYXJzZVRlbXBsYXRlOkRULHdhcm5NaXNzZWRBcmVhczpxVCxnZXRHcmlkR2FwOiRULHdhcm5HcmlkR2FwOkxULGluaGVyaXRHcmlkR2FwOk1UfT1CdCgpLEl1PWNsYXNzIGV4dGVuZHMgSVR7aW5zZXJ0KGUsdCxpLG4pe2lmKHQhPT0iLW1zLSIpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSk7aWYoZS5wYXJlbnQuc29tZShoPT5oLnByb3A9PT0iLW1zLWdyaWQtcm93cyIpKXJldHVybjtsZXQgcz0kVChlKSxhPU1UKGUscykse3Jvd3M6byxjb2x1bW5zOmwsYXJlYXM6Y309RFQoe2RlY2w6ZSxnYXA6YXx8c30pLGY9T2JqZWN0LmtleXMoYykubGVuZ3RoPjAsZD1Cb29sZWFuKG8pLHA9Qm9vbGVhbihsKTtyZXR1cm4gTFQoe2dhcDpzLGhhc0NvbHVtbnM6cCxkZWNsOmUscmVzdWx0Om59KSxxVChjLGUsbiksKGQmJnB8fGYpJiZlLmNsb25lQmVmb3JlKHtwcm9wOiItbXMtZ3JpZC1yb3dzIix2YWx1ZTpvLHJhd3M6e319KSxwJiZlLmNsb25lQmVmb3JlKHtwcm9wOiItbXMtZ3JpZC1jb2x1bW5zIix2YWx1ZTpsLHJhd3M6e319KSxlfX07SXUubmFtZXM9WyJncmlkLXRlbXBsYXRlIl07WXcuZXhwb3J0cz1JdX0pO3ZhciBadz14KChaJCxYdyk9Pnt1KCk7dmFyIE5UPWooKSxEdT1jbGFzcyBleHRlbmRzIE5Ue3ByZWZpeGVkKGUsdCl7cmV0dXJuIHQrZS5yZXBsYWNlKCItaW5saW5lIiwiIil9bm9ybWFsaXplKGUpe3JldHVybiBlLnJlcGxhY2UoLyhtYXJnaW58cGFkZGluZ3xib3JkZXIpLShzdGFydHxlbmQpLywiJDEtaW5saW5lLSQyIil9fTtEdS5uYW1lcz1bImJvcmRlci1pbmxpbmUtc3RhcnQiLCJib3JkZXItaW5saW5lLWVuZCIsIm1hcmdpbi1pbmxpbmUtc3RhcnQiLCJtYXJnaW4taW5saW5lLWVuZCIsInBhZGRpbmctaW5saW5lLXN0YXJ0IiwicGFkZGluZy1pbmxpbmUtZW5kIiwiYm9yZGVyLXN0YXJ0IiwiYm9yZGVyLWVuZCIsIm1hcmdpbi1zdGFydCIsIm1hcmdpbi1lbmQiLCJwYWRkaW5nLXN0YXJ0IiwicGFkZGluZy1lbmQiXTtYdy5leHBvcnRzPUR1fSk7dmFyIGUwPXgoKEokLEp3KT0+e3UoKTt2YXIgQlQ9aigpLHF1PWNsYXNzIGV4dGVuZHMgQlR7Y2hlY2soZSl7cmV0dXJuIWUudmFsdWUuaW5jbHVkZXMoImZsZXgtIikmJmUudmFsdWUhPT0iYmFzZWxpbmUifXByZWZpeGVkKGUsdCl7cmV0dXJuIHQrImdyaWQtcm93LWFsaWduIn1ub3JtYWxpemUoKXtyZXR1cm4iYWxpZ24tc2VsZiJ9fTtxdS5uYW1lcz1bImdyaWQtcm93LWFsaWduIl07SncuZXhwb3J0cz1xdX0pO3ZhciByMD14KChlTCx0MCk9Pnt1KCk7dmFyIEZUPWooKSxUcj1jbGFzcyBleHRlbmRzIEZUe2tleWZyYW1lUGFyZW50cyhlKXtsZXR7cGFyZW50OnR9PWU7Zm9yKDt0Oyl7aWYodC50eXBlPT09ImF0cnVsZSImJnQubmFtZT09PSJrZXlmcmFtZXMiKXJldHVybiEwOyh7cGFyZW50OnR9PXQpfXJldHVybiExfWNvbnRhaW4zZChlKXtpZihlLnByb3A9PT0idHJhbnNmb3JtLW9yaWdpbiIpcmV0dXJuITE7Zm9yKGxldCB0IG9mIFRyLmZ1bmN0aW9uczNkKWlmKGUudmFsdWUuaW5jbHVkZXMoYCR7dH0oYCkpcmV0dXJuITA7cmV0dXJuITF9c2V0KGUsdCl7cmV0dXJuIGU9c3VwZXIuc2V0KGUsdCksdD09PSItbXMtIiYmKGUudmFsdWU9ZS52YWx1ZS5yZXBsYWNlKC9yb3RhdGV6L2dpLCJyb3RhdGUiKSksZX1pbnNlcnQoZSx0LGkpe2lmKHQ9PT0iLW1zLSIpe2lmKCF0aGlzLmNvbnRhaW4zZChlKSYmIXRoaXMua2V5ZnJhbWVQYXJlbnRzKGUpKXJldHVybiBzdXBlci5pbnNlcnQoZSx0LGkpfWVsc2UgaWYodD09PSItby0iKXtpZighdGhpcy5jb250YWluM2QoZSkpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSl9ZWxzZSByZXR1cm4gc3VwZXIuaW5zZXJ0KGUsdCxpKX19O1RyLm5hbWVzPVsidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiJdO1RyLmZ1bmN0aW9uczNkPVsibWF0cml4M2QiLCJ0cmFuc2xhdGUzZCIsInRyYW5zbGF0ZVoiLCJzY2FsZTNkIiwic2NhbGVaIiwicm90YXRlM2QiLCJyb3RhdGVYIiwicm90YXRlWSIsInBlcnNwZWN0aXZlIl07dDAuZXhwb3J0cz1Ucn0pO3ZhciBzMD14KCh0TCxuMCk9Pnt1KCk7dmFyIGkwPVBlKCksalQ9aigpLCR1PWNsYXNzIGV4dGVuZHMgalR7bm9ybWFsaXplKCl7cmV0dXJuImZsZXgtZGlyZWN0aW9uIn1pbnNlcnQoZSx0LGkpe2xldCBuO2lmKFtuLHRdPWkwKHQpLG4hPT0yMDA5KXJldHVybiBzdXBlci5pbnNlcnQoZSx0LGkpO2lmKGUucGFyZW50LnNvbWUoZj0+Zi5wcm9wPT09dCsiYm94LW9yaWVudCJ8fGYucHJvcD09PXQrImJveC1kaXJlY3Rpb24iKSlyZXR1cm47bGV0IGE9ZS52YWx1ZSxvLGw7YT09PSJpbmhlcml0Inx8YT09PSJpbml0aWFsInx8YT09PSJ1bnNldCI/KG89YSxsPWEpOihvPWEuaW5jbHVkZXMoInJvdyIpPyJob3Jpem9udGFsIjoidmVydGljYWwiLGw9YS5pbmNsdWRlcygicmV2ZXJzZSIpPyJyZXZlcnNlIjoibm9ybWFsIik7bGV0IGM9dGhpcy5jbG9uZShlKTtyZXR1cm4gYy5wcm9wPXQrImJveC1vcmllbnQiLGMudmFsdWU9byx0aGlzLm5lZWRDYXNjYWRlKGUpJiYoYy5yYXdzLmJlZm9yZT10aGlzLmNhbGNCZWZvcmUoaSxlLHQpKSxlLnBhcmVudC5pbnNlcnRCZWZvcmUoZSxjKSxjPXRoaXMuY2xvbmUoZSksYy5wcm9wPXQrImJveC1kaXJlY3Rpb24iLGMudmFsdWU9bCx0aGlzLm5lZWRDYXNjYWRlKGUpJiYoYy5yYXdzLmJlZm9yZT10aGlzLmNhbGNCZWZvcmUoaSxlLHQpKSxlLnBhcmVudC5pbnNlcnRCZWZvcmUoZSxjKX1vbGQoZSx0KXtsZXQgaTtyZXR1cm5baSx0XT1pMCh0KSxpPT09MjAwOT9bdCsiYm94LW9yaWVudCIsdCsiYm94LWRpcmVjdGlvbiJdOnN1cGVyLm9sZChlLHQpfX07JHUubmFtZXM9WyJmbGV4LWRpcmVjdGlvbiIsImJveC1kaXJlY3Rpb24iLCJib3gtb3JpZW50Il07bjAuZXhwb3J0cz0kdX0pO3ZhciBvMD14KChyTCxhMCk9Pnt1KCk7dmFyIHpUPWooKSxMdT1jbGFzcyBleHRlbmRzIHpUe2NoZWNrKGUpe3JldHVybiBlLnZhbHVlPT09InBpeGVsYXRlZCJ9cHJlZml4ZWQoZSx0KXtyZXR1cm4gdD09PSItbXMtIj8iLW1zLWludGVycG9sYXRpb24tbW9kZSI6c3VwZXIucHJlZml4ZWQoZSx0KX1zZXQoZSx0KXtyZXR1cm4gdCE9PSItbXMtIj9zdXBlci5zZXQoZSx0KTooZS5wcm9wPSItbXMtaW50ZXJwb2xhdGlvbi1tb2RlIixlLnZhbHVlPSJuZWFyZXN0LW5laWdoYm9yIixlKX1ub3JtYWxpemUoKXtyZXR1cm4iaW1hZ2UtcmVuZGVyaW5nIn1wcm9jZXNzKGUsdCl7cmV0dXJuIHN1cGVyLnByb2Nlc3MoZSx0KX19O0x1Lm5hbWVzPVsiaW1hZ2UtcmVuZGVyaW5nIiwiaW50ZXJwb2xhdGlvbi1tb2RlIl07YTAuZXhwb3J0cz1MdX0pO3ZhciB1MD14KChpTCxsMCk9Pnt1KCk7dmFyIFVUPWooKSxWVD1fZSgpLE11PWNsYXNzIGV4dGVuZHMgVVR7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKGUsdCxpKTt0aGlzLnByZWZpeGVzJiYodGhpcy5wcmVmaXhlcz1WVC51bmlxKHRoaXMucHJlZml4ZXMubWFwKG49Pm49PT0iLW1zLSI/Ii13ZWJraXQtIjpuKSkpfX07TXUubmFtZXM9WyJiYWNrZHJvcC1maWx0ZXIiXTtsMC5leHBvcnRzPU11fSk7dmFyIGMwPXgoKG5MLGYwKT0+e3UoKTt2YXIgSFQ9aigpLFdUPV9lKCksTnU9Y2xhc3MgZXh0ZW5kcyBIVHtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoZSx0LGkpO3RoaXMucHJlZml4ZXMmJih0aGlzLnByZWZpeGVzPVdULnVuaXEodGhpcy5wcmVmaXhlcy5tYXAobj0+bj09PSItbXMtIj8iLXdlYmtpdC0iOm4pKSl9Y2hlY2soZSl7cmV0dXJuIGUudmFsdWUudG9Mb3dlckNhc2UoKT09PSJ0ZXh0In19O051Lm5hbWVzPVsiYmFja2dyb3VuZC1jbGlwIl07ZjAuZXhwb3J0cz1OdX0pO3ZhciBkMD14KChzTCxwMCk9Pnt1KCk7dmFyIEdUPWooKSxRVD1bIm5vbmUiLCJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCIsImJsaW5rIiwiaW5oZXJpdCIsImluaXRpYWwiLCJ1bnNldCJdLEJ1PWNsYXNzIGV4dGVuZHMgR1R7Y2hlY2soZSl7cmV0dXJuIGUudmFsdWUuc3BsaXQoL1xzKy8pLnNvbWUodD0+IVFULmluY2x1ZGVzKHQpKX19O0J1Lm5hbWVzPVsidGV4dC1kZWNvcmF0aW9uIl07cDAuZXhwb3J0cz1CdX0pO3ZhciBnMD14KChhTCxtMCk9Pnt1KCk7dmFyIGgwPVBlKCksWVQ9aigpLFJyPWNsYXNzIGV4dGVuZHMgWVR7cHJlZml4ZWQoZSx0KXtsZXQgaTtyZXR1cm5baSx0XT1oMCh0KSxpPT09MjAwOT90KyJib3gtcGFjayI6aT09PTIwMTI/dCsiZmxleC1wYWNrIjpzdXBlci5wcmVmaXhlZChlLHQpfW5vcm1hbGl6ZSgpe3JldHVybiJqdXN0aWZ5LWNvbnRlbnQifXNldChlLHQpe2xldCBpPWgwKHQpWzBdO2lmKGk9PT0yMDA5fHxpPT09MjAxMil7bGV0IG49UnIub2xkVmFsdWVzW2UudmFsdWVdfHxlLnZhbHVlO2lmKGUudmFsdWU9bixpIT09MjAwOXx8biE9PSJkaXN0cmlidXRlIilyZXR1cm4gc3VwZXIuc2V0KGUsdCl9ZWxzZSBpZihpPT09ImZpbmFsIilyZXR1cm4gc3VwZXIuc2V0KGUsdCl9fTtSci5uYW1lcz1bImp1c3RpZnktY29udGVudCIsImZsZXgtcGFjayIsImJveC1wYWNrIl07UnIub2xkVmFsdWVzPXsiZmxleC1lbmQiOiJlbmQiLCJmbGV4LXN0YXJ0Ijoic3RhcnQiLCJzcGFjZS1iZXR3ZWVuIjoianVzdGlmeSIsInNwYWNlLWFyb3VuZCI6ImRpc3RyaWJ1dGUifTttMC5leHBvcnRzPVJyfSk7dmFyIGIwPXgoKG9MLHkwKT0+e3UoKTt2YXIgS1Q9aigpLEZ1PWNsYXNzIGV4dGVuZHMgS1R7c2V0KGUsdCl7bGV0IGk9ZS52YWx1ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09Ii13ZWJraXQtIiYmIWkuaW5jbHVkZXMoIiAiKSYmaSE9PSJjb250YWluIiYmaSE9PSJjb3ZlciImJihlLnZhbHVlPWUudmFsdWUrIiAiK2UudmFsdWUpLHN1cGVyLnNldChlLHQpfX07RnUubmFtZXM9WyJiYWNrZ3JvdW5kLXNpemUiXTt5MC5leHBvcnRzPUZ1fSk7dmFyIHYwPXgoKGxMLHcwKT0+e3UoKTt2YXIgWFQ9aigpLGp1PUJ0KCksenU9Y2xhc3MgZXh0ZW5kcyBYVHtpbnNlcnQoZSx0LGkpe2lmKHQhPT0iLW1zLSIpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSk7bGV0IG49anUucGFyc2UoZSksW3MsYV09anUudHJhbnNsYXRlKG4sMCwxKTtuWzBdJiZuWzBdLmluY2x1ZGVzKCJzcGFuIikmJihhPW5bMF0uam9pbigiIikucmVwbGFjZSgvXEQvZywiIikpLFtbZS5wcm9wLHNdLFtgJHtlLnByb3B9LXNwYW5gLGFdXS5mb3JFYWNoKChbbCxjXSk9PntqdS5pbnNlcnREZWNsKGUsbCxjKX0pfX07enUubmFtZXM9WyJncmlkLXJvdyIsImdyaWQtY29sdW1uIl07dzAuZXhwb3J0cz16dX0pO3ZhciBTMD14KCh1TCxrMCk9Pnt1KCk7dmFyIFpUPWooKSx7cHJlZml4VHJhY2tQcm9wOngwLHByZWZpeFRyYWNrVmFsdWU6SlQsYXV0b3BsYWNlR3JpZEl0ZW1zOmVSLGdldEdyaWRHYXA6dFIsaW5oZXJpdEdyaWRHYXA6clJ9PUJ0KCksaVI9b3UoKSxVdT1jbGFzcyBleHRlbmRzIFpUe3ByZWZpeGVkKGUsdCl7cmV0dXJuIHQ9PT0iLW1zLSI/eDAoe3Byb3A6ZSxwcmVmaXg6dH0pOnN1cGVyLnByZWZpeGVkKGUsdCl9bm9ybWFsaXplKGUpe3JldHVybiBlLnJlcGxhY2UoL15ncmlkLShyb3dzfGNvbHVtbnMpLywiZ3JpZC10ZW1wbGF0ZS0kMSIpfWluc2VydChlLHQsaSxuKXtpZih0IT09Ii1tcy0iKXJldHVybiBzdXBlci5pbnNlcnQoZSx0LGkpO2xldHtwYXJlbnQ6cyxwcm9wOmEsdmFsdWU6b309ZSxsPWEuaW5jbHVkZXMoInJvd3MiKSxjPWEuaW5jbHVkZXMoImNvbHVtbnMiKSxmPXMuc29tZShrPT5rLnByb3A9PT0iZ3JpZC10ZW1wbGF0ZSJ8fGsucHJvcD09PSJncmlkLXRlbXBsYXRlLWFyZWFzIik7aWYoZiYmbClyZXR1cm4hMTtsZXQgZD1uZXcgaVIoe29wdGlvbnM6e319KSxwPWQuZ3JpZFN0YXR1cyhzLG4pLGg9dFIoZSk7aD1yUihlLGgpfHxoO2xldCBiPWw/aC5yb3c6aC5jb2x1bW47KHA9PT0ibm8tYXV0b3BsYWNlInx8cD09PSEwKSYmIWYmJihiPW51bGwpO2xldCB2PUpUKHt2YWx1ZTpvLGdhcDpifSk7ZS5jbG9uZUJlZm9yZSh7cHJvcDp4MCh7cHJvcDphLHByZWZpeDp0fSksdmFsdWU6dn0pO2xldCB5PXMubm9kZXMuZmluZChrPT5rLnByb3A9PT0iZ3JpZC1hdXRvLWZsb3ciKSx3PSJyb3ciO2lmKHkmJiFkLmRpc2FibGVkKHksbikmJih3PXkudmFsdWUudHJpbSgpKSxwPT09ImF1dG9wbGFjZSIpe2xldCBrPXMubm9kZXMuZmluZChFPT5FLnByb3A9PT0iZ3JpZC10ZW1wbGF0ZS1yb3dzIik7aWYoIWsmJmYpcmV0dXJuO2lmKCFrJiYhZil7ZS53YXJuKG4sIkF1dG9wbGFjZW1lbnQgZG9lcyBub3Qgd29yayB3aXRob3V0IGdyaWQtdGVtcGxhdGUtcm93cyBwcm9wZXJ0eSIpO3JldHVybn0hcy5ub2Rlcy5maW5kKEU9PkUucHJvcD09PSJncmlkLXRlbXBsYXRlLWNvbHVtbnMiKSYmIWYmJmUud2FybihuLCJBdXRvcGxhY2VtZW50IGRvZXMgbm90IHdvcmsgd2l0aG91dCBncmlkLXRlbXBsYXRlLWNvbHVtbnMgcHJvcGVydHkiKSxjJiYhZiYmZVIoZSxuLGgsdyl9fX07VXUubmFtZXM9WyJncmlkLXRlbXBsYXRlLXJvd3MiLCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLCJncmlkLXJvd3MiLCJncmlkLWNvbHVtbnMiXTtrMC5leHBvcnRzPVV1fSk7dmFyIEMwPXgoKGZMLEEwKT0+e3UoKTt2YXIgblI9aigpLFZ1PWNsYXNzIGV4dGVuZHMgblJ7Y2hlY2soZSl7cmV0dXJuIWUudmFsdWUuaW5jbHVkZXMoImZsZXgtIikmJmUudmFsdWUhPT0iYmFzZWxpbmUifXByZWZpeGVkKGUsdCl7cmV0dXJuIHQrImdyaWQtY29sdW1uLWFsaWduIn1ub3JtYWxpemUoKXtyZXR1cm4ianVzdGlmeS1zZWxmIn19O1Z1Lm5hbWVzPVsiZ3JpZC1jb2x1bW4tYWxpZ24iXTtBMC5leHBvcnRzPVZ1fSk7dmFyIEUwPXgoKGNMLF8wKT0+e3UoKTt2YXIgc1I9aigpLEh1PWNsYXNzIGV4dGVuZHMgc1J7cHJlZml4ZWQoZSx0KXtyZXR1cm4gdCsic2Nyb2xsLWNoYWluaW5nIn1ub3JtYWxpemUoKXtyZXR1cm4ib3ZlcnNjcm9sbC1iZWhhdmlvciJ9c2V0KGUsdCl7cmV0dXJuIGUudmFsdWU9PT0iYXV0byI/ZS52YWx1ZT0iY2hhaW5lZCI6KGUudmFsdWU9PT0ibm9uZSJ8fGUudmFsdWU9PT0iY29udGFpbiIpJiYoZS52YWx1ZT0ibm9uZSIpLHN1cGVyLnNldChlLHQpfX07SHUubmFtZXM9WyJvdmVyc2Nyb2xsLWJlaGF2aW9yIiwic2Nyb2xsLWNoYWluaW5nIl07XzAuZXhwb3J0cz1IdX0pO3ZhciBSMD14KChwTCxUMCk9Pnt1KCk7dmFyIGFSPWooKSx7cGFyc2VHcmlkQXJlYXM6b1Isd2Fybk1pc3NlZEFyZWFzOmxSLHByZWZpeFRyYWNrUHJvcDp1UixwcmVmaXhUcmFja1ZhbHVlOk8wLGdldEdyaWRHYXA6ZlIsd2FybkdyaWRHYXA6Y1IsaW5oZXJpdEdyaWRHYXA6cFJ9PUJ0KCk7ZnVuY3Rpb24gZFIocil7cmV0dXJuIHIudHJpbSgpLnNsaWNlKDEsLTEpLnNwbGl0KC9bIiddXHMqWyInXT8vZyl9dmFyIFd1PWNsYXNzIGV4dGVuZHMgYVJ7aW5zZXJ0KGUsdCxpLG4pe2lmKHQhPT0iLW1zLSIpcmV0dXJuIHN1cGVyLmluc2VydChlLHQsaSk7bGV0IHM9ITEsYT0hMSxvPWUucGFyZW50LGw9ZlIoZSk7bD1wUihlLGwpfHxsLG8ud2Fsa0RlY2xzKC8tbXMtZ3JpZC1yb3dzLyxkPT5kLnJlbW92ZSgpKSxvLndhbGtEZWNscygvZ3JpZC10ZW1wbGF0ZS0ocm93c3xjb2x1bW5zKS8sZD0+e2lmKGQucHJvcD09PSJncmlkLXRlbXBsYXRlLXJvd3MiKXthPSEwO2xldHtwcm9wOnAsdmFsdWU6aH09ZDtkLmNsb25lQmVmb3JlKHtwcm9wOnVSKHtwcm9wOnAscHJlZml4OnR9KSx2YWx1ZTpPMCh7dmFsdWU6aCxnYXA6bC5yb3d9KX0pfWVsc2Ugcz0hMH0pO2xldCBjPWRSKGUudmFsdWUpO3MmJiFhJiZsLnJvdyYmYy5sZW5ndGg+MSYmZS5jbG9uZUJlZm9yZSh7cHJvcDoiLW1zLWdyaWQtcm93cyIsdmFsdWU6TzAoe3ZhbHVlOmByZXBlYXQoJHtjLmxlbmd0aH0sIGF1dG8pYCxnYXA6bC5yb3d9KSxyYXdzOnt9fSksY1Ioe2dhcDpsLGhhc0NvbHVtbnM6cyxkZWNsOmUscmVzdWx0Om59KTtsZXQgZj1vUih7cm93czpjLGdhcDpsfSk7cmV0dXJuIGxSKGYsZSxuKSxlfX07V3UubmFtZXM9WyJncmlkLXRlbXBsYXRlLWFyZWFzIl07VDAuZXhwb3J0cz1XdX0pO3ZhciBJMD14KChkTCxQMCk9Pnt1KCk7dmFyIGhSPWooKSxHdT1jbGFzcyBleHRlbmRzIGhSe3NldChlLHQpe3JldHVybiB0PT09Ii13ZWJraXQtIiYmKGUudmFsdWU9ZS52YWx1ZS5yZXBsYWNlKC9ccyoocmlnaHR8bGVmdClccyovaSwiIikpLHN1cGVyLnNldChlLHQpfX07R3UubmFtZXM9WyJ0ZXh0LWVtcGhhc2lzLXBvc2l0aW9uIl07UDAuZXhwb3J0cz1HdX0pO3ZhciBxMD14KChoTCxEMCk9Pnt1KCk7dmFyIG1SPWooKSxRdT1jbGFzcyBleHRlbmRzIG1Se3NldChlLHQpe3JldHVybiBlLnByb3A9PT0idGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rIiYmZS52YWx1ZT09PSJhdXRvIj8oZS5wcm9wPXQrInRleHQtZGVjb3JhdGlvbi1za2lwIixlLnZhbHVlPSJpbmsiLGUpOnN1cGVyLnNldChlLHQpfX07UXUubmFtZXM9WyJ0ZXh0LWRlY29yYXRpb24tc2tpcC1pbmsiLCJ0ZXh0LWRlY29yYXRpb24tc2tpcCJdO0QwLmV4cG9ydHM9UXV9KTt2YXIgRjA9eCgobUwsQjApPT57dSgpOyJ1c2Ugc3RyaWN0IjtCMC5leHBvcnRzPXt3cmFwOiQwLGxpbWl0OkwwLHZhbGlkYXRlOk0wLHRlc3Q6WXUsY3Vycnk6Z1IsbmFtZTpOMH07ZnVuY3Rpb24gJDAocixlLHQpe3ZhciBpPWUtcjtyZXR1cm4oKHQtciklaStpKSVpK3J9ZnVuY3Rpb24gTDAocixlLHQpe3JldHVybiBNYXRoLm1heChyLE1hdGgubWluKGUsdCkpfWZ1bmN0aW9uIE0wKHIsZSx0LGksbil7aWYoIVl1KHIsZSx0LGksbikpdGhyb3cgbmV3IEVycm9yKHQrIiBpcyBvdXRzaWRlIG9mIHJhbmdlIFsiK3IrIiwiK2UrIikiKTtyZXR1cm4gdH1mdW5jdGlvbiBZdShyLGUsdCxpLG4pe3JldHVybiEodDxyfHx0PmV8fG4mJnQ9PT1lfHxpJiZ0PT09cil9ZnVuY3Rpb24gTjAocixlLHQsaSl7cmV0dXJuKHQ/IigiOiJbIikrcisiLCIrZSsoaT8iKSI6Il0iKX1mdW5jdGlvbiBnUihyLGUsdCxpKXt2YXIgbj1OMC5iaW5kKG51bGwscixlLHQsaSk7cmV0dXJue3dyYXA6JDAuYmluZChudWxsLHIsZSksbGltaXQ6TDAuYmluZChudWxsLHIsZSksdmFsaWRhdGU6ZnVuY3Rpb24ocyl7cmV0dXJuIE0wKHIsZSxzLHQsaSl9LHRlc3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIFl1KHIsZSxzLHQsaSl9LHRvU3RyaW5nOm4sbmFtZTpufX19KTt2YXIgVTA9eCgoZ0wsejApPT57dSgpO3ZhciBLdT1NcygpLHlSPUYwKCksYlI9eHIoKSx3Uj1IZSgpLHZSPV9lKCksajA9L3RvcHxsZWZ0fHJpZ2h0fGJvdHRvbS9naSx3dD1jbGFzcyBleHRlbmRzIHdSe3JlcGxhY2UoZSx0KXtsZXQgaT1LdShlKTtmb3IobGV0IG4gb2YgaS5ub2RlcylpZihuLnR5cGU9PT0iZnVuY3Rpb24iJiZuLnZhbHVlPT09dGhpcy5uYW1lKWlmKG4ubm9kZXM9dGhpcy5uZXdEaXJlY3Rpb24obi5ub2Rlcyksbi5ub2Rlcz10aGlzLm5vcm1hbGl6ZShuLm5vZGVzKSx0PT09Ii13ZWJraXQtIG9sZCIpe2lmKCF0aGlzLm9sZFdlYmtpdChuKSlyZXR1cm4hMX1lbHNlIG4ubm9kZXM9dGhpcy5jb252ZXJ0RGlyZWN0aW9uKG4ubm9kZXMpLG4udmFsdWU9dCtuLnZhbHVlO3JldHVybiBpLnRvU3RyaW5nKCl9cmVwbGFjZUZpcnN0KGUsLi4udCl7cmV0dXJuIHQubWFwKG49Pm49PT0iICI/e3R5cGU6InNwYWNlIix2YWx1ZTpufTp7dHlwZToid29yZCIsdmFsdWU6bn0pLmNvbmNhdChlLnNsaWNlKDEpKX1ub3JtYWxpemVVbml0KGUsdCl7cmV0dXJuYCR7cGFyc2VGbG9hdChlKS90KjM2MH1kZWdgfW5vcm1hbGl6ZShlKXtpZighZVswXSlyZXR1cm4gZTtpZigvLT9cZCsoLlxkKyk/Z3JhZC8udGVzdChlWzBdLnZhbHVlKSllWzBdLnZhbHVlPXRoaXMubm9ybWFsaXplVW5pdChlWzBdLnZhbHVlLDQwMCk7ZWxzZSBpZigvLT9cZCsoLlxkKyk/cmFkLy50ZXN0KGVbMF0udmFsdWUpKWVbMF0udmFsdWU9dGhpcy5ub3JtYWxpemVVbml0KGVbMF0udmFsdWUsMipNYXRoLlBJKTtlbHNlIGlmKC8tP1xkKyguXGQrKT90dXJuLy50ZXN0KGVbMF0udmFsdWUpKWVbMF0udmFsdWU9dGhpcy5ub3JtYWxpemVVbml0KGVbMF0udmFsdWUsMSk7ZWxzZSBpZihlWzBdLnZhbHVlLmluY2x1ZGVzKCJkZWciKSl7bGV0IHQ9cGFyc2VGbG9hdChlWzBdLnZhbHVlKTt0PXlSLndyYXAoMCwzNjAsdCksZVswXS52YWx1ZT1gJHt0fWRlZ2B9cmV0dXJuIGVbMF0udmFsdWU9PT0iMGRlZyI/ZT10aGlzLnJlcGxhY2VGaXJzdChlLCJ0byIsIiAiLCJ0b3AiKTplWzBdLnZhbHVlPT09IjkwZGVnIj9lPXRoaXMucmVwbGFjZUZpcnN0KGUsInRvIiwiICIsInJpZ2h0Iik6ZVswXS52YWx1ZT09PSIxODBkZWciP2U9dGhpcy5yZXBsYWNlRmlyc3QoZSwidG8iLCIgIiwiYm90dG9tIik6ZVswXS52YWx1ZT09PSIyNzBkZWciJiYoZT10aGlzLnJlcGxhY2VGaXJzdChlLCJ0byIsIiAiLCJsZWZ0IikpLGV9bmV3RGlyZWN0aW9uKGUpe2lmKGVbMF0udmFsdWU9PT0idG8ifHwoajAubGFzdEluZGV4PTAsIWowLnRlc3QoZVswXS52YWx1ZSkpKXJldHVybiBlO2UudW5zaGlmdCh7dHlwZToid29yZCIsdmFsdWU6InRvIn0se3R5cGU6InNwYWNlIix2YWx1ZToiICJ9KTtmb3IobGV0IHQ9Mjt0PGUubGVuZ3RoJiZlW3RdLnR5cGUhPT0iZGl2Ijt0KyspZVt0XS50eXBlPT09IndvcmQiJiYoZVt0XS52YWx1ZT10aGlzLnJldmVydERpcmVjdGlvbihlW3RdLnZhbHVlKSk7cmV0dXJuIGV9aXNSYWRpYWwoZSl7bGV0IHQ9ImJlZm9yZSI7Zm9yKGxldCBpIG9mIGUpaWYodD09PSJiZWZvcmUiJiZpLnR5cGU9PT0ic3BhY2UiKXQ9ImF0IjtlbHNlIGlmKHQ9PT0iYXQiJiZpLnZhbHVlPT09ImF0Iil0PSJhZnRlciI7ZWxzZXtpZih0PT09ImFmdGVyIiYmaS50eXBlPT09InNwYWNlIilyZXR1cm4hMDtpZihpLnR5cGU9PT0iZGl2IilicmVhazt0PSJiZWZvcmUifXJldHVybiExfWNvbnZlcnREaXJlY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoPjAmJihlWzBdLnZhbHVlPT09InRvIj90aGlzLmZpeERpcmVjdGlvbihlKTplWzBdLnZhbHVlLmluY2x1ZGVzKCJkZWciKT90aGlzLmZpeEFuZ2xlKGUpOnRoaXMuaXNSYWRpYWwoZSkmJnRoaXMuZml4UmFkaWFsKGUpKSxlfWZpeERpcmVjdGlvbihlKXtlLnNwbGljZSgwLDIpO2ZvcihsZXQgdCBvZiBlKXtpZih0LnR5cGU9PT0iZGl2IilicmVhazt0LnR5cGU9PT0id29yZCImJih0LnZhbHVlPXRoaXMucmV2ZXJ0RGlyZWN0aW9uKHQudmFsdWUpKX19Zml4QW5nbGUoZSl7bGV0IHQ9ZVswXS52YWx1ZTt0PXBhcnNlRmxvYXQodCksdD1NYXRoLmFicyg0NTAtdCklMzYwLHQ9dGhpcy5yb3VuZEZsb2F0KHQsMyksZVswXS52YWx1ZT1gJHt0fWRlZ2B9Zml4UmFkaWFsKGUpe2xldCB0PVtdLGk9W10sbixzLGEsbyxsO2ZvcihvPTA7bzxlLmxlbmd0aC0yO28rKylpZihuPWVbb10scz1lW28rMV0sYT1lW28rMl0sbi50eXBlPT09InNwYWNlIiYmcy52YWx1ZT09PSJhdCImJmEudHlwZT09PSJzcGFjZSIpe2w9byszO2JyZWFrfWVsc2UgdC5wdXNoKG4pO2xldCBjO2ZvcihvPWw7bzxlLmxlbmd0aDtvKyspaWYoZVtvXS50eXBlPT09ImRpdiIpe2M9ZVtvXTticmVha31lbHNlIGkucHVzaChlW29dKTtlLnNwbGljZSgwLG8sLi4uaSxjLC4uLnQpfXJldmVydERpcmVjdGlvbihlKXtyZXR1cm4gd3QuZGlyZWN0aW9uc1tlLnRvTG93ZXJDYXNlKCldfHxlfXJvdW5kRmxvYXQoZSx0KXtyZXR1cm4gcGFyc2VGbG9hdChlLnRvRml4ZWQodCkpfW9sZFdlYmtpdChlKXtsZXR7bm9kZXM6dH09ZSxpPUt1LnN0cmluZ2lmeShlLm5vZGVzKTtpZih0aGlzLm5hbWUhPT0ibGluZWFyLWdyYWRpZW50Inx8dFswXSYmdFswXS52YWx1ZS5pbmNsdWRlcygiZGVnIil8fGkuaW5jbHVkZXMoInB4Iil8fGkuaW5jbHVkZXMoIi1jb3JuZXIiKXx8aS5pbmNsdWRlcygiLXNpZGUiKSlyZXR1cm4hMTtsZXQgbj1bW11dO2ZvcihsZXQgcyBvZiB0KW5bbi5sZW5ndGgtMV0ucHVzaChzKSxzLnR5cGU9PT0iZGl2IiYmcy52YWx1ZT09PSIsIiYmbi5wdXNoKFtdKTt0aGlzLm9sZERpcmVjdGlvbihuKSx0aGlzLmNvbG9yU3RvcHMobiksZS5ub2Rlcz1bXTtmb3IobGV0IHMgb2YgbillLm5vZGVzPWUubm9kZXMuY29uY2F0KHMpO3JldHVybiBlLm5vZGVzLnVuc2hpZnQoe3R5cGU6IndvcmQiLHZhbHVlOiJsaW5lYXIifSx0aGlzLmNsb25lRGl2KGUubm9kZXMpKSxlLnZhbHVlPSItd2Via2l0LWdyYWRpZW50IiwhMH1vbGREaXJlY3Rpb24oZSl7bGV0IHQ9dGhpcy5jbG9uZURpdihlWzBdKTtpZihlWzBdWzBdLnZhbHVlIT09InRvIilyZXR1cm4gZS51bnNoaWZ0KFt7dHlwZToid29yZCIsdmFsdWU6d3Qub2xkRGlyZWN0aW9ucy5ib3R0b219LHRdKTt7bGV0IGk9W107Zm9yKGxldCBzIG9mIGVbMF0uc2xpY2UoMikpcy50eXBlPT09IndvcmQiJiZpLnB1c2gocy52YWx1ZS50b0xvd2VyQ2FzZSgpKTtpPWkuam9pbigiICIpO2xldCBuPXd0Lm9sZERpcmVjdGlvbnNbaV18fGk7cmV0dXJuIGVbMF09W3t0eXBlOiJ3b3JkIix2YWx1ZTpufSx0XSxlWzBdfX1jbG9uZURpdihlKXtmb3IobGV0IHQgb2YgZSlpZih0LnR5cGU9PT0iZGl2IiYmdC52YWx1ZT09PSIsIilyZXR1cm4gdDtyZXR1cm57dHlwZToiZGl2Iix2YWx1ZToiLCIsYWZ0ZXI6IiAifX1jb2xvclN0b3BzKGUpe2xldCB0PVtdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgbixzPWVbaV0sYTtpZihpPT09MCljb250aW51ZTtsZXQgbz1LdS5zdHJpbmdpZnkoc1swXSk7c1sxXSYmc1sxXS50eXBlPT09IndvcmQiP249c1sxXS52YWx1ZTpzWzJdJiZzWzJdLnR5cGU9PT0id29yZCImJihuPXNbMl0udmFsdWUpO2xldCBsO2k9PT0xJiYoIW58fG49PT0iMCUiKT9sPWBmcm9tKCR7b30pYDppPT09ZS5sZW5ndGgtMSYmKCFufHxuPT09IjEwMCUiKT9sPWB0bygke299KWA6bj9sPWBjb2xvci1zdG9wKCR7bn0sICR7b30pYDpsPWBjb2xvci1zdG9wKCR7b30pYDtsZXQgYz1zW3MubGVuZ3RoLTFdO2VbaV09W3t0eXBlOiJ3b3JkIix2YWx1ZTpsfV0sYy50eXBlPT09ImRpdiImJmMudmFsdWU9PT0iLCImJihhPWVbaV0ucHVzaChjKSksdC5wdXNoKGEpfXJldHVybiB0fW9sZChlKXtpZihlPT09Ii13ZWJraXQtIil7bGV0IHQ9dGhpcy5uYW1lPT09ImxpbmVhci1ncmFkaWVudCI/ImxpbmVhciI6InJhZGlhbCIsaT0iLWdyYWRpZW50IixuPXZSLnJlZ2V4cChgLXdlYmtpdC0oJHt0fS1ncmFkaWVudHxncmFkaWVudFxcKFxccyoke3R9KWAsITEpO3JldHVybiBuZXcgYlIodGhpcy5uYW1lLGUrdGhpcy5uYW1lLGksbil9ZWxzZSByZXR1cm4gc3VwZXIub2xkKGUpfWFkZChlLHQpe2xldCBpPWUucHJvcDtpZihpLmluY2x1ZGVzKCJtYXNrIikpe2lmKHQ9PT0iLXdlYmtpdC0ifHx0PT09Ii13ZWJraXQtIG9sZCIpcmV0dXJuIHN1cGVyLmFkZChlLHQpfWVsc2UgaWYoaT09PSJsaXN0LXN0eWxlInx8aT09PSJsaXN0LXN0eWxlLWltYWdlInx8aT09PSJjb250ZW50Iil7aWYodD09PSItd2Via2l0LSJ8fHQ9PT0iLXdlYmtpdC0gb2xkIilyZXR1cm4gc3VwZXIuYWRkKGUsdCl9ZWxzZSByZXR1cm4gc3VwZXIuYWRkKGUsdCl9fTt3dC5uYW1lcz1bImxpbmVhci1ncmFkaWVudCIsInJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLCJyYWRpYWwtZ3JhZGllbnQiLCJyZXBlYXRpbmctcmFkaWFsLWdyYWRpZW50Il07d3QuZGlyZWN0aW9ucz17dG9wOiJib3R0b20iLGxlZnQ6InJpZ2h0Iixib3R0b206InRvcCIscmlnaHQ6ImxlZnQifTt3dC5vbGREaXJlY3Rpb25zPXt0b3A6ImxlZnQgYm90dG9tLCBsZWZ0IHRvcCIsbGVmdDoicmlnaHQgdG9wLCBsZWZ0IHRvcCIsYm90dG9tOiJsZWZ0IHRvcCwgbGVmdCBib3R0b20iLHJpZ2h0OiJsZWZ0IHRvcCwgcmlnaHQgdG9wIiwidG9wIHJpZ2h0IjoibGVmdCBib3R0b20sIHJpZ2h0IHRvcCIsInRvcCBsZWZ0IjoicmlnaHQgYm90dG9tLCBsZWZ0IHRvcCIsInJpZ2h0IHRvcCI6ImxlZnQgYm90dG9tLCByaWdodCB0b3AiLCJyaWdodCBib3R0b20iOiJsZWZ0IHRvcCwgcmlnaHQgYm90dG9tIiwiYm90dG9tIHJpZ2h0IjoibGVmdCB0b3AsIHJpZ2h0IGJvdHRvbSIsImJvdHRvbSBsZWZ0IjoicmlnaHQgdG9wLCBsZWZ0IGJvdHRvbSIsImxlZnQgdG9wIjoicmlnaHQgYm90dG9tLCBsZWZ0IHRvcCIsImxlZnQgYm90dG9tIjoicmlnaHQgdG9wLCBsZWZ0IGJvdHRvbSJ9O3owLmV4cG9ydHM9d3R9KTt2YXIgVzA9eCgoeUwsSDApPT57dSgpO3ZhciB4Uj14cigpLGtSPUhlKCk7ZnVuY3Rpb24gVjAocil7cmV0dXJuIG5ldyBSZWdFeHAoYChefFtcXHMsKF0pKCR7cn0oJHxbXFxzKSxdKSlgLCJnaSIpfXZhciBYdT1jbGFzcyBleHRlbmRzIGtSe3JlZ2V4cCgpe3JldHVybiB0aGlzLnJlZ2V4cENhY2hlfHwodGhpcy5yZWdleHBDYWNoZT1WMCh0aGlzLm5hbWUpKSx0aGlzLnJlZ2V4cENhY2hlfWlzU3RyZXRjaCgpe3JldHVybiB0aGlzLm5hbWU9PT0ic3RyZXRjaCJ8fHRoaXMubmFtZT09PSJmaWxsInx8dGhpcy5uYW1lPT09ImZpbGwtYXZhaWxhYmxlIn1yZXBsYWNlKGUsdCl7cmV0dXJuIHQ9PT0iLW1vei0iJiZ0aGlzLmlzU3RyZXRjaCgpP2UucmVwbGFjZSh0aGlzLnJlZ2V4cCgpLCIkMS1tb3otYXZhaWxhYmxlJDMiKTp0PT09Ii13ZWJraXQtIiYmdGhpcy5pc1N0cmV0Y2goKT9lLnJlcGxhY2UodGhpcy5yZWdleHAoKSwiJDEtd2Via2l0LWZpbGwtYXZhaWxhYmxlJDMiKTpzdXBlci5yZXBsYWNlKGUsdCl9b2xkKGUpe2xldCB0PWUrdGhpcy5uYW1lO3JldHVybiB0aGlzLmlzU3RyZXRjaCgpJiYoZT09PSItbW96LSI/dD0iLW1vei1hdmFpbGFibGUiOmU9PT0iLXdlYmtpdC0iJiYodD0iLXdlYmtpdC1maWxsLWF2YWlsYWJsZSIpKSxuZXcgeFIodGhpcy5uYW1lLHQsdCxWMCh0KSl9YWRkKGUsdCl7aWYoIShlLnByb3AuaW5jbHVkZXMoImdyaWQiKSYmdCE9PSItd2Via2l0LSIpKXJldHVybiBzdXBlci5hZGQoZSx0KX19O1h1Lm5hbWVzPVsibWF4LWNvbnRlbnQiLCJtaW4tY29udGVudCIsImZpdC1jb250ZW50IiwiZmlsbCIsImZpbGwtYXZhaWxhYmxlIiwic3RyZXRjaCJdO0gwLmV4cG9ydHM9WHV9KTt2YXIgWTA9eCgoYkwsUTApPT57dSgpO3ZhciBHMD14cigpLFNSPUhlKCksWnU9Y2xhc3MgZXh0ZW5kcyBTUntyZXBsYWNlKGUsdCl7cmV0dXJuIHQ9PT0iLXdlYmtpdC0iP2UucmVwbGFjZSh0aGlzLnJlZ2V4cCgpLCIkMS13ZWJraXQtb3B0aW1pemUtY29udHJhc3QiKTp0PT09Ii1tb3otIj9lLnJlcGxhY2UodGhpcy5yZWdleHAoKSwiJDEtbW96LWNyaXNwLWVkZ2VzIik6c3VwZXIucmVwbGFjZShlLHQpfW9sZChlKXtyZXR1cm4gZT09PSItd2Via2l0LSI/bmV3IEcwKHRoaXMubmFtZSwiLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdCIpOmU9PT0iLW1vei0iP25ldyBHMCh0aGlzLm5hbWUsIi1tb3otY3Jpc3AtZWRnZXMiKTpzdXBlci5vbGQoZSl9fTtadS5uYW1lcz1bInBpeGVsYXRlZCJdO1EwLmV4cG9ydHM9WnV9KTt2YXIgWDA9eCgod0wsSzApPT57dSgpO3ZhciBBUj1IZSgpLEp1PWNsYXNzIGV4dGVuZHMgQVJ7cmVwbGFjZShlLHQpe2xldCBpPXN1cGVyLnJlcGxhY2UoZSx0KTtyZXR1cm4gdD09PSItd2Via2l0LSImJihpPWkucmVwbGFjZSgvKCJbXiJdKyJ8J1teJ10rJykoXHMrXGQrXHcpL2dpLCJ1cmwoJDEpJDIiKSksaX19O0p1Lm5hbWVzPVsiaW1hZ2Utc2V0Il07SzAuZXhwb3J0cz1KdX0pO3ZhciBKMD14KCh2TCxaMCk9Pnt1KCk7dmFyIENSPSRlKCkubGlzdCxfUj1IZSgpLGVmPWNsYXNzIGV4dGVuZHMgX1J7cmVwbGFjZShlLHQpe3JldHVybiBDUi5zcGFjZShlKS5tYXAoaT0+e2lmKGkuc2xpY2UoMCwrdGhpcy5uYW1lLmxlbmd0aCsxKSE9PXRoaXMubmFtZSsiKCIpcmV0dXJuIGk7bGV0IG49aS5sYXN0SW5kZXhPZigiKSIpLHM9aS5zbGljZShuKzEpLGE9aS5zbGljZSh0aGlzLm5hbWUubGVuZ3RoKzEsbik7aWYodD09PSItd2Via2l0LSIpe2xldCBvPWEubWF0Y2goL1xkKi4/XGQrJT8vKTtvPyhhPWEuc2xpY2Uob1swXS5sZW5ndGgpLnRyaW0oKSxhKz1gLCAke29bMF19YCk6YSs9IiwgMC41In1yZXR1cm4gdCt0aGlzLm5hbWUrIigiK2ErIikiK3N9KS5qb2luKCIgIil9fTtlZi5uYW1lcz1bImNyb3NzLWZhZGUiXTtaMC5leHBvcnRzPWVmfSk7dmFyIHR2PXgoKHhMLGV2KT0+e3UoKTt2YXIgRVI9UGUoKSxPUj14cigpLFRSPUhlKCksdGY9Y2xhc3MgZXh0ZW5kcyBUUntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCk7ZT09PSJkaXNwbGF5LWZsZXgiJiYodGhpcy5uYW1lPSJmbGV4Iil9Y2hlY2soZSl7cmV0dXJuIGUucHJvcD09PSJkaXNwbGF5IiYmZS52YWx1ZT09PXRoaXMubmFtZX1wcmVmaXhlZChlKXtsZXQgdCxpO3JldHVyblt0LGVdPUVSKGUpLHQ9PT0yMDA5P3RoaXMubmFtZT09PSJmbGV4Ij9pPSJib3giOmk9ImlubGluZS1ib3giOnQ9PT0yMDEyP3RoaXMubmFtZT09PSJmbGV4Ij9pPSJmbGV4Ym94IjppPSJpbmxpbmUtZmxleGJveCI6dD09PSJmaW5hbCImJihpPXRoaXMubmFtZSksZStpfXJlcGxhY2UoZSx0KXtyZXR1cm4gdGhpcy5wcmVmaXhlZCh0KX1vbGQoZSl7bGV0IHQ9dGhpcy5wcmVmaXhlZChlKTtpZighIXQpcmV0dXJuIG5ldyBPUih0aGlzLm5hbWUsdCl9fTt0Zi5uYW1lcz1bImRpc3BsYXktZmxleCIsImlubGluZS1mbGV4Il07ZXYuZXhwb3J0cz10Zn0pO3ZhciBpdj14KChrTCxydik9Pnt1KCk7dmFyIFJSPUhlKCkscmY9Y2xhc3MgZXh0ZW5kcyBSUntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCk7ZT09PSJkaXNwbGF5LWdyaWQiJiYodGhpcy5uYW1lPSJncmlkIil9Y2hlY2soZSl7cmV0dXJuIGUucHJvcD09PSJkaXNwbGF5IiYmZS52YWx1ZT09PXRoaXMubmFtZX19O3JmLm5hbWVzPVsiZGlzcGxheS1ncmlkIiwiaW5saW5lLWdyaWQiXTtydi5leHBvcnRzPXJmfSk7dmFyIHN2PXgoKFNMLG52KT0+e3UoKTt2YXIgUFI9SGUoKSxuZj1jbGFzcyBleHRlbmRzIFBSe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KTtlPT09ImZpbHRlci1mdW5jdGlvbiImJih0aGlzLm5hbWU9ImZpbHRlciIpfX07bmYubmFtZXM9WyJmaWx0ZXIiLCJmaWx0ZXItZnVuY3Rpb24iXTtudi5leHBvcnRzPW5mfSk7dmFyIHV2PXgoKEFMLGx2KT0+e3UoKTt2YXIgYXY9TmkoKSx6PWooKSxvdj16eSgpLElSPWFiKCksRFI9b3UoKSxxUj1DYigpLHNmPU10KCksUHI9a3IoKSwkUj1EYigpLHV0PUhlKCksSXI9X2UoKSxMUj0kYigpLE1SPU1iKCksTlI9QmIoKSxCUj1qYigpLEZSPVdiKCksalI9WWIoKSx6Uj1YYigpLFVSPUpiKCksVlI9dHcoKSxIUj1pdygpLFdSPXN3KCksR1I9b3coKSxRUj11dygpLFlSPWN3KCksS1I9ZHcoKSxYUj1ndygpLFpSPWJ3KCksSlI9eHcoKSxlNT1TdygpLHQ1PUN3KCkscjU9T3coKSxpNT1SdygpLG41PUR3KCksczU9JHcoKSxhNT1NdygpLG81PUJ3KCksbDU9ancoKSx1NT1WdygpLGY1PVd3KCksYzU9UXcoKSxwNT1LdygpLGQ1PVp3KCksaDU9ZTAoKSxtNT1yMCgpLGc1PXMwKCkseTU9bzAoKSxiNT11MCgpLHc1PWMwKCksdjU9ZDAoKSx4NT1nMCgpLGs1PWIwKCksUzU9djAoKSxBNT1TMCgpLEM1PUMwKCksXzU9RTAoKSxFNT1SMCgpLE81PUkwKCksVDU9cTAoKSxSNT1VMCgpLFA1PVcwKCksSTU9WTAoKSxENT1YMCgpLHE1PUowKCksJDU9dHYoKSxMNT1pdigpLE01PXN2KCk7UHIuaGFjayhMUik7UHIuaGFjayhNUik7UHIuaGFjayhOUik7UHIuaGFjayhCUik7ei5oYWNrKEZSKTt6LmhhY2soalIpO3ouaGFjayh6Uik7ei5oYWNrKFVSKTt6LmhhY2soVlIpO3ouaGFjayhIUik7ei5oYWNrKFdSKTt6LmhhY2soR1IpO3ouaGFjayhRUik7ei5oYWNrKFlSKTt6LmhhY2soS1IpO3ouaGFjayhYUik7ei5oYWNrKFpSKTt6LmhhY2soSlIpO3ouaGFjayhlNSk7ei5oYWNrKHQ1KTt6LmhhY2socjUpO3ouaGFjayhpNSk7ei5oYWNrKG41KTt6LmhhY2soczUpO3ouaGFjayhhNSk7ei5oYWNrKG81KTt6LmhhY2sobDUpO3ouaGFjayh1NSk7ei5oYWNrKGY1KTt6LmhhY2soYzUpO3ouaGFjayhwNSk7ei5oYWNrKGQ1KTt6LmhhY2soaDUpO3ouaGFjayhtNSk7ei5oYWNrKGc1KTt6LmhhY2soeTUpO3ouaGFjayhiNSk7ei5oYWNrKHc1KTt6LmhhY2sodjUpO3ouaGFjayh4NSk7ei5oYWNrKGs1KTt6LmhhY2soUzUpO3ouaGFjayhBNSk7ei5oYWNrKEM1KTt6LmhhY2soXzUpO3ouaGFjayhFNSk7ei5oYWNrKE81KTt6LmhhY2soVDUpO3V0LmhhY2soUjUpO3V0LmhhY2soUDUpO3V0LmhhY2soSTUpO3V0LmhhY2soRDUpO3V0LmhhY2socTUpO3V0LmhhY2soJDUpO3V0LmhhY2soTDUpO3V0LmhhY2soTTUpO3ZhciBhZj1uZXcgTWFwLEZpPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxpPXt9KXt0aGlzLmRhdGE9ZSx0aGlzLmJyb3dzZXJzPXQsdGhpcy5vcHRpb25zPWksW3RoaXMuYWRkLHRoaXMucmVtb3ZlXT10aGlzLnByZXByb2Nlc3ModGhpcy5zZWxlY3QodGhpcy5kYXRhKSksdGhpcy50cmFuc2l0aW9uPW5ldyBJUih0aGlzKSx0aGlzLnByb2Nlc3Nvcj1uZXcgRFIodGhpcyl9Y2xlYW5lcigpe2lmKHRoaXMuY2xlYW5lckNhY2hlKXJldHVybiB0aGlzLmNsZWFuZXJDYWNoZTtpZih0aGlzLmJyb3dzZXJzLnNlbGVjdGVkLmxlbmd0aCl7bGV0IGU9bmV3IHNmKHRoaXMuYnJvd3NlcnMuZGF0YSxbXSk7dGhpcy5jbGVhbmVyQ2FjaGU9bmV3IEZpKHRoaXMuZGF0YSxlLHRoaXMub3B0aW9ucyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5jbGVhbmVyQ2FjaGV9c2VsZWN0KGUpe2xldCB0PXthZGQ6e30scmVtb3ZlOnt9fTtmb3IobGV0IGkgaW4gZSl7bGV0IG49ZVtpXSxzPW4uYnJvd3NlcnMubWFwKGw9PntsZXQgYz1sLnNwbGl0KCIgIik7cmV0dXJue2Jyb3dzZXI6YCR7Y1swXX0gJHtjWzFdfWAsbm90ZTpjWzJdfX0pLGE9cy5maWx0ZXIobD0+bC5ub3RlKS5tYXAobD0+YCR7dGhpcy5icm93c2Vycy5wcmVmaXgobC5icm93c2VyKX0gJHtsLm5vdGV9YCk7YT1Jci51bmlxKGEpLHM9cy5maWx0ZXIobD0+dGhpcy5icm93c2Vycy5pc1NlbGVjdGVkKGwuYnJvd3NlcikpLm1hcChsPT57bGV0IGM9dGhpcy5icm93c2Vycy5wcmVmaXgobC5icm93c2VyKTtyZXR1cm4gbC5ub3RlP2Ake2N9ICR7bC5ub3RlfWA6Y30pLHM9dGhpcy5zb3J0KElyLnVuaXEocykpLHRoaXMub3B0aW9ucy5mbGV4Ym94PT09Im5vLTIwMDkiJiYocz1zLmZpbHRlcihsPT4hbC5pbmNsdWRlcygiMjAwOSIpKSk7bGV0IG89bi5icm93c2Vycy5tYXAobD0+dGhpcy5icm93c2Vycy5wcmVmaXgobCkpO24ubWlzdGFrZXMmJihvPW8uY29uY2F0KG4ubWlzdGFrZXMpKSxvPW8uY29uY2F0KGEpLG89SXIudW5pcShvKSxzLmxlbmd0aD8odC5hZGRbaV09cyxzLmxlbmd0aDxvLmxlbmd0aCYmKHQucmVtb3ZlW2ldPW8uZmlsdGVyKGw9PiFzLmluY2x1ZGVzKGwpKSkpOnQucmVtb3ZlW2ldPW99cmV0dXJuIHR9c29ydChlKXtyZXR1cm4gZS5zb3J0KCh0LGkpPT57bGV0IG49SXIucmVtb3ZlTm90ZSh0KS5sZW5ndGgscz1Jci5yZW1vdmVOb3RlKGkpLmxlbmd0aDtyZXR1cm4gbj09PXM/aS5sZW5ndGgtdC5sZW5ndGg6cy1ufSl9cHJlcHJvY2VzcyhlKXtsZXQgdD17c2VsZWN0b3JzOltdLCJAc3VwcG9ydHMiOm5ldyBxUihGaSx0aGlzKX07Zm9yKGxldCBuIGluIGUuYWRkKXtsZXQgcz1lLmFkZFtuXTtpZihuPT09IkBrZXlmcmFtZXMifHxuPT09IkB2aWV3cG9ydCIpdFtuXT1uZXcgJFIobixzLHRoaXMpO2Vsc2UgaWYobj09PSJAcmVzb2x1dGlvbiIpdFtuXT1uZXcgb3YobixzLHRoaXMpO2Vsc2UgaWYodGhpcy5kYXRhW25dLnNlbGVjdG9yKXQuc2VsZWN0b3JzLnB1c2goUHIubG9hZChuLHMsdGhpcykpO2Vsc2V7bGV0IGE9dGhpcy5kYXRhW25dLnByb3BzO2lmKGEpe2xldCBvPXV0LmxvYWQobixzLHRoaXMpO2ZvcihsZXQgbCBvZiBhKXRbbF18fCh0W2xdPXt2YWx1ZXM6W119KSx0W2xdLnZhbHVlcy5wdXNoKG8pfWVsc2V7bGV0IG89dFtuXSYmdFtuXS52YWx1ZXN8fFtdO3Rbbl09ei5sb2FkKG4scyx0aGlzKSx0W25dLnZhbHVlcz1vfX19bGV0IGk9e3NlbGVjdG9yczpbXX07Zm9yKGxldCBuIGluIGUucmVtb3ZlKXtsZXQgcz1lLnJlbW92ZVtuXTtpZih0aGlzLmRhdGFbbl0uc2VsZWN0b3Ipe2xldCBhPVByLmxvYWQobixzKTtmb3IobGV0IG8gb2YgcylpLnNlbGVjdG9ycy5wdXNoKGEub2xkKG8pKX1lbHNlIGlmKG49PT0iQGtleWZyYW1lcyJ8fG49PT0iQHZpZXdwb3J0Iilmb3IobGV0IGEgb2Ygcyl7bGV0IG89YEAke2F9JHtuLnNsaWNlKDEpfWA7aVtvXT17cmVtb3ZlOiEwfX1lbHNlIGlmKG49PT0iQHJlc29sdXRpb24iKWlbbl09bmV3IG92KG4scyx0aGlzKTtlbHNle2xldCBhPXRoaXMuZGF0YVtuXS5wcm9wcztpZihhKXtsZXQgbz11dC5sb2FkKG4sW10sdGhpcyk7Zm9yKGxldCBsIG9mIHMpe2xldCBjPW8ub2xkKGwpO2lmKGMpZm9yKGxldCBmIG9mIGEpaVtmXXx8KGlbZl09e30pLGlbZl0udmFsdWVzfHwoaVtmXS52YWx1ZXM9W10pLGlbZl0udmFsdWVzLnB1c2goYyl9fWVsc2UgZm9yKGxldCBvIG9mIHMpe2xldCBsPXRoaXMuZGVjbChuKS5vbGQobixvKTtpZihuPT09ImFsaWduLXNlbGYiKXtsZXQgYz10W25dJiZ0W25dLnByZWZpeGVzO2lmKGMpe2lmKG89PT0iLXdlYmtpdC0gMjAwOSImJmMuaW5jbHVkZXMoIi13ZWJraXQtIikpY29udGludWU7aWYobz09PSItd2Via2l0LSImJmMuaW5jbHVkZXMoIi13ZWJraXQtIDIwMDkiKSljb250aW51ZX19Zm9yKGxldCBjIG9mIGwpaVtjXXx8KGlbY109e30pLGlbY10ucmVtb3ZlPSEwfX19cmV0dXJuW3QsaV19ZGVjbChlKXtyZXR1cm4gYWYuaGFzKGUpfHxhZi5zZXQoZSx6LmxvYWQoZSkpLGFmLmdldChlKX11bnByZWZpeGVkKGUpe2xldCB0PXRoaXMubm9ybWFsaXplKGF2LnVucHJlZml4ZWQoZSkpO3JldHVybiB0PT09ImZsZXgtZGlyZWN0aW9uIiYmKHQ9ImZsZXgtZmxvdyIpLHR9bm9ybWFsaXplKGUpe3JldHVybiB0aGlzLmRlY2woZSkubm9ybWFsaXplKGUpfXByZWZpeGVkKGUsdCl7cmV0dXJuIGU9YXYudW5wcmVmaXhlZChlKSx0aGlzLmRlY2woZSkucHJlZml4ZWQoZSx0KX12YWx1ZXMoZSx0KXtsZXQgaT10aGlzW2VdLG49aVsiKiJdJiZpWyIqIl0udmFsdWVzLHM9aVt0XSYmaVt0XS52YWx1ZXM7cmV0dXJuIG4mJnM/SXIudW5pcShuLmNvbmNhdChzKSk6bnx8c3x8W119Z3JvdXAoZSl7bGV0IHQ9ZS5wYXJlbnQsaT10LmluZGV4KGUpLHtsZW5ndGg6bn09dC5ub2RlcyxzPXRoaXMudW5wcmVmaXhlZChlLnByb3ApLGE9KG8sbCk9Pntmb3IoaSs9bztpPj0wJiZpPG47KXtsZXQgYz10Lm5vZGVzW2ldO2lmKGMudHlwZT09PSJkZWNsIil7aWYobz09PS0xJiZjLnByb3A9PT1zJiYhc2Yud2l0aFByZWZpeChjLnZhbHVlKXx8dGhpcy51bnByZWZpeGVkKGMucHJvcCkhPT1zKWJyZWFrO2lmKGwoYyk9PT0hMClyZXR1cm4hMDtpZihvPT09MSYmYy5wcm9wPT09cyYmIXNmLndpdGhQcmVmaXgoYy52YWx1ZSkpYnJlYWt9aSs9b31yZXR1cm4hMX07cmV0dXJue3VwKG8pe3JldHVybiBhKC0xLG8pfSxkb3duKG8pe3JldHVybiBhKDEsbyl9fX19O2x2LmV4cG9ydHM9Rml9KTt2YXIgY3Y9eCgoQ0wsZnYpPT57dSgpO2Z2LmV4cG9ydHM9eyJiYWNrZHJvcC1maWx0ZXIiOntmZWF0dXJlOiJjc3MtYmFja2Ryb3AtZmlsdGVyIixicm93c2VyczpbImlvc19zYWYgMTYuMSIsImlvc19zYWYgMTYuMyIsImlvc19zYWYgMTYuNCIsImlvc19zYWYgMTYuNSIsInNhZmFyaSAxNi41Il19LGVsZW1lbnQ6e3Byb3BzOlsiYmFja2dyb3VuZCIsImJhY2tncm91bmQtaW1hZ2UiLCJib3JkZXItaW1hZ2UiLCJtYXNrIiwibGlzdC1zdHlsZSIsImxpc3Qtc3R5bGUtaW1hZ2UiLCJjb250ZW50IiwibWFzay1pbWFnZSJdLGZlYXR1cmU6ImNzcy1lbGVtZW50LWZ1bmN0aW9uIixicm93c2VyczpbImZpcmVmb3ggMTE0Il19LCJ1c2VyLXNlbGVjdCI6e21pc3Rha2VzOlsiLWtodG1sLSJdLGZlYXR1cmU6InVzZXItc2VsZWN0LW5vbmUiLGJyb3dzZXJzOlsiaW9zX3NhZiAxNi4xIiwiaW9zX3NhZiAxNi4zIiwiaW9zX3NhZiAxNi40IiwiaW9zX3NhZiAxNi41Iiwic2FmYXJpIDE2LjUiXX0sImJhY2tncm91bmQtY2xpcCI6e2ZlYXR1cmU6ImJhY2tncm91bmQtY2xpcC10ZXh0Iixicm93c2VyczpbImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTA5IiwiY2hyb21lIDExMyIsImNocm9tZSAxMTQiLCJlZGdlIDExNCIsIm9wZXJhIDk5Iiwic2Ftc3VuZyAyMSJdfSxoeXBoZW5zOntmZWF0dXJlOiJjc3MtaHlwaGVucyIsYnJvd3NlcnM6WyJpb3Nfc2FmIDE2LjEiLCJpb3Nfc2FmIDE2LjMiLCJpb3Nfc2FmIDE2LjQiLCJpb3Nfc2FmIDE2LjUiLCJzYWZhcmkgMTYuNSJdfSxmaWxsOntwcm9wczpbIndpZHRoIiwibWluLXdpZHRoIiwibWF4LXdpZHRoIiwiaGVpZ2h0IiwibWluLWhlaWdodCIsIm1heC1oZWlnaHQiLCJpbmxpbmUtc2l6ZSIsIm1pbi1pbmxpbmUtc2l6ZSIsIm1heC1pbmxpbmUtc2l6ZSIsImJsb2NrLXNpemUiLCJtaW4tYmxvY2stc2l6ZSIsIm1heC1ibG9jay1zaXplIiwiZ3JpZCIsImdyaWQtdGVtcGxhdGUiLCJncmlkLXRlbXBsYXRlLXJvd3MiLCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLCJncmlkLWF1dG8tY29sdW1ucyIsImdyaWQtYXV0by1yb3dzIl0sZmVhdHVyZToiaW50cmluc2ljLXdpZHRoIixicm93c2VyczpbImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTA5IiwiY2hyb21lIDExMyIsImNocm9tZSAxMTQiLCJlZGdlIDExNCIsIm9wZXJhIDk5Iiwic2Ftc3VuZyAyMSJdfSwiZmlsbC1hdmFpbGFibGUiOntwcm9wczpbIndpZHRoIiwibWluLXdpZHRoIiwibWF4LXdpZHRoIiwiaGVpZ2h0IiwibWluLWhlaWdodCIsIm1heC1oZWlnaHQiLCJpbmxpbmUtc2l6ZSIsIm1pbi1pbmxpbmUtc2l6ZSIsIm1heC1pbmxpbmUtc2l6ZSIsImJsb2NrLXNpemUiLCJtaW4tYmxvY2stc2l6ZSIsIm1heC1ibG9jay1zaXplIiwiZ3JpZCIsImdyaWQtdGVtcGxhdGUiLCJncmlkLXRlbXBsYXRlLXJvd3MiLCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLCJncmlkLWF1dG8tY29sdW1ucyIsImdyaWQtYXV0by1yb3dzIl0sZmVhdHVyZToiaW50cmluc2ljLXdpZHRoIixicm93c2VyczpbImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTA5IiwiY2hyb21lIDExMyIsImNocm9tZSAxMTQiLCJlZGdlIDExNCIsIm9wZXJhIDk5Iiwic2Ftc3VuZyAyMSJdfSxzdHJldGNoOntwcm9wczpbIndpZHRoIiwibWluLXdpZHRoIiwibWF4LXdpZHRoIiwiaGVpZ2h0IiwibWluLWhlaWdodCIsIm1heC1oZWlnaHQiLCJpbmxpbmUtc2l6ZSIsIm1pbi1pbmxpbmUtc2l6ZSIsIm1heC1pbmxpbmUtc2l6ZSIsImJsb2NrLXNpemUiLCJtaW4tYmxvY2stc2l6ZSIsIm1heC1ibG9jay1zaXplIiwiZ3JpZCIsImdyaWQtdGVtcGxhdGUiLCJncmlkLXRlbXBsYXRlLXJvd3MiLCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLCJncmlkLWF1dG8tY29sdW1ucyIsImdyaWQtYXV0by1yb3dzIl0sZmVhdHVyZToiaW50cmluc2ljLXdpZHRoIixicm93c2VyczpbImZpcmVmb3ggMTE0Il19LCJmaXQtY29udGVudCI6e3Byb3BzOlsid2lkdGgiLCJtaW4td2lkdGgiLCJtYXgtd2lkdGgiLCJoZWlnaHQiLCJtaW4taGVpZ2h0IiwibWF4LWhlaWdodCIsImlubGluZS1zaXplIiwibWluLWlubGluZS1zaXplIiwibWF4LWlubGluZS1zaXplIiwiYmxvY2stc2l6ZSIsIm1pbi1ibG9jay1zaXplIiwibWF4LWJsb2NrLXNpemUiLCJncmlkIiwiZ3JpZC10ZW1wbGF0ZSIsImdyaWQtdGVtcGxhdGUtcm93cyIsImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsImdyaWQtYXV0by1jb2x1bW5zIiwiZ3JpZC1hdXRvLXJvd3MiXSxmZWF0dXJlOiJpbnRyaW5zaWMtd2lkdGgiLGJyb3dzZXJzOlsiZmlyZWZveCAxMTQiXX0sInRleHQtZGVjb3JhdGlvbi1zdHlsZSI6e2ZlYXR1cmU6InRleHQtZGVjb3JhdGlvbiIsYnJvd3NlcnM6WyJpb3Nfc2FmIDE2LjEiLCJpb3Nfc2FmIDE2LjMiLCJpb3Nfc2FmIDE2LjQiLCJpb3Nfc2FmIDE2LjUiXX0sInRleHQtZGVjb3JhdGlvbi1jb2xvciI6e2ZlYXR1cmU6InRleHQtZGVjb3JhdGlvbiIsYnJvd3NlcnM6WyJpb3Nfc2FmIDE2LjEiLCJpb3Nfc2FmIDE2LjMiLCJpb3Nfc2FmIDE2LjQiLCJpb3Nfc2FmIDE2LjUiXX0sInRleHQtZGVjb3JhdGlvbi1saW5lIjp7ZmVhdHVyZToidGV4dC1kZWNvcmF0aW9uIixicm93c2VyczpbImlvc19zYWYgMTYuMSIsImlvc19zYWYgMTYuMyIsImlvc19zYWYgMTYuNCIsImlvc19zYWYgMTYuNSJdfSwidGV4dC1kZWNvcmF0aW9uIjp7ZmVhdHVyZToidGV4dC1kZWNvcmF0aW9uIixicm93c2VyczpbImlvc19zYWYgMTYuMSIsImlvc19zYWYgMTYuMyIsImlvc19zYWYgMTYuNCIsImlvc19zYWYgMTYuNSJdfSwidGV4dC1kZWNvcmF0aW9uLXNraXAiOntmZWF0dXJlOiJ0ZXh0LWRlY29yYXRpb24iLGJyb3dzZXJzOlsiaW9zX3NhZiAxNi4xIiwiaW9zX3NhZiAxNi4zIiwiaW9zX3NhZiAxNi40IiwiaW9zX3NhZiAxNi41Il19LCJ0ZXh0LWRlY29yYXRpb24tc2tpcC1pbmsiOntmZWF0dXJlOiJ0ZXh0LWRlY29yYXRpb24iLGJyb3dzZXJzOlsiaW9zX3NhZiAxNi4xIiwiaW9zX3NhZiAxNi4zIiwiaW9zX3NhZiAxNi40IiwiaW9zX3NhZiAxNi41Il19LCJ0ZXh0LXNpemUtYWRqdXN0Ijp7ZmVhdHVyZToidGV4dC1zaXplLWFkanVzdCIsYnJvd3NlcnM6WyJpb3Nfc2FmIDE2LjEiLCJpb3Nfc2FmIDE2LjMiLCJpb3Nfc2FmIDE2LjQiLCJpb3Nfc2FmIDE2LjUiXX0sIm1hc2stY2xpcCI6e2ZlYXR1cmU6ImNzcy1tYXNrcyIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJvcGVyYSA5OSIsInNhbXN1bmcgMjEiXX0sIm1hc2stY29tcG9zaXRlIjp7ZmVhdHVyZToiY3NzLW1hc2tzIixicm93c2VyczpbImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTA5IiwiY2hyb21lIDExMyIsImNocm9tZSAxMTQiLCJlZGdlIDExNCIsIm9wZXJhIDk5Iiwic2Ftc3VuZyAyMSJdfSwibWFzay1pbWFnZSI6e2ZlYXR1cmU6ImNzcy1tYXNrcyIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJvcGVyYSA5OSIsInNhbXN1bmcgMjEiXX0sIm1hc2stb3JpZ2luIjp7ZmVhdHVyZToiY3NzLW1hc2tzIixicm93c2VyczpbImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTA5IiwiY2hyb21lIDExMyIsImNocm9tZSAxMTQiLCJlZGdlIDExNCIsIm9wZXJhIDk5Iiwic2Ftc3VuZyAyMSJdfSwibWFzay1yZXBlYXQiOntmZWF0dXJlOiJjc3MtbWFza3MiLGJyb3dzZXJzOlsiYW5kX2NociAxMTQiLCJhbmRfdWMgMTUuNSIsImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiLCJzYW1zdW5nIDIxIl19LCJtYXNrLWJvcmRlci1yZXBlYXQiOntmZWF0dXJlOiJjc3MtbWFza3MiLGJyb3dzZXJzOlsiYW5kX2NociAxMTQiLCJhbmRfdWMgMTUuNSIsImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiLCJzYW1zdW5nIDIxIl19LCJtYXNrLWJvcmRlci1zb3VyY2UiOntmZWF0dXJlOiJjc3MtbWFza3MiLGJyb3dzZXJzOlsiYW5kX2NociAxMTQiLCJhbmRfdWMgMTUuNSIsImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiLCJzYW1zdW5nIDIxIl19LG1hc2s6e2ZlYXR1cmU6ImNzcy1tYXNrcyIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJvcGVyYSA5OSIsInNhbXN1bmcgMjEiXX0sIm1hc2stcG9zaXRpb24iOntmZWF0dXJlOiJjc3MtbWFza3MiLGJyb3dzZXJzOlsiYW5kX2NociAxMTQiLCJhbmRfdWMgMTUuNSIsImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiLCJzYW1zdW5nIDIxIl19LCJtYXNrLXNpemUiOntmZWF0dXJlOiJjc3MtbWFza3MiLGJyb3dzZXJzOlsiYW5kX2NociAxMTQiLCJhbmRfdWMgMTUuNSIsImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiLCJzYW1zdW5nIDIxIl19LCJtYXNrLWJvcmRlciI6e2ZlYXR1cmU6ImNzcy1tYXNrcyIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJvcGVyYSA5OSIsInNhbXN1bmcgMjEiXX0sIm1hc2stYm9yZGVyLW91dHNldCI6e2ZlYXR1cmU6ImNzcy1tYXNrcyIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJvcGVyYSA5OSIsInNhbXN1bmcgMjEiXX0sIm1hc2stYm9yZGVyLXdpZHRoIjp7ZmVhdHVyZToiY3NzLW1hc2tzIixicm93c2VyczpbImFuZF9jaHIgMTE0IiwiYW5kX3VjIDE1LjUiLCJjaHJvbWUgMTA5IiwiY2hyb21lIDExMyIsImNocm9tZSAxMTQiLCJlZGdlIDExNCIsIm9wZXJhIDk5Iiwic2Ftc3VuZyAyMSJdfSwibWFzay1ib3JkZXItc2xpY2UiOntmZWF0dXJlOiJjc3MtbWFza3MiLGJyb3dzZXJzOlsiYW5kX2NociAxMTQiLCJhbmRfdWMgMTUuNSIsImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiLCJzYW1zdW5nIDIxIl19LCJjbGlwLXBhdGgiOntmZWF0dXJlOiJjc3MtY2xpcC1wYXRoIixicm93c2VyczpbInNhbXN1bmcgMjEiXX0sImJveC1kZWNvcmF0aW9uLWJyZWFrIjp7ZmVhdHVyZToiY3NzLWJveGRlY29yYXRpb25icmVhayIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJpb3Nfc2FmIDE2LjEiLCJpb3Nfc2FmIDE2LjMiLCJpb3Nfc2FmIDE2LjQiLCJpb3Nfc2FmIDE2LjUiLCJvcGVyYSA5OSIsInNhZmFyaSAxNi41Iiwic2Ftc3VuZyAyMSJdfSxhcHBlYXJhbmNlOntmZWF0dXJlOiJjc3MtYXBwZWFyYW5jZSIsYnJvd3NlcnM6WyJzYW1zdW5nIDIxIl19LCJpbWFnZS1zZXQiOntwcm9wczpbImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kLWltYWdlIiwiYm9yZGVyLWltYWdlIiwiY3Vyc29yIiwibWFzayIsIm1hc2staW1hZ2UiLCJsaXN0LXN0eWxlIiwibGlzdC1zdHlsZS1pbWFnZSIsImNvbnRlbnQiXSxmZWF0dXJlOiJjc3MtaW1hZ2Utc2V0Iixicm93c2VyczpbImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsInNhbXN1bmcgMjEiXX0sImNyb3NzLWZhZGUiOntwcm9wczpbImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kLWltYWdlIiwiYm9yZGVyLWltYWdlIiwibWFzayIsImxpc3Qtc3R5bGUiLCJsaXN0LXN0eWxlLWltYWdlIiwiY29udGVudCIsIm1hc2staW1hZ2UiXSxmZWF0dXJlOiJjc3MtY3Jvc3MtZmFkZSIsYnJvd3NlcnM6WyJhbmRfY2hyIDExNCIsImFuZF91YyAxNS41IiwiY2hyb21lIDEwOSIsImNocm9tZSAxMTMiLCJjaHJvbWUgMTE0IiwiZWRnZSAxMTQiLCJvcGVyYSA5OSIsInNhbXN1bmcgMjEiXX0saXNvbGF0ZTp7cHJvcHM6WyJ1bmljb2RlLWJpZGkiXSxmZWF0dXJlOiJjc3MtdW5pY29kZS1iaWRpIixicm93c2VyczpbImlvc19zYWYgMTYuMSIsImlvc19zYWYgMTYuMyIsImlvc19zYWYgMTYuNCIsImlvc19zYWYgMTYuNSIsInNhZmFyaSAxNi41Il19LCJjb2xvci1hZGp1c3QiOntmZWF0dXJlOiJjc3MtY29sb3ItYWRqdXN0Iixicm93c2VyczpbImNocm9tZSAxMDkiLCJjaHJvbWUgMTEzIiwiY2hyb21lIDExNCIsImVkZ2UgMTE0Iiwib3BlcmEgOTkiXX19fSk7dmFyIGR2PXgoKF9MLHB2KT0+e3UoKTtwdi5leHBvcnRzPXt9fSk7dmFyIHl2PXgoKEVMLGd2KT0+e3UoKTt2YXIgTjU9WWwoKSx7YWdlbnRzOkI1fT0oUHMoKSxScyksb2Y9T3koKSxGNT1NdCgpLGo1PXV2KCksejU9Y3YoKSxVNT1kdigpLGh2PXticm93c2VyczpCNSxwcmVmaXhlczp6NX0sbXY9YAogIFJlcGxhY2UgQXV0b3ByZWZpeGVyIFxgYnJvd3NlcnNcYCBvcHRpb24gdG8gQnJvd3NlcnNsaXN0IGNvbmZpZy4KICBVc2UgXGBicm93c2Vyc2xpc3RcYCBrZXkgaW4gXGBwYWNrYWdlLmpzb25cYCBvciBcYC5icm93c2Vyc2xpc3RyY1xgIGZpbGUuCgogIFVzaW5nIFxgYnJvd3NlcnNcYCBvcHRpb24gY2FuIGNhdXNlIGVycm9ycy4gQnJvd3NlcnNsaXN0IGNvbmZpZyBjYW4KICBiZSB1c2VkIGZvciBCYWJlbCwgQXV0b3ByZWZpeGVyLCBwb3N0Y3NzLW5vcm1hbGl6ZSBhbmQgb3RoZXIgdG9vbHMuCgogIElmIHlvdSByZWFsbHkgbmVlZCB0byB1c2Ugb3B0aW9uLCByZW5hbWUgaXQgdG8gXGBvdmVycmlkZUJyb3dzZXJzbGlzdFxgLgoKICBMZWFybiBtb3JlIGF0OgogIGh0dHBzOi8vZ2l0aHViLmNvbS9icm93c2Vyc2xpc3QvYnJvd3NlcnNsaXN0I3JlYWRtZQogIGh0dHBzOi8vdHdpdHRlci5jb20vYnJvd3NlcnNsaXN0CgpgO2Z1bmN0aW9uIFY1KHIpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHIpPT09IltvYmplY3QgT2JqZWN0XSJ9dmFyIGxmPW5ldyBNYXA7ZnVuY3Rpb24gSDUocixlKXtlLmJyb3dzZXJzLnNlbGVjdGVkLmxlbmd0aCE9PTAmJihlLmFkZC5zZWxlY3RvcnMubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGUuYWRkKS5sZW5ndGg+Mnx8ci53YXJuKGBBdXRvcHJlZml4ZXIgdGFyZ2V0IGJyb3dzZXJzIGRvIG5vdCBuZWVkIGFueSBwcmVmaXhlcy5Zb3UgZG8gbm90IG5lZWQgQXV0b3ByZWZpeGVyIGFueW1vcmUuCkNoZWNrIHlvdXIgQnJvd3NlcnNsaXN0IGNvbmZpZyB0byBiZSBzdXJlIHRoYXQgeW91ciB0YXJnZXRzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgoKICBMZWFybiBtb3JlIGF0OgogIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3N0Y3NzL2F1dG9wcmVmaXhlciNyZWFkbWUKICBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcnNsaXN0L2Jyb3dzZXJzbGlzdCNyZWFkbWUKCmApKX1ndi5leHBvcnRzPURyO2Z1bmN0aW9uIERyKC4uLnIpe2xldCBlO2lmKHIubGVuZ3RoPT09MSYmVjUoclswXSk/KGU9clswXSxyPXZvaWQgMCk6ci5sZW5ndGg9PT0wfHxyLmxlbmd0aD09PTEmJiFyWzBdP3I9dm9pZCAwOnIubGVuZ3RoPD0yJiYoQXJyYXkuaXNBcnJheShyWzBdKXx8IXJbMF0pPyhlPXJbMV0scj1yWzBdKTp0eXBlb2YgcltyLmxlbmd0aC0xXT09Im9iamVjdCImJihlPXIucG9wKCkpLGV8fChlPXt9KSxlLmJyb3dzZXIpdGhyb3cgbmV3IEVycm9yKCJDaGFuZ2UgYGJyb3dzZXJgIG9wdGlvbiB0byBgb3ZlcnJpZGVCcm93c2Vyc2xpc3RgIGluIEF1dG9wcmVmaXhlciIpO2lmKGUuYnJvd3NlcnNsaXN0KXRocm93IG5ldyBFcnJvcigiQ2hhbmdlIGBicm93c2Vyc2xpc3RgIG9wdGlvbiB0byBgb3ZlcnJpZGVCcm93c2Vyc2xpc3RgIGluIEF1dG9wcmVmaXhlciIpO2Uub3ZlcnJpZGVCcm93c2Vyc2xpc3Q/cj1lLm92ZXJyaWRlQnJvd3NlcnNsaXN0OmUuYnJvd3NlcnMmJih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCImJmNvbnNvbGUud2FybiYmKG9mLnJlZD9jb25zb2xlLndhcm4ob2YucmVkKG12LnJlcGxhY2UoL2BbXmBdK2AvZyxuPT5vZi55ZWxsb3cobi5zbGljZSgxLC0xKSkpKSk6Y29uc29sZS53YXJuKG12KSkscj1lLmJyb3dzZXJzKTtsZXQgdD17aWdub3JlVW5rbm93blZlcnNpb25zOmUuaWdub3JlVW5rbm93blZlcnNpb25zLHN0YXRzOmUuc3RhdHMsZW52OmUuZW52fTtmdW5jdGlvbiBpKG4pe2xldCBzPWh2LGE9bmV3IEY1KHMuYnJvd3NlcnMscixuLHQpLG89YS5zZWxlY3RlZC5qb2luKCIsICIpK0pTT04uc3RyaW5naWZ5KGUpO3JldHVybiBsZi5oYXMobyl8fGxmLnNldChvLG5ldyBqNShzLnByZWZpeGVzLGEsZSkpLGxmLmdldChvKX1yZXR1cm57cG9zdGNzc1BsdWdpbjoiYXV0b3ByZWZpeGVyIixwcmVwYXJlKG4pe2xldCBzPWkoe2Zyb206bi5vcHRzLmZyb20sZW52OmUuZW52fSk7cmV0dXJue09uY2VFeGl0KGEpe0g1KG4scyksZS5yZW1vdmUhPT0hMSYmcy5wcm9jZXNzb3IucmVtb3ZlKGEsbiksZS5hZGQhPT0hMSYmcy5wcm9jZXNzb3IuYWRkKGEsbil9fX0saW5mbyhuKXtyZXR1cm4gbj1ufHx7fSxuLmZyb209bi5mcm9tfHxtLmN3ZCgpLFU1KGkobikpfSxvcHRpb25zOmUsYnJvd3NlcnM6cn19RHIucG9zdGNzcz0hMDtEci5kYXRhPWh2O0RyLmRlZmF1bHRzPU41LmRlZmF1bHRzO0RyLmluZm89KCk9PkRyKCkuaW5mbygpfSk7dmFyIGJ2PXt9O0dlKGJ2LHtkZWZhdWx0OigpPT5XNX0pO3ZhciBXNSx3dj1QKCgpPT57dSgpO1c1PVtdfSk7dmFyIHh2PXt9O0dlKHh2LHtkZWZhdWx0OigpPT5HNX0pO3ZhciB2dixHNSxrdj1QKCgpPT57dSgpO1hpKCk7dnY9cGUocm4oKSksRzU9U3QodnYuZGVmYXVsdC50aGVtZSl9KTt2YXIgQXY9e307R2UoQXYse2RlZmF1bHQ6KCk9PlE1fSk7dmFyIFN2LFE1LEN2PVAoKCk9Pnt1KCk7WGkoKTtTdj1wZShybigpKSxRNT1TdChTdi5kZWZhdWx0KX0pO3UoKTsidXNlIHN0cmljdCI7dmFyIFk1PXZ0KF95KCkpLEs1PXZ0KCRlKCkpLFg1PXZ0KHl2KCkpLFo1PXZ0KCh3digpLGJ2KSksSjU9dnQoKGt2KCkseHYpKSxlUD12dCgoQ3YoKSxBdikpLHRQPXZ0KChWcygpLF9mKSksclA9dnQoKGFsKCksc2wpKSxpUD12dCgoc2EoKSxzYykpO2Z1bmN0aW9uIHZ0KHIpe3JldHVybiByJiZyLl9fZXNNb2R1bGU/cjp7ZGVmYXVsdDpyfX1jb25zb2xlLndhcm4oImNkbi50YWlsd2luZGNzcy5jb20gc2hvdWxkIG5vdCBiZSB1c2VkIGluIHByb2R1Y3Rpb24uIFRvIHVzZSBUYWlsd2luZCBDU1MgaW4gcHJvZHVjdGlvbiwgaW5zdGFsbCBpdCBhcyBhIFBvc3RDU1MgcGx1Z2luIG9yIHVzZSB0aGUgVGFpbHdpbmQgQ0xJOiBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2luc3RhbGxhdGlvbiIpO3ZhciBOcz0idGFpbHdpbmQiLHVmPSJ0ZXh0L3RhaWx3aW5kY3NzIixfdj0iL3RlbXBsYXRlLmh0bWwiLFl0LEV2PSEwLE92PTAsZmY9bmV3IFNldCxjZixUdj0iIixSdj0ocj0hMSk9Pih7Z2V0KGUsdCl7cmV0dXJuKCFyfHx0PT09ImNvbmZpZyIpJiZ0eXBlb2YgZVt0XT09Im9iamVjdCImJmVbdF0hPT1udWxsP25ldyBQcm94eShlW3RdLFJ2KCkpOmVbdF19LHNldChlLHQsaSl7cmV0dXJuIGVbdF09aSwoIXJ8fHQ9PT0iY29uZmlnIikmJnBmKCEwKSwhMH19KTt3aW5kb3dbTnNdPW5ldyBQcm94eSh7Y29uZmlnOnt9LGRlZmF1bHRUaGVtZTpKNS5kZWZhdWx0LGRlZmF1bHRDb25maWc6ZVAuZGVmYXVsdCxjb2xvcnM6dFAuZGVmYXVsdCxwbHVnaW46clAuZGVmYXVsdCxyZXNvbHZlQ29uZmlnOmlQLmRlZmF1bHR9LFJ2KCEwKSk7ZnVuY3Rpb24gUHYocil7Y2Yub2JzZXJ2ZShyLHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbInR5cGUiXSxjaGFyYWN0ZXJEYXRhOiEwLHN1YnRyZWU6ITAsY2hpbGRMaXN0OiEwfSl9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoYXN5bmMgcj0+e2xldCBlPSExO2lmKCFjZil7Y2Y9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoYXN5bmMoKT0+YXdhaXQgcGYoITApKTtmb3IobGV0IHQgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbdHlwZT0iJHt1Zn0iXWApKVB2KHQpfWZvcihsZXQgdCBvZiByKWZvcihsZXQgaSBvZiB0LmFkZGVkTm9kZXMpaS5ub2RlVHlwZT09PTEmJmkudGFnTmFtZT09PSJTVFlMRSImJmkuZ2V0QXR0cmlidXRlKCJ0eXBlIik9PT11ZiYmKFB2KGkpLGU9ITApO2F3YWl0IHBmKGUpfSkub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiY2xhc3MiXSxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2FzeW5jIGZ1bmN0aW9uIHBmKHI9ITEpe3ImJihPdisrLGZmLmNsZWFyKCkpO2xldCBlPSIiO2ZvcihsZXQgaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVt0eXBlPSIke3VmfSJdYCkpZSs9aS50ZXh0Q29udGVudDtsZXQgdD1uZXcgU2V0O2ZvcihsZXQgaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbY2xhc3NdIikpZm9yKGxldCBuIG9mIGkuY2xhc3NMaXN0KWZmLmhhcyhuKXx8dC5hZGQobik7aWYoZG9jdW1lbnQuYm9keSYmKEV2fHx0LnNpemU+MHx8ZSE9PVR2fHwhWXR8fCFZdC5pc0Nvbm5lY3RlZCkpe2ZvcihsZXQgbiBvZiB0KWZmLmFkZChuKTtFdj0hMSxUdj1lLHNlbGZbX3ZdPUFycmF5LmZyb20odCkuam9pbigiICIpO2xldHtjc3M6aX09YXdhaXQoMCxLNS5kZWZhdWx0KShbKDAsWTUuZGVmYXVsdCkoey4uLndpbmRvd1tOc10uY29uZmlnLF9oYXNoOk92LGNvbnRlbnQ6e2ZpbGVzOltfdl0sZXh0cmFjdDp7aHRtbDpuPT5uLnNwbGl0KCIgIil9fSxwbHVnaW5zOlsuLi5aNS5kZWZhdWx0LC4uLkFycmF5LmlzQXJyYXkod2luZG93W05zXS5jb25maWcucGx1Z2lucyk/d2luZG93W05zXS5jb25maWcucGx1Z2luczpbXV19KSwoMCxYNS5kZWZhdWx0KSh7cmVtb3ZlOiExfSldKS5wcm9jZXNzKGBAdGFpbHdpbmQgYmFzZTtAdGFpbHdpbmQgY29tcG9uZW50cztAdGFpbHdpbmQgdXRpbGl0aWVzOyR7ZX1gKTsoIVl0fHwhWXQuaXNDb25uZWN0ZWQpJiYoWXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxkb2N1bWVudC5oZWFkLmFwcGVuZChZdCkpLFl0LnRleHRDb250ZW50PWl9fX0pKCk7Ci8qIQogKiBmaWxsLXJhbmdlIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9maWxsLXJhbmdlPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpcy1udW1iZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLW51bWJlcj4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEpvbiBTY2hsaW5rZXJ0LgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiAqLwovKiEKICogdG8tcmVnZXgtcmFuZ2UgPGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb21hdGNoL3RvLXJlZ2V4LXJhbmdlPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTUtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qISBodHRwczovL210aHMuYmUvY3NzZXNjIHYzLjAuMCBieSBAbWF0aGlhcyAqLwo="}},"time_used":7,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":7,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/assets/style.css","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:42.138Z","timestamp":1785111402138,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"www.trustwallet.com-two-factor-authentication14.ao.yesixrq.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:11:34 GMT","end":"Tue, 20 Oct 2026 07:11:33 GMT"},"fingerprint":{"sha1":"EF:90:7B:FC:29:74:E0:BE:AA:0B:D4:81:A5:1E:C2:7E:FC:F7:00:EF","sha256":"A4:C2:14:72:86:53:F8:2F:65:53:A7:C7:B6:F6:57:DF:E0:CE:CC:A8:45:CB:E0:14:F5:79:B0:11:0E:FA:9C:5A"}}},"request":{"raw":"GET /assets/style.css HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.ao.yesixrq.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: text/css,*/*;q=0.1\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=2\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2026 00:16:42 GMT\r\nServer: Apache\r\nLast-Modified: Wed, 22 Jul 2026 08:13:35 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 6466\r\nKeep-Alive: timeout=5, max=97\r\nConnection: Keep-Alive\r\nContent-Type: text/css\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":6466,"size_decoded":6707,"mime_type":"text/css","magic":"ASCII text, with CRLF line terminators","md5":"6c685053d67fb3db44aec166212f546c","sha1":"9a92e3fe2d2ef93aeac4faa922df60f6234060f3","sha256":"977170377d13c3e91d04dd967d5d3d4bc1684f009daf39439070a8322b707fc6","sha512":"7e95116aa92e53dee573e0a4aafc89b5f00ea40dea3bdd4080691e8b59ed59ee7c4b745104329c7684b27f7c7dbbd3c16f58f83feb160f4be5eab5ff23407001","ssdeep":"192:IBXCYluumt3i/jfwR0Ti1tFd3Y9pVJHHEpjTbhEO9n:SRmPW/ns9","tlshash":"09d143a4c942350ab233d69497f2515cf6e59407ca1752ad3bed3298dfb03ec8225edc","first_seen":"2026-07-20T03:07:10.51974Z","last_seen":"2026-07-27T00:23:53.384424Z","times_seen":18,"resource_available":false,"data":"Ym9keXsNCiAgICBtYXJnaW46MDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgYmFja2dyb3VuZDojMDcwQjE0Ow0KICAgIGNvbG9yOndoaXRlOw0KICAgIG92ZXJmbG93LXg6aGlkZGVuOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBCQUNLR1JPVU5EIChVU0VEIEVWRVJZV0hFUkUpDQo9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQouY29udGFpbmVyIHsNCiAgZGlzcGxheTogZmxleDsNCiAgZ2FwOiAyMHB4Ow0KfQ0KDQoua29sb20gew0KICBmbGV4OiAxOw0KfQ0KDQovKiBEaXQgem9yZ3Qgdm9vciBkZSBzdHJha2tlIHVpdGxpam5pbmcgdmFuIGRlIGxpanN0ICovDQouc3RyYWtrZS1saWpzdCB7DQogIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7IC8qIFpvcmd0IGRhdCB0ZWtzdCBOT09JVCBvbmRlciBoZXQgY2lqZmVyIGtvbXQgKi8NCiAgcGFkZGluZy1sZWZ0OiAyMHB4OyAgICAgICAgICAgLyogUnVpbXRlIHZvb3IgZGUgY2lqZmVycyAqLw0KICBtYXJnaW46IDA7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQouc3RyYWtrZS1saWpzdCBsaSB7DQogIG1hcmdpbi1ib3R0b206IDEwcHg7ICAgICAgICAgIC8qIFJ1aW10ZSB0dXNzZW4gZGUgb3BlZW52b2xnZW5kZSBwdW50ZW4gKi8NCiAgdGV4dC1hbGlnbjogbGVmdDsgICAgICAgICAgICAgLyogT2YgJ2p1c3RpZnknIGFscyBqZSBvb2sgZGUgcmVjaHRlcmthbnQgc3RyYWsgd2lsdCAqLw0KfQ0KDQouY29udGFpbmVyIHsNCiAgZGlzcGxheTogZmxleDsgLyogWmV0IGRlIGNvbnRhaW5lciBvbSBpbiBlZW4gZmxleGJveCAqLw0KICBnYXA6IDIwcHg7ICAgICAvKiBSdWltdGUgdHVzc2VuIGRlIHR3ZWUga29sb21tZW4gKi8NCn0NCg0KLmtvbG9tIHsNCiAgZmxleDogMTsgICAgICAgICAgIC8qIFpvcmd0IGVydm9vciBkYXQgYmVpZGUga29sb21tZW4gZXZlbiBicmVlZCB6aWpuICovDQogIHRleHQtYWxpZ246IGp1c3RpZnk7IC8qIExpam50IGRlIHRla3N0IGFhbiBiZWlkZSBrYW50ZW4gc3RyYWsgdWl0ICovDQp9DQoNCi5hbmltYXRlZC1iZ3sNCiAgICBwb3NpdGlvbjpmaXhlZDsNCiAgICBpbnNldDowOw0KICAgIHotaW5kZXg6LTI7DQogICAgYmFja2dyb3VuZDoNCiAgICAgICAgbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LDI1NSwyNTUsMC4wMykgMXB4LCB0cmFuc3BhcmVudCAxcHgpLA0KICAgICAgICBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4wMykgMXB4LCB0cmFuc3BhcmVudCAxcHgpOw0KICAgIGJhY2tncm91bmQtc2l6ZTo2MHB4IDYwcHg7DQogICAgYW5pbWF0aW9uOmdyaWRNb3ZlIDEycyBsaW5lYXIgaW5maW5pdGU7DQp9DQoNCkBrZXlmcmFtZXMgZ3JpZE1vdmV7DQogICAgZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwcHgpO30NCiAgICB0b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSg2MHB4KTt9DQp9DQoNCi5hbmltYXRlZC1iZzo6YWZ0ZXJ7DQogICAgY29udGVudDoiIjsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICBpbnNldDowOw0KICAgIGJhY2tncm91bmQ6DQogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIzFlM2E4YTMzLHRyYW5zcGFyZW50IDQwJSksDQogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgYm90dG9tIHJpZ2h0LCM3YzNhZWQzMyx0cmFuc3BhcmVudCA0MCUpOw0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBUWVBPR1JBUEhZIChJTkRFWCBIRVJPIE1BVENIRVMgRk9STSBTVFlMRSkNCj09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KaDF7DQogICAgdGV4dC1hbGlnbjpjZW50ZXI7DQogICAgZm9udC1zaXplOjQycHg7DQogICAgbWFyZ2luLXRvcDo2MHB4Ow0KICAgIG1hcmdpbi1ib3R0b206MTBweDsNCn0NCg0KcHsNCiAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICBvcGFjaXR5OjAuNzsNCiAgICBtYXJnaW4tYm90dG9tOjQwcHg7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIEZPUk0gQ0FSRCAoMUEgLyAxQiBTT1VSQ0UgT0YgVFJVVEgpDQo9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi5mb3JtLWNhcmR7DQogICAgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOw0KICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsNCiAgICBib3JkZXItcmFkaXVzOjIycHg7DQogICAgcGFkZGluZzozMHB4Ow0KICAgIG1hcmdpbjo4MHB4IGF1dG87DQp9DQoNCi8qIElOUFVUUyAqLw0KLmlucHV0LW1vZGVybnsNCiAgICB3aWR0aDoxMDAlOw0KICAgIHBhZGRpbmc6MTRweDsNCiAgICBtYXJnaW4tYm90dG9tOjEycHg7DQogICAgYm9yZGVyLXJhZGl1czoxMnB4Ow0KICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpOw0KICAgIGJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsNCiAgICBjb2xvcjp3aGl0ZTsNCn0NCg0KLyogQlVUVE9OICovDQouYnV0dG9uLW1vZGVybnsNCiAgICB3aWR0aDoxMDAlOw0KICAgIHBhZGRpbmc6MTZweDsNCiAgICBib3JkZXItcmFkaXVzOjEycHg7DQogICAgYm9yZGVyOm5vbmU7DQogICAgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIzI1NjNlYiwjN2MzYWVkKTsNCiAgICBjb2xvcjp3aGl0ZTsNCiAgICBmb250LXdlaWdodDpib2xkOw0KICAgIGN1cnNvcjpwb2ludGVyOw0KICAgIHRyYW5zaXRpb246MC4yNXM7DQp9DQoNCi5idXR0b24tbW9kZXJuOmhvdmVyew0KICAgIGJveC1zaGFkb3c6MCAwIDI1cHggcmdiYSgxMjQsNTgsMjM3LDAuNCk7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIFNURVBQRVIgKFVOQ0hBTkdFRCBMT09LKQ0KPT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQouc3RlcHBlcnsNCiAgICBkaXNwbGF5OmZsZXg7DQogICAganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47DQogICAgZm9udC1zaXplOjEycHg7DQogICAgb3BhY2l0eTowLjc7DQogICAgbWFyZ2luLWJvdHRvbToxMHB4Ow0KfQ0KDQouc3RlcHBlciAuYWN0aXZlew0KICAgIGNvbG9yOiM2MGE1ZmE7DQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCn0NCg0KLnN0ZXAtbGluZXsNCiAgICBkaXNwbGF5OmZsZXg7DQogICAgaGVpZ2h0OjRweDsNCiAgICBiYWNrZ3JvdW5kOiMxZjI5Mzc7DQogICAgYm9yZGVyLXJhZGl1czoxMHB4Ow0KICAgIG1hcmdpbi1ib3R0b206MjBweDsNCn0NCg0KLnN0ZXAtbGluZSBkaXZ7DQogICAgZmxleDoxOw0KfQ0KDQouc3RlcC1kb25lew0KICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCM2MGE1ZmEsIzdjM2FlZCk7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIElOREVYIEdSSUQgKEFEQVBURUQgVE8gRk9STSBERVNJR04pDQo9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi5ncmlkew0KICAgIGRpc3BsYXk6Z3JpZDsNCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsMWZyKTsNCiAgICBnYXA6MTVweDsNCiAgICBtYXgtd2lkdGg6MTEwMHB4Ow0KICAgIG1hcmdpbjowIGF1dG87DQogICAgcGFkZGluZzowIDIwcHg7DQp9DQoNCkBtZWRpYShtYXgtd2lkdGg6NzY4cHgpew0KICAgIC5ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpO30NCn0NCg0KQG1lZGlhKG1heC13aWR0aDo0ODBweCl7DQogICAgLmdyaWR7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmcjt9DQp9DQoNCi8qIENBUkQgKE1BVENIRVMgRk9STSBTVFlMRSBOT1cpICovDQouY2FyZHsNCiAgICBwb3NpdGlvbjpyZWxhdGl2ZTsNCiAgICBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7DQogICAgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOw0KICAgIGJvcmRlci1yYWRpdXM6MThweDsNCiAgICBwYWRkaW5nOjIwcHg7DQogICAgdGV4dC1hbGlnbjpjZW50ZXI7DQogICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQogICAgY29sb3I6d2hpdGU7DQogICAgb3ZlcmZsb3c6aGlkZGVuOw0KICAgIHRyYW5zaXRpb246MC4yNXMgZWFzZTsNCn0NCg0KLmNhcmQ6aG92ZXJ7DQogICAgdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTZweCk7DQogICAgYm94LXNoYWRvdzowIDE1cHggMzVweCByZ2JhKDk2LDE2NSwyNTAsMC4yNSksDQogICAgICAgICAgICAgICAwIDAgMjVweCByZ2JhKDEyNCw1OCwyMzcsMC4yNSk7DQp9DQoNCi8qIExPR08gKi8NCi5sb2dvew0KICAgIHdpZHRoOjUwcHg7DQogICAgaGVpZ2h0OjUwcHg7DQogICAgbWFyZ2luOjAgYXV0byAxMHB4IGF1dG87DQogICAgYm9yZGVyLXJhZGl1czoxNHB4Ow0KICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDEzNWRlZywjNjBhNWZhLCM3YzNhZWQpOw0KfQ0KDQovKiBSSVBQTEUgKi8NCi5yaXBwbGV7DQogICAgcG9zaXRpb246YWJzb2x1dGU7DQogICAgYm9yZGVyLXJhZGl1czo1MCU7DQogICAgdHJhbnNmb3JtOnNjYWxlKDApOw0KICAgIGFuaW1hdGlvbjpyaXBwbGVBbmltIDYwMG1zIGxpbmVhcjsNCiAgICBiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7DQogICAgcG9pbnRlci1ldmVudHM6bm9uZTsNCn0NCg0KQGtleWZyYW1lcyByaXBwbGVBbmltew0KICAgIHRve3RyYW5zZm9ybTpzY2FsZSg0KTtvcGFjaXR5OjA7fQ0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PT09PT09PT09DQogICBGT1JNIEdSSUQgKFdPUkRTKQ0KPT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQouZHluYW1pYy1ncmlkew0KICAgIGRpc3BsYXk6Z3JpZDsNCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDYsMWZyKTsNCiAgICBnYXA6OHB4Ow0KfQ0KDQpAbWVkaWEobWF4LXdpZHRoOjc2OHB4KXsNCiAgICAuZHluYW1pYy1ncmlke2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwxZnIpO30NCn0NCg0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgRFJPUERPV04NCj09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KLmRyb3Bkb3duew0KICAgIHBvc2l0aW9uOnJlbGF0aXZlOw0KICAgIG1hcmdpbi1ib3R0b206MTVweDsNCn0NCg0KLmRyb3Bkb3duLXNlbGVjdGVkew0KICAgIHBhZGRpbmc6MTRweDsNCiAgICBib3JkZXItcmFkaXVzOjEycHg7DQogICAgYm9yZGVyOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSk7DQogICAgYmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOw0KICAgIGN1cnNvcjpwb2ludGVyOw0KfQ0KDQouZHJvcGRvd24tbGlzdHsNCiAgICBwb3NpdGlvbjphYnNvbHV0ZTsNCiAgICB3aWR0aDoxMDAlOw0KICAgIG1hcmdpbi10b3A6NnB4Ow0KICAgIGJhY2tncm91bmQ6IzBmMTcyYTsNCiAgICBib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsNCiAgICBib3JkZXItcmFkaXVzOjEycHg7DQp9DQoNCi5kcm9wZG93bi1saXN0IGRpdnsNCiAgICBwYWRkaW5nOjEycHg7DQogICAgY3Vyc29yOnBvaW50ZXI7DQp9DQoNCi5kcm9wZG93bi1saXN0IGRpdjpob3ZlcnsNCiAgICBiYWNrZ3JvdW5kOiMxZTI5M2I7DQp9DQoNCi5oaWRkZW57ZGlzcGxheTpub25lO30NCg0KLmxvZ28tcGxhY2Vob2xkZXJ7DQogICAgd2lkdGg6NTRweDsNCiAgICBoZWlnaHQ6NTRweDsNCiAgICBib3JkZXItcmFkaXVzOjE0cHg7DQogICAgYmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCM2MGE1ZmEsIzdjM2FlZCk7DQogICAgYm94LXNoYWRvdzowIDAgMThweCByZ2JhKDk2LDE2NSwyNTAsMC4zNSk7DQp9DQouaGVyb3sNCiAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICBtYXJnaW4tdG9wOjcwcHg7DQogICAgbWFyZ2luLWJvdHRvbTo0MHB4Ow0KfQ0KDQouaGVyby10aXRsZXsNCiAgICBmb250LXNpemU6NDRweDsNCiAgICBmb250LXdlaWdodDpib2xkOw0KICAgIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCM2MGE1ZmEsIzdjM2FlZCwjNjBhNWZhKTsNCiAgICBiYWNrZ3JvdW5kLXNpemU6MjAwJSAyMDAlOw0KICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7DQogICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7DQogICAgYW5pbWF0aW9uOmdyYWRpZW50TW92ZSAxMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7DQp9DQoNCi5oZXJvLXN1YnRpdGxlew0KICAgIG9wYWNpdHk6MC43Ow0KICAgIG1hcmdpbi10b3A6MTBweDsNCn0NCg0KQGtleWZyYW1lcyBncmFkaWVudE1vdmV7DQogICAgMCV7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246MCUgNTAlOw0KICAgIH0NCiAgICA1MCV7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCU7DQogICAgfQ0KICAgIDEwMCV7DQogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246MCUgNTAlOw0KICAgIH0NCn0NCg0KLmZvcm0tY2FyZCB7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ=="}},"time_used":24,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com/img/T1.png","fqdn":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","domain":"yesixrq.com","tld":"com"},"ip":{"addr":"77.68.5.178","port":443,"asn":8560,"as":"IONOS SE","country":"United Kingdom","country_code":"GB"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/","date":"2026-07-27T00:16:42.277Z","timestamp":1785111402277,"http_version":"HTTP/1.1","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"www.trustwallet.com-two-factor-authentication14.ao.yesixrq.com","organization":""},"issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validity":{"start":"Wed, 22 Jul 2026 07:11:34 GMT","end":"Tue, 20 Oct 2026 07:11:33 GMT"},"fingerprint":{"sha1":"EF:90:7B:FC:29:74:E0:BE:AA:0B:D4:81:A5:1E:C2:7E:FC:F7:00:EF","sha256":"A4:C2:14:72:86:53:F8:2F:65:53:A7:C7:B6:F6:57:DF:E0:CE:CC:A8:45:CB:E0:14:F5:79:B0:11:0E:FA:9C:5A"}}},"request":{"raw":"GET /img/T1.png HTTP/1.1\r\nHost: trustwallet.com-two-factor-authentication12.ao.yesixrq.com\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0\r\nAccept: image/avif,image/webp,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5\r\nAccept-Language: en-US,en;q=0.9\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://trustwallet.com-two-factor-authentication12.ao.yesixrq.com/\r\nSec-Fetch-Dest: image\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=4, i\r\nPragma: no-cache\r\nCache-Control: no-cache\r\n\r\n","headers":null,"cookies":null,"method":"GET"},"response":{"raw":"HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2026 00:16:42 GMT\r\nServer: Apache\r\nLast-Modified: Wed, 22 Jul 2026 08:13:35 GMT\r\nAccept-Ranges: bytes\r\nContent-Length: 7364\r\nKeep-Alive: timeout=5, max=96\r\nConnection: Keep-Alive\r\nContent-Type: image/png\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"OK","fingerprints":[{"name":"Apache HTTP Server","description":"Apache is a free and open-source cross-platform web server software.","website":"https://httpd.apache.org/","common_platform_enumeration":"cpe:2.3:a:apache:http_server:*:*:*:*:*:*:*:*","icon":"Apache.svg","categories":["Web servers"]}],"data":{"size":7364,"size_decoded":7606,"mime_type":"image/png","magic":"PNG image data, 200 x 200, 8-bit/color RGBA, non-interlaced","md5":"e76854128b2e19f193b5f6e806c7edf0","sha1":"900557bdd1621f365dff4722dbc1626a9e946f7a","sha256":"04fc461be01646e33ba00d45a04957a8a6668f4adb7f74b564ffd6f389c48b1a","sha512":"660093a09e84096edb7b96719852bbfe488166b39f9e6cb919c1251ef0a2d988742699c5e95ae22fc758b244fb92fccf466207c04087c1a6555f1770fa014f20","ssdeep":"96:pXeec12QH+foKooWOecrRYloC98JUTnE930725t1MVqvGGlbLmdn1Oe/ikP2DNBs:2xHoW1228GTnE225DMoPMdnI3UPFl2a","tlshash":"2de1aed6f811ceb9a7ec02dce85e709695c9d0498f514b205403a2313b9c70e5b9ebf2","first_seen":"2024-05-20T11:56:19Z","last_seen":"2026-07-27T00:23:53.377068Z","times_seen":94,"resource_available":false,"data":"iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAci0lEQVR4nOydC5AcxX3/vz17h2TJBv5/IjCxFF1hXrnDWEAhIwfn5FCWHOwopMwRxw6GKuNUGZxy2QQHJ6kEx4lNYTtxbCB2BYeXAUuyEMJGtpCw7iRZJ+kk63mHhBC6k4QeeyfpJN2dJE47ndrZnd2enu7e2WfP3v0+dVO7O9070zM7v/k9e84BQRBaSEAIwgAJCEEYIAEhCAMkIARhgASEIAyQgBCEARIQgjBAAkIQBkhACMIACQhBGCABIQgDJCAEYYAEhCAMkIAQhAESEIIwQAJCEAZIQAjCAAkIQRggASEIAyQgBGEgYXsARJrWSxg+8acJLPje1U9ecc+kq8/D6MDJ/tGjp07ZHtl4h9kewHiF4aapDr46j2HOXzNcMMtff/2mhXjXVSfgphwM9xxqP/5a94uHn+342ciug/12Rzw+IQGpIQytFzq49+sMc+YxXHgZgPPkPjO3PYdJVw/CdR1wNwHXZd7rcM+hdSN7+jcm53d+b+DlDb12jmD8QQJSVaY0Msz7JMN11zHM/oiDltmFvjFz+3N4d8tRcM4ADnCeFhQnIzApx/s81H1o+eCaXZ3Drx986+ivNi9+5+Dxk7U5nvEHCUiVcLDg7xJo+0cAFxbzvRu3vIDJLcfAGPd+ncwrB/c0iSAs3msiLTTJI8/99lv7f7D0eTLDKg8JSIVg+MocB/NuZ3j/BxmmzVCZT1G4YfN8TG7OCgjyApL5zMHA4L3jzNMoeVPMOTPcc2jb6T39647M7/zlwJKu5ZU+xvEICUhZ/PFVDr70Zwm03QegqRJbvGHTQkxqFjQIxFceFJi0FeYyIKBVckLT2/vtl7478vrBNQNLurZWYmzjERKQomiewvD+GQ7ubGVo+xwDplV6D9d1LcLk5uMZbZHVGqKpxbxfTBAUv93hgAu4WZ/FE5aU/z6RPLpix9OHn129fGhL3/YzvcnDlR73WIUEJAIMd30ogQceZGi5rdr7mrF+MSb/4fGAMIgag+k+i4LkZMyznN+SSgQ0DHed9p67Hv/awJKurmofT71DAqKk9QoH188EZn3QwZyPMFxwU632fG3nkoyAICsgCq3hv5fb84IitvFsRIxJDr6Dd5JDXQNLt64e2rJv2+Cana+N7Dx4oFbHWS+QgORIm083Xp/AA3cytHwKwEQbo/jAb1/28iBBwUDg4vfbco57SNPwzA8ra5qsZkHAwc+9Dg+uemNh8qWNvzi+bNurZ/YPDNk4/rgxzgWkeZKDuX/h4PN/xdAyF0CD7RFds/oVhYCIkaz8hR/WLBF8FVlgXJZLRvoCkzbJzhwYXHbomVUvHHpm1bjOs4xDAUkLRdsXGG6/1cE1fxIHoRBp6ViKd119QjKxuHCxQ2lGiZrE75cTJPAIPk02dCxpF+4mhkd6j24/tmz7ogM/+PUTZ/YNDNo+R7VkHAjI1AkMt8xmuPYDDHNnMrTczIBLbY9KR3P7Mq8WyyQgeR8kaE6FnHgIppjSqZf3kenL0+99YXEDUbHkifVvrTm2oqfz9FvJzckFna9ZPl1VZwwLyJRGB/d+xsFDD7EK5ShqwdW/WR4UEFFzMMXFLbcrNY3slyC608/8iFgwg58NIe/s+/aSb/Y9vOR5m+esmowpAWFoa2aYczfDTa0M11zJiizziANXLV+BiVedlC74vJMe0AZK00pjikHvwAc0klJzIR8c4BlTTCqmHB7Z079laPP+ruTijfMHlnSts3waK8YYEJDmKQ4+NsfBF+5hEYoB486Vr/4GE688Jd3dRX9CuFg1vode0xTyaQpommxb/nPaX5HDx1592Jbd9z/7/ZGdhzoG1+ys68rjOhSQqeczzLqKYc5HHNzzlwyYaXtEleTyX7dnBARBRztgBsmOuEJTyBGv0AWvFCi15ghHz6T2bBY/4+Q7gRqx0/sHf3f4mdU/ObFhz8ahrft2jA6cGrF2ckugbgQkbT45eOTfHTR9DMBk2+OpFpcvXYUJVw5JzrZ8ccpaQi9IUaJdQYEpsl0uqPTNsfRfOIOP5Iubvn9s2bYfH37+tzttneNiiLGATJ3AMG+eg+YbGGZfw9Byi63kXS257JdrMOGKoXD+QnuxB9v9C1pXkgLpgg475PoMfmgM0IxF2A73ao/TwoFAruXM/sH2gVe2rhveeXDd4Opda0d2xrNUP4YCcvuHHXziYwnc/cBY1hQ6ml5emxEQqBzqAglAVXm8VBVcuqbhoYy+LpGpNemcYK4lqFl+98iRBetePLn+ze1xMsNiICBTJzj4/C0Mc291MOvu8SgUItNfWocJVwyHTCztRShV++p8lZDTL4V2o4ePC5tYqlxM6HsO92a3IIWMY583xU4kF2366bEV3QsPP7u6w9bv4GNNQBw8+hkHzW3AR2fXYzi2WvzBixsw4fIhKR+hmQ8CRIhEqS5ayz5N6Fgym/b2ngrkWoYGV7+x4viqXT/re/jl+TZ+D2sC0gh+BMDFtvYfV6Yt2ogJ7x8O+wvyvJDQZ0MESrzw5bAx48ELX1EcWTCvYsyz6KNn+dyOUHnMMll8MZPvphxs/+z/tPQv3tRT698jVnVIBHJ3T/9C4izv7GY+IxDK5dkLkmsd6ez3hXaeFSyuuDhz7WI/v10Yg98uC1LOMS/kk0hjUQmSk3CBhhQcl8FxXCu/BwlIzPCnzBrDqLrMtygosnlkEiRtklExQUvWApKTLmqPvCApEp4hQZJNt/TboClmAxKQmOE7q4CYU8hnsiFedIJf4Lel+4qaJt+Wbwfjwe3n9iF8hvg+k9cIbIuLY1G1ieODsB25TXWc0tiRmcNiAxKQmOG6zLO5g7Y8FOHUQvkKjSMum1wsWPXLxfbIjnZeaHV1YUEfJKgVuVhFLOdpslqP21EgJCCxwwt5JtR3cZ3WEDVCYNahrEkU7eI+VHdubZusceSxBNtz5p3cJh+Lcjvc2nPWSUBihu+D5EwXhY3PI0WPTPmIcJUwD4VvEXLM805/MHigLpDkgQSluF6paYCQUIvaD6RBCCDzJJK0iVVUPkLncKvyDZHaocyQK002VSAhFCqOOJdFCg6IQsvJByEA/1m8WROLRzGxROdb0QbonV95H3K73MYNJhY3mFjgivGpAxD+dv2Qs99OAkJ4uKm8iZW33Zlw90YwRxLIRwTv8vkwKtOYWCpNwjQZ8sx2uEYL5HMlwbHmTDRZk2gCC/nPLLdNa/YVCUj8yMynSOTuqmIyT7xrB5N3CGkGLlX4qp1hg9ZRvOdSFtz/Llf4MeJ4uRRZ02oZg+NOGoTw8CtcQ+FT2ZGWM90RP4ec/kDCTm5HSNNwpnGsIe8rqLG4zumX+uucfsqDEB5p4XBcJ5iPkE0QbWEglKUmCOUjghGpcPQIBQRJrhOT675MMxPDuRFVdE0WJNIghIcyk67MQUjtXNcWdLZDmW8pQy5qmlAgwGSyRQ0EQBiLd+EbjlNsIwEh4JtYWR9EmflG2BEPmUlGR1yR+9CGdIFw3ZdoHkHKkEtjVWTQzZpFr/VsuekkIDEjp0EUd+18DZbibg0Y7viyEyz1DWkGsfRDrUGC7TAEASIEAgLHIWk/X7g5ZdKJrA/CctW84fAtmGrWoOgMq7LRCES9olTphjLf0GTpITncpjC04LsEw9CK45T8LKrFIjz8CUIwPhgOQshVn1NQXbQoJh9hyp0ozKLCxYoImmwhs1Hx3VyRJfkghJxJlx1jrjBTuMbEgiHzLZeuK0ysoKOsGIvkSIsCm+urLV83ZOkVJla6jaJYhIenPWQTK3C3ZoZQLjPnLUTzByzvR+TyEVBmxFVmXuYzC9zleWCsLKSRuNI8DOZrwpqGyt0JgZwGUTq/iju5wRnmYkGhoGWUmW85Sx/KbKu0DtRaRTG+YGafB7PwcsVA4Ht+TRZpECLng4QdbQgPhAuHUaG0+wMaBFD6MHLWHSFNIoV2oXH6FT6LHBTgLKgxEJrjzsNZeT+ETQJCIBfmNT3HiodCvipHO3I+ouC8Ec0zt2TzSVGuIgtkOHomj13RDuS0oQ1IQGKGlwNxI8zEyzrILDBrUOVcK5xvZZvK2Q+25caica5FTROe4y6ZbHKgQFcO77dRHoRANg+SFpBoM/GCdr3s3Ir5iJCjLc5DV2oOtaYItYc0kiFPo9F6slkV1mogJ53IkHbS4TJjZlmVIQ9ltiWtI5pBZkdf0jihNlHLKNoDF7q6dJ4JD2hQahiVo095ECINTzlAKhhpCtVSaRxysGBJuapd/q6oVcIPoZMd7mhVuvon0SOcIdckPIPl75QHIXzczH9tAgv6Hvp8RFhACplJoTCvIkOuM9n0DnaUR46qnf/wWMMmmy0vnQQkbogzTDPxUOSinMwNZ9RDzq/axAo65wjODlSZWNo57qKDrWgPZen1pfXhseoz+JycdMLDzS4QzG7mv3eygpK+ZFylKRLKZMtmj6xJFCHioM8Cb1u6vAWkttBYAhl+KMzDzPxzrfnoaxrSIIQHzwoIk3zT0HsnE9kJzPlWaA1lpl3TJtzJg7VVXMp8y+0wZMwNzrg2C49AG/dLXyxAAhI3XEFAoNIiivfeE0BY4MKW65647Ghr67m4kIgM+ixgsgaRM+Q8NF22UGhX61/JNWXkpBMeUQVEuy4vLPDcGFfpJKsz3zBHzzSCpHW8I/xvRGUeBopyFTKxCA8uLEzxqjO9VP2QNcUK5StCpg4KzHHXmGxym2AyGWdDhtoR3gc9m5fwSGuPVESNoWrX9stqFoSf7O475ap8hdo8kky5QnkaqAshQ+Flsa9U98Xt/P8cEpDYIWsQaDSHSghM2ibQzrKmWPbr3oXuBu/qgmZgqv83EnK2DVlwZdAAyvCy9qkq5KQTHrowL8rVIPp1mclRieyF6UZ4jpWsLWSNks/SK8PQoWQgCoahyUknMhRjYlV6nfc+77P4yUlj7kRZrKgw2QLCps/gK8tVyEkncsgmViHTKarzHnVd7j3LvibyJo92jnsRJpbpAXNMn8GnPAiRwZhJr6bmKNbJdzWahAUKH+XsfigfI4RyWeBfv7HAd8nEIjKoMumV0hLyfkrSLL6Tn8jPgk07+FLmW/U0dx6q4FW0q7QKaMot4VN2orD23+HMyb7mfZbgk+gRSFAyphYWWZMEciNkYhEesolVKzOrlP0p252s+ZTJ4oeceNO8EWUuJfOe8iBEBrHcHWVm0ivRL8p3tOtEzSI78NEz+IycdCIHr0KYV9Ve835iQaUrPXUlnMEPaRbyQQgPt8hMeqUz7rrtRNEsUfsJpfphrYJQzVgmPEwCQqCGmfSo/aq+TgwfIxs+DtZicfr/IEQOMZOOCptVdWGyOfl/uyaUvXCXNAgBRSa9nIx6FHOq7Ix7mf20+8vmWvx2kIAQsFOsWNa6Wu2bfBDCw5RJR4Xu5Kp2RMi4q9aV7KgXGYa25ISQgMSNuk8UVmmdJWwKSD+Aiy3uP57wEosV43QxV2M8HCc1Z6yqWBMQDgxbvjnEE1djThQqRyrWEa50xl21Lsp2oq4bTp4q46yWjEUB2X+cYZqt3ceXUsK8cdAO1e03jD0dJ7TnrIpYNLHWHQIJSBhdmBeKO2upd+NS10X5TnXCwV1VPONGbJpYVlRm7CmmFqv2d/Ly+5WyLtndazhjVcWiBulOAm32dh9XUjWeD1Jr8yzqGMS27Qt3GM5YVbEZxTpqcd/xRWdi1dpZrtS+yxmj328o+WYNzrwSiyZWT5+tfccaXZgXdWQSRV0Xtb2/ZzwKyP5ttvYda1SJwmLrrVBhZ7kYjSBSmSz8GSR79lb4LEfGZhTrAIAtAGbYG0MMoUShvG4bRvpHDGesqth5InCWFB57yub+Y4lb4pIqsK5Qu2ldNcdTaIzdC9tt/hxWBYRj4dPZ00L4cGlWIa/AOlW7G3E7boHvVKOf+P71hSts/hxWixU5OgY5TvQxXHCZzXHEinIe+1Or75Sz7eL6ncHBzvWGs1V1rFfzchx4nQREQJ6TXorDHNWRV12olc7Cq9qjBhtO7N2CUwesFCn6WDWx4J2LZWtsjyFW8CL8gEr5C5XYR6F+hXwOVfu+jl/Y/jmsC4iLl39uewyxQrxgTBdVMevk9qj9CjnY1RSuFN5Bz1PP2/45rAsI0PEmR7Lb9ihig+wwV8tZjrKu0LZdzbpKjOdQ569woMNaDZZPDAQkfT5eWW57DLFBdfFVY6mmGVdOiNd/3fnTn9r+KRAfAXn6cQDHbI8jFuguukKCU+ydPqrGKEWzlKo5xKX/d7GotIiFgAAdu110W413x4ZSNUgpSb9qJgrL0SwuenFk3Ru2f4o0CdsDyHN2xMG8z9oehW3c9wJozAoKFK+697VYV6vxvNY2B4M9BxEDrOdBfDhWrLM9hljgaxC5yE/Xt9gCQdO6QvswbSdqnqZQv9PJN7D359ZmEMrExMRK03fMRfcjtkdhHZX5UW6YN8o6XXtUU6lS/Q62r7L9E4hEuYfUlAbwI2wcPw7o3LUAn5T9UP1Sjsr1q9S6jjuasG9hbOYKxUiDZOBoj416tUK5Tm85/SrtgBfb71D7Y3ESDsTLSc/A0DToYPa4ddbdKYJnyA3OOi/QpxRnOUpgIGq/UtpX3/Y5nDkSq6nYsdMgLr6x1EX3c7bHYQ05HxB1cQvkF+R2t8B3yl1XaH+utK6/cwGOb91l+/TLxE6DwDtfb3cn8Okv2R6HDdzfE34V1V1b/lzq3Txu/Tbc+TcY6duPmBE7DZJhyS4X3Qtsj8IKslCUo1FMS5S7ejHaoZx+g90bcHzzJstnXkksNUiG/h4HbffZHkWtcS/K/iqqOy4iaI9CmqUYn0ReV267bl3XHTdj6I1Y+R4+MRaQnn6GG3+f4cobbI+klrj/XzKxol7wur7lmmKVWqdrf3vBD7Hnuy8gpsTUxMrg4jt/z4Gk7XHUFOnfhJdtaqFIsyzKuqjfVbXLZlbv489aPuNGYqxB0vSdAaZMdjBztu2R1Ar3/2XCvDkhQf6/IRdtSkVp032GYV2ltMeBpx5C739ZnxRlInaZ9DDNkxrR/TaAC22PpBacuwzAxOwH8ddRZKC5oS3wvQLbKdhWnYx7EsvYJeqzEB9ibWJl6BlJ4b7bxs3T4HmBiFLUNq5ZV+x2Kp2Z97+74566COPXgQbJkMD6JQ5mzrM9jmpzbjqACUXc2YVXbuoTpa2UvqXUXp3duw5rL5ulOQWxom4EBLhpaiM6dwKYbHsk1SQ1HeDnlSYg8jqlwJjW1cIUYziBrpYrMNzTrz4D8SLmTrrIgZPA9GEH133c9kiqCT9fyIOU6oAjHwWrmpOv66N777/uvu9OHFu6McKpiAV1JCDpc7xkPcOsqQyXX297LNUiJyAVhimWXEMlMQnMSPcreOvL3wQ/WzePm60jEysDQ+sVDWiPxXzlapB6H4Dzsh9kH6Na/kSx+yjW7Mq8DqOTvTt0wDGnDqJYQTg6dqfw0B1pf9b2WKqCIprEs4uxvklXV2WKSsn7UG0nSnQrSp9Dj33N9qkthbrTID4JrP+Vg5ljzh9JXZp9aEOUHEgpd/IofUxRsVL2car9R9j50S/qjzq+1K2AAFOnNGDTSoaLW2yPpJKkLlGYWDBfxKyQwKi2Y2orZR+619H93ei5YSbO2fsnOOVQxwKSZvoljeg9bHsUlcQTkMbshxLv2mk/gon+RDEXdZS2rLAwlc8if35j9gwMdWwtdNxxpa6iWGFODAPY42D2J+v/WDJ4D2xwSqyjqmQ4N0oY2dz3BPofexgD/z2/2HMQJ+r+ouLo2MZw23SG946J0K8nIP5dOOoFLvWtav5D2AdM+zj62A/w9pf+qbSzEB/q3MTKk8Da+Q5m3WF7HOWSuij70IZqOeAm06tCphg/2/0qej/ehlG7//ymEowZAQFuvKwRG14D0GR7JOXglbs3So4xqiAwvq9STFVwtLYk393UjNG+WM4QLJa6y4Po6XrrHFpmciSt/dP5isDzZSK5chHVJCqhb8FF07fgPopc+Giyl/fN/fhYEQ6MBR8kSP8IMHlPPT9Xi0/0w0P+ivyr7xTnfIxsk9IPgGYdl3eo2QcEoREVhmkfx75zN078r9V/21xpxpiAZDLtwHCPgzlzhKlHdUOgkreAw8zl9eU64Iq+oX1otsOTX23DsYcXl37k8WTMCQi832xtDzA84GBO3c0f0Za6Kz4zaamGRynvQ7GLd3Dqqftx9MEnK793+4xJAYEnJDu2Msw6H2i6ntXRceYEpATNwOQQr2wGlatZFGFkfvKJR9D/+W9V6vjjRt1cOMVzlnM8vYxh9kUMTTfZHk1UuFyHhdI1A2PS3d+0HVV0qlDfM+0P8uSn/rW00dUHY1hAMnC81s4w7d0MLXUhJLxR/FC5xF7Z30ewjZ9e9mPe/5l/Bh9xSznOemEM5UHMNGDlowyzY/+kRj4R4E6RhYcl5EZ4EX3lV57qfYkfmXkH3P7R4o+wvhjzGsTHxdNLgdlw0BTvZ2wlFKZR1O8WcbuL4Hwr4cNPPMgHbvnbsa45fMaNgMCzDp7u4Jh81MEf3Wp7LFoSaidddMBLMo8i9A05+VIf99RD9+Dk/T+s/EHHl3ElIBmWbwD6dzPc/GGGie+xPZoQTuHbuex4V8tOzu2DY5gPPXQvhr/xkyrtKraMQwFJ3wy7tgMT+hzMjl9xo1j8U0RiT777B4SmREfcb3PPPvU5PvSVWD9Dt1qMGyddBcOtH07gRz9kmBabUvmcg16Kk+5X0xraTN9TvCZTJ+fOweirdTvhqVzGtYBkuPHyRmzoisuzf71SdFGLlHOhC++LfloJH+51hz7xUX6uo7ec46l3xlA1b6l0vTmKlvdxdL5oeyQevMgnkkTsw1yh+LDAU0v46IafpU5cPXO8CwfGqw8Spn/UxU8WAE2HHcz4pM2RKMOvUbLcRWTfTSFefm7hA+7I3PuBk3X5kIVKQwIiwLFkE4BehuYZDJNjYXJ5VDuj7i37d7qj//lv/Ow/PA7Uz5MPqw35IAoYWpsSeGoxQ9MM22MR4VKKpCT/RLGOY++W1LmvfQHnfl43z8ytFaRBlPQNulj0AsO08xlarhX+tb9VxOvamP0uwhTjvPOJ1Nlb2uBu7KvQMInxBMNdtzaCH28E53FfGvyFZRcnuySyS4OwNPIjzPnyn9s+v3GHNEhBtu7maP8NcGkjw+WxMrlkItZXnePofsFN3XEn5/M7az1GYgzTgJX/YltLlLywzJJgKx+xfR6JMU3rtQ3YMd/6BV+0+bVvOUNrs+2zR4wTEpif1ianbV/4hQWDDySw8klgyiTb54wYZzA0T0lg5aJG8CHbgqBYRhNYuZhhDmkNwi4MrU0NOLI3BkLhL8cZ2kgwKgBFsSpC3yDHmkXA2dPApRcxXHCxpYEkU/iPb6Xw9a8AS3dZGgNB6EmbXQ1YubgR/GwNNcbpBNa/wNAan/IYgjDBcFNzA3YsqL4Tvm8V0Dzd9vESREk4aLuxAXs3V14wdixjuKsVmERTFoj6h+HeTyew4MkyQ8NnE1j7DMMXbwemTrB9TARRcRjaWkup7WoA38Fw14dsj58gasCUSQy335zAgkcLaZQE1s5PCxXwHtIYxPgjffE3YPMv5GRjAjt+ydBKzjdBZJh6fgKPPuLgew8yNE+xPRqCIIiCUIiQIAyQgBCEARIQgjBAAkIQBkhACMIACQhBGCABIQgDJCAEYYAEhCAMkIAQhAESEIIwQAJCEAZIQAjCAAkIQRggASEIAyQgBGGABIQgDJCAEIQBEhCCMEACQhAG/i8AAP//T6Abanfs0L4AAAAASUVORK5CYII="}},"time_used":24,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":24,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"opendns","sensor_type":"DNS","title":"OpenDNS","description":"OpenDNS","scan_date":"2026-07-27","alert":"Phishing Block","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"phishing","severity":"medium","comment":"","link":"https://www.opendns.com/","meta":null},{"sensor_name":"hagezi","sensor_type":"DNS","title":"Hagezi Threat Feed","description":"Hagezi Threat Feed","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://github.com/hagezi/dns-blocklists","meta":null},{"sensor_name":"cloudflare_dns","sensor_type":"DNS","title":"Cloudflare DNS","description":"Cloudflare DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.cloudflare.com/application-services/products/dns/","meta":null},{"sensor_name":"quad9","sensor_type":"DNS","title":"Quad9 DNS","description":"Quad9 DNS","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"Sinkholed in DNS","link":"https://www.quad9.net","meta":null},{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"trustwallet.com-two-factor-authentication12.ao.yesixrq.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}}]}
