{"report_id":"ede8f8f8-15ee-432d-a3a6-347c97a8376a","version":0,"status":"done","tags":[],"date":"2026-07-27T10:53:45Z","url":{"schema":"https","addr":"global-cryptocurrencies.com/","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":0,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"final":{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"title":"GlobalCryptocurrencies","dom":{"size":781,"mime_type":"text/html; charset=utf-8","magic":"HTML document, ASCII text, with very long lines (543)","md5":"54496319df564522abd1a99772da8c82","sha1":"d67375fa8abc58d397fcad80c1c8f64edb8fe640","sha256":"8252463eef644a47d17e7b9ecaf42a557a57ffd9d09fa1c9fbe906836686a186","sha512":"5c35f82c42bacec6a96845e75419fc5c851ce34f9795cab5bdf92a4bd3bfed9620beff506e4ff8d70de9e12c610a711ec22011fa8a7b1930dda3b2e219526b04","ssdeep":"","tlshash":"0301d04add08d2ec1ae05eada433f00dc186b85fbd26dc54b4f8696d0eddbcc0852c20","dom_hash":"domhashf426e7970dae7835da724db343d3a8ee","first_seen":"2026-07-27T08:49:19.826721Z","last_seen":"2026-07-27T10:54:16.506341Z","times_seen":3,"resource_available":false,"data":null}},"submit":{"url":{"schema":"https","addr":"global-cryptocurrencies.com/","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":0,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"tags":null,"meta":null},"settings":{"access":"public","device_type":"desktop","expires_at":"2027-08-31T10:53:45Z","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":1}},"detection":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null},"summary":[{"fqdn":"plugin-code.salesmartly.com","ip":{"addr":"3.164.240.34","port":443,"asn":16509,"as":"AMAZON-02","country":"United States","country_code":"US"},"domain_registered":"2021-07-22","domain_rank":530835,"first_seen":"2024-12-12T08:03:04.74606Z","last_seen":"2026-07-23T02:25:27.652148Z","alert_count":0,"request_count":1,"received_data":1822,"sent_data":508,"comment":"","tags":null,"fingerprints":[{"name":"Alibaba Cloud Object Storage Service","description":"Alibaba Cloud Object Storage Service (OSS) is a cloud-based object storage service provided by Alibaba Cloud, which allows users to store and access large amounts of data in the cloud.","website":"https://www.alibabacloud.com/product/object-storage-service","common_platform_enumeration":"","icon":"Alibaba Cloud.svg","categories":["IaaS"]},{"name":"Amazon CloudFront","description":"Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency, high transfer speeds.","website":"https://aws.amazon.com/cloudfront/","common_platform_enumeration":"","icon":"Amazon Cloudfront.svg","categories":["CDN"]},{"name":"Amazon Web Services","description":"Amazon Web Services (AWS) is a comprehensive cloud services platform offering compute power, database storage, content delivery and other functionality.","website":"https://aws.amazon.com/","common_platform_enumeration":"","icon":"Amazon Web Services.svg","categories":["PaaS"]}]},{"fqdn":"global-cryptocurrencies.com","ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"domain_registered":"unknown","domain_rank":0,"first_seen":"2026-07-27T08:49:14.902733Z","last_seen":"2026-07-27T08:49:14.902733Z","alert_count":15,"request_count":15,"received_data":4548164,"sent_data":12481,"comment":"","tags":null,"fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":"jQuery","description":"jQuery is a JavaScript library which is a free, open-source software designed to simplify HTML DOM tree traversal and manipulation, as well as event handling, CSS animation, and Ajax.","website":"https://jquery.com","common_platform_enumeration":"cpe:2.3:a:jquery:jquery:*:*:*:*:*:*:*:*","icon":"jQuery.svg","categories":["JavaScript libraries"]},{"name":"Clipboard.js","description":"","website":"https://clipboardjs.com/","common_platform_enumeration":"","icon":"Clipboard.js.svg","categories":["JavaScript libraries"]},{"name":"Alibaba Cloud CDN","description":"Alibaba Cloud CDN is a global network of servers designed to deliver high-performance, low-latency content to users around the world. It is a cloud-based service provided by Alibaba Cloud, a subsidiary of the Alibaba Group, that enables businesses to accelerate the delivery of their web content, including images, videos, and static files, to end-users.","website":"https://www.alibabacloud.com/product/content-delivery-network","common_platform_enumeration":"","icon":"Alibaba Cloud.svg","categories":["CDN"]}]},{"fqdn":"at.alicdn.com","ip":{"addr":"","port":0,"asn":0,"as":"","country":"","country_code":"zz"},"domain_registered":"2008-06-25","domain_rank":96084,"first_seen":"2013-11-28T05:03:29Z","last_seen":"2026-07-24T08:04:11.091658Z","alert_count":0,"request_count":2,"received_data":0,"sent_data":1013,"comment":"","tags":null,"fingerprints":null}],"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":"global-cryptocurrencies.com/app/layer/layer.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"d0c975e34297f3e44e99c9d83555ffc1","sha1":"7e465bd79e65428cf07e5991196cff512ce44a4b","sha256":"691aad750624d84b17f2fbb73a4982860edd18837f3000c5b660ac82bf408e82","sha512":"1d9dcd7e1afe695e5716ea55f9a5a3e3aa45852722b4e1a2653ebd3f3a85c8b7a34b15264751f5ee26ea56ee49c8683a00d771197d8b32d9ea53d842d6db3b79","ssdeep":"384:41xCih92A3igrLXSt/SdMrXqE6tGLxzAOTElH0jjhtjfs8:41EiV3i+WtXItqF13k8","tlshash":"56a2b66a754034976323906ad11fba0b31f21d24d7078128f22bb4ae1dbcd95a2b7f5f","size":22104,"data":"","first_seen":"2023-04-05T06:05:22Z","last_seen":"2026-08-04T14:16:17.871474Z","times_seen":6109,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/static/tradeview/datafeeds/udf/dist/bundle.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"fd3251e228d9edda60ce01ccb3046f77","sha1":"acea866435eea9c7a0564dd82435bab93c22a9db","sha256":"f016a5c57c09504aea2cca849831255353ad7e56e008fd49a45a23b114b1247d","sha512":"07db2933537e3a704befe64479130db26145597802b80cc9f9c3dcc437aff0823e896626240801ac121e06c25ec986b42580c7d240f900b160646d29c99429ad","ssdeep":"384:kpe0jAoNzmAHgWH4NRZsPA4iCA2PHDJMW:oBiWH4jZsDPA2PHyW","tlshash":"9452a6c97611312182936472e87f380ba139b515688a903c71c8e9de6efdb5dea17f3c","size":13539,"data":"","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.199307Z","times_seen":348,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/static/tradeview/charting_library/charting_library.min.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"c8cd63cddf0ab72e873d68a2d68ca336","sha1":"2d0b483c39ea41187d9fcb8200bb2819525dbd3b","sha256":"6571ad1a4bb68aacbd4c3a78fc0c26f9c1f1bb34a92164ea3fac2b4532acf88e","sha512":"f3956ab3268f27911de0789fa0858de98e26bcd2736544a6694a225aa61ab5b8ceff26774af62bad71294531d75e4faa198f44ee85a5731ffb26480940f4144d","ssdeep":"192:S4DF7XcEbRi1H0FEKyhWbviztF89xo/g81Qit+0idiiV8M5MSBj5JCWotPSXmYRB:fhoEbizXAoINoWoxSXmBEU3OHQI","tlshash":"18320054df6c2c3205c720fc8d7f288f513de276e895449e388491dc59ed44bbaaba39","size":11663,"data":"","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.200411Z","times_seen":261,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/static/tradeview/datafeeds/udf/dist/polyfills.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"a24c8424ecaa94595878ee39970c7b46","sha1":"651ecfd5fa247c45b1138bdb2629399882c50384","sha256":"67396f17c514b90f31cbe905241e290c820130be7f55edc770ce81587d37040e","sha512":"6a09a1c41bb241c93b864eda4c57ac14bf91c2b0d0a5323f03d24c31ba266c53af6b9b15580a914aebfca0c825ec6e19cc73e352398fde352c188c604addfe39","ssdeep":"192:/5C5b4rmkiNL70mrZm3KosuxV6/hk3haw5UPQ0wx9B4EhN0xhOU8c:xGegVrZLO3gyP6EhN0xhD","tlshash":"29128588f7e0b472036360b4917f450fb2b53925648e41b8f260d8ea6cbd44d962bf7c","size":9647,"data":"","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.201435Z","times_seen":303,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/jquery.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"3b01a0f793e8811780858bb6919154ee","sha1":"65b42f5118627b51ea31bf2df017d443315b30f7","sha256":"94fb7ad5f871626cf431588ccda297d2d6cb9aca466de0bd902d4d15a120d100","sha512":"ded23391216b2cb519656e436a4f6b09393a83dde75453a02c6cc221f92363ca1d256482458049b24ac193d971452655d2c8581c61ddf57b18f2e70473272b22","ssdeep":"1536:NP10iSi65U/dXXeyhzeBuG+HYE0mdkuJO1z6Oy4sh3J1A72BjmN7TwpDKba98HrJ:o+414Jiz6fh6lTqya98HrJ","tlshash":"4d83d6d9b2c67062977734b851bf510bb17a98dab40c8c60f0a4d8e47eb4a8d517bf2c","size":84338,"data":"","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.217172Z","times_seen":242,"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/clipboard.min.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"introduction_type":"scriptElement","is_inline":false,"md5":"1e3e33c5ac117cd77c61dd7f3c8e8a69","sha1":"1f8030e484c4630bdd20017c8a646e138aa24980","sha256":"03a7ffe45e4bea53a73bb08b4ffe77f612aef32fdc0bb44d73f0e94195ce20e2","sha512":"79ca0f59bf25ebceecf25d6d2318c8998392405eb83aab615b1a381a6c7c687214ad995fe43b6e1921dce509ad6454d5a9d707a963bb5b4b7ed27bc3eb9cfed6","ssdeep":"192:80i1RWTek1XVTkAkI/qHnHZ4Ly98Dom53C5GU7oKZoQhoslw/3JAQZu5CpVHa4L1:NivWTeBI/vCc3kHiQ7l83JJu54z9f","tlshash":"d532a64cb28071b196db60ae802f424fb270942570ae90d4b63ae8f16d7ceed5567f3c","size":11023,"data":"","first_seen":"2023-04-05T13:46:29Z","last_seen":"2026-07-29T21:55:32.198434Z","times_seen":141,"alerts":{"ids":null,"analyzer":null,"urlquery":null}}],"eval":null,"write":null,"console":null},"http":[{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/js/app.ed7b0a03.js?v=2","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.556Z","timestamp":1785149590556,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/js/app.ed7b0a03.js?v=2 HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=1\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\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Wed, 22 Jul 2026 15:26:57 GMT\r\nvary: Accept-Encoding\r\netag: W/\"6a60e141-1c6c97\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":1862807,"size_decoded":381604,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (3419)","md5":"9fbf12dbcb945af0db36f28542593282","sha1":"3c71962984a348bd5946748283e13a4b56112bd6","sha256":"72a3058c8cc428e3dce293493e5fc41983ec34213f9b2120d63a0c6457986d5d","sha512":"4b574f581afbebe85a9823bd6a38ece2afee6d0dba32d75fa84762b75e83407cfdc9bf6253fa69f0bdd5e268835f45df3c47c3ce7a1d90b775c39a76d441ead5","ssdeep":"6144:mv/6AGeu7WKDbabux+w+/+iON+Z+S+LOs1YcBxGoG6GseJeIm9mPmA+eVesmCmK3:mn6AG+qbabudBw+tTsDl","tlshash":"a725630a85b9603085a3f0788d3f5899b23551af4da97d543f5c86982f2c43e63b9bfc","first_seen":"2026-07-27T08:49:19.836228Z","last_seen":"2026-07-27T10:54:16.512119Z","times_seen":3,"resource_available":false,"data":"KGZ1bmN0aW9uIChlKSB7CiAgZnVuY3Rpb24gdCh0KSB7CiAgICBmb3IgKAogICAgICB2YXIgaSwgbiwgciA9IHRbMF0sIGwgPSB0WzFdLCBjID0gdFsyXSwgZCA9IDAsIHUgPSBbXTsKICAgICAgZCA8IHIubGVuZ3RoOwogICAgICBkKysKICAgICkKICAgICAgKG4gPSByW2RdKSwKICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgbikgJiYgc1tuXSAmJiB1LnB1c2goc1tuXVswXSksCiAgICAgICAgKHNbbl0gPSAwKTsKICAgIGZvciAoaSBpbiBsKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCwgaSkgJiYgKGVbaV0gPSBsW2ldKTsKICAgIG0gJiYgbSh0KTsKICAgIHdoaWxlICh1Lmxlbmd0aCkgdS5zaGlmdCgpKCk7CiAgICByZXR1cm4gby5wdXNoLmFwcGx5KG8sIGMgfHwgW10pLCBhKCk7CiAgfQogIGZ1bmN0aW9uIGEoKSB7CiAgICBmb3IgKHZhciBlLCB0ID0gMDsgdCA8IG8ubGVuZ3RoOyB0KyspIHsKICAgICAgZm9yICh2YXIgYSA9IG9bdF0sIGkgPSAhMCwgbiA9IDE7IG4gPCBhLmxlbmd0aDsgbisrKSB7CiAgICAgICAgdmFyIHIgPSBhW25dOwogICAgICAgIDAgIT09IHNbcl0gJiYgKGkgPSAhMSk7CiAgICAgIH0KICAgICAgaSAmJiAoby5zcGxpY2UodC0tLCAxKSwgKGUgPSBsKChsLnMgPSBhWzBdKSkpKTsKICAgIH0KICAgIHJldHVybiBlOwogIH0KICB2YXIgaSA9IHt9LAogICAgbiA9IHsgYXBwOiAwIH0sCiAgICBzID0geyBhcHA6IDAgfSwKICAgIG8gPSBbXTsKICBmdW5jdGlvbiByKGUpIHsKICAgIHJldHVybiAoCiAgICAgIGwucCArCiAgICAgICJqcy8iICsKICAgICAgKHt9W2VdIHx8IGUpICsKICAgICAgIi4iICsKICAgICAgeyAiY2h1bmstMjc1YWJiYzciOiAiZmRjNTFkYzYiIH1bZV0gKwogICAgICAiLmpzIgogICAgKTsKICB9CiAgZnVuY3Rpb24gbCh0KSB7CiAgICBpZiAoaVt0XSkgcmV0dXJuIGlbdF0uZXhwb3J0czsKICAgIHZhciBhID0gKGlbdF0gPSB7IGk6IHQsIGw6ICExLCBleHBvcnRzOiB7fSB9KTsKICAgIHJldHVybiBlW3RdLmNhbGwoYS5leHBvcnRzLCBhLCBhLmV4cG9ydHMsIGwpLCAoYS5sID0gITApLCBhLmV4cG9ydHM7CiAgfQogIChsLmUgPSBmdW5jdGlvbiAoZSkgewogICAgdmFyIHQgPSBbXSwKICAgICAgYSA9IHsgImNodW5rLTI3NWFiYmM3IjogMSB9OwogICAgbltlXQogICAgICA/IHQucHVzaChuW2VdKQogICAgICA6IDAgIT09IG5bZV0gJiYKICAgICAgICBhW2VdICYmCiAgICAgICAgdC5wdXNoKAogICAgICAgICAgKG5bZV0gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgIHZhciBpID0KICAgICAgICAgICAgICAgICAgImNzcy8iICsKICAgICAgICAgICAgICAgICAgKHt9W2VdIHx8IGUpICsKICAgICAgICAgICAgICAgICAgIi4iICsKICAgICAgICAgICAgICAgICAgeyAiY2h1bmstMjc1YWJiYzciOiAiZGNkOWMxMjIiIH1bZV0gKwogICAgICAgICAgICAgICAgICAiLmNzcyIsCiAgICAgICAgICAgICAgICBzID0gbC5wICsgaSwKICAgICAgICAgICAgICAgIG8gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLAogICAgICAgICAgICAgICAgciA9IDA7CiAgICAgICAgICAgICAgciA8IG8ubGVuZ3RoOwogICAgICAgICAgICAgIHIrKwogICAgICAgICAgICApIHsKICAgICAgICAgICAgICB2YXIgYyA9IG9bcl0sCiAgICAgICAgICAgICAgICBkID0gYy5nZXRBdHRyaWJ1dGUoImRhdGEtaHJlZiIpIHx8IGMuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgICAgICAgaWYgKCJzdHlsZXNoZWV0IiA9PT0gYy5yZWwgJiYgKGQgPT09IGkgfHwgZCA9PT0gcykpIHJldHVybiB0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3R5bGUiKTsKICAgICAgICAgICAgZm9yIChyID0gMDsgciA8IHUubGVuZ3RoOyByKyspIHsKICAgICAgICAgICAgICAoYyA9IHVbcl0pLCAoZCA9IGMuZ2V0QXR0cmlidXRlKCJkYXRhLWhyZWYiKSk7CiAgICAgICAgICAgICAgaWYgKGQgPT09IGkgfHwgZCA9PT0gcykgcmV0dXJuIHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKICAgICAgICAgICAgKG0ucmVsID0gInN0eWxlc2hlZXQiKSwKICAgICAgICAgICAgICAobS50eXBlID0gInRleHQvY3NzIiksCiAgICAgICAgICAgICAgKG0ub25sb2FkID0gdCksCiAgICAgICAgICAgICAgKG0ub25lcnJvciA9IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9ICh0ICYmIHQudGFyZ2V0ICYmIHQudGFyZ2V0LnNyYykgfHwgcywKICAgICAgICAgICAgICAgICAgbyA9IG5ldyBFcnJvcigKICAgICAgICAgICAgICAgICAgICAiTG9hZGluZyBDU1MgY2h1bmsgIiArIGUgKyAiIGZhaWxlZC5cbigiICsgaSArICIpIgogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgKG8uY29kZSA9ICJDU1NfQ0hVTktfTE9BRF9GQUlMRUQiKSwKICAgICAgICAgICAgICAgICAgKG8ucmVxdWVzdCA9IGkpLAogICAgICAgICAgICAgICAgICBkZWxldGUgbltlXSwKICAgICAgICAgICAgICAgICAgbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG0pLAogICAgICAgICAgICAgICAgICBhKG8pOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIChtLmhyZWYgPSBzKTsKICAgICAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwogICAgICAgICAgICBwLmFwcGVuZENoaWxkKG0pOwogICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIG5bZV0gPSAwOwogICAgICAgICAgfSkpCiAgICAgICAgKTsKICAgIHZhciBpID0gc1tlXTsKICAgIGlmICgwICE9PSBpKQogICAgICBpZiAoaSkgdC5wdXNoKGlbMl0pOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgbyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICBpID0gc1tlXSA9IFt0LCBhXTsKICAgICAgICB9KTsKICAgICAgICB0LnB1c2goKGlbMl0gPSBvKSk7CiAgICAgICAgdmFyIGMsCiAgICAgICAgICBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgKGQuY2hhcnNldCA9ICJ1dGYtOCIpLAogICAgICAgICAgKGQudGltZW91dCA9IDEyMCksCiAgICAgICAgICBsLm5jICYmIGQuc2V0QXR0cmlidXRlKCJub25jZSIsIGwubmMpLAogICAgICAgICAgKGQuc3JjID0gcihlKSk7CiAgICAgICAgdmFyIHUgPSBuZXcgRXJyb3IoKTsKICAgICAgICBjID0gZnVuY3Rpb24gKHQpIHsKICAgICAgICAgIChkLm9uZXJyb3IgPSBkLm9ubG9hZCA9IG51bGwpLCBjbGVhclRpbWVvdXQobSk7CiAgICAgICAgICB2YXIgYSA9IHNbZV07CiAgICAgICAgICBpZiAoMCAhPT0gYSkgewogICAgICAgICAgICBpZiAoYSkgewogICAgICAgICAgICAgIHZhciBpID0gdCAmJiAoImxvYWQiID09PSB0LnR5cGUgPyAibWlzc2luZyIgOiB0LnR5cGUpLAogICAgICAgICAgICAgICAgbiA9IHQgJiYgdC50YXJnZXQgJiYgdC50YXJnZXQuc3JjOwogICAgICAgICAgICAgICh1Lm1lc3NhZ2UgPQogICAgICAgICAgICAgICAgIkxvYWRpbmcgY2h1bmsgIiArIGUgKyAiIGZhaWxlZC5cbigiICsgaSArICI6ICIgKyBuICsgIikiKSwKICAgICAgICAgICAgICAgICh1Lm5hbWUgPSAiQ2h1bmtMb2FkRXJyb3IiKSwKICAgICAgICAgICAgICAgICh1LnR5cGUgPSBpKSwKICAgICAgICAgICAgICAgICh1LnJlcXVlc3QgPSBuKSwKICAgICAgICAgICAgICAgIGFbMV0odSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc1tlXSA9IHZvaWQgMDsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHZhciBtID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBjKHsgdHlwZTogInRpbWVvdXQiLCB0YXJnZXQ6IGQgfSk7CiAgICAgICAgfSwgMTJlNCk7CiAgICAgICAgKGQub25lcnJvciA9IGQub25sb2FkID0gYyksIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZCk7CiAgICAgIH0KICAgIHJldHVybiBQcm9taXNlLmFsbCh0KTsKICB9KSwKICAgIChsLm0gPSBlKSwKICAgIChsLmMgPSBpKSwKICAgIChsLmQgPSBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgICBsLm8oZSwgdCkgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHQsIHsgZW51bWVyYWJsZTogITAsIGdldDogYSB9KTsKICAgIH0pLAogICAgKGwuciA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICJ1bmRlZmluZWQiICE9PSB0eXBlb2YgU3ltYm9sICYmCiAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogIk1vZHVsZSIgfSksCiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogITAgfSk7CiAgICB9KSwKICAgIChsLnQgPSBmdW5jdGlvbiAoZSwgdCkgewogICAgICBpZiAoKDEgJiB0ICYmIChlID0gbChlKSksIDggJiB0KSkgcmV0dXJuIGU7CiAgICAgIGlmICg0ICYgdCAmJiAib2JqZWN0IiA9PT0gdHlwZW9mIGUgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOwogICAgICB2YXIgYSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgIGlmICgKICAgICAgICAobC5yKGEpLAogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCAiZGVmYXVsdCIsIHsgZW51bWVyYWJsZTogITAsIHZhbHVlOiBlIH0pLAogICAgICAgIDIgJiB0ICYmICJzdHJpbmciICE9IHR5cGVvZiBlKQogICAgICApCiAgICAgICAgZm9yICh2YXIgaSBpbiBlKQogICAgICAgICAgbC5kKAogICAgICAgICAgICBhLAogICAgICAgICAgICBpLAogICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIHJldHVybiBlW3RdOwogICAgICAgICAgICB9LmJpbmQobnVsbCwgaSkKICAgICAgICAgICk7CiAgICAgIHJldHVybiBhOwogICAgfSksCiAgICAobC5uID0gZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHQgPQogICAgICAgIGUgJiYgZS5fX2VzTW9kdWxlCiAgICAgICAgICA/IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICByZXR1cm4gZVsiZGVmYXVsdCJdOwogICAgICAgICAgICB9CiAgICAgICAgICA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgfTsKICAgICAgcmV0dXJuIGwuZCh0LCAiYSIsIHQpLCB0OwogICAgfSksCiAgICAobC5vID0gZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB0KTsKICAgIH0pLAogICAgKGwucCA9ICIiKSwKICAgIChsLm9lID0gZnVuY3Rpb24gKGUpIHsKICAgICAgdGhyb3cgKGNvbnNvbGUuZXJyb3IoZSksIGUpOwogICAgfSk7CiAgdmFyIGMgPSAod2luZG93WyJ3ZWJwYWNrSnNvbnAiXSA9IHdpbmRvd1sid2VicGFja0pzb25wIl0gfHwgW10pLAogICAgZCA9IGMucHVzaC5iaW5kKGMpOwogIChjLnB1c2ggPSB0KSwgKGMgPSBjLnNsaWNlKCkpOwogIGZvciAodmFyIHUgPSAwOyB1IDwgYy5sZW5ndGg7IHUrKykgdChjW3VdKTsKICB2YXIgbSA9IGQ7CiAgby5wdXNoKFswLCAiY2h1bmstdmVuZG9ycyJdKSwgYSgpOwp9KSh7CiAgMDogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgIGUuZXhwb3J0cyA9IGEoIjU2ZDciKTsKICB9LAogICIwMjFmIjogZnVuY3Rpb24gKGUsIHQpIHsKICAgIGUuZXhwb3J0cyA9CiAgICAgICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFCSlVsRVFWUTRqYTNVc1N0RlVSd0g4QTh4R0NXN2dTajE2dVVQa0ZFcFpUTXdLUXlHeDh5aWJDeEtXZFJML2dCbE1DZ0RJd05sa01YODdLeTZyM04xUGVjKzUzbStkWmZ6dTcvUDZaek9PVDN3ZERFbGttRnNZQWtqb1h5TlBWekZHaWJuN3ZYRkNoakhUVUNMbVFuZk1kWmlqYjJSc1g1Y1JyQmlWckdaQ2k0V2x0Z3UrMkh5WDhIcEJDeFBKUVVjNmdBY1RBRWZPd0FmVXNDelJPd1dieW5nTTNZVHdKWFlZQXpNc29PdGt0b3JKc0xFUDFKMnNMTWM0QlN6R01VNzdzcHVTWjRZbUYrNWVZeGhvS1grZ1JlYzQ3QjFIMXVYdkl3R3RzTVphOFdFc1VyNHB4RjZvdUE2NnUyV1U1SjY2UDBHWm8vQjBSK3dQRWZCK0FKclhXQjVha1Z3NFIvQXBwR0Q3WjZxMURTTkhNeU9RcmRwR2psWXhVbTRCWjBtNjhsNnEvQUp6YThzSHUranRUa0FBQUFBU1VWT1JLNUNZSUk9IjsKICB9LAogICIwNGNhIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIwNTk4IjogZnVuY3Rpb24gKGUsIHQpIHsKICAgIGUuZXhwb3J0cyA9CiAgICAgICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVCQU1BQUFCL3B3QStBQUFBTFZCTVZFVUFBQUROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1UnA3WC9FQUFBQURuUlNUbE1BS0lJVmNPdGVSTUdZK0owRjIwK25EanNBQUFCNVNVUkJWQWpYWXdBQ283Z1hCUXhnd0xqdTNidVhFT2JSZDBEZ0FHYm1nWmh2d014OUlPWkRNTE1QeEh3T1p1cUJtSS9CVERrUXN3SE1aQUl4QlNDbStiMTdGOGdBQWN4SjdsQ1cwYjEzNzk0cWcxaHM3OEFnQWF3U0RKNEFIUU9pSVdad3dwZ1RHTGhnekFVTWZERG1BMlFtNDFZSUsxb0FBUHlPYVpIZStXOGxBQUFBQUVsRlRrU3VRbUNDIjsKICB9LAogICIwNjExIjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoImYzNGUiKTsKICB9LAogICIwNjQzIjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjhlZjciKTsKICB9LAogICIwODA3IjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjVmYWMiKTsKICB9LAogICIwOWU0IjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIwYTY4IjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIwYTk3IjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjc2MmMiKTsKICB9LAogICIwYmU5IjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIwYzBmIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIxMmFhIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIxMmFlIjogZnVuY3Rpb24gKGUsIHQpIHsKICAgIGUuZXhwb3J0cyA9CiAgICAgICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsYlc5a2RXeGxMbVY0Y0c5eWRITWdQU0FpWkdGMFlUcHBiV0ZuWlM5bmFXWTdZbUZ6WlRZMExGSXdiRWRQUkd4b1NVRkJaMEZNVFVGQlVDOHZMemRQZW5NdmRqY3JPV0pYTVhWSWFEUm1USGs0Y25FMmRXOUhRbWRVVVRCT1FVVkNRVkp6WWtjNFZFVjRTbVZZYkM4ek9TOVdVbFZXUVVGQlFVTklMME13TlVaV1JrNUVVVlpDUmsxcE5IZEJkMFZCUVVGQmFDdFJVVVpDVVVGQlFVTjNRVUZCUVVGSlFVRm5RVUZCUlRWNFJFbFRVMnhNY2s5eVRuQXdjRXRPVWtOa1JtaDRWbTlzU2t4RlNsRlZiMU5uVDNCVFdWUTBVbTkzVGxOemRubFhNV2xqUVRFMmF6aE5UVTFTYTBOQ2FuTnJRbFJHUkVGYWVYVkJSV3R4UTJaNFNWRXlhR2RSVWtaMlFWRkZSVWxxVG5oV1JGYzJXRTVGTkZsaFoxSnFkVUpEZDJVMk1ITnRVVlZFYm1RMFVub3hXa0ZSV201R1FVZEVaREJvYVdob01USkRSVVU1YTJwQlJWWnNlV05ZU1djM1FrRnpUVUkyVTJ4dVNqZzNjR0Z4WWxOTGFVdHZjWFZ6Ym1KTlpHMUVRekowV0ZGc2ExVm9lbWxaZEhsWFZIaEpabmsyUWtVNFYwcDBOVmxGZG5CS2FYWjRUbUZIYlV4SVZEQldiazluUjFsbU1HUmFXRk0zUVZCa2NFSXpNRGxTYmtoUFJ6Vm5SSEZZUjB4RVlVTTBOVGRFTVhwYUwxWXZibTFQVFRneVdHbElVV3BaUzJoTFVERnZXbTFCUkdSRlFVRkJhQ3RSVVVaQ1VVRkJRVU4zUVVGQlFVRkhRVUZZUVVGQlJXTm9SRWxUWVhOTFRtVjFTa1pMYjBoek5HMVZXV3hLU1d0dGFrbFdOVFJUYjNsd2MyRXdkMjFNVTI1eGIxUkZkRUozTlRKdFJ6QkJhbWhaY0VKNGFXOUZjVkpPZVRoV01IRkdlazUzSzBkSGQyeEthMmswYkVKeGVERkpRbWRxVFd0U1NXZG9kMnB5ZW1ORWRHa3lMMGRvTjBRNWNVNDNOelIzVVVkQldVOUZabmREUTJoSlZpOW5XVzFFYUc4clVXdGFTMVJTTTNBM1JWRkJhQ3RSVVVaQ1VVRkJRVU4zUWtGQlFVRklVVUZQUVVGQlJXTm9SRWxUVjJSQlRtVnpUa2hJU2xwM1JUSkVWVk5GYnpWVGFrdExRakpJVDB0SFdVWk1SREZEUWk5RWJrVnZTV3hyZEdreVVHeDVkVXRIUlVGVVRVSmhRVUZEVTNsSFlrVkVXVVEwZWs0eFdVbEZiV2d3VTBOUlVXZFpaV2hPYlZST1RtRkxjMUZLV0cxQ2RYVkZXVkJwT1VWRFFWVXZWVVp1VG5wbFZYQTVWa0pSUlVKdlJrOU1iVVo0VjBoT2IxRjNObEpYUlc5alJWRkJhQ3RSVVVaQ1VVRkJRVU4zU0VGQlFVRkhVVUZTUVVGQlJXRlNSRWxEWkZwYVRrOTJUa1J6ZG1aQ2FFSkVaSEIzV21kdmFFSm5SVE51VVdGcmFUQkJXVVZxUlhGUFIyMXhSR3hyUlc1QmVrSlZhbWh5UVRCRGIwSlphRXhXVTJ0dE5GTmhRVUZYYTJGb1EwWkJWMVJWTUVFMFVuaDZSbGRLYm5wWVJsZEtTbGRpT1hCVWFXaFNkVFZrZG1kb2JDc3ZOMDVSYlVKbloyOHZabGxMU0VOWU9FRnBRVzFGUlZGQmFDdFJVVVpDVVVGQlFVTjNUMEZCUVVGRlowRlpRVUZCUlZwWVEzZEJZWEU1VDBSQlRVUlBWVUZKTVRkTlkxbEVhRmRCTTIxRFdYQmlNVkp2YjFoQ2EzUnRjMkowT1RRMFFsVTJla05SUTBKUmFYZFFRalJxUVdsb2FVTkxPRFpwY2xSQ01qQnhkbGR3TjFoeEwwWlpWalJVVGxkT2VqUnZjVmR2UlVsblREQklXQzlsVVZOTWFUWTVZbTlEYVd0VWEwVXlWbFpFUVhBMVpERndNRU5YTkZKQlEwZzFRa0ZWUmtGQlFVRk1RVFJCUVVGQlUwRkNORUZCUVZOQmEwSm5RM0Z5TTFsQ1NVMVlkbXRGU1UxemVGaG9ZMFpHY0dsYWNVSmhWRmhwYzBKRGJHbGlaMEZ1WkN0cGFsbEhjVEpKTkVoQllXMTNXRUpuVGtoS09FSkZZbnBuVUU1T2FubzNUSGR3YmtaRVRIWm5URWRLVFdSdWR5ODFSRkpEY2toaFJUTjRZa3R0TmtaUmQwOTBNWGhFYm5CM1EzWmpTbWRqU2sxblJVbGxRMWxQUTFGc2NrWTBXVzFDU1c5S1ZsWXlRME5ZV25aRGIyOUlZbmRIVW1OQmFVdGpiVVpWU21oRlFVbG1hMFZDVVZWQlFVRkJjMFIzUVVKQlFrVkJTSGRCUVVKSWMxRjVRV3RIYjFKcGRrVk1TVzV1VDBac1FtcGxUVEZDUTJsR1FtUmpZazFWZEV0UlpGUk9NRU5WU25KMU5VNUtVWEpaVFdnMVZrbEdWRlJMU21OUGFqSkljVXBSVW1oRmNYWnhSM1ZWSzNWM05rRjNaMFYzZUd0UFR6VTFiSGhKYVdodlJHcExXVGh3UW05VWFGQjRiWEJCV1drcmFFdDZiMlZsZDJ0VVpFaHJXbWRvVFVsa1EwOUphRWwxU0daQ1RVOXFlR2xPVEZJMFMwTlhNVTlFUVd4NFUzaEZRVWxtYTBWQ1VWVkJRVUZCYzBOQlFVOUJRbWRCUldkQlFVSkhkMUY1Uld0eVEwUm5ZbGwyZGsxdlQwWTFTVXhoVG1GSmIwZExjbTlqYURsb1lXTkVNMDFHVFVoVlFucE5TR2xDZEdkM1NrMUNSbTlzUkVJMFIyOUhSMEpEUVVOTFVtTkJRVlZYUVcxNlQxZEtVVVY0ZVhOUmMwcG5WMm93UzNGMlMyRnNWR2xaVUdod01VeENSbFIwY0RFd1NYTTJiVlExWjJSV1JuZ3hZbEpPT0VaVWMxWkRRWEZFVDBJNUswdG9SVUZKWm10RlFsRlZRVUZCUVhOQlowRlRRVUl3UVVSblFVRkNTR2RSZVVWdGNrSmxVRk0wWWxGa1VWcENaRkkxU1dOSWJWZEZaMVZHVVdkWFMyRkxZbGQzZDFOSmFHTTBURzl1YzFob1FsTkRjMUZ2VDFOVFkwZFJSRXBwVjNkUFNGRnVRWGhYUWtsWlNrNVlSVzlHUTJsRlYwUkpPV3BEZWtWVFpYazNSM2ROVFRWa2IwVjNWelJxU205NWNGRlJOelF6ZFRGWFkxUldNRU5uUm5waWFFbzFXRU5zWmtoWlpDOUZkMXB1U0c5WlZrUm5hVTltU0V0UlRsSkZRVWxtYTBWQ1VWVkJRVUZCYzBGQlFWQkJRbXRCUlZGQlFVSkhaVkZ4VlZGeWRVUnFjbGN6ZG1GWlExbzFXREpwWlRaRmEyTkxZVzl2VkVGemFUZDVkRzVVY1RBME5rSkNjMDVqVkhaSmRIbzBRVzkwVFhkTFdrSkpRelpJTmtOV1FVcGhRMk5VTUVOVlFsUm5ZVlJuTlc1VVEzVTVSMHRwUkVWTlVFcG5OVmxDUWs5d2QyeHVWbnBNZDNSeGVVdHVXbUZuV2xkaGFHOU5RakpOTTBkbmMwaFRVbk5TUVVOSU5VSkJWVVpCUVVGQlRFRkZRVU5CUVZKQlFtZEJRVUZTWTAxTFVqQm5URE0wYm5CclZYbDVRMEZqUVcxNWFFSnBhbXRIYVRKVlZ6QXlWa2hHZERNemFYVTNlV2xFU1VSaFJEUXZaWEpGV1VkRWJIVXZiblZDUVU5S09VUjJZekpGWTBSblJrRlpTWFZoV0ZNelltSlBhRFpOU1VNMVNVRlFOVVZvTldack1tVjRRelIwY0dkM1dubHBlVVpuZG1oRlRVSkNSVUZKWm10RlFsRlZRVUZCUVhOQlFVRkRRVUUwUVVoUlFVRkNTRTFSZVVGdVdXOVdhVk5zUmtSSFdFSktPREE0UlhBMVMxSjNWamh4UldjcmNGSkRUMlZ2YVc5TFRYZEtTekJGYTJOMU5UUm9PVUZ2WjJoTFoxaEpUVnBuUVVGd1VWcGpRME4xTWtGNE1rODJUbFYxWkRKd2JVcGplVWhCTkV3d2RVUk5MMnhxV1VSRGJrZG1SMkZyU2xGRk5WbElNSGRWUWxsQ1FWVlpaa0pKUm10SWQyRkNaM2hyUkdkWU5XeG5XSEJJUVZoamNFSkpjMUpCUkhNOUlnb0tDaTh2THk4dkx5OHZMeTh2THk4dkx5OHZMd292THlCWFJVSlFRVU5MSUVaUFQxUkZVZ292THlBdUwzTnlZeTloYzNObGRITXZhVzFoWjJWekwyeHZZV1JwYm1jdVoybG1DaTh2SUcxdlpIVnNaU0JwWkNBOUlFWTNUazhLTHk4Z2JXOWtkV3hsSUdOb2RXNXJjeUE5SURFeCI7CiAgfSwKICAxNDI4OiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiOGUyNSIpOwogIH0sCiAgMTUxNjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjYyMjEiKTsKICB9LAogICIxNzVmIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIxOGFmIjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjdiZTMiKTsKICB9LAogICIxYTAyIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIxYWFiIjogZnVuY3Rpb24gKGUsIHQpIHsKICAgIGUuZXhwb3J0cyA9CiAgICAgICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQVJDQU1BQUFEWENCM3FBQUFBT1ZCTVZFVUFBQUJqY0lWamNJVmpjSVZqY0lWamNJVmpjSVZqY0lWamNJVmpjSVZqY0lWamNJVmpjSVZqY0lWamNJVmpjSVZqY0lWamNJVmpjSVhzRktTR0FBQUFFblJTVGxNQU1hdmpXTlFNL1hjQ2JKOG8zcnk3aDRrYU9HT2hBQUFBUkVsRVFWUUkxNDNHT1JMQUlBekFRQUdHQ1ZjTy8vK3h3YmhKbVcwa3ZtTDBOdFZtRGJvRUtNa21GYnB1bmV5VCtVT09UWmk2VFliUEFMRUt5NjM2WU9wMVZuZ0JCZThEMzFxc2Q3MEFBQUFBU1VWT1JLNUNZSUk9IjsKICB9LAogICIxYjYxIjogZnVuY3Rpb24gKGUsIHQpIHsKICAgIGUuZXhwb3J0cyA9CiAgICAgICJkYXRhOmltYWdlL3BuZztiYXNlNjQsYlc5a2RXeGxMbVY0Y0c5eWRITWdQU0FpWkdGMFlUcHBiV0ZuWlM5d2JtYzdZbUZ6WlRZMExHbFdRazlTZHpCTFIyZHZRVUZCUVU1VFZXaEZWV2RCUVVGQ1FVRkJRVUZSUTBGTlFVRkJRVzlNVVRsVVFVRkJRVlJzUWsxV1JWVkJRVUZDVTJGSmVGTmhTWGhUWVVsNFUyRkplRk5oU1hoVFlVbDRVMkZKZUZOaFNYaFRZVWw0VTJGSmVGTmhTWGhUWVVsNFUyRkplRk5oU1hoVFlVbDRVMkZKZUZOaFNYaFRZVWw0VTJGSmVGTmhTWGhUWVVsNFUyRkplRk5oU1hoVFlVbDRVMkZKZW01cVpsTmlRVUZCUVVkWVVsTlViRTFCZG1wQ04wb3lhbTlpZDJKSUsxWlpUbWh3VWs5YVFuRjBkRTR6ZVZKSVlVUnhSa3B1TDBGQlFVRklhRXBTUlVaVlIwNU9iR3BXYzFOM2VVRkpVbUpXUWtWWFVFMVBlVE0zTXpKcVJuZDJhbEk0SzBneFNHOWlRazVoUWtkYWRIRlRWVGREVmxveE0zbENaR0p1Ym5WWE9HUXdiVkV6YTJ3d1UwWlNlWGh2ZEd4TFVXRjBPWFZrYmtOTUswbFhTV1ZuVTFvMWJXeGtVMGhsUW1OVVNWSm1VamhWYURKS1VIZDVSVGhvWjFsNFZuVTVNM2xrYm1ocmJsSnNNRWR5U2lzMU4xcHpXblpRT1U0dlFVeFNiMEZWV1hSMGFIaHFVVUZCUVVGQ1NsSlZOVVZ5YTBwbloyYzlQU0lLQ2dvdkx5OHZMeTh2THk4dkx5OHZMeTh2THk4S0x5OGdWMFZDVUVGRFN5QkdUMDlVUlZJS0x5OGdMaTl6Y21NdllYTnpaWFJ6TDJsdFlXZGxjeTl6WldGeVkyZ3VjRzVuQ2k4dklHMXZaSFZzWlNCcFpDQTlJRTU2Y2tNS0x5OGdiVzlrZFd4bElHTm9kVzVyY3lBOUlERXgiOwogIH0sCiAgIjFjNWMiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjFjOTgiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiNGNlZiIpOwogIH0sCiAgIjFjZDUiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiNDNjNiIpOwogIH0sCiAgIjFkYjYiOiBmdW5jdGlvbiAoZSwgdCkgewogICAgZS5leHBvcnRzID0KICAgICAgImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUJiRWxFUVZRNGphMlV2eXZHVVJUR1A5NlkyQ2hsZXdlVEtCa01ScnRGZnJ6Rm9ONWk4UWNvUlRLWkRBWkpMQVpGNUVlWnZQK0FRWkYzWmNIeW1paktRS2ZPMVhsdjU5NTYzengxdS9kN3pqM1A5OXp6M0hOYkhpNkhTS0JIelMrUnUwUG5EeStzNE5pRWFBOTQxakZ2ZkZQQXU0NE5vRE1PampNY0E4NmNuenpxWEhSOG8wQWxsZUdnZHd3bDhzZ0V2ZllqSnJ4TkJPVndueU5NWlpoRHYvVzFtbmtjV0hVQ1JlVVRYWmNjSWJhQlYrQThaTGdDZkFPSER0a1dNQXUwNnhEUjlwMTlJdVNQY0luS05VOStWYllNWEVmMkVlREkzTk82bUVLQ1RIQU16RGoya2lsQmpLSjNzUU82Z0pwakYxdDNLa2dJcXduZkhIQmdMalc2OXhTWVNNUlVSZDFGUFpxTXRtakRsWW9pK05Lc0t3N1JtNnE4YTF0UGFubVQ2WWdVSk92aDhGallHc3BmbGhva1EyUCtYcDVZbE04bUNPdndINjNYbHlPVXpwQkxheUVxVHdNTFdoWUw2Wm9kYXdpOUhDQUJrOEFBc0F3OEFXdW1SaGZBcHE3WGdic21UdFFBZ0Yrd01rZVk1dXdWWmdBQUFBQkpSVTVFcmtKZ2dnPT0iOwogIH0sCiAgIjFlN2YiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjFlY2YiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiMzFlZCIpOwogIH0sCiAgMjA0NjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIyNGE3IjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogIDI1MTI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCI2YWQ2Iik7CiAgfSwKICAiMjU0YiI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCIyYWUwIik7CiAgfSwKICAiMjkxYyI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCJiNWNlIik7CiAgfSwKICAiMmE0MCI6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICBlLmV4cG9ydHMgPQogICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHZ0FBQUJvQ0FZQUFBQWRITFdoQUFBSnFFbEVRVlI0bk8yZENaQlV4Um5ILy90MmtHakpvUWFQS2dXTVI2eXlSQ3VLYUx4Qk5HVlFFeFN2aWtjMHhydlVpSW9LV3Q2aWlXY3N2Sk5vNGhVU3kyQTg4Y1FrUmloZEZ5azhFTmVqVk5SU0VieUFaYXh2L2IrdDhlMmIzZTU1L2ZYcmVUTy9xbGZBc3RQWGY3cGZkMy85ZmQweTc0R3RFVEREQVd3SVlCai92ZzZmSVFBRzhCa0lvQlZBQkdBUXE3SVl3RW9BblFBK0I3Q0V6MGNBRnZIcEFQQTJnSVVBM2dKUURyRVpTZ0dVQVd6Y0xRQ01BakFTd0pZQU5xTUF0VENvNGpNL05QajhGd0RtQTJnRE1CdkE4d0RtVXVCY3liTUhEUVV3RHNCWUFMc0FXQ1B2eGtqd0dZQ25BVHdHNEFIMk11LzRGbWhOQUljQk9CVEFUL0tvY0FaZUJIQUhuNDk5WmVwRG9CWUFZd0FjQmVDWEFQcHJaNmpNTndEK0JlQW1BRS93WGFkR3BKaTJ2TjhPNTlndXc4UkJCUkFIck1NRTF1bFZBTDhHMEU4ck13MkJwTWZzUjJIK0RPREhDbm1Fd3NZQWJnUHdHb0NEV1hlbnVCWm9Fd0N6QUV4bjRSc0ZXUUxjQ2VCWnpqNmQ0VW9nK2VhY3hHbnFEZzBrVEpLZkFuZ0J3Q211MnRaRklodHdQTDRXd0dvTzBxdDNWZ1Z3RmR0a1dOYTZaQlZvVjA0L3h4U2lhZDB5bXIwcFU5dGtFVWhtTDQ4Q1dFdXhrdldPclBzZUJ2Q2JXdXRScTBDbkFyaFZjM3BaSUVwY001MVJTNVZxRVVqRXVWSmpTbGxncEsybUFqamR0b3EyQWgwQjRBK04zdG9aRUpHT3NmbTRqVUR5MHJ1eDJYTXlJVzEzUGR2U0NGT0JaTHA0TjRCVndxdHozU0cycTMvUXp0VW5KZ0tWdUVvZTB1Z3Q2NURCL01MM09ja3lFV2d5VjhoTjNMSXRnSE96Q3JRNWdMT2F3cWh4SnEzSFZlbE5JSG1oVFd1K2QxVHAxOWZFcXplQnhHU3dVMzNWMTRwckFJemcrUVhaZVorU1V6bEcwVlNSU2pXTGFvbkdxQjk1TGFvL3hKQjRlMHB1Y21EbEdRQS84RndlT2Urd0tZQmx5ZitvMW9NT0xiQTQwNnVJQTU3bzJaNW1iWjhNNDVHQUhxUUpGQlY4WW5COUgvOHZOcTN0Y2hCcFlwb2VhUUw5akpiUm9yTFlvRjV0bkFaLzViRU5aTVRhTy9uRE5JRk84bE9lM0RBMXhiZXpKL2tVNmNUa0Q1SUN5V0hDUGZ5Vkp4Y21XbVFhaS9TMXA0S09TVnBoa3dJZG9ud1VLd1JrNlBxOVJUbmFPUlgySVpLc2gzNVYrWU9rR0JNOEZDSUVUZ053c1VVNTJpbnNseDdLZmtEbFB5b0ZHbHFIeDNHemNEYUFTeXcrUDVjOTZRdmxjc25pZWFQNEg1VUM5WmhCTkFDeW5MalVvcG92YzUya1BYSG8xcUpTb0xIS21ZYktKQURYV1pRdDdrbWF3OTN1OFY5aWdjU0l0TE5paHFFajA5dXJMZnlsNXZLZHRGU3BYanZIWllrTE5FTEpQK2NLQURNQWZLQ1F0a3RhNmJsbnd6eE93WjhEc0xyajhvamoybFlBNXNRQ2pYU2NRWmxPV2JNY3A2dkpLeldrUFk5SG5kc1V6bXFJbldoT1BNUnQ2emp4S1hVbVRoYmFhWGh6amZTZzduZFFyMWE5R3ZoVGVPMm95cTBLaVhkcEVyRnJPbldaTU55UUxCS2ZLTlJGQkdxSnVFQjEvWkpydEJOQTZ5dWtLZUVGaGtlVnExYUhuS0tRWnNpY28xUzJUU01YUGl3cG5FeXpjaU1nb1FTT1Zhcm4wSktTUUtCLzZtaWFtQmZ4WjZIdWxQZm5ZY0ovQTFoaDhiazl1TTdUWXBnSXRKNWlCb2Z4cVFjdVlzQUtVMlJyN0JIbGVxMVhhaDdwN1dJS0JUSmxMSjNYdEJsU01veGxVMlJPdHpUZytSSkhXS2ZFc2JkUm1XanA3elRHb3pqQ2dJano3WkNRVmZtZTNCL2NCOERmbGNwMldnM2l6UFRjVHF1WEZCYXBXWkF6RVhjbFBqK0RqV2t6RFBYRkpMcHhtakk2QjNHRWdWRkFNZU1PVEJFblJyN3BEenJLWnlaZEVVMlJVQU9QTzhyYmxwWW9FSmRHQ2JSMGJ4Ky9jNVdqdkd4NnptNEFublNVYnkwTUxBWHdEanJRUUJ3NE5QcVpwck1ydzQzbFN0N0Qyd1R1Tkppd3RxTThUZExaSmVlZTAwM0VZS3Q1WUNPT2NJS2pNdlk0WHB0QWZLS2V5cU5CMG9pMEl3Wlc0UUJMY1k0RU1ONVIzdU80bVp2R252UVBDb1VsSmN2TlFSZnNUemQwVTQ1UXNGaktDWjRkQWR6QWQ5SUEra1FkSDRveVpHV0pSNGQ4QlVRU3Q4cC9XdnkrT0RYZG9sU1cvZm1Fek9jUkEzLzc0QmVXNHZ4V1VaeDZZYWt2Z2ZZRmNML0Y3LytPM3MrTnpoSVI2RVBsUnRpSFlZeE5pQmc0b3htdzZUcytMQ2tINmQ3WDB1TFl3bk5tdTNsMG1yS2x6Sm52dWdCK2JodTl5cEl1Z2Q1WFNueThSYytKNmF6aE0za3lnM3Q3V2p2dWl5TGVBT0lhQ1JKeFgvRE42NGJwam5mYUszbExCSHBUSVdHYkRja2ljTFZTSFRvaTNwL2ptdmNhUnBydjBIcE5MSWdZaHNTMVcxOW9WODFvTTBnaGZka2pYUmh4VmxLTDYwVnZhTTVzUWtUamFKbk1ac3Z4UWNLWEhDZCtQb0NnNzE1enlDZzZxcmxHZkk2NjdVSFBjOGZZRlNMOGYraUIxbWFSWmtTL0dGazhMdzlQaXk3S1hLOE41dDZpalR1L0RWMmRKaFpvamtJR2NwejJmd3luK2FMaFoxcG9KNXBFZ1hLL1F5NkZXQ0R0a0dWZFgrdzRYbHdyZHhRMHpzZ3RZMDh5RlVtNE9VczQvUUt3bE5jS0xJL2ZRWjJLTG9zU1V2UC9sdStrb3dGY3JsU2VlbUJXUE1SWGVodG9udnZxeCtIT1JpVHgrN1NKQkZJa3VvOTVWUXFrdlFjbUl2M1hVaVJ4akxwQXNVeWgwbTJhcVJTb2czTnZUVmFwb1NlZHB6aFRDaEc1KzI5QlhLNmtRMVcxazUwdTZjZmdEOXRZcERrNWhETnFudmllQmttQi91YnBsRStKUGNrbWdJYldqbkZJbEtsQk4wbUIzdUhkYXo0b2NURnIycE02aXFaR0NrOGxONi9UZkVhbmVTeFFQTnlaOUNTTkRjblErR095UEdrQ3phaDhTWG1nMVhDNGM3a1ZGU0lkYVRQcE5JRldXcnBudUtDVlUvQnFJZEhHYy9GYVpLYW1IU0t0NWhaL2V3NWp2cnlUbmdad0lVUFRpTmZGQ0pyUGJVNmkxaVB2OHNycEh2UjJHLzVCbnFiZFRhcmZKZEZyWUlsNytBSnZvb3RZRXY1YUxZZmVCQ3JUTWhxcVhhWUlyR0FiVjExNzloV2FwYjNCZDVXMXVaTFhTVmZGSkhiT0JiUzRObkhMQ3lhWFNwa0l0SXczUkRWYWtENU5Gbk1TMXVOQ3B5U20wYWNXMHBjbVJCTjB2ZEhKTC96ckp1VzJDUTgyazFmWGxCdWlHZldRTm56SU5IWGIrRzNUbXRkMlptS0s3VjVuTFFIMnBsS2taayt5WTdKbHlMTXVhbzJBZUJtQTQ1cnZKQ002T2F6VlpCWE9FcUpTWEJUM0F2QnBoalNLem1MZVpOTERqR0JLMWhpaWp6SnF2Y2JCeDNvbnZxalFlRUtRaG9zZ3J3dDRldlRTSEdJdWhNZ0tudFdXdzVxdlpTMmZxeWk4eTNtajFjZ0czMkNkemNQMFo3aTZoOVYxbU9RMjlxWkRsRndyUTJVK0YvS2ordHBiczBVampuV1pkcVJOdUZOYjVNTWVIUXhWc3dXTmlzNlhIcHFCeG1XZjZTWmVMTHNmajdNV1llMVVacWl5Q2Z3Uy9rVnp1ZUVqWGx3blE4RElNNXhCaXlTSTMrWWU4bmJKZkk0TWR3SjR3MWVtdlptOHRkbUlnUzdHTXZKVVNNRnRRYi9kV2V6NTk1dHVicm9tVDRFcUtmRUE0elpjTzR6Z3daSCtudkpmeGg3U3pqWGRiUDZadXpVNWxJaS9Lemc5cjV5aXkxR3NEZmtPazZGUkxnR1I4Q3R5bFlFODRrbStHaCtKOTVhc2l3eXRFaWhLN2p5VjNpQTdIaC9SVVUzYzVzVzdYVjd5WWtxUko3dzFISUJ2QWV1d3QzQ2xEUnMvQUFBQUFFbEZUa1N1UW1DQyI7CiAgfSwKICAiMmFlMCI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7fSwKICAiMmIyMiI6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICBlLmV4cG9ydHMgPQogICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQlNVbEVRVlE0amEyVXZVcERRUkNGUDRPVmdsVVUwc1ZDN0V4aGt5SldJb0phaVdLZlNteDlBUEVCZklDRUNCWUtpcFpCRUR0L0hrQ05oWVYxOEtjU0ZLMlVJN093amhiM21qM05Yczd1ZkhkMlozZElyYjdiOXVSZnlCS3dETXdDTldESS9CZmdBamdCRG9HdUQvVEFRV0FUV00rWStCYXdBYndHb3hCTmpnR2RIREJzYmNkaWZ3QzF4VXVnbkFNV1ZMYllVZ3c4QUliL0FRdFNiQ3NBWjRDcEhtQkJjMklKV0U4QUM2b0xPTzNNZmFEcHZLYjVzVlRoWTUrbHJzMW5aRHdCSS9aOUJVd0ExMERGdkVjN0w0SG16WXZqNlhkLzBPSUY0TU5nMktoekhvZ0twOHRlQmNiOW5wWGhXYUtpU09jNnc2TkVNR2xQd0czZ0xRRk03M3kzWU85d0pRRndTYXp3VXRyQWFnOHd4WjdpcXR3QTNvR2RIQ0JkczBWcmFkK0t1NDEwbnhHa3U2bXNSbU9ZejlCTGhWb0Q3b0NpVFQ0RE4zSC84L0xBQnh0L05jNU1BcjRBR21ZL1pNSEtIVzRBQUFBQVNVVk9SSzVDWUlJPSI7CiAgfSwKICAiMmUwNyI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7fSwKICAiMmUyNyI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCJmYjhmIik7CiAgfSwKICAzMDY3OiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgMzEyMzogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIzMWVkIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIzMmJhIjogZnVuY3Rpb24gKGUsIHQpIHsKICAgIGUuZXhwb3J0cyA9CiAgICAgICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFCeUVsRVFWUTRqWlhWell1T1VSZ0c4SitabDFJMEMxL2xvMWN2eWNkS1dKaW1aTVVDa1Noa1pVTXMrQjhrczBNc1dOcHFKQ3d0Zld5czFHQ0Jtc1RDbENpaDhaRnUzVWZQUEQzdk0rT3EwOU01NXo3WHVjNTE3bk0vYzhidmIxRkREL3N3Z3EzbzF1WW44QXlQY0F0dnFwTlZ3bFc0Z3YzMUhXYkFQWnpHMndqclpPd0tQTWVDL3lRTDdNVk9iQXpTUW5nNXlYN2dHRDYyRUp6Q3dkcFlyTDBXVm5WU1hRbDRoZHY0MVVLNHRvR3dLTzBGNGFISzRBYjh4TzhXd29HV3ViOEtSL3BNZnMxV3NMaUZxR0RIUUtaR3dZdThxRUVzeExKS0c4eDJzb1Z3Y3lmVHBTRDhPWXJ2K0pZdE1EOWJZSGNMWWJkVDgyUXViczdpYUgzUlpuQWRUekNhdDdrU2E3SS9EZkZTcGxKWkU4TFRYZVVWOU1GUStocjUyUTJGN3pOdUlsVlVFV20wTGhjdHlYZStIZk1xTVo5VDZXb3NEY0tuT1hFRXd6R0ljL2lTNHcvd0NSL3dHaGRhMUU0RzRjUHNQTWJaZkhhWHNBaUhjUU5qcVdJNDMrMVVQOGJ3c0pjN0Y0UnZKeHFPUHlzTVpEMGJxL2tXYXErbmQwMFlTaStQWTAvV2czOEs0eHNETHh2S1YvaDRIdVBZaEcxOWltN0V4VWtuUy9sNmgvVzRXaXV3c2NIRkdZNTZCMmVDTERxRnNKQWVhUGdGTEsvbGFhUlhaRVpjNXQxcHZ3RDhBYzBQV2hSMFpPSHFBQUFBQUVsRlRrU3VRbUNDIjsKICB9LAogICIzOGIzIjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjJlMDciKTsKICB9LAogICIzYThmIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogICIzYjZiIjogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogIDQyMDE6IGZ1bmN0aW9uIChlLCB0LCBhKSB7fSwKICAiNDNjNiI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7fSwKICAiNDRmYSI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCJiYWRlIik7CiAgfSwKICA0NTEwOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjQ1M2QiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiYjkzOSIpOwogIH0sCiAgIjQ2YjkiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiNjFkYSIpOwogIH0sCiAgIjQ2ZTYiOiBmdW5jdGlvbiAoZSwgdCkgewogICAgZS5leHBvcnRzID0KICAgICAgImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQklBQUFBU0NBTUFBQUJoRUg1bEFBQUFNMUJNVkVVQUFBQlZvR2RWb0dkVm9HZFZvR2RWb0dkVm9HZFZvR2RWb0dkVm9HZFZvR2RWb0dkVm9HZFZvR2RWb0dkVm9HZFZvR2NSZFpwNkFBQUFFSFJTVGxNQXp3NkRSU2dCUHAzbTFNUXAwbW9qcXNWa1R3QUFBSEJKUkVGVUdOTnRrRnNTaERBSUJDZFppQkQzTWZjLzdhWlFNWmIyWnhjVU15QVFjOUpOY0tBcmQxWkZzSEJpaVJsZVVLQ1ZxeW9Od2duN2tBS2J6QXZmb2VHVGlVdU91TzFwQnFGK3RaK0dzZGhyN1drY3hzMWxZb053YzlsQkhxTGVDcjBmYWdkYWNrdXgwNDRYTmd6K29PWU9VYVYxRGQ4QUFBQUFTVVZPUks1Q1lJST0iOwogIH0sCiAgIjQ3MGYiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiODk1NyIpOwogIH0sCiAgIjQ5YzYiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiYjI4ZiIpOwogIH0sCiAgIjRhMTAiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiNmFjYyIpOwogIH0sCiAgIjRhNDAiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiOGVmZSIpOwogIH0sCiAgIjRhNDQiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjRhOWMiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiNTE2MSIpOwogIH0sCiAgIjRiOTQiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjRjNWEiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjRjZWYiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjRkMGUiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgNTE0MTogZnVuY3Rpb24gKGUsIHQsIGEpIHt9LAogIDUxNjE6IGZ1bmN0aW9uIChlLCB0LCBhKSB7fSwKICAiNTFjNCI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCIzMTIzIik7CiAgfSwKICAiNTI0YSI6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICBlLmV4cG9ydHMgPQogICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBNEFBQUFPQ0FNQUFBQW9sdDNqQUFBQVMxQk1WRVVBQUFETjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVUTjF1VE4xdVROMXVSMHRGc09BQUFBR0hSU1RsTUFZUUpRZ212WG51c1ZjcnlzOGtPeDVIbTRaOTdLajF3YXJjcGpBQUFBYWtsRVFWUUkxMldPU1E2QUlCUkRQeUtUT0RHby8vNG50WUFrR3J0cDM2Sk42YWZoc3Q2NVRjdUdJeithS2s0ZFJVWFQ4UVNzTTRKWEtjTE1TaGFXQTRvN3drNE1HYzJzYTRjV1JzVDRtQkVXa2g0MksxVW1vbnd2R3lwS0hkWDNWV2lmaGQyY082d1lpRzRFSFFwNmxaRC9LZ0FBQUFCSlJVNUVya0pnZ2c9PSI7CiAgfSwKICAiNTJkMSI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCIwYmU5Iik7CiAgfSwKICAiNTNhNiI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCI0YTQ0Iik7CiAgfSwKICA1NDc4OiBmdW5jdGlvbiAoZSwgdCkgewogICAgKGZ1bmN0aW9uIChlKSB7CiAgICAgIGUuZm4ucXJjb2RlID0gZnVuY3Rpb24gKHQpIHsKICAgICAgICB2YXIgYTsKICAgICAgICBmdW5jdGlvbiBpKGUpIHsKICAgICAgICAgICh0aGlzLm1vZGUgPSBhKSwgKHRoaXMuZGF0YSA9IGUpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBuKGUsIHQpIHsKICAgICAgICAgICh0aGlzLnR5cGVOdW1iZXIgPSBlKSwKICAgICAgICAgICAgKHRoaXMuZXJyb3JDb3JyZWN0TGV2ZWwgPSB0KSwKICAgICAgICAgICAgKHRoaXMubW9kdWxlcyA9IG51bGwpLAogICAgICAgICAgICAodGhpcy5tb2R1bGVDb3VudCA9IDApLAogICAgICAgICAgICAodGhpcy5kYXRhQ2FjaGUgPSBudWxsKSwKICAgICAgICAgICAgKHRoaXMuZGF0YUxpc3QgPSBbXSk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHMoZSwgdCkgewogICAgICAgICAgaWYgKHZvaWQgMCA9PSBlLmxlbmd0aCkgdGhyb3cgRXJyb3IoZS5sZW5ndGggKyAiLyIgKyB0KTsKICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgZS5sZW5ndGggJiYgMCA9PSBlW2FdOyApIGErKzsKICAgICAgICAgIHRoaXMubnVtID0gQXJyYXkoZS5sZW5ndGggLSBhICsgdCk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGUubGVuZ3RoIC0gYTsgaSsrKSB0aGlzLm51bVtpXSA9IGVbaSArIGFdOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBvKGUsIHQpIHsKICAgICAgICAgICh0aGlzLnRvdGFsQ291bnQgPSBlKSwgKHRoaXMuZGF0YUNvdW50ID0gdCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHIoKSB7CiAgICAgICAgICAodGhpcy5idWZmZXIgPSBbXSksICh0aGlzLmxlbmd0aCA9IDApOwogICAgICAgIH0KICAgICAgICAoaS5wcm90b3R5cGUgPSB7CiAgICAgICAgICBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGg7CiAgICAgICAgICB9LAogICAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyB0IDwgdGhpcy5kYXRhLmxlbmd0aDsgdCsrKQogICAgICAgICAgICAgIGUucHV0KHRoaXMuZGF0YS5jaGFyQ29kZUF0KHQpLCA4KTsKICAgICAgICAgIH0sCiAgICAgICAgfSksCiAgICAgICAgICAobi5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIGFkZERhdGE6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdGhpcy5kYXRhTGlzdC5wdXNoKG5ldyBpKGUpKSwgKHRoaXMuZGF0YUNhY2hlID0gbnVsbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGlzRGFyazogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAwID4gZSB8fAogICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVDb3VudCA8PSBlIHx8CiAgICAgICAgICAgICAgICAwID4gdCB8fAogICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVDb3VudCA8PSB0CiAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoZSArICIsIiArIHQpOwogICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZHVsZXNbZV1bdF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldE1vZHVsZUNvdW50OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kdWxlQ291bnQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1ha2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBpZiAoMSA+IHRoaXMudHlwZU51bWJlcikgewogICAgICAgICAgICAgICAgdmFyIGUgPSAxOwogICAgICAgICAgICAgICAgZm9yIChlID0gMTsgNDAgPiBlOyBlKyspIHsKICAgICAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IG8uZ2V0UlNCbG9ja3MoZSwgdGhpcy5lcnJvckNvcnJlY3RMZXZlbCksCiAgICAgICAgICAgICAgICAgICAgICBhID0gbmV3IHIoKSwKICAgICAgICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgbiA8IHQubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIG4rKwogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgaSArPSB0W25dLmRhdGFDb3VudDsKICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IHRoaXMuZGF0YUxpc3QubGVuZ3RoOyBuKyspCiAgICAgICAgICAgICAgICAgICAgKHQgPSB0aGlzLmRhdGFMaXN0W25dKSwKICAgICAgICAgICAgICAgICAgICAgIGEucHV0KHQubW9kZSwgNCksCiAgICAgICAgICAgICAgICAgICAgICBhLnB1dCh0LmdldExlbmd0aCgpLCBsLmdldExlbmd0aEluQml0cyh0Lm1vZGUsIGUpKSwKICAgICAgICAgICAgICAgICAgICAgIHQud3JpdGUoYSk7CiAgICAgICAgICAgICAgICAgIGlmIChhLmdldExlbmd0aEluQml0cygpIDw9IDggKiBpKSBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMudHlwZU51bWJlciA9IGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRoaXMubWFrZUltcGwoITEsIHRoaXMuZ2V0QmVzdE1hc2tQYXR0ZXJuKCkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBtYWtlSW1wbDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICAodGhpcy5tb2R1bGVDb3VudCA9IDQgKiB0aGlzLnR5cGVOdW1iZXIgKyAxNyksCiAgICAgICAgICAgICAgICAodGhpcy5tb2R1bGVzID0gQXJyYXkodGhpcy5tb2R1bGVDb3VudCkpOwogICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgdGhpcy5tb2R1bGVDb3VudDsgYSsrKSB7CiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbYV0gPSBBcnJheSh0aGlzLm1vZHVsZUNvdW50KTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb2R1bGVDb3VudDsgaSsrKQogICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXNbYV1baV0gPSBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0aGlzLnNldHVwUG9zaXRpb25Qcm9iZVBhdHRlcm4oMCwgMCksCiAgICAgICAgICAgICAgICB0aGlzLnNldHVwUG9zaXRpb25Qcm9iZVBhdHRlcm4odGhpcy5tb2R1bGVDb3VudCAtIDcsIDApLAogICAgICAgICAgICAgICAgdGhpcy5zZXR1cFBvc2l0aW9uUHJvYmVQYXR0ZXJuKDAsIHRoaXMubW9kdWxlQ291bnQgLSA3KSwKICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBQb3NpdGlvbkFkanVzdFBhdHRlcm4oKSwKICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBUaW1pbmdQYXR0ZXJuKCksCiAgICAgICAgICAgICAgICB0aGlzLnNldHVwVHlwZUluZm8oZSwgdCksCiAgICAgICAgICAgICAgICA3IDw9IHRoaXMudHlwZU51bWJlciAmJiB0aGlzLnNldHVwVHlwZU51bWJlcihlKSwKICAgICAgICAgICAgICAgIG51bGwgPT0gdGhpcy5kYXRhQ2FjaGUgJiYKICAgICAgICAgICAgICAgICAgKHRoaXMuZGF0YUNhY2hlID0gbi5jcmVhdGVEYXRhKAogICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZU51bWJlciwKICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yQ29ycmVjdExldmVsLAogICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUxpc3QKICAgICAgICAgICAgICAgICAgKSksCiAgICAgICAgICAgICAgICB0aGlzLm1hcERhdGEodGhpcy5kYXRhQ2FjaGUsIHQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXR1cFBvc2l0aW9uUHJvYmVQYXR0ZXJuOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIGZvciAodmFyIGEgPSAtMTsgNyA+PSBhOyBhKyspCiAgICAgICAgICAgICAgICBpZiAoISgtMSA+PSBlICsgYSB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IGUgKyBhKSkKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IC0xOyA3ID49IGk7IGkrKykKICAgICAgICAgICAgICAgICAgICAtMSA+PSB0ICsgaSB8fAogICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVDb3VudCA8PSB0ICsgaSB8fAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMubW9kdWxlc1tlICsgYV1bdCArIGldID0KICAgICAgICAgICAgICAgICAgICAgICAgKDAgPD0gYSAmJiA2ID49IGEgJiYgKDAgPT0gaSB8fCA2ID09IGkpKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAoMCA8PSBpICYmIDYgPj0gaSAmJiAoMCA9PSBhIHx8IDYgPT0gYSkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICgyIDw9IGEgJiYgNCA+PSBhICYmIDIgPD0gaSAmJiA0ID49IGkpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0QmVzdE1hc2tQYXR0ZXJuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IDAsIHQgPSAwLCBhID0gMDsgOCA+IGE7IGErKykgewogICAgICAgICAgICAgICAgdGhpcy5tYWtlSW1wbCghMCwgYSk7CiAgICAgICAgICAgICAgICB2YXIgaSA9IGwuZ2V0TG9zdFBvaW50KHRoaXMpOwogICAgICAgICAgICAgICAgKDAgPT0gYSB8fCBlID4gaSkgJiYgKChlID0gaSksICh0ID0gYSkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY3JlYXRlTW92aWVDbGlwOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICBlID0gZS5jcmVhdGVFbXB0eU1vdmllQ2xpcCh0LCBhKSwgdGhpcy5tYWtlKCksIHQgPSAwOwogICAgICAgICAgICAgICAgdCA8IHRoaXMubW9kdWxlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICB0KysKICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGEgPSAxICogdDsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tb2R1bGVzW3RdLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHZhciBuID0gMSAqIGk7CiAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc1t0XVtpXSAmJgogICAgICAgICAgICAgICAgICAgIChlLmJlZ2luRmlsbCgwLCAxMDApLAogICAgICAgICAgICAgICAgICAgIGUubW92ZVRvKG4sIGEpLAogICAgICAgICAgICAgICAgICAgIGUubGluZVRvKG4gKyAxLCBhKSwKICAgICAgICAgICAgICAgICAgICBlLmxpbmVUbyhuICsgMSwgYSArIDEpLAogICAgICAgICAgICAgICAgICAgIGUubGluZVRvKG4sIGEgKyAxKSwKICAgICAgICAgICAgICAgICAgICBlLmVuZEZpbGwoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZXR1cFRpbWluZ1BhdHRlcm46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBlID0gODsgZSA8IHRoaXMubW9kdWxlQ291bnQgLSA4OyBlKyspCiAgICAgICAgICAgICAgICBudWxsID09IHRoaXMubW9kdWxlc1tlXVs2XSAmJiAodGhpcy5tb2R1bGVzW2VdWzZdID0gMCA9PSBlICUgMik7CiAgICAgICAgICAgICAgZm9yIChlID0gODsgZSA8IHRoaXMubW9kdWxlQ291bnQgLSA4OyBlKyspCiAgICAgICAgICAgICAgICBudWxsID09IHRoaXMubW9kdWxlc1s2XVtlXSAmJiAodGhpcy5tb2R1bGVzWzZdW2VdID0gMCA9PSBlICUgMik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldHVwUG9zaXRpb25BZGp1c3RQYXR0ZXJuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgIHZhciBlID0gbC5nZXRQYXR0ZXJuUG9zaXRpb24odGhpcy50eXBlTnVtYmVyKSwgdCA9IDA7CiAgICAgICAgICAgICAgICB0IDwgZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0KysKICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspIHsKICAgICAgICAgICAgICAgICAgdmFyIGkgPSBlW3RdLAogICAgICAgICAgICAgICAgICAgIG4gPSBlW2FdOwogICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSB0aGlzLm1vZHVsZXNbaV1bbl0pCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyA9IC0yOyAyID49IHM7IHMrKykKICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG8gPSAtMjsgMiA+PSBvOyBvKyspCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlc1tpICsgc11bbiArIG9dID0KICAgICAgICAgICAgICAgICAgICAgICAgICAtMiA9PSBzIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9PSBzIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgLTIgPT0gbyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT0gbyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICgwID09IHMgJiYgMCA9PSBvKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2V0dXBUeXBlTnVtYmVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICB2YXIgdCA9IGwuZ2V0QkNIVHlwZU51bWJlcih0aGlzLnR5cGVOdW1iZXIpLCBhID0gMDsKICAgICAgICAgICAgICAgIDE4ID4gYTsKICAgICAgICAgICAgICAgIGErKwogICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgdmFyIGkgPSAhZSAmJiAxID09ICgodCA+PiBhKSAmIDEpOwogICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzW01hdGguZmxvb3IoYSAvIDMpXVsKICAgICAgICAgICAgICAgICAgKGEgJSAzKSArIHRoaXMubW9kdWxlQ291bnQgLSA4IC0gMwogICAgICAgICAgICAgICAgXSA9IGk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoYSA9IDA7IDE4ID4gYTsgYSsrKQogICAgICAgICAgICAgICAgKGkgPSAhZSAmJiAxID09ICgodCA+PiBhKSAmIDEpKSwKICAgICAgICAgICAgICAgICAgKHRoaXMubW9kdWxlc1soYSAlIDMpICsgdGhpcy5tb2R1bGVDb3VudCAtIDggLSAzXVsKICAgICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGEgLyAzKQogICAgICAgICAgICAgICAgICBdID0gaSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldHVwVHlwZUluZm86IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgIHZhciBhID0gbC5nZXRCQ0hUeXBlSW5mbygodGhpcy5lcnJvckNvcnJlY3RMZXZlbCA8PCAzKSB8IHQpLAogICAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICAgIDE1ID4gaTsKICAgICAgICAgICAgICAgIGkrKwogICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgdmFyIG4gPSAhZSAmJiAxID09ICgoYSA+PiBpKSAmIDEpOwogICAgICAgICAgICAgICAgNiA+IGkKICAgICAgICAgICAgICAgICAgPyAodGhpcy5tb2R1bGVzW2ldWzhdID0gbikKICAgICAgICAgICAgICAgICAgOiA4ID4gaQogICAgICAgICAgICAgICAgICA/ICh0aGlzLm1vZHVsZXNbaSArIDFdWzhdID0gbikKICAgICAgICAgICAgICAgICAgOiAodGhpcy5tb2R1bGVzW3RoaXMubW9kdWxlQ291bnQgLSAxNSArIGldWzhdID0gbik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvciAoaSA9IDA7IDE1ID4gaTsgaSsrKQogICAgICAgICAgICAgICAgKG4gPSAhZSAmJiAxID09ICgoYSA+PiBpKSAmIDEpKSwKICAgICAgICAgICAgICAgICAgOCA+IGkKICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLm1vZHVsZXNbOF1bdGhpcy5tb2R1bGVDb3VudCAtIGkgLSAxXSA9IG4pCiAgICAgICAgICAgICAgICAgICAgOiA5ID4gaQogICAgICAgICAgICAgICAgICAgID8gKHRoaXMubW9kdWxlc1s4XVsxNSAtIGkgLSAxICsgMV0gPSBuKQogICAgICAgICAgICAgICAgICAgIDogKHRoaXMubW9kdWxlc1s4XVsxNSAtIGkgLSAxXSA9IG4pOwogICAgICAgICAgICAgIHRoaXMubW9kdWxlc1t0aGlzLm1vZHVsZUNvdW50IC0gOF1bOF0gPSAhZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbWFwRGF0YTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgdmFyIGEgPSAtMSwKICAgICAgICAgICAgICAgICAgaSA9IHRoaXMubW9kdWxlQ291bnQgLSAxLAogICAgICAgICAgICAgICAgICBuID0gNywKICAgICAgICAgICAgICAgICAgcyA9IDAsCiAgICAgICAgICAgICAgICAgIG8gPSB0aGlzLm1vZHVsZUNvdW50IC0gMTsKICAgICAgICAgICAgICAgIDAgPCBvOwogICAgICAgICAgICAgICAgbyAtPSAyCiAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZm9yICg2ID09IG8gJiYgby0tOyA7ICkgewogICAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gMDsgMiA+IHI7IHIrKykKICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSB0aGlzLm1vZHVsZXNbaV1bbyAtIHJdKSB7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9ICExOwogICAgICAgICAgICAgICAgICAgICAgcyA8IGUubGVuZ3RoICYmIChjID0gMSA9PSAoKGVbc10gPj4+IG4pICYgMSkpLAogICAgICAgICAgICAgICAgICAgICAgICBsLmdldE1hc2sodCwgaSwgbyAtIHIpICYmIChjID0gIWMpLAogICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tb2R1bGVzW2ldW28gLSByXSA9IGMpLAogICAgICAgICAgICAgICAgICAgICAgICBuLS0sCiAgICAgICAgICAgICAgICAgICAgICAgIC0xID09IG4gJiYgKHMrKywgKG4gPSA3KSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoKChpICs9IGEpLCAwID4gaSB8fCB0aGlzLm1vZHVsZUNvdW50IDw9IGkpKSB7CiAgICAgICAgICAgICAgICAgICAgKGkgLT0gYSksIChhID0gLWEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KSwKICAgICAgICAgIChuLlBBRDAgPSAyMzYpLAogICAgICAgICAgKG4uUEFEMSA9IDE3KSwKICAgICAgICAgIChuLmNyZWF0ZURhdGEgPSBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgICAgICAgICB0ID0gby5nZXRSU0Jsb2NrcyhlLCB0KTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IG5ldyByKCksIHMgPSAwOyBzIDwgYS5sZW5ndGg7IHMrKykgewogICAgICAgICAgICAgIHZhciBjID0gYVtzXTsKICAgICAgICAgICAgICBpLnB1dChjLm1vZGUsIDQpLAogICAgICAgICAgICAgICAgaS5wdXQoYy5nZXRMZW5ndGgoKSwgbC5nZXRMZW5ndGhJbkJpdHMoYy5tb2RlLCBlKSksCiAgICAgICAgICAgICAgICBjLndyaXRlKGkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAocyA9IGUgPSAwOyBzIDwgdC5sZW5ndGg7IHMrKykgZSArPSB0W3NdLmRhdGFDb3VudDsKICAgICAgICAgICAgaWYgKGkuZ2V0TGVuZ3RoSW5CaXRzKCkgPiA4ICogZSkKICAgICAgICAgICAgICB0aHJvdyBFcnJvcigKICAgICAgICAgICAgICAgICJjb2RlIGxlbmd0aCBvdmVyZmxvdy4gKCIgKwogICAgICAgICAgICAgICAgICBpLmdldExlbmd0aEluQml0cygpICsKICAgICAgICAgICAgICAgICAgIj4iICsKICAgICAgICAgICAgICAgICAgOCAqIGUgKwogICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgIGkuZ2V0TGVuZ3RoSW5CaXRzKCkgKyA0IDw9IDggKiBlICYmIGkucHV0KDAsIDQpOwogICAgICAgICAgICAgIDAgIT0gaS5nZXRMZW5ndGhJbkJpdHMoKSAlIDg7CgogICAgICAgICAgICApCiAgICAgICAgICAgICAgaS5wdXRCaXQoITEpOwogICAgICAgICAgICBmb3IgKDsgIShpLmdldExlbmd0aEluQml0cygpID49IDggKiBlKTsgKSB7CiAgICAgICAgICAgICAgaWYgKChpLnB1dChuLlBBRDAsIDgpLCBpLmdldExlbmd0aEluQml0cygpID49IDggKiBlKSkgYnJlYWs7CiAgICAgICAgICAgICAgaS5wdXQobi5QQUQxLCA4KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbi5jcmVhdGVCeXRlcyhpLCB0KTsKICAgICAgICAgIH0pLAogICAgICAgICAgKG4uY3JlYXRlQnl0ZXMgPSBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgIHZhciBhID0gMCwKICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgbiA9IDAsCiAgICAgICAgICAgICAgICBvID0gQXJyYXkodC5sZW5ndGgpLAogICAgICAgICAgICAgICAgciA9IEFycmF5KHQubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGMgPSAwOwogICAgICAgICAgICAgIGMgPCB0Lmxlbmd0aDsKICAgICAgICAgICAgICBjKysKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgdmFyIGQgPSB0W2NdLmRhdGFDb3VudCwKICAgICAgICAgICAgICAgIHUgPSB0W2NdLnRvdGFsQ291bnQgLSBkOwogICAgICAgICAgICAgIChpID0gTWF0aC5tYXgoaSwgZCkpLCAobiA9IE1hdGgubWF4KG4sIHUpKTsKICAgICAgICAgICAgICBvW2NdID0gQXJyYXkoZCk7CiAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBvW2NdLmxlbmd0aDsgbSsrKQogICAgICAgICAgICAgICAgb1tjXVttXSA9IDI1NSAmIGUuYnVmZmVyW20gKyBhXTsKICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgYSArPSBkLAogICAgICAgICAgICAgICAgICBtID0gbC5nZXRFcnJvckNvcnJlY3RQb2x5bm9taWFsKHUpLAogICAgICAgICAgICAgICAgICBkID0gbmV3IHMob1tjXSwgbS5nZXRMZW5ndGgoKSAtIDEpLm1vZChtKSwKICAgICAgICAgICAgICAgICAgcltjXSA9IEFycmF5KG0uZ2V0TGVuZ3RoKCkgLSAxKSwKICAgICAgICAgICAgICAgICAgbSA9IDA7CiAgICAgICAgICAgICAgICBtIDwgcltjXS5sZW5ndGg7CiAgICAgICAgICAgICAgICBtKysKICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAodSA9IG0gKyBkLmdldExlbmd0aCgpIC0gcltjXS5sZW5ndGgpLAogICAgICAgICAgICAgICAgICAocltjXVttXSA9IDAgPD0gdSA/IGQuZ2V0KHUpIDogMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yIChtID0gYyA9IDA7IG0gPCB0Lmxlbmd0aDsgbSsrKSBjICs9IHRbbV0udG90YWxDb3VudDsKICAgICAgICAgICAgZm9yIChhID0gQXJyYXkoYyksIG0gPSBkID0gMDsgbSA8IGk7IG0rKykKICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgdC5sZW5ndGg7IGMrKykKICAgICAgICAgICAgICAgIG0gPCBvW2NdLmxlbmd0aCAmJiAoYVtkKytdID0gb1tjXVttXSk7CiAgICAgICAgICAgIGZvciAobSA9IDA7IG0gPCBuOyBtKyspCiAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IHQubGVuZ3RoOyBjKyspCiAgICAgICAgICAgICAgICBtIDwgcltjXS5sZW5ndGggJiYgKGFbZCsrXSA9IHJbY11bbV0pOwogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICAgIH0pLAogICAgICAgICAgKGEgPSA0KTsKICAgICAgICBmb3IgKAogICAgICAgICAgdmFyIGwgPSB7CiAgICAgICAgICAgICAgUEFUVEVSTl9QT1NJVElPTl9UQUJMRTogWwogICAgICAgICAgICAgICAgW10sCiAgICAgICAgICAgICAgICBbNiwgMThdLAogICAgICAgICAgICAgICAgWzYsIDIyXSwKICAgICAgICAgICAgICAgIFs2LCAyNl0sCiAgICAgICAgICAgICAgICBbNiwgMzBdLAogICAgICAgICAgICAgICAgWzYsIDM0XSwKICAgICAgICAgICAgICAgIFs2LCAyMiwgMzhdLAogICAgICAgICAgICAgICAgWzYsIDI0LCA0Ml0sCiAgICAgICAgICAgICAgICBbNiwgMjYsIDQ2XSwKICAgICAgICAgICAgICAgIFs2LCAyOCwgNTBdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1NF0sCiAgICAgICAgICAgICAgICBbNiwgMzIsIDU4XSwKICAgICAgICAgICAgICAgIFs2LCAzNCwgNjJdLAogICAgICAgICAgICAgICAgWzYsIDI2LCA0NiwgNjZdLAogICAgICAgICAgICAgICAgWzYsIDI2LCA0OCwgNzBdLAogICAgICAgICAgICAgICAgWzYsIDI2LCA1MCwgNzRdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1NCwgNzhdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1NiwgODJdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1OCwgODZdLAogICAgICAgICAgICAgICAgWzYsIDM0LCA2MiwgOTBdLAogICAgICAgICAgICAgICAgWzYsIDI4LCA1MCwgNzIsIDk0XSwKICAgICAgICAgICAgICAgIFs2LCAyNiwgNTAsIDc0LCA5OF0sCiAgICAgICAgICAgICAgICBbNiwgMzAsIDU0LCA3OCwgMTAyXSwKICAgICAgICAgICAgICAgIFs2LCAyOCwgNTQsIDgwLCAxMDZdLAogICAgICAgICAgICAgICAgWzYsIDMyLCA1OCwgODQsIDExMF0sCiAgICAgICAgICAgICAgICBbNiwgMzAsIDU4LCA4NiwgMTE0XSwKICAgICAgICAgICAgICAgIFs2LCAzNCwgNjIsIDkwLCAxMThdLAogICAgICAgICAgICAgICAgWzYsIDI2LCA1MCwgNzQsIDk4LCAxMjJdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2XSwKICAgICAgICAgICAgICAgIFs2LCAyNiwgNTIsIDc4LCAxMDQsIDEzMF0sCiAgICAgICAgICAgICAgICBbNiwgMzAsIDU2LCA4MiwgMTA4LCAxMzRdLAogICAgICAgICAgICAgICAgWzYsIDM0LCA2MCwgODYsIDExMiwgMTM4XSwKICAgICAgICAgICAgICAgIFs2LCAzMCwgNTgsIDg2LCAxMTQsIDE0Ml0sCiAgICAgICAgICAgICAgICBbNiwgMzQsIDYyLCA5MCwgMTE4LCAxNDZdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1NCwgNzgsIDEwMiwgMTI2LCAxNTBdLAogICAgICAgICAgICAgICAgWzYsIDI0LCA1MCwgNzYsIDEwMiwgMTI4LCAxNTRdLAogICAgICAgICAgICAgICAgWzYsIDI4LCA1NCwgODAsIDEwNiwgMTMyLCAxNThdLAogICAgICAgICAgICAgICAgWzYsIDMyLCA1OCwgODQsIDExMCwgMTM2LCAxNjJdLAogICAgICAgICAgICAgICAgWzYsIDI2LCA1NCwgODIsIDExMCwgMTM4LCAxNjZdLAogICAgICAgICAgICAgICAgWzYsIDMwLCA1OCwgODYsIDExNCwgMTQyLCAxNzBdLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgRzE1OiAxMzM1LAogICAgICAgICAgICAgIEcxODogNzk3MywKICAgICAgICAgICAgICBHMTVfTUFTSzogMjE1MjIsCiAgICAgICAgICAgICAgZ2V0QkNIVHlwZUluZm86IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgICB2YXIgdCA9IGUgPDwgMTA7CiAgICAgICAgICAgICAgICAgIDAgPD0gbC5nZXRCQ0hEaWdpdCh0KSAtIGwuZ2V0QkNIRGlnaXQobC5HMTUpOwoKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgdCBePSBsLkcxNSA8PCAobC5nZXRCQ0hEaWdpdCh0KSAtIGwuZ2V0QkNIRGlnaXQobC5HMTUpKTsKICAgICAgICAgICAgICAgIHJldHVybiAoKGUgPDwgMTApIHwgdCkgXiBsLkcxNV9NQVNLOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZ2V0QkNIVHlwZU51bWJlcjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICAgIHZhciB0ID0gZSA8PCAxMjsKICAgICAgICAgICAgICAgICAgMCA8PSBsLmdldEJDSERpZ2l0KHQpIC0gbC5nZXRCQ0hEaWdpdChsLkcxOCk7CgogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICB0IF49IGwuRzE4IDw8IChsLmdldEJDSERpZ2l0KHQpIC0gbC5nZXRCQ0hEaWdpdChsLkcxOCkpOwogICAgICAgICAgICAgICAgcmV0dXJuIChlIDw8IDEyKSB8IHQ7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXRCQ0hEaWdpdDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSAwOyAwICE9IGU7ICkgdCsrLCAoZSA+Pj49IDEpOwogICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXRQYXR0ZXJuUG9zaXRpb246IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbC5QQVRURVJOX1BPU0lUSU9OX1RBQkxFW2UgLSAxXTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGdldE1hc2s6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAwID09ICh0ICsgYSkgJSAyOwogICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgPT0gdCAlIDI7CiAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCA9PSBhICUgMzsKICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAwID09ICh0ICsgYSkgJSAzOwogICAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgPT0gKE1hdGguZmxvb3IodCAvIDIpICsgTWF0aC5mbG9vcihhIC8gMykpICUgMjsKICAgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgIHJldHVybiAwID09ICgodCAqIGEpICUgMikgKyAoKHQgKiBhKSAlIDMpOwogICAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgPT0gKCgodCAqIGEpICUgMikgKyAoKHQgKiBhKSAlIDMpKSAlIDI7CiAgICAgICAgICAgICAgICAgIGNhc2UgNzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMCA9PSAoKCh0ICogYSkgJSAzKSArICgodCArIGEpICUgMikpICUgMjsKICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigiYmFkIG1hc2tQYXR0ZXJuOiIgKyBlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGdldEVycm9yQ29ycmVjdFBvbHlub21pYWw6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gbmV3IHMoWzFdLCAwKSwgYSA9IDA7IGEgPCBlOyBhKyspCiAgICAgICAgICAgICAgICAgIHQgPSB0Lm11bHRpcGx5KG5ldyBzKFsxLCBjLmdleHAoYSldLCAwKSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGdldExlbmd0aEluQml0czogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICAgIGlmICgxIDw9IHQgJiYgMTAgPiB0KQogICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDk7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBhOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCJtb2RlOiIgKyBlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoMjcgPiB0KQogICAgICAgICAgICAgICAgICBzd2l0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTI7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDExOwogICAgICAgICAgICAgICAgICAgIGNhc2UgYToKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNjsKICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCJtb2RlOiIgKyBlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIGlmICghKDQxID4gdCkpIHRocm93IEVycm9yKCJ0eXBlOiIgKyB0KTsKICAgICAgICAgICAgICAgICAgc3dpdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE0OwogICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMzsKICAgICAgICAgICAgICAgICAgICBjYXNlIGE6CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTY7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEyOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcigibW9kZToiICsgZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGdldExvc3RQb2ludDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIHQgPSBlLmdldE1vZHVsZUNvdW50KCksIGEgPSAwLCBpID0gMDsgaSA8IHQ7IGkrKykKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDA7IG4gPCB0OyBuKyspIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gMCwgbyA9IGUuaXNEYXJrKGksIG4pLCByID0gLTE7IDEgPj0gcjsgcisrKQogICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCA+IGkgKyByIHx8IHQgPD0gaSArIHIpKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsID0gLTE7IDEgPj0gbDsgbCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgIDAgPiBuICsgbCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA8PSBuICsgbCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgPT0gciAmJiAwID09IGwpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobyA9PSBlLmlzRGFyayhpICsgciwgbiArIGwpICYmIHMrKyk7CiAgICAgICAgICAgICAgICAgICAgNSA8IHMgJiYgKGEgKz0gMyArIHMgLSA1KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHQgLSAxOyBpKyspCiAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCB0IC0gMTsgbisrKQogICAgICAgICAgICAgICAgICAgIChzID0gMCksCiAgICAgICAgICAgICAgICAgICAgICBlLmlzRGFyayhpLCBuKSAmJiBzKyssCiAgICAgICAgICAgICAgICAgICAgICBlLmlzRGFyayhpICsgMSwgbikgJiYgcysrLAogICAgICAgICAgICAgICAgICAgICAgZS5pc0RhcmsoaSwgbiArIDEpICYmIHMrKywKICAgICAgICAgICAgICAgICAgICAgIGUuaXNEYXJrKGkgKyAxLCBuICsgMSkgJiYgcysrLAogICAgICAgICAgICAgICAgICAgICAgKDAgPT0gcyB8fCA0ID09IHMpICYmIChhICs9IDMpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHQ7IGkrKykKICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IHQgLSA2OyBuKyspCiAgICAgICAgICAgICAgICAgICAgZS5pc0RhcmsoaSwgbikgJiYKICAgICAgICAgICAgICAgICAgICAgICFlLmlzRGFyayhpLCBuICsgMSkgJiYKICAgICAgICAgICAgICAgICAgICAgIGUuaXNEYXJrKGksIG4gKyAyKSAmJgogICAgICAgICAgICAgICAgICAgICAgZS5pc0RhcmsoaSwgbiArIDMpICYmCiAgICAgICAgICAgICAgICAgICAgICBlLmlzRGFyayhpLCBuICsgNCkgJiYKICAgICAgICAgICAgICAgICAgICAgICFlLmlzRGFyayhpLCBuICsgNSkgJiYKICAgICAgICAgICAgICAgICAgICAgIGUuaXNEYXJrKGksIG4gKyA2KSAmJgogICAgICAgICAgICAgICAgICAgICAgKGEgKz0gNDApOwogICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IHQ7IG4rKykKICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHQgLSA2OyBpKyspCiAgICAgICAgICAgICAgICAgICAgZS5pc0RhcmsoaSwgbikgJiYKICAgICAgICAgICAgICAgICAgICAgICFlLmlzRGFyayhpICsgMSwgbikgJiYKICAgICAgICAgICAgICAgICAgICAgIGUuaXNEYXJrKGkgKyAyLCBuKSAmJgogICAgICAgICAgICAgICAgICAgICAgZS5pc0RhcmsoaSArIDMsIG4pICYmCiAgICAgICAgICAgICAgICAgICAgICBlLmlzRGFyayhpICsgNCwgbikgJiYKICAgICAgICAgICAgICAgICAgICAgICFlLmlzRGFyayhpICsgNSwgbikgJiYKICAgICAgICAgICAgICAgICAgICAgIGUuaXNEYXJrKGkgKyA2LCBuKSAmJgogICAgICAgICAgICAgICAgICAgICAgKGEgKz0gNDApOwogICAgICAgICAgICAgICAgZm9yIChuID0gcyA9IDA7IG4gPCB0OyBuKyspCiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0OyBpKyspIGUuaXNEYXJrKGksIG4pICYmIHMrKzsKICAgICAgICAgICAgICAgIHJldHVybiAoZSA9IE1hdGguYWJzKCgxMDAgKiBzKSAvIHQgLyB0IC0gNTApIC8gNSksIGEgKyAxMCAqIGU7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYyA9IHsKICAgICAgICAgICAgICBnbG9nOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKDEgPiBlKSB0aHJvdyBFcnJvcigiZ2xvZygiICsgZSArICIpIik7CiAgICAgICAgICAgICAgICByZXR1cm4gYy5MT0dfVEFCTEVbZV07CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXhwOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgZm9yICg7IDAgPiBlOyApIGUgKz0gMjU1OwogICAgICAgICAgICAgICAgZm9yICg7IDI1NiA8PSBlOyApIGUgLT0gMjU1OwogICAgICAgICAgICAgICAgcmV0dXJuIGMuRVhQX1RBQkxFW2VdOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgRVhQX1RBQkxFOiBBcnJheSgyNTYpLAogICAgICAgICAgICAgIExPR19UQUJMRTogQXJyYXkoMjU2KSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZCA9IDA7CiAgICAgICAgICA4ID4gZDsKICAgICAgICAgIGQrKwogICAgICAgICkKICAgICAgICAgIGMuRVhQX1RBQkxFW2RdID0gMSA8PCBkOwogICAgICAgIGZvciAoZCA9IDg7IDI1NiA+IGQ7IGQrKykKICAgICAgICAgIGMuRVhQX1RBQkxFW2RdID0KICAgICAgICAgICAgYy5FWFBfVEFCTEVbZCAtIDRdIF4KICAgICAgICAgICAgYy5FWFBfVEFCTEVbZCAtIDVdIF4KICAgICAgICAgICAgYy5FWFBfVEFCTEVbZCAtIDZdIF4KICAgICAgICAgICAgYy5FWFBfVEFCTEVbZCAtIDhdOwogICAgICAgIGZvciAoZCA9IDA7IDI1NSA+IGQ7IGQrKykgYy5MT0dfVEFCTEVbYy5FWFBfVEFCTEVbZF1dID0gZDsKICAgICAgICByZXR1cm4gKAogICAgICAgICAgKHMucHJvdG90eXBlID0gewogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtW2VdOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRMZW5ndGg6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5udW0ubGVuZ3RoOwogICAgICAgICAgICB9LAogICAgICAgICAgICBtdWx0aXBseTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgdmFyIHQgPSBBcnJheSh0aGlzLmdldExlbmd0aCgpICsgZS5nZXRMZW5ndGgoKSAtIDEpLCBhID0gMDsKICAgICAgICAgICAgICAgIGEgPCB0aGlzLmdldExlbmd0aCgpOwogICAgICAgICAgICAgICAgYSsrCiAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlLmdldExlbmd0aCgpOyBpKyspCiAgICAgICAgICAgICAgICAgIHRbYSArIGldIF49IGMuZ2V4cChjLmdsb2codGhpcy5nZXQoYSkpICsgYy5nbG9nKGUuZ2V0KGkpKSk7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBzKHQsIDApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBtb2Q6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgaWYgKDAgPiB0aGlzLmdldExlbmd0aCgpIC0gZS5nZXRMZW5ndGgoKSkgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgIHZhciB0ID0gYy5nbG9nKHRoaXMuZ2V0KDApKSAtIGMuZ2xvZyhlLmdldCgwKSksCiAgICAgICAgICAgICAgICAgIGEgPSBBcnJheSh0aGlzLmdldExlbmd0aCgpKSwKICAgICAgICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICAgICBpIDwgdGhpcy5nZXRMZW5ndGgoKTsKICAgICAgICAgICAgICAgIGkrKwogICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIGFbaV0gPSB0aGlzLmdldChpKTsKICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZS5nZXRMZW5ndGgoKTsgaSsrKQogICAgICAgICAgICAgICAgYVtpXSBePSBjLmdleHAoYy5nbG9nKGUuZ2V0KGkpKSArIHQpOwogICAgICAgICAgICAgIHJldHVybiBuZXcgcyhhLCAwKS5tb2QoZSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KSwKICAgICAgICAgIChvLlJTX0JMT0NLX1RBQkxFID0gWwogICAgICAgICAgICBbMSwgMjYsIDE5XSwKICAgICAgICAgICAgWzEsIDI2LCAxNl0sCiAgICAgICAgICAgIFsxLCAyNiwgMTNdLAogICAgICAgICAgICBbMSwgMjYsIDldLAogICAgICAgICAgICBbMSwgNDQsIDM0XSwKICAgICAgICAgICAgWzEsIDQ0LCAyOF0sCiAgICAgICAgICAgIFsxLCA0NCwgMjJdLAogICAgICAgICAgICBbMSwgNDQsIDE2XSwKICAgICAgICAgICAgWzEsIDcwLCA1NV0sCiAgICAgICAgICAgIFsxLCA3MCwgNDRdLAogICAgICAgICAgICBbMiwgMzUsIDE3XSwKICAgICAgICAgICAgWzIsIDM1LCAxM10sCiAgICAgICAgICAgIFsxLCAxMDAsIDgwXSwKICAgICAgICAgICAgWzIsIDUwLCAzMl0sCiAgICAgICAgICAgIFsyLCA1MCwgMjRdLAogICAgICAgICAgICBbNCwgMjUsIDldLAogICAgICAgICAgICBbMSwgMTM0LCAxMDhdLAogICAgICAgICAgICBbMiwgNjcsIDQzXSwKICAgICAgICAgICAgWzIsIDMzLCAxNSwgMiwgMzQsIDE2XSwKICAgICAgICAgICAgWzIsIDMzLCAxMSwgMiwgMzQsIDEyXSwKICAgICAgICAgICAgWzIsIDg2LCA2OF0sCiAgICAgICAgICAgIFs0LCA0MywgMjddLAogICAgICAgICAgICBbNCwgNDMsIDE5XSwKICAgICAgICAgICAgWzQsIDQzLCAxNV0sCiAgICAgICAgICAgIFsyLCA5OCwgNzhdLAogICAgICAgICAgICBbNCwgNDksIDMxXSwKICAgICAgICAgICAgWzIsIDMyLCAxNCwgNCwgMzMsIDE1XSwKICAgICAgICAgICAgWzQsIDM5LCAxMywgMSwgNDAsIDE0XSwKICAgICAgICAgICAgWzIsIDEyMSwgOTddLAogICAgICAgICAgICBbMiwgNjAsIDM4LCAyLCA2MSwgMzldLAogICAgICAgICAgICBbNCwgNDAsIDE4LCAyLCA0MSwgMTldLAogICAgICAgICAgICBbNCwgNDAsIDE0LCAyLCA0MSwgMTVdLAogICAgICAgICAgICBbMiwgMTQ2LCAxMTZdLAogICAgICAgICAgICBbMywgNTgsIDM2LCAyLCA1OSwgMzddLAogICAgICAgICAgICBbNCwgMzYsIDE2LCA0LCAzNywgMTddLAogICAgICAgICAgICBbNCwgMzYsIDEyLCA0LCAzNywgMTNdLAogICAgICAgICAgICBbMiwgODYsIDY4LCAyLCA4NywgNjldLAogICAgICAgICAgICBbNCwgNjksIDQzLCAxLCA3MCwgNDRdLAogICAgICAgICAgICBbNiwgNDMsIDE5LCAyLCA0NCwgMjBdLAogICAgICAgICAgICBbNiwgNDMsIDE1LCAyLCA0NCwgMTZdLAogICAgICAgICAgICBbNCwgMTAxLCA4MV0sCiAgICAgICAgICAgIFsxLCA4MCwgNTAsIDQsIDgxLCA1MV0sCiAgICAgICAgICAgIFs0LCA1MCwgMjIsIDQsIDUxLCAyM10sCiAgICAgICAgICAgIFszLCAzNiwgMTIsIDgsIDM3LCAxM10sCiAgICAgICAgICAgIFsyLCAxMTYsIDkyLCAyLCAxMTcsIDkzXSwKICAgICAgICAgICAgWzYsIDU4LCAzNiwgMiwgNTksIDM3XSwKICAgICAgICAgICAgWzQsIDQ2LCAyMCwgNiwgNDcsIDIxXSwKICAgICAgICAgICAgWzcsIDQyLCAxNCwgNCwgNDMsIDE1XSwKICAgICAgICAgICAgWzQsIDEzMywgMTA3XSwKICAgICAgICAgICAgWzgsIDU5LCAzNywgMSwgNjAsIDM4XSwKICAgICAgICAgICAgWzgsIDQ0LCAyMCwgNCwgNDUsIDIxXSwKICAgICAgICAgICAgWzEyLCAzMywgMTEsIDQsIDM0LCAxMl0sCiAgICAgICAgICAgIFszLCAxNDUsIDExNSwgMSwgMTQ2LCAxMTZdLAogICAgICAgICAgICBbNCwgNjQsIDQwLCA1LCA2NSwgNDFdLAogICAgICAgICAgICBbMTEsIDM2LCAxNiwgNSwgMzcsIDE3XSwKICAgICAgICAgICAgWzExLCAzNiwgMTIsIDUsIDM3LCAxM10sCiAgICAgICAgICAgIFs1LCAxMDksIDg3LCAxLCAxMTAsIDg4XSwKICAgICAgICAgICAgWzUsIDY1LCA0MSwgNSwgNjYsIDQyXSwKICAgICAgICAgICAgWzUsIDU0LCAyNCwgNywgNTUsIDI1XSwKICAgICAgICAgICAgWzExLCAzNiwgMTJdLAogICAgICAgICAgICBbNSwgMTIyLCA5OCwgMSwgMTIzLCA5OV0sCiAgICAgICAgICAgIFs3LCA3MywgNDUsIDMsIDc0LCA0Nl0sCiAgICAgICAgICAgIFsxNSwgNDMsIDE5LCAyLCA0NCwgMjBdLAogICAgICAgICAgICBbMywgNDUsIDE1LCAxMywgNDYsIDE2XSwKICAgICAgICAgICAgWzEsIDEzNSwgMTA3LCA1LCAxMzYsIDEwOF0sCiAgICAgICAgICAgIFsxMCwgNzQsIDQ2LCAxLCA3NSwgNDddLAogICAgICAgICAgICBbMSwgNTAsIDIyLCAxNSwgNTEsIDIzXSwKICAgICAgICAgICAgWzIsIDQyLCAxNCwgMTcsIDQzLCAxNV0sCiAgICAgICAgICAgIFs1LCAxNTAsIDEyMCwgMSwgMTUxLCAxMjFdLAogICAgICAgICAgICBbOSwgNjksIDQzLCA0LCA3MCwgNDRdLAogICAgICAgICAgICBbMTcsIDUwLCAyMiwgMSwgNTEsIDIzXSwKICAgICAgICAgICAgWzIsIDQyLCAxNCwgMTksIDQzLCAxNV0sCiAgICAgICAgICAgIFszLCAxNDEsIDExMywgNCwgMTQyLCAxMTRdLAogICAgICAgICAgICBbMywgNzAsIDQ0LCAxMSwgNzEsIDQ1XSwKICAgICAgICAgICAgWzE3LCA0NywgMjEsIDQsIDQ4LCAyMl0sCiAgICAgICAgICAgIFs5LCAzOSwgMTMsIDE2LCA0MCwgMTRdLAogICAgICAgICAgICBbMywgMTM1LCAxMDcsIDUsIDEzNiwgMTA4XSwKICAgICAgICAgICAgWzMsIDY3LCA0MSwgMTMsIDY4LCA0Ml0sCiAgICAgICAgICAgIFsxNSwgNTQsIDI0LCA1LCA1NSwgMjVdLAogICAgICAgICAgICBbMTUsIDQzLCAxNSwgMTAsIDQ0LCAxNl0sCiAgICAgICAgICAgIFs0LCAxNDQsIDExNiwgNCwgMTQ1LCAxMTddLAogICAgICAgICAgICBbMTcsIDY4LCA0Ml0sCiAgICAgICAgICAgIFsxNywgNTAsIDIyLCA2LCA1MSwgMjNdLAogICAgICAgICAgICBbMTksIDQ2LCAxNiwgNiwgNDcsIDE3XSwKICAgICAgICAgICAgWzIsIDEzOSwgMTExLCA3LCAxNDAsIDExMl0sCiAgICAgICAgICAgIFsxNywgNzQsIDQ2XSwKICAgICAgICAgICAgWzcsIDU0LCAyNCwgMTYsIDU1LCAyNV0sCiAgICAgICAgICAgIFszNCwgMzcsIDEzXSwKICAgICAgICAgICAgWzQsIDE1MSwgMTIxLCA1LCAxNTIsIDEyMl0sCiAgICAgICAgICAgIFs0LCA3NSwgNDcsIDE0LCA3NiwgNDhdLAogICAgICAgICAgICBbMTEsIDU0LCAyNCwgMTQsIDU1LCAyNV0sCiAgICAgICAgICAgIFsxNiwgNDUsIDE1LCAxNCwgNDYsIDE2XSwKICAgICAgICAgICAgWzYsIDE0NywgMTE3LCA0LCAxNDgsIDExOF0sCiAgICAgICAgICAgIFs2LCA3MywgNDUsIDE0LCA3NCwgNDZdLAogICAgICAgICAgICBbMTEsIDU0LCAyNCwgMTYsIDU1LCAyNV0sCiAgICAgICAgICAgIFszMCwgNDYsIDE2LCAyLCA0NywgMTddLAogICAgICAgICAgICBbOCwgMTMyLCAxMDYsIDQsIDEzMywgMTA3XSwKICAgICAgICAgICAgWzgsIDc1LCA0NywgMTMsIDc2LCA0OF0sCiAgICAgICAgICAgIFs3LCA1NCwgMjQsIDIyLCA1NSwgMjVdLAogICAgICAgICAgICBbMjIsIDQ1LCAxNSwgMTMsIDQ2LCAxNl0sCiAgICAgICAgICAgIFsxMCwgMTQyLCAxMTQsIDIsIDE0MywgMTE1XSwKICAgICAgICAgICAgWzE5LCA3NCwgNDYsIDQsIDc1LCA0N10sCiAgICAgICAgICAgIFsyOCwgNTAsIDIyLCA2LCA1MSwgMjNdLAogICAgICAgICAgICBbMzMsIDQ2LCAxNiwgNCwgNDcsIDE3XSwKICAgICAgICAgICAgWzgsIDE1MiwgMTIyLCA0LCAxNTMsIDEyM10sCiAgICAgICAgICAgIFsyMiwgNzMsIDQ1LCAzLCA3NCwgNDZdLAogICAgICAgICAgICBbOCwgNTMsIDIzLCAyNiwgNTQsIDI0XSwKICAgICAgICAgICAgWzEyLCA0NSwgMTUsIDI4LCA0NiwgMTZdLAogICAgICAgICAgICBbMywgMTQ3LCAxMTcsIDEwLCAxNDgsIDExOF0sCiAgICAgICAgICAgIFszLCA3MywgNDUsIDIzLCA3NCwgNDZdLAogICAgICAgICAgICBbNCwgNTQsIDI0LCAzMSwgNTUsIDI1XSwKICAgICAgICAgICAgWzExLCA0NSwgMTUsIDMxLCA0NiwgMTZdLAogICAgICAgICAgICBbNywgMTQ2LCAxMTYsIDcsIDE0NywgMTE3XSwKICAgICAgICAgICAgWzIxLCA3MywgNDUsIDcsIDc0LCA0Nl0sCiAgICAgICAgICAgIFsxLCA1MywgMjMsIDM3LCA1NCwgMjRdLAogICAgICAgICAgICBbMTksIDQ1LCAxNSwgMjYsIDQ2LCAxNl0sCiAgICAgICAgICAgIFs1LCAxNDUsIDExNSwgMTAsIDE0NiwgMTE2XSwKICAgICAgICAgICAgWzE5LCA3NSwgNDcsIDEwLCA3NiwgNDhdLAogICAgICAgICAgICBbMTUsIDU0LCAyNCwgMjUsIDU1LCAyNV0sCiAgICAgICAgICAgIFsyMywgNDUsIDE1LCAyNSwgNDYsIDE2XSwKICAgICAgICAgICAgWzEzLCAxNDUsIDExNSwgMywgMTQ2LCAxMTZdLAogICAgICAgICAgICBbMiwgNzQsIDQ2LCAyOSwgNzUsIDQ3XSwKICAgICAgICAgICAgWzQyLCA1NCwgMjQsIDEsIDU1LCAyNV0sCiAgICAgICAgICAgIFsyMywgNDUsIDE1LCAyOCwgNDYsIDE2XSwKICAgICAgICAgICAgWzE3LCAxNDUsIDExNV0sCiAgICAgICAgICAgIFsxMCwgNzQsIDQ2LCAyMywgNzUsIDQ3XSwKICAgICAgICAgICAgWzEwLCA1NCwgMjQsIDM1LCA1NSwgMjVdLAogICAgICAgICAgICBbMTksIDQ1LCAxNSwgMzUsIDQ2LCAxNl0sCiAgICAgICAgICAgIFsxNywgMTQ1LCAxMTUsIDEsIDE0NiwgMTE2XSwKICAgICAgICAgICAgWzE0LCA3NCwgNDYsIDIxLCA3NSwgNDddLAogICAgICAgICAgICBbMjksIDU0LCAyNCwgMTksIDU1LCAyNV0sCiAgICAgICAgICAgIFsxMSwgNDUsIDE1LCA0NiwgNDYsIDE2XSwKICAgICAgICAgICAgWzEzLCAxNDUsIDExNSwgNiwgMTQ2LCAxMTZdLAogICAgICAgICAgICBbMTQsIDc0LCA0NiwgMjMsIDc1LCA0N10sCiAgICAgICAgICAgIFs0NCwgNTQsIDI0LCA3LCA1NSwgMjVdLAogICAgICAgICAgICBbNTksIDQ2LCAxNiwgMSwgNDcsIDE3XSwKICAgICAgICAgICAgWzEyLCAxNTEsIDEyMSwgNywgMTUyLCAxMjJdLAogICAgICAgICAgICBbMTIsIDc1LCA0NywgMjYsIDc2LCA0OF0sCiAgICAgICAgICAgIFszOSwgNTQsIDI0LCAxNCwgNTUsIDI1XSwKICAgICAgICAgICAgWzIyLCA0NSwgMTUsIDQxLCA0NiwgMTZdLAogICAgICAgICAgICBbNiwgMTUxLCAxMjEsIDE0LCAxNTIsIDEyMl0sCiAgICAgICAgICAgIFs2LCA3NSwgNDcsIDM0LCA3NiwgNDhdLAogICAgICAgICAgICBbNDYsIDU0LCAyNCwgMTAsIDU1LCAyNV0sCiAgICAgICAgICAgIFsyLCA0NSwgMTUsIDY0LCA0NiwgMTZdLAogICAgICAgICAgICBbMTcsIDE1MiwgMTIyLCA0LCAxNTMsIDEyM10sCiAgICAgICAgICAgIFsyOSwgNzQsIDQ2LCAxNCwgNzUsIDQ3XSwKICAgICAgICAgICAgWzQ5LCA1NCwgMjQsIDEwLCA1NSwgMjVdLAogICAgICAgICAgICBbMjQsIDQ1LCAxNSwgNDYsIDQ2LCAxNl0sCiAgICAgICAgICAgIFs0LCAxNTIsIDEyMiwgMTgsIDE1MywgMTIzXSwKICAgICAgICAgICAgWzEzLCA3NCwgNDYsIDMyLCA3NSwgNDddLAogICAgICAgICAgICBbNDgsIDU0LCAyNCwgMTQsIDU1LCAyNV0sCiAgICAgICAgICAgIFs0MiwgNDUsIDE1LCAzMiwgNDYsIDE2XSwKICAgICAgICAgICAgWzIwLCAxNDcsIDExNywgNCwgMTQ4LCAxMThdLAogICAgICAgICAgICBbNDAsIDc1LCA0NywgNywgNzYsIDQ4XSwKICAgICAgICAgICAgWzQzLCA1NCwgMjQsIDIyLCA1NSwgMjVdLAogICAgICAgICAgICBbMTAsIDQ1LCAxNSwgNjcsIDQ2LCAxNl0sCiAgICAgICAgICAgIFsxOSwgMTQ4LCAxMTgsIDYsIDE0OSwgMTE5XSwKICAgICAgICAgICAgWzE4LCA3NSwgNDcsIDMxLCA3NiwgNDhdLAogICAgICAgICAgICBbMzQsIDU0LCAyNCwgMzQsIDU1LCAyNV0sCiAgICAgICAgICAgIFsyMCwgNDUsIDE1LCA2MSwgNDYsIDE2XSwKICAgICAgICAgIF0pLAogICAgICAgICAgKG8uZ2V0UlNCbG9ja3MgPSBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICB2YXIgYSA9IG8uZ2V0UnNCbG9ja1RhYmxlKGUsIHQpOwogICAgICAgICAgICBpZiAodm9pZCAwID09IGEpCiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoCiAgICAgICAgICAgICAgICAiYmFkIHJzIGJsb2NrIEAgdHlwZU51bWJlcjoiICsgZSArICIvZXJyb3JDb3JyZWN0TGV2ZWw6IiArIHQKICAgICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgKHZhciBpID0gYS5sZW5ndGggLyAzLCBuID0gW10sIHMgPSAwOyBzIDwgaTsgcysrKQogICAgICAgICAgICAgIGZvciAoCiAgICAgICAgICAgICAgICB2YXIgciA9IGFbMyAqIHMgKyAwXSwgbCA9IGFbMyAqIHMgKyAxXSwgYyA9IGFbMyAqIHMgKyAyXSwgZCA9IDA7CiAgICAgICAgICAgICAgICBkIDwgcjsKICAgICAgICAgICAgICAgIGQrKwogICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIG4ucHVzaChuZXcgbyhsLCBjKSk7CiAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgfSksCiAgICAgICAgICAoby5nZXRSc0Jsb2NrVGFibGUgPSBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICBzd2l0Y2ggKHQpIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gby5SU19CTE9DS19UQUJMRVs0ICogKGUgLSAxKSArIDBdOwogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIHJldHVybiBvLlJTX0JMT0NLX1RBQkxFWzQgKiAoZSAtIDEpICsgMV07CiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgcmV0dXJuIG8uUlNfQkxPQ0tfVEFCTEVbNCAqIChlIC0gMSkgKyAyXTsKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICByZXR1cm4gby5SU19CTE9DS19UQUJMRVs0ICogKGUgLSAxKSArIDNdOwogICAgICAgICAgICB9CiAgICAgICAgICB9KSwKICAgICAgICAgIChyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAxID09ICgodGhpcy5idWZmZXJbTWF0aC5mbG9vcihlIC8gOCldID4+PiAoNyAtIChlICUgOCkpKSAmIDEpCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcHV0OiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgdDsgYSsrKQogICAgICAgICAgICAgICAgdGhpcy5wdXRCaXQoMSA9PSAoKGUgPj4+ICh0IC0gYSAtIDEpKSAmIDEpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0TGVuZ3RoSW5CaXRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoOwogICAgICAgICAgICB9LAogICAgICAgICAgICBwdXRCaXQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSBNYXRoLmZsb29yKHRoaXMubGVuZ3RoIC8gOCk7CiAgICAgICAgICAgICAgdGhpcy5idWZmZXIubGVuZ3RoIDw9IHQgJiYgdGhpcy5idWZmZXIucHVzaCgwKSwKICAgICAgICAgICAgICAgIGUgJiYgKHRoaXMuYnVmZmVyW3RdIHw9IDEyOCA+Pj4gdGhpcy5sZW5ndGggJSA4KSwKICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoKys7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KSwKICAgICAgICAgICJzdHJpbmciID09PSB0eXBlb2YgdCAmJiAodCA9IHsgdGV4dDogdCB9KSwKICAgICAgICAgICh0ID0gZS5leHRlbmQoCiAgICAgICAgICAgIHt9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVuZGVyOiAiY2FudmFzIiwKICAgICAgICAgICAgICB3aWR0aDogMjU2LAogICAgICAgICAgICAgIGhlaWdodDogMjU2LAogICAgICAgICAgICAgIHR5cGVOdW1iZXI6IC0xLAogICAgICAgICAgICAgIGNvcnJlY3RMZXZlbDogMiwKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAiI2ZmZmZmZiIsCiAgICAgICAgICAgICAgZm9yZWdyb3VuZDogIiMwMDAwMDAiLAogICAgICAgICAgICB9LAogICAgICAgICAgICB0CiAgICAgICAgICApKSwKICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBhOwogICAgICAgICAgICBpZiAoImNhbnZhcyIgPT0gdC5yZW5kZXIpIHsKICAgICAgICAgICAgICAoYSA9IG5ldyBuKHQudHlwZU51bWJlciwgdC5jb3JyZWN0TGV2ZWwpKSwKICAgICAgICAgICAgICAgIGEuYWRkRGF0YSh0LnRleHQpLAogICAgICAgICAgICAgICAgYS5tYWtlKCk7CiAgICAgICAgICAgICAgdmFyIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgICAgICAgICAoaS53aWR0aCA9IHQud2lkdGgpLCAoaS5oZWlnaHQgPSB0LmhlaWdodCk7CiAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgIHZhciBzID0gaS5nZXRDb250ZXh0KCIyZCIpLAogICAgICAgICAgICAgICAgICBvID0gdC53aWR0aCAvIGEuZ2V0TW9kdWxlQ291bnQoKSwKICAgICAgICAgICAgICAgICAgciA9IHQuaGVpZ2h0IC8gYS5nZXRNb2R1bGVDb3VudCgpLAogICAgICAgICAgICAgICAgICBsID0gMDsKICAgICAgICAgICAgICAgIGwgPCBhLmdldE1vZHVsZUNvdW50KCk7CiAgICAgICAgICAgICAgICBsKysKICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGEuZ2V0TW9kdWxlQ291bnQoKTsgYysrKSB7CiAgICAgICAgICAgICAgICAgIHMuZmlsbFN0eWxlID0gYS5pc0RhcmsobCwgYykgPyB0LmZvcmVncm91bmQgOiB0LmJhY2tncm91bmQ7CiAgICAgICAgICAgICAgICAgIHZhciBkID0gTWF0aC5jZWlsKChjICsgMSkgKiBvKSAtIE1hdGguZmxvb3IoYyAqIG8pLAogICAgICAgICAgICAgICAgICAgIHUgPSBNYXRoLmNlaWwoKGwgKyAxKSAqIG8pIC0gTWF0aC5mbG9vcihsICogbyk7CiAgICAgICAgICAgICAgICAgIHMuZmlsbFJlY3QoTWF0aC5yb3VuZChjICogbyksIE1hdGgucm91bmQobCAqIHIpLCBkLCB1KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgIGEgPSBuZXcgbih0LnR5cGVOdW1iZXIsIHQuY29ycmVjdExldmVsKSwKICAgICAgICAgICAgICAgICAgYS5hZGREYXRhKHQudGV4dCksCiAgICAgICAgICAgICAgICAgIGEubWFrZSgpLAogICAgICAgICAgICAgICAgICBpID0gZSgiPHRhYmxlPjwvdGFibGU+IikKICAgICAgICAgICAgICAgICAgICAuY3NzKCJ3aWR0aCIsIHQud2lkdGggKyAicHgiKQogICAgICAgICAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIHQuaGVpZ2h0ICsgInB4IikKICAgICAgICAgICAgICAgICAgICAuY3NzKCJib3JkZXIiLCAiMHB4IikKICAgICAgICAgICAgICAgICAgICAuY3NzKCJib3JkZXItY29sbGFwc2UiLCAiY29sbGFwc2UiKQogICAgICAgICAgICAgICAgICAgIC5jc3MoImJhY2tncm91bmQtY29sb3IiLCB0LmJhY2tncm91bmQpLAogICAgICAgICAgICAgICAgICBzID0gdC53aWR0aCAvIGEuZ2V0TW9kdWxlQ291bnQoKSwKICAgICAgICAgICAgICAgICAgbyA9IHQuaGVpZ2h0IC8gYS5nZXRNb2R1bGVDb3VudCgpLAogICAgICAgICAgICAgICAgICByID0gMDsKICAgICAgICAgICAgICAgIHIgPCBhLmdldE1vZHVsZUNvdW50KCk7CiAgICAgICAgICAgICAgICByKysKICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgICBsID0gZSgiPHRyPjwvdHI+IikKICAgICAgICAgICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBvICsgInB4IikKICAgICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oaSksCiAgICAgICAgICAgICAgICAgICAgYyA9IDA7CiAgICAgICAgICAgICAgICAgIGMgPCBhLmdldE1vZHVsZUNvdW50KCk7CiAgICAgICAgICAgICAgICAgIGMrKwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICBlKCI8dGQ+PC90ZD4iKQogICAgICAgICAgICAgICAgICAgIC5jc3MoIndpZHRoIiwgcyArICJweCIpCiAgICAgICAgICAgICAgICAgICAgLmNzcygKICAgICAgICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yIiwKICAgICAgICAgICAgICAgICAgICAgIGEuaXNEYXJrKHIsIGMpID8gdC5mb3JlZ3JvdW5kIDogdC5iYWNrZ3JvdW5kCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhsKTsKICAgICAgICAgICAgKGEgPSBpKSwgalF1ZXJ5KGEpLmFwcGVuZFRvKHRoaXMpOwogICAgICAgICAgfSkKICAgICAgICApOwogICAgICB9OwogICAgfSkoalF1ZXJ5KTsKICB9LAogICI1NGVmIjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGEoIjEyYWEiKTsKICB9LAogIDU1NzE6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBhKCI2MmRjIik7CiAgfSwKICAiNTVhNCI6IGZ1bmN0aW9uIChlLCB0LCBhKSB7fSwKICA1NjUxOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiYmI0YiIpOwogIH0sCiAgIjU2NmEiOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYSgiNDUxMCIpOwogIH0sCiAgIjU2YjYiOiBmdW5jdGlvbiAoZSwgdCwgYSkge30sCiAgIjU2ZDciOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgInVzZSBzdHJpY3QiOwogICAgYS5yKHQpOwogICAgYSgiZTI2MCIpLCBhKCJlNmNmIiksIGEoImNjYTYiKSwgYSgiYTc5ZCIpLCBhKCJkM2I3IiksIGEoImIwYzAiKTsKICAgIHZhciBuLAogICAgICBzLAogICAgICBvLAogICAgICByLAogICAgICBsLAogICAgICBjID0gYSgiMmIwZSIpLAogICAgICBkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgewogICAgICAgICAgICBjbGFzczoKICAgICAgICAgICAgICBudWxsID09IGUubmlnaHRfbW9kZSB8fCAwID09IHBhcnNlSW50KGUubmlnaHRfbW9kZSkKICAgICAgICAgICAgICAgID8gIm5pZ2h0IgogICAgICAgICAgICAgICAgOiAiZGF5IiwKICAgICAgICAgICAgYXR0cnM6IHsgaWQ6ICJhcHAiIH0sCiAgICAgICAgICB9LAogICAgICAgICAgW2EoInJvdXRlci12aWV3IildLAogICAgICAgICAgMQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIHUgPSBbXSwKICAgICAgbSA9IHsKICAgICAgICBuYW1lOiAiQXBwIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBuaWdodF9tb2RlOiAiMSIsIHRpbWVyOiAhMSB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gIi9hcGkvZnJvbnQiOwogICAgICAgICAgdGhpcy4kaHR0cCh7IHVybDogdCwgbWV0aG9kOiAiZ2V0IiB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgIGUuYnVzLmZpbmZvID0gdC5kYXRhOwogICAgICAgICAgfSksCiAgICAgICAgICAgICh0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKS5sZW5ndGggPiAxMCAmJgogICAgICAgICAgICAgICAgZQogICAgICAgICAgICAgICAgICAuJGh0dHAoewogICAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvdXNlci9hY3RpdmUiLAogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICAgIH0sIDFlNCkpLAogICAgICAgICAgICAoZG9jdW1lbnQudGl0bGUgPSB0aGlzLiR0KCJzaXRlTmFtZSIpKSwKICAgICAgICAgICAgKHRoaXMubmlnaHRfbW9kZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJuaWdodF9tb2RlIikpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIHAgPSBtLAogICAgICBoID0gKGEoIjVjMGIiKSwgYSgiNWM2NCIpLCBhKCIyODc3IikpLAogICAgICBmID0gT2JqZWN0KGhbImEiXSkocCwgZCwgdSwgITEsIG51bGwsIG51bGwsIG51bGwpLAogICAgICBnID0gZi5leHBvcnRzLAogICAgICB2ID0gKGEoIjNjYTMiKSwgYSgiZGRiMCIpLCBhKCI4YzRmIikpLAogICAgICBfID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgeyBzdGF0aWNDbGFzczogImluZGV4QmxhY2tlcyIgfSwKICAgICAgICAgIFthKCJpbmRleEhlYWRlciIpLCBhKCJyb3V0ZXItdmlldyIpLCBhKCJpbmRleEZvb3RlciIpXSwKICAgICAgICAgIDEKICAgICAgICApOwogICAgICB9LAogICAgICB5ID0gW10sCiAgICAgIGIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibmF2X2JhciIgfSwgWwogICAgICAgICAgaSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImNvbnRlbnQiLAogICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6ICI0OHB4IiwKICAgICAgICAgICAgICAgIHdpZHRoOiAiMTAwJSIsCiAgICAgICAgICAgICAgICBwb3NpdGlvbjogInJlbGF0aXZlIiwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImZsIiB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJyb3V0ZXItbGluayIsCiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogIm5hdi1saXN0LWEiLCBhdHRyczogeyB0bzogIi8iIH0gfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibmF2YmFyLWxvZ28iLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMTIwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAicmVsYXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogIjBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiOWQ2NCIpIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgaSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibmF2YmFyLWl0ZW0gZmwgbW91c2VEZWZhdWx0IG1sMTAiIH0sIFsKICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJiYXNlIiB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgaSgicm91dGVyLWxpbmsiLCB7IGF0dHJzOiB7IHRvOiAiL2RlYWxDZW50ZXIiIH0gfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImhlYWRlci5jdXJyZW5jeSIpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYmFzZSBoaWRlIiB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgaSgicm91dGVyLWxpbmsiLCB7IGF0dHJzOiB7IHRvOiAiL2xlZ2FsVHJhZGUiIH0gfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImhlYWRlci5jMmMiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImJhc2UiIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBpKCJyb3V0ZXItbGluayIsIHsgYXR0cnM6IHsgdG86ICIvbGV2ZXJkZWFsQ2VudGVyIiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci50cmFuc2FjdGlvbiIpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYmFzZSIgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGkoInJvdXRlci1saW5rIiwgeyBhdHRyczogeyB0bzogIi9zZWNvbmREZWFsQ2VudGVyIiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJtaXNjcm8udHJhbnNhY3Rpb24iKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgZS5fZSgpLAogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImJhc2UiIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBpKCJyb3V0ZXItbGluayIsIHsgYXR0cnM6IHsgdG86ICIvY2hhbmdlIiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJoZWFkZXIuYXNzZXRzIikpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJiYXNlIiB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgaSgicm91dGVyLWxpbmsiLCB7IGF0dHJzOiB7IHRvOiAiL3BsZWRnZSIgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiaGVhZGVyLnJhbmsiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgZS5fZSgpLAogICAgICAgICAgICAgICAgZS5zaG93SUVPCiAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYmFzZSIsIHN0YXRpY1N0eWxlOiB7IGNvbG9yOiAiI2ZmZiIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJyb3V0ZXItbGluayIsIHsgYXR0cnM6IHsgdG86ICIvdXBzdGFydCIgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuY3VycmVuY3kpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgZS5fZSgpLAogICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmciIsIHN0YXRpY1N0eWxlOiB7ICJtYXJnaW4tcmlnaHQiOiAiLTVweCIgfSB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LWJveCBmMiBwb3NpdGlvblIgY3VyUGVyIGZsZXgiIH0sCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1zZ193cmFwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NvdW50X2xvZ2luIGZsZXggYWxjZW50ZXIgZkNvbG9yMSBmbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAibWFyZ2luLXJpZ2h0IjogIjAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZW92ZXI6IGUub3Zlcl9sYW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZW91dDogZS5vdXRfbGFuZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIGNob29zZWxhbmctd3JhcCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImljb25mb250IG1sMTAgbXI1IGljb24tZHVvZ3VveXV5YW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibXI1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5sYW5nX3RleHQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJpIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCBpY29uLXpoYW5rYWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbjogZS5zaG93TGFuZ01vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlOiAhZS5zaG93TGFuZ01vcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxhbmctY2hvb3NlIG1pbmUgZnQxNCBmQ29sb3I0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBtb3VzZW92ZXI6IGUub3Zlcl9sYW5nLCBtb3VzZW91dDogZS5vdXRfbGFuZyB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUubGFuZ0FyciwgZnVuY3Rpb24gKHQsIGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgImZsZXgtZGlyZWN0aW9uIjogInJvdyIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNldF9sYW5nKHQuc3JjLCB0LnRleHQsIHQubGFuZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN2ZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIyMHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiMjBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib3JkZXItcmFkaXVzIjogIjUwJSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAiMTBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInpoIiA9PSB0LmxhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJ1c2UiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAiZm9udC1zaXplIjogIjEycHgiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieGxpbms6aHJlZiI6ICIjaWNvbi16aG9uZ3dlbjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqcCIgPT0gdC5sYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgidXNlIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgInhsaW5rOmhyZWYiOiAiI2ljb24tLXJpeXUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhIiA9PSB0LmxhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJ1c2UiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieGxpbms6aHJlZiI6ICIjaWNvbi14aWJhbnlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGsiID09IHQubGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoInVzZSIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bGluazpocmVmIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI2ljb24taG9uZ19rb25nX19lYXN5aWNvbm5ldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtyIiA9PSB0LmxhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJ1c2UiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyAieGxpbms6aHJlZiI6ICIjaWNvbi1oYW55dTEiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW4iID09IHQubGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoInVzZSIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bGluazpocmVmIjogIiNpY29uLXlpbmd5dTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCIgPT0gdC5sYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgidXNlIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgInhsaW5rOmhyZWYiOiAiI2ljb24teWlkYWxpIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlIiA9PSB0LmxhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJ1c2UiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyAieGxpbms6aHJlZiI6ICIjaWNvbi1kZWd1bzEiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhIiA9PSB0LmxhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJ1c2UiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyAieGxpbms6aHJlZiI6ICIjaWNvbi1mYWd1byIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubCIgPT0gdC5sYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgidXNlIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInhsaW5rOmhyZWYiOiAiI2ljb24tZHVvZ3VveXV5YW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3ModC50ZXh0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIGUuc2hvd0Rvd25sb2FkCiAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmciBmbGV4IG1sMTAiLAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgImp1c3RpZnktY29udGVudCI6ICJjZW50ZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAiZWwtcG9wb3ZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiAidG9wLXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBlLiR0KCJzY2FuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjIwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAiaG92ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMTAwJSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogIjEwMCUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4LXdpZHRoIjogIjIwMHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdC1maXQiOiAiY292ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly8iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRvbWFpbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9hcGkvcXJjb2RlP3RleHQ9aHR0cHM6Ly8iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRvbWFpbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9tb2JpbGUvZG93bmxvYWQuaHRtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGkoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgImljb25mb250IGljb24teGlhemFpYXBwIGN1clBlciBmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGF0dHJzOiB7IHNsb3Q6ICJyZWZlcmVuY2UiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzbG90OiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgIC8vICAgIWUuc2hvd0N1c3RvbWVyCiAgICAgICAgICAgIC8vICAgICA/IGkoCiAgICAgICAgICAgIC8vICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIC8vICAgICAgICAgewogICAgICAgICAgICAvLyAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmciBmbGV4IG1sMTAgY3VyUGVyIGZDb2xvcjEgY3VzdG9tLXNlcnZpY2UiLAogICAgICAgICAgICAvLyAgICAgICAgIH0sCiAgICAgICAgICAgIC8vICAgICAgICAgWwogICAgICAgICAgICAvLyAgICAgICAgICAgaSgiaSIsIHsKICAgICAgICAgICAgLy8gICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCBpY29uLXdlaWJpYW90aS0gY3VyUGVyICIsCiAgICAgICAgICAgIC8vICAgICAgICAgICB9KSwKICAgICAgICAgICAgLy8gICAgICAgICAgIGkoCiAgICAgICAgICAgIC8vICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgLy8gICAgICAgICAgICAgewogICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibWw1IGZ0MTQgbXI1IiwKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5zaG93RG93biB9LAogICAgICAgICAgICAvLyAgICAgICAgICAgICB9LAogICAgICAgICAgICAvLyAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImhvbWUua2VmdSIpKSldCiAgICAgICAgICAgIC8vICAgICAgICAgICApLAogICAgICAgICAgICAvLyAgICAgICAgIF0KICAgICAgICAgICAgLy8gICAgICAgKQogICAgICAgICAgICAvLyAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZyIiB9LCBbCiAgICAgICAgICAgICAgICBpKCJhIiwgeyBzdGF0aWNTdHlsZTogeyBjb2xvcjogIiNjZGQ2ZTQiIH0gfSwgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LWJveCBmbCBwb3NpdGlvblIgY3VyUGVyIGZsZXgiIH0sCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1zZ193cmFwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuYWRkcmVzcy5sZW5ndGggPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY291bnRfbG9naW4gZmxleCBhbGNlbnRlciBmQ29sb3IxIGZsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VvdmVyOiBlLm1pbmVfb3ZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlb3V0OiBlLm1pbmVfb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJpIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCBtcjUgaWNvbi13b2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJoaWRlRm91ciIpKGUuYWNjb3VudF9udW1iZXIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJpIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCBpY29uLXpoYW5rYWkgbWw1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW46IGUuc2hvd1VzZXJNb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZTogIWUuc2hvd1VzZXJNb3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250LXNpemUiOiAiMTJweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJpbmxpbmUtYmxvY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBlLnNob3cyCiAgICAgICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm9yZGVyLWNob29zZSBmdDE0IGZDb2xvcjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlb3ZlcjogZS5vcmRlcl9vdmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlb3V0OiBlLm9yZGVyX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUub3JkZXJMaXN0LCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ290byhudWxsLCB0LnBhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiB0LnNyYzEsIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiB0LnNyYzIsIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdihlLl9zKHQudGl0bGUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuc2hvdzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJzaG93MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhY2NvdW50LWNob29zZSBtaW5lIGZ0MTQgZkNvbG9yMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgbW91c2VvdmVyOiBlLm1pbmVfb3ZlciwgbW91c2VvdXQ6IGUubWluZV9vdXQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5hY2NvdW50TGlzdCwgZnVuY3Rpb24gKHQsIGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ290byhudWxsLCB0LnBhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaSIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaWNvbmZvbnQgbXI1ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogdC5pY29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdihlLl9zKHQudGl0bGUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUubG9naW5PdXQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCBtcjUgaWNvbi10dWljaHVkZW5nbHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiaGVhZGVyLm91dCIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAyCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgZS5hZGRyZXNzLmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImZsIGxvZ2luIG1yMTAiIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInJvdXRlci1saW5rIiwgeyBhdHRyczogeyB0bzogeyBuYW1lOiAibG9naW4iIH0gfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiIG1yNSBpY29uZm9udCBpY29uLWRlbmdsdSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJoZWFkZXIuaW4iKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyBocmVmOiAiL3JlZ2lzdGVyL3JlZ2lzdGVyLmh0bWwiIH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaSIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImljb25mb250IG1yNSBpY29uLXpodWNlMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiaGVhZGVyLnVwIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXQogICAgICAgICAgKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgQyA9IFtdLAogICAgICB3ID0gYSgiNTNjYSIpLAogICAgICBrID0KICAgICAgICAoYSgiYWMxZiIpLAogICAgICAgIGEoIjUzMTkiKSwKICAgICAgICBhKCJjNzQwIiksCiAgICAgICAgYSgiY2FhZCIpLAogICAgICAgIGEoIjI1MzIiKSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiaW5kZXhIZWFkZXIiLAogICAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHNob3dJRU86IHNob3dJRU8sCiAgICAgICAgICAgICAgY3VycmVuY3k6IHBsYXRfZm9ybV9jdXJyZW5jeSwKICAgICAgICAgICAgICBzaG93RG93bmxvYWQ6IHNob3dEb3dubG9hZCwKICAgICAgICAgICAgICBzaG93Q3VzdG9tZXI6IHNob3dDdXN0b21lciwKICAgICAgICAgICAgICBkb21haW46ICIiLAogICAgICAgICAgICAgIGFwcHNob3c6ICExLAogICAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICAgIG5pZ2h0X21vZGU6IDAsCiAgICAgICAgICAgICAgYWNjb3VudF9udW1iZXI6ICIiLAogICAgICAgICAgICAgIGFzc2V0czogdGhpcy4kdCgiaGVhZGVyLmFzc2V0cyIpLAogICAgICAgICAgICAgIG9yZGVyczogdGhpcy4kdCgiaGVhZGVyLm9yZGVycyIpLAogICAgICAgICAgICAgIGlzU2hvdzogITEsCiAgICAgICAgICAgICAgc2hvdzE6ICExLAogICAgICAgICAgICAgIHNob3cyOiAhMSwKICAgICAgICAgICAgICBzaG93MzogITEsCiAgICAgICAgICAgICAgY3VycmVudDogMCwKICAgICAgICAgICAgICBleHRlbnNpb25fY29kZTogIiIsCiAgICAgICAgICAgICAgdGFiTGlzdDogW10sCiAgICAgICAgICAgICAgc2hvd1VzZXJNb3JlOiAhMSwKICAgICAgICAgICAgICBzaG93TGFuZ01vcmU6ICExLAogICAgICAgICAgICAgIGN1c3Rvcm1fdXJsOiAiIiwKICAgICAgICAgICAgICBhY2NvdW50TGlzdDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzcmMxOiBhKCI1MjRhIiksCiAgICAgICAgICAgICAgICAgIHNyYzI6IGEoImZiZGEiKSwKICAgICAgICAgICAgICAgICAgaWNvbjogImljb24tc2hlemhpIiwKICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuJHQoInNlY3VyaXR5LmFjY291bnRzZXQiKSwKICAgICAgICAgICAgICAgICAgcGFnZTogImFjY291bnRTZXQiLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3JjMTogYSgiNmQwYSIpLAogICAgICAgICAgICAgICAgICBzcmMyOiBhKCIyYjIyIiksCiAgICAgICAgICAgICAgICAgIGljb246ICJpY29uLWppYW95aWppbHUxIiwKICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuJHQoImhlYWRlci50cmFkZWxvZyIpLAogICAgICAgICAgICAgICAgICBwYWdlOiAidHJhbnNmZXJMb2ciLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3JjMTogYSgiMDU5OCIpLAogICAgICAgICAgICAgICAgICBzcmMyOiBhKCIwMjFmIiksCiAgICAgICAgICAgICAgICAgIGljb246ICJpY29uLWljb24iLAogICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy4kdCgic2VjdXJpdHkuaWRjYXJkIiksCiAgICAgICAgICAgICAgICAgIHBhZ2U6ICJhdXRoZW50aWNhdGlvbiIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgYXNzZXRzdExpc3Q6IFtdLAogICAgICAgICAgICAgIG9yZGVyTGlzdDogW10sCiAgICAgICAgICAgICAgbGFuZ0FycjogWwogICAgICAgICAgICAgICAgeyBzcmM6IGEoIjdjYWEiKSwgdGV4dDogdGhpcy4kdCgibGFuZy5oayIpLCBsYW5nOiAiaGsiIH0sCiAgICAgICAgICAgICAgICB7IHNyYzogYSgiNmU0YyIpLCB0ZXh0OiB0aGlzLiR0KCJsYW5nLmVuIiksIGxhbmc6ICJlbiIgfSwKICAgICAgICAgICAgICAgIHsgc3JjOiBhKCJiMTg5IiksIHRleHQ6IHRoaXMuJHQoImxhbmcua3IiKSwgbGFuZzogImtyIiB9LAogICAgICAgICAgICAgICAgeyBzcmM6IGEoIjdhYWUiKSwgdGV4dDogdGhpcy4kdCgibGFuZy5qcCIpLCBsYW5nOiAianAiIH0sCiAgICAgICAgICAgICAgICB7IHNyYzogYSgiN2FhZSIpLCB0ZXh0OiB0aGlzLiR0KCJsYW5nLmRlIiksIGxhbmc6ICJkZSIgfSwKICAgICAgICAgICAgICAgIHsgc3JjOiBhKCI3YWFlIiksIHRleHQ6IHRoaXMuJHQoImxhbmcuZnJhIiksIGxhbmc6ICJmcmEiIH0sCiAgICAgICAgICAgICAgICB7IHNyYzogYSgiN2FhZSIpLCB0ZXh0OiB0aGlzLiR0KCJsYW5nLml0IiksIGxhbmc6ICJpdCIgfSwKICAgICAgICAgICAgICAgIHsgc3JjOiBhKCI3YWFlIiksIHRleHQ6IHRoaXMuJHQoImxhbmcubmwiKSwgbGFuZzogIm5sIiB9LAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbGFuZ19pbWc6IGEoIjZlNGMiKSwKICAgICAgICAgICAgICBsYW5nX3RleHQ6IHRoaXMuJHQoImxhbmcuZW4iKSwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0sCiAgICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICAgIGhpZGVGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHJldHVybiAoZSA9IGUucmVwbGFjZSgvKFxkezN9KVxkezR9KFxkezR9KS8sICIkMSoqKiokMiIpKSwgZTsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oIm5pZ2h0X21vZGUiKTsKICAgICAgICAgICAgbnVsbCA9PSBlICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJuaWdodF9tb2RlIiwgMCksCiAgICAgICAgICAgICAgKGUgPSBudWxsID09IGUgPyAwIDogZSksCiAgICAgICAgICAgICAgKHRoaXMubmlnaHRfbW9kZSA9IHBhcnNlSW50KGUpKSwKICAgICAgICAgICAgICBjb25zb2xlLmxvZyhPYmplY3Qod1siYSJdKShlKSwgT2JqZWN0KHdbImEiXSkodGhpcy5uaWdodF9tb2RlKSksCiAgICAgICAgICAgICAgKHRoaXMuYWRkcmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKTsKICAgICAgICAgICAgdmFyIHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibG9jYWxlIik7CiAgICAgICAgICAgIHRoaXMuJGNvb2tpZXMuc2V0KCJsYW5nIiwgdCksCiAgICAgICAgICAgICAgKHRoaXMubGFuZ190ZXh0ID0gdGhpcy4kdCgibGFuZy4iICsgdCkpOwogICAgICAgICAgfSwKICAgICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAodGhpcy5hY2NvdW50X251bWJlciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2NvdW50TnVtIikgfHwgIiIpLAogICAgICAgICAgICAgICh0aGlzLmV4dGVuc2lvbl9jb2RlID0KICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJleHRlbnNpb25fY29kZSIpIHx8ICIiKSwKICAgICAgICAgICAgICAodGhpcy5pc19zZWxsZXIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImlzX3NlbGxlciIpIHx8ICIiKSwKICAgICAgICAgICAgICAodGhpcy5kb21haW4gPSB0aGlzLiR1dGlscy5kb21haW4pLAogICAgICAgICAgICAgIDEgPT0gdGhpcy5pc19zZWxsZXIgJiYgKHRoaXMuaXNTaG93ID0gITEpLAogICAgICAgICAgICAgIGV2ZW50QnVzLiRvbigic2VsbGVyIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIHQgJiYKICAgICAgICAgICAgICAgICAgKChlLmlzX3NlbGxlciA9CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJpc19zZWxsZXIiKSB8fCAiIiksCiAgICAgICAgICAgICAgICAgIDEgPT0gZS5pc19zZWxsZXIgJiYgKGUuaXNTaG93ID0gITApKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB0aGlzLmJ1cy4kb24oIm5hdl9uYW1lIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGUuY3VycmVudCA9IGUudGFiTGlzdC5maW5kSW5kZXgoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucGFnZSA9PT0gdCB8fCAoZS5jaGlsZHJlbiAmJiBlLmNoaWxkcmVuLmluY2x1ZGVzKHQpKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoeyB1cmw6ICIvYXBpL2N1c3Rvcm0iIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB0LmN1c3Rvcm1fdXJsID0gZS5kYXRhCiAgICAgICAgICAgICAgICAucmVwbGFjZSgie2lkfSIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c2VyX2lkIiwgMSkpCiAgICAgICAgICAgICAgICAucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgIntuYW1lfSIsCiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhY2NvdW50TnVtIiwgImFueW1vdXNlIikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgICAgc2hvd0Rvd246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLmN1c3Rvcm1fdXJsLmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICA/IHRoaXMuJG1lc3NhZ2UuaW5mbygiUGxlYXNlIHNldCBjdXN0b21lciBhZGRyZXNzIGZpcnN0IikKICAgICAgICAgICAgICAgIDogd2luZG93Lm9wZW4odGhpcy5jdXN0b3JtX3VybCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNoYW5nZU1vZGU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coZSksCiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibmlnaHRfbW9kZSIsIGUpLAogICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNldF9sYW5nOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgICAgICAgICAgICh0aGlzLmxhbmdfaW1nID0gZSksCiAgICAgICAgICAgICAgICAodGhpcy5sYW5nX3RleHQgPSB0KSwKICAgICAgICAgICAgICAgICQoIi5sYW5nLWNob29zZSIpLmNzcygiZGlzcGxheSIsICJub25lIik7CiAgICAgICAgICAgICAgdmFyIGkgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxvY2FsZSIpIHx8ICJ6aCI7CiAgICAgICAgICAgICAgaWYgKGkgIT0gYSkgewogICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsb2NhbGUiLCBhKSwKICAgICAgICAgICAgICAgICAgKHRoaXMuJGkxOG4ubG9jYWxlID0gYSk7CiAgICAgICAgICAgICAgICB2YXIgbiA9IGE7CiAgICAgICAgICAgICAgICBpZiAoImtyIiA9PSBhKSBuID0gImtyIjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJqcCIgPT0gYSkgbiA9ICJqcCI7CiAgICAgICAgICAgICAgICBlbHNlIGlmICgiaGsiID09IGEpIG4gPSAiaGsiOwogICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsYW5nIiwgbiksCiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG92ZXJfbGFuZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICh0aGlzLnNob3dMYW5nTW9yZSA9ICEwKSwKICAgICAgICAgICAgICAgICQoIi5sYW5nLWNob29zZSIpLmNzcygiZGlzcGxheSIsICJibG9jayIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvdXRfbGFuZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICh0aGlzLnNob3dMYW5nTW9yZSA9ICExKSwKICAgICAgICAgICAgICAgICQoIi5sYW5nLWNob29zZSIpLmNzcygiZGlzcGxheSIsICJub25lIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGNhbmR5OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgbGF5ZXIubXNnKHRoaXMuJHQoImxheS5ub3RvcGVuIikpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBub29wZW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBsYXllci5tc2codGhpcy4kdCgibGF5Lm5vdG9wZW4iKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldE5vdGljZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvbmV3cy9saXN0IiwKICAgICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7IGxhbmd1YWdlOiAiemgiID09IHRoaXMuJGkxOG4ubG9jYWxlID8gMSA6IDIsIGNfaWQ6IDIxIH0sCiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgZS5ub3RpY2VMaXN0ID0gdC5kYXRhLm1lc3NhZ2UubGlzdDsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2V0TGFuZzogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB2YXIgdCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibG9jYWxlIikgfHwgInpoIjsKICAgICAgICAgICAgICBpZiAodCAhPSBlKSB7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oImxvY2FsZSIsIGUpLAogICAgICAgICAgICAgICAgICAodGhpcy4kaTE4bi5sb2NhbGUgPSBlKSwKICAgICAgICAgICAgICAgICAgdGhpcy4kY29va2llcy5zZXQoImxhbmciLCBlKTsKICAgICAgICAgICAgICAgIHZhciBhID0gZTsKICAgICAgICAgICAgICAgIGlmICgiaGFuIiA9PSBlKSBhID0gImtyIjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJqcCIgPT0gZSkgYSA9ICJqcCI7CiAgICAgICAgICAgICAgICBlbHNlIGlmICgiaGsiID09IGUpIGEgPSAiaGsiOwogICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsYW5nIiwgYSksCiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHNob3dhcHA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLmFwcHNob3cgPSAhdGhpcy5hcHBzaG93OwogICAgICAgICAgICB9LAogICAgICAgICAgICBnb3RvOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICh0aGlzLmN1cnJlbnQgPSBlKSwKICAgICAgICAgICAgICAgIHRoaXMuYnVzLiRlbWl0KCJuYXZfbmFtZSIsIHQpLAogICAgICAgICAgICAgICAgInVzZXJTZXR0aW5nIiA9PSB0CiAgICAgICAgICAgICAgICAgID8gdGhpcy4kcm91dGVyLnB1c2goIi91c2VyU2V0dGluZyIpCiAgICAgICAgICAgICAgICAgIDogdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiB0IH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnb3RvQWNjb3VudDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICB0aGlzLmJ1cy4kZW1pdCgibmF2X25hbWUiLCB0KSwgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiB0IH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBsb2dpbk91dDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJ0b2tlbiIpLAogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImFjY291bnROdW0iKSwKICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5jbGVhcigpLAogICAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi9jb21wb25lbnRzL2xvZ2luIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGFzc2V0c19vdmVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdGhpcy5zaG93MSA9ICEwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBhc3NldHNfb3V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdGhpcy5zaG93MSA9ICExOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvcmRlcl9vdmVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdGhpcy5zaG93MiA9ICEwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvcmRlcl9vdXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLnNob3cyID0gITE7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1pbmVfb3ZlcjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICh0aGlzLnNob3czID0gITApLCAodGhpcy5zaG93VXNlck1vcmUgPSAhMCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1pbmVfb3V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgKHRoaXMuc2hvdzMgPSAhMSksICh0aGlzLnNob3dVc2VyTW9yZSA9ICExKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgfSksCiAgICAgIHggPSBrLAogICAgICBTID0gKGEoImYxNWIiKSwgT2JqZWN0KGhbImEiXSkoeCwgYiwgQywgITEsIG51bGwsICI1ZDUwOTAxZCIsIG51bGwpKSwKICAgICAgQSA9IFMuZXhwb3J0cywKICAgICAgeiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpbmRleEJsYWNrZXMgaG9tZS1ib3ggbXQ0NSIsCiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgInN3aXBlciIsCiAgICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgb3B0aW9uczogZS5zd2lwZXJPcHRpb24gfSB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLnBpY3MsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAgICAgInN3aXBlci1zbGlkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljU3R5bGU6IHsgYmFja2dyb3VuZDogIiMwMDAiIH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIsIGhlaWdodDogImF1dG8iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IGUucGljIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJzd2lwZXItcGFnaW5hdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzbG90OiAicGFnaW5hdGlvbiIgfSwKICAgICAgICAgICAgICAgICAgICAgIHNsb3Q6ICJwYWdpbmF0aW9uIiwKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIDEKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1kIiB9LCBbCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5vdGljZV9ib3giIH0sIFsKICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibm90aWNlX2xpc3QiIH0sCiAgICAgICAgICAgICAgICAgIGUuX2woZS5ub3RpY2VMaXN0LCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAwID09IGEKICAgICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0LmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiAiY29tcG9uZW50cy9ub3RpY2VEZXRhaWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHsgaWQ6IHQuaWQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm5vdGljZV9hIGZ0MTIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7ICJkYXRhLWlkIjogdC5pZCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudGl0bGUpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKTsKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgiZGl2IiwgewogICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiMHB4IiwKICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIiNmZmYiLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmd3aGl0ZSIsCiAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAiI2ZmZiIsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCBmbGV4Y29sIiwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMTMyNHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogIjEwcHggMCIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogIjAgYXV0byIsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogIjE0MHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAiMHB4IHNvbGlkICNmNWY1ZjVmNSIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLnF1b3RhdGlvbkxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8PSA0CiAgICAgICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCBmbGV4MSBhcm91bmQgY3VyUGVyIGZsZXgxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgaGVpZ2h0OiAiMTQwcHgiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb1RyYWRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxlZ2FsX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmN1cnJlbmN5X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxlZ2FsX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuY3VycmVuY3lfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5ub3dfcHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuY2hhbmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnZvbHVtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5jbnlfcHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbGV4IGNvbHVtbiBob21lY29udGVudC1jdXJyZW5jeS13cmFwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWltYWdlIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJsKCcuL3N0YXRpYy9pbWdzLzFzLnBuZycpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YS1uYW1lIjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmN1cnJlbmN5X25hbWUgKyAiLyIgKyB0LmxlZ2FsX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImZsZXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZsZXgtZGlyZWN0aW9uIjogInJvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpZ24taXRlbXMiOiAiY2VudGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIzMHB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiB0LmxvZ28gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInN5bWJvbCBibHVlIGZ0MTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWRkaW5nLWxlZnQiOiAiMTBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICIjMzMzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9udC13ZWlnaHQiOiAiYm9sZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyh0LmN1cnJlbmN5X25hbWUpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYXRldXAgZ3JlZW5zIGZ0MTYgdGFsciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB0LmNoYW5nZSA8IDAgPyAicmVkIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogInJpZ2h0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbnQtc2l6ZSI6ICIxOHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodC5jaGFuZ2UpID49IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICIrIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0LmNoYW5nZSAtIDApLnRvRml4ZWQoMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0LmNoYW5nZSAtIDApLnRvRml4ZWQoMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IG10MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXggY29sdW1uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGZsZXg6ICIxIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm93X3ByaWNlIG5vd1ByaWNlICBmdDI0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICIjMzMzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogImNlbnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9udC13ZWlnaHQiOiAibm9ybWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodC5ub3dfcHJpY2UpLnRvRml4ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJnaW4tbGVmdCI6ICI1cHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250LXN0eWxlIjogIm5vcm1hbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbnQtc2l6ZSI6ICIxNnB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIiM5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCJVU0RUIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJxdW90YXRpb25fYm94IiB9LCBbCiAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEzMDBweCIsIG1hcmdpbjogIjAgYXV0byIgfSB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvaW5ib3ggZnQxMiByYm9tIiB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBjbGFzc2ZpdHkgdHh0Z3JheSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJob21lLnBhaXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXggY29sdW1uIGJldHdlZW4iIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJtYXJrZXQubGFzdHByaWNlIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGNvbHVtbiBiZXR3ZWVuIiB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiaG9tZS5oaWdoIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJob21lLm1pbiIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiMjRIICIgKyBlLl9zKGUuJHQoImhvbWUudm9sdW1lIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJtYXJrZXQuY2hhbmdlIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGNvbHVtbiBiZXR3ZWVuIiB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5xdW90YXRpb25MaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxID09IHQuaXNfZGlzcGxheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCBjb2lubGlzdCBhbGNlbnRlciBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgImZvbnQtc2l6ZSI6ICIxNnB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29UcmFkZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQubGVnYWxfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmN1cnJlbmN5X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5sZWdhbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5jdXJyZW5jeV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5ub3dfcHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmNoYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudm9sdW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5jbnlfcHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMjBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICIwIDEwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiB0LmxvZ28gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWw1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkgKyAiLyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICIjOTk5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9udC1zdHlsZSI6ICJub3JtYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCJVU0RUIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IHQuY2hhbmdlIDwgMCA/ICJyZWQiIDogImdyZWVuIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigibnVtRmlsdGVycyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5ub3dfcHJpY2UgfHwgIjAuMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoIm51bUZpbHRlcnMiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmhpZ2ggfHwgIjAuMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJudW1GaWx0ZXJzIikodC5sb3cgfHwgIjAuMDAiLCA1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigibnVtRmlsdGVycyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnZvbHVtZSB8fCAiMC4wMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGwgY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogdC5jaGFuZ2UgPCAwID8gInJlZCIgOiAiZ3JlZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArIGUuX3ModC5jaGFuZ2UgfHwgIjAuMDAiKSArICIlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZlYXR1cmVfd3JhcCIgfSwgWwogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5mby1saXN0IiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICI4OCUiLAogICAgICAgICAgICAgICAgICAgICAgIm1heC13aWR0aCI6ICIxMzAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImZsZXgiLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBpKCJsaSIsIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogInRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJob21lLmRzcDEiKSkpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJob21lLmRzcDEwIikpKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGkoImxpIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fbSgxKSwKICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAidGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImhvbWUuZHNwMiIpKSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCBbZS5fdihlLl9zKGUuJHQoImhvbWUuZHNwMjAiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgaSgibGkiLCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl9tKDIpLAogICAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiaG9tZS5kc3AzIikpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgaSgicCIsIFtlLl92KGUuX3MoZS4kdCgiaG9tZS5kc3AzMCIpKSldKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBpKCJsaSIsIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX20oMyksCiAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogInRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJob21lLmRzcDQiKSkpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJob21lLmRzcDQwIikpKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjbGllbnRfd3JhcCIgfSwgWwogICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIndyYXBfaW4iIH0sIFsKICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXgiLAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMzAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAiMCBhdXRvIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5uZXItd3JhcCBoaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAidGV4dC1hbGlnbiI6ICJsZWZ0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246ICJhYnNvbHV0ZSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiYWQ5NyIpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnQyODogImVuIiAhPSBlLmxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnQxNjogImVuIiA9PSBlLmxhbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJob21lLmMxMiIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogIm5leHRwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiaG9tZS5jMTMiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICI3MHB4IDEwJSAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAiMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJ1bCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibW9uX21pbmQgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9tKDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX20oNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNTdHlsZTogeyAicGFkZGluZy10b3AiOiAiNTBweCIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1wb3BvdmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICJ0b3Atc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZS4kdCgic2NhbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjIzMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6ICJob3ZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIyMDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIyMDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICIwIGF1dG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heC13aWR0aCI6ICIyMDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QtZml0IjogImNvdmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6ICIiLCBhbHQ6ICIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90OiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJkb3dubG9hZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90OiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIklPUyBBcHAiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLXBvcG92ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXJnaW4tbGVmdCI6ICIyNXB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiAidG9wLXN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGUuJHQoInNjYW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIyMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAiaG92ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMjAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiMjAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAiMCBhdXRvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiMTAwJSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXgtd2lkdGgiOiAiMjAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0LWZpdCI6ICJjb3ZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiAiIiwgYWx0OiAiIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLWJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZG93bmxvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdDogInJlZmVyZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCJBbmRyb2lkIEFwcCIpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAiI2ZmZiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC1hbGlnbiI6ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbGV4LWRpcmVjdGlvbiI6ICJjb2x1bW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWduLWl0ZW1zIjogImNlbnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljU3R5bGU6IHsgZmxleDogIjEiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbnQtc2l6ZSI6ICI0OHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWhlaWdodCI6ICI3MnB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImhvbWUuZHNwNSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNob3dEb3dubG9hZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWhlaWdodCI6ICI2MHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQtYWxpZ24iOiAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJob21lLmRzcDUwIikpICsgIiAiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zaG93RG93bmxvYWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC1hbGlnbiI6ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcmdpbi10b3AiOiAiNDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLXBvcG92ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudDogInRvcC1zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZS4kdCgic2NhbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIyMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogImhvdmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMjAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogIjIwMHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICIwIGF1dG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAiMTAwJSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4LXdpZHRoIjogIjIwMHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QtZml0IjogImNvdmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczovLyIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRvbWFpbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvYXBpL3FyY29kZT90ZXh0PWh0dHBzOi8vIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZG9tYWluICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9tb2JpbGUvZG93bmxvYWQuaHRtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Q6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJkb3dubG9hZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Q6ICJyZWZlcmVuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCJJT1MgQXBwIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1wb3BvdmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXJnaW4tbGVmdCI6ICIyNXB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICJ0b3Atc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGUuJHQoInNjYW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMjMwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6ICJob3ZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogIjIwMHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIyMDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAiMCBhdXRvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogIjEwMCUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heC13aWR0aCI6ICIyMDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0LWZpdCI6ICJjb3ZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly8iICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kb21haW4gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2FwaS9xcmNvZGU/dGV4dD1odHRwczovLyIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRvbWFpbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvbW9iaWxlL2Rvd25sb2FkLmh0bWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0OiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90OiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZG93bmxvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90OiAicmVmZXJlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigiQW5kcm9pZCBBcHAiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY1N0eWxlOiB7IGZsZXg6ICIxIiB9IH0pLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgZS5fbSg2KSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVnaXN0ZXJfd3JhcCB0YyBmbGV4IGNvbHVtbiBjZW50ZXIiIH0sIFsKICAgICAgICAgICAgICAgIGkoImgyIiwgW2UuX3YoZS5fcyhlLiR0KCJob21lLmF0cmFkZSIpKSldKSwKICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIG1hdXRvIHJlYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgIGkoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS51c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInVzZXJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImlucHV0LXJlZ2lzdGVyIiwKICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAidGV4dCIsIHBsYWNlaG9sZGVyOiBlLiR0KCJob21lLnBpbnB1dCIpIH0sCiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUudXNlcm5hbWUgfSwKICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS51c2VybmFtZSA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImZ0MTYiLCBvbjogeyBjbGljazogZS50b1JlZ2lzdGVyIH0gfSwKICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInJlZ2lzdGVycyIpKSldCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgUCA9IFsKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGkoImRpdiIsIFtpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiNThiOCIpLCBhbHQ6ICIiIH0gfSldKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gaSgiZGl2IiwgWwogICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgYXR0cnM6IHsgImRhdGEtdi0wYmEwMTkzZiI6ICIiLCBzcmM6IGEoIjhjYmYiKSwgYWx0OiAiIiB9LAogICAgICAgICAgICB9KSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBpKCJkaXYiLCBbaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoImIyNmQiKSwgYWx0OiAiIiB9IH0pXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGkoImRpdiIsIFtpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOWM5YyIpLCBhbHQ6ICIiIH0gfSldKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImRvd24tZHNwLXdyYXAiIH0sIFsKICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgIGkoImRpdiIsIFtpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiNThiOCIpIH0gfSldKSwKICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoIk1vYmlsZSBwaG9uZSBwdXJjaGFzZSIpXSksCiAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoIlRyYWRlIGFueXRpbWUsIGFueXdoZXJlIildKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICBpKCJkaXYiLCBbaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjhjYmYiKSB9IH0pXSksCiAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgaSgicCIsIFtlLl92KCJTbW9vdGggZXhwZXJpZW5jZSIpXSksCiAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoIkxldCB5b3UgaGF2ZSBhIG1vcmUgZW5qb3lhYmxlIGV4cGVyaWVuY2UiKV0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZG93bi1kc3Atd3JhcCIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgaSgiZGl2IiwgW2koImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCJiMjZkIikgfSB9KV0pLAogICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgIGkoInAiLCBbZS5fdigiUmVhbC10aW1lIG1hcmtldCIpXSksCiAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoIkxldCB5b3UgbWFzdGVyIHRoZSBtYXJrZXQgdHJlbmQiKV0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgIGkoImRpdiIsIFtpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOWM5YyIpIH0gfSldKSwKICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICBpKCJwIiwgW2UuX3YoIlF1aWNrIGRlcG9zaXQgYW5kIHdpdGhkcmF3YWwiKV0pLAogICAgICAgICAgICAgICAgaSgicCIsIFtlLl92KCJTcGVlZCBleHBlcmllbmNlLCBlbmpveSB5b3VyIGlkZWFzIildKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgd2lkdGg6ICI2MDBweCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5OiAiZmxleCIsCiAgICAgICAgICAgICAgICAiYWxpZ24taXRlbXMiOiAiY2VudGVyIiwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICI2MDBweCIgfSwKICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiODE5ZSIpIH0sCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgIF0KICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgXSwKICAgICAgVCA9CiAgICAgICAgKGEoIjI1ZjAiKSwKICAgICAgICBhKCJiNjgwIiksCiAgICAgICAgYSgiZmI2YSIpLAogICAgICAgIGEoIjdkYjAiKSwKICAgICAgICBhKCJkZjhjIiksCiAgICAgICAgYSgiYjA2OCIpLAogICAgICAgIGEoIjIwNDYiKSwKICAgICAgICBhKCIzYThmIiksCiAgICAgICAgYSgiYTdhMyIpLAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiB9IH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBhKCJ2LWNoYXJ0IiwgewogICAgICAgICAgICAgICAgc3R5bGU6ICJ3aWR0aDogIiArIGUud2lkdGggKyAiO2hlaWdodDoiICsgZS5oZWlnaHQgKyAiOyIsCiAgICAgICAgICAgICAgICBhdHRyczogeyBvcHRpb25zOiBlLnBvbGFyIH0sCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIDEKICAgICAgICAgICk7CiAgICAgICAgfSksCiAgICAgIEkgPSBbXSwKICAgICAgQiA9IChhKCJhOWUzIiksIGEoIjE1OWIiKSwgYSgiOWNhOCIpKSwKICAgICAgTiA9CiAgICAgICAgKGEoIjMxM2UiKSwKICAgICAgICB7CiAgICAgICAgICBwcm9wczogewogICAgICAgICAgICBzeW1ib2w6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAiIiB9LAogICAgICAgICAgICBwZW9yaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAiMWRheSIgfSwKICAgICAgICAgICAgY291bnQ6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiA3IH0sCiAgICAgICAgICAgIGNvbG9yOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogIiIgfSwKICAgICAgICAgICAgd2lkdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAiMTUwcHgiIH0sCiAgICAgICAgICAgIGhlaWdodDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICI1MHB4IiB9LAogICAgICAgICAgfSwKICAgICAgICAgIG5hbWU6ICJDaGFydEJveCIsCiAgICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgY29uc29sZS5sb2coIumhlOiJsiIsIHRoaXMuY29sb3IpLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJvb2tzOiBbImJvb2swIiwgImJvb2sxIl0sCiAgICAgICAgICAgICAgICBtc2c6ICJ0aGlzIGlzIEJvb2tMaXN0IiwKICAgICAgICAgICAgICAgIHBvbGFyOiB7CiAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsCiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLAogICAgICAgICAgICAgICAgICB0b3A6IDAsCiAgICAgICAgICAgICAgICAgIGJvdHRvbTogMCwKICAgICAgICAgICAgICAgICAgeEF4aXM6IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAiY2F0ZWdvcnkiLAogICAgICAgICAgICAgICAgICAgIGRhdGE6IFsiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl0sCiAgICAgICAgICAgICAgICAgICAgc3BsaXRMaW5lOiAhMSwKICAgICAgICAgICAgICAgICAgICBzaG93OiAhMSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgeUF4aXM6IHsgdHlwZTogInZhbHVlIiwgc3BsaXRMaW5lOiAhMSwgc2hvdzogITEgfSwKICAgICAgICAgICAgICAgICAgc2VyaWVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgZGF0YTogWzAsIDAsIDAsIDAsIDAsIDAsIDBdLAogICAgICAgICAgICAgICAgICAgICAgdHlwZTogImxpbmUiLAogICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgICBzbW9vdGg6ICEwLAogICAgICAgICAgICAgICAgICAgICAgYXJlYVN0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbDogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXAiID09IHRoaXMuY29sb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAicmdiYSg1MywxODIsOTAsLjkpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyZ2JhKDI1NSw3Myw3NCw5KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAuNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cCIgPT0gdGhpcy5jb2xvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJyZ2JhKDUzLDE4Miw5MCwuMCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInJnYmEoMjU1LDczLDc0LDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxDb29yZDogITEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBpdGVtU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICJ1cCIgPT0gdGhpcy5jb2xvciA/ICIjMzViNjVhIiA6ICIjZmY0OTRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAidXAiID09IHRoaXMuY29sb3IgPyAiIzM1YjY1YSIgOiAiI2ZmNDk0YSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMC40LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb21wb25lbnRzOiB7ICJ2LWNoYXJ0IjogQlsiYSJdIH0sCiAgICAgICAgICBtZXRob2RzOiB7fSwKICAgICAgICAgIHdhdGNoOiB7CiAgICAgICAgICAgIGNvbG9yOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICh0aGlzLnBvbGFyLnNlcmllc1swXS5pdGVtU3R5bGUubm9ybWFsLmNvbG9yID0KICAgICAgICAgICAgICAgICJ1cCIgPT0gZSA/ICIjMzViNjVhIiA6ICIjZmY0OTRhIiksCiAgICAgICAgICAgICAgICAodGhpcy5wb2xhci5zZXJpZXNbMF0uaXRlbVN0eWxlLm5vcm1hbC5saW5lU3R5bGUuY29sb3IgPQogICAgICAgICAgICAgICAgICAidXAiID09IGUgPyAiIzM1YjY1YSIgOiAiI2ZmNDk0YSIpLAogICAgICAgICAgICAgICAgKHRoaXMucG9sYXIuc2VyaWVzWzBdLmFyZWFTdHlsZS5ub3JtYWwuY29sb3IuY29sb3JTdG9wc1swXS5jb2xvciA9CiAgICAgICAgICAgICAgICAgICJ1cCIgPT0gdGhpcy5jb2xvcgogICAgICAgICAgICAgICAgICAgID8gInJnYmEoNTMsMTgyLDkwLC45KSIKICAgICAgICAgICAgICAgICAgICA6ICJyZ2JhKDI1NSw3Myw3NCwuOSkiKSwKICAgICAgICAgICAgICAgICh0aGlzLnBvbGFyLnNlcmllc1swXS5hcmVhU3R5bGUubm9ybWFsLmNvbG9yLmNvbG9yU3RvcHNbMV0uY29sb3IgPQogICAgICAgICAgICAgICAgICAidXAiID09IHRoaXMuY29sb3IKICAgICAgICAgICAgICAgICAgICA/ICJyZ2JhKDUzLDE4Miw5MCwuMCkiCiAgICAgICAgICAgICAgICAgICAgOiAicmdiYSgyNTUsNzMsNzQsMCkiKTsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gcGFyc2VJbnQobmV3IERhdGUoKS52YWx1ZU9mKCkgLyAxZTMpLAogICAgICAgICAgICAgIGkgPSBhIC0gNjA0ODAwOwogICAgICAgICAgICB0aGlzLiRodHRwCiAgICAgICAgICAgICAgLmdldCgiL2FwaS9jdXJyZW5jeS9uZXdfdGltZXNoYXIiLCB7CiAgICAgICAgICAgICAgICBwYXJhbXM6IHsKICAgICAgICAgICAgICAgICAgc3ltYm9sOiB0aGlzLnN5bWJvbCArICIvVVNEVCIsCiAgICAgICAgICAgICAgICAgIGZyb206IGksCiAgICAgICAgICAgICAgICAgIHRvOiBwYXJzZUludChuZXcgRGF0ZSgpLnZhbHVlT2YoKSAvIDFlMyksCiAgICAgICAgICAgICAgICAgIHBlcmlvZDogdGhpcy5wZW9yaWQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgIHZhciBpID0gYS5kYXRhLAogICAgICAgICAgICAgICAgICBuID0gaS5kYXRhLnJldmVyc2UoKS5zbGljZSgwLCBlLmNvdW50KS5yZXZlcnNlKCksCiAgICAgICAgICAgICAgICAgIHMgPSBbXSwKICAgICAgICAgICAgICAgICAgbyA9IFtdOwogICAgICAgICAgICAgICAgbi5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIHMucHVzaChlLmlkKSwgby5wdXNoKGUuY2xvc2UpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB2YXIgciA9IE1hdGgubWluLmFwcGx5KG51bGwsIG8pOwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIuacgOWwj+WAvCIsIHIpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBvLmxlbmd0aDsgbCsrKSBvW2xdID0gb1tsXSAtIHI7CiAgICAgICAgICAgICAgICAodC5wb2xhci54QXhpcy5kYXRhID0gcyksICh0LnBvbGFyLnNlcmllc1swXS5kYXRhID0gbyk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0pLAogICAgICBGID0gTiwKICAgICAgTCA9IE9iamVjdChoWyJhIl0pKEYsIFQsIEksICExLCBudWxsLCBudWxsLCBudWxsKSwKICAgICAgTSA9IEwuZXhwb3J0cywKICAgICAgRSA9IGEoIjcyMTIiKSwKICAgICAgViA9IGEubihFKSwKICAgICAgRCA9IGEoImE5MzkiKSwKICAgICAgUiA9IGEubihEKSwKICAgICAgVSA9IHsKICAgICAgICBuYW1lOiAiaG9tZUNvbnRlbnQiLAogICAgICAgIGNvbXBvbmVudHM6IHsKICAgICAgICAgIGluZGV4SGVhZGVyOiBBLAogICAgICAgICAgU3dpcGVyOiBFWyJTd2lwZXIiXSwKICAgICAgICAgIFN3aXBlclNsaWRlOiBFWyJTd2lwZXJTbGlkZSJdLAogICAgICAgICAgdnVlU2VhbWxlc3NTY3JvbGw6IFIuYSwKICAgICAgICAgIENoYXJ0Qm94OiBNLAogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgbnVtRmlsdGVyczogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgcmV0dXJuIGUKICAgICAgICAgICAgICA/ICgoZSA9IChlIC0gMCkudG9GaXhlZChwYXJzZUludCh0KSkudG9TdHJpbmcoKSksCiAgICAgICAgICAgICAgICBlLnNsaWNlKDApICsgIiAiKQogICAgICAgICAgICAgIDogIjAuMDAwMCI7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc2hvd0Rvd25sb2FkOiAhMSwKICAgICAgICAgICAgcXVvdGF0aW9uOiBbXSwKICAgICAgICAgICAgbm93Q29pbjogIiIsCiAgICAgICAgICAgIHBpY3M6IFt7IHVybDogMSB9LCB7IHVybDogMiB9XSwKICAgICAgICAgICAgY3VyU3dpcGVyOiAwLAogICAgICAgICAgICBjdXJDb2luVGFiOiAwLAogICAgICAgICAgICBjb2luVGFiTGlzdDogW3sgdGl0bGU6ICJVU0RU6KGM5oOFIiB9LCB7IHRpdGxlOiAiQlRD6KGM5oOFIiB9XSwKICAgICAgICAgICAgY29pbktsaW5lTGlzdDogW10sCiAgICAgICAgICAgIGNvaW5LbGluZToge30sCiAgICAgICAgICAgIHN3aXBlckxpc3Q6IFtdLAogICAgICAgICAgICBiYW5uZXJIZWlnaHQ6IDU0MCwKICAgICAgICAgICAgYmFubmVyV2lkdGg6ICIiLAogICAgICAgICAgICBzY3JlZW5XaWR0aDogd2luZG93LmlubmVyV2lkdGgsCiAgICAgICAgICAgIGNvaW5MaXN0OiBbXSwKICAgICAgICAgICAgY29pbl9saXN0OiBbXSwKICAgICAgICAgICAgbm90aWNlTGlzdDogW10sCiAgICAgICAgICAgIHN3aXBlckltZ3M6IFtdLAogICAgICAgICAgICBmb290RnJpc3Q6IFtdLAogICAgICAgICAgICBmb290U2Vjb25kOiBbXSwKICAgICAgICAgICAgc3dpcGVyT3B0aW9uOiB7CiAgICAgICAgICAgICAgbG9vcDogITAsCiAgICAgICAgICAgICAgc3BlZWQ6IDYwMCwKICAgICAgICAgICAgICBhdXRvcGxheTogITAsCiAgICAgICAgICAgICAgcGFnaW5hdGlvbjogeyBlbDogIi5zd2lwZXItcGFnaW5hdGlvbiIsIGNsaWNrYWJsZTogITAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZG9tYWluOiAiIiwKICAgICAgICAgICAgcmFuZFZvbDogMCwKICAgICAgICAgICAgcXVvdGF0aW9uTGlzdDogW10sCiAgICAgICAgICAgIHVzZXJuYW1lOiAiIiwKICAgICAgICAgICAgbGFuZzogImVuIiwKICAgICAgICAgICAgcGF0aDogIndzczovL3d3dy5tZXRhbWFzdG9rLmNvbTo1ODYwLyIsCiAgICAgICAgICAgIHdzb2NrZXQ6ICIiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuZ2V0UXVvdGF0aW9uKCksCiAgICAgICAgICAgICh0aGlzLmxhbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhbmciKSk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmNvbm5lY3QoKSwKICAgICAgICAgICAgdGhpcy5nZXROZXdzKCksCiAgICAgICAgICAgIHRoaXMuZ2V0THVuYm8oKSwKICAgICAgICAgICAgdGhpcy5pbml0UXVvdGF0aW9uKCksCiAgICAgICAgICAgICh0aGlzLmRvbWFpbiA9IHRoaXMuJHV0aWxzLmRvbWFpbik7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbiAodCkgewogICAgICAgICAgICBlLnF1b3RhdGlvbkxpc3QucHVzaCgpOwogICAgICAgICAgfSwgNWUzKTsKICAgICAgICB9LAogICAgICAgIGNvbXB1dGVkOiB7CiAgICAgICAgICBvcHRpb25MZWZ0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7IGRpcmVjdGlvbjogMiB9OwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIHRvUmVnaXN0ZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgICAgICAgIG5hbWU6ICJyZWdpc3RlciIsCiAgICAgICAgICAgICAgcXVlcnk6IHsgZW1haWw6IHRoaXMudXNlcm5hbWUgfSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgaW5pdFF1b3RhdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvY3VycmVuY3kvcXVvdGF0aW9uX25ldyIsCiAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICBkYXRhOiB7fSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IFtdLCBpID0gMCwgbiA9IDA7IG4gPCB0LmRhdGEubWVzc2FnZS5sZW5ndGg7IG4rKykKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHQuZGF0YS5tZXNzYWdlW25dLnF1b3RhdGlvbi5sZW5ndGg7IHMrKykKICAgICAgICAgICAgICAgICAgICAgIGEucHVzaCh0LmRhdGEubWVzc2FnZVtuXS5xdW90YXRpb25bc10pLAogICAgICAgICAgICAgICAgICAgICAgICAoaSArPSBwYXJzZUludCh0LmRhdGEubWVzc2FnZVtuXS5xdW90YXRpb25bc10udm9sdW1lKSk7CiAgICAgICAgICAgICAgICAgIChlLnF1b3RhdGlvbkxpc3QgPSBhKSwgKGUucmFuZFZvbCA9ICIgIiArIHBhcnNlSW50KGkpICsgIiAiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbm5lY3Q6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICBlLiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICBlLnNvY2tldHMuc3Vic2NyaWJlKCJkYXltYXJrZXQiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJkYXltYXJrZXQiID09IHQudHlwZSkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IHQuc3ltYm9sLAogICAgICAgICAgICAgICAgICAgIGkgPSB0LmNoYW5nZTsKICAgICAgICAgICAgICAgICAgdC5ub3dfcHJpY2UsIHQudm9sdW1lOwogICAgICAgICAgICAgICAgICBpIDwgMAogICAgICAgICAgICAgICAgICAgID8gJCgibGlbZGF0YS1uYW1lPSciICsgYSArICInXSIpCiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCJidXR0b24iKQogICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoImRvd25jb2xvciIpCiAgICAgICAgICAgICAgICAgICAgOiAkKCJsaVtkYXRhLW5hbWU9JyIgKyBhICsgIiddIikKICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoImJ1dHRvbiIpCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygiZG93bmNvbG9yIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoImRheW1hcmtldCIgPT0gdC50eXBlKQogICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGUucXVvdGF0aW9uTGlzdC5sZW5ndGg7IG4rKykKICAgICAgICAgICAgICAgICAgICBlLnF1b3RhdGlvbkxpc3Rbbl0ubGVnYWxfaWQgPT0gdC5sZWdhbF9pZCAmJgogICAgICAgICAgICAgICAgICAgICAgZS5xdW90YXRpb25MaXN0W25dLmN1cnJlbmN5X2lkID09IHQuY3VycmVuY3lfaWQgJiYKICAgICAgICAgICAgICAgICAgICAgICgoZS5xdW90YXRpb25MaXN0W25dLm5vd19wcmljZSA9IHQubm93X3ByaWNlKSwKICAgICAgICAgICAgICAgICAgICAgIChlLnF1b3RhdGlvbkxpc3Rbbl0uY2hhbmdlID0gdC5jaGFuZ2UpLAogICAgICAgICAgICAgICAgICAgICAgKGUucXVvdGF0aW9uTGlzdFtuXS52b2x1bWUgPSB0LnZvbHVtZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5xdW90YXRpb25MaXN0W25dLmhpZ2ggPSB0LmhpZ2gpLAogICAgICAgICAgICAgICAgICAgICAgKGUucXVvdGF0aW9uTGlzdFtuXS5sb3cgPSB0LmxvdykpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHNldFBlcmNlbnQ6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIGlmIChlIC0gdCA9PSAwKSByZXR1cm4gIjAlIjsKICAgICAgICAgICAgaWYgKDAgPT0gZSkgcmV0dXJuICItMTAwJSI7CiAgICAgICAgICAgIGlmICgwID09IHQpIHJldHVybiAiKzEwMCUiOwogICAgICAgICAgICB2YXIgYSA9ICgoZSAtIHQpIC8gdCAvIDEwMCkudG9GaXhlZCgyKTsKICAgICAgICAgICAgcmV0dXJuIGEgPiAwID8gKGEgPSAiKyIgKyBhICsgIiUiKSA6IChhICs9ICIlIiksIGE7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0UXVvdGF0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jdXJyZW5jeS9xdW90YXRpb25fbmV3IiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUgJiYgMCAhPSB0LmRhdGEubWVzc2FnZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHZhciBhID0gdC5kYXRhLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICBlLnF1b3RhdGlvbiA9IGEuZmluZChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gIlVTRFQiID09IGUubmFtZTsKICAgICAgICAgICAgICAgIH0pLnF1b3RhdGlvbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGdvVHJhZGU6IGZ1bmN0aW9uIChlLCB0LCBhLCBpLCBuLCBzLCBvLCByKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiY3VycmVuY3lfaWQiLCB0KSwKICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oImxlZ2FsX2lkIiwgZSksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjdXJyZW5jeV9uYW1lIiwgaSksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsZWdhbF9uYW1lIiwgYSksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJzeW1ib2wiLCBpICsgIi8iICsgYSksCiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi9sZXZlcmRlYWxDZW50ZXIiKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRDdXJyZW50OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLmN1ckNvaW5UYWIgPSBlOwogICAgICAgICAgfSwKICAgICAgICAgIG1vdXNlRW50ZXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuY3VyU3dpcGVyID0gZTsKICAgICAgICAgIH0sCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdCgiL2FwaS9xdW90YXRpb24iKS50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgIm9rIiA9PSBhLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgKCh0LmNvaW5MaXN0ID0gYS5kYXRhLm1lc3NhZ2UuY29pbl9saXN0KSwKICAgICAgICAgICAgICAgICh0LnN3aXBlckxpc3QgPSBhLmRhdGEubWVzc2FnZS5jb2luX2xpc3QpLAogICAgICAgICAgICAgICAgZSAmJiBlKCkpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICB0aW1lc3RhbXBUb1RpbWU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gbmV3IERhdGUoZSksCiAgICAgICAgICAgICAgYSA9IHQuZ2V0RnVsbFllYXIoKSArICIvIiwKICAgICAgICAgICAgICBpID0KICAgICAgICAgICAgICAgICh0LmdldE1vbnRoKCkgKyAxIDwgMTAKICAgICAgICAgICAgICAgICAgPyAiMCIgKyAodC5nZXRNb250aCgpICsgMSkKICAgICAgICAgICAgICAgICAgOiB0LmdldE1vbnRoKCkgKyAxKSArICIvIiwKICAgICAgICAgICAgICBuID0gdC5nZXREYXRlKCkgKyAiICI7CiAgICAgICAgICAgIHJldHVybiBhICsgaSArIG47CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TmV3czogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAKICAgICAgICAgICAgICAucG9zdCgiL2FwaS9uZXdzL2xpc3QiLCB7CiAgICAgICAgICAgICAgICBjX2lkOiA1LAogICAgICAgICAgICAgICAgbGFuZzogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsYW5nIiksCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICAgICAgICBhLmxlbmd0aCwgKGUubm90aWNlTGlzdCA9IGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGdldEx1bmJvOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cAogICAgICAgICAgICAgIC5wb3N0KCIvYXBpL25ld3MvbGlzdCIsIHsKICAgICAgICAgICAgICAgIGNfaWQ6IDUsCiAgICAgICAgICAgICAgICBsYW5nOiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhbmciKSwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBpZiAoIm9rIiA9PSB0LmRhdGEudHlwZSkgewogICAgICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgICAgIHZhciBhID0gW10sIGkgPSB0LmRhdGEubWVzc2FnZS5saXN0Lmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICAgICAgaSA+PSAwOwogICAgICAgICAgICAgICAgICAgIGktLQogICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHQuZGF0YS5tZXNzYWdlLmxpc3RbaV07CiAgICAgICAgICAgICAgICAgICAgYS5wdXNoKHsgaHJlZjogIiIsIHBpYzogbi50aHVtYm5haWwgfSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZS5waWNzID0gYTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnb0RldGFpbDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZSA9IGU7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogIm5vdGljZURldGFpbCIsIHF1ZXJ5OiB7IGlkOiBlIH0gfSk7CiAgICAgICAgICB9LAogICAgICAgICAgYWJvdXRVczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdCgiL2FwaS9uZXdzL2xpc3QiLCB7IGNfaWQ6IDkgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICBhLmxlbmd0aCwgKGUuZm9vdEZyaXN0ID0gYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBoZWxwOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KCIvYXBpL25ld3MvbGlzdCIsIHsgY19pZDogMTAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICBhLmxlbmd0aCwgKGUuZm9vdFNlY29uZCA9IGEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIE8gPSBVLAogICAgICBXID0KICAgICAgICAoYSgiOGYxZSIpLAogICAgICAgIGEoImNjNDkiKSwKICAgICAgICBhKCI1NjZhIiksCiAgICAgICAgT2JqZWN0KGhbImEiXSkoTywgeiwgUCwgITEsIG51bGwsICJlNGI1ZDUyYyIsIG51bGwpKSwKICAgICAgaiA9IFcuZXhwb3J0cywKICAgICAgcSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZm9vdGVyIiwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmZWR1aS1yb290IGZlZHVpLWZvb3RlciIsCiAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgImRhdGEtdi0zZmZiZjZiZSI6ICIiLAogICAgICAgICAgICAgICJkYXRhLWxvY2FsZSI6ICJ6aC1jbiIsCiAgICAgICAgICAgICAgImRhdGEtaG9zdG5tYWUiOiAiREVLUy52aXAiLAogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZlZHVpLWZvb3Rlci1pbm5lciIgfSwgWwogICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZlZHVpLWZvb3Rlci1yaWdodCBtYjE1IiB9LCBbCiAgICAgICAgICAgICAgICBhKCJkbCIsIFsKICAgICAgICAgICAgICAgICAgYSgiZHQiLCB7IHN0YXRpY0NsYXNzOiAiZnQxNiIgfSwgWwogICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJob21lLmNvb3BlciIpKSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBlLl9tKDEpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkbCIsIFsKICAgICAgICAgICAgICAgICAgYSgiZHQiLCB7IHN0YXRpY0NsYXNzOiAiZnQxNiIgfSwgWwogICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJmb290ZXIuYWJvdXQiKSkpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAiZGQiLAogICAgICAgICAgICAgICAgICAgIGUuX2woZS5mb290U2Vjb25kMiwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICAgICAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiAiamF2YXNjcmlwdDo7IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29EZXRhaWwodC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC50aXRsZSkpXQogICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRsIiwgWwogICAgICAgICAgICAgICAgICBhKCJkdCIsIFtlLl92KGUuX3MoZS4kdCgiZm9vdGVyLmV4cGxhaW4iKSkpXSksCiAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgImRkIiwKICAgICAgICAgICAgICAgICAgICBlLl9sKGUuZm9vdEZyaXN0MiwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICAgICAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBocmVmOiAiamF2YXNjcmlwdDo7IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29EZXRhaWwodC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC50aXRsZSkpXQogICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRsIiwgeyBzdGF0aWNTdHlsZTogeyAidGV4dC1hbGlnbiI6ICJjZW50ZXIiIH0gfSwgWwogICAgICAgICAgICAgICAgICBhKCJkdCIsIFtlLl92KGUuX3MoJ0VtYWlsOlNlcnZlQEdsb2JhbENyeXB0b2N1cnJlbmNpZXMtd2ViLmNvbScpKV0pLAogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJkZCIsCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLmZvb3RDb250cmFjdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJhIiwgeyBhdHRyczogeyBocmVmOiAiamF2YXNjcmlwdDo7IiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudGl0bGUpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgZS5fZSgpLAogICAgICAgICAgXQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIEcgPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmVkdWktZm9vdGVyLWxlZnQiIH0sIFsKICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZlZHVpLWZvb3Rlci1sb2dvIiB9LCBbCiAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMjAiLAogICAgICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgc3JjOiBhKCI5ZDY0IiksCiAgICAgICAgICAgICAgICAgIGFsdDogIiIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZlZHVpLWZvb3Rlci1jb3B5cmlnaHQiIH0pLAogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmVkdWktZm9vdGVyLWxpbmsiIH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGkoImRkIiwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibmF2LWxpbmsiIH0sIFsKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgImEiLAogICAgICAgICAgICAgICAgeyBhdHRyczogeyBocmVmOiAiaHR0cHM6Ly93d3cuaHVvYmkuY29tIiwgdGFyZ2V0OiAiX2JsYW5rIiB9IH0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgc3JjOiAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIVUFBQUFTQ0FZQUFBQmw5WkZlQUFBTTRFbEVRVlJvZ2UxWmU3QmRWWG4vL2I2MXo3MDM5K1p4RXhJZzRXWFVFTUxER3NCQUlpOHhZRHNHQmF5QUJiRXAxajZJTTdST25GS2hVMFZuSEpGaXBhTVdXaDZHQ0Q2d3JXa2JoVUlNdzBNWW5pWVIya1lTbEZjU3lJdDdjeDluNy9YcmZIdXZmZTdKeVlVQi82bC9zR2JXUGZmc3MvWmEzL3Y3ZmQvaVU1dDJvR1AwaVZ3U2diV1FYdXI4TVhRK2VLUEREQ0FCcVh4QjZUV1N5R05FTXowUEpCb2tKTUhNeXMrWmt3M1gzVDJJRzlZTTRNQXBGUVZpdFVtZUFkR0FVQUFobGh1Q1VTMmlLS0FJUUdGQWxnTXY3NGs0L1lodWZQbmNTWGhsTUNLYWdSSUtFakZHWkU2cTAybFdmdmY5ekQvYmhweVh2UjZvM01QWEZuNm1XZlVPaVJFSjBYOVBTN3NUei9VZTVYcysvVHpudWUyczhqL2ZLOG5McEhLLzhvejByQ2Y5SDl0b01pZWdmY0pza0dhWG1kbmxMdFRPK2RiNDdSODJLcUdlYmdXNTFFdWdpOEFmVXByRlpJWDFmR3Y4OW84c2IxT1VxdkE2cHdFY0RhQUx3SEdRWHZqLzVzS2pZYk1ROGpnV2R0NGFyejJ5T3RZcnhYc3p1MFNWUWhIQmhWbkdWZjBUV0VwMjkyQ0IwVnl3NnFWakFCd0o0QmNBMW5XY01BdkFLUUNlQmZCUW5SNSswNUVYd05RK3c4UnVvdkQwUS9RRE9CWEFpSWcxSWtaZVoydGYrNjVFNTh1dnMyNEdnWGtBZWdFNGx0Z0M0TVcyM3ljbG5qd0gzUU5nOEEwWlpOc0VNQUhBWWdDakFPNEZNUFJtUmNLVWsxUFVkRnBQZHhFQldPUHlRQ0t3SEtwZVdHRGtIOVhmZTdyWTE1MFJhLzY3aVhzMmpDQnJCUFJPeUNBTFFBZ1hJNFRiRWNKTkNPVjNhR3pPUndpM0lZUzdFY0swOG5rYlNIcXpZOXVyQlM0NmNRTG1IZHlGYllNQ2c3MlR0SCtoMmVvUU1jY0JFRnRRcE9hK01rUVpseGxzYlJaNUJ3SzZSd3RoeDU1WUc2YVBET1NuTS9LK1JnaHJMY3RXdyt4eEFDOFF1RkxBOU9qMG0rMlBFTDZORUg0RTRQZmVLQXNPK2hybEllV2NTTE1WTVBzeGdRL3lEYnpmUGx4Nm1SbTZmTThRMEJYQ3dRemgrd2hoTllGVGF3UHlzMG8zQ3NCaERHR0ZvMThrRktxb2pmLzB3Q0J1dkhjWUdCV1dudEtEcGUrYmhNelJaR3hGd2Q3WE9CL0pNaHUva1NZN3hsQVQrTUJSWFhoK1IwU3pnREtyeU80YVFaZU1LREpDOEx4ZktiVEVtMHh5clZEd2NENkt4c3lKWWVRRFIzWmphTFFpMGNpL0IvRG5KZEhTL1lqeEdaS1RSTTVtQ0Y4d3lRUjhQdkZVSktyMjBzZnJZWTNhczFTamZqSXZVMGlNUFVpL3Zkbmg1Mm5zdlR6dE02RitVQnBzbDltTWJyTi9OZUR3bWp3emJCb2FLVzc5NFpORGI1OHh5WmJNbkdwWTljZ1FCa1lpc3NyTTY2VkZPd01kdzMvYkxXa2FnS1VBVHVwWWRqeUFQd1l3Znh5K1BLOWZBR0FKZ0lrRG84STU4N3N3dGRmUXpNdWp5NUNlWjVnU0EwNERjRDZBSTZxazYyVkNkTUg1dkZyQUdZdzRQeC9Xd0NHVEE4NCtmZ0oyTlVzQm45cFNLUEFsRnNWaUZjWEZrczRSK1Q3RWVEbGlMTnFVcG83UDhSVHFZZnJkYVpZRzFxbTRoQXY4ellNQUxBS3czMnZvdGJ2a3FWcmp0TTZ0enh5SHBsYUtLOE52Zzd3VzVMdGJGQXZvNjhIZi9PT0RlM1pvRkIvUEF1OHdsdmtUTi96WElEb3FtN3lUWUFDNzJoNE5Ham1md0kwZ1Y0SGNEMk5NWGtUZ2VwSlgxcUVEMG5TUzN6Q3pCd0hjUm4vSGJCMmtaY001OEtsVGVwQUZ0L3pFaE5sS2tHc0kzRzYwaHdIZUN1Q2d0bHgySm9CbEFNNm1BVlg0VldXWTVHbEpLczhEdUVwbXd3eWhxak9sSFpDK0RQS0x5U3ZHcitmMnJtRXZDMlliREhnY1pvK0NmRnJBcDVsZVZzWGZzQ3JzY3JXWi9RTGsvVERiQU9DT2R1V3lMSGZ0QjBhdTh6VWtmNXIydkt0MGdrcXA0N3A1UnZMOUFDNnNIeFFSbU5hSEczY081TGMrdHJuWlgwUit6Q2dQNHhlT0ZQcmM1bTE1NTA0VFcxWTVOdWFuSEYzYlNWZjY3TzhJeDQyRXVHZFlWWUEzU042VXZOTmYvaDhDMHdtOHpjeXV5NEsySDdwZitBN2JySkxBVEFFN1BmVVNtRVBuaFR4VTBBY0Z2QXJnQkFNK0xNTitNY090Q3NqYmpPcFFWSUorVmtVeDRyaUE1RHNTVHpuTUlvRWhBYjhlRCt4VnFpNTE3VkgvQ3BwOUlYbmhpNG5QdVFTK252aS9wdTRUdE5IZEJMQUp3R3dBNXhLWURPQXNBTU5GaFFxNkpXMTE0eURnY05XZFl6SE1ib0IwWWcyTU9vZEw4ZUwyQU5MYlk0OXMyYTNMcnZqT2JtelpHajgzcGRmbU9wVXhZSW02YkdwMzd6N0c4VTY0WmJaTkF0ZWxWYzNhVnRvKzI0VlQvejVTTmtESTgwQXVFVEFVZ2FXak1jNHQ4dngzQ3VsN3ZpalNydHpaOUJ5bjRaWmdvOVpFeEdNS3hzTVJkUjZBQVpJbkZ4ay9HVU1wdk9HT3MvWlJqQXUzaHFFRy9BekFFd0RXSjhUc1FqOWhQTFNya2laNkdKOE5zK1grTEkveDZwam5oeUZHbDh2SzZoQXVMeU9VTkZobStxcnp0RDdQOCtOVUZHK0g5UHVPdGtrdUJubGVVY0ZpNVRHZVcwZ0hqZWI1KzRzOFh4UmpYT2hHQnZJNGtBdFFHZTIrU2lYNXJ2cExGRVlQbklqUFB2ekw0VmZ2M3RpY04yTnk5cWUxcjFFOG1yQloxRDVLSFpKMG42U2ZwWGtQcEtmSFpQUW1CbmxpZFpZZURUSGU3TjRyNExsbWpGOHNPMkhFRVkycTlDakFhbTlHL1RXRjU5SWgzNWR3VituOUJlYXdxRHFKTlh1dlF3aTlOZWh0T3NYNEQ1SitMT21KTWUxcFptZWFxUjRMTWMvOTgzZ0NreVJ0SDVXK1ZIcWd0QXN4T2w3WURmSUFWUGw3RUtRM2RsejVYeTJBZGFYclNuY294dHVUQVN6eGNCOUlaY0JBRi9tSlJnalhoeEMrQzdPL1VPMGc1SXp4RExWR3Z5MzBPcWtMRHoyK2VXVE43VThPNFpBRHNqK0owc1E2MXFxS3BSb25pbTlXQmZIcnRyRGp5aVVHZks5RzE1MnlhUHUvVTlBOXJOeDV1L2VEbGFDN1Nla3hMS3ZhblZZYkRJVUJMMm1Ld0JvUjdrelAreXNrUEFiazJobFBzdzVmYWlrSitEekpSZ0lvUHdVd0xaMDlQa3l0enB5ZTl0M1VUWXAxK1NhTmxQUklreVZOTGxHd3kwbHlIRE5ZbG5veGxqMW1NOXVUYUpxWWNuQi9DT0hHQ0p5VHRSTTVOdklPbWtvaGVRL2RVbk9nSENIancxc0hoWTIveXZ2NkFrNXBkMHFLR3lsc0hjZFRteVFIRWpqeU9VUnlXOGVhTVk4dGlrRVVCVWFkR2FCSXU5VjVOay9FTjNLeXRBakc2SzNMWmd0SGxkYkpXSDh2QW5wa0ZTTE1neHRDMmVKMERodXZvWWFXWXYyOGxQdW4xclZrVWVLSzJHeEt6N1Z5TjdreDVjV2FqMkZVTFZWbjNvbmVWamNYZ3NzaW9iaWlLdW42YXZFbXBWazZuNkdLUkxWaGRMdlNJN2s3cnhSemdZQnpBT3hvU2hlTXhuaVlZanhhVWkxYkpYcHFMcHR1SE80TWZoV3hxcVZxUWQ1czZPdm05RUxZZjIrMXhMc1FpcGRsKzBReFk5dk9DYjd2VmJ1SzNGMHpWaUxPNnRiQ21Ud2hNVlJXalFLZVVsVWp6KzgxT3paTFJKSDhNS3Z1MXk2U1d5RzhBR0ZqT3ZDalpSU3BrdU1oQUJiNC81WmpVMUo5SzFxNDh6UUMwZDlMTktQY00rOUxlOHpOUXJpZ1ZVOVc5QzFMSHJqZFlueWFGV01WeUpHbXFQSzJxcDRIdHFkOTVvazhNL0hzM3ZkUlI3UkpOaHVHcXh1YkZ5cWo0MW1TeXVobVpyTklucUhxM0JlVHB1WWtzdGNUK0M2QVgwbmEwSVlSbk5qUmxnTkwrOWRJM0JsZURlbEJrQXVEY2ZGb0U5ZzlGSGYwOTRiaElyYXNlbGVUK0pwbitXM0RjVndINktqRjJyLzBvQ2pXdyt4LzRZU2EzU3pncG9iWlBBSW5xN0xXbFZYREFEOGtjQVdBQTBIK1FPUXRKR2QzbVgxQ3BWdnA3NXJ1elNvR0lGc0IybFVnUGd2QUVlc3pXZVR2a3BqamR4TWt2cFdvYU4wV05qSmd5NjRDUC9uNUVONTdlQmVHUjdVcWhMQ1dWUTM0YlpDTGd0bXpBWGdQemM1WDFTUzRObnFuVXRxV2tWc04yQi9rNVFST0pQRHpMdktXRWVtQktOMXA1Sm55MG9TOGlhUlhGbjlReVZ2L0dhUkh1cXV3L0JXUXR3RDRPTWlwdmtkWmRwSEhsTVlkNDRwbVpURFBKaEEzUDVCL21aR2JvelJMUUg4Szc5TVU0MkEwMjJKbWt5QXRoOWt4R2JBMWd6UWc2V3lZclI0YzBiRkhIdFI0NzhkTzZMMS8xWk9qZDA2ZXdEOHpZUU9MZUVtUlllTzBYc1BTaFgxbC96VmQ1ZTNsbFcyYXJOM1o4MGMvWS9SZTZpVWl2ZTQ4aUNFc2I5MnJTdjhzY2tWYS94eWtzMERlVnNMOEVQNDJyZkUvSzV1RnZ0SnMxWVg4bXFRRFNWMEs4aU90U0NGc1pJeVhpbmdtZVc5M0lteENWMFk4djZQQXZ6OHhnZzhkMjROZnYxSU1VVHJmNjJJQzU1YnRRci9EcmNDTGgzNC80NXFpeWxXamdiemV6TDRleWFOb2RoU3FGUEp2VWRvNklpM3ROdnVta1I5Q0NKZHk3Tjc0UndRK2xhNStuWmNWTWNaMzBPeXZFTUlTZXZsVzhmY1N5RThTZU14Qm15UCtYRm9ReUFzRlhLTTJ4MUdNNjZQMHFGWEsvU3FrYjdsUjBPeVlodFB0bCtTcUxuNm5DZnpNWWROc3luODhQcnhzK2NxZEJ4d3dvL0daaUxpaTBjUzZRVzljOWhHM1hOUmY5bG1iVVVlU3ZNanJRd0RYdG9SZmphbmVLYUxEZU9BcU54elBqUXJoWUhrb2xXYUQzSm5IK0VBZzE0SnNnUm1yTHB1OWhsc0FhVDZsa1FnOEZvQ2ZoQWJ3eTIwRkxyOXRGNEwzbXgyM0dkNUQ2Q1RGc3BPem1lU2R6UFZTM2dEeTRGa0RSNGNDU3drOEJlRG1JaUlmYmdxWG50R0hqeHpYZzFmMmxNSUtEdllvSGV1NXM2d3pwY2RNZWpEbHhqTFplN0VlZ1pPQzJmRkJtaGpKWFI1MUNtbWdXUlRlbVdzMGdOTkZMbktRbEFNUGtidzNPQTVJeHBqU2pKY2RYaWFkQm5KS2xEWVV3QU5kWnBzY09KVmh1dXIwdVZBWEdlbFI0VzN5MUJPajgzRnZsTGE1QkR4VXh4QVdBamlaVW5ja3Qvd2ZSeVh5emVlYU9LWUFBQUFBU1VWT1JLNUNZSUk9IiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5hdi1saW5rIiB9LCBbCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJhIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaHJlZjogImh0dHBzOi8vd3d3LmJpbmFuY2UuY29tIiwgdGFyZ2V0OiAiX2JsYW5rIiB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiZmZhZCIpIH0gfSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJuYXYtbGluayIgfSwgWwogICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAiYSIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGhyZWY6ICJodHRwczovL3d3dy5rcmFrZW4uY29tLyIsIHRhcmdldDogIl9ibGFuayIgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgc3JjOiAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFGRUFBQUFOQ0FZQUFBRFJ3NEs2QUFBTDdrbEVRVlJZaFoxWUIzU1VWUmErZjVsZU04bVFrQUloaEFSSWdDQlZXRUJwRVZDS29DaFNGRkFVQ3hiUVJXemhBT29pZ29LTHVtQURGb011S2dwS0w1NFVpa0NBOU40bm1jbGsrdC9mMi9NbUNXQmgxOTE3emp2ejVzMjc5Ny92ZTkvOTN2dUhtbnRuS1FBR29Ga0FqWVlDalpZMkRoeHFtSll4M0hCUHoyUk51aldDTVRZM1NLNnFNdjVVYmFWdytQTFowRW0zU3dLRUFDZ0tyaHRTTUZodGJGeEt1bTQwejZGcmlveUxQRzRGR21vRUFLQWdZNlIraXNISVJEYlZpY1dwNmJwZkpreXpKR09BZmdFZk9ubmlvSWRMRzZ5ZnA5RlJFV01tbWovKzZyTTJmdThPSnd3YVp1eVZsS0taMExPM3ByOG9ZSVVMS2xWWEw0Wnlpd3U0QXA1RGtOaEhDMFlURFNvMVBVU3RvWklhcW9XY1lBQTFpU0lHdjA4Qms1blJEeDVweUtScE1KVVY4aWNDUHFWQjRERmdqR0hZYUdQZjJCN3FpV290RlM5d21ITTBTdWN1bnczOHlJVVFNQ3dGbUdCQ0E1TTJXSCszVGs4ekJlZEMrM3YzMDJZTUhtR1lFQkhKOUhZMFNvMTFWY0tQZVNmOUY0R0FPUGVPVXBoeGV6R3NXMWsvb2J5SXU0UnZZUWhoZlBhTS84RHkreXRUWm93czd2RHRiT1Q3dXBYMTl4SlBwME5hVzEwbXdKc3ZOVURtd0VMWXRiMTFYY2U0MlB6cVUzVVovL3FpRFZxYnBUZkkySlh6d1psRkJhR0RYVTlVWkJTMWNuRU52UDF5d3p5ZlIyNy9iU2FpZ09ROUh6cGZtenFraU5xUzFRUlZwVHg0M1BJWDVMYzlIenRudmZwMEhTeklMSU01WTBzTSthZjk0YmdYY3Z4SEY5NVZiaWQ1VGg5UkRPK3RiVm9TOENuKzM4Yk9QKzAvdEdocWVjenNNU1Z3MzdoU21EZXhUTnZXS3JtNEVQTHYvdEQ1c2lDZ1g4MFBCaFJoNHl1Tmo3Q0VSUnlIWU1MZDFtWExWa2EvcDlGU0dyaUZFZVlOSDJPOEp6RlpNL1J2YXhwblZ4VHplVm9kZllPTkNPVE9UN0crUm9DS0VoNldQQmY5eG4wUFI2NnBMaGV1YlYzWFBNc1N3VmFrcE9sQWxyRkU1aVlrYVRaYXJFenZza0wrUzZPSkxpdTl4dmxibXNUSVZ6ZkZmNkRUMCtaOW43YXRZbG5xbEtKZzhMcmwwZmN2amxvN2IxbFUxdFdMb1dPRmwwSzVZeWVid1JMQkVMb1Q5aUJuc3dSY0NCbFdyb3ZMSGpIV09QWDBZVi8yQjI4NkhrRUs1bVFaay94bkxWOGRzME1TTUw5L2wzdERSVEYvekdpaGJXTW5tMWVNR0d1Y29zalJPemE5MWpRVHFJNjE4RHp5bWl4TXp3ZVhScTMvSlM5d3VMWlMrRlNTc0w5WEg4MlRJOGVacGk1K3B0c2JyQ0JnU0UzWGpYcDhWZlJXdFlaUzNRckFtNjFiZDFYMzUxNlAzZjNLazNXakF6N0ZRZWgvc3pFTTROd1RQaGd6MGZ6aWZROUh2bDViS1pSc3lXcTZ4K05XYXU2Y2FnRzFoZ0tNaUlnQWFMUlUvRC9lYlJsUDBYQ3EveUE5bk04SndNQ2hoaGxtSzJQOVlaOTd4Kzd0em5jeVoxcEJFQkFVRlhBWGVpWnJFeVpOdDd3d2RySjVRSDJOa0V1a0F1T09oMHNpRmp4dW1YMCtLM1lmQVREbnVILy90ZzJPaDVHQ2VhMk9BaFdpbUFlV1JLMWxXUXJlZWJWcGNkRWxicS9GeG9USjhVdHU4T2lhalhHNW84YWJwcDArYkpod01TOTRtTVJHQ0xCS1RURUh2MjcvNHZOdHprVkRSeHRCa1RHY1BPVE5TZW12cTdYWjJTaWFvVUc5NkVuNzVqOExZSmZGOVZRblRYL0E5bGRSd0wvN3JiNWFESFNQVnoreVlMbjk3WW9pL3ZLR1ZZMlRuUzF5VFZLS0ZraVR4QnMrSlZlNVhhME82VlJZZ3hpQXRBdzk5QjJneXp2OWsyOVN3Zm5RUy9HOTFORFNMSUhmaHlDeHR3WllGYVVtZmtZenpVUjFVd0ZGdzNVUVBXNVp2WGhGOUVlMzMya0tNM0JMVnRNOEFNemJvbGdnRlpQU1h6Y2lLVldiWGxUQW5TMjZITm9iRTY4Q2s1VUJvNWtCZ2NlK25HUCszU1JPcnhUdHFLNTEwUlNFUyszY21jRDdPaDBWMW42QlI2QXowTjdXWnFtWWNJWWRPdG80Tlcyd2Z2ai9BbUNYWmM2eVBuYnNlOCs3cmxhNTd1WnhpNDFaOHRDeXFEU2FCdkI2RkdkcnMxaFBNUlNRa2xTcktSQnVBbDRVOE1XQlEvV2dLQUMxbFNMVVZQREFoMUM5S09CNmN3UVROMkdhWmJITnJrcXlSakN4UmpQVE83R1BaaXgwU0FZbThUb3QzSm16TUhKemZLSTZpZlNyeS9oTHdRQVNyRFlHOUVZNnZIR0RSeG9tRWRicDliUm0vdVBkMXFuVUZJMDdkd0FwQURZN20wYjZmZnJwa3RKdjAwTlZHVS9JU0NNRUtDWlc1VEtZYURBWUdWSzVJRWtZdEhyYVEzQm1NMFlZN3ZoL0FDU21OOUM2cEZUdEFFSGc2a1FSWFIvdjFVY3pvTEZXcktGcG9JZU1Na3pLbkdWOTRvZDk3ZHZKSWREbWtzRmlaYTdQNVRra2hJSUlWQ29hVHYva2hmcHFnYkRHOE5qSzZDM2pNaTBMdWpTYW5NNXRUcW1pdGxMSVQrNnJIZmxIK1JBQUswcjRnb1JFVGVxY1JaR3JmOGtMSG1pb0VZcUo1aXN5Z0U1UFc4bTh4RDZhRE5MK0tJWW9ZS1JTVTdGdWx3d1VSV0VpVkJoaEZBZ2dIUEFoWUJnS0VCSGZqZzBNNnhpYjNFK2JUam8xbFVMbHJ1M09wUm5ERERQdW1SdnhMQm43K2FodmIrNUovODc3RmtXK2s1U3F6UkFGTEgvOWVkdFQzblpaV3JEY3Z0Vm9ZdlQ5TS9SOWd3RjAwTk1tWHk4clI0UFl2R1o1M2FUK2czUkRYdHdROStXRGo5clhYOHdQSG5JMFNMWDExU0pFRHROZlQ1cWlnQ0lhMWRJa1FxdERBcHFoWVA3ajlyV1RaMWlYdWxyayt1K3p2VHZkVHZsSVM1TlUxZHdndGt5WkUvSFNyVUM4bUJjOHNuNVZ3NXlsejBWdm1qTGIrdWlDSit6dnZMVzZjYnJmcXlobUt3dVNqUDFrWHU0Si8xY25Edm15OUFiNk9oTnBtaUlIa2tqVElBVDhDamdhUmRBYkdPcVBudk5iby9rUU1wTXhqMHMrcHRQUnAxeXQwazVaNmdoTTlLcTJVamhlV2NvZmhnN05hV2gzeVI5Sklud1NES0FxTWhid0tWRm5UL3ZKYVh2OTNsaHdJZlNwU2tWVjVKN3daNS9QQ1J5eFJEQVJjeGRIclNOc3JTemxPdmJ2cHZTSVVFZmFXWmcrMXdhekhySnBSazgwelNUbHVtMUQ4OElEWDdxelBHNGxMeFJFTGVRQU01bVp2bDErQkh5cTQzSVFqbll4UDdqWmFHYjhlM2M0MXpnZFV0UHdNY2FwNHlhYjU0Y0NDQXdHR3BycnhHdGtuczNPSnRaVzhvWE9GdWxxd0krdStyM0sxYUtDME5XbWVqRmc3NjRhbHRCTG8wbnVwK3RpMjM4SGthSWdYSWVKeVZwcS9CUXpXUXlMT24yMWVscEZ5a0JSb09zZUk4ZjJVS3NtejdTQzJjS2dUaVpoK2pjYk5uaTRJZmpNSzkwaElvcUZQUis1MWdnY0VzWlB0Y3dmOWhmamxQSkNIcmdnSW9KOUEwUUZ3bk9IakRMQWJiY2IxV1lMWTVFbGpCeU5Va1hQM2hwSTZLVUdiN3NNZnE5aTZ6OUlONkhUVGFvdTU0RUFSTk0zOHUzV1hRWHRMdG41elI3MzIyUnM3cEtvdFZZYmE2K3JFc2pKZnliZ1U0SXAvYlczMmFOVncwajFXQ01ZNGtmSUFBdWVpUHBzeVlwdSsxUXNOYnFsVVFTSy9sTkVESU1Zbm9rUXBvaFlZbnlESXpSTlVjR0FBZ0xYQVN0RkFhRi9lRjdYN25mNTMyd0VkSklZdVE4V1hncGRPSkRkdnBVd1pzbXowWnQ5SGptaThGSUlWT29iYnFSZlhTN0FoeHNkcEFYTGkvaEN0WVppWmkrTVhCL2JRek5BYjZDVEJ3MHp6RjY3TlNFdktscVZRSHlNSnFadmRia1FYWEtGQTdZekZzbU5uTUkydXdxT2Z1ZjV1UGdLbHg4VHArb3g3N0dvdDhocDIxUXZPbzRmOUg1Qk14U3o5UGx1bjZUZnByOUxxNmQ3UnRyWmdVKzhGUFBKaUxHbWlhWFh1SUxEMzNtK0RnYlFyOTdJL3BPUnkzWlk1VEdBbWd2aGNGbDJMVkRrTVUxMlNKSndlSzhwbWxJSC9BZ0h2RVIwTmRxT3hHK0FTRkhoZUtURXdoRjY5OVhCMlovOXNIOVhXOWJ3dnhqdlRVeldwTjY3TVBKbHIxdFpCUlNvdXpBa3VrVEtqYndtZXRzVjlNK1BYYSt0Zmp2dSswblRMUXRKNjRwZmNENTQ0cnU5N1p1ZVhoUHowWkJSaGhjOGJsdEVYYlc0QktQT1dCaFl3a3FqaVlIMk5wbi85UDNXRld1M0p1Um16clF1TGpnWFBIajVYR2gvOWs3WGFxdU5qUm1YYVo3MTVPcVlIOGtKejNSV1VrT3RXTEZ0ZzJPUkpHSWZxNks2MW1TZzZQQzZmZ2NwUllHTzVNOE1UbDJoaXV1cGpzL2UyYmJ6eUFGUFVVVXhINHFOVjZlMXUrVG03RTljNzNFaEZCQkZDS1dtNjRibUhQZnRPL2hWKzdGTFo0TkVqK3dXRzJ2OWRuZmJKcDlIYVNEVTErcG9yOTVBbjJ1c0ZZKzNPV1VYQVlkY0Uvd2VSUVNBMDNFSm10eTRIdXByM2VQVkZRS0huVUcva3Vkb2xNNXdIRzRuMXdkUG13SStqMEplQ1d0cks4VWpDR0cvMGNSNHk0djQvRy8zdEcvOCt2TzJGMHV1aEM0Z0JTcnJxNFh5a3F2Y0R5MU5VcVV0a20zRUdINHV1Y0xsK1AzSVJ4WVk5Q053Tmt1TjloaFZ2c0hJSEl1TlY5Y205dEUwVkpZSlF0N0pRTGJUSVpVckNnZ1lnN2VoVnN3LzhxM243OS9zY2IvZ2FKU3FhS0sxT0V3YW5KWmhLQlY0ZktEd2N1aVNKR0ZKcTZYQkdza0NZUEkvQTFVbnkzRDQzd21ZVjZmUU4xeWdBQUFBQUVsRlRrU3VRbUNDIiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5hdi1saW5rIiB9LCBbCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJhIiwKICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgaHJlZjogImh0dHBzOi8vd3d3Lm9rZXguY29tLyIsIHRhcmdldDogIl9ibGFuayIgfSB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgIHNyYzogImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRG9BQUFBUkNBWUFBQUNNMEwvZEFBQUc0a2xFUVZSSWljMlhlNHhkUlIzSFB6UG4zSHZ1WTErMzIrM2Q3SlpZMXFxdEJZVFlFaTAxaE5pSUpCSUNnUmhGaUJvRmxGU29WRnVhaUZHS0VXbkZFSVdnUkVLUm1OcEdFeDlvQkNJcXRUNlhVb0hXVXVtV3hkM3V1N3Q3OSs1OW5ETmo1dXp2bHRQdExuLzNsMHptbnBuZnpQeWUzOS92cXN1M1Q5TjlubVhkaFI2VktoaWpzRWExcGp5enhXQ3VVNG8yQzZPZzkxVHIzb05LTWFzVVJLRmxwZ3FIWG92WTlyR0FLMWI3bk12a1d3c3BINEkwekZaaVNYMmw3RmFybzdzMUNyZXZGVjJXNkNKUEt6OUkyeDFCWU0zQlZ3eWxxa0pyZFU0cjJDRHQrL0RHZ09HVm80YldGcWV3dVV6cjZEYnNuSktPNHRrcWZCWGRxVFVYWjlLSjliZW5UcUFIV0xJSWw3dXB4UmwzM3JvSHRBSUZ3Rmt5QUhKQUpqSHlUbjRnSzN4dWJTRnFkdnQrT3Ezb1BSelIzMjhZSE5Kc1dPZXR5R1ZWWWFaczBmcXRZOFpDSmtOdXVteFdIamxPcnd0enRiZ3pyd0krQmF3R21vQXg0Q0R3T1BEM2hwR0JIY0Nsd0c3Z3g3Sit2cXl2QUg0cTR3SGdIYzYyb25qai9JL2szcDFBQ3ZnbThPZUVITnVjTEZPei9DME8zWFFhTWdIblA3Yy82aW1WMWFxck4zcFJjek5lcVRUSHJUVGtNbEN2UTkvL1dQdm1FTldXSEM5NUtmcmN5NzUzaHBKZkJPNFhCVThDeDRHTGdROEFWd09mQjM0ckFuOUkxbnNUbnJ3SCtDVHdPdkMwZU90S29FdDQ2cUtrNDMwQitBVXhobkNUUk1kSGdFbGdJL0F0ZCtESUFBOXJwUWlzc2R2TE0rWkFXN1A1VGUvQjJ1YnY3QXIxMGFQUTFEd1hudGtBanAyQXZVK2I5UGdwczdtallQYjV2bmtCN0YyK0lqTXdZYWhIc1JBZkZDVnpZdDAxd0JYQSs4UXozV0o5NXgxMzRwUUlYdzVOUEg4VytEUXdBOXdzeWxvUjNORnRjc2NLR2U2dVdUSE9VWW1PejhuN084U1l1OG8xOXVqeWpMbWpObXZ1aTR3dGFxV0NsbFlWVEpjajlaUGRJWU9EVUdpRmdTRjQ5aytHWEJiVm5NYzNCdCtpdWpGbVowdldmdW1oWnlvY0hqQkVoaStJSjU4U1JjZUJLdkFheEhzdkFlOEZia2lFSUdNbGhpZkx2QWU0VHhUYkR1eFBSRW1EdHc4WUFkNEVUaVFNNE5idkZ1UGRBdnhRbEhaaHZXdjVFdEQ5ZzdWYnNsa2RvNmZ6bmpIUTNtVUoweEV2SG9xT0ZkcjBrd1BEdHErN0c4N3JoakNhODdKNzJaMlpLRWVmK09pRjZZNmx6U29WMmRoN1R0RG41ZEVrVFVvb09sb3ZZQks2ajhqU0FYd1g0dmt4eWIwa05XRHZSdUJPWUt2azMrb0V6OCtCUjRCM0M1OTc3eXN1ZlZZV3dZOE15eDN5R2lQczF0VklhTytFVi84YlB2ZllQbjM3OGs3MWcrVmQ5dFpLNVd6VUtWVnNjZjFLM2QzVnBweitiZUxCa2JNNVl4cVhlWW1nWkt6b3N1WTRKSmNDUTA3WXlERHJ4RW5wczg3ZkpLTkJqdjl3NHR1RjhuV1N6NzhDbm0xcytFcHh5aGlLeWRzOEg2clRsdEJ3eWZIQmFIT3R6UHM3MmpYNVprVzFZaE5CQi9rMGxiNVJwaVptS0RWbG1FMTV0QXNvTEVSTnNqWWpvTktBTWVmRnRRSWd0MXJZWkcyOFA1K2VFT0JLeWZqcnZQMGJFcURsZ080QzRHWDNvWlZXVDU0T0RBVmVHa29qaHVGRGtXMHI2RXZiMjNsZzRLUlorOGZmMXhnYU1BU1p0N1NNSWt0bklmWHIzLzNidnQ0L2JwMi8veW1JdUc0QklkMzZaZkw3UldBNlVUOEhKY3ltSENvYnd5WW5VNmw2K216ajBaOEJEN204QTc0OXo1c2JCSlJjTkIwUXNQcGV3N2c2eU9yN2xhZjN1dEQxUEtpVkxKTW5ESjFyZkpWZnB1UHYxZzVGcGszeGNtK2R5cXpCaGJwU3RtYlJqNDVPNjNzM1hxQjU1ekpGeW9zOWd5RG16UWtoWEQ1K0hmZ3dNQ3o1WkJMN1JRRU9KNmoyRkYvVGlpdEhwK005bThqUlJxVDQwbXcwSW1JWjhLQTBCNjRlZnh6NGo3eDMrNXhIWFExUzZqTW9ybzhpZFplWDFydDdOcVNpNGlwTlZKdTczNFJRWEtGcDZ2S3EweVgxaExINnEyR29yOUphYjVxcE1yS21TNU1QWXRaZkNxZ1U1TUZuQkFGZEViL0hXR3JXeHNyMGlwQjVFVFFsOC9jancxNVAwK1pwSHEvV1dUVldpcjNaNkhwMlNqUzQ4NjhDVytTZUxSTDZSOFRqL2NBMzVJeEQ0OHU5cGV1MkVZYlVyYldIMHhsOW9HV3BiZ3V5NnRxd2ZtWWZZZzJrczVpeEtidXJXdVBSbHJ3NnJwUXlzelhGK25kNTlIVEV5T0c4OUFkcEZIcWtqbDdrMmprTC82cUViUFUxdTZXajBwS1RCVUhwL1pVNnRoWnhTQ2t1OFRUdGthRkRLWjdQQlhISXArVk1peGpJS2Y4UENYZUh3aTUxdHNnYWtwdk8weXZkbVRoSC9CU0VuaUtkVTRRMVJ2Rk1GYVdDTXpKTWdhbGpUTWpKNFhGRHNhREk1UmZzQVoySkhnYjJDUHc3Z1NhdGpVTnBLc0hueXM4ZHpDSDE4T2xuVk14M2pVUG1ZbXRzNnBQU1R1Ym1sU3hmT2lJM1grOEtnTlRYSkcyV2tOWnpMV0JHb2FJNVJIVVdWQm0xVDJ0dWRMMXVYRE9ka3NhaTBIdHFaZjdpVVBtTmZrc3VGeEcwcEZpRXhxUkZlenNhV2FRVWpjbG8wQUtGN1F5YVdHUzlCaHhyV0NWV3BxR1F0WlNDbFAvbElEQVRVelBtV2wvVEhrWU1OMlg5dmRib2U2ZHRXTFYxR0IyMTVQT0didmNmNDF3bjRQK0RQWXoyM3RXUGtRQUFBQUJKUlU1RXJrSmdnZz09IiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5hdi1saW5rIiB9LCBbCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJhIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICBocmVmOiAiaHR0cHM6Ly93d3cuY29pbm1hbWEuY29tLyIsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAiX2JsYW5rIiwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgc3JjOiAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFGb0FBQUFXQ0FZQUFBQkFNb3NWQUFBRjdFbEVRVlJZaGUyWWU4eldZeGpIUDI5dko1M2VqcVEzSFFrcGNzZ3hRa1NtSEdaREszUEtySkxNbTlZc3NyR2FoRGtrTERNdC9jSG1VRTFPWlZKSjFoeVNLRHFnZEQ2UnpsKzcrRDdidmQrZTU5bmI5QWYyZkxmZm51ZDNuMy9mNjdxLzkzWGRaWklvZ0Y3QWU4QTd3TS9BRGNBMFlDaHdvRkNuRXZLalJoRmVsZ0h2QXN1QmxrQUZjQ2R3VzRuTFEwYytqMjRJM0Ewc0JTNEhUZ1ZPQVdxNWZoVndrWDlMcUNieUVkMEkyQTU4QUhRRTJsdENPZ090M2VaRjRJNFN5ZFZIS2gzTmdPNUFKZERYRW5Fdk1CdDREdmdoYVhzK1VMOGFzelFHdWdJbkFuVVBZVjNSNTJYZzVtUW4vYmNSSHUxbm1QN0daRW5kSkkyVTlMVHk0MWRKblpPKzJhZW5wR21TdnBSMFFOTHZrajZSOUxDa1JrWDY1WjZuUE9zbVNTMnEwZjVmLzlSTXZHUXJzQUpZQ2R3RTNGUEVnOHFLSEtTRGdHZUEybjdmQmRRRHpnT09BOFpYd3pOZkFsb0I4NEJ0L3dlSERvMXVCNndGOXBxOGcvNk5BM0UwL0dXTU1NSUNvS2Nqa0VVbWJsOW12SkNldVVBZDRHTkhLWnM5eHZtZTR3MjNqVVAzV0tDTlplbWIyR0N1QzVrNUFkamd0ZFV6OGJYY1o2UEwxeVJ6bHdNZGdDUDlEVHVCSmE0NzJmTnQ5U0dmUTZ6cmVKOUxnZFVlbDh3NkdqaWszZUMxMXJXOGhUT3RBMzVNK2pUMk9xTE5mdUQ3djV4RjBpdmV6cFdTSHBSMGpxUlRKVTJSdEV6U0tra2ZTT29yNlF0djZjOGxsZVhacmpOY3YwVFNVVVcyYzNkSm4yWkU2WFZKclYwLzFHVXpKWlZMcXBKME1OTit1NlFSeVpoakpmMGhhYjJrclc0elFkSlVTVnNrclhQWmxFUyt1a3BhTG1tYm44MlNCcm91Sk90RFNmc2xyWlcwdy8wZjhkcDNTOW9nYVkra01Ra2ZBOTEyby91dURDbU9pbFp1Y0lta25aS0dTSHFzZ0RibkVKcmJMME5lVXhzbE1LNEl5WjJTUllmV3Y1bVF1TkRFRHZUNzI1SnFTbnJTNzNNa2pVNE1LaHN0eHYxUjBxdXhRejNIS05jdmt0UkRVaHRKMTdsc3ZQczBsM1M2cEk1K0pydStqcVFPL2ovYURoQm4wa1NYUGU5KzdWMGY2T014SzEzWHhnNGJUcmt1S3U2WGRJMEhqNDdOdkpENDJBVkZ5QTZ2YlpJUWVKYXRIQmhRaE9oSDNXYXVGeE5sdlJLUHUxaFMvd3pSdVQ3OTNUN0taaWRFaERldGtEUThNOWRYUGxqVHN0Y2t6U3V3dHZqK2ZWNURXNDkvWlZMZnlNN1JOOU52alEvL2ZHT0dBZmJWZE1hMzN4cjBCUENSOVdVeE1NUGFKdXZySXFmaUZkYmhDdXNleVJqNHNDeUVjMTArUGRIWUQ0SDNnWUZPa0xZVzZKc0w5Zlo3TFpFNE5iRSs3MHUwTm9lMWp2OVRiTEcrNWpSNGtCT3owTi9tSHJ0bThnM3BtTCs1WGFmTW1Ndk5CK2JyUHM4UlowbVg2RmZEaGRNdCtEOGtxZmVEemdoWCtGbnFtQm9UUHlTVEhYN3JneUZ3UVJHaUsveTdJMU8rM2I5MWloZ3FqWkpTMGd2aDF6eHhlRzJURWNhWkREeG1nOGYzL1FUczltR2FEK1VPRkxKM1BUdHRnTVpPN203M0liamMzMVVlQ3g5bFM5N3JjRXEyeEFhVG1XS0EvKy9ORTNidHNpRWltN3dlbU9yZGtjVjhXem1NTWNtVkRSekZZS1BXeWRNdmkySzdKb2RDUnRoa3IrenZiNXFhMUowTk5EM0VPV3VZcnd2Y3Y0dWpLTHhUWndiUlJ6dDBDbnh0RWlNayt5N1pSbG1FNWRmbktYOEl1QnBvWWRtWkNDejA5cjdRUnB6bDlQMUd2MGNZZUtzbEk0dzNCN2kwR2lSV0I0V0lLVXRDeWRTbzVaYUtnbGVhUlZCdWFTSERXWVNiUjBUQk1CZkVCTGQ0NHJEb1ZkN2VZZjIzZ0Q2MlZDemlXY2VjV2Z6aVpDZTI0MG5BaUV6OUhtQTRVT1UyL2YzZ3VRWjdOMVc2ckpWSmFlNzNpbVNzRnY1dDdqYnRmSTJRNGlqZ21FeFpTK3ZuTWlkR0lSLzk3R1NuZVVkdVRoS3VoaGtEdGJYanBHaGxweHdIZkFaODRTdUV1RjYrTmlRbFpiNitaUVI3MUJvZkZEdE42dS9KWkN1S1dIYVdrNXZCRHZhRG5CM09PT2Y3SXlaNHgvVHdJbGM3a1Zuc01VSnl4bGpuRHZnZWZMVzlQWWNwMXNENWJsT1ZKQ2c1dkpCSEJpWWw0d3p6RnU4R25PbnhJaVArM0I0Nnh1UG5FR1NPVE5hWnd3UWZ4c0hWRlU3VXdwaG5tSS9IMDl1N2V0YXJnOGxGVXU5a3NEMG1LeVJockUvdkVxcUoxS04zV1ovM09tWHQ3YXZTdSt6TkIveTd2VVR1b1NONzBIVXhvVi83dmNwYVZzSS9SUGJpUDNlcDlJRERyY3RLQkI4ZVpEMDZGNmd2OXVsWnd1RUE4Q2MySk5WbUtDTXJBUUFBQUFCSlJVNUVya0pnZ2c9PSIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICBdLAogICAgICBaID0gewogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRva2VuOiAiIiwKICAgICAgICAgICAgaW1nX2xpbms6IFtdLAogICAgICAgICAgICBsaW5rOiBbXSwKICAgICAgICAgICAgZm9vdEZyaXN0MjogW10sCiAgICAgICAgICAgIGZvb3RTZWNvbmQyOiBbXSwKICAgICAgICAgICAgZm9vdENvbnRyYWN0OiBbXSwKICAgICAgICAgICAgd3hJbWc6ICExLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICh0aGlzLnRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKSwKICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmFib3V0VXMoKSwgdGhpcy5oZWxwKCksIHRoaXMuY29udHJhY3QoKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGdvRGV0YWlsOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICAgICAgcGF0aDogImNvbXBvbmVudHMvbm90aWNlRGV0YWlsIiwKICAgICAgICAgICAgICBxdWVyeTogeyBpZDogZSB9LAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBub29wZW46IGZ1bmN0aW9uICgpIHt9LAogICAgICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKCkge30sCiAgICAgICAgICBhYm91dFVzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cAogICAgICAgICAgICAgIC5wb3N0KCIvYXBpL25ld3MvbGlzdCIsIHsKICAgICAgICAgICAgICAgIGNfaWQ6IDE5LAogICAgICAgICAgICAgICAgbGFuZzogbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhbmciKSwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBpZiAoIm9rIiA9PSB0LmRhdGEudHlwZSkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICAgIGEubGVuZ3RoLCAoZS5mb290RnJpc3QyID0gYSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgaGVscDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAKICAgICAgICAgICAgICAucG9zdCgiL2FwaS9uZXdzL2xpc3QiLCB7CiAgICAgICAgICAgICAgICBjX2lkOiAyMSwKICAgICAgICAgICAgICAgIGxhbmc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsYW5nIiksCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICAgICAgICBhLmxlbmd0aCwgKGUuZm9vdFNlY29uZDIgPSBhKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb250cmFjdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdCgiL2FwaS9uZXdzL2xpc3QiLCB7IGNfaWQ6IDI1IH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICBpZiAoIm9rIiA9PSB0LmRhdGEudHlwZSkgewogICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICAgICAgYS5sZW5ndGgsIChlLmZvb3RDb250cmFjdCA9IGEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgd3hJbWdfb3ZlcjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdGhpcy5pbWdfbGlua1tlXS53eEltZyA9ICEwOwogICAgICAgICAgfSwKICAgICAgICAgIHd4SW1nX291dDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdGhpcy5pbWdfbGlua1tlXS53eEltZyA9ICExOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBRID0gWiwKICAgICAgSCA9IChhKCJhOWM1IiksIE9iamVjdChoWyJhIl0pKFEsIHEsIEcsICExLCBudWxsLCBudWxsLCBudWxsKSksCiAgICAgIEsgPSBILmV4cG9ydHMsCiAgICAgIEogPSB7CiAgICAgICAgbmFtZTogImhvbWUiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2N1cnJlbmN5L3F1b3RhdGlvbl9uZXciLAogICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgZGF0YToge30sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSBbXSwgaSA9IDA7IGkgPCB0LmRhdGEubWVzc2FnZS5sZW5ndGg7IGkrKykKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuZGF0YS5tZXNzYWdlW2ldLnF1b3RhdGlvbi5sZW5ndGg7IG4rKykKICAgICAgICAgICAgICAgICAgICAgIGEucHVzaCh0LmRhdGEubWVzc2FnZVtpXS5xdW90YXRpb25bbl0pOwogICAgICAgICAgICAgICAgICAoZS5xdW90YXRpb25MaXN0ID0gYSksIGUubWFya2V0U29ja2V0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBtYXJrZXRTb2NrZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICBlLiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICBlLnNvY2tldHMuc3Vic2NyaWJlKCJkYXltYXJrZXQiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJkYXltYXJrZXQiID09IHQudHlwZSkKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBlLnF1b3RhdGlvbkxpc3QubGVuZ3RoOyBhKyspCiAgICAgICAgICAgICAgICAgICAgZS5xdW90YXRpb25MaXN0W2FdLmxlZ2FsX2lkID09IHQubGVnYWxfaWQgJiYKICAgICAgICAgICAgICAgICAgICAgIGUucXVvdGF0aW9uTGlzdFthXS5jdXJyZW5jeV9pZCA9PSB0LmN1cnJlbmN5X2lkICYmCiAgICAgICAgICAgICAgICAgICAgICAoKGUucXVvdGF0aW9uTGlzdFthXS5ub3dfcHJpY2UgPSB0Lm5vd19wcmljZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5xdW90YXRpb25MaXN0W2FdLmNoYW5nZSA9IHQuY2hhbmdlKSwKICAgICAgICAgICAgICAgICAgICAgIChlLnF1b3RhdGlvbkxpc3RbYV0udm9sdW1lID0gdC52b2x1bWUpLAogICAgICAgICAgICAgICAgICAgICAgKGUucXVvdGF0aW9uTGlzdFthXS5oaWdoID0gdC5oaWdoKSwKICAgICAgICAgICAgICAgICAgICAgIChlLnF1b3RhdGlvbkxpc3RbYV0ubG93ID0gdC5sb3cpKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBob21lQ29udGVudDogaiwgaW5kZXhGb290ZXI6IEsgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgdXJsOiAiL2FwaS9jdXJyZW5jeS9xdW90YXRpb25fbmV3IiwKICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgZGF0YToge30sCiAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgIGUudGFiTGlzdCA9IHQuZGF0YS5tZXNzYWdlOwogICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLCBpID0gW10sIG4gPSAwOyBuIDwgYS5sZW5ndGg7IG4rKykKICAgICAgICAgICAgICAgICAgaVtuXSA9IGFbbl0ucXVvdGF0aW9uOwogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAhbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIikgJiYKICAgICAgICAgICAgICAgICAgIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpICYmCiAgICAgICAgICAgICAgICAgICFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGVnYWxfbmFtZSIpICYmCiAgICAgICAgICAgICAgICAgICFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfbmFtZSIpCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKAogICAgICAgICAgICAgICAgICAgICJsZWdhbF9pZCIsCiAgICAgICAgICAgICAgICAgICAgYVswXS5xdW90YXRpb25bMF0ubGVnYWxfaWQKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oCiAgICAgICAgICAgICAgICAgICAgICAiY3VycmVuY3lfaWQiLAogICAgICAgICAgICAgICAgICAgICAgYVswXS5xdW90YXRpb25bMF0uY3VycmVuY3lfaWQKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICJsZWdhbF9uYW1lIiwKICAgICAgICAgICAgICAgICAgICAgIGFbMF0ucXVvdGF0aW9uWzBdLmxlZ2FsX25hbWUKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW5jeV9uYW1lIiwKICAgICAgICAgICAgICAgICAgICAgIGFbMF0ucXVvdGF0aW9uWzBdLmN1cnJlbmN5X25hbWUKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICB2YXIgcyA9CiAgICAgICAgICAgICAgICAgICAgICBhWzBdLnF1b3RhdGlvblswXS5jdXJyZW5jeV9uYW1lICsKICAgICAgICAgICAgICAgICAgICAgICIvIiArCiAgICAgICAgICAgICAgICAgICAgICBhWzBdLnF1b3RhdGlvblswXS5sZWdhbF9uYW1lLAogICAgICAgICAgICAgICAgICAgIG8gPSAxZTU7CiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicHJpY2VTY2FsZSIsIG8pLAogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic3ltYm9sIiwgcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgWSA9IEosCiAgICAgIFggPSBPYmplY3QoaFsiYSJdKShZLCBfLCB5LCAhMSwgbnVsbCwgbnVsbCwgbnVsbCksCiAgICAgIGVlID0gWC5leHBvcnRzLAogICAgICB0ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljU3R5bGU6IHsgIm1hcmdpbi10b3AiOiAiM3B4IiB9IH0sIFsKICAgICAgICAgIGEoImRpdiIsIFthKCJ0diIpXSwgMSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIsIHN0YXRpY1N0eWxlOiB7IG1hcmdpbjogIjNweCAwIiB9IH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNTdHlsZTogeyBmbGV4OiAiMSIgfSB9LCBbCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImVudHJ1c3RzIiB9LCBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGFiLWVudHJ1c3QiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogImVudHJ1c3QiID09IGUud2hpY2hFbnRydXN0IH0sCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLndoaWNoRW50cnVzdCA9ICJlbnRydXN0IjsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5jZGVsIikpKV0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogImhpc2VudHJ1c3QiID09IGUud2hpY2hFbnRydXN0IH0sCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLndoaWNoRW50cnVzdCA9ICJoaXNlbnRydXN0IjsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5oZGVhbCIpKSldCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJzY3JvbGwgZmxleCBjb2x1bW4iLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGZsZXg6ICIxIiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgImVudHJ1c3QiID09IGUud2hpY2hFbnRydXN0CiAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImVudHJ1c3QtYm94IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFthKCJlbnRydXN0IildLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgImhpc2VudHJ1c3QiID09IGUud2hpY2hFbnRydXN0CiAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImhpc3RlbnRydXN0LWJveCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbYSgiaGlzZW50cnVzdCIpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgW2EoInRyYWRlIildLCAxKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBhZSA9IFtdLAogICAgICBpZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJub3RpY2UiIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGkoImluZGV4SGVhZGVyIiksCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LXdyYXAiIH0sIFsKICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudCIgfSwgWwogICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFjay1uYXYgZkNvbG9yMSBmdDIwIGNsZWFyIiwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJsaW5lLWhlaWdodCI6ICI2MHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgImZvbnQtc2l6ZSI6ICIxOHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogIjAiLAogICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbZS5fdigiICIgKyBlLl9zKGUuJHQoImhlYWRlci5oZWxwIikpICsgIiAiKV0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtY29udGVudCIgfSwgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGMgaGlkZSIsCiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAicGFkZGluZy10b3AiOiAiMTUwcHgiIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOTQ4NSIpLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxOCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibm9kYXRhIikpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm5vdGljZUxpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAiYm9yZGVyLXJhZGl1cyI6ICIxMHB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5uZXdMaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiB0LmlkLCBzdGF0aWNDbGFzczogImNsZWFyIGN1clBlciIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29EZXRhaWwodC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7fSwgW2UuX3YoZS5fcyh0LnRpdGxlKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC51cGRhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0YyIsCiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcGFkZGluZzogIjE1cHgiIH0sCiAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBpKCJpbmRleEZvb3RlciIpLAogICAgICAgICAgXSwKICAgICAgICAgIDEKICAgICAgICApOwogICAgICB9LAogICAgICBuZSA9IFtdLAogICAgICBzZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZm9vdGVyIiwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmZWR1aS1yb290IGZlZHVpLWZvb3RlciIsCiAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgImRhdGEtdi0zZmZiZjZiZSI6ICIiLAogICAgICAgICAgICAgICJkYXRhLWxvY2FsZSI6ICJ6aC1jbiIsCiAgICAgICAgICAgICAgImRhdGEtaG9zdG5tYWUiOiAiREVLUy52aXAiLAogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAidGV4dC1hbGlnbiI6ICJjZW50ZXIiLAogICAgICAgICAgICAgICAgICAiYm9yZGVyLXRvcCI6ICIxcHggc29saWQgIzMwMzAzNSIsCiAgICAgICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogIjIwcHgiLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ3aGl0ZSBmdDIwIiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjQwcHgiLAogICAgICAgICAgICAgICAgICAgICAgInBhZGRpbmctdG9wIjogIjEwcHgiLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgic2l0ZU5hbWUiKSkpXQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTIiLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiNDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAicGFkZGluZy1ib3R0b20iOiAiMTBweCIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgW2UuX3YoIiDCqUNvcHlyaWdodCAyMDIxIFRETW9jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gIildCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0KICAgICAgICApOwogICAgICB9LAogICAgICBvZSA9IFtdLAogICAgICByZSA9IHsKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b2tlbjogIiIsCiAgICAgICAgICAgIGltZ19saW5rOiBbXSwKICAgICAgICAgICAgbGluazogW10sCiAgICAgICAgICAgIGZvb3RGcmlzdDI6IFtdLAogICAgICAgICAgICBmb290U2Vjb25kMjogW10sCiAgICAgICAgICAgIHd4SW1nOiAhMSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy50b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIiksCiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpOwogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy5hYm91dFVzKCksIHRoaXMuaGVscCgpOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ29EZXRhaWw6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsKICAgICAgICAgICAgICBwYXRoOiAiY29tcG9uZW50cy9ub3RpY2VEZXRhaWwiLAogICAgICAgICAgICAgIHF1ZXJ5OiB7IGlkOiBlIH0sCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIG5vb3BlbjogZnVuY3Rpb24gKCkge30sCiAgICAgICAgICBnZXREYXRhOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgIGFib3V0VXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwLnBvc3QoIi9hcGkvbmV3cy9saXN0IiwgeyBjX2lkOiAxOSB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgIHZhciBhID0gdC5kYXRhLm1lc3NhZ2UubGlzdDsKICAgICAgICAgICAgICAgIGEubGVuZ3RoLCAoZS5mb290RnJpc3QyID0gYSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBoZWxwOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KCIvYXBpL25ld3MvbGlzdCIsIHsgY19pZDogMjEgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICBhLmxlbmd0aCwgKGUuZm9vdFNlY29uZDIgPSBhKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHd4SW1nX292ZXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuaW1nX2xpbmtbZV0ud3hJbWcgPSAhMDsKICAgICAgICAgIH0sCiAgICAgICAgICB3eEltZ19vdXQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuaW1nX2xpbmtbZV0ud3hJbWcgPSAhMTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgbGUgPSByZSwKICAgICAgY2UgPSAoYSgiOGZhOSIpLCBPYmplY3QoaFsiYSJdKShsZSwgc2UsIG9lLCAhMSwgbnVsbCwgbnVsbCwgbnVsbCkpLAogICAgICBkZSA9IGNlLmV4cG9ydHMsCiAgICAgIHVlID0gewogICAgICAgIG5hbWU6ICJub3RpY2VMaXN0IiwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBpbmRleEZvb3RlcjogZGUgfSwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBtb3JlOiAie3skdCgnbW9yZScpfX0uLi4iLCBuZXdMaXN0OiBbXSB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ2V0Tm90aWNlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9uZXdzL2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgY19pZDogIjMiIH0sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICBlLm5ld0xpc3QgPSB0LmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnb0JlZm9yZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLiRyb3V0ZXIuYmFjaygtMSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TW9yZTogZnVuY3Rpb24gKCkge30sCiAgICAgICAgICBnb0RldGFpbDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZSA9IGU7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogIm5vdGljZURldGFpbCIsIHF1ZXJ5OiB7IGlkOiBlIH0gfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgZS5nZXROb3RpY2UoKTsKICAgICAgICB9LAogICAgICB9LAogICAgICBtZSA9IHVlLAogICAgICBwZSA9IChhKCI5NDRjIiksIE9iamVjdChoWyJhIl0pKG1lLCBpZSwgbmUsICExLCBudWxsLCAiMGMxZjY0YmUiLCBudWxsKSksCiAgICAgIGhlID0gcGUuZXhwb3J0cywKICAgICAgZmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7CiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZGVhbCIsCiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtaW4td2lkdGgiOiAiNjAwcHgiLCBiYWNrZ3JvdW5kOiAiIzE4MWIyYSIgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInJ0dCIpKSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVyIGZDb2xvcjEgZnQxMiBzY3JvbGwiIH0sIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZGVhbC10aXRsZSBjbGVhciB0YyIgfSwgWwogICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoInByaWNlIikpICsgIihDTlkpIildKSwKICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoIm51bWJlciIpKSArICIoSk5CKSIpXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIiB9LAogICAgICAgICAgICAgICAgZS5fbChlLnRyYWRlTGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImxpIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5fZigiZmlsdGVyVGltZSIpKHQuY3JlYXRlX3RpbWUpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LnByaWNlKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0Lm51bWJlcikpXSksCiAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgZ2UgPSBbXSwKICAgICAgdmUgPSB7CiAgICAgICAgbmFtZTogImRlYWwiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7IHRyYWRlTGlzdDogW10gfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHt9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAodGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImFkZHJlc3MiKSB8fCAiIiksCiAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3RyYW5zYWN0aW9uL2RlYWwiLAogICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7fSwKICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAoZS50cmFkZUxpc3QgPSB0LmRhdGEubWVzc2FnZS5jb21wbGV0ZSksIHQuZGF0YS50eXBlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIGZpbHRlclRpbWU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IGUuc3Vic3RyaW5nKGUubGVuZ3RoIC0gOCkpLCBlOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBfZSA9IHZlLAogICAgICB5ZSA9IChhKCJhNjdiIiksIE9iamVjdChoWyJhIl0pKF9lLCBmZSwgZ2UsICExLCBudWxsLCAiY2JhYjcwZDAiLCBudWxsKSksCiAgICAgIGJlID0geWUuZXhwb3J0cywKICAgICAgQ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZXhjaGFuZ2UiIH0sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5ld19wcmljZSIgfSwgWwogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnQxNCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZW50ZXIubmV3cHJpY2UiKSkgKwogICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm5ld0RhdGEpICsKICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY3VycmVuY3lfbmFtZSkKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZXhjaGFuZ2VfdGl0bGUgZnQxMiBjbGVhciB0YyIgfSwgWwogICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5kaXJlY3Rpb24iKSkpXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJwcmljZSIpKSArICIoIiArIGUuX3MoZS5jdXJyZW5jeV9uYW1lKSArICIpIiksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkgKyAiKCIgKyBlLl9zKGUubGVnYWxfbmFtZSkgKyAiKSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoInN1bSIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZ0MTIgdGMgc2Nyb2xsIiB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGUuX2woZS5vdXRsaXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGtleTogaSwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnByaWNlKHQucHJpY2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAicmVkIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZW50ZXIuc2VsbG91dCIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm91dGxpc3QubGVuZ3RoIC0gaSkKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3ModC5wcmljZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0Lm51bWJlcikpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LnN1bSkpXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGluZSIgfSksCiAgICAgICAgICAgICAgICBlLl9sKGUuaW5saXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGtleTogaSwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnByaWNlKHQucHJpY2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZ3JlZW4iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5idXlpbiIpKSArICIgIiArIGUuX3MoaSArIDEpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3ModC5wcmljZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0Lm51bWJlcikpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LnN1bSkpXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAyCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgd2UgPSBbXSwKICAgICAga2UgPSB7CiAgICAgICAgbmFtZTogImV4Y2hhbmdlIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBvdXRsaXN0OiBbXSwKICAgICAgICAgICAgaW5saXN0OiBbXSwKICAgICAgICAgICAgbG9hZDogMSwKICAgICAgICAgICAgbmV3RGF0YTogMCwKICAgICAgICAgICAgY3VycmVuY3lfbmFtZTogIiIsCiAgICAgICAgICAgIGxlZ2FsX25hbWU6ICIiLAogICAgICAgICAgICBjdXJyZW5jeV9pZDogIiIsCiAgICAgICAgICAgIGxlZ2FsX2lkOiAiIiwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxfaWQiKSwKICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjX2lkIik7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAodGhpcy5sZWdhbF9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpKSwKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3lfaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGVnYWxfaWQiKSksCiAgICAgICAgICAgICh0aGlzLmxlZ2FsX25hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfbmFtZSIpKSwKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3lfbmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9uYW1lIikpLAogICAgICAgICAgICBlLmJ1eV9zZWxsKHRoaXMubGVnYWxfaWQsIHRoaXMuY3VycmVuY3lfaWQpLAogICAgICAgICAgICBlLmNvbm5lY3QodGhpcy5sZWdhbF9pZCwgdGhpcy5jdXJyZW5jeV9pZCk7CiAgICAgICAgfSwKICAgICAgICBzb2NrZXRzOiB7fSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBwcmljZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoInRvUHJpY2UiLCBlKTsKICAgICAgICAgIH0sCiAgICAgICAgICBidXlfc2VsbDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3RyYW5zYWN0aW9uL2RlYWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgbGVnYWxfaWQ6IHQsIGN1cnJlbmN5X2lkOiBlIH0sCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAib2siID09IGkuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICgoYS5pbmxpc3QgPSBpLmRhdGEubWVzc2FnZS5pbiksCiAgICAgICAgICAgICAgICAgIChhLm91dGxpc3QgPSBpLmRhdGEubWVzc2FnZS5vdXQpLAogICAgICAgICAgICAgICAgICAoYS5uZXdEYXRhID0gaS5kYXRhLm1lc3NhZ2UubGFzdF9wcmljZSksCiAgICAgICAgICAgICAgICAgIChhLmJ1eUluZm8uYnV5UHJpY2UgPSAwKSwKICAgICAgICAgICAgICAgICAgKGEuYnV5SW5mby5idXlOdW0gPSAwKSwKICAgICAgICAgICAgICAgICAgYS5jb25uZWN0KGUsIHQpKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbm5lY3Q6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpcywKICAgICAgICAgICAgICBpID0gTWF0aC5mbG9vcig0MCAqIE1hdGgucmFuZG9tKCkpICsgNjAsCiAgICAgICAgICAgICAgbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgaTsKICAgICAgICAgICAgYS4kc29ja2V0LmVtaXQoImxvZ2luIiwgbiksCiAgICAgICAgICAgICAgYS4kc29ja2V0Lm9uKCJ0cmFuc2FjdGlvbiIsIGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICBpZiAoInRyYW5zYWN0aW9uIiA9PSBpLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIG4gPSB7CiAgICAgICAgICAgICAgICAgICAgbmV3cHJpY2U6IGkubGFzdF9wcmljZSwKICAgICAgICAgICAgICAgICAgICBuZXd1cDogaS5wcm9wb3J0aW9uLAogICAgICAgICAgICAgICAgICAgIGlzdG9rZW46IGkudG9rZW4sCiAgICAgICAgICAgICAgICAgICAgeWVzcHJpY2U6IGkueWVzdGVyZGF5LAogICAgICAgICAgICAgICAgICAgIHRvcHJpY2U6IGkudG9kYXksCiAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ0b05ldyIsIG4pOwogICAgICAgICAgICAgICAgICB2YXIgcyA9IEpTT04ucGFyc2UoaS5pbiksCiAgICAgICAgICAgICAgICAgICAgbyA9IEpTT04ucGFyc2UoaS5vdXQpOwogICAgICAgICAgICAgICAgICBpLmN1cnJlbmN5X2lkID09IGUgJiYKICAgICAgICAgICAgICAgICAgICBpLmxlZ2FsX2lkID09IHQgJiYKICAgICAgICAgICAgICAgICAgICAocy5sZW5ndGggPj0gMCAmJiAoYS5pbmxpc3QgPSBzKSwKICAgICAgICAgICAgICAgICAgICBvLmxlbmd0aCA+PSAwICYmIChhLm91dGxpc3QgPSBvKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgYS4kc29ja2V0Lm9uKCJrbGluZSIsIGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAia2xpbmUiID09IGkudHlwZSAmJgogICAgICAgICAgICAgICAgICBpLmN1cnJlbmN5X2lkID09IGUgJiYKICAgICAgICAgICAgICAgICAgaS5sZWdhbF9pZCA9PSB0ICYmCiAgICAgICAgICAgICAgICAgICgoYS5uZXdEYXRhID0gaS5jbG9zZSksCiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGFzdFByaWNlIiwgYS5uZXdEYXRhKSwKICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsYXN0UHJpY2UxMjMiLCBhLm5ld0RhdGEpKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgeGUgPSBrZSwKICAgICAgU2UgPSAoYSgiMDgwNyIpLCBPYmplY3QoaFsiYSJdKSh4ZSwgQ2UsIHdlLCAhMSwgbnVsbCwgImNkNGMxMmJlIiwgbnVsbCkpLAogICAgICBBZSA9IFNlLmV4cG9ydHMsCiAgICAgIHplID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRyYWRlIiB9LCBbCiAgICAgICAgICBhKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICBwYWRkaW5nOiAiMTJweCAyMHB4IiwKICAgICAgICAgICAgICAgIGRpc3BsYXk6ICJmbGV4IiwKICAgICAgICAgICAgICAgICJmbGV4LWRpcmVjdGlvbiI6ICJyb3ciLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICIjMDBhNGQ4IiwKICAgICAgICAgICAgICAgICAgICBmbGV4OiAiMSIsCiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImlubGluZS1ibG9jayIsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY1N0eWxlOiB7ICJib3JkZXItYm90dG9tIjogIjFweCBzb2xpZCAjMDBhNGQ4IiB9IH0sCiAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ1c2VyY2VudGVyLmNoYW5nZSIpKSldCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIHRyYW5zYnRuIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS4kcm91dGVyLnB1c2goeyBuYW1lOiAidHJhbnNmZXJMZWdhbCIgfSk7CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC50cmFuc2ZlciIpKSldCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdCiAgICAgICAgICApLAogICAgICAgICAgYSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgd2lkdGg6ICIxMDAlIiwKICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogImNlbnRlciIsCiAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiNDBweCIsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS51c2VyX2xlZ2FsKSArICIgIiArIGUuX3MoZS5jdXJyZW5jeV9uYW1lKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLnVzZXJfY3VycmVuY3kpICsgIiAiICsgZS5fcyhlLmxlZ2FsX25hbWUpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXQogICAgICAgICAgKSwKICAgICAgICAgIGEoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYnRuLXdyYXAiIH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgImVsLWJ1dHRvbi1ncm91cCIsCiAgICAgICAgICAgICAgICB7IHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJlbC1idXR0b24iLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJidXkiID09IGUub3B0eXBlID8gImFjdGl2ZWJ1eSIgOiAibm9ybWFsIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9wdHlwZSA9ICJidXkiOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZW50ZXIuYnV5aW4iKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5sZWdhbF9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAiZWwtYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic2VsbCIgPT0gZS5vcHR5cGUgPyAiYWN0aXZlc2VsbCIgOiAibm9ybWFsIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9wdHlwZSA9ICJzZWxsIjsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2VudGVyLnNlbGxvdXQiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5sZWdhbF9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgMQogICAgICAgICAgKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZV9ib3giIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRhYnRpdGxlIGZDb2xvcjEgZnQxNmN1clBlciIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogMiA9PSBlLmJ1eU1vZGUgfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZVR5cGUoMik7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImNlbnRlci54aWFuIikpKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogMSA9PSBlLmJ1eU1vZGUgfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZVR5cGUoMSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5zaGkiKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgICBlLnNob3cKICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudCBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgImJ1eSIgPT0gZS5vcHR5cGUKICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidzEwMCBmbCBmaXJzdCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5hZGRyZXNzLmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImF2YWlsYWJsZSBjbGVhciBmQ29sb3IxIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlQ29sb3IgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvTmV4dCgibG9naW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibG9naW5zIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJjZW50ZXIub3IiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoInJlZ2lzdGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInJlZ2lzdGVycyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiY2VudGVyLnN0YXJ0IikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiIGlucHV0LWl0ZW0gY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFtlLl92KGUuX3MoZS4kdCgiY2VudGVyLmJ1eXByaWNlIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja2JveCIgPT09ICgxID09IGUuYnV5TW9kZSA/ICJ0ZXh0IiA6ICJudW1iZXIiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5idXlJbmZvLmJ1eVByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXlNb2RlPT0xP2Jlc3RQcmljZTpidXlJbmZvLmJ1eVByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IDEgPT09IGUuYnV5TW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJjaGVja2JveCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLmJ1eUluZm8uYnV5UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLl9pKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuYnV5SW5mby5idXlQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID4gLTEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxID09IGUuYnV5TW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5idXlJbmZvLmJ1eVByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZS50eXBlLmluZGV4T2YoImtleSIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjkgIT09IGUua2V5Q29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLmJ1eUluZm8uYnV5UHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHQudGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAhIWkuY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZS5faShhLCBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLmNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbyA8IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuYnV5SW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5UHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuY29uY2F0KFtzXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvID4gLTEgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuYnV5SW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5UHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuc2xpY2UoMCwgbykuY29uY2F0KGEuc2xpY2UobyArIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IGUuYnV5TW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5idXlJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1eVByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicmFkaW8iID09PSAoMSA9PSBlLmJ1eU1vZGUgPyAidGV4dCIgOiAibnVtYmVyIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuYnV5SW5mby5idXlQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5TW9kZT09MT9iZXN0UHJpY2U6YnV5SW5mby5idXlQcmljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAxID09PSBlLmJ1eU1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicmFkaW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGUuX3EoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5idXlJbmZvLmJ1eVByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZS50eXBlLmluZGV4T2YoImtleSIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjkgIT09IGUua2V5Q29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLiRzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUgPyBlLmJlc3RQcmljZSA6IGUuYnV5SW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5UHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuYnV5SW5mby5idXlQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5TW9kZT09MT9iZXN0UHJpY2U6YnV5SW5mby5idXlQcmljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAxID09PSBlLmJ1eU1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxID09IGUuYnV5TW9kZSA/ICJ0ZXh0IiA6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IGUuYnV5TW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuYnV5SW5mby5idXlQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWUudHlwZS5pbmRleE9mKCJrZXkiKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5ICE9PSBlLmtleUNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLmJ1eUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5UHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQudmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmN1cnJlbmN5X25hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIiBpbnB1dC1pdGVtIGNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5idXludW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5idXlJbmZvLmJ1eU51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYnV5SW5mby5idXlOdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJudW1iZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5idXlJbmZvLmJ1eU51bSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUudHlwZS5pbmRleE9mKCJrZXkiKSAmJiA2OSAhPT0gZS5rZXlDb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5udW1GaWx0ZXIodCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KGUuYnV5SW5mbywgImJ1eU51bSIsIHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5sZWdhbF9uYW1lKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInNsaWRlci1pbiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJlbC1zbGlkZXIiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFkZHJlc3MubGVuZ3RoIDw9IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gZS5idXlJbmZvLmJ1eVByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heDogMTAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IDI1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG93LXN0b3BzIjogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3M6IGUubWFya3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc2xpZGVyQ2hhbmdlKCJidXkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnNsaWRlckluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zbGlkZXJJbiA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAic2xpZGVySW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDIwIGZDb2xvcjEgZnQxNiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci50cmFkZXRvdGFsIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJ0b0Z4aWVkNCIpKGUuYnV5VG90YWwpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jdXJyZW5jeV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsbF9idG4gY3VyUGVyIG10MjAgdGMgZ3JlZW5CYWNrIGZDb2xvcjEgZnQxNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5idXlDb2luIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci5idXlpbiIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubGVnYWxfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICJzZWxsIiA9PSBlLm9wdHlwZQogICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ3MTAwIGZsIHNlY29uZCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5hZGRyZXNzLmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImF2YWlsYWJsZSBjbGVhciBmQ29sb3IxIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlQ29sb3IgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvTmV4dCgibG9naW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibG9naW5zIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJjZW50ZXIub3IiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoInJlZ2lzdGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInJlZ2lzdGVycyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiY2VudGVyLnN0YXJ0IikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiIGlucHV0LWl0ZW0gY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuc2VsbHByaWNlIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tib3giID09PSAoMSA9PSBlLmJ1eU1vZGUgPyAidGV4dCIgOiAibnVtYmVyIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuc2VsbEluZm8uc2VsbFByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXlNb2RlPT0xP2Jlc3RQcmljZTpzZWxsSW5mby5zZWxsUHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogMSA9PSBlLmJ1eU1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiY2hlY2tib3giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5zZWxsSW5mby5zZWxsUHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLl9pKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuc2VsbEluZm8uc2VsbFByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPiAtMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnNlbGxJbmZvLnNlbGxQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWUudHlwZS5pbmRleE9mKCJrZXkiKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5ICE9PSBlLmtleUNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IGUuYnV5TW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5zZWxsSW5mby5zZWxsUHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHQudGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAhIWkuY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gZS5faShhLCBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLmNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbyA8IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuc2VsbEluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGxQcmljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5jb25jYXQoW3NdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG8gPiAtMSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5zZWxsSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsbFByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnNsaWNlKDAsIG8pLmNvbmNhdChhLnNsaWNlKG8gKyAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuc2VsbEluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsbFByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicmFkaW8iID09PSAoMSA9PSBlLmJ1eU1vZGUgPyAidGV4dCIgOiAibnVtYmVyIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuc2VsbEluZm8uc2VsbFByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXlNb2RlPT0xP2Jlc3RQcmljZTpzZWxsSW5mby5zZWxsUHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogMSA9PSBlLmJ1eU1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicmFkaW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGUuX3EoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5zZWxsSW5mby5zZWxsUHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFlLnR5cGUuaW5kZXhPZigia2V5IikgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2OSAhPT0gZS5rZXlDb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuJHNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IGUuYnV5TW9kZSA/IGUuYmVzdFByaWNlIDogZS5zZWxsSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsbFByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IGUuYnV5TW9kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLmJlc3RQcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnNlbGxJbmZvLnNlbGxQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV5TW9kZT09MT9iZXN0UHJpY2U6c2VsbEluZm8uc2VsbFByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IDEgPT0gZS5idXlNb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMSA9PSBlLmJ1eU1vZGUgPyAidGV4dCIgOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLmJ1eU1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnNlbGxJbmZvLnNlbGxQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWUudHlwZS5pbmRleE9mKCJrZXkiKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY5ICE9PSBlLmtleUNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5idXlNb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnNlbGxJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGxQcmljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC52YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuY3VycmVuY3lfbmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiIGlucHV0LWl0ZW0gY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFtlLl92KGUuX3MoZS4kdCgiY2VudGVyLnNlbGxudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5zZWxsSW5mby5zZWxsTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJzZWxsSW5mby5zZWxsTnVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAibnVtYmVyIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuc2VsbEluZm8uc2VsbE51bSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUudHlwZS5pbmRleE9mKCJrZXkiKSAmJiA2OSAhPT0gZS5rZXlDb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5udW1GaWx0ZXIodCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KGUuc2VsbEluZm8sICJzZWxsTnVtIiwgdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmxlZ2FsX25hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAic2xpZGVyLW91dCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJlbC1zbGlkZXIiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFkZHJlc3MubGVuZ3RoIDw9IDAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gZS5zZWxsSW5mby5zZWxsUHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogMjUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3ctc3RvcHMiOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrczogZS5tYXJrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zbGlkZXJDaGFuZ2UoInNlbGwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnNsaWRlck91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc2xpZGVyT3V0ID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJzbGlkZXJPdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDIwIGZDb2xvcjEgZnQxNiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci50cmFkZXRvdGFsIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJ0b0Z4aWVkNCIpKGUuc2VsbFRvdGFsKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY3VycmVuY3lfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGxfYnRuIGN1clBlciBtdDIwIHRjIHJlZEJhY2sgZkNvbG9yMSBmdDE2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLnNlbGxDb2luIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2VudGVyLnNlbGxvdXQiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5sZWdhbF9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgIF0pCiAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBQZSA9IFtdLAogICAgICBUZSA9IHsKICAgICAgICBuYW1lOiAidHJhZGUiLAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIHRvRnhpZWQ0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgICAgbnVtRmlsdGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmVzdFByaWNlOiB0aGlzLiR0KCJsZXZlci5iZXN0cHJpY2UiKSwKICAgICAgICAgICAgY3VycmVuY3lfbmFtZTogIiIsCiAgICAgICAgICAgIGxlZ2FsX25hbWU6ICIiLAogICAgICAgICAgICB1c2VyX2N1cnJlbmN5OiAiIiwKICAgICAgICAgICAgdXNlcl9sZWdhbDogIiIsCiAgICAgICAgICAgIHNob3c6ICEwLAogICAgICAgICAgICBjbnlfcHJpY2U6IDAsCiAgICAgICAgICAgIHNob3dOb25lOiAhMSwKICAgICAgICAgICAgYWxsQmFsYW5jZTogMCwKICAgICAgICAgICAgYnV5SW5mbzogeyBidXlQcmljZTogMCwgYnV5TnVtOiAwLCB1cmw6ICJ0cmFuc2FjdGlvbi9pbiIgfSwKICAgICAgICAgICAgc2VsbEluZm86IHsgc2VsbFByaWNlOiAwLCBzZWxsTnVtOiAwLCB1cmw6ICJ0cmFuc2FjdGlvbi9vdXQiIH0sCiAgICAgICAgICAgIHNsaWRlckluOiAwLAogICAgICAgICAgICBzbGlkZXJPdXQ6IDAsCiAgICAgICAgICAgIHNsaWRlcnNzOiAhMCwKICAgICAgICAgICAgYnV5TW9kZTogMSwKICAgICAgICAgICAgYnV5UHJpY2U6IDAsCiAgICAgICAgICAgIG9wdHlwZTogImJ1eSIsCiAgICAgICAgICAgIG1hcmtzOiB7IDA6ICIwJSIsIDI1OiAiMjUlIiwgNTA6ICI1MCUiLCA3NTogIjc1JSIsIDEwMDogIjEwMCUiIH0sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiI7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAoZS5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiIpLAogICAgICAgICAgICAodGhpcy5sZWdhbF9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpKSwKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3lfaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGVnYWxfaWQiKSksCiAgICAgICAgICAgICh0aGlzLmxlZ2FsX25hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfbmFtZSIpKSwKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3lfbmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9uYW1lIikpLAogICAgICAgICAgICBlLmJ1eV9zZWxsKGUubGVnYWxfaWQsIGUuY3VycmVuY3lfaWQpLAogICAgICAgICAgICBldmVudEJ1cy4kb24oInVwZGF0ZUtMaW5lIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAiMW1pbiIgPT09IHQucGVyaW9kICYmCiAgICAgICAgICAgICAgICAoMCA9PSBlLmJ1eVByaWNlCiAgICAgICAgICAgICAgICAgID8gKChlLmJ1eVByaWNlID0gKHQuY2xvc2UgLSAwKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgICAoZS5idXlJbmZvLmJ1eVByaWNlID0gZS5idXlQcmljZSksCiAgICAgICAgICAgICAgICAgICAgKGUuc2VsbEluZm8uc2VsbFByaWNlID0gZS5idXlQcmljZSkpCiAgICAgICAgICAgICAgICAgIDogKGUuYnV5UHJpY2UgPSAodC5jbG9zZSAtIDApLnRvRml4ZWQoNCkpKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidXBkYXRlQmFsYW5jZSIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgZS5idXlfc2VsbChlLmxlZ2FsX2lkLCBlLmN1cnJlbmN5X2lkLCAhMCk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBlLnNvY2tldHMuc3Vic2NyaWJlKCJ1cGRhdGVfYmFsYW5jZSIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgdC50eXBlID09CiAgICAgICAgICAgICAgICAidXBkYXRlX2JhbGFuY2VfIiArIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpICYmCiAgICAgICAgICAgICAgICBlLmJ1eV9zZWxsKGUubGVnYWxfaWQsIGUuY3VycmVuY3lfaWQsICEwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBudW1GaWx0ZXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoZSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2xpZGVyQ2hhbmdlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAiYnV5IiA9PSBlCiAgICAgICAgICAgICAgPyAwICE9IHRoaXMudXNlcl9sZWdhbCAmJgogICAgICAgICAgICAgICAgKHRoaXMuYnV5SW5mby5idXlOdW0gPSAoCiAgICAgICAgICAgICAgICAgICh0aGlzLnVzZXJfbGVnYWwgKiB0aGlzLnNsaWRlckluKSAvCiAgICAgICAgICAgICAgICAgIHRoaXMuYnV5SW5mby5idXlQcmljZSAvCiAgICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgKS50b0ZpeGVkKDQpKQogICAgICAgICAgICAgIDogMCAhPSB0aGlzLnVzZXJfY3VycmVuY3kgJiYKICAgICAgICAgICAgICAgICh0aGlzLnNlbGxJbmZvLnNlbGxOdW0gPSAoCiAgICAgICAgICAgICAgICAgICh0aGlzLnVzZXJfY3VycmVuY3kgKiB0aGlzLnNsaWRlck91dCkgLwogICAgICAgICAgICAgICAgICAxMDAKICAgICAgICAgICAgICAgICkudG9GaXhlZCg0KSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2hhbmdlVHlwZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgKHRoaXMuYnV5TW9kZSA9IGUpLAogICAgICAgICAgICAgICh0aGlzLmJ1eUluZm8uYnV5UHJpY2UgPSB0aGlzLmJ1eVByaWNlKSwKICAgICAgICAgICAgICAodGhpcy5zZWxsSW5mby5zZWxsUHJpY2UgPSB0aGlzLmJ1eVByaWNlKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnb05leHQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogZSB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS90cmFuc2FjdGlvbi9kZWFsIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGFkZHJlc3M6IHRoaXMuYWRkcmVzcyB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgZS5hbGxCYWxhbmNlID0gdC5kYXRhLm1lc3NhZ2UudXNlcl9jbnk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGJ1eUNvaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICBpZiAoIXRoaXMuYnV5SW5mby5idXlQcmljZSB8fCB0aGlzLmJ1eUluZm8uYnV5UHJpY2UgPD0gMCkKICAgICAgICAgICAgICBsYXllci5tc2codGhpcy4kdCgibGF5LmlucHJpY2UiKSk7CiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmJ1eUluZm8uYnV5TnVtIHx8IHRoaXMuYnV5SW5mby5idXlOdW0gPD0gMCkKICAgICAgICAgICAgICBsYXllci5tc2codGhpcy4kdCgibGF5LmlubnVtYmVyIikpOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICB2YXIgdCA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvIiArIHRoaXMuYnV5SW5mby51cmwsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgbGVnYWxfaWQ6IHRoaXMuY3VycmVuY3lfaWQsCiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiB0aGlzLmxlZ2FsX2lkLAogICAgICAgICAgICAgICAgICBwcmljZTogdGhpcy5idXlJbmZvLmJ1eVByaWNlLAogICAgICAgICAgICAgICAgICBudW06IHRoaXMuYnV5SW5mby5idXlOdW0sCiAgICAgICAgICAgICAgICAgIG1vZGU6IHRoaXMuYnV5TW9kZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGEsIDIyMiksCiAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UodCksCiAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBhLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgICAgPyAobGF5ZXIubXNnKGEuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGUuYnV5SW5mby5idXlQcmljZSA9IGUuYnV5UHJpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAoZS5idXlJbmZvLmJ1eU51bSA9IDApLAogICAgICAgICAgICAgICAgICAgICAgICAoZS5zbGlkZXJJbiA9IDApLAogICAgICAgICAgICAgICAgICAgICAgICBlLmJ1eV9zZWxsKGUubGVnYWxfaWQsIGUuY3VycmVuY3lfaWQsICEwKSwKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoImJ1eVRyYWRlIiwgInRyYWRlYnV5IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ0b2NlbCIsICJ1cGRhdGEiKSkKICAgICAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGEuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHNlbGxDb2luOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGxJbmZvLnNlbGxQcmljZSB8fCB0aGlzLnNlbGxJbmZvLnNlbGxQcmljZSA8PSAwKQogICAgICAgICAgICAgIGxheWVyLm1zZyh0aGlzLiR0KCJsYXkub3V0cHJpY2UiKSk7CiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnNlbGxJbmZvLnNlbGxOdW0gfHwgdGhpcy5zZWxsSW5mby5zZWxsTnVtIDw9IDApCiAgICAgICAgICAgICAgbGF5ZXIubXNnKHRoaXMuJHQoImxheS5vdXRudW1iZXIiKSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciB0ID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS8iICsgdGhpcy5zZWxsSW5mby51cmwsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgbGVnYWxfaWQ6IHRoaXMuY3VycmVuY3lfaWQsCiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiB0aGlzLmxlZ2FsX2lkLAogICAgICAgICAgICAgICAgICBwcmljZTogdGhpcy5zZWxsSW5mby5zZWxsUHJpY2UsCiAgICAgICAgICAgICAgICAgIG51bTogdGhpcy5zZWxsSW5mby5zZWxsTnVtLAogICAgICAgICAgICAgICAgICBtb2RlOiB0aGlzLmJ1eU1vZGUsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhKSwKICAgICAgICAgICAgICAgICAgICBsYXllci5jbG9zZSh0KSwKICAgICAgICAgICAgICAgICAgICAib2siID09IGEuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgICAgICA/ICgoZS5idXlQcmljZSA9IDApLAogICAgICAgICAgICAgICAgICAgICAgICAoZS5zZWxsSW5mby5zZWxsUHJpY2UgPSAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGUuc2VsbEluZm8uc2VsbE51bSA9IDApLAogICAgICAgICAgICAgICAgICAgICAgICAoZS5zbGlkZXJPdXQgPSAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoImJ1eVRyYWRlIiwgInRyYWRlYnV5IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ0b2NlbCIsICJ1cGRhdGEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgZS5idXlfc2VsbChlLmxlZ2FsX2lkLCBlLmN1cnJlbmN5X2lkLCAhMCksCiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZyhhLmRhdGEubWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhhLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBmbHVzaFVzZXJBbW91bnQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5idXlfc2VsbCh0aGF0LmxlZ2FsX2lkLCB0aGF0LmN1cnJlbmN5X2lkLCAhMCk7CiAgICAgICAgICB9LAogICAgICAgICAgYnV5X3NlbGw6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAgICAgICAgIHZhciBpID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS90cmFuc2FjdGlvbi9kZWFsIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGxlZ2FsX2lkOiB0LCBjdXJyZW5jeV9pZDogZSB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgICAoKGkudXNlcl9jdXJyZW5jeSA9IGUuZGF0YS5tZXNzYWdlLnVzZXJfY3VycmVuY3kpLAogICAgICAgICAgICAgICAgICAoaS51c2VyX2xlZ2FsID0gZS5kYXRhLm1lc3NhZ2UudXNlcl9sZWdhbCksCiAgICAgICAgICAgICAgICAgIChpLmNueV9wcmljZSA9IGUuZGF0YS5tZXNzYWdlLmNueV9wcmljZSksCiAgICAgICAgICAgICAgICAgIGEgfHwgKChpLmJ1eUluZm8uYnV5UHJpY2UgPSAwKSwgKGkuYnV5SW5mby5idXlOdW0gPSAwKSkpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICAgIGJ1eVRvdGFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1eUluZm8uYnV5UHJpY2UgKiB0aGlzLmJ1eUluZm8uYnV5TnVtIHx8IDA7CiAgICAgICAgICB9LAogICAgICAgICAgc2VsbFRvdGFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGxJbmZvLnNlbGxQcmljZSAqIHRoaXMuc2VsbEluZm8uc2VsbE51bSB8fCAwOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBJZSA9IFRlLAogICAgICBCZSA9IChhKCJlNTE1IiksIE9iamVjdChoWyJhIl0pKEllLCB6ZSwgUGUsICExLCBudWxsLCAiNTQ1ZmVmYjciLCBudWxsKSksCiAgICAgIE5lID0gQmUuZXhwb3J0cywKICAgICAgRmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY2hhcnQiIH0sIFsKICAgICAgICAgIGEoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGluZV90aXRsZSBmQ29sb3IxIiB9LAogICAgICAgICAgICBlLl9sKGUubGluZUxpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogaSA9PSBlLmN1cnJlbnQgfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZUN5bGUoaSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQpKV0KICAgICAgICAgICAgICApOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgMAogICAgICAgICAgKSwKICAgICAgICAgIGEoImRpdiIsIHsKICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgIm1pbi13aWR0aCI6ICI0MDBweCIsIGhlaWdodDogIjUxMHB4IiB9LAogICAgICAgICAgICBhdHRyczogeyBpZDogImNvbnRhaW5lciIgfSwKICAgICAgICAgIH0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBMZSA9IFtdLAogICAgICAkZSA9IHsKICAgICAgICBuYW1lOiAiY2hhcnQiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGxpbmVMaXN0OiBbIuaXpSIsICLlkagiLCAi5pyIIl0sCiAgICAgICAgICAgIGN1cnJlbnQ6IDAsCiAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICBrRGF0YTogIiIsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImFkZHJlc3MiKSB8fCAiIjsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGNoYW5nZUN5bGU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGUgPSBlOwogICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBlOwogICAgICAgICAgfSwKICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICJodHRwczovL2RhdGEuamlhbnNodWtlamkuY29tL3N0b2NrL2hpc3RvcnkvMDAwMDAxIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgZS5jaGFydExpbmUodC5kYXRhLmRhdGEpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBjaGFydExpbmU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIEhpZ2hjaGFydHMuc2V0T3B0aW9ucyh7IGxhbmc6IHsgcmFuZ2VTZWxlY3Rvclpvb206ICIiIH0gfSksIChlID0gZSk7CiAgICAgICAgICAgIHZhciB0ID0gW10sCiAgICAgICAgICAgICAgYSA9IFtdLAogICAgICAgICAgICAgIGkgPSBlLmxlbmd0aCwKICAgICAgICAgICAgICBuID0gWwogICAgICAgICAgICAgICAgWyJ3ZWVrIiwgWzFdXSwKICAgICAgICAgICAgICAgIFsibW9udGgiLCBbMSwgMiwgMywgNCwgNl1dLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgcyA9IDA7CiAgICAgICAgICAgIGZvciAoczsgcyA8IGk7IHMgKz0gMSkKICAgICAgICAgICAgICB0LnB1c2goW2Vbc11bMF0sIGVbc11bMV0sIGVbc11bMl0sIGVbc11bM10sIGVbc11bNF1dKSwKICAgICAgICAgICAgICAgIGEucHVzaChbZVtzXVswXSwgZVtzXVs1XV0pOwogICAgICAgICAgICBIaWdoY2hhcnRzLnN0b2NrQ2hhcnQoImNvbnRhaW5lciIsIHsKICAgICAgICAgICAgICByYW5nZVNlbGVjdG9yOiB7IHNlbGVjdGVkOiAxLCBpbnB1dERhdGVGb3JtYXQ6ICIlWS0lbS0lZCIgfSwKICAgICAgICAgICAgICB0aXRsZTogeyB0ZXh0OiAi6KGM5oOF6LaL5Yq/5Zu+IiB9LAogICAgICAgICAgICAgIHhBeGlzOiB7CiAgICAgICAgICAgICAgICBkYXRlVGltZUxhYmVsRm9ybWF0czogewogICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZDogIiVIOiVNOiVTLiVMIiwKICAgICAgICAgICAgICAgICAgc2Vjb25kOiAiJUg6JU06JVMiLAogICAgICAgICAgICAgICAgICBtaW51dGU6ICIlSDolTSIsCiAgICAgICAgICAgICAgICAgIGhvdXI6ICIlSDolTSIsCiAgICAgICAgICAgICAgICAgIGRheTogIiVtLSVkIiwKICAgICAgICAgICAgICAgICAgd2VlazogIiVtLSVkIiwKICAgICAgICAgICAgICAgICAgbW9udGg6ICIleS0lbSIsCiAgICAgICAgICAgICAgICAgIHllYXI6ICIlWSIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgdG9vbHRpcDogeyBzcGxpdDogITEsIHNoYXJlZDogITAgfSwKICAgICAgICAgICAgICB5QXhpczogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBsYWJlbHM6IHsgYWxpZ246ICJyaWdodCIsIHg6IC0zIH0sCiAgICAgICAgICAgICAgICAgIHRpdGxlOiB7IHRleHQ6ICLku7fmoLwiIH0sCiAgICAgICAgICAgICAgICAgIGhlaWdodDogIjY1JSIsCiAgICAgICAgICAgICAgICAgIHJlc2l6ZTogeyBlbmFibGVkOiAhMCB9LAogICAgICAgICAgICAgICAgICBsaW5lV2lkdGg6IDIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBsYWJlbHM6IHsgYWxpZ246ICJyaWdodCIsIHg6IC0zIH0sCiAgICAgICAgICAgICAgICAgIHRpdGxlOiB7IHRleHQ6ICLmiJDkuqTph48iIH0sCiAgICAgICAgICAgICAgICAgIHRvcDogIjY1JSIsCiAgICAgICAgICAgICAgICAgIGhlaWdodDogIjM1JSIsCiAgICAgICAgICAgICAgICAgIG9mZnNldDogMCwKICAgICAgICAgICAgICAgICAgbGluZVdpZHRoOiAyLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHNlcmllczogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0eXBlOiAiY2FuZGxlc3RpY2siLAogICAgICAgICAgICAgICAgICBuYW1lOiAiTVRTIiwKICAgICAgICAgICAgICAgICAgY29sb3I6ICJncmVlbiIsCiAgICAgICAgICAgICAgICAgIGxpbmVDb2xvcjogImdyZWVuIiwKICAgICAgICAgICAgICAgICAgdXBDb2xvcjogInJlZCIsCiAgICAgICAgICAgICAgICAgIHVwTGluZUNvbG9yOiAicmVkIiwKICAgICAgICAgICAgICAgICAgdG9vbHRpcDoge30sCiAgICAgICAgICAgICAgICAgIG5hdmlnYXRvck9wdGlvbnM6IHsKICAgICAgICAgICAgICAgICAgICBjb2xvcjogSGlnaGNoYXJ0cy5nZXRPcHRpb25zKCkuY29sb3JzWzBdLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBkYXRhOiB0LAogICAgICAgICAgICAgICAgICBkYXRhR3JvdXBpbmc6IHsgdW5pdHM6IG4gfSwKICAgICAgICAgICAgICAgICAgaWQ6ICJzeiIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0eXBlOiAiY29sdW1uIiwKICAgICAgICAgICAgICAgICAgZGF0YTogYSwKICAgICAgICAgICAgICAgICAgeUF4aXM6IDEsCiAgICAgICAgICAgICAgICAgIGRhdGFHcm91cGluZzogeyB1bml0czogbiB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgICB9LAogICAgICB9LAogICAgICBNZSA9ICRlLAogICAgICBFZSA9IChhKCJiMzdmIiksIE9iamVjdChoWyJhIl0pKE1lLCBGZSwgTGUsICExLCBudWxsLCAiOTQ4YWY4MjAiLCBudWxsKSksCiAgICAgIFZlID0gRWUuZXhwb3J0cywKICAgICAgRGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZW50cnVzdCIgfSwgWwogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRpdGxlIGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAidGFiX3RpdGxlIGZsIGZ0MTIiIH0sCiAgICAgICAgICAgICAgZS5fbChlLndheUxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBhID09IGUuaXNDaG9vc2VkIH0sCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS53YXlDaG9vc2UoYSwgdC51cmwpOwogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudGl0bGUpKV0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgMAogICAgICAgICAgICApLAogICAgICAgICAgXSksCiAgICAgICAgICBpKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiLCBzdGF0aWNTdHlsZTogeyAibWluLWhlaWdodCI6ICI0MDBweCIgfSB9LAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgaSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgZmxleCIgfSwgWwogICAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzMwIiB9LCBbZS5fdihlLl9zKGUuJHQoInRpbWUiKSkpXSksCiAgICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MTEiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5wYWlycyIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogInc4IiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuZGlyZWN0aW9uIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzExIiB9LCBbZS5fdihlLl9zKGUuJHQoIm51bWJlciIpKSldKSwKICAgICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogIncxMSIgfSwgW2UuX3YoZS5fcyhlLiR0KCJwcmljZSIpKSldKSwKICAgICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogInc4IHRyIiB9LCBbZS5fdihlLl9zKGUuJHQoImRvIikpKV0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGUuaW5MaXN0Lmxlbmd0aCA+IDAKICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRhaW5lcnMgc2Nyb2xsIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5pbkxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzMwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jcmVhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzExIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQuY3VycmVuY3lfbmFtZSkgKyAiLyIgKyBlLl9zKHQubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IFsiZmwiLCAidzgiLCB7IGdyZWVuOiAiaW4iID09IGUudHlwZSB9XSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4iID09IGUudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuJHQoImNlbnRlci5pbmJ1eSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS4kdCgiY2VudGVyLm91dHNlbGwiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzExIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5udW1iZXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQucHJpY2UpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsIHc4IHRyIGN1clBlciBjZWlsQ29sb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucmV2b2tlKGEsIHQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJyZXZva2UiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAhZS5sb2FkaW5nICYmIGUuaW5MaXN0Lmxlbmd0aCA+IDgKICAgICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldG1vcmUgdGMgZkNvbG9yMSBmdDE0IG10MTAgY3VyUGVyIHBkYjIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdldERhdGEoIm1vcmUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUubW9yZSkgKyAiICIpXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICBlLmxvYWRpbmcKICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIHBkYjIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsb2R3MjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBhKCIxMmFlIiksIGFsdDogIiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgYmFzZUNvbG9yIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibG9hZGluZyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgIGUuaW5MaXN0Lmxlbmd0aCA8PSAwICYmICFlLmxvYWRpbmcKICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5vX2RhdGEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOTQ4NSIpLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJub2RhdGEiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgIF0KICAgICAgICAgICksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIFJlID0gW10sCiAgICAgIFVlID0KICAgICAgICAoYSgiYTQzNCIpLAogICAgICAgIGEoIjk5YWYiKSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiZW50cnVzdCIsCiAgICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgaXNzaG93OiAhMSwKICAgICAgICAgICAgICBhZGRyZXNzOiAiIiwKICAgICAgICAgICAgICBpc0Nob29zZWQ6IDAsCiAgICAgICAgICAgICAgaXNVcmw6IDAsCiAgICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgICB1cmw6ICJ0cmFuc2FjdGlvbl9pbiIsCiAgICAgICAgICAgICAgdHlwZTogImluIiwKICAgICAgICAgICAgICBtb3JlOiB0aGlzLiR0KCJtb3JlIiksCiAgICAgICAgICAgICAgbG9hZGluZzogITEsCiAgICAgICAgICAgICAgdXJsTGlzdDogW3sgdGl0bGU6IHRoaXMuJHQoImNlbnRlci5jdXJyZW50IikgfV0sCiAgICAgICAgICAgICAgd2F5TGlzdDogWwogICAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy4kdCgiY2VudGVyLmluYnV5IiksIHVybDogInRyYW5zYWN0aW9uX2luIiB9LAogICAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy4kdCgiY2VudGVyLm91dHNlbGwiKSwgdXJsOiAidHJhbnNhY3Rpb25fb3V0IiB9LAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgaW5MaXN0OiBbXSwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0sCiAgICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIjsKICAgICAgICAgIH0sCiAgICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICAgIHdheUNob29zZTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICB2YXIgYSA9IHRoaXM7CiAgICAgICAgICAgICAgKGEuaW5MaXN0ID0gIiIpLAogICAgICAgICAgICAgICAgKGEucGFnZSA9IDEpLAogICAgICAgICAgICAgICAgKGEudXJsID0gdCksCiAgICAgICAgICAgICAgICAoYS50eXBlID0KICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uX2luIiA9PSB0CiAgICAgICAgICAgICAgICAgICAgPyAiaW4iCiAgICAgICAgICAgICAgICAgICAgOiAidHJhbnNhY3Rpb25fb3V0IiA9PSB0CiAgICAgICAgICAgICAgICAgICAgPyAib3V0IgogICAgICAgICAgICAgICAgICAgIDogImFsbCIpLAogICAgICAgICAgICAgICAgYS5nZXREYXRhKCksCiAgICAgICAgICAgICAgICAoYS5tb3JlID0gYS4kdCgibW9yZSIpKSwKICAgICAgICAgICAgICAgIChhLmlzQ2hvb3NlZCA9IGUpOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZXZva2U6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLAogICAgICAgICAgICAgICAgaSA9ICgodCA9IHQpLCAoZSA9IGUpLCBhLnR5cGUpOwogICAgICAgICAgICAgIGxheWVyLm9wZW4oewogICAgICAgICAgICAgICAgY29udGVudDogYS4kdCgibGF5LnJldm9rZSIpLAogICAgICAgICAgICAgICAgYnRuOiBbYS4kdCgibGF5LnN1cmUiKSwgYS4kdCgibGF5LmNlaWwiKV0sCiAgICAgICAgICAgICAgICB5ZXM6IGZ1bmN0aW9uIChuKSB7CiAgICAgICAgICAgICAgICAgIHZhciBzID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICAgICAgICBhLiRodHRwKHsKICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3RyYW5zYWN0aW9uX2RlbCIsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBpZDogdCwgdHlwZTogaSB9LAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYS50b2tlbiB9LAogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICBsYXllci5jbG9zZShzKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gKGNvbnNvbGUubG9nKGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5pbkxpc3Quc3BsaWNlKGUsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoInRvY2VsIiwgImNlbGJ1eSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoInVwZGF0ZUJhbGFuY2UiLCAiMSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyh0Lm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgICAgYSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKTsKICAgICAgICAgICAgICBpZiAoYSAmJiAiIiAhPSBhKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMsCiAgICAgICAgICAgICAgICAgIG4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkX2N1ciIpLAogICAgICAgICAgICAgICAgICBzID0gaS51cmw7CiAgICAgICAgICAgICAgICBlIHx8IChpLnBhZ2UgPSAxKTsKICAgICAgICAgICAgICAgIHZhciBvID0gaS5wYWdlOwogICAgICAgICAgICAgICAgKGkubG9hZGluZyA9ICEwKSwKICAgICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS8iICsgcywKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHBhZ2U6IG8sIGN1cnJlbmN5X2lkOiBuIH0sCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBhIH0sCiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGkubG9hZGluZyA9ICExKSwgIm9rIiA9PSBhLmRhdGEudHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBhLmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICAgICAgICAgICAgICBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoMCA9PSBuLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpLm1vcmUgPSBpLiR0KCJub21vcmUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoaS5pbkxpc3QgPSBpLmluTGlzdC5jb25jYXQobikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkucGFnZSArPSAxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0LmluTGlzdCA9IG4pOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidG9jZWwiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHQpLCB0ICYmIGUuZ2V0RGF0YSgpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBldmVudEJ1cy4kb24oImJ1eVRyYWRlIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIHQgJiYgZS5nZXREYXRhKCk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgZS5nZXREYXRhKCk7CiAgICAgICAgICB9LAogICAgICAgIH0pLAogICAgICBPZSA9IFVlLAogICAgICBXZSA9IChhKCI1ZGMxIiksIE9iamVjdChoWyJhIl0pKE9lLCBEZSwgUmUsICExLCBudWxsLCAiODI2YjFhNTIiLCBudWxsKSksCiAgICAgIGplID0gV2UuZXhwb3J0cywKICAgICAgcWUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZW50cnVzdCIgfSwgWwogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgaSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgY2xlYXIiIH0sIFsKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTgiIH0sIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTEiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIucGFpcnMiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgW2UuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdihlLl9zKGUuJHQoInByaWNlIikpKV0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMSIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5kZWFsdG90YWwiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci50cHJpY2UiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgW2UuX3YoZS5fcyhlLiR0KCJzdGF0dXMiKSkpXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzggdHIiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuZGlyZWN0aW9uIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGUuY29tTGlzdC5sZW5ndGggPiAwCiAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVycyBzY3JvbGwiIH0sIFsKICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJsaXN0LWl0ZW0gZkNvbG9yMSBmdDEyIiB9LAogICAgICAgICAgICAgICAgICAgIGUuX2woZS5jb21MaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyh0LmN1cnJlbmN5X25hbWUpICsgIi8iICsgZS5fcyh0LmxlZ2FsX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQubnVtYmVyKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnByaWNlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJudW1GaWx0ZXIiKSh0LnByaWNlICogdC5udW1iZXIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnByaWNlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJkZWFsZWQiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbCB3OCB0ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogMiA9PSB0LndheSA/ICJyZWRDb2xvciIgOiAiZ3JlZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID09IHQud2F5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuJHQoImNlbnRlci5pbmJ1eSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuJHQoImNlbnRlci5vdXRzZWxsIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICFlLmxvYWRpbmcgJiYgZS5jb21MaXN0Lmxlbmd0aCA+IDgKICAgICAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0bW9yZSB0YyBmQ29sb3IxIGZ0MTQgbXQxMCBjdXJQZXIgcGRiMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0RGF0YSgibW9yZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUubW9yZSkgKyAiICIpXQogICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBlLmxvYWRpbmcKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyBwZGIyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsb2R3MjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiMTJhZSIpLCBhbHQ6ICIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgYmFzZUNvbG9yIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxvYWRpbmciKSkgKyAiLi4uIiksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgIGUuY29tTGlzdC5sZW5ndGggPD0gMCAmJiAhZS5sb2FkaW5nCiAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibm9fZGF0YSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOTQ4NSIpLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDE4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoIm5vZGF0YSIpKSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBHZSA9IFtdLAogICAgICBaZSA9IHsKICAgICAgICBuYW1lOiAiaGlzZW50cnVzdCIsCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgbnVtRmlsdGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYWRkcmVzczogIiIsCiAgICAgICAgICAgIGlzQ2hvb3NlZDogMCwKICAgICAgICAgICAgaXNVcmw6IDAsCiAgICAgICAgICAgIHBhZ2U6IDEsCiAgICAgICAgICAgIHVybDogInRyYW5zYWN0aW9uX2luIiwKICAgICAgICAgICAgdHlwZTogImluIiwKICAgICAgICAgICAgbW9yZTogdGhpcy4kdCgibW9yZSIpLAogICAgICAgICAgICBsb2FkaW5nOiAhMSwKICAgICAgICAgICAgd2F5TGlzdDogWwogICAgICAgICAgICAgIHsgdGl0bGU6IHRoaXMuJHQoImNlbnRlci5pbmJ1eSIpLCB1cmw6ICJ0cmFuc2FjdGlvbl9pbiIgfSwKICAgICAgICAgICAgICB7IHRpdGxlOiB0aGlzLiR0KCJjZW50ZXIub3V0c2VsbCIpLCB1cmw6ICJ0cmFuc2FjdGlvbl9vdXQiIH0sCiAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy4kdCgiY2VudGVyLmFsbCIpLCB1cmw6ICJ0cmFuc2FjdGlvbl9hbGwiIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGNvbUxpc3Q6IFtdLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIjsKICAgICAgICB9LAogICAgICAgIHdhY3RoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBldmVudEJ1cy4kb24oImJ1eVRyYWRlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZSAmJiB0aGF0LmdldERhdGEoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgd2F5Q2hvb3NlOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICB2YXIgYSA9IHRoaXM7CiAgICAgICAgICAgIChhLmNvbUxpc3QgPSAiIiksCiAgICAgICAgICAgICAgKGEucGFnZSA9IDEpLAogICAgICAgICAgICAgIChhLnVybCA9IHQpLAogICAgICAgICAgICAgIChhLnR5cGUgPSAidHJhbnNhY3Rpb25faW4iID09IHQgPyAiaW4iIDogIm91dCIpLAogICAgICAgICAgICAgIChhLm1vcmUgPSBhLiR0KCJtb3JlIikpLAogICAgICAgICAgICAgIChhLmlzQ2hvb3NlZCA9IGUpLAogICAgICAgICAgICAgIGEuZ2V0RGF0YSgpOwogICAgICAgICAgfSwKICAgICAgICAgIGdldE1vcmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKHRoaXMucGFnZSA9ICsrdGhpcy5wYWdlKSwgdGhpcy5nZXREYXRhKCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIik7CiAgICAgICAgICAgIGlmICh0ICYmICIiICE9IHQpIHsKICAgICAgICAgICAgICB2YXIgYSA9IHRoaXM7CiAgICAgICAgICAgICAgaWYgKCIiICE9IGEudG9rZW4pIHsKICAgICAgICAgICAgICAgIGUgfHwgKGEucGFnZSA9IDEpOwogICAgICAgICAgICAgICAgdmFyIGkgPSBhLnBhZ2U7CiAgICAgICAgICAgICAgICBhLmxvYWRpbmcgPSAhMDsKICAgICAgICAgICAgICAgIHZhciBuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9pZF9jdXIiKTsKICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3RyYW5zYWN0aW9uX2NvbXBsZXRlIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsgcGFnZTogaSwgY3VycmVuY3lfaWQ6IG4gfSwKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0IH0sCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIGlmICgoKGEubG9hZGluZyA9ICExKSwgIm9rIiA9PSB0LmRhdGEudHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gdC5kYXRhLm1lc3NhZ2UubGlzdDsKICAgICAgICAgICAgICAgICAgICAgIGUKICAgICAgICAgICAgICAgICAgICAgICAgPyAoKGEucGFnZSArPSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoYS5jb21MaXN0ID0gYS5jb21MaXN0LmNvbmNhdChpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGEubW9yZSA9IGEuJHQoIm5vbW9yZSIpKSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBpLmxlbmd0aCAmJiAoYS5jb21MaXN0ID0gaSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgZXZlbnRCdXMuJG9uKCJidXlUcmFkZSIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgIHQgJiYgZS5nZXREYXRhKCk7CiAgICAgICAgICB9KSwKICAgICAgICAgICAgZS5nZXREYXRhKCksCiAgICAgICAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBlLmdldERhdGEoKTsKICAgICAgICAgICAgfSwgNWUzKTsKICAgICAgICB9LAogICAgICB9LAogICAgICBRZSA9IFplLAogICAgICBIZSA9IChhKCJlYWY1IiksIE9iamVjdChoWyJhIl0pKFFlLCBxZSwgR2UsICExLCBudWxsLCAiNTU1MGQ2OGIiLCBudWxsKSksCiAgICAgIEtlID0gSGUuZXhwb3J0cywKICAgICAgSmUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY3VycmVuY3kiIH0sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSBmQ29sb3IxIiB9LCBbZS5fdigi5biB56eN6LWE5paZIildKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IGYxNCBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQyNCIgfSwgW2UuX3YoZS5fcyhlLmNvaW4ubmFtZSkpXSksCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBhYnN0cmFjdCBmdDE0IiB9LCBbZS5fdigi566A5LuLIildKSwKICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJtdDE1IGZ0MTQiIH0sIFsKICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS5jb2luLmRlc2MpICsgIiAiKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgWWUgPSBbXSwKICAgICAgWGUgPSB7CiAgICAgICAgbmFtZTogImN1cnJlbmN5IiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBjdXJyZW5jeV9pZDogIiIsIGNvaW46IHt9IH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkX2N1ciIpOwogICAgICAgICAgICBudWxsICE9IHQgJiYKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsgdXJsOiAiL2FwaS9jdXJyZW5jeS9kZXRhaWw/aWQ9IiArIHQgfSkudGhlbigKICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYgKGUuY29pbiA9IHQuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICApOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBldCA9IFhlLAogICAgICB0dCA9IChhKCI5OGJkIiksIE9iamVjdChoWyJhIl0pKGV0LCBKZSwgWWUsICExLCBudWxsLCAiMzkyNWM1NWEiLCBudWxsKSksCiAgICAgIGF0ID0gdHQuZXhwb3J0cywKICAgICAgaXQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZGV0YWlsIiwgc3RhdGljU3R5bGU6IHsgYmFja2dyb3VuZDogIiMxODFkMjUiIH0gfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRpdGxlIGZDb2xvcjEgdG9wc2hhZG93IiB9LCBbCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRpdGxlLWhlYWQiIH0sIFsKICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoImFsbHRyZWFkIikpKV0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgICBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0LXRpdGxlIGZDb2xvcjIgZnQxMiBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdihlLl9zKGUuJHQoInRpbWUiKSkpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KGUuX3MoZS4kdCgicHJpY2UiKSkpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInRyZWFkbnVtIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGUuZGVMaXN0Lmxlbmd0aCA+IDAKICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVycyBzY3JvbGwiIH0sCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLmRlTGlzdCwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNsZWFyIiwgY2xhc3M6IHQuZGlyZWN0aW9uIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigidG9maXhlZEZvdXIiKSh0LnByaWNlKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkTiIpKHQuYW1vdW50LCA2KSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIG50ID0gW10sCiAgICAgIHN0ID0gewogICAgICAgIG5hbWU6ICJkZXRhaWwiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICBpc0Nob29zZWQ6IDIsCiAgICAgICAgICAgIG5ldzogITEsCiAgICAgICAgICAgIHdheUxpc3Q6IFsKICAgICAgICAgICAgICB0aGlzLiR0KCJjZW50ZXIuaW5idXkiKSwKICAgICAgICAgICAgICB0aGlzLiR0KCJjZW50ZXIub3V0c2VsbCIpLAogICAgICAgICAgICAgIHRoaXMuJHQoImNlbnRlci5hbGwiKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgZGVMaXN0OiBbXSwKICAgICAgICAgICAgbGVnYWxfaWQ6ICIiLAogICAgICAgICAgICBjdXJyZW5jeV9pZDogIiIsCiAgICAgICAgICAgIGxlZnROYW1lOiAiIiwKICAgICAgICAgICAgcmlnaHROYW1lOiAiIiwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRkcmVzcyIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgY3V0RGF0ZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICB9LAogICAgICAgICAgdG9maXhlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICAgIHRvZml4ZWRGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgICAgdG9maXhlZE46IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCh0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICB3YXlDaG9vc2VkOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLmlzQ2hvb3NlZCA9IGU7CiAgICAgICAgICB9LAogICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpcywKICAgICAgICAgICAgICBpID0gIi9hcGkvY3VycmVuY3kvbmV3X3RyYWRlaGlzdG9yeT9sZWdhbF9pZD0iCiAgICAgICAgICAgICAgICAuY29uY2F0KGUsICImY3VycmVuY3lfaWQ9IikKICAgICAgICAgICAgICAgIC5jb25jYXQodCk7CiAgICAgICAgICAgIHRoaXMuJGh0dHAKICAgICAgICAgICAgICAuZ2V0KGkpCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgKChhLmRlTGlzdCA9IGUuZGF0YS5tZXNzYWdlKSwgYS5jb25uZWN0KCkpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICB9LAogICAgICAgICAgY29ubmVjdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIGUuJHNvY2tldC5lbWl0KCJsb2dpbiIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c2VyX2lkIikpLAogICAgICAgICAgICAgIGUuc29ja2V0cy5zdWJzY3JpYmUoIm1hcmtldF9kZXRhaWwiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAibWFya2V0X2RldGFpbCIgPT0gdC50eXBlICYmCiAgICAgICAgICAgICAgICAgIHQubGVnYWxfaWQgPT0gZS5sZWdhbF9pZCAmJgogICAgICAgICAgICAgICAgICB0LmN1cnJlbmN5X2lkID09IGUuY3VycmVuY3lfaWQKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IDIwOwogICAgICAgICAgICAgICAgICB0LmRhdGEuZm9yRWFjaChmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIGUuZGVMaXN0LnVuc2hpZnQodCksCiAgICAgICAgICAgICAgICAgICAgICBlLmRlTGlzdC5sZW5ndGggPiBhICYmCiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGVMaXN0LnNwbGljZShhLCBlLmRlTGlzdC5sZW5ndGggLSBhKTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgKHRoaXMubGVnYWxfaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGVnYWxfaWQiKSksCiAgICAgICAgICAgICh0aGlzLmN1cnJlbmN5X2lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImN1cnJlbmN5X2lkIikpLAogICAgICAgICAgICB0aGlzLmNvbXBsZXRlKHRoaXMubGVnYWxfaWQsIHRoaXMuY3VycmVuY3lfaWQpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIG90ID0gc3QsCiAgICAgIHJ0ID0gKGEoImM0ZmQiKSwgT2JqZWN0KGhbImEiXSkob3QsIGl0LCBudCwgITEsIG51bGwsICIzNzkyYTc3ZSIsIG51bGwpKSwKICAgICAgbHQgPSBydC5leHBvcnRzLAogICAgICBjdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJrLWxpbmUtYXJlYSBiZy0xZDFkMjkiLAogICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiAiZmxleCIsICJmbGV4LWRpcmVjdGlvbiI6ICJyb3ciIH0sCiAgICAgICAgICB9LAogICAgICAgICAgWwogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIyMzBweCIsIGJhY2tncm91bmQ6ICIjMTgxZDI1IiB9IH0sCiAgICAgICAgICAgICAgW2EoInR2LXRvcCIpXSwKICAgICAgICAgICAgICAxCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IGNvbHVtbiBtbDMiLAogICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgYmFja2dyb3VuZDogIiMxODFkMjUiLCBmbGV4OiAiMSIgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbmZvLXdyYXAiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoZS5fcyhlLnJpZ2h0TmFtZSkgKyAiLyIgKyBlLl9zKGUubGVmdE5hbWUpKV0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgY2xhc3M6IGUuY2hhbmdlIDwgMCA/ICJyZWQiIDogImdyZWVuIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5sYXN0UHJpY2UpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi4omIICQgIiArIGUuX3MoZS5fZigidG9GaXhlZE4iKShlLmxhc3RQcmljZSwgMikpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJtYXJrZXQuY2hhbmdlIikpKV0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IGNsYXNzOiBlLmNoYW5nZSA8IDAgPyAicmVkIiA6ICJncmVlbiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuY2hhbmdlKSArICIlIiksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiaG9tZS5oaWdoIikpKV0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuaGlnaFByaWNlKSldKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJob21lLm1pbiIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmxvd1ByaWNlKSldKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIjI0SCAiICsgZS5fcyhlLiR0KCJob21lLnZvbHVtZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLnZvbHVtbikpXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY1N0eWxlOiB7IGZsZXg6ICIxIiB9IH0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCBjb2x1bW4iLAogICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICIwIDBweCIsCiAgICAgICAgICAgICAgICAgICAgZmxleDogIjEiLAogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiAidHZfY2hhcnRfY29udGFpbmVyIiB9LAogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgXQogICAgICAgICAgICApLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljU3R5bGU6IHsgIm1hcmdpbi1sZWZ0IjogIjNweCIgfSB9LAogICAgICAgICAgICAgIFthKCJleGNoYW5nZSIpXSwKICAgICAgICAgICAgICAxCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgeyBzdGF0aWNTdHlsZTogeyAibWFyZ2luLWxlZnQiOiAiM3B4IiB9IH0sCiAgICAgICAgICAgICAgW2EoInRyYWRlIildLAogICAgICAgICAgICAgIDEKICAgICAgICAgICAgKSwKICAgICAgICAgIF0KICAgICAgICApOwogICAgICB9LAogICAgICBkdCA9IFtdLAogICAgICB1dCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgYXR0cnM6IHsgaWQ6ICJ0di10b3AiIH0gfSwgWwogICAgICAgICAgYSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgZGlzcGxheTogImZsZXgiLAogICAgICAgICAgICAgICAgImZsZXgtZGlyZWN0aW9uIjogInJvdyIsCiAgICAgICAgICAgICAgICBoZWlnaHQ6ICI1MHB4IiwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJzcGlubmVyLXRpdGxlIiwKICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiNTBweCIsCiAgICAgICAgICAgICAgICAgICAgInBhZGRpbmctbGVmdCI6ICIyMHB4IiwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUucmlnaHROYW1lKSArICIvIiArIGUuX3MoZS5sZWZ0TmFtZSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0KICAgICAgICAgICksCiAgICAgICAgICBlLnNob3dNYXJrZXQKICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFya2V0LWJveCIgfSwgW2EoIm1hcmtldCIpXSwgMSkKICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIG10ID0gW10sCiAgICAgIHB0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1hcmtldCIgfSwgWwogICAgICAgICAgZS5fbSgwKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb2luLXRpdGxlIGNsZWFyIiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNTdHlsZTogeyBjb2xvcjogIiMwMGE0ZDgiIH0gfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoIm1hcmtldC5jdXJyZW5jeSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCBbYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibWFya2V0Lmxhc3RwcmljZSIpKSldKV0pLAogICAgICAgICAgICBhKCJkaXYiLCBbYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibWFya2V0LmNoYW5nZSIpKSldKV0pLAogICAgICAgICAgXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGluZSIgfSksCiAgICAgICAgICBhKAogICAgICAgICAgICAidWwiLAogICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29pbi13cmFwIHNjcm9sbCIgfSwKICAgICAgICAgICAgZS5fbChlLm1hcmtldExpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIDEgPT0gdC5pc19kaXNwbGF5CiAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGksCiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImN1cnJlbmN5X3AiLAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGkgPT0gZS5pbmRleDIgPyAiYWN0aXZlX3AiIDogIiIsCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5xdW90YV9zaGlmdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmxlZ2FsX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5sZWdhbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5jdXJyZW5jeV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5jdXJyZW5jeV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuY2hhbmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5sZXZlcl9zaGFyZV9udW0KICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoInRvRml4ZWROIikodC5ub3dfcHJpY2UsIDQpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBncmVlbjogdC5jaGFuZ2UgPj0gMCwgcmVkOiB0LmNoYW5nZSA8IDAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoKHQuY2hhbmdlIC0gMCkudG9GaXhlZCgyKSkgKyAiJSIpXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICA6IGUuX2UoKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIDAKICAgICAgICAgICksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIGh0ID0gWwogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1fZmlsdGVyIiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YWJ0aXRsZSBmQ29sb3IxIGZ0MTQgY3VyUGVyIGZsZXgiIH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgXSwKICAgICAgZnQgPSB7CiAgICAgICAgbmFtZTogIm1hcmtldCIsCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaWRzOiAwLAogICAgICAgICAgICBpc1Nob3c6IDAsCiAgICAgICAgICAgIHRhYkxpc3Q6IFtdLAogICAgICAgICAgICBtYXJrZXRMaXN0OiBbXSwKICAgICAgICAgICAgbmV3RGF0YTogWyJNVFMiLCAiJDAuMDc2MTI4IiwgIi0xLjExJSJdLAogICAgICAgICAgICBsZWdhbF9pbmRleDogdGhpcy4kcm91dGUucGFyYW1zLmxlZ2FsX2luZGV4LAogICAgICAgICAgICBjdXJyZW5jeV9pbmRleDogdGhpcy4kcm91dGUucGFyYW1zLmN1cnJlbmN5X2luZGV4LAogICAgICAgICAgICB0cmFkZURhdGFzOiAiIiwKICAgICAgICAgICAgaW5kZXgyOiAwLAogICAgICAgICAgICBpbmRleDE6IDAsCiAgICAgICAgICAgIGRhdGFMaXN0OiBbXSwKICAgICAgICAgICAgc2VsZWN0ZWRJZDogIiIsCiAgICAgICAgICAgIHNoYXJlTnVtOiAiIiwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICB0b0ZpeGVkTjogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgcmV0dXJuIChlIC0gMCkudG9GaXhlZCh0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLnNvY2tldChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSk7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgdXJsOiAiL2FwaS9jdXJyZW5jeS9xdW90YXRpb25fbmV3IiwKICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgZGF0YToge30sCiAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgIH0pCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgIGUudGFiTGlzdCA9IHQuZGF0YS5tZXNzYWdlOwogICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgICAgICAgIG4gPSAwOwogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImluZGV4MSIpCiAgICAgICAgICAgICAgICAgID8gKChpID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImluZGV4MSIpKSwKICAgICAgICAgICAgICAgICAgICAoZS5pbmRleDEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgxIikpKQogICAgICAgICAgICAgICAgICA6IChpID0gZS5pbmRleDEpLAogICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgyIikKICAgICAgICAgICAgICAgICAgICA/ICgobiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJpbmRleDIiKSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5pbmRleDIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgyIikpKQogICAgICAgICAgICAgICAgICAgIDogKG4gPSBlLmluZGV4MiksCiAgICAgICAgICAgICAgICAgIChlLm1hcmtldExpc3QgPSB0LmRhdGEubWVzc2FnZVtpXS5xdW90YXRpb24pLAogICAgICAgICAgICAgICAgICAoZS5zZWxlY3RlZElkID0KICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZVtpXS5xdW90YXRpb25bZS5pbmRleDJdLmxlZ2FsX2lkKSwKICAgICAgICAgICAgICAgICAgKGUuZGF0YUxpc3QgPSB0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgIChlLnNoYXJlTnVtID0KICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZVtpXS5xdW90YXRpb25bZS5pbmRleDJdLmxldmVyX3NoYXJlX251bSksCiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic2hhcmVOdW0iLCBlLnNoYXJlTnVtKSwKICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIikgfHwKICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImN1cnJlbmN5X2lkIikgfHwKICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX25hbWUiKSB8fAogICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfbmFtZSIpCiAgICAgICAgICAgICAgICAgICAgPyAoKGUuY3VycmVuY3lfbmFtZSA9CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfbmFtZSIpKSwKICAgICAgICAgICAgICAgICAgICAgIChlLmN1cnJlbmN5X2lkID0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpKSkKICAgICAgICAgICAgICAgICAgICA6ICgoZS5jdXJyZW5jeV9uYW1lID0gYVtpXS5xdW90YXRpb25bbl0uY3VycmVuY3lfbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5jdXJyZW5jeV9pZCA9IGFbaV0ucXVvdGF0aW9uW25dLmN1cnJlbmN5X2lkKSwKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbmN5X25hbWUiLAogICAgICAgICAgICAgICAgICAgICAgICBhW2ldLnF1b3RhdGlvbltuXS5jdXJyZW5jeV9uYW1lCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKAogICAgICAgICAgICAgICAgICAgICAgICAibGVnYWxfaWQiLAogICAgICAgICAgICAgICAgICAgICAgICBhW2ldLnF1b3RhdGlvbltuXS5sZWdhbF9pZAogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbmN5X2lkIiwKICAgICAgICAgICAgICAgICAgICAgICAgYVtpXS5xdW90YXRpb25bbl0uY3VycmVuY3lfaWQKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oCiAgICAgICAgICAgICAgICAgICAgICAgICJsZXZlcl9jdXJyZW5jeV9uYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgYVtpXS5xdW90YXRpb25bbl0uY3VycmVuY3lfbmFtZQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICAgImxldmVyX2xlZ2FsX2lkIiwKICAgICAgICAgICAgICAgICAgICAgICAgYVtpXS5xdW90YXRpb25bbl0ubGVnYWxfaWQKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oCiAgICAgICAgICAgICAgICAgICAgICAgICJsZXZlcl9jdXJyZW5jeV9pZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGFbaV0ucXVvdGF0aW9uW25dLmN1cnJlbmN5X2lkCiAgICAgICAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJpbmRleDIiKSAmJgogICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgxIikgJiYKICAgICAgICAgICAgICAoKHRoaXMuaW5kZXgyID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJpbmRleDIiKSksCiAgICAgICAgICAgICAgKHRoaXMuaW5kZXgxID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJpbmRleDEiKSkpOwogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgZXZlbnRCdXMuJG9uKCJ0b05ldyIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSBlLm5ld3ByaWNlLAogICAgICAgICAgICAgICAgYSA9IGUuaXN0b2tlbiwKICAgICAgICAgICAgICAgIGkgPSBOdW1iZXIoZS5uZXd1cCkudG9GaXhlZCgyKTsKICAgICAgICAgICAgICBpID49IDAKICAgICAgICAgICAgICAgID8gKChpID0gIisiICsgTnVtYmVyKGkpLnRvRml4ZWQoMikgKyAiJSIpLAogICAgICAgICAgICAgICAgICAkKCJzcGFuW2RhdGEtbmFtZT0nIiArIGEgKyAiJ10iKQogICAgICAgICAgICAgICAgICAgIC5uZXh0KCkKICAgICAgICAgICAgICAgICAgICAuY3NzKCJjb2xvciIsICIjNTVhMDY3IikpCiAgICAgICAgICAgICAgICA6ICgoaSArPSAiJSIpLAogICAgICAgICAgICAgICAgICAkKCJzcGFuW2RhdGEtbmFtZT0nIiArIGEgKyAiJ10iKQogICAgICAgICAgICAgICAgICAgIC5uZXh0KCkKICAgICAgICAgICAgICAgICAgICAuY3NzKCJjb2xvciIsICIjY2M0OTUxIikpLAogICAgICAgICAgICAgICAgJCgic3BhbltkYXRhLW5hbWU9JyIgKyBhICsgIiddIikKICAgICAgICAgICAgICAgICAgLmh0bWwoIiQiICsgdCkKICAgICAgICAgICAgICAgICAgLm5leHQoKQogICAgICAgICAgICAgICAgICAuaHRtbChpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidXBkYXRlRGF5bWFya2V5IiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSB0ICYmIHZvaWQgMCAhPT0gdC5jdXJyZW5jeV9pZCkKICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgZS5tYXJrZXRMaXN0Lmxlbmd0aDsgYSsrKQogICAgICAgICAgICAgICAgICB2b2lkIDAgPT0gZS5tYXJrZXRMaXN0W2FdCiAgICAgICAgICAgICAgICAgICAgPyBjb25zb2xlLmxvZyhhKQogICAgICAgICAgICAgICAgICAgIDogZS5tYXJrZXRMaXN0W2FdLmN1cnJlbmN5X2lkID09IHQuY3VycmVuY3lfaWQgJiYKICAgICAgICAgICAgICAgICAgICAgIDMgPT0gdC5sZWdhbF9pZCAmJgogICAgICAgICAgICAgICAgICAgICAgKChlLm1hcmtldExpc3RbYV0ubm93X3ByaWNlID0gdC5jbG9zZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5tYXJrZXRMaXN0W2FdLmNoYW5nZSA9IHQuY2hhbmdlKSk7CiAgICAgICAgICAgICAgZWxzZSBjb25zb2xlLmxvZygi5rKh5pyJ55qEIiwgdCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY2hhbmdlVHlwZTogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgKHRoaXMuaW5kZXgxID0gZSksCiAgICAgICAgICAgICAgKHRoaXMuaW5kZXgyID0gbnVsbCksCiAgICAgICAgICAgICAgJCgiLmN1cnJlbmN5X3AgcCIpLnJlbW92ZUNsYXNzKCJhY3RpdmVfcCIpLAogICAgICAgICAgICAgICh0aGlzLmlzU2hvdyA9IGUpLAogICAgICAgICAgICAgICh0aGlzLmlkcyA9ICJhIiksCiAgICAgICAgICAgICAgKHRoaXMubWFya2V0TGlzdCA9IHRoaXMuZGF0YUxpc3RbZV0ucXVvdGF0aW9uKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRTeW1ib2xzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3MubGVuZ3RoIDw9IDApIHJldHVybiAhMTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGlzdD91c2VyX2lkPSIgKyB0aGlzLmFkZHJlc3MgfHwgITEsCiAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICJvayIgPT0gYS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgKCh0LmFjY291bnRJbmZvID0gYS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAodC5kYXRhTGlzdCA9IGEuZGF0YS5tZXNzYWdlLmxpc3QpLAogICAgICAgICAgICAgICAgICBlICYmIGUoKSk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIG1hcmtldFNvY2tldDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIGUuJHNvY2tldC5lbWl0KCJsb2dpbiIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c2VyX2lkIikpLAogICAgICAgICAgICAgIGUuc29ja2V0cy5zdWJzY3JpYmUoImRheW1hcmtldCIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBpZiAoImRheW1hcmtldCIgPT0gdC50eXBlKQogICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGUucXVvdGF0aW9uTGlzdC5sZW5ndGg7IGErKykKICAgICAgICAgICAgICAgICAgICBlLnF1b3RhdGlvbkxpc3RbYV0ubGVnYWxfaWQgPT0gdC5sZWdhbF9pZCAmJgogICAgICAgICAgICAgICAgICAgICAgZS5xdW90YXRpb25MaXN0W2FdLmN1cnJlbmN5X2lkID09IHQuY3VycmVuY3lfaWQgJiYKICAgICAgICAgICAgICAgICAgICAgICgoZS5xdW90YXRpb25MaXN0W2FdLm5vd19wcmljZSA9IHQubm93X3ByaWNlKSwKICAgICAgICAgICAgICAgICAgICAgIChlLnF1b3RhdGlvbkxpc3RbYV0uY2hhbmdlID0gdC5jaGFuZ2UpLAogICAgICAgICAgICAgICAgICAgICAgKGUucXVvdGF0aW9uTGlzdFthXS52b2x1bWUgPSB0LnZvbHVtZSkpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHF1b3RhX3NoaWZ0OiBmdW5jdGlvbiAoZSwgdCwgYSwgaSwgbiwgcywgbykgewogICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oImRvd25VcCIsIHMpLAogICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGVnYWxfaWRfY3VyIiwgbiksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJpbmRleDEiLCB0aGlzLmluZGV4MSksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJpbmRleDIiLCBlKSwKICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oInNoYXJlTnVtIiwgbyksCiAgICAgICAgICAgICAgKHRoaXMuaWRzID0gZSk7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGVnYWxfaWQiLCB0KSwKICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oImN1cnJlbmN5X2lkIiwgbiksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsZWdhbF9uYW1lIiwgYSksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJjdXJyZW5jeV9uYW1lIiwgaSk7CiAgICAgICAgICAgIHZhciByID0gaSArICIvIiArIGE7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgic3ltYm9sIiwgciksIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgfSwKICAgICAgICAgIHNvY2tldDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICB0LiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICB0LiRzb2NrZXQub24oImRheW1hcmtldCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICJkYXltYXJrZXQiID09IGUudHlwZSAmJgogICAgICAgICAgICAgICAgICB0LnNlbGVjdGVkSWQgJiYKICAgICAgICAgICAgICAgICAgdC5zZWxlY3RlZElkID09IGUubGVnYWxfaWQKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IHQubWFya2V0TGlzdDsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhKQogICAgICAgICAgICAgICAgICAgIGFbaV0uY3VycmVuY3lfaWQgPT0gZS5jdXJyZW5jeV9pZCAmJgogICAgICAgICAgICAgICAgICAgICAgKCh0Lm1hcmtldExpc3RbaV0udm9sdW1lID0gZS52b2x1bWUpLAogICAgICAgICAgICAgICAgICAgICAgKHQubWFya2V0TGlzdFtpXS5ub3dfcHJpY2UgPSBlLm5vd19wcmljZSksCiAgICAgICAgICAgICAgICAgICAgICAodC5tYXJrZXRMaXN0W2ldLmNoYW5nZSA9IGUuY2hhbmdlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGd0ID0gZnQsCiAgICAgIHZ0ID0gKGEoIjY5ZDUiKSwgT2JqZWN0KGhbImEiXSkoZ3QsIHB0LCBodCwgITEsIG51bGwsICI0YjJmYWJjZiIsIG51bGwpKSwKICAgICAgX3QgPSB2dC5leHBvcnRzLAogICAgICB5dCA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IG1hcmtldDogX3QgfSwKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICB0b0ZpeGVkTjogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgcmV0dXJuIChlIC0gMCkudG9GaXhlZCh0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBsZWZ0TmFtZTogIiIsCiAgICAgICAgICAgIHJpZ2h0TmFtZTogIiIsCiAgICAgICAgICAgIGxlZ2FsSWQ6ICIiLAogICAgICAgICAgICBjdXJlbmN5SWQ6ICIiLAogICAgICAgICAgICBjb2luOiB7fSwKICAgICAgICAgICAgbGFzdFByaWNlOiAiMC4wMDAwIiwKICAgICAgICAgICAgZG93blVwOiAiIiwKICAgICAgICAgICAgc2hvd01hcmtldDogITAsCiAgICAgICAgICAgIHVzcHJpY2U6ICIwLjAwIiwKICAgICAgICAgICAgY2hhbmdlOiAiMC4wMCIsCiAgICAgICAgICAgIGhpZ2hQcmljZTogIjAuMDAwMCIsCiAgICAgICAgICAgIGxvd1ByaWNlOiAiMC4wMDAwIiwKICAgICAgICAgICAgdm9sdW1uOiAiMC4wMCIsCiAgICAgICAgICAgIHJhdGVOdW06IDEsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgKHRoaXMubGVmdE5hbWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX25hbWUiKSB8fCAiIiksCiAgICAgICAgICAgICh0aGlzLnJpZ2h0TmFtZSA9CiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9uYW1lIikgfHwgIiIpLAogICAgICAgICAgICAodGhpcy5jdXJyZW5jeUlkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9pZCIpKSwKICAgICAgICAgICAgKHRoaXMubGVnYWxJZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfaWQiKSksCiAgICAgICAgICAgICh0aGlzLmRvd25VcCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZG93blVwIikpOwogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgZXZlbnRCdXMuJG9uKCJ0b05ldyIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgIHZhciBhID0gZS5yaWdodE5hbWUgKyAiLyIgKyBlLmxlZnROYW1lOwogICAgICAgICAgICB0LmlzdG9rZW4gPT0gYSAmJgogICAgICAgICAgICAgICgoZS5sYXN0UHJpY2UgPSAodC5uZXdwcmljZSAtIDApLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgIChlLmRvd25VcCA9ICh0Lm5ld3VwIC0gMCkudG9GaXhlZCgyKSkpOwogICAgICAgICAgfSksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigicmVjZWl2ZVJhdGUiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGUucmF0ZU51bSA9IHQ7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIHQgPSBbCiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIiksCiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImN1cnJlbmN5X2lkIiksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGEgPSB0WzBdLAogICAgICAgICAgICBpID0gdFsxXTsKICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICB1cmw6ICIvYXBpL2xldmVyL2RlYWwiLAogICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgZGF0YTogeyBsZWdhbF9pZDogYSwgY3VycmVuY3lfaWQ6IGkgfSwKICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgKChlLnJhdGVOdW0gPSB0LmRhdGEubWVzc2FnZS5FeFJBdGUpLAogICAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidXBkYXRlS0xpbmUiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgIjFkYXkiID09PSB0LnBlcmlvZCAmJgogICAgICAgICAgICAgICAgICAoKGUubGFzdFByaWNlID0gKHQuY2xvc2UgLSAwKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKGUuaGlnaFByaWNlID0gKHQuaGlnaCAtIDApLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAoZS5sb3dQcmljZSA9ICh0LmxvdyAtIDApLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAoZS52b2x1bW4gPSAodC52b2x1bWUgLSAwKS50b0ZpeGVkKDQpKSksCiAgICAgICAgICAgICAgICAgIHQuY2hhbmdlICYmIChlLmNoYW5nZSA9IHQuY2hhbmdlKTsKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICB9KSwKICAgICAgICAgICAgZS5zb2NrZXRzLnN1YnNjcmliZSgidHJhbnNhY3Rpb24iLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICJ0cmFuc2FjdGlvbiIgPT0gdC50eXBlICYmCiAgICAgICAgICAgICAgICBlLnJpZ2h0TmFtZSArICIvIiArIGUubGVmdE5hbWUgPT0gdC50b2tlbiAmJgogICAgICAgICAgICAgICAgdFsiMjRoIl0gJiYKICAgICAgICAgICAgICAgIChlLmNvaW4gPSBKU09OLnBhcnNlKHRbIjI0aCJdKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3RyYW5zYWN0aW9uL2RlYWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgbGVnYWxfaWQ6IGUsIGN1cnJlbmN5X2lkOiB0IH0sCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJiAoYS5sYXN0UHJpY2UgPSBlLmRhdGEubWVzc2FnZS5sYXN0X3ByaWNlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGJ0ID0geXQsCiAgICAgIEN0ID0gKGEoImFmZDYiKSwgT2JqZWN0KGhbImEiXSkoYnQsIHV0LCBtdCwgITEsIG51bGwsIG51bGwsIG51bGwpKSwKICAgICAgd3QgPSBDdC5leHBvcnRzLAogICAgICBrdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJleGNoYW5nZSIgfSwgWwogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibmV3X3ByaWNlIiB9LCBbCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmdDE0IiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiaGFuZGljYXAiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImV4Y2hhbmdlX3RpdGxlIGZ0MTIgY2xlYXIgdGMiIH0sIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJjZW50ZXIuZGlyZWN0aW9uIikpKV0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoInByaWNlIikpKV0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoIm51bWJlciIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZ0MTIgdGMiIH0sCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgZS5fbChlLm91dGxpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAga2V5OiB0LmlkLAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucHJpY2UodC5wcmljZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJyZWQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci5zZWxsb3V0IikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUub3V0bGlzdC5sZW5ndGggLSBpKQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHRbMF0pKSldKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuX2YoInRvZml4ZWRGb3VyIikodFsxXSkpKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpbmZvLXNoYWRvdyBzZWxsaSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCAqICh0WzFdIC8gZS5zZWxsTWF4VmFsdWUgLSAwKSArICIlIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImxpbmUgZ3JlZW4iIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuX2YoInRvZml4ZWROIikoZS5uZXdEYXRhLCA2KSkgKyAiICIpLAogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY1N0eWxlOiB7ICJmb250LXNpemUiOiAiMTJweCIsIGNvbG9yOiAiI2E3YTdhNyIgfSB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KCIgVVNEVCIpXQogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBlLl9sKGUuaW5saXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGtleTogaSwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnByaWNlKHQucHJpY2UpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZ3JlZW4iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5idXlpbiIpKSArICIgIiArIGUuX3MoaSArIDEpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5fZigidG9maXhlZEZvdXIiKSh0WzBdKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHRbMV0pKSldKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5mby1zaGFkb3ciLAogICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogMTAwICogKHRbMV0gLyBlLmluTWF4VmFsdWUgLSAwKSArICIlIiB9LAogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAyCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgeHQgPSBbXSwKICAgICAgU3QgPSB7CiAgICAgICAgbmFtZTogImV4Y2hhbmdlIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBvdXRsaXN0OiBbXSwKICAgICAgICAgICAgaW5saXN0OiBbXSwKICAgICAgICAgICAgbG9hZDogMSwKICAgICAgICAgICAgbmV3RGF0YTogMCwKICAgICAgICAgICAgcm1iUmF0ZTogIjYiLAogICAgICAgICAgICBjdXJyZW5jeV9uYW1lOiAiIiwKICAgICAgICAgICAgbGVnYWxfbmFtZTogIiIsCiAgICAgICAgICAgIGN1cnJlbmN5X2lkOiAiIiwKICAgICAgICAgICAgbGVnYWxfaWQ6ICIiLAogICAgICAgICAgICBzZWxsTWF4VmFsdWU6IDAsCiAgICAgICAgICAgIGluTWF4VmFsdWU6IDAsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgd2F0Y2g6IHsKICAgICAgICAgIHJtYlJhdGU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJkc2EiKSwgZXZlbnRCdXMuJGVtaXQoInJlY2VpdmVSYXRlIiwgZSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9maXhlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICAgIHRvZml4ZWRGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgICAgdG9maXhlZE46IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCh0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxldmVyX2xfaWQiKSwKICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZXZlcl9jX2lkIik7CiAgICAgICAgICAoZS5sZWdhbF9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9pZCIpKSwKICAgICAgICAgICAgKGUuY3VycmVuY3lfaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfaWQiKSksCiAgICAgICAgICAgIChlLmxlZ2FsX25hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGVnYWxfbmFtZSIpKSwKICAgICAgICAgICAgKGUuY3VycmVuY3lfbmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9uYW1lIikpLAogICAgICAgICAgICBlLmJ1eV9zZWxsKGUubGVnYWxfaWQsIGUuY3VycmVuY3lfaWQpLAogICAgICAgICAgICBlLmNvbm5lY3QoZS5sZWdhbF9pZCwgZS5jdXJyZW5jeV9pZCksCiAgICAgICAgICAgIGUudXBQcmljZShlLmxlZ2FsX2lkLCBlLmN1cnJlbmN5X2lkKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIHByaWNlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBldmVudEJ1cy4kZW1pdCgidG9QcmljZSIsIGUpOwogICAgICAgICAgfSwKICAgICAgICAgIGJ1eV9zZWxsOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICB2YXIgYSA9IHRoaXMsCiAgICAgICAgICAgICAgaSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvbGV2ZXIvZGVhbCIsCiAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YTogeyBsZWdhbF9pZDogZSwgY3VycmVuY3lfaWQ6IHQgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG4pIHsKICAgICAgICAgICAgICAgICJvayIgPT0gbi5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgPyAoKGkuaW5saXN0ID0gbi5kYXRhLm1lc3NhZ2UubGV2ZXJfdHJhbnNhY3Rpb24uaW4pLAogICAgICAgICAgICAgICAgICAgIChpLm91dGxpc3QgPSBuLmRhdGEubWVzc2FnZS5sZXZlcl90cmFuc2FjdGlvbi5vdXQpLAogICAgICAgICAgICAgICAgICAgIChpLm5ld0RhdGEgPSBuLmRhdGEubWVzc2FnZS5sYXN0X3ByaWNlKSwKICAgICAgICAgICAgICAgICAgICAoaS5ybWJSYXRlID0gbi5kYXRhLm1lc3NhZ2UuRXhSQXRlKSwKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oImxhc3RQcmljZSIsIGkubmV3RGF0YSksCiAgICAgICAgICAgICAgICAgICAgKGkuYnV5SW5mby5idXlQcmljZSA9IDApLAogICAgICAgICAgICAgICAgICAgIChpLmJ1eUluZm8uYnV5TnVtID0gMCksCiAgICAgICAgICAgICAgICAgICAgaS5jb25uZWN0KGUsIHQpKQogICAgICAgICAgICAgICAgICA6ICI5OTkiID09IG4uZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgID8gYS4kcm91dGVyLnB1c2goIi9jb21wb25lbnRzL2xvZ2luIikKICAgICAgICAgICAgICAgICAgOiBsYXllci5tc2cobi5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICB9LAogICAgICAgICAgY29ubmVjdDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICBhLiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICBhLnNvY2tldHMuc3Vic2NyaWJlKCJtYXJrZXRfZGVwdGgiLCBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgaWYgKCJtYXJrZXRfZGVwdGgiID09IGkudHlwZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiaW5mbyIubXNnKTsKICAgICAgICAgICAgICAgICAgaS5sYXN0X3ByaWNlLCBpLnByb3BvcnRpb24sIGkudG9rZW4sIGkueWVzdGVyZGF5LCBpLnRvZGF5OwogICAgICAgICAgICAgICAgICB2YXIgbiA9IGkuYmlkcywKICAgICAgICAgICAgICAgICAgICBzID0gaS5hc2tzLnJldmVyc2UoKTsKICAgICAgICAgICAgICAgICAgaWYgKGkuY3VycmVuY3lfaWQgPT0gdCAmJiBpLmxlZ2FsX2lkID09IGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IG4sCiAgICAgICAgICAgICAgICAgICAgICByID0gcywKICAgICAgICAgICAgICAgICAgICAgIGwgPSAwLAogICAgICAgICAgICAgICAgICAgICAgYyA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZCBpbiBuKQogICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYS5pbk1heFZhbHVlLCBuW2RdLCAi5Y+Y5pu0IiksCiAgICAgICAgICAgICAgICAgICAgICAgIChvW2RdLnByaWNlID0gb1tkXVswXSksCiAgICAgICAgICAgICAgICAgICAgICAgIChvW2RdLm51bWJlciA9IG9bZF1bMV0pLAogICAgICAgICAgICAgICAgICAgICAgICAobCA9IG9bZF0ubnVtYmVyID4gbCA/IG9bZF0ubnVtYmVyIDogbCk7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdSBpbiAoKGEuaW5NYXhWYWx1ZSA9IGwpLCAoYS5pbmxpc3QgPSBvKSwgcikpCiAgICAgICAgICAgICAgICAgICAgICAoclt1XS5wcmljZSA9IHJbdV1bMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAoclt1XS5udW1iZXIgPSByW3VdWzFdKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGMgPSByW3VdLm51bWJlciA+IGMgPyByW3VdLm51bWJlciA6IGwpLAogICAgICAgICAgICAgICAgICAgICAgICAoYS5zZWxsTWF4VmFsdWUgPSByW3VdLm51bWJlcik7CiAgICAgICAgICAgICAgICAgICAgKGEuc2VsbE1heFZhbHVlID0gYyksIChhLm91dGxpc3QgPSByKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIGEuc29ja2V0cy5zdWJzY3JpYmUoImtsaW5lIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICJrbGluZSIgPT0gZS50eXBlICYmCiAgICAgICAgICAgICAgICAgIGUuc3ltYm9sID09IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJzeW1ib2wiKSAmJgogICAgICAgICAgICAgICAgICAoYS5uZXdEYXRhID0gZS5jbG9zZSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgYS5zb2NrZXRzLnN1YnNjcmliZSgibWFya2V0X2RlcHRoIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGUuc3ltYm9sLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic3ltYm9sIik7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgdXBQcmljZTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICBhLiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICBhLiRzb2NrZXQub24oImtsaW5lIiwgZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICJrbGluZSIgPT0gaS50eXBlICYmCiAgICAgICAgICAgICAgICAgICIxbWluc8OfIiA9PSBpLnBlcmlvZCAmJgogICAgICAgICAgICAgICAgICBpLmN1cnJlbmN5X2lkID09IHQgJiYKICAgICAgICAgICAgICAgICAgaS5sZWdhbF9pZCA9PSBlICYmCiAgICAgICAgICAgICAgICAgICgoYS5uZXdEYXRhID0gaS5jbG9zZSksCiAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGFzdFByaWNlIiwgYS5uZXdEYXRhKSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIEF0ID0gU3QsCiAgICAgIHp0ID0gKGEoIjI1MTIiKSwgT2JqZWN0KGhbImEiXSkoQXQsIGt0LCB4dCwgITEsIG51bGwsICI0NzY5NmM1MCIsIG51bGwpKSwKICAgICAgUHQgPSB6dC5leHBvcnRzLAogICAgICBUdCA9IHsKICAgICAgICBuYW1lOiAidHYiLAogICAgICAgIGNvbXBvbmVudHM6IHsgVHZUb3A6IHd0LCBleGNoYW5nZTogUHQsIHRyYWRlOiBsdCB9LAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIHRvRml4ZWROOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICByZXR1cm4gKGUgLSAwKS50b0ZpeGVkKHQpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHdpZGdldDogbnVsbCwKICAgICAgICAgICAgc3ltYm9sSW5mbzogbnVsbCwKICAgICAgICAgICAgZmVlZDogbnVsbCwKICAgICAgICAgICAgd3NFeDogbnVsbCwKICAgICAgICAgICAgd3M6IG51bGwsCiAgICAgICAgICAgIGxpc3RzOiBbXSwKICAgICAgICAgICAgbmV3RGF0YTogIiIsCiAgICAgICAgICAgIHN5bWJvbDogIiIsCiAgICAgICAgICAgIHByaWNlU2NhbGU6IDFlNCwKICAgICAgICAgICAgaGlzdGltZTogIiIsCiAgICAgICAgICAgIGxlZnROYW1lOiAiIiwKICAgICAgICAgICAgcmlnaHROYW1lOiAiIiwKICAgICAgICAgICAgbGFzdFByaWNlOiAiMC4wMDAwIiwKICAgICAgICAgICAgY2hhbmdlOiAiMC4wMCIsCiAgICAgICAgICAgIGhpZ2hQcmljZTogIjAuMDAwMCIsCiAgICAgICAgICAgIGxvd1ByaWNlOiAiMC4wMDAwIiwKICAgICAgICAgICAgdm9sdW1uOiAiMC4wMCIsCiAgICAgICAgICAgIHJhdGVOdW06IDEsCiAgICAgICAgICAgIGxvYWRpbmdLOiAhMSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy5zeW1ib2wgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInN5bWJvbCIpKSwKICAgICAgICAgICAgKHRoaXMubGVmdE5hbWUgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX25hbWUiKSB8fCAiIiksCiAgICAgICAgICAgICh0aGlzLnJpZ2h0TmFtZSA9CiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9uYW1lIikgfHwgIiIpLAogICAgICAgICAgICAodGhpcy5jdXJyZW5jeUlkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9pZCIpKSwKICAgICAgICAgICAgKHRoaXMubGVnYWxJZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3VycmVuY3lfaWQiKSksCiAgICAgICAgICAgICh0aGlzLmRvd25VcCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZG93blVwIikpOwogICAgICAgIH0sCiAgICAgICAgc29ja2V0czoge30sCiAgICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICAgIGxpc3RlblN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnN5bWJvbDsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB3YXRjaDogewogICAgICAgICAgbGlzdGVuU3RhdGU6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIGUgIT0gdCAmJgogICAgICAgICAgICAgICIiICE9IHQgJiYKICAgICAgICAgICAgICB0aGlzLndpZGdldC5zZXRTeW1ib2woCiAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRpbSIpLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgICApOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIChuID0gdGhpcyksCiAgICAgICAgICAgIHRoaXMuY3JlYXRlV2lkZ2V0KCksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidG9OZXciLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHZhciB0ID0gbi5yaWdodE5hbWUgKyAiLyIgKyBuLmxlZnROYW1lOwogICAgICAgICAgICAgIGUuaXN0b2tlbiA9PSB0ICYmCiAgICAgICAgICAgICAgICAoKG4ubGFzdFByaWNlID0gKGUubmV3cHJpY2UgLSAwKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgIChuLmRvd25VcCA9IChlLm5ld3VwIC0gMCkudG9GaXhlZCgyKSkpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgZXZlbnRCdXMuJG9uKCJyZWNlaXZlUmF0ZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgbi5yYXRlTnVtID0gZTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidXBkYXRlS0xpbmUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICIxbWluIiA9PT0gZS5wZXJpb2QKICAgICAgICAgICAgICAgID8gKG4ubGFzdFByaWNlID0gKGUuY2xvc2UgLSAwKS50b0ZpeGVkKDQpKQogICAgICAgICAgICAgICAgOiAoKG4uaGlnaFByaWNlID0gKGUuaGlnaCAtIDApLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAobi5sb3dQcmljZSA9IChlLmxvdyAtIDApLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAobi52b2x1bW4gPSAoZS52b2x1bWUgLSAwKS50b0ZpeGVkKDQpKSksCiAgICAgICAgICAgICAgICBlLmNoYW5nZSAmJiAobi5jaGFuZ2UgPSBlLmNoYW5nZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgZGVzdHJveWVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZVdpZGdldCgpOwogICAgICAgIH0sCiAgICAgICAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY29ubmVjdDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSB7CiAgICAgICAgICAgICAgICAxOiAiMW1pbiIsCiAgICAgICAgICAgICAgICA1OiAiNW1pbiIsCiAgICAgICAgICAgICAgICAxNTogIjE1bWluIiwKICAgICAgICAgICAgICAgIDMwOiAiMzBtaW4iLAogICAgICAgICAgICAgICAgNjA6ICI2MG1pbiIsCiAgICAgICAgICAgICAgICAiMUQiOiAiMWRheSIsCiAgICAgICAgICAgICAgICAiMVciOiAiMXdlZWsiLAogICAgICAgICAgICAgICAgIjFNIjogIjFtb24iLAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIHQuJHNvY2tldC5lbWl0KCJsb2dpbiIsIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ1c2VyX2lkIikpLAogICAgICAgICAgICAgIHQuc29ja2V0cy5zdWJzY3JpYmUoImtsaW5lIiwgZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgIHZhciBuID0ge307CiAgICAgICAgICAgICAgICB0LnN5bWJvbCA9PSBpLnN5bWJvbCAmJgogICAgICAgICAgICAgICAgICAoKG4ub3BlbiA9IE51bWJlcihpLm9wZW4pKSwKICAgICAgICAgICAgICAgICAgKG4ubG93ID0gTnVtYmVyKGkubG93KSksCiAgICAgICAgICAgICAgICAgIChuLmhpZ2ggPSBOdW1iZXIoaS5oaWdoKSksCiAgICAgICAgICAgICAgICAgIChuLmNsb3NlID0gTnVtYmVyKGkuY2xvc2UpKSwKICAgICAgICAgICAgICAgICAgKG4udm9sdW1lID0gTnVtYmVyKGkudm9sdW1lKSksCiAgICAgICAgICAgICAgICAgIChuLnRpbWUgPSBOdW1iZXIoaS50aW1lKSksCiAgICAgICAgICAgICAgICAgICExID09PSB0LmxvYWRpbmdLICYmCiAgICAgICAgICAgICAgICAgICAgbi5sb3cgPiAxZS02ICYmCiAgICAgICAgICAgICAgICAgICAgaS5wZXJpb2QgPT0gYVtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidGltIildICYmCiAgICAgICAgICAgICAgICAgICAgZShuKSwKICAgICAgICAgICAgICAgICAgKG4uY2hhbmdlID0gaS5jaGFuZ2UpLAogICAgICAgICAgICAgICAgICAobi5wZXJpb2QgPSBpLnBlcmlvZCksCiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGkucGVyaW9kKSwKICAgICAgICAgICAgICAgICAgKCIxbWluIiAhPSBpLnBlcmlvZCAmJiAiMWRheSIgIT0gaS5wZXJpb2QpIHx8CiAgICAgICAgICAgICAgICAgICAgKGNvbnNvbGUubG9nKCJsYWxsYSIsIG4pLAogICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ1cGRhdGVLTGluZSIsIG4pKSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdC5zb2NrZXRzLnN1YnNjcmliZSgiZGF5bWFya2V0IiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ1cGRhdGVEYXltYXJrZXkiLCBlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBjcmVhdGVXaWRnZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSAoZS53aWRnZXQgPSBuZXcgVHJhZGluZ1ZpZXcud2lkZ2V0KHsKICAgICAgICAgICAgICAgIHN5bWJvbDogZS5zeW1ib2wsCiAgICAgICAgICAgICAgICBpbnRlcnZhbDogMSwKICAgICAgICAgICAgICAgIGRlYnVnOiAhMSwKICAgICAgICAgICAgICAgIGZ1bGxzY3JlZW46ICExLAogICAgICAgICAgICAgICAgYXV0b3NpemU6ICEwLAogICAgICAgICAgICAgICAgY29udGFpbmVyX2lkOiAidHZfY2hhcnRfY29udGFpbmVyIiwKICAgICAgICAgICAgICAgIGRhdGFmZWVkOiBlLmNyZWF0ZUZlZWQoKSwKICAgICAgICAgICAgICAgIGxpYnJhcnlfcGF0aDogIi4vc3RhdGljL3RyYWRldmlldy9jaGFydGluZ19saWJyYXJ5LyIsCiAgICAgICAgICAgICAgICBjdXN0b21fY3NzX3VybDogImJ1bmRsZXMvbmV3LmNzcyIsCiAgICAgICAgICAgICAgICBsb2NhbGU6IGxvY2FsU3RvcmFnZS5sYW5nIHx8ICJ6aCIsCiAgICAgICAgICAgICAgICB3aWR0aDogIjEwMCUiLAogICAgICAgICAgICAgICAgaGVpZ2h0OiA1MTYsCiAgICAgICAgICAgICAgICBkcmF3aW5nc19hY2Nlc3M6IHsKICAgICAgICAgICAgICAgICAgdHlwZTogImJsYWNrIiwKICAgICAgICAgICAgICAgICAgdG9vbHM6IFt7IG5hbWU6ICJSZWdyZXNzaW9uIFRyZW5kIiB9XSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkaXNhYmxlZF9mZWF0dXJlczogWwogICAgICAgICAgICAgICAgICAiaGVhZGVyX3NhdmVsb2FkIiwKICAgICAgICAgICAgICAgICAgImNvbXBhcmVfc3ltYm9sIiwKICAgICAgICAgICAgICAgICAgImhlYWRlcl9jaGFydF90eXBlIiwKICAgICAgICAgICAgICAgICAgImhlYWRlcl9jb21wYXJlIiwKICAgICAgICAgICAgICAgICAgImhlYWRlcl9pbnRlcnZhbF9kaWFsb2dfYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgImhlYWRlcl9yZXNvbHV0aW9ucyIsCiAgICAgICAgICAgICAgICAgICJoZWFkZXJfc2NyZWVuc2hvdCIsCiAgICAgICAgICAgICAgICAgICJoZWFkZXJfc3ltYm9sX3NlYXJjaCIsCiAgICAgICAgICAgICAgICAgICJoZWFkZXJfdW5kb19yZWRvIiwKICAgICAgICAgICAgICAgICAgImxlZ2VuZF9jb250ZXh0X21lbnUiLAogICAgICAgICAgICAgICAgICAic2hvd19oaWRlX2J1dHRvbl9pbl9sZWdlbmQiLAogICAgICAgICAgICAgICAgICAic2hvd19pbnRlcnZhbF9kaWFsb2dfb25fa2V5X3ByZXNzIiwKICAgICAgICAgICAgICAgICAgInNuYXBzaG90X3RyYWRpbmdfZHJhd2luZ3MiLAogICAgICAgICAgICAgICAgICAic3ltYm9sX2luZm8iLAogICAgICAgICAgICAgICAgICAidGltZWZyYW1lc190b29sYmFyIiwKICAgICAgICAgICAgICAgICAgInVzZV9sb2NhbHN0b3JhZ2VfZm9yX3NldHRpbmdzIiwKICAgICAgICAgICAgICAgICAgInZvbHVtZV9mb3JjZV9vdmVybGF5IiwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBlbmFibGVkX2ZlYXR1cmVzOiBbCiAgICAgICAgICAgICAgICAgICJkb250X3Nob3dfYm9vbGVhbl9zdHVkeV9hcmd1bWVudHMiLAogICAgICAgICAgICAgICAgICAiaGlkZV9sYXN0X25hX3N0dWR5X291dHB1dCIsCiAgICAgICAgICAgICAgICAgICJtb3ZlX2xvZ29fdG9fbWFpbl9wYW5lIiwKICAgICAgICAgICAgICAgICAgInNhbWVfZGF0YV9yZXF1ZXJ5IiwKICAgICAgICAgICAgICAgICAgInNpZGVfdG9vbGJhcl9pbl9mdWxsc2NyZWVuX21vZGUiLAogICAgICAgICAgICAgICAgICAiZGlzYWJsZV9yZXNvbHV0aW9uX3JlYnVpbGQiLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIGNoYXJ0c19zdG9yYWdlX3VybDogImh0dHA6Ly9zYXZlbG9hZC50cmFkaW5ndmlldy5jb20iLAogICAgICAgICAgICAgICAgY2hhcnRzX3N0b3JhZ2VfYXBpX3ZlcnNpb246ICIxLjEiLAogICAgICAgICAgICAgICAgdG9vbGJhcl9iZzogInRyYW5zcGFyZW50IiwKICAgICAgICAgICAgICAgIHRpbWV6b25lOiAiRXVyb3BlL0xvbmRvbiIsCiAgICAgICAgICAgICAgICBzdHVkaWVzX292ZXJyaWRlczogeyAidm9sdW1lLnByZWNpc2lvbiI6ICIxMDAwIiB9LAogICAgICAgICAgICAgICAgb3ZlcnJpZGVzOiBlLm92ZXJyaWRlcygpLAogICAgICAgICAgICAgICAgbG9hZGluZ19zY3JlZW46IHsKICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAidHJhbnNwYXJlbnQiLAogICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kQ29sb3I6ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAodC5NQVN0dWRpZXMgPSBbXSksCiAgICAgICAgICAgICAgICAodC5zZWxlY3RlZEludGVydmFsQnV0dG9uID0gbnVsbCksCiAgICAgICAgICAgICAgICB0Lm9uQ2hhcnRSZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgICAgICAuY2hhcnQoKQogICAgICAgICAgICAgICAgICAgIC5jcmVhdGVTdHVkeSgKICAgICAgICAgICAgICAgICAgICAgICJNb3ZpbmcgQXZlcmFnZSIsCiAgICAgICAgICAgICAgICAgICAgICAhMSwKICAgICAgICAgICAgICAgICAgICAgICEwLAogICAgICAgICAgICAgICAgICAgICAgWzUsICJjbG9zZSIsIDBdLAogICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgIHsgIlBsb3QuY29sb3IiOiAiI2U4NDNkYSIgfQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgdC5jaGFydCgpLmNyZWF0ZVN0dWR5KCJNQSBDcm9zcyIsICExLCAhMSwgWzEwLCAzMF0pOwogICAgICAgICAgICAgICAgICB2YXIgYSA9IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIjFtaW4iLAogICAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlLiR0KCJjZW50ZXIucmVhbHRpbWUiKSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0VHlwZTogMywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICBwZXJpb2Q6ICIxbSIsCiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiMSIgKyBlLiR0KCJtIiksCiAgICAgICAgICAgICAgICAgICAgICBjaGFydFR5cGU6IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIjUiLAogICAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiAiNW0iLAogICAgICAgICAgICAgICAgICAgICAgdGV4dDogIjUiICsgZS4kdCgibSIpLAogICAgICAgICAgICAgICAgICAgICAgY2hhcnRUeXBlOiAxLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICIxNSIsCiAgICAgICAgICAgICAgICAgICAgICBwZXJpb2Q6ICIxNW0iLAogICAgICAgICAgICAgICAgICAgICAgdGV4dDogIjE1IiArIGUuJHQoIm0iKSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0VHlwZTogMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiMzAiLAogICAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiAiMzBtIiwKICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICIzMCIgKyBlLiR0KCJtIiksCiAgICAgICAgICAgICAgICAgICAgICBjaGFydFR5cGU6IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIjYwIiwKICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZDogIjYw5YiG6ZKfIiwKICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICIxIiArIGUuJHQoImhvdXIiKSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0VHlwZTogMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiMUQiLAogICAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiAiMUQiLAogICAgICAgICAgICAgICAgICAgICAgdGV4dDogIjEiICsgZS4kdCgiZGF5IiksCiAgICAgICAgICAgICAgICAgICAgICBjaGFydFR5cGU6IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIjFXIiwKICAgICAgICAgICAgICAgICAgICAgIHBlcmlvZDogIjFXIiwKICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICIxIiArIGUuJHQoIndlZWsiKSwKICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0VHlwZTogMSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiMU0iLAogICAgICAgICAgICAgICAgICAgICAgcGVyaW9kOiAiMU0iLAogICAgICAgICAgICAgICAgICAgICAgdGV4dDogIjEiICsgZS4kdCgibW9uIiksCiAgICAgICAgICAgICAgICAgICAgICBjaGFydFR5cGU6IDEsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgYS5mb3JFYWNoKGZ1bmN0aW9uIChhLCBuKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB0LmNyZWF0ZUJ1dHRvbigpOwogICAgICAgICAgICAgICAgICAgIHMuYXR0cigidGl0bGUiLCBhLnRleHQpLmFkZENsYXNzKCJteTIiKS50ZXh0KGEudGV4dCksCiAgICAgICAgICAgICAgICAgICAgICBhLnRleHQgPT0gIjEiICsgZS4kdCgibSIpICYmCiAgICAgICAgICAgICAgICAgICAgICAgIChzLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2tncm91bmQtY29sb3IiOiAiIzAwYTRkOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICIjZmZmIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIHMuYWRkQ2xhc3MoIm15ZGF0ZSIpLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidGltIiwgIjEiKSksCiAgICAgICAgICAgICAgICAgICAgICBzLm9uKCJjbGljayIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykKICAgICAgICAgICAgICAgICAgICAgICAgICAucGFyZW50cygiLmxlZnQiKQogICAgICAgICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoIi5teTIiKQogICAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCJzdHlsZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoZSwgYS52YWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdC5jaGFydCgpLnNldENoYXJ0VHlwZShhLmNoYXJ0VHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIHZhciBpID0gZnVuY3Rpb24gKGEsIGkpIHsKICAgICAgICAgICAgICAgICAgICAoZS5zZXRTeW1ib2wgPSBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgICAgICAgZ2guY2hhcnQoKS5zZXRTeW1ib2woZSwgdCk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidGltIiwgaSksCiAgICAgICAgICAgICAgICAgICAgICB0LmNoYXJ0KCkuc2V0UmVzb2x1dGlvbihpLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG4ubG9hZGluZ0sgPSAhMTsKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgJChhLnRhcmdldCkKICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCJteWRhdGUiKQogICAgICAgICAgICAgICAgICAgICAgICAuY2xvc2VzdCgiZGl2LnNwYWNlLXNpbmdsZSIpCiAgICAgICAgICAgICAgICAgICAgICAgIC5zaWJsaW5ncygiZGl2LnNwYWNlLXNpbmdsZSIpCiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCJkaXYuYnV0dG9uIikKICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCJteWRhdGUiKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgKGUud2lkZ2V0ID0gdCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGNyZWF0ZUZlZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSB7CiAgICAgICAgICAgICAgICBEYXRhUHVsc2VVcGRhdGVyOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgICAodGhpcy5fZGF0YWZlZWQgPSBlKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5fc3Vic2NyaWJlcnMgPSB7fSksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX3JlcXVlc3RzUGVuZGluZyA9IDApOwogICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMsCiAgICAgICAgICAgICAgICAgICAgaSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICghKGEuX3JlcXVlc3RzUGVuZGluZyA+IDApKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBlIGluIGEuX3N1YnNjcmliZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBhLl9zdWJzY3JpYmVyc1tlXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB0LnJlc29sdXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gcGFyc2VJbnQobmV3IERhdGUoKS52YWx1ZU9mKCkgLyAxZTMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IG4gLSBhLnBlcmlvZExlbmd0aFNlY29uZHMoaSwgMTApOwogICAgICAgICAgICAgICAgICAgICAgICAgIGEuX3JlcXVlc3RzUGVuZGluZysrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuX2RhdGFmZWVkLmdldEJhcnMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zeW1ib2xJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhLl9yZXF1ZXN0c1BlbmRpbmctLSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5fc3Vic2NyaWJlcnMuaGFzT3duUHJvcGVydHkoZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICE9PSBpLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGlbaS5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTmFOKHQubGFzdEJhclRpbWUpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShuLnRpbWUgPCB0Lmxhc3RCYXJUaW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHQubGlzdGVuZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc05hTih0Lmxhc3RCYXJUaW1lKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLnRpbWUgPiB0Lmxhc3RCYXJUaW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5sZW5ndGggPCAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCBlbm91Z2ggYmFycyBpbiBoaXN0b3J5IGZvciBwcm9wZXIgcHVsc2UgdXBkYXRlLiBOZWVkIGF0IGxlYXN0IDIuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBpW2kubGVuZ3RoIC0gMl0sIGwgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsIDwgcy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2xdKHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lmxhc3RCYXJUaW1lID0gbi50aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobCA9IDA7IGwgPCBzLmxlbmd0aDsgKytsKSBzW2xdKG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLl9yZXF1ZXN0c1BlbmRpbmctLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICJ1bmRlZmluZWQiICE9IHR5cGVvZiB0ICYmIHQgPiAwICYmIHNldEludGVydmFsKGksIHQpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9OwogICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICh0LkRhdGFQdWxzZVVwZGF0ZXIucHJvdG90eXBlLnBlcmlvZExlbmd0aFNlY29uZHMgPSBmdW5jdGlvbiAoCiAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgdAogICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgdmFyIGEgPSAwOwogICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgKGEgPQogICAgICAgICAgICAgICAgICAgICJEIiA9PT0gZQogICAgICAgICAgICAgICAgICAgICAgPyB0CiAgICAgICAgICAgICAgICAgICAgICA6ICJNIiA9PT0gZQogICAgICAgICAgICAgICAgICAgICAgPyAzMSAqIHQKICAgICAgICAgICAgICAgICAgICAgIDogIlciID09PSBlCiAgICAgICAgICAgICAgICAgICAgICA/IDcgKiB0CiAgICAgICAgICAgICAgICAgICAgICA6ICh0ICogZSkgLyAxNDQwKSwKICAgICAgICAgICAgICAgICAgMjQgKiBhICogNjAgKiA2MAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAodC5EYXRhUHVsc2VVcGRhdGVyLnByb3RvdHlwZS5zdWJzY3JpYmVEYXRhTGlzdGVuZXIgPSBmdW5jdGlvbiAoCiAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgdCwKICAgICAgICAgICAgICAgIGEsCiAgICAgICAgICAgICAgICBpCiAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhZmVlZC5fbG9nTWVzc2FnZSgiU3Vic2NyaWJpbmcgIiArIGkpLAogICAgICAgICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmVycy5oYXNPd25Qcm9wZXJ0eShpKSB8fAogICAgICAgICAgICAgICAgICAgICh0aGlzLl9zdWJzY3JpYmVyc1tpXSA9IHsKICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbEluZm86IGUsCiAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uOiB0LAogICAgICAgICAgICAgICAgICAgICAgbGFzdEJhclRpbWU6IE5hTiwKICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyczogW10sCiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZXJzW2ldLmxpc3RlbmVycy5wdXNoKGEpOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICh0LkRhdGFQdWxzZVVwZGF0ZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlRGF0YUxpc3RlbmVyID0gZnVuY3Rpb24gKAogICAgICAgICAgICAgICAgZQogICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgdGhpcy5fZGF0YWZlZWQuX2xvZ01lc3NhZ2UoIlVuc3Vic2NyaWJpbmcgIiArIGUpLAogICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc3Vic2NyaWJlcnNbZV07CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgKHQuQ29udGFpbmVyID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICh0aGlzLl9jb25maWd1cmF0aW9uID0gewogICAgICAgICAgICAgICAgICBzdXBwb3J0c19zZWFyY2g6ICExLAogICAgICAgICAgICAgICAgICBzdXBwb3J0c19ncm91cF9yZXF1ZXN0OiAhMSwKICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkX3Jlc29sdXRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgIjEiLAogICAgICAgICAgICAgICAgICAgICIzIiwKICAgICAgICAgICAgICAgICAgICAiNSIsCiAgICAgICAgICAgICAgICAgICAgIjE1IiwKICAgICAgICAgICAgICAgICAgICAiMzAiLAogICAgICAgICAgICAgICAgICAgICI2MCIsCiAgICAgICAgICAgICAgICAgICAgIjEyMCIsCiAgICAgICAgICAgICAgICAgICAgIjI0MCIsCiAgICAgICAgICAgICAgICAgICAgIjM2MCIsCiAgICAgICAgICAgICAgICAgICAgIjcyMCIsCiAgICAgICAgICAgICAgICAgICAgIjFEIiwKICAgICAgICAgICAgICAgICAgICAiM0QiLAogICAgICAgICAgICAgICAgICAgICIxVyIsCiAgICAgICAgICAgICAgICAgICAgIjFNIiwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgc3VwcG9ydHNfbWFya3M6ICEwLAogICAgICAgICAgICAgICAgICBzdXBwb3J0c190aW1lc2NhbGVfbWFya3M6ICEwLAogICAgICAgICAgICAgICAgICBleGNoYW5nZXM6IFsiZ2giXSwKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAodGhpcy5fYmFyc1B1bHNlVXBkYXRlciA9IG5ldyB0LkRhdGFQdWxzZVVwZGF0ZXIoCiAgICAgICAgICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgICAgICAgICBlIHx8IDFlNAogICAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgICAgICAgKHRoaXMuX2VuYWJsZUxvZ2dpbmcgPSAhMCksCiAgICAgICAgICAgICAgICAgICh0aGlzLl9jYWxsYmFja3MgPSB7fSksCiAgICAgICAgICAgICAgICAgICh0aGlzLl9pbml0aWFsaXphdGlvbkZpbmlzaGVkID0gITApLAogICAgICAgICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoImluaXRpYWxpemVkIiksCiAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgiY29uZmlndXJhdGlvbl9yZWFkeSIpOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICh0LkNvbnRhaW5lci5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FsbGJhY2tzLmhhc093blByb3BlcnR5KGUpKSB7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSB0aGlzLl9jYWxsYmFja3NbZV0sIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkKICAgICAgICAgICAgICAgICAgICBhW2ldKHQpOwogICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAodC5Db250YWluZXIucHJvdG90eXBlLl9sb2dNZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbmFibGVMb2dnaW5nKSBuZXcgRGF0ZSgpOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICh0LkNvbnRhaW5lci5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzLmhhc093blByb3BlcnR5KGUpIHx8CiAgICAgICAgICAgICAgICAgICAgKHRoaXMuX2NhbGxiYWNrc1tlXSA9IFtdKSwKICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdLnB1c2godCksCiAgICAgICAgICAgICAgICAgIHRoaXMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgKHQuQ29udGFpbmVyLnByb3RvdHlwZS5vblJlYWR5ID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgPyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgIGUodC5fY29uZmlndXJhdGlvbik7CiAgICAgICAgICAgICAgICAgICAgfSwgMCkKICAgICAgICAgICAgICAgICAgOiB0aGlzLm9uKCJjb25maWd1cmF0aW9uX3JlYWR5IiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgZSh0Ll9jb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAodC5Db250YWluZXIucHJvdG90eXBlLnJlc29sdmVTeW1ib2wgPSBmdW5jdGlvbiAodCwgYSwgaSkgewogICAgICAgICAgICAgICAgdGhpcy5fbG9nTWVzc2FnZSgiR09XTk8gOjogcmVzb2x2ZSBzeW1ib2wgIiArIHQpLAogICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBhKHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGUuc3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmU6ICJBc2lhL1NoYW5naGFpIiwKICAgICAgICAgICAgICAgICAgICAgIHByaWNlc2NhbGU6IGUucHJpY2VTY2FsZSwKICAgICAgICAgICAgICAgICAgICAgIG1pbm1vdjogMSwKICAgICAgICAgICAgICAgICAgICAgIG1pbm1vdjI6IDAsCiAgICAgICAgICAgICAgICAgICAgICB0aWNrZXI6IGUuc3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICIiLAogICAgICAgICAgICAgICAgICAgICAgdHlwZTogImJpdGNvaW4iLAogICAgICAgICAgICAgICAgICAgICAgdm9sdW1lX3ByZWNpc2lvbjogOCwKICAgICAgICAgICAgICAgICAgICAgIGhhc19pbnRyYWRheTogITAsCiAgICAgICAgICAgICAgICAgICAgICBoYXNfd2Vla2x5X2FuZF9tb250aGx5OiAhMCwKICAgICAgICAgICAgICAgICAgICAgIGhhc19ub192b2x1bWU6ICExLAogICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbjogIjI0eDciLAogICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkX3Jlc29sdXRpb25zOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgIjMiLAogICAgICAgICAgICAgICAgICAgICAgICAiNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICIxNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICIzMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICI2MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICIxMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAiMjQwIiwKICAgICAgICAgICAgICAgICAgICAgICAgIjM2MCIsCiAgICAgICAgICAgICAgICAgICAgICAgICI3MjAiLAogICAgICAgICAgICAgICAgICAgICAgICAiMUQiLAogICAgICAgICAgICAgICAgICAgICAgICAiM0QiLAogICAgICAgICAgICAgICAgICAgICAgICAiMVciLAogICAgICAgICAgICAgICAgICAgICAgICAiMU0iLAogICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgKHQuQ29udGFpbmVyLnByb3RvdHlwZS5nZXRCYXJzID0gZnVuY3Rpb24gKGUsIHQsIGEsIGksIHMsIG8pIHsKICAgICAgICAgICAgICAgIChuLmxvYWRpbmdLID0gITApLAogICAgICAgICAgICAgICAgICAtMSA9PSB0LmluZGV4T2YoIkQiKSAmJgogICAgICAgICAgICAgICAgICAtMSA9PSB0LmluZGV4T2YoIlciKSAmJgogICAgICAgICAgICAgICAgICAtMSA9PSB0LmluZGV4T2YoIk0iKQogICAgICAgICAgICAgICAgICAgID8gKHQgKz0gIm1pbiIpCiAgICAgICAgICAgICAgICAgICAgOiAoLTEgPT0gdC5pbmRleE9mKCJXIikgJiYgLTEgPT0gdC5pbmRleE9mKCJNIikpIHx8ICh0ID0gdCk7CiAgICAgICAgICAgICAgICB2YXIgciA9CiAgICAgICAgICAgICAgICAgICIvYXBpL2N1cnJlbmN5L25ld190aW1lc2hhcj9mcm9tPSIgKwogICAgICAgICAgICAgICAgICBhICsKICAgICAgICAgICAgICAgICAgIiZ0bz0iICsKICAgICAgICAgICAgICAgICAgaSArCiAgICAgICAgICAgICAgICAgICImc3ltYm9sPSIgKwogICAgICAgICAgICAgICAgICBlLm5hbWUgKwogICAgICAgICAgICAgICAgICAiJnBlcmlvZD0iICsKICAgICAgICAgICAgICAgICAgdDsKICAgICAgICAgICAgICAgIG4uJGh0dHAuZ2V0KHIpLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgbi5sb2FkaW5nSyA9ICExOwogICAgICAgICAgICAgICAgICB9LCAyZTMpOwogICAgICAgICAgICAgICAgICB2YXIgdCA9IGUuZGF0YTsKICAgICAgICAgICAgICAgICAgMSA9PSB0LmNvZGUgJiYKICAgICAgICAgICAgICAgICAgICB0LmRhdGEgJiYKICAgICAgICAgICAgICAgICAgICB0LmRhdGEubGVuZ3RoID4gMCAmJgogICAgICAgICAgICAgICAgICAgICh0LmRhdGEuZm9yRWFjaChmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgICAgICAgKGUub3BlbiA9IE51bWJlcihlLm9wZW4pKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGUuY2xvc2UgPSBOdW1iZXIoZS5jbG9zZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAoZS5oaWdoID0gTnVtYmVyKGUuaGlnaCkpLAogICAgICAgICAgICAgICAgICAgICAgICAoZS5sb3cgPSBOdW1iZXIoZS5sb3cpKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBzKHQuZGF0YSwgeyBub0RhdGE6ICExIH0pLAogICAgICAgICAgICAgICAgICAgIHMoW10sIHsgbm9EYXRhOiAhMCB9KSksCiAgICAgICAgICAgICAgICAgICAgKHQuZGF0YSAmJiAtMSAhPSB0LmNvZGUpIHx8IHMoW10sIHsgbm9EYXRhOiAhMCB9KSwKICAgICAgICAgICAgICAgICAgICB0LmRhdGEgJiYgMCA9PSB0LmRhdGEubGVuZ3RoICYmIHMoW10sIHsgbm9EYXRhOiAhMCB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICh0LkNvbnRhaW5lci5wcm90b3R5cGUuc3Vic2NyaWJlQmFycyA9IGZ1bmN0aW9uICh0LCBhLCBpLCBuLCBzKSB7CiAgICAgICAgICAgICAgICBlLmNvbm5lY3QoaSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgKHQuQ29udGFpbmVyLnByb3RvdHlwZS51bnN1YnNjcmliZUJhcnMgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgdGhpcy5fYmFyc1B1bHNlVXBkYXRlci51bnN1YnNjcmliZURhdGFMaXN0ZW5lcihlKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBuZXcgdC5Db250YWluZXIoKQogICAgICAgICAgICApOwogICAgICAgICAgfSwKICAgICAgICAgIHVwZGF0ZURhdGE6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGUgJiYgdGhpcy4kZW1pdCgicmVhbC10aW1lIiwgZSk7CiAgICAgICAgICB9LAogICAgICAgICAgdXBkYXRlV2lkZ2V0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAodGhpcy5zeW1ib2xJbmZvID0gewogICAgICAgICAgICAgIG5hbWU6IGUsCiAgICAgICAgICAgICAgdGlja2VyOiBlLAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiIiwKICAgICAgICAgICAgICBzZXNzaW9uOiAiMjR4NyIsCiAgICAgICAgICAgICAgc3VwcG9ydGVkX3Jlc29sdXRpb25zOiBbCiAgICAgICAgICAgICAgICAiMSIsCiAgICAgICAgICAgICAgICAiNSIsCiAgICAgICAgICAgICAgICAiMTUiLAogICAgICAgICAgICAgICAgIjMwIiwKICAgICAgICAgICAgICAgICI2MCIsCiAgICAgICAgICAgICAgICAiMjQwIiwKICAgICAgICAgICAgICAgICIxRCIsCiAgICAgICAgICAgICAgICAiM0QiLAogICAgICAgICAgICAgICAgIjFXIiwKICAgICAgICAgICAgICAgICIxTSIsCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBoYXNfaW50cmFkYXk6ICEwLAogICAgICAgICAgICAgIGhhc19kYWlseTogITAsCiAgICAgICAgICAgICAgaGFzX3dlZWtseV9hbmRfbW9udGhseTogITAsCiAgICAgICAgICAgICAgdGltZXpvbmU6ICJVVEMiLAogICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB0aGlzLnJlbW92ZVdpZGdldCgpLAogICAgICAgICAgICAgIHRoaXMuY3JlYXRlV2lkZ2V0KCk7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlV2lkZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldCkKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgdGhpcy53aWRnZXQucmVtb3ZlKCksICh0aGlzLndpZGdldCA9IG51bGwpOwogICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgICB9LAogICAgICAgICAgb3ZlcnJpZGVzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gewogICAgICAgICAgICAgIHVwOiAiIzM1YjY1YSIsCiAgICAgICAgICAgICAgZG93bjogIiNmZjQ5NGEiLAogICAgICAgICAgICAgIGJnOiAiIzE4MWQyNSIsCiAgICAgICAgICAgICAgZ3JpZDogIiMxRTI3NDAiLAogICAgICAgICAgICAgIGNyb3NzOiAiI2M3Y2NlNiIsCiAgICAgICAgICAgICAgYm9yZGVyOiAiIzE4MWQyNSIsCiAgICAgICAgICAgICAgdGV4dDogIiNjN2NjZTYiLAogICAgICAgICAgICAgIGFyZWF0b3A6ICJyZ2JhKDEyMiwgMTUyLCAyNDcsIC4xKSIsCiAgICAgICAgICAgICAgYXJlYWRvd246ICJyZ2JhKDEyMiwgMTUyLCAyNDcsIC4wMikiLAogICAgICAgICAgICB9OwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHZvbHVtZVBhbmVTaXplOiAibWVkaXVtIiwKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMudG9wTWFyZ2luIjogIjIwIiwKICAgICAgICAgICAgICAic2NhbGVzUHJvcGVydGllcy5saW5lQ29sb3IiOiBlLnRleHQsCiAgICAgICAgICAgICAgInNjYWxlc1Byb3BlcnRpZXMudGV4dENvbG9yIjogZS50ZXh0LAogICAgICAgICAgICAgICJwYW5lUHJvcGVydGllcy5iYWNrZ3JvdW5kIjogZS5iZywKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMudmVydEdyaWRQcm9wZXJ0aWVzLmNvbG9yIjogZS5ncmlkLAogICAgICAgICAgICAgICJwYW5lUHJvcGVydGllcy5ob3J6R3JpZFByb3BlcnRpZXMuY29sb3IiOiBlLmdyaWQsCiAgICAgICAgICAgICAgInBhbmVQcm9wZXJ0aWVzLmNyb3NzSGFpclByb3BlcnRpZXMuY29sb3IiOiBlLmNyb3NzLAogICAgICAgICAgICAgICJwYW5lUHJvcGVydGllcy5sZWdlbmRQcm9wZXJ0aWVzLnNob3dMZWdlbmQiOiAhMCwKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMubGVnZW5kUHJvcGVydGllcy5zaG93U3R1ZHlBcmd1bWVudHMiOiAhMCwKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMubGVnZW5kUHJvcGVydGllcy5zaG93U3R1ZHlUaXRsZXMiOiAhMCwKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMubGVnZW5kUHJvcGVydGllcy5zaG93U3R1ZHlWYWx1ZXMiOiAhMCwKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMubGVnZW5kUHJvcGVydGllcy5zaG93U2VyaWVzVGl0bGUiOiAhMCwKICAgICAgICAgICAgICAicGFuZVByb3BlcnRpZXMubGVnZW5kUHJvcGVydGllcy5zaG93U2VyaWVzT0hMQyI6ICEwLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5jYW5kbGVTdHlsZS51cENvbG9yIjogZS51cCwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuY2FuZGxlU3R5bGUuZG93bkNvbG9yIjogZS5kb3duLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5jYW5kbGVTdHlsZS5kcmF3V2ljayI6ICEwLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5jYW5kbGVTdHlsZS5kcmF3Qm9yZGVyIjogITAsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmNhbmRsZVN0eWxlLmJvcmRlckNvbG9yIjogZS5ib3JkZXIsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmNhbmRsZVN0eWxlLmJvcmRlclVwQ29sb3IiOiBlLnVwLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5jYW5kbGVTdHlsZS5ib3JkZXJEb3duQ29sb3IiOiBlLmRvd24sCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmNhbmRsZVN0eWxlLndpY2tVcENvbG9yIjogZS51cCwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuY2FuZGxlU3R5bGUud2lja0Rvd25Db2xvciI6IGUuZG93biwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuY2FuZGxlU3R5bGUuYmFyQ29sb3JzT25QcmV2Q2xvc2UiOiAhMSwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuaG9sbG93Q2FuZGxlU3R5bGUudXBDb2xvciI6IGUudXAsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmhvbGxvd0NhbmRsZVN0eWxlLmRvd25Db2xvciI6IGUuZG93biwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuaG9sbG93Q2FuZGxlU3R5bGUuZHJhd1dpY2siOiAhMCwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuaG9sbG93Q2FuZGxlU3R5bGUuZHJhd0JvcmRlciI6ICEwLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5ob2xsb3dDYW5kbGVTdHlsZS5ib3JkZXJDb2xvciI6IGUuYm9yZGVyLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5ob2xsb3dDYW5kbGVTdHlsZS5ib3JkZXJVcENvbG9yIjogZS51cCwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMuaG9sbG93Q2FuZGxlU3R5bGUuYm9yZGVyRG93bkNvbG9yIjogZS5kb3duLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5ob2xsb3dDYW5kbGVTdHlsZS53aWNrQ29sb3IiOiBlLmxpbmUsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmhhU3R5bGUudXBDb2xvciI6IGUudXAsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmhhU3R5bGUuZG93bkNvbG9yIjogZS5kb3duLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5oYVN0eWxlLmRyYXdXaWNrIjogITAsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmhhU3R5bGUuZHJhd0JvcmRlciI6ICEwLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5oYVN0eWxlLmJvcmRlckNvbG9yIjogZS5ib3JkZXIsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmhhU3R5bGUuYm9yZGVyVXBDb2xvciI6IGUudXAsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmhhU3R5bGUuYm9yZGVyRG93bkNvbG9yIjogZS5kb3duLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5oYVN0eWxlLndpY2tDb2xvciI6IGUuYm9yZGVyLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5oYVN0eWxlLmJhckNvbG9yc09uUHJldkNsb3NlIjogITEsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmJhclN0eWxlLnVwQ29sb3IiOiBlLnVwLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5iYXJTdHlsZS5kb3duQ29sb3IiOiBlLmRvd24sCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmJhclN0eWxlLmJhckNvbG9yc09uUHJldkNsb3NlIjogITEsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmJhclN0eWxlLmRvbnREcmF3T3BlbiI6ICExLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5saW5lU3R5bGUuY29sb3IiOiBlLmJvcmRlciwKICAgICAgICAgICAgICAibWFpblNlcmllc1Byb3BlcnRpZXMubGluZVN0eWxlLmxpbmV3aWR0aCI6IDEsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmxpbmVTdHlsZS5wcmljZVNvdXJjZSI6ICJjbG9zZSIsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmFyZWFTdHlsZS5jb2xvcjEiOiBlLmFyZWF0b3AsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmFyZWFTdHlsZS5jb2xvcjIiOiBlLmFyZWFkb3duLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5hcmVhU3R5bGUubGluZWNvbG9yIjogZS5ib3JkZXIsCiAgICAgICAgICAgICAgIm1haW5TZXJpZXNQcm9wZXJ0aWVzLmFyZWFTdHlsZS5saW5ld2lkdGgiOiAxLAogICAgICAgICAgICAgICJtYWluU2VyaWVzUHJvcGVydGllcy5hcmVhU3R5bGUucHJpY2VTb3VyY2UiOiAiY2xvc2UiLAogICAgICAgICAgICB9OwogICAgICAgICAgfSwKICAgICAgICAgIGNob3NlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMud2lkZ2V0LnNldExhbmd1YWdlKCJlbiIpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBJdCA9IFR0LAogICAgICBCdCA9IChhKCJiYWFlIiksIE9iamVjdChoWyJhIl0pKEl0LCBjdCwgZHQsICExLCBudWxsLCBudWxsLCBudWxsKSksCiAgICAgIE50ID0gQnQuZXhwb3J0cywKICAgICAgRnQgPSB7CiAgICAgICAgbmFtZTogImRlYWxDZW50ZXIiLAogICAgICAgIGNvbXBvbmVudHM6IHsKICAgICAgICAgIGluZGV4SGVhZGVyOiBBLAogICAgICAgICAgbG9hZDogMSwKICAgICAgICAgIG5vdGljZTogaGUsCiAgICAgICAgICBkZWFsOiBiZSwKICAgICAgICAgIGV4Y2hhbmdlOiBBZSwKICAgICAgICAgIHRyYWRlOiBOZSwKICAgICAgICAgIGNoYXJ0OiBWZSwKICAgICAgICAgIGVudHJ1c3Q6IGplLAogICAgICAgICAgaGlzZW50cnVzdDogS2UsCiAgICAgICAgICBjdXJyZW5jeTogYXQsCiAgICAgICAgICBjb21wbGV0ZTogbHQsCiAgICAgICAgICB0djogTnQsCiAgICAgICAgfSwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBpc1JvdXRlckFsaXZlOiAhMCwgd2hpY2hFbnRydXN0OiAiZW50cnVzdCIgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuYWRkcmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhZGRyZXNzIikgfHwgIiI7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7fSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgfSwKICAgICAgTHQgPSBGdCwKICAgICAgTXQgPSAoYSgiNDcwZiIpLCBPYmplY3QoaFsiYSJdKShMdCwgdGUsIGFlLCAhMSwgbnVsbCwgImNkOTllOWUyIiwgbnVsbCkpLAogICAgICBFdCA9IE10LmV4cG9ydHMsCiAgICAgIFZ0ID0ge30sCiAgICAgIER0ID0gT2JqZWN0KGhbImEiXSkoVnQsIHMsIG8sICExLCBudWxsLCBudWxsLCBudWxsKSwKICAgICAgUnQgPSBEdC5leHBvcnRzLAogICAgICBVdCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LW1haW4gd3JhcCIgfSwgWwogICAgICAgICAgYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAid2hpdGUgbG9nX3VsIiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgYXR0cnM6IHsgaWQ6ICJwYXktb3B0cyIgfSB9LCBbCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImlucC1pdGVtIiB9LCBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCBbZS5fdihlLl9zKGUuJHQoInNldC50bmFtZSIpKSldKSwKICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogInRleHQiLCBwbGFjZWhvbGRlcjogZS4kdCgiYXV0aC50cnVlbmFtZSIpIH0sCiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLm5hbWUgfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5uYW1lID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5wLWl0ZW0iIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwuYmFua05hbWUiKSkpXSksCiAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5iYW5rTmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJiYW5rTmFtZSIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoImxlZ2FsdHJhZGUuZW50ZXJ6aGloYW5nIiksCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmJhbmtOYW1lIH0sCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwgKGUuYmFua05hbWUgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtaXRlbSIgfSwgWwogICAgICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJzZXQuY251bSIpKSldKSwKICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmJhbmtOdW0sCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYmFua051bSIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgid0FkZHJlc3MuZW50ZXJDYXJkTnVtIiksCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmJhbmtOdW0gfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5iYW5rTnVtID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYnRuIGJnUmVkIiwgb246IHsgY2xpY2s6IGUuYWRkIH0gfSwgWwogICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImxlZ2FsLmNvbmZpcm0iKSkgKyAiICIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBPdCA9IFtdLAogICAgICBXdCA9IHsKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b2tlbjogIiIsCiAgICAgICAgICAgIG5hbWU6ICIiLAogICAgICAgICAgICBiYW5rTmFtZTogIiIsCiAgICAgICAgICAgIGJhbmtOdW06ICIiLAogICAgICAgICAgICBhbGk6ICIiLAogICAgICAgICAgICB3ZUNoYXRBY2NvdW50OiAiIiwKICAgICAgICAgICAgd2VDaGF0TmFtZTogIiIsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgKHRoaXMudG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiIpLAogICAgICAgICAgICAiIiA9PSB0aGlzLnRva2VuICYmIHRoaXMuJHJvdXRlci5wdXNoKCIvY29tcG9uZW50cy9sb2dpbiIpLAogICAgICAgICAgICB0aGlzLmdldEluZm8oKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGdldEluZm86IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvY2FzaF9pbmZvIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlICYmIG51bGwgIT0gdC5kYXRhLm1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgIHZhciBhID0gdC5kYXRhLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICAoZS5uYW1lID0gYS5yZWFsX25hbWUpLAogICAgICAgICAgICAgICAgICAoZS5iYW5rTmFtZSA9IGEuYmFua19uYW1lKSwKICAgICAgICAgICAgICAgICAgKGUuYmFua051bSA9IGEuYmFua19hY2NvdW50KSwKICAgICAgICAgICAgICAgICAgKGUuYWxpID0gYS5hbGlwYXlfYWNjb3VudCksCiAgICAgICAgICAgICAgICAgIChlLndlQ2hhdEFjY291bnQgPSBhLndlY2hhdF9hY2NvdW50KSwKICAgICAgICAgICAgICAgICAgKGUud2VDaGF0TmFtZSA9IGEud2VjaGF0X25pY2tuYW1lKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGFkZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAiIiAhPSB0aGlzLm5hbWUKICAgICAgICAgICAgICA/IHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvY2FzaF9zYXZlIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICByZWFsX25hbWU6IHRoaXMubmFtZSwKICAgICAgICAgICAgICAgICAgICBiYW5rX25hbWU6IHRoaXMuYmFua05hbWUsCiAgICAgICAgICAgICAgICAgICAgYmFua19hY2NvdW50OiB0aGlzLmJhbmtOdW0sCiAgICAgICAgICAgICAgICAgICAgYWxpcGF5X2FjY291bnQ6IHRoaXMuYWxpLAogICAgICAgICAgICAgICAgICAgIHdlY2hhdF9uaWNrbmFtZTogdGhpcy53ZUNoYXROYW1lLAogICAgICAgICAgICAgICAgICAgIHdlY2hhdF9hY2NvdW50OiB0aGlzLndlQ2hhdEFjY291bnQsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICA6IGxheWVyLm1hZyh0aGlzLiR0KCJsYXkudHJ1ZW5hbWUiKSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGp0ID0gV3QsCiAgICAgIHF0ID0gKGEoIjRhMTAiKSwgT2JqZWN0KGhbImEiXSkoanQsIFV0LCBPdCwgITEsIG51bGwsIG51bGwsIG51bGwpKSwKICAgICAgR3QgPSBxdC5leHBvcnRzLAogICAgICBadCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsKICAgICAgICAgICAgY2xhc3M6ICJkYXlzIiA9PSBlLnNraW5zID8gIndoaXRlcyIgOiAid2hpdGVzIGJhbGNrIiwKICAgICAgICAgICAgYXR0cnM6IHsgaWQ6ICJ1c2VyLXNldHRpbmciIH0sCiAgICAgICAgICB9LAogICAgICAgICAgWwogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJzZXR0aW5nLXIiIH0sCiAgICAgICAgICAgICAgW2EoImgzIiwgW2UuX3YoZS5fcyhlLiR0KCJzZXRpbmcucG1ldGhvZCIpKSldKSwgYSgicm91dGVyLXZpZXciKV0sCiAgICAgICAgICAgICAgMQogICAgICAgICAgICApLAogICAgICAgICAgXQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIFF0ID0gW10sCiAgICAgIEh0ID0gewogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEsIGluZGV4Rm9vdGVyOiBLIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsgc2tpbnM6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJza2luIikgfHwgImRheXMiIH07CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgS3QgPSBIdCwKICAgICAgSnQgPSAoYSgiZjQzYyIpLCBPYmplY3QoaFsiYSJdKShLdCwgWnQsIFF0LCAhMSwgbnVsbCwgImM2OWEzMTA0IiwgbnVsbCkpLAogICAgICBZdCA9IEp0LmV4cG9ydHMsCiAgICAgIFh0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgiLCBhdHRyczogeyBpZDogImMyYy1ib3giIH0gfSwgWwogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImMyYy1sIiB9LCBbYSgibGVmdCIpXSwgMSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYzJjLXIiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRvcCIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgZS5fbChlLmN1cnJlbmN5X2xpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAga2V5OiBpLAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBpID09IGUuYWN0aXZlID8gImJnX2FjdGl2ZSIgOiAiIiwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7ICJkYXRhLWlkIjogdC5pZCB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY3VycmVuY3lfY2xpY2sodC5pZCwgdC5uYW1lLCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbZS5fdihlLl9zKHQubmFtZSkgKyAiL0NOWSIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWRDb2xvciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm5hbWUpICsgIi/kurrmsJHluIEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigiPiIpXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidG9wLXRpdGxlIGZsZXgiIH0sIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJyb3V0ZXItbGluayIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibGluay1zcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGFnOiAic3BhbiIsIHRvOiAiL2MyYyIgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbZS5fdigidGV0aGVyICIgKyBlLl9zKGUuY3VycmVuY3lfbmFtZSkpXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCLlr7lDTlkiKV0pLAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtaXRlbXMgZmxleCIgfSwgWwogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImlucC1pdGVtIiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtdGl0bGUgZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuaW5idXkiKSkgKyBlLl9zKGUuY3VycmVuY3lfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImhvdyByZWRDb2xvciBmdDE0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fdigi5aaC5L2V5Lmw5YWlPyIpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRocmVlLWlucCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2VudGVyLmJ1eW51bWJlciIpKSArIGUuX3MoZS5jdXJyZW5jeV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5udW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAibnVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAibnVtYmVyIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5udW0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5udW0gPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMub25lUHJpY2UiKSkgKyAiQ05ZIildKSwKICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAibnVtYmVyIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5wcmljZSB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLnByaWNlID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJwYXktb3B0cyBmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMucGF5VHlwZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnBheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInBheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyYWRpbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAicGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiYWxpX3BheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBjaGVja2VkOiBlLl9xKGUucGF5LCAiYWxpX3BheSIpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXkgPSAiYWxpX3BheSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYzJjLmFpbGlwYXkiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5wYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicmFkaW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInBheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIndlX2NoYXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgY2hlY2tlZDogZS5fcShlLnBheSwgIndlX2NoYXQiKSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5ID0gIndlX2NoYXQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImMyYy53eCIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnBheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInBheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogInJhZGlvIiwgbmFtZTogInBheSIsIHZhbHVlOiAiYmFuayIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBjaGVja2VkOiBlLl9xKGUucGF5LCAiYmFuayIpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXkgPSAiYmFuayI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYzJjLmJhbmtjYXJkIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWRDb2xvciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi77yI5b+F6aG75pys5Lq65pSv5LuYKSIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImJ0bi1pbiIsIG9uOiB7IGNsaWNrOiBlLmJ1aV9pbiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZW50ZXIuaW5idXkiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAi77yIQ05Z4oaSIiArCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jdXJyZW5jeV9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICLvvIkiCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtaXRlbSIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5wLXRpdGxlIGZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2VudGVyLm91dHNlbGwiKSkgKyBlLl9zKGUuY3VycmVuY3lfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZnQxNCIsIHN0YXRpY1N0eWxlOiB7IGNvbG9yOiAiIzY2NiIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jdXJyZW5jeV9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2ZjLmJhbGFuY2UiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImhvdyByZWRDb2xvciBmdDE0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fdigi5aaC5L2V5Y2W5Ye6PyIpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRocmVlLWlucCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnAtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2VudGVyLnNlbGxudW1iZXIiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmN1cnJlbmN5X25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLm51bTAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogIm51bTAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAibnVtYmVyIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5udW0wMSB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLm51bTAxID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5wLWJveCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiYzJjLm9uZVByaWNlIikpICsgIkNOWSIpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5wcmljZTAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInByaWNlMDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJudW1iZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnByaWNlMDEgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5wcmljZTAxID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJwYXktb3B0cyBmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMucGF5VHlwZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnBheTAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicGF5MDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicmFkaW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInBheTAxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiYWxpX3BheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBjaGVja2VkOiBlLl9xKGUucGF5MDEsICJhbGlfcGF5IikgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnBheTAxID0gImFsaV9wYXkiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImMyYy5haWxpcGF5IikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImxhYmVsIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUucGF5MDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwYXkwMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyYWRpbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAicGF5MDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICJ3ZV9jaGF0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGNoZWNrZWQ6IGUuX3EoZS5wYXkwMSwgIndlX2NoYXQiKSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5MDEgPSAid2VfY2hhdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYzJjLnd4IikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImxhYmVsIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUucGF5MDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwYXkwMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyYWRpbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAicGF5MDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICJiYW5rIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGNoZWNrZWQ6IGUuX3EoZS5wYXkwMSwgImJhbmsiKSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5MDEgPSAiYmFuayI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYzJjLmJhbmtjYXJkIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWRDb2xvciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi77yI5b+F6aG75pys5Lq65pSv5LuYKSIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYnRuLW91dCIsIG9uOiB7IGNsaWNrOiBlLnNlbGxfb3V0IH0gfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci5vdXRzZWxsIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAi77yIIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmN1cnJlbmN5X25hbWUpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAi4oaSQ05Z77yJIgogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgZWEgPSBbXSwKICAgICAgdGEgPSBhKCJhZGUzIiksCiAgICAgIGFhID0ge30sCiAgICAgIGlhID0gT2JqZWN0KGhbImEiXSkoYWEsIHIsIGwsICExLCBudWxsLCBudWxsLCBudWxsKSwKICAgICAgbmEgPSBpYS5leHBvcnRzLAogICAgICBzYSA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IGxlZnQ6IG5hIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGU7CiAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAoZSA9IHsKICAgICAgICAgICAgICB0b2tlbjogIiIsCiAgICAgICAgICAgICAgbm93TGlzdDogImxpc3RJbiIsCiAgICAgICAgICAgICAgYWN0aXZlOiAwLAogICAgICAgICAgICAgIGN1cnJlbmN5X2xpc3Q6IFtdLAogICAgICAgICAgICAgIGN1cnJlbmN5X25hbWU6ICIiLAogICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiAiIiwKICAgICAgICAgICAgICBpZDogIiIsCiAgICAgICAgICAgICAgcHJpY2U6ICIiLAogICAgICAgICAgICAgIG51bTogIiIsCiAgICAgICAgICAgICAgcGF5OiAiIiwKICAgICAgICAgICAgICB1c2VyX25hbWU6ICIiLAogICAgICAgICAgICAgIGNvbnRlbnQ6ICIiLAogICAgICAgICAgICAgIHByaWNlMDE6ICIiLAogICAgICAgICAgICAgIG51bTAxOiAiIiwKICAgICAgICAgICAgICBwYXkwMTogIiIsCiAgICAgICAgICAgICAgdXNlcl9uYW1lMDE6ICIiLAogICAgICAgICAgICAgIGNvbnRlbnQwMTogIiIsCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBPYmplY3QodGFbImEiXSkoZSwgImN1cnJlbmN5X2xpc3QiLCBbXSksCiAgICAgICAgICAgIE9iamVjdCh0YVsiYSJdKShlLCAic2hvd0xpc3QiLCAhMCksCiAgICAgICAgICAgIE9iamVjdCh0YVsiYSJdKShlLCAic2hvd0RldGFpbCIsICExKSwKICAgICAgICAgICAgT2JqZWN0KHRhWyJhIl0pKGUsICJkZXRhaWwiLCB7fSksCiAgICAgICAgICAgIE9iamVjdCh0YVsiYSJdKShlLCAic2hvd1RyYWRlQm94IiwgITEpLAogICAgICAgICAgICBPYmplY3QodGFbImEiXSkoZSwgInRyYWRlUGFyYW1zIiwgeyBpZDogIiIsIHRvdGFsOiAiIiwgdHlwZTogIiIgfSksCiAgICAgICAgICAgIE9iamVjdCh0YVsiYSJdKShlLCAiYnV5U2VsbE51bSIsICIiKSwKICAgICAgICAgICAgT2JqZWN0KHRhWyJhIl0pKGUsICJzaG93VHJhZGVMaXN0IiwgeyBzaG93OiAhMSwgaW5kZXg6ICJub25lIiB9KSwKICAgICAgICAgICAgZQogICAgICAgICAgKTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICh0aGlzLnRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKSwKICAgICAgICAgICAgIiIgPT0gdGhpcy50b2tlbiAmJiB0aGlzLiRyb3V0ZXIucHVzaCgiL2NvbXBvbmVudHMvbG9naW4iKSwKICAgICAgICAgICAgdGhpcy5nZXRfY3VycmVuY3koKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGZpeGVkSW5wOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICBpZiAoMCA9PSB0LnRhcmdldC52YWx1ZSkgdC50YXJnZXQudmFsdWU7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHZhciBhID0gdC50YXJnZXQudmFsdWUgKyAiIiwKICAgICAgICAgICAgICAgIGkgPSBhLmluZGV4T2YoIi4iKTsKICAgICAgICAgICAgICAtMSAhPSBpICYmCiAgICAgICAgICAgICAgICBhLnN1YnN0cihpKS5sZW5ndGggPiBlICsgMSAmJgogICAgICAgICAgICAgICAgKHQudGFyZ2V0LnZhbHVlID0gKGEgLSAwKS50b0ZpeGVkKGUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGdldF9jdXJyZW5jeTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvY3VycmVuY3kvbGlzdCIsCiAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICgoZS5jdXJyZW5jeV9saXN0ID0gdC5kYXRhLm1lc3NhZ2UubGVnYWwpLAogICAgICAgICAgICAgICAgKGUuY3VycmVuY3lfbmFtZSA9IHQuZGF0YS5tZXNzYWdlLmxlZ2FsWzBdLm5hbWUpLAogICAgICAgICAgICAgICAgKGUuaWQgPSB0LmRhdGEubWVzc2FnZS5sZWdhbFswXS5pZCkpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBjdXJyZW5jeV9jbGljazogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3lfbmFtZSA9IHQpLCAodGhpcy5hY3RpdmUgPSBhKSwgKHRoaXMuaWQgPSBlKTsKICAgICAgICAgIH0sCiAgICAgICAgICBidWlfaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICByZXR1cm4gZS5udW0KICAgICAgICAgICAgICA/IGUucHJpY2UKICAgICAgICAgICAgICAgID8gZS5wYXkKICAgICAgICAgICAgICAgICAgPyB2b2lkIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmNfc2VuZCIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGUucHJpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX251bWJlcjogZS5udW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdheTogZS5wYXksCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBlLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiYnV5IiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kcm91dGVyLnB1c2goIi9jMmNSZWxlYXNlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDApKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogIjk5NyIgPT0gdC5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICA/IChsYXllci5tc2codC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHJvdXRlci5wdXNoKCIvdXNlclNldHRpbmciKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiOTk4IiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kcm91dGVyLnB1c2goIi9hdXRoZW50aWNhdGlvbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IChsYXllci5tc2codC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUucHJpY2UgPSAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5udW0gPSAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5wYXkgPSAiIikpOwogICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgOiAobGF5ZXIubXNnKHRoaXMuJHQoImxheS5tcGF5IikpLCAhMSkKICAgICAgICAgICAgICAgIDogKGxheWVyLm1zZyh0aGlzLiR0KCJsYXkubXByaWNlIikpLCAhMSkKICAgICAgICAgICAgICA6IChsYXllci5tc2codGhpcy4kdCgibGF5LmlubnVtYmVyIikpLCAhMSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2VsbF9vdXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICByZXR1cm4gZS5udW0wMQogICAgICAgICAgICAgID8gZS5wcmljZTAxCiAgICAgICAgICAgICAgICA/IGUucGF5MDEKICAgICAgICAgICAgICAgICAgPyB2b2lkIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmNfc2VuZCIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IGUucHJpY2UwMSwKICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfbnVtYmVyOiBlLm51bTAxLAogICAgICAgICAgICAgICAgICAgICAgICB3YXk6IGUucGF5MDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBlLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic2VsbCIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICA/IChsYXllci5tc2codC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHJvdXRlci5wdXNoKCIvYzJjUmVsZWFzZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IChsYXllci5tc2codC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUucHJpY2UwMSA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLm51bTAxID0gIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUucGF5MDEgPSAiIikpOwogICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgOiAobGF5ZXIubXNnKHRoaXMuJHQoImxheS5tcGF5IikpLCAhMSkKICAgICAgICAgICAgICAgIDogKGxheWVyLm1zZyh0aGlzLiR0KCJsYXkubXByaWNlIikpLCAhMSkKICAgICAgICAgICAgICA6IChsYXllci5tc2codGhpcy4kdCgibGF5Lm91dG51bWJlciIpKSwgITEpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBvYSA9IHNhLAogICAgICByYSA9IChhKCI0YTljIiksIE9iamVjdChoWyJhIl0pKG9hLCBYdCwgZWEsICExLCBudWxsLCBudWxsLCBudWxsKSksCiAgICAgIGxhID0gcmEuZXhwb3J0cywKICAgICAgY2EgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIsIGF0dHJzOiB7IGlkOiAiYzJjLWJveCIgfSB9LCBbCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYzJjLWwiIH0sIFtpKCJsZWZ0IildLCAxKSwKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjMmMtciIgfSwgWwogICAgICAgICAgICBpKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZS10b3AgZmxleCBmdDIwIiB9LAogICAgICAgICAgICAgIGUuX2woZS50b3BUeXBlLCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGtleTogYSwKICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IGEgPT0gZS5jdXJyZW50IH0sCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jaGFuZ2VUeXBlKGEsIHQudHlwZSwgdC50aXRsZSk7CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC50aXRsZSkpXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAwCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvaW4tc2VsZWN0IG10MjAgZmxleCIgfSwKICAgICAgICAgICAgICBlLl9sKGUuY29pbkxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAga2V5OiBhLAogICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IHNlbGVjdDogYSA9PSBlLnNlbGVjdCB9LAogICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0bmV3KGEsIHQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQubmFtZSkpXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAwCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0Ym94IiB9LCBbCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggZmxleHRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJsZWdhbC5zaG9wZXIiKSkpXSksCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbZS5fdigieyR0KCdjMmMubnVtJyl9fSIpXSksCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjMmMub25lUHJpY2UiKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjMmMucGF5VHlwZSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidHIiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImMyYy5vcGVyYSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgZS5fbChlLmxpc3QsIGZ1bmN0aW9uICh0LCBuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgeyBrZXk6IG4sIHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciBjdXJQZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJoZWFkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZDogdC5iZ2NvbG9yIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLl9mKCJjaXJjbGUiKSh0LnNlbGxlcl9uYW1lKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJibHVlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5zZWxsZXJfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggY2VudGVyIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJzZWxsZXJOYW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuX2YoInRvZml4ZWQiKSh0LnN1cnBsdXNfbnVtYmVyIHx8ICIwLjAwIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiY3VycmVuY3lOYW1lIG1sNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIGxpZ2h0X2dyZWVuIGZ0MTYiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigidG9maXhlZCIpKHQucHJpY2UgfHwgIjAuMDAiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaV9wYXkiID09IHQud2F5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCJiMGMwZSIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZV9jaGF0IiA9PSB0LndheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOGYzNyIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJiYW5rIiA9PSB0LndheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiZDdiNyIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImJ0biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5vcmRlcih0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5jbGFzc2lmeSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBlLmxpc3QubGVuZ3RoID49IDEwICYmIGUuc2hvd21vcmUKICAgICAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0YyBmdDEyIGdyYXkgbXQyMCBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0TW9yZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoIm1vcmUiKSkgKyAiLi4uIildCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIGRhID0gW107CiAgICBhKCI0ZGU0Iik7CiAgICBjWyJkZWZhdWx0Il0uZmlsdGVyKCJjaXJjbGUiLCBmdW5jdGlvbiAoZSkgewogICAgICByZXR1cm4gZS5zdWJzdHJpbmcoMCwgMSk7CiAgICB9KTsKICAgIHZhciB1YSA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IGxlZnQ6IG5hIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW46ICIiLAogICAgICAgICAgICBjdXJyZW50OiAwLAogICAgICAgICAgICBzZWxlY3Q6IDAsCiAgICAgICAgICAgIHR5cGU6ICJzZWxsIiwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgY29pbkxpc3Q6IFtdLAogICAgICAgICAgICBsaXN0OiBbXSwKICAgICAgICAgICAgbGVnYWxfaWQ6ICIiLAogICAgICAgICAgICBjbGFzc2lmeTogdGhpcy4kdChsZWdhbC5idXkpLAogICAgICAgICAgICB0b3BUeXBlOiBbCiAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy4kdChsZWdhbC5idXkpLCB0eXBlOiAic2VsbCIgfSwKICAgICAgICAgICAgICB7IHRpdGxlOiB0aGlzLiR0KGxlZ2FsLnNlbGwpLCB0eXBlOiAiYnV5IiB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBiZ2NvbG9yOiBbCiAgICAgICAgICAgICAgIiM1ZDhjYzIiLAogICAgICAgICAgICAgICIjNmQ3OGE4IiwKICAgICAgICAgICAgICAiI2EyYjI0MCIsCiAgICAgICAgICAgICAgIiM2MWI4OGUiLAogICAgICAgICAgICAgICIjZTM1NzQ0IiwKICAgICAgICAgICAgICAiI2ExNmM5MiIsCiAgICAgICAgICAgICAgIiM2Njc1NmUiLAogICAgICAgICAgICBdLAogICAgICAgICAgICBzaG93bW9yZTogITAsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9maXhlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICAgIHRvZml4ZWRGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgKHRoaXMudG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiIpLAogICAgICAgICAgICAiIiA9PSB0aGlzLnRva2VuICYmIHRoaXMuJHJvdXRlci5wdXNoKCIvY29tcG9uZW50cy9sb2dpbiIpLAogICAgICAgICAgICB0aGlzLmdldF9jdXJyZW5jeSgpOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY2hhbmdlVHlwZTogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgKHRoaXMuY3VycmVudCA9IGUpLAogICAgICAgICAgICAgICh0aGlzLmNsYXNzaWZ5ID0gYSksCiAgICAgICAgICAgICAgKHRoaXMudHlwZSA9IHQpLAogICAgICAgICAgICAgICh0aGlzLmxpc3QgPSBbXSksCiAgICAgICAgICAgICAgKHRoaXMucGFnZSA9IDEpLAogICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgICAgICAgfSwKICAgICAgICAgIGdldG5ldzogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgKHRoaXMuc2VsZWN0ID0gZSksCiAgICAgICAgICAgICAgKHRoaXMubGVnYWxfaWQgPSB0KSwKICAgICAgICAgICAgICAodGhpcy5wYWdlID0gMSksCiAgICAgICAgICAgICAgKHRoaXMubGlzdCA9IFtdKSwKICAgICAgICAgICAgICB0aGlzLmdldExpc3QoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRfY3VycmVuY3k6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2N1cnJlbmN5L2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAoKGUuY29pbkxpc3QgPSB0LmRhdGEubWVzc2FnZS5sZWdhbCksCiAgICAgICAgICAgICAgICAoZS5sZWdhbF9pZCA9IHQuZGF0YS5tZXNzYWdlLmxlZ2FsWzBdLmlkKSwKICAgICAgICAgICAgICAgIGUuZ2V0TGlzdCgic2VsbCIpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TGlzdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgICAgdCA9IHRoaXMudHlwZSwKICAgICAgICAgICAgICBhID0gdGhpcy5wYWdlLAogICAgICAgICAgICAgIGkgPSB0aGlzLmxlZ2FsX2lkLAogICAgICAgICAgICAgIG4gPSBsYXllci5sb2FkKCk7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDoKICAgICAgICAgICAgICAgICIvYXBpL2MyY19kZWFsX3BsYXRmb3JtP3R5cGU9IiArCiAgICAgICAgICAgICAgICB0ICsKICAgICAgICAgICAgICAgICImcGFnZT0iICsKICAgICAgICAgICAgICAgIGEgKwogICAgICAgICAgICAgICAgIiZjdXJyZW5jeV9pZD0iICsKICAgICAgICAgICAgICAgIGksCiAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIGlmICgobGF5ZXIuY2xvc2UobiksICJvayIgPT0gdC5kYXRhLnR5cGUpKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmRhdGE7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBhLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICAgICAgYVtpXS5iZ2NvbG9yID0KICAgICAgICAgICAgICAgICAgICAgIGUuYmdjb2xvcltNYXRoLmZsb29yKDYgKiBNYXRoLnJhbmRvbSgpICsgMSkgLSAxXTsKICAgICAgICAgICAgICAgICAgKGUubGlzdCA9IGUubGlzdC5jb25jYXQoYSkpLCAoZS5wYWdlICs9IDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYS5sZW5ndGggPCAxMCAmJiAoZS5zaG93bW9yZSA9ICExKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGdldE1vcmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICAgICAgICB9LAogICAgICAgICAgb3JkZXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgbGF5ZXIuY29uZmlybSgKICAgICAgICAgICAgICAi56Gu6K6k5LiL5Y2V5ZCX77yfIiwKICAgICAgICAgICAgICB7IGJ0bjogWyLnoa7orqQiLCAi5Y+W5raIIl0gfSwKICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0LnN1cmVPcmRlcihlKTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgICAgc3VyZU9yZGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgYSA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmMvZG9fbGVnYWxfZGVhbCIsCiAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YTogeyBpZDogZSB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoYSksCiAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZS5tc2cpLCAodC5wYWdlID0gMSksIHQuZ2V0TGlzdCgpKQogICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBtYSA9IHVhLAogICAgICBwYSA9IChhKCIwNjQzIiksIE9iamVjdChoWyJhIl0pKG1hLCBjYSwgZGEsICExLCBudWxsLCAiNjM4NDM4NmIiLCBudWxsKSksCiAgICAgIGhhID0gcGEuZXhwb3J0cywKICAgICAgZmEgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIsIGF0dHJzOiB7IGlkOiAiYzJjLWJveCIgfSB9LCBbCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYzJjLWwiIH0sIFtpKCJsZWZ0IildLCAxKSwKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjMmMtciIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidG9wIiB9LCBbCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRvcC1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICBpKCJoNCIsIFtlLl92KCLotK3kubAiKV0pLAogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgZS5fbChlLmN1cnJlbmN5X2xpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBhID09IGUuYWN0aXZlID8gImJnX2FjdGl2ZSIgOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgImRhdGEtaWQiOiB0LmlkIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jdXJyZW5jeV9jbGljayh0LmlkLCB0Lm5hbWUsIGEsICJidXkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC5uYW1lKSldCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRvcC1yaWdodCIgfSwgWwogICAgICAgICAgICAgICAgaSgiaDQiLCBbZS5fdigi5Ye65ZSuIildKSwKICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgIGUuX2woZS5jdXJyZW5jeV9saXN0LCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpKAogICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBhLAogICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogYSA9PSBlLmFjdGl2ZXMgPyAiYmdfYWN0aXZlIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyAiZGF0YS1pZCI6IHQuaWQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmN1cnJlbmN5X2NsaWNrKHQuaWQsIHQubmFtZSwgYSwgInNlbGwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC5uYW1lKSldCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYm90IiB9LCBbCiAgICAgICAgICAgICAgZS5idXlMaXN0Lmxlbmd0aCA+IDAKICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IiB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUuYnV5TGlzdCwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoImxpIiwgeyBrZXk6IHQuaWQsIHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0bCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9maXhlZCIpKHQudG90YWxfbnVtYmVyIHx8ICIwLjAwIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3ModC5jdXJyZW5jeV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigidG9maXhlZCIpKHQucHJpY2UgfHwgIjAuMDAiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGlfcGF5IiA9PSB0LndheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCJiMGMwZSIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2VfY2hhdCIgPT0gdC53YXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOGYzNyIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFuayIgPT0gdC53YXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiZDdiNyIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5iYWNrT3JkZXIodC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCLmkqTlm54iKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5sb29rT3JkZXIodC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCLmn6XnnIvorqLljZUiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAyCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgIGUuYnV5TGlzdC5sZW5ndGggPD0gMAogICAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibm9fZGF0YSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI5NDg1IiksIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxOCIgfSwgW2UuX3YoIuaaguaXoOaVsOaNriIpXSksCiAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibW9yZSIsCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5tb3JlRGF0YSgpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLm1vcmVUZXh0KSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgZ2EgPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0bCIgfSwgW2UuX3YoIuWQjeensCIpXSksCiAgICAgICAgICAgIGEoImRpdiIsIFtlLl92KCLmlbDph48iKV0pLAogICAgICAgICAgICBhKCJkaXYiLCBbZS5fdigi5Y2V5Lu3IildKSwKICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoIuS7mOasvuaWueW8jyIpXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0ciIgfSwgW2UuX3YoIuaTjeS9nCIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICBdLAogICAgICB2YSA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IGxlZnQ6IG5hIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW46ICIiLAogICAgICAgICAgICBhY3RpdmU6IDAsCiAgICAgICAgICAgIGFjdGl2ZXM6IC0xLAogICAgICAgICAgICBjdXJyZW5jeV9saXN0OiBbXSwKICAgICAgICAgICAgY3VycmVuY3lfbmFtZTogIiIsCiAgICAgICAgICAgIGlkOiAiIiwKICAgICAgICAgICAgc2hvd0xpc3Q6ICEwLAogICAgICAgICAgICBzaG93RGV0YWlsOiAhMSwKICAgICAgICAgICAgZGV0YWlsOiB7fSwKICAgICAgICAgICAgc2hvd1RyYWRlQm94OiAhMSwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgdHlwZXM6ICJidXkiLAogICAgICAgICAgICBidXlMaXN0OiBbXSwKICAgICAgICAgICAgbW9yZVRleHQ6ICLliqDovb3mm7TlpJoiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIHRvZml4ZWQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCgyKTsKICAgICAgICAgIH0sCiAgICAgICAgICB0b2ZpeGVkRm91cjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDQpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICh0aGlzLnRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKSwKICAgICAgICAgICAgIiIgPT0gdGhpcy50b2tlbiAmJiB0aGlzLiRyb3V0ZXIucHVzaCgiL2NvbXBvbmVudHMvbG9naW4iKSwKICAgICAgICAgICAgdGhpcy5nZXRfY3VycmVuY3koKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGdldF9jdXJyZW5jeTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgICAgdCA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jdXJyZW5jeS9saXN0IiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UodCksCiAgICAgICAgICAgICAgICAib2siID09IGEuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICgoZS5jdXJyZW5jeV9saXN0ID0gYS5kYXRhLm1lc3NhZ2UubGVnYWwpLAogICAgICAgICAgICAgICAgICAoZS5jdXJyZW5jeV9uYW1lID0gYS5kYXRhLm1lc3NhZ2UubGVnYWxbMF0ubmFtZSksCiAgICAgICAgICAgICAgICAgIChlLmlkID0gYS5kYXRhLm1lc3NhZ2UubGVnYWxbMF0uaWQpLAogICAgICAgICAgICAgICAgICBlLmdldEJ1eUxpc3QoKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGN1cnJlbmN5X2NsaWNrOiBmdW5jdGlvbiAoZSwgdCwgYSwgaSkgewogICAgICAgICAgICAodGhpcy5jdXJyZW5jeV9uYW1lID0gdCksCiAgICAgICAgICAgICAgKHRoaXMuaWQgPSBlKSwKICAgICAgICAgICAgICAodGhpcy50eXBlcyA9IGkpLAogICAgICAgICAgICAgICJidXkiID09IGkKICAgICAgICAgICAgICAgID8gKCh0aGlzLmFjdGl2ZSA9IGEpLCAodGhpcy5hY3RpdmVzID0gLTEpKQogICAgICAgICAgICAgICAgOiAoKHRoaXMuYWN0aXZlcyA9IGEpLCAodGhpcy5hY3RpdmUgPSAtMSkpLAogICAgICAgICAgICAgICh0aGlzLnBhZ2UgPSAxKSwKICAgICAgICAgICAgICB0aGlzLmdldEJ1eUxpc3QoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRCdXlMaXN0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gbGF5ZXIubG9hZCgpLAogICAgICAgICAgICAgIHQgPSB0aGlzOwogICAgICAgICAgICB0LiRodHRwKHsKICAgICAgICAgICAgICB1cmw6CiAgICAgICAgICAgICAgICAiL2FwaS9jMmMvc2VsbGVyX3RyYWRlP3R5cGU9IiArCiAgICAgICAgICAgICAgICB0LnR5cGVzICsKICAgICAgICAgICAgICAgICImcGFnZT0iICsKICAgICAgICAgICAgICAgIHQucGFnZSArCiAgICAgICAgICAgICAgICAiJmN1cnJlbmN5X2lkPSIgKwogICAgICAgICAgICAgICAgdC5pZCwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgaWYgKChsYXllci5jbG9zZShlKSwgIm9rIiA9PSBhLmRhdGEudHlwZSkpIHsKICAgICAgICAgICAgICAgIHZhciBpID0gYS5kYXRhLm1lc3NhZ2UuZGF0YTsKICAgICAgICAgICAgICAgIGkubGVuZ3RoID4gMAogICAgICAgICAgICAgICAgICA/ICh0LmJ1eUxpc3QgPSB0LmJ1eUxpc3QuY29uY2F0KGkpKQogICAgICAgICAgICAgICAgICA6IDEgPT0gdC5wYWdlICYmIDAgPT0gaS5sZW5ndGgKICAgICAgICAgICAgICAgICAgPyAodC5tb3JlVGV4dCA9ICIiKQogICAgICAgICAgICAgICAgICA6ICh0Lm1vcmVUZXh0ID0gIuayoeacieabtOWkmuaVsOaNriIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgYmFja09yZGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmMvYmFja19zZW5kIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGlkOiBlIH0sCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKHQpLAogICAgICAgICAgICAgICAgICBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgfSwgNTAwKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgbGF5ZXIubXNnKGUuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBtb3JlRGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIChlLnBhZ2UgPSBlLnBhZ2UgKyAxKSwgZS5nZXRCdXlMaXN0KCk7CiAgICAgICAgICB9LAogICAgICAgICAgbG9va09yZGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICJjMmNEZXRhaWwiLCBxdWVyeTogeyBpZDogZSB9IH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBfYSA9IHZhLAogICAgICB5YSA9IChhKCI1M2E2IiksIE9iamVjdChoWyJhIl0pKF9hLCBmYSwgZ2EsICExLCBudWxsLCBudWxsLCBudWxsKSksCiAgICAgIGJhID0geWEuZXhwb3J0cywKICAgICAgQ2EgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIsIGF0dHJzOiB7IGlkOiAiYzJjLWJveCIgfSB9LCBbCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYzJjLWwiIH0sIFtpKCJsZWZ0IildLCAxKSwKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjMmMtciIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGlzdGJveCIgfSwgWwogICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGUuX2woZS5saXN0LCBmdW5jdGlvbiAodCwgbikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpKAogICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBuLCBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY3VyUGVyIiB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBbImhlYWQiLCB7ICJzZWxsICI6ICJidXkiID09IHQudHlwZSB9XSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcygic2VsbCIgPT0gdC50eXBlID8gIui0reS5sCIgOiAi5Ye65ZSuIikpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJjdXJyZW5jeU5hbWUgbWw1IGJsdWUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmN1cnJlbmN5X25hbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigidG9maXhlZCIpKHQubnVtYmVyIHx8ICIwLjAwIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyBsaWdodF9ncmVlbiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkIikodC5kZWFsX21vbmV5IHx8ICIwLjAwIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICLmlK/ku5jlrp0iID09IHQud2F5X25hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoImIwYzBlIikgfSB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIuW+ruS/oSIgPT0gdC53YXlfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOGYzNyIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9PSB0LndheV9uYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCJkN2I3IikgfSB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jcmVhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PSB0LmlzX3N1cmUgPyBpKCJkaXYiLCBbZS5fdigi5pyq5a6M5oiQIildKSA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IHQuaXNfc3VyZSA/IGkoImRpdiIsIFtlLl92KCLlt7LlrozmiJAiKV0pIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT0gdC5pc19zdXJlID8gaSgiZGl2IiwgW2UuX3YoIuW3suWPlua2iCIpXSkgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSB0LmlzX3N1cmUgPyBpKCJkaXYiLCBbZS5fdigi5bey5LuY5qy+IildKSA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0ciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJidG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0RGV0YWlsKHQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIuivpuaDhSIpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBlLmxpc3QubGVuZ3RoID49IDEwICYmIGUuc2hvd21vcmUKICAgICAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0YyBmdDEyIGdyYXkgbXQyMCBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ2V0TW9yZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigi5Yqg6L295pu05aSaLi4uIildCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgICBlLnNob3dEZXRhaWwKICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFzayIgfSwgWwogICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm0tY29udGVudCIgfSwgWwogICAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCBbZS5fdigi6K+m5oOFIildKSwKICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNob3dEZXRhaWwgPSAhMTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCJ4IildCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIDAgPT0gZS5kZXRhaWwuaXNfc3VyZQogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoIueKtuaAgToiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoIuW+heS7mOasviIpXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAxID09IGUuZGV0YWlsLmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KCLnirbmgIE6IildKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KCLlt7LlrozmiJAiKV0pLAogICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgMiA9PSBlLmRldGFpbC5pc19zdXJlCiAgICAgICAgICAgICAgICAgICAgPyBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi54q25oCBOiIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi5bey5Y+W5raIIildKSwKICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgIDMgPT0gZS5kZXRhaWwuaXNfc3VyZQogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoIueKtuaAgToiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoIuW3suS7mOasviIpXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAic2VsbCIgPT0gZS5kZXRhaWwudHlwZQogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KCLljZblrrbvvJoiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdihlLl9zKGUuZGV0YWlsLnNlbGxlcl9uYW1lKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoIuS7mOasvuS/oeaBr++8miIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KGUuX3MoZS5kZXRhaWwud2F5X25hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi6LSm5Y+377yaIildKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAi5pSv5LuY5a6dIiA9PSBlLmRldGFpbC53YXlfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuZGV0YWlsLnNlbGxfY2FzaF9pbmZvLmFsaXBheV9hY2NvdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAi5b6u5L+hIiA9PSBlLmRldGFpbC53YXlfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuZGV0YWlsLnNlbGxfY2FzaF9pbmZvLndlY2hhdF9hY2NvdW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoIumTtuihjOWNoeWPt++8miIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5kZXRhaWwuc2VsbF9jYXNoX2luZm8uYmFua19uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuZGV0YWlsLnNlbGxfY2FzaF9pbmZvLmJhbmtfYWNjb3VudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KCLmlLbmrL7kurrvvJoiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdihlLl9zKGUuZGV0YWlsLmhlc19yZWFsbmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi6IGU57O75pa55byP77yaIildKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmRldGFpbC5zZWxsZXJfcGhvbmUpKV0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi5pWw6YeP77yaIildKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoInRvZml4ZWQiKShlLmRldGFpbC5udW1iZXIgfHwgIjAuMDAiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi5Y2V5Lu377yaIildKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoInRvZml4ZWQiKShlLmRldGFpbC5wcmljZSB8fCAiMC4wMCIpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KCLmgLvpop3vvJoiKV0pLAogICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuX2YoInRvZml4ZWQiKShlLmRldGFpbC5kZWFsX21vbmV5IHx8ICIwLjAwIikpCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdigi5LiL5Y2V5pe26Ze077yaIildKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmRldGFpbC5jcmVhdGVfdGltZSkpXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KCLlj4LogIPlj7c6IildKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmRldGFpbC5pZCkpXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAwID09IGUuZGV0YWlsLmlzX3N1cmUgJiYgInNlbGwiID09IGUuZGV0YWlsLnR5cGUKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFyb3VuZCBidG5ib3ggbXQyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY2VpbG9yZGVyIHRjIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNlaWxPcmRlcihlLmRldGFpbC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIuWPlua2iOiuouWNlSIpXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAic3VyZXBheSB0YyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zdXJlT3JkZXIoZS5kZXRhaWwuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCLmiJHlt7Lku5jmrL7vvIzngrnlh7vnoa7orqQiKV0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgIDMgPT0gZS5kZXRhaWwuaXNfc3VyZSAmJiAiYnV5IiA9PSBlLmRldGFpbC50eXBlCiAgICAgICAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQyMCBidG5ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInN1cmVwYXkgdGMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc3VyZVBheWVkKGUuZGV0YWlsLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigi56Gu6K6k5bey5pS25qy+IildCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIHdhID0gWwogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggZmxleHRpdGxlIiB9LCBbCiAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi57G75Z6LIildKSwKICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgW2UuX3YoIuaVsOmHjyIpXSksCiAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFtlLl92KCLkuqTmmJPmgLvpop0iKV0pLAogICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbZS5fdigi5pSv5LuY5pa55byPIildKSwKICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgW2UuX3YoIuaXtumXtCIpXSksCiAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFtlLl92KCLnirbmgIEiKV0pLAogICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRyIiB9LCBbZS5fdigi5pON5L2cIildKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgIF07CiAgICBjWyJkZWZhdWx0Il0uZmlsdGVyKCJjaXJjbGUiLCBmdW5jdGlvbiAoZSkgewogICAgICByZXR1cm4gZS5zdWJzdHJpbmcoMCwgMSk7CiAgICB9KTsKICAgIHZhciBrYSA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IGxlZnQ6IG5hIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW46ICIiLAogICAgICAgICAgICBjdXJyZW50OiAwLAogICAgICAgICAgICB0eXBlOiAic2VsbCIsCiAgICAgICAgICAgIHBhZ2U6IDEsCiAgICAgICAgICAgIGxpc3Q6IFtdLAogICAgICAgICAgICBsZWdhbF9pZDogIiIsCiAgICAgICAgICAgIGNsYXNzaWZ5OiAi5rGC6LStIiwKICAgICAgICAgICAgdG9wVHlwZTogWwogICAgICAgICAgICAgIHsgdGl0bGU6ICLmsYLotK0iLCB0eXBlOiAiYnV5IiB9LAogICAgICAgICAgICAgIHsgdGl0bGU6ICLlh7rllK4iLCB0eXBlOiAic2VsbCIgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgc2hvd0RldGFpbDogITEsCiAgICAgICAgICAgIGRldGFpbDogW10sCiAgICAgICAgICAgIHNob3dtb3JlOiAhMCwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICB0b2ZpeGVkOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoMik7CiAgICAgICAgICB9LAogICAgICAgICAgdG9maXhlZEZvdXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCg0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy50b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIiksCiAgICAgICAgICAgICIiID09IHRoaXMudG9rZW4gJiYgdGhpcy4kcm91dGVyLnB1c2goIi9jb21wb25lbnRzL2xvZ2luIiksCiAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY2hhbmdlVHlwZTogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgKHRoaXMuY3VycmVudCA9IGUpLAogICAgICAgICAgICAgICh0aGlzLmNsYXNzaWZ5ID0gYSksCiAgICAgICAgICAgICAgKHRoaXMudHlwZSA9IHQpLAogICAgICAgICAgICAgICh0aGlzLmxpc3QgPSBbXSksCiAgICAgICAgICAgICAgKHRoaXMucGFnZSA9IDEpLAogICAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCh0KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRMaXN0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2MyY191c2VyX2RlYWw/JnBhZ2U9IiArIHRoaXMucGFnZSwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgaWYgKChsYXllci5jbG9zZSh0KSwgIm9rIiA9PSBhLmRhdGEudHlwZSkpIHsKICAgICAgICAgICAgICAgIHZhciBpID0gYS5kYXRhLm1lc3NhZ2UuZGF0YTsKICAgICAgICAgICAgICAgIDAgIT0gaS5sZW5ndGggJiYgKChlLmxpc3QgPSBlLmxpc3QuY29uY2F0KGkpKSwgKGUucGFnZSArPSAxKSksCiAgICAgICAgICAgICAgICAgIGkubGVuZ3RoIDwgMTAgJiYgKGUuc2hvd21vcmUgPSAhMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRNb3JlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgICAgICAgfSwKICAgICAgICAgIGdldERldGFpbDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSBsYXllci5sb2FkKCk7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvYzJjX2RlYWw/aWQ9IiArIGUsCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBsYXllci5jbG9zZShhKSwKICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgKCh0LmRldGFpbCA9IGUuZGF0YS5tZXNzYWdlKSwgKHQuc2hvd0RldGFpbCA9ICEwKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGNlaWxPcmRlcjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICBsYXllci5jb25maXJtKAogICAgICAgICAgICAgICLnoa7orqTlj5bmtojkuqTmmJPvvJ8iLAogICAgICAgICAgICAgIHsgYnRuOiBbIuehruiupCIsICLlj5bmtogiXSB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHQub3JkZXJDZWlsKGUpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgKTsKICAgICAgICAgIH0sCiAgICAgICAgICBvcmRlckNlaWw6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2MyYy91c2VyX2xlZ2FsX3BheV9jYW5jZWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGUgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGxheWVyLmNsb3NlKGEpLAogICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICh0LnBhZ2UgPSAxKSwKICAgICAgICAgICAgICAgICAgICB0LmdldExpc3QoKSwKICAgICAgICAgICAgICAgICAgICAodC5zaG93RGV0YWlsID0gITEpKQogICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHN1cmVPcmRlcjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICBsYXllci5jb25maXJtKAogICAgICAgICAgICAgICLor7fnoa7orqTmgqjlt7LlkJHljZblrrbku5jmrL4s5oG25oSP54K55Ye75bCG6KKr5Ya757uT6LSm5oi3IiwKICAgICAgICAgICAgICB7IGJ0bjogWyLnoa7orqQiLCAi5Y+W5raIIl0gfSwKICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0Lm9yZGVyU3VyZShlKTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgICAgb3JkZXJTdXJlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgYSA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmMvdXNlcl9sZWdhbF9wYXkiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGUgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGxheWVyLmNsb3NlKGEpLAogICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICh0LnBhZ2UgPSAxKSwKICAgICAgICAgICAgICAgICAgICB0LmdldExpc3QoKSwKICAgICAgICAgICAgICAgICAgICAodC5zaG93RGV0YWlsID0gITEpKQogICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHN1cmVQYXllZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICBsYXllci5jb25maXJtKAogICAgICAgICAgICAgICLor7fnoa7orqTmgqjlt7LmlLbkubDlrrbku5jmrL7kv6Hmga8iLAogICAgICAgICAgICAgIHsgYnRuOiBbIuehruiupCIsICLlj5bmtogiXSB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHQucGF5ZWRTdXJlKGUpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgKTsKICAgICAgICAgIH0sCiAgICAgICAgICBwYXllZFN1cmU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2MyYy9sZWdhbF9kZWFsX3VzZXJfc3VyZSIsCiAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YTogeyBpZDogZSB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoYSksCiAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgKHQucGFnZSA9IDEpLAogICAgICAgICAgICAgICAgICAgIHQuZ2V0TGlzdCgpLAogICAgICAgICAgICAgICAgICAgICh0LnNob3dEZXRhaWwgPSAhMSkpCiAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGUuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIHhhID0ga2EsCiAgICAgIFNhID0gKGEoImYxYmYiKSwgT2JqZWN0KGhbImEiXSkoeGEsIENhLCB3YSwgITEsIG51bGwsIG51bGwsIG51bGwpKSwKICAgICAgQWEgPSBTYS5leHBvcnRzLAogICAgICB6YSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiwgYXR0cnM6IHsgaWQ6ICJjMmMtYm94IiB9IH0sIFsKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjMmMtbCIgfSwgW2koImxlZnQiKV0sIDEpLAogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImMyYy1yIiB9LCBbCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0Ym94IiB9LCBbCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggZmxleHRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMudHlwZSIpKSldKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFtlLl92KGUuX3MoZS4kdCgiYzJjLm51bSIpKSldKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxlZ2FsLnRvdGFsbW9uZXkiKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjMmMucGF5VHlwZSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFtlLl92KGUuX3MoZS4kdCgic3RhdHVzIikpKV0pLAogICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ0ciIgfSwgW2UuX3YoZS5fcyhlLiR0KCJkbyIpKSldKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgIGUuX2woZS5saXN0LCBmdW5jdGlvbiAodCwgbikgewogICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgIHsga2V5OiBuLCBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY3VyUGVyIiB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiaGVhZCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsbCIgPT0gdC50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLiR0KCJjMmMuc2VsbCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLiR0KCJjMmMuYnV5IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJjdXJyZW5jeU5hbWUgbWw1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggY2VudGVyIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGlnaHRfYmx1ZSBzZWxsZXJOYW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoInRvZml4ZWQiKSh0LmRlYWxfbW9uZXkgfHwgIjAuMDAiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkIikodC5wcmljZSB8fCAiMC4wMCIpKSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICB0LndheV9uYW1lID09IGUuJHQoImxlZ2FsLmFsaXBheSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiYjBjMGUiKSB9IH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHQud2F5X25hbWUgPT0gZS4kdCgibGVnYWwud2VjaGF0IikKICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI4ZjM3IikgfSB9KQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICB0LndheV9uYW1lID09IGUuJHQoImMyYy5iYW5rY2FyZCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiZDdiNyIpIH0gfSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmNyZWF0ZV90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAwID09IHQuaXNfc3VyZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJsZWdhbC5ub2ZpbmlzaCIpKSldKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAxID09IHQuaXNfc3VyZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJsZWdhbC5maW5pc2hlZCIpKSldKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAyID09IHQuaXNfc3VyZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJsZWdhbC5jZWlsZWQiKSkpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSB0LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwucGF5ZWQiKSkpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLm1vZGFscyh0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJkZXRhaWwtYnRuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImJ1dHRvbiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImMyYy5kZXRhaWwiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGkoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICB2YWx1ZTogZS5tb2RhbFNob3csCiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJtb2RhbFNob3ciLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibW9kYWxzIGZsZXgiLAogICAgICAgICAgICB9LAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1jb250ZW50IiB9LCBbCiAgICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibW9kYWwtaGVhZGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGkoImgzIiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMuZGV0YWlsIikpKV0pLAogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jbG9zZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbZS5fdigiWCIpXQogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAiYnV5IiA9PSBlLnBheUNvbnRlbnQudHlwZQogICAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICJidXkiID09IGUucGF5Q29udGVudC50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInBheUNvbnRlbnQudHlwZSA9PSAnYnV5JyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJwYXktY2FubmVsIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic3RhdHVzIikpICsgIu+8miIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gZS5wYXlDb250ZW50LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwubm9maW5pc2giKSkpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5wYXlDb250ZW50LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwuZmluaXNoZWQiKSkpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT0gZS5wYXlDb250ZW50LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwuY2VpbGVkIikpKV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAzID09IGUucGF5Q29udGVudC5pc19zdXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoImxlZ2FsLnBheWVkIikpKV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGVnYWwudG90YWwiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZCIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXlDb250ZW50LmRlYWxfbW9uZXkgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYzJjLm5hbWUiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5wYXlDb250ZW50LnVzZXJfY2FzaF9pbmZvLnJlYWxfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXlDb250ZW50LnVzZXJfY2FzaF9pbmZvLmJhbmtfYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInNldC5jbnVtIikpICsgIu+8miIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXlDb250ZW50LnVzZXJfY2FzaF9pbmZvLmJhbmtfYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5Q29udGVudC51c2VyX2Nhc2hfaW5mby53ZWNoYXRfYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImMyYy53eCIpKSArICLvvJoiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5Q29udGVudC51c2VyX2Nhc2hfaW5mby53ZWNoYXRfYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5Q29udGVudC51c2VyX2Nhc2hfaW5mby5hbGlwYXlfYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImMyYy5haWxpcGF5IikpICsgIjoiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucGF5Q29udGVudC51c2VyX2Nhc2hfaW5mby5hbGlwYXlfYWNjb3VudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYzJjLmNvbm5lY3QiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUucGF5Q29udGVudC5waG9uZSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgInNlbGwiID09IGUucGF5Q29udGVudC50eXBlCiAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogInNlbGwiID09IGUucGF5Q29udGVudC50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInBheUNvbnRlbnQudHlwZSA9PSAnc2VsbCciLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAicGF5LWNvbXBsZXRlIiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic3RhdHVzIikpICsgIu+8miIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gZS5wYXlDb250ZW50LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwubm9maW5pc2giKSkpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5wYXlDb250ZW50LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwuZmluaXNoZWQiKSkpXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDIgPT0gZS5wYXlDb250ZW50LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGVnYWwuY2VpbGVkIikpKV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAzID09IGUucGF5Q29udGVudC5pc19zdXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGkoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoImxlZ2FsLnBheWVkIikpKV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGVnYWwudG90YWwiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZCIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wYXlDb250ZW50LmRlYWxfbW9uZXkgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicHJpY2UiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZCIpKGUucGF5Q29udGVudC5wcmljZSB8fCAiMC4wMCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibW9kYWxzLWxlZnQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZCIpKGUucGF5Q29udGVudC5udW1iZXIgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLnBheUNvbnRlbnQuY3VycmVuY3lfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibW9kYWxzLWxlZnQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJ0aW1lIikpICsgIu+8miIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKGUucGF5Q29udGVudC5mb3JtYXRfY3JlYXRlX3RpbWUpICsgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1vZGFscy1sZWZ0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYzJjLmNvbm5lY3QiKSkgKyAi5Y+C6ICD5Y+377yaIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUucGF5Q29udGVudC5pZCkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibW9kYWxzLWxlZnQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjMmMuY29ubmVjdCIpKSArICLvvJoiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS5wYXlDb250ZW50LnBob25lKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUubW9kYWxCdG5TaG93LAogICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAibW9kYWxCdG5TaG93IiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImJ0bnMiLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY29tZmlybShlLnBheUNvbnRlbnQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZWdhbC5zdXJlcGF5IikpKV0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnBhbm5lbFNob3csCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwYW5uZWxTaG93IiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImJ0bnMiLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2FubmVsKGUucGF5Q29udGVudC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxlZ2FsLm9yZGVyY2VpbCIpKSldCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5wYXlDb21maXJtKGUucGF5Q29udGVudC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxlZ2FsLm15cGF5ZWQiKSkpXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0KICAgICAgICAgICksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIFBhID0gW107CiAgICBjWyJkZWZhdWx0Il0uZmlsdGVyKCJjaXJjbGUiLCBmdW5jdGlvbiAoZSkgewogICAgICByZXR1cm4gZS5zdWJzdHJpbmcoMCwgMSk7CiAgICB9KTsKICAgIHZhciBUYSwKICAgICAgSWEsCiAgICAgIEJhLAogICAgICBOYSwKICAgICAgRmEgPSB7CiAgICAgICAgY29tcG9uZW50czogeyBsZWZ0OiBuYSB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRva2VuOiAiIiwKICAgICAgICAgICAgY3VycmVudDogMCwKICAgICAgICAgICAgdHlwZTogInNlbGwiLAogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBsaXN0OiBbXSwKICAgICAgICAgICAgbGVnYWxfaWQ6ICIiLAogICAgICAgICAgICBjbGFzc2lmeTogIuaxgui0rSIsCiAgICAgICAgICAgIGlkczogIiIsCiAgICAgICAgICAgIHBheUNvbnRlbnQ6IHt9LAogICAgICAgICAgICBtb2RhbFNob3c6ICExLAogICAgICAgICAgICBwYW5uZWxTaG93OiAhMSwKICAgICAgICAgICAgbW9kYWxCdG5TaG93OiAhMSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICB0b2ZpeGVkOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoMik7CiAgICAgICAgICB9LAogICAgICAgICAgdG9maXhlZEZvdXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCg0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAoZS50b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIiksCiAgICAgICAgICAgIChlLmlkcyA9IHRoaXMuJHJvdXRlLnF1ZXJ5LmlkKSwKICAgICAgICAgICAgIiIgPT0gZS50b2tlbiAmJiB0aGlzLiRyb3V0ZXIucHVzaCgiL2NvbXBvbmVudHMvbG9naW4iKSwKICAgICAgICAgICAgZS5nZXRMaXN0KGUuaWRzKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGNoYW5nZVR5cGU6IGZ1bmN0aW9uIChlLCB0LCBhKSB7CiAgICAgICAgICAgICh0aGlzLmN1cnJlbnQgPSBlKSwKICAgICAgICAgICAgICAodGhpcy5jbGFzc2lmeSA9IGEpLAogICAgICAgICAgICAgICh0aGlzLnR5cGUgPSB0KSwKICAgICAgICAgICAgICAodGhpcy5saXN0ID0gW10pLAogICAgICAgICAgICAgICh0aGlzLnBhZ2UgPSAxKSwKICAgICAgICAgICAgICB0aGlzLmdldExpc3QodCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TGlzdDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSB0aGlzLAogICAgICAgICAgICAgIGkgPSBsYXllci5sb2FkKCk7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvYzJjL2xlZ2FsX3NlbmRfZGVhbF9saXN0PyZwYWdlPSIgKyBhLnBhZ2UgKyAiJmlkPSIgKyBlLAogICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBpZiAoKGxheWVyLmNsb3NlKGkpLCAib2siID09IGUuZGF0YS50eXBlKSkgewogICAgICAgICAgICAgICAgdmFyIGEgPSBlLmRhdGEubWVzc2FnZS5kYXRhOwogICAgICAgICAgICAgICAgMCAhPSBhLmxlbmd0aCAmJiAoKHQubGlzdCA9IHQubGlzdC5jb25jYXQoYSkpLCAodC5wYWdlICs9IDEpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIG9yZGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIGxheWVyLmNvbmZpcm0oCiAgICAgICAgICAgICAgIuehruiupOS4i+WNleWQl++8nyIsCiAgICAgICAgICAgICAgeyBidG46IFt0LiR0KCJjb25maXJtIiksIHQuJHQoImxlZ2FsLmNlaWwiKV0gfSwKICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB0LnN1cmVPcmRlcihlKTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgICAgc3VyZU9yZGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmMvZG9fbGVnYWxfZGVhbCIsCiAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YTogeyBpZDogZSB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UodCksIGUuZGF0YS50eXBlLCBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBtb2RhbHM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2MyY19kZWFsPyZpZD0iICsgZSwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoYSksCiAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICgodC5tb2RhbFNob3cgPSAhMCksCiAgICAgICAgICAgICAgICAgICh0LnBheUNvbnRlbnQgPSBlLmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgIDMgPT0gZS5kYXRhLm1lc3NhZ2UuaXNfc3VyZSAmJiAic2VsbCIgPT0gZS5kYXRhLm1lc3NhZ2UudHlwZQogICAgICAgICAgICAgICAgICAgID8gKHQubW9kYWxCdG5TaG93ID0gITApCiAgICAgICAgICAgICAgICAgICAgOiAodC5tb2RhbEJ0blNob3cgPSAhMSksCiAgICAgICAgICAgICAgICAgIDAgPT0gZS5kYXRhLm1lc3NhZ2UuaXNfc3VyZSAmJiAiYnV5IiA9PSBlLmRhdGEubWVzc2FnZS50eXBlCiAgICAgICAgICAgICAgICAgICAgPyAodC5wYW5uZWxTaG93ID0gITApCiAgICAgICAgICAgICAgICAgICAgOiAodC5wYW5uZWxTaG93ID0gITEpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2xvc2VzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMubW9kYWxTaG93ID0gITE7CiAgICAgICAgICB9LAogICAgICAgICAgY29tZmlybTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICBsYXllci5jb25maXJtKAogICAgICAgICAgICAgICLor7fnoa7orqTkubDlrrblt7LlkJHmgqjku5jmrL7vvJ8iLAogICAgICAgICAgICAgIHsgYnRuOiBbdC4kdCgibGVnYWwuc3VyZXBheSIpLCB0LiR0KCJsZWdhbC5jZWlsIildIH0sCiAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGEgPSBsYXllci5sb2FkKCk7CiAgICAgICAgICAgICAgICB0LiRodHRwKHsKICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jMmMvbGVnYWxfZGVhbF9zdXJlIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGUgfSwKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0LnRva2VuIH0sCiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKGEpLAogICAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICh0Lm1vZGFsU2hvdyA9ICExKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdC5nZXRMaXN0KHQuaWRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKSkKICAgICAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGUuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjYW5uZWw6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgbGF5ZXIuY29uZmlybSgKICAgICAgICAgICAgICB0LiR0KCJsZWdhbC5jZWlsbm90IiksCiAgICAgICAgICAgICAgeyBidG46IFsi5Y+W5raI56Gu6K6kIiwgdC4kdCgibGVnYWwuY2VpbCIpXSB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBhID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICAgICAgdC4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvYzJjL3VzZXJfbGVnYWxfcGF5X2NhbmNlbCIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB7IGlkOiBlIH0sCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdC50b2tlbiB9LAogICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBsYXllci5jbG9zZShhKSwKICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAodC5tb2RhbFNob3cgPSAhMSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0TGlzdCh0Lmlkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCkpCiAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgICAgcGF5Q29tZmlybTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICBsYXllci5jb25maXJtKAogICAgICAgICAgICAgICLku5jmrL7noa7orqTlkI7or7flsL3lv6vlkJHljZblrrbku5jmrL4s5oG25oSP54K55Ye75bCG55u05o6l5Ya757uT6LSm5oi377yfIiwKICAgICAgICAgICAgICB7IGJ0bjogWyLku5jmrL7noa7orqQiLCAi5Y+W5raIIl0gfSwKICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgICAgIHQuJGh0dHAoewogICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL2MyYy91c2VyX2xlZ2FsX3BheSIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB7IGlkOiBlIH0sCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdC50b2tlbiB9LAogICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBsYXllci5jbG9zZShhKSwKICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAodC5tb2RhbFNob3cgPSAhMSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0TGlzdCh0Lmlkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCkpCiAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIExhID0gRmEsCiAgICAgICRhID0gKGEoIjUyZDEiKSwgT2JqZWN0KGhbImEiXSkoTGEsIHphLCBQYSwgITEsIG51bGwsIG51bGwsIG51bGwpKSwKICAgICAgTWEgPSAkYS5leHBvcnRzLAogICAgICBFYSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJob21lIiB9LCBbCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbiIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbi10b3AgZmxleCIgfSwgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0di1ib3ggbGV2ZXIiIH0sIFthKCJ0diIpXSwgMSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbi1ib3R0b20gZmxleCIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJ0cmFuLWJveCIgfSwKICAgICAgICAgICAgICAgIFthKCJsZXZlclRyYW5zYWN0aW9ucyIpXSwKICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0cmFkZS1ib3giLAogICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBiYWNrZ3JvdW5kOiAiIzE4MWQyNSIgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbYSgidHJhZGUiKV0sCiAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgVmEgPSBbXSwKICAgICAgRGEgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibm90aWNlIiB9LCBbCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC13cmFwIiB9LCBbCiAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImFjY291bnQiLCBzdGF0aWNTdHlsZTogeyB3aWR0aDogImF1dG8iIH0gfSwKICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBpKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYWNrLW5hdiBmQ29sb3IxIGZ0MjAgY2xlYXIiLAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcGFkZGluZzogIjAgMjBweCIgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KCIgIiArIGUuX3MoZS4kdCgibm90aWNlIikpICsgIiAiKV0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtY29udGVudCIgfSwgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGMgaGlkZSIsCiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAicGFkZGluZy10b3AiOiAiMTUwcHgiIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOTQ4NSIpLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxOCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibm9kYXRhIikpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogIm5vdGljZUxpc3QiIH0sCiAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUubmV3TGlzdCwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtleTogdC5pZCwgc3RhdGljQ2xhc3M6ICJjbGVhciBjdXJQZXIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvRGV0YWlsKHQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgiZGl2Iiwge30sIFtlLl92KGUuX3ModC50aXRsZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudXBkYXRlX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgaSgiZGl2IiwgewogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGMiLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBhZGRpbmc6ICIxNXB4IiB9LAogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBSYSA9IFtdLAogICAgICBVYSA9IHsKICAgICAgICBuYW1lOiAibm90aWNlTGlzdCIsCiAgICAgICAgY29tcG9uZW50czogeyBpbmRleEhlYWRlcjogQSB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7IG1vcmU6IHRoaXMuJHQoIm1vcmUiKSArICIuLi4iLCBuZXdMaXN0OiBbXSB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ2V0Tm90aWNlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7IHVybDogIi9hcGkvbmV3cy9saXN0IiwgbWV0aG9kOiAicG9zdCIgfSkudGhlbigKICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgZS5uZXdMaXN0ID0gdC5kYXRhLm1lc3NhZ2UubGlzdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgICB9LAogICAgICAgICAgZ29CZWZvcmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLmJhY2soLTEpOwogICAgICAgICAgfSwKICAgICAgICAgIGdldE1vcmU6IGZ1bmN0aW9uICgpIHt9LAogICAgICAgICAgZ29EZXRhaWw6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGUgPSBlOwogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICJub3RpY2VEZXRhaWwiLCBxdWVyeTogeyBpZDogZSB9IH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgIGUuZ2V0Tm90aWNlKCk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgT2EgPSBVYSwKICAgICAgV2EgPSAoYSgiMThhZiIpLCBPYmplY3QoaFsiYSJdKShPYSwgRGEsIFJhLCAhMSwgbnVsbCwgIjRlYjVhOTUwIiwgbnVsbCkpLAogICAgICBqYSA9IFdhLmV4cG9ydHMsCiAgICAgIHFhID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1hcmtldCIgfSwgWwogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1fdGl0bGUgIGNsZWFyIGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmZmYgZmwiIH0sIFsKICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibWFya2V0Lm1hcmtldCIpKSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBlLl9tKDApLAogICAgICAgICAgXSksCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibV9maWx0ZXIiIH0sIFsKICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAidGFidGl0bGUgZkNvbG9yMSBmdDE0IGN1clBlciBmbGV4IGFyb3VuZCIgfSwKICAgICAgICAgICAgICBlLl9sKGUudGFiTGlzdCwgZnVuY3Rpb24gKHQsIGEpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpKAogICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBrZXk6IGEsCiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGEgPT0gZS5pbmRleDEgPyAiYWN0aXZlIiA6ICIiLAogICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2hhbmdlVHlwZShhLCB0Lm5hbWUsIHQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQubmFtZSkpXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAwCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb2luLXRpdGxlIGNsZWFyIiB9LCBbCiAgICAgICAgICAgIGkoImRpdiIsIFsKICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJtYXJrZXQuY3VycmVuY3kiKSkpXSksCiAgICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjFhYWIiKSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoIm1hcmtldC5sYXN0cHJpY2UiKSkpXSksCiAgICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjFhYWIiKSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgiZGl2IiwgWwogICAgICAgICAgICAgIGkoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoIm1hcmtldC5jaGFuZ2UiKSkpXSksCiAgICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjFhYWIiKSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImxpbmUiIH0pLAogICAgICAgICAgaSgKICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvaW4td3JhcCBzY3JvbGwiIH0sCiAgICAgICAgICAgIGUuX2woZS5tYXJrZXRMaXN0LCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgIHJldHVybiBpKAogICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaW5kZXgxID09IGEsCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiaW5kZXgxID09IGluZGV4IiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICBrZXk6IGEsCiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VycmVuY3lfcCIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZS5fbCh0LCBmdW5jdGlvbiAodCwgbikgewogICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAga2V5OiB0LmlkLAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IG4gPT0gZS5pbmRleDIgPyAiYWN0aXZlX3AiIDogIiIsCiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyAiZGF0YS1pZCI6IHQuaWQsICJkYXRhLWluZGV4IjogbiB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucXVvdGFfc2hpZnQobiwgdC5pZCwgdC5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgW2UuX3YoZS5fcyh0Lm5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhLW5hbWUiOiBlLnRhYkxpc3RbYV0ubmFtZSArICIvIiArIHQubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigiJCIgKyBlLl9zKHQubGFzdF9wcmljZSkpXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IGNsYXNzOiB7IGdyZWVuOiB0LnByb3BvcnRpb24gPj0gMCB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5wcm9wb3J0aW9uID49IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiKyIgKyAodC5wcm9wb3J0aW9uIC0gMCkudG9GaXhlZCgyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICh0LnByb3BvcnRpb24gLSAwKS50b0ZpeGVkKDIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSArICIlIgogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIDAKICAgICAgICAgICksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIEdhID0gWwogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1fc2VhcmNoIGZyIiB9LCBbCiAgICAgICAgICAgIGkoImlucHV0IiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiLCBhdHRyczogeyB0eXBlOiAidGV4dCIgfSB9KSwKICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjFiNjEiKSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgXSwKICAgICAgWmEgPSB7CiAgICAgICAgbmFtZTogIm1hcmtldCIsCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgaWRzOiAwLAogICAgICAgICAgICBpc1Nob3c6IDAsCiAgICAgICAgICAgIHRhYkxpc3Q6IFtdLAogICAgICAgICAgICBtYXJrZXRMaXN0OiBbXSwKICAgICAgICAgICAgbmV3RGF0YTogWyJNVFMiLCAiJDAuMDc2MTI4IiwgIi0xLjExJSJdLAogICAgICAgICAgICBsZWdhbF9pbmRleDogdGhpcy4kcm91dGUucGFyYW1zLmxlZ2FsX2luZGV4LAogICAgICAgICAgICBjdXJyZW5jeV9pbmRleDogdGhpcy4kcm91dGUucGFyYW1zLmN1cnJlbmN5X2luZGV4LAogICAgICAgICAgICB0cmFkZURhdGFzOiAiIiwKICAgICAgICAgICAgaW5kZXgyOiAwLAogICAgICAgICAgICBpbmRleDE6IDAsCiAgICAgICAgICAgIGxlZ2FsX2lkOiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIiksCiAgICAgICAgICAgIGN1cnJlbmN5X2lkOiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImN1cnJlbmN5X2lkIiksCiAgICAgICAgICAgIHNlbGVjdGVkSWQ6ICIiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgwMiIpICYmCiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgwMSIpICYmCiAgICAgICAgICAgICgodGhpcy5pbmRleDIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oImluZGV4MDIiKSksCiAgICAgICAgICAgICh0aGlzLmluZGV4MSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiaW5kZXgwMSIpKSk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBldmVudEJ1cy4kb24oInRvTmV3MDEiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoZSkgewogICAgICAgICAgICAgIHZhciB0ID0gZS5uZXdwcmljZSwKICAgICAgICAgICAgICAgIGEgPSBlLmlzdG9rZW4sCiAgICAgICAgICAgICAgICBpID0gZS5uZXd1cDsKICAgICAgICAgICAgICBpID49IDAKICAgICAgICAgICAgICAgID8gKChpID0gIisiICsgTnVtYmVyKDEwMCAqIGkpLnRvRml4ZWQoMikgKyAiJSIpLAogICAgICAgICAgICAgICAgICAkKCJzcGFuW2RhdGEtbmFtZT0nIiArIGEgKyAiJ10iKQogICAgICAgICAgICAgICAgICAgIC5uZXh0KCkKICAgICAgICAgICAgICAgICAgICAuY3NzKCJjb2xvciIsICIjNTVhMDY3IikpCiAgICAgICAgICAgICAgICA6ICgoaSArPSAiJSIpLAogICAgICAgICAgICAgICAgICAkKCJzcGFuW2RhdGEtbmFtZT0nIiArIGEgKyAiJ10iKQogICAgICAgICAgICAgICAgICAgIC5uZXh0KCkKICAgICAgICAgICAgICAgICAgICAuY3NzKCJjb2xvciIsICIjY2M0OTUxIikpLAogICAgICAgICAgICAgICAgJCgic3BhbltkYXRhLW5hbWU9JyIgKyBhICsgIiddIikKICAgICAgICAgICAgICAgICAgLmh0bWwoIiQiICsgdCkKICAgICAgICAgICAgICAgICAgLm5leHQoKQogICAgICAgICAgICAgICAgICAuaHRtbChpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBjaGFuZ2VUeXBlOiBmdW5jdGlvbiAoZSwgdCwgYSkgewogICAgICAgICAgICAodGhpcy5pbmRleDEgPSBlKSwKICAgICAgICAgICAgICAodGhpcy5pbmRleDIgPSBudWxsKSwKICAgICAgICAgICAgICAkKCIuY3VycmVuY3lfcCBwIikucmVtb3ZlQ2xhc3MoImFjdGl2ZV9wIiksCiAgICAgICAgICAgICAgKHRoaXMuaXNTaG93ID0gZSksCiAgICAgICAgICAgICAgKHRoaXMuaWRzID0gImEiKSwKICAgICAgICAgICAgICAodGhpcy5jdXJyZW5jeV9uYW1lID0gdCksCiAgICAgICAgICAgICAgKHRoaXMuY3VycmVuY3lfaWQgPSBhKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRTeW1ib2xzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIGlmICh0aGlzLmFkZHJlc3MubGVuZ3RoIDw9IDApIHJldHVybiAhMTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGlzdD91c2VyX2lkPSIgKyB0aGlzLmFkZHJlc3MgfHwgITEsCiAgICAgICAgICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICJvayIgPT0gYS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgKCh0LmFjY291bnRJbmZvID0gYS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAodC5kYXRhTGlzdCA9IGEuZGF0YS5tZXNzYWdlLmxpc3QpLAogICAgICAgICAgICAgICAgICBlICYmIGUoKSk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAodGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImFkZHJlc3MiKSB8fCAiIiksCiAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3F1b3RhdGlvbl9uZXciLAogICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICBlLmdldFN5bWJvbHMoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSBpbiAoKGUubWFya2V0TGlzdCA9IHQuZGF0YS5tZXNzYWdlLmNvaW5fbGlzdCksCiAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFMaXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBlLm1hcmtldExpc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhTGlzdFthXS5uYW1lID09IGUubWFya2V0TGlzdFtpXS5zeW1ib2wKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGUubWFya2V0TGlzdFtpXS50eXBlID0gZS5tYXJrZXRMaXN0W2ldLnR5cGUgfHwgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGUubWFya2V0TGlzdFtpXS50eXBlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm1hcmtldExpc3RbaV0udHlwZSB8fCAwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBxdW90YV9zaGlmdDogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJpbmRleDAxIiwgdGhpcy5pbmRleDEpLAogICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiaW5kZXgwMiIsIGUpLAogICAgICAgICAgICAgICh0aGlzLmlkcyA9IGUpOwogICAgICAgICAgICB0aGlzLmN1cnJlbmN5X2lkLCB0aGlzLmN1cnJlbmN5X25hbWU7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgibGV2ZXJfbGVnYWxfaWQiLCB0KSwKICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oCiAgICAgICAgICAgICAgICAibGV2ZXJfY3VycmVuY3lfaWQiLAogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW5jeV9pZAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCJsZXZlcl9sZWdhbF9uYW1lIiwgYSksCiAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKAogICAgICAgICAgICAgICAgImxldmVyX2N1cnJlbmN5X25hbWUiLAogICAgICAgICAgICAgICAgdGhpcy5jdXJyZW5jeV9uYW1lCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzb2NrZXQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICB1cmw6IF9BUEkgKyAidXNlci9pbmZvIiwKICAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAogICAgICAgICAgICAgIGFzeW5jOiAhMCwKICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgdC5zZXRSZXF1ZXN0SGVhZGVyKCJBdXRob3JpemF0aW9uIiwgZSk7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gZS50eXBlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhID0gaW8oc29ja2V0X2FwaSk7CiAgICAgICAgICAgICAgICAgIGEub24oImNvbm5lY3QiLCBmdW5jdGlvbiAobikgewogICAgICAgICAgICAgICAgICAgIGEuZW1pdCgibG9naW4iLCBlLm1lc3NhZ2UuaWQpLAogICAgICAgICAgICAgICAgICAgICAgYS5vbigiZGF5bWFya2V0IiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgICJkYXltYXJrZXQiID09IGUudHlwZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIHQuc2VsZWN0SWQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNlbGVjdElkID09IGUubGVnYWxfaWQKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRldGFpbExpc3QucXVvdGF0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBhKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtpXS5jdXJyZW5jeV9pZCA9PSBlLmN1cnJlbmN5X2lkICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodC5kZXRhaWxMaXN0LnF1b3RhdGlvbltpXS52b2x1bWUgPSBlLnZvbHVtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0LmRldGFpbExpc3QucXVvdGF0aW9uW2ldLm5vd19wcmljZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5ub3dfcHJpY2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodC5kZXRhaWxMaXN0LnF1b3RhdGlvbltpXS5jaGFuZ2UgPSBlLmNoYW5nZSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIFFhID0gWmEsCiAgICAgIEhhID0gKGEoIjliOTQiKSwgT2JqZWN0KGhbImEiXSkoUWEsIHFhLCBHYSwgITEsIG51bGwsICI2ODkwZWFhZSIsIG51bGwpKSwKICAgICAgS2EgPSBIYS5leHBvcnRzLAogICAgICBKYSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0cmFkZSIgfSwgWwogICAgICAgICAgZS5zaG93CiAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQgY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgIGUuYWRkcmVzcy5sZW5ndGggPD0gMAogICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhdmFpbGFibGUgY2xlYXIgZkNvbG9yMSBmaXJzdCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlQ29sb3IgYmx1ZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoImxvZ2luIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibG9naW5zIikpKV0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiY2VudGVyLm9yIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoInJlZ2lzdGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXJzIikpKV0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiaG9tZS50b1RyYWRlIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICIxNXB4IDIwcHgiLAogICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImZsZXgiLAogICAgICAgICAgICAgICAgICAgICAgImZsZXgtZGlyZWN0aW9uIjogInJvdyIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIiMwMGE0ZDgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXg6ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAiaW5saW5lLWJsb2NrIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tIjogIjFweCBzb2xpZCAjMDBhNGQ4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQudGFjY291bnQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZkNvbG9yMSB0cmFuc2J0biBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuJHJvdXRlci5wdXNoKHsgbmFtZTogInRyYW5zZmVyTGVnYWwiIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQudHJhbnNmZXIiKSkpXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiMTAwJSIsCiAgICAgICAgICAgICAgICAgICAgICAidGV4dC1hbGlnbiI6ICJjZW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjQwcHgiLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLnVzZXJfbGVnYWwpICsgIiAiICsgZS5fcyhlLmxlZ2FsX25hbWUpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsKICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICIxcHgiLAogICAgICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogIiMyZTMzM2MiLAogICAgICAgICAgICAgICAgICAgIG1hcmdpbjogIjEwcHggMjBweCIsCiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICJjYWxjKDEwMCUgLSA0MHB4KSIsCiAgICAgICAgICAgICAgICAgICAgImJveC1zaXppbmciOiAiYm9yZGVyLWJveCIsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYnRuLXdyYXAiIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgImVsLWJ1dHRvbi1ncm91cCIsCiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJidXkiID09IGUub3B0eXBlID8gImFjdGl2ZWJ1eSIgOiAibm9ybWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9wdHlwZSA9ICJidXkiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJsZXZlci5kb21vcmUiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jdXJyZW5jeV9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxsIiA9PSBlLm9wdHlwZSA/ICJhY3RpdmVzZWxsIiA6ICJub3JtYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3B0eXBlID0gInNlbGwiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJsZXZlci5kb3Nob3J0IikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY3VycmVuY3lfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udHJvbC1wcmljZSBmaXJzdCIgfSwgWwogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZDb2xvcjEiLAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFt7IGFjdGl2ZTogMSA9PSBlLnNlbGVjdGVkU3RhdHVzIH1dLAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc2VsZWN0VHlwZXMoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJjZW50ZXIuc2hpIikpKV0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbeyBhY3RpdmU6IDAgPT0gZS5zZWxlY3RlZFN0YXR1cyB9XSwKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdFR5cGVzKDApOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiY2VudGVyLnhpYW4iKSkpXQogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAiYnV5IiA9PSBlLm9wdHlwZQogICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ3MTAwIGZsIGZpcnN0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZnQxNCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5wdXQtaXRlbSBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHt9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIHsgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5zZWxlY3RlZFN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuaW5wdXRQcmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3RlZFN0YXR1cz09MT9iZXN0UHJpY2U6aW5wdXRQcmljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogMSA9PSBlLnNlbGVjdGVkU3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBlLiR0KCJsZXZlci5wcHJpY2UiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5zZWxlY3RlZFN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5pbnB1dFByaWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA9PSBlLnNlbGVjdGVkU3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChlLmlucHV0UHJpY2UgPSB0LnRhcmdldC52YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZVByaWNlKCJidXkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImxhYmVsIiwgeyBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEwMCUiIH0gfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLnRpbWVkIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuYnV5SW5mby5idXlfc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYnV5SW5mby5idXlfc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYnV5X211bHRpcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwodC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3ZhbHVlIiBpbiBlID8gZS5fdmFsdWUgOiBlLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHNldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmJ1eUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1eV9zZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQubXVsdGlwbGUgPyBhIDogYVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdE11aXQoImJ1eSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGF0dHJzOiB7IGRpc2FibGVkOiAiIiwgdmFsdWU6ICIiIH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLnB0aW1lcyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5tdWx0aXBsZSwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBrZXk6IGksIGRvbVByb3BzOiB7IHZhbHVlOiB0LnZhbHVlIH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQudmFsdWUpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgibGV2ZXIudGltZXMiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBlLnNoYXJlTnVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAic2hhcmVOdW0iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIDEiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiaGFuZCIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImxldmVyLmVxdWFsIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvZml4ZWQiKShlLnNoYXJlTnVtICogZS5uZXdQcmljZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5sZWdhbF9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5vcmRlcnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDEwIGlucHV0LWl0ZW0gY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBlLm1pbkZvbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gImZvbnQtc2l6ZToxMHB4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZm9udC1zaXplOjE0cHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLmhhbmRzIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZDb2xvcjEgYWN0aXZlIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250LXNpemUiOiAiMTRweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogInN0YXRpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3JkZXJ0eXBlID0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5idXlhbW91bnQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IHNoYXJlLXRvdGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmJ1eVNhaHJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImJ1eVNhaHJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInNoYXJlLWlucHV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgicGJ1eW51bSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5idXlTYWhyZSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5idXlTYWhyZSA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jaGFuZ2VWYWx1ZSgiYnV5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5zaGFyZUxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHQudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhcmUyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhY3RpdmU6IGUudHlwZSA9PSB0LnZhbHVlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc2VsZWN0KHQudmFsdWUsICJidXkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudmFsdWUpICsgZS5fcyhlLiR0KCJoYW5kIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgMiA9PSBlLm9yZGVydHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10MTAgaW5wdXQtaXRlbSBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEwMCUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IGUubWluRm9udAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiZm9udC1zaXplOjEwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJmb250LXNpemU6MTRweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuYW1vdW50IikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZDb2xvcjEgYWN0aXZlIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250LXNpemUiOiAiMTRweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogInN0YXRpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3JkZXJ0eXBlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5ieWhhbmQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IHNoYXJlLXRvdGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmJ1eVNhaHJlUGVyY2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJidXlTYWhyZVBlcmNlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAic2hhcmUtaW5wdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBlLiR0KCJsZXZlci5waGFuZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5idXlTYWhyZVBlcmNlbnQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuYnV5U2FocmVQZXJjZW50ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jaGFuZ2VWYWx1ZUFtb3VudCgiYnV5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAyNSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IDUwIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogNzUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAxMDAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0LnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogWyJzaGFyZTIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdEFtb3VudCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudmFsdWUpICsgIiUiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImxldmVyLXRvdGFsIGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQxNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHt9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5jb250cmFjdFZhbCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWFya2V0LXZhbHVlIGZyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuKJiCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS50b3RhbFByaWNlQnV5IHx8ICIwLjAwMDAiKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmxlZ2FsX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHt9LCBbZS5fdihlLl9zKGUuJHQoImxldmVyLmJhaWwiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImJvbmQgZnIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi4omIICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmJvbnNCdXkgfHwgIjAuMDAwMCIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDEwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwge30sIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuY2hhcmdlIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ0cmFuc2FjdGlvbi1mZWUgZnIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi4omIICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLnRyYW5kZUZyZWVCdXkgfHwgIjAuMDAwMCIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGxfYnRuIGN1clBlciAgdGMgZ3JlZW5CYWNrIG10NDAgZkNvbG9yMSBmdDE2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLmJ1eUNvaW4gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgibGV2ZXIuZG9tb3JlIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY3VycmVuY3lfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICJzZWxsIiA9PSBlLm9wdHlwZQogICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ3MTAwIGZsIHNlY29uZCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5hZGRyZXNzLmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImF2YWlsYWJsZSBjbGVhciBmQ29sb3IxIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlQ29sb3IgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvTmV4dCgibG9naW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibG9naW5zIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJjZW50ZXIub3IiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoInJlZ2lzdGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInJlZ2lzdGVycyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiaG9tZS50b1RyYWRlIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5wdXQtaXRlbSBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHt9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIHsgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5zZWxlY3RlZFN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuc2VsbElucHV0VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0ZWRTdGF0dXM9PTE/YmVzdFByaWNlOnNlbGxJbnB1dFZhbHVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEwMCUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAxID09IGUuc2VsZWN0ZWRTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoImxldmVyLnBwcmljZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSBlLnNlbGVjdGVkU3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5iZXN0UHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnNlbGxJbnB1dFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA9PSBlLnNlbGVjdGVkU3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuYmVzdFByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChlLnNlbGxJbnB1dFZhbHVlID0gdC50YXJnZXQudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jaGFuZ2VQcmljZSgic2VsbCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCB7IHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIudGltZWQiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5zZWxsSW5mby5zZWxsX3NlbGVjdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAic2VsbF9tdWx0aXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gQXJyYXkucHJvdG90eXBlLmZpbHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHQudGFyZ2V0Lm9wdGlvbnMsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl92YWx1ZSIgaW4gZSA/IGUuX3ZhbHVlIDogZS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zZWxsSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsbF9zZWxlY3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQubXVsdGlwbGUgPyBhIDogYVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdE11aXQoInNlbGwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyBkaXNhYmxlZDogIiIsIHZhbHVlOiAiIiB9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5wdGltZXMiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUubXVsdGlwbGUsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBpLCBkb21Qcm9wczogeyB2YWx1ZTogdC52YWx1ZSB9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyh0LnZhbHVlKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImxldmVyLnRpbWVzIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgZS5zaGFyZU51bQogICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInNoYXJlTnVtIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAxIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImhhbmQiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJsZXZlci5lcXVhbCIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b2ZpeGVkIikoZS5zaGFyZU51bSAqIGUubmV3UHJpY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubGVnYWxfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAxID09IGUub3JkZXJ0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQxMCBpbnB1dC1pdGVtIGNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXgxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogZS5taW5Gb250CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJmb250LXNpemU6MTBweCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImZvbnQtc2l6ZToxNHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5oYW5kcyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIGFjdGl2ZSBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9udC1zaXplIjogIjE0cHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICJzdGF0aWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9yZGVydHlwZSA9IDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuYnV5YW1vdW50IikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCBzaGFyZS10b3RhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEwMCUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5zZWxsU2hhcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAic2VsbFNoYXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInNoYXJlLWlucHV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgicGJ1eW51bSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5zZWxsU2hhcmUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuc2VsbFNoYXJlID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZVZhbHVlKCJzZWxsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5zaGFyZUxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHQudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhcmUyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhY3RpdmVzOiBlLnR5cGVzID09IHQudmFsdWUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3QodC52YWx1ZSwgInNlbGwiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudmFsdWUpICsgZS5fcyhlLiR0KCJoYW5kIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgMiA9PSBlLm9yZGVydHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10MTAgaW5wdXQtaXRlbSBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEwMCUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IGUubWluRm9udAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiZm9udC1zaXplOjEwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJmb250LXNpemU6MTRweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuYW1vdW50IikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZDb2xvcjEgYWN0aXZlIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250LXNpemUiOiAiMTRweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogInN0YXRpYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3JkZXJ0eXBlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5ieWhhbmQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IHNoYXJlLXRvdGFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTAwJSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnNlbGxTaGFyZVBlcmNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAic2VsbFNoYXJlUGVyY2VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJzaGFyZS1pbnB1dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICJQbGVhc2UgaW5wdXQgc2VsbCBhbW91bnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5zZWxsU2hhcmVQZXJjZW50IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLnNlbGxTaGFyZVBlcmNlbnQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZVZhbHVlQW1vdW50KCJzZWxsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAyNSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IDUwIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogNzUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiAxMDAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0LnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogWyJzaGFyZTIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdEFtb3VudCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyh0LnZhbHVlKSArICIlIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsZXZlci10b3RhbCBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJjbGVhcmZpeCBtdDE1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwge30sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmNvbnRyYWN0VmFsIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJtYXJrZXQtdmFsdWUgZnIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi4omIICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLnRvdGFsUHJpY2UgfHwgIjAuMDAwMCIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXJmaXggbXQxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHt9LCBbZS5fdihlLl9zKGUuJHQoImxldmVyLmJhaWwiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImJvbmQgZnIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi4omIICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmJvbnMgfHwgIjAuMDAwMCIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXJmaXggbXQxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHt9LCBbZS5fdihlLl9zKGUuJHQoImxldmVyLmNoYXJnZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidHJhbnNhY3Rpb24tZmVlIGZyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuKJiCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS50cmFuZGVGcmVlIHx8ICIwLjAwMDAiKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmxlZ2FsX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxsX2J0biBjdXJQZXIgIHRjIHJlZEJhY2sgbXQ0MCBmQ29sb3IxIGZ0MTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuc2VsbENvaW4gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgibGV2ZXIuZG9zaG9ydCIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmN1cnJlbmN5X25hbWUpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICBlLnNob3dOb25lCiAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQgY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ3NTAgZmwgZmlyc3QiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLmFkZHJlc3MubGVuZ3RoIDw9IDAKICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImF2YWlsYWJsZSBjbGVhciBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlQ29sb3IgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvTmV4dCgibG9naW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibG9naW5zIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJjZW50ZXIub3IiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoInJlZ2lzdGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInJlZ2lzdGVycyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiaG9tZS50b1RyYWRlIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNsZWFyIGF2YWlsYWJsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJsZXZlci5jYW51c2UiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLnVzZXJfY3VycmVuY3kpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jdXJyZW5jeV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10NDAgaW5wdXQtaXRlbSBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5idXlwcmljZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiJHQoJ2xvd2J1eScpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS50eXBlLmluZGV4T2YoImtleSIpICYmIDY5ICE9PSBlLmtleUNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuY3VycmVuY3lfbmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10NDAgaW5wdXQtaXRlbSBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCBbZS5fdihlLl9zKGUuJHQoImNlbnRlci5idXludW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogIm51bWJlciIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLnR5cGUuaW5kZXhPZigia2V5IikgJiYgNjkgIT09IGUua2V5Q29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLm51bUZpbHRlcih0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmxlZ2FsX25hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGxfYnRuIGN1clBlciBtdDQwIHRjIGdyZWVuQmFjayBmQ29sb3IxIGZ0MTYiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImxldmVyLmRvbW9yZSIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY3VycmVuY3lfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ3NTAgZmwgc2Vjb25kIiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmdDE0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5hZGRyZXNzLmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhdmFpbGFibGUgY2xlYXIgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05leHQoImxvZ2luIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxvZ2lucyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiY2VudGVyLm9yIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImJhc2VDb2xvciBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29OZXh0KCJyZWdpc3RlciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJyZWdpc3RlcnMiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImhvbWUudG9UcmFkZSIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICA6IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjbGVhciBhdmFpbGFibGUiIH0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDQwIGlucHV0LWl0ZW0gY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImxhYmVsIiwgW2UuX3YoZS5fcyhlLiR0KCJjZW50ZXIuc2VsbHByaWNlIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJudW1iZXIiLCBkaXNhYmxlZDogIiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuJHQoImJlc3RzZWxsIikgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLnR5cGUuaW5kZXhPZigia2V5IikgJiYgNjkgIT09IGUua2V5Q29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5jdXJyZW5jeV9uYW1lKSldKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQ0MCBpbnB1dC1pdGVtIGNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJsYWJlbCIsIFtlLl92KGUuX3MoZS4kdCgiY2VudGVyLnNlbGxudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogIm51bWJlciIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLnR5cGUuaW5kZXhPZigia2V5IikgJiYgNjkgIT09IGUua2V5Q29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLm51bUZpbHRlcih0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmxlZ2FsX25hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGxfYnRuIGN1clBlciBtdDQwIHRjIHJlZEJhY2sgZkNvbG9yMSBmdDE2IiwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJsZXZlci5kb3Nob3J0IikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jdXJyZW5jeV9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pCiAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgYSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmNvbWZpcm1TaG93LAogICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiY29tZmlybVNob3ciLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29tZmlybS1tb2RhbCBmbGV4IiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb21maXJtLW1vZGFsLWNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsb3NzLW1vZGFsLWhlYWRlciIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJoMyIsIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuc3VyZU9kIikpKV0pLAogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jbG9zZU1vc2FsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgW2EoImkiLCB7IHN0YXRpY0NsYXNzOiAiZWwtaWNvbi1jbG9zZSIgfSldCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoInVsIiwgWwogICAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLmN1cnJlbmN5X25hbWUpICsgIi8iICsgZS5fcyhlLmxlZ2FsX25hbWUpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci50eXBlIikpICsgIu+8miIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID09IGUuYnV5VHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLiR0KCJsZXZlci5kbW9yZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuJHQoImxldmVyLmRzaG9ydCIpCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuaGFuZHMiKSkgKyAi77yaIildKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKCIxIiA9PSBlLmJ1eVR5cGUgPyBlLmJ1eVNhaHJlIDogZS5zZWxsU2hhcmUpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci50aW1lZCIpKSArICLvvJoiKV0pLAogICAgICAgICAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9PSBlLmJ1eVR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5idXlJbmZvLmJ1eV9zZWxlY3RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5iYWlsIikpICsgIu+8miIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoIjEiID09IGUuYnV5VHlwZSA/IGUuYm9uc0J1eSA6IGUuYm9ucykgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5sZWdhbF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5jaGFyZ2UiKSkgKyAi77yaIildKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPT0gZS5idXlUeXBlID8gZS50cmFuZGVGcmVlQnV5IDogZS50cmFuZGVGcmVlCiAgICAgICAgICAgICAgICAgICAgICAgICkgKyBlLl9zKGUubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogIm1vZGFsLWJ0biIgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZWwtYnV0dG9uLWdyb3VwIiwKICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiwgaGVpZ2h0OiAiNDBweCIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBhZGRpbmc6ICIwIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2l6ZTogIm1lZGl1bSIsIHR5cGU6ICJpbmZvIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2xvc2VNb3NhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgidGQuY2FuY2VpbCIpKSArICIgIildCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLWJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcGFkZGluZzogIjAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiAibWVkaXVtIiwgdHlwZTogInByaW1hcnkiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jb21maXJtKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ0ZC5jb25maXJtIikpICsgIiAiKV0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXQogICAgICAgICAgKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgWWEgPSBbXSwKICAgICAgWGEgPSB7CiAgICAgICAgbmFtZTogInRyYWRlIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzcHJlYWRJbmZvOiBbXSwKICAgICAgICAgICAgY3VycmVuY3lRSW5mbzogbnVsbCwKICAgICAgICAgICAgb3JkZXJ0eXBlOiAyLAogICAgICAgICAgICBiZXN0UHJpY2U6IHRoaXMuJHQoImxldmVyLmJlc3RwcmljZSIpLAogICAgICAgICAgICBjdXJyZW5jeV9uYW1lOiAiIiwKICAgICAgICAgICAgY3VycmVuY3lfaWQ6ICIiLAogICAgICAgICAgICBsZWdhbF9uYW1lOiAiIiwKICAgICAgICAgICAgbGVnYWxfaWQ6ICIiLAogICAgICAgICAgICBtdWx0aXBsZTogIiIsCiAgICAgICAgICAgIHVzZXJfY3VycmVuY3k6ICIiLAogICAgICAgICAgICB1c2VyX2xlZ2FsOiAiIiwKICAgICAgICAgICAgc2hvdzogITAsCiAgICAgICAgICAgIHNob3dOb25lOiAhMSwKICAgICAgICAgICAgYWxsQmFsYW5jZTogMCwKICAgICAgICAgICAgYnV5SW5mbzogeyBidXlfc2VsZWN0ZWQ6ICIiLCBidXlOdW06IDAsIHVybDogImxldmVyL3N1Ym1pdCIgfSwKICAgICAgICAgICAgc2VsbEluZm86IHsgc2VsbF9zZWxlY3RlZDogIiIsIHNlbGxOdW06IDAsIHVybDogImxldmVyL3N1Ym1pdCIgfSwKICAgICAgICAgICAgdHlwZTogIiIsCiAgICAgICAgICAgIHR5cGVzOiAiIiwKICAgICAgICAgICAgc2hhcmVzOiAwLAogICAgICAgICAgICBib25zOiAiIiwKICAgICAgICAgICAgdG90YWxQcmljZTogIiIsCiAgICAgICAgICAgIHRyYW5kZUZyZWU6ICIiLAogICAgICAgICAgICBib25zQnV5OiAiIiwKICAgICAgICAgICAgdG90YWxQcmljZUJ1eTogIiIsCiAgICAgICAgICAgIHRyYW5kZUZyZWVCdXk6ICIiLAogICAgICAgICAgICBsYXN0UHJpY2U6ICIiLAogICAgICAgICAgICBidXlUeXBlOiAiIiwKICAgICAgICAgICAgY29tZmlybVNob3c6ICExLAogICAgICAgICAgICBzaGFyZUxpc3Q6IFtdLAogICAgICAgICAgICBidXlTYWhyZTogIiIsCiAgICAgICAgICAgIGJ1eVNhaHJlUGVyY2VudDogMCwKICAgICAgICAgICAgc2VsbFNoYXJlOiAiIiwKICAgICAgICAgICAgc2VsbFNoYXJlUGVyY2VudDogMCwKICAgICAgICAgICAgaW5wdXRQcmljZTogMCwKICAgICAgICAgICAgc2VsZWN0VHlwZTogIiIsCiAgICAgICAgICAgIHNlbGVjdGVkU3RhdHVzOiAxLAogICAgICAgICAgICBuZXdQcmljZTogMCwKICAgICAgICAgICAgcHByaWNlOiAwLAogICAgICAgICAgICBzZWxsSW5wdXRWYWx1ZTogMCwKICAgICAgICAgICAgbWluU2hhcmU6IDEsCiAgICAgICAgICAgIG1heFNoYXJlOiAwLAogICAgICAgICAgICBzaGFyZU51bTogIiIsCiAgICAgICAgICAgIG1pbkZvbnQ6ICExLAogICAgICAgICAgICBvcHR5cGU6ICJidXkiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuYWRkcmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9maXhlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICAgIHRvZml4ZWRGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gdGhpczsKICAgICAgICAgICh0LmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIiksCiAgICAgICAgICAgICh0LmxlZ2FsX2lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIikpLAogICAgICAgICAgICAodC5jdXJyZW5jeV9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpKSwKICAgICAgICAgICAgKHQubGVnYWxfbmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsZWdhbF9uYW1lIikpLAogICAgICAgICAgICAodC5jdXJyZW5jeV9uYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImN1cnJlbmN5X25hbWUiKSksCiAgICAgICAgICAgIHQuYnV5X3NlbGwodC5sZWdhbF9pZCwgdC5jdXJyZW5jeV9pZCksCiAgICAgICAgICAgICh0Lm1pbkZvbnQgPSB0LnVzZU1pbkZvbnQoKSksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidG9jZWwiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGUgJiYgdC5idXlfc2VsbCh0LmxlZ2FsX2lkLCB0LmN1cnJlbmN5X2lkKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidXBkYXRlS0xpbmUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICIxbWluIiA9PT0gZS5wZXJpb2QgJiYKICAgICAgICAgICAgICAgICgwID09PSB0Lm5ld1ByaWNlCiAgICAgICAgICAgICAgICAgID8gKCh0Lm5ld1ByaWNlID0gKGUuY2xvc2UgLSAwKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgICAodC5pbnB1dFByaWNlID0gdC5uZXdQcmljZSksCiAgICAgICAgICAgICAgICAgICAgKHQuc2VsbElucHV0VmFsdWUgPSB0Lm5ld1ByaWNlKSkKICAgICAgICAgICAgICAgICAgOiAodC5uZXdQcmljZSA9IChlLmNsb3NlIC0gMCkudG9GaXhlZCg0KSkpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jdXJyZW5jeS9xdW90YXRpb25fbmV3IiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgIHQuc3ByZWFkSW5mbyA9IGEuZGF0YS5tZXNzYWdlWzBdLnF1b3RhdGlvbjsKICAgICAgICAgICAgICB2YXIgaSA9IHQuc3ByZWFkSW5mbzsKICAgICAgICAgICAgICBmb3IgKHZhciBuIGluIGkpCiAgICAgICAgICAgICAgICB0LmN1cnJlbmN5X2lkID09IGlbbl0uY3VycmVuY3lfaWQgJiYgKGUuY3VycmVuY3lRSW5mbyA9IGlbbl0pOwogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIG51bUZpbHRlcjogZnVuY3Rpb24gKGUpIHt9LAogICAgICAgICAgdXNlTWluRm9udDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsb2NhbGUiKSB8fCAiIjsKICAgICAgICAgICAgcmV0dXJuICJlbiIgPT0gZTsKICAgICAgICAgIH0sCiAgICAgICAgICBvcGVuSW5wdXROdW1iZXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgMSA9PSBlICYmCiAgICAgICAgICAgICAgdGhpcy4kcHJvbXB0KCLor7fovpPlhaXkuIvljZXph5Hpop0iLCAi6YeR6aKd6Ieq5Yqo5oqY566X5omL5pWwIiwgewogICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLAogICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgICAgICAgICBpbnB1dFBhdHRlcm46CiAgICAgICAgICAgICAgICAgIC9bXHchIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLltcdyEjJCUmJyorLz0/Xl9ge3x9fi1dKykqQCg/Oltcd10oPzpbXHctXSpbXHddKT9cLikrW1x3XSg/Oltcdy1dKltcd10pPy8sCiAgICAgICAgICAgICAgICBpbnB1dEVycm9yTWVzc2FnZTogIumCrueuseagvOW8j+S4jeato+ehriIsCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhID0gZS52YWx1ZTsKICAgICAgICAgICAgICAgICAgdC4kbWVzc2FnZSh7IHR5cGU6ICJzdWNjZXNzIiwgbWVzc2FnZTogIuS9oOeahOmCrueuseaYrzogIiArIGEgfSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBjaGFuZ2VUeXBlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuc2hvdyA9ICF0aGlzLnNob3c7CiAgICAgICAgICB9LAogICAgICAgICAgZ29OZXh0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6IGUgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgYnV5Q29pbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICIiICE9IGUuYnV5SW5mby5idXlfc2VsZWN0ZWQKICAgICAgICAgICAgICA/IDAgIT0gZS5zZWxlY3RlZFN0YXR1cyB8fCAiIiAhPSBlLmlucHV0UHJpY2UKICAgICAgICAgICAgICAgID8gZS5idXlTYWhyZSA8IGUubWluU2hhcmUKICAgICAgICAgICAgICAgICAgPyBsYXllci5tc2coZS4kdCgibGF5Lmxlc3NudW0iKSArIGUubWluU2hhcmUpCiAgICAgICAgICAgICAgICAgIDogZS5idXlTYWhyZSA+IGUubWF4U2hhcmUKICAgICAgICAgICAgICAgICAgPyBsYXllci5tc2coZS4kdCgibGF5Lm1vcmVudW0iKSArIGUubWF4U2hhcmUpCiAgICAgICAgICAgICAgICAgIDogKChlLmNvbWZpcm1TaG93ID0gITApLCAoZS5idXlUeXBlID0gMSkpCiAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLiR0KCJsZXZlci5wcHJpY2UiKSkKICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLiR0KCJsZXZlci5wdGltZXMiKSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2VsbENvaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAiIiAhPSB0aGlzLnNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQKICAgICAgICAgICAgICA/IDAgIT0gZS5zZWxlY3RlZFN0YXR1cyB8fCAiIiAhPSBlLnNlbGxJbnB1dFZhbHVlCiAgICAgICAgICAgICAgICA/IGUuc2VsbFNoYXJlIDwgZS5taW5TaGFyZQogICAgICAgICAgICAgICAgICA/IGxheWVyLm1zZyhlLiR0KCJsYXkubGVzc251bSIpICsgZS5taW5TaGFyZSkKICAgICAgICAgICAgICAgICAgOiBlLnNlbGxTaGFyZSA+IGUubWF4U2hhcmUKICAgICAgICAgICAgICAgICAgPyBsYXllci5tc2coZS4kdCgibGF5Lm1vcmVudW0iKSArIGUubWF4U2hhcmUpCiAgICAgICAgICAgICAgICAgIDogKChlLmNvbWZpcm1TaG93ID0gITApLCAoZS5idXlUeXBlID0gMikpCiAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLiR0KCJsZXZlci5wcHJpY2UiKSkKICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLiR0KCJsZXZlci5wdGltZXMiKSk7CiAgICAgICAgICB9LAogICAgICAgICAgYnV5X3NlbGw6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9kZWFsIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGxlZ2FsX2lkOiBlLCBjdXJyZW5jeV9pZDogdCB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgICAoKGEubXVsdGlwbGUgPSBlLmRhdGEubWVzc2FnZS5tdWx0aXBsZS5tdWl0KSwKICAgICAgICAgICAgICAgICAgKGEudXNlcl9jdXJyZW5jeSA9IGUuZGF0YS5tZXNzYWdlLmFsbF9sZXZlcnMpLAogICAgICAgICAgICAgICAgICAoYS51c2VyX2xlZ2FsID0gZS5kYXRhLm1lc3NhZ2UudXNlcl9sZXZlciksCiAgICAgICAgICAgICAgICAgIChhLmxhc3RQcmljZSA9IGUuZGF0YS5tZXNzYWdlLmxhc3RfcHJpY2UpLAogICAgICAgICAgICAgICAgICAoYS5zaGFyZUxpc3QgPSBlLmRhdGEubWVzc2FnZS5tdWx0aXBsZS5zaGFyZSksCiAgICAgICAgICAgICAgICAgIChhLm1pblNoYXJlID0gZS5kYXRhLm1lc3NhZ2UubGV2ZXJfc2hhcmVfbGltaXQubWluKSwKICAgICAgICAgICAgICAgICAgKGEubWF4U2hhcmUgPSBlLmRhdGEubWVzc2FnZS5sZXZlcl9zaGFyZV9saW1pdC5tYXgpLAogICAgICAgICAgICAgICAgICAoYS5idXlJbmZvLmJ1eVByaWNlID0gMCksCiAgICAgICAgICAgICAgICAgIChhLmJ1eUluZm8uYnV5TnVtID0gMCksCiAgICAgICAgICAgICAgICAgIChhLnR5cGUgPSBhLnNoYXJlTGlzdFswXS52YWx1ZSksCiAgICAgICAgICAgICAgICAgIChhLnR5cGVzID0gYS5zaGFyZUxpc3RbMF0udmFsdWUpLAogICAgICAgICAgICAgICAgICAoYS5zZWxsU2hhcmUgPSBhLnR5cGVzKSwKICAgICAgICAgICAgICAgICAgKGEuYnV5U2FocmUgPSBhLnR5cGUpKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIHNlbGVjdDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgKChhLnNoYXJlcyA9IGUpLAogICAgICAgICAgICAgICJidXkiID09IHQKICAgICAgICAgICAgICAgID8gKChhLnR5cGUgPSBlKSwgKGEuYnV5U2FocmUgPSBlKSkKICAgICAgICAgICAgICAgIDogKChhLnR5cGVzID0gZSksIChhLnNlbGxTaGFyZSA9IGUpKSwKICAgICAgICAgICAgICAwICE9IGEuc2VsZWN0ZWRTdGF0dXMpCiAgICAgICAgICAgICkKICAgICAgICAgICAgICBpZiAoInNlbGwiID09IHQgJiYgIiIgIT0gYS5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHBhcnNlRmxvYXQobG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhc3RQcmljZSIpKS50b0ZpeGVkKAogICAgICAgICAgICAgICAgICAgIDQKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgbiA9IHBhcnNlRmxvYXQoYS5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpLAogICAgICAgICAgICAgICAgICBzID0gcGFyc2VGbG9hdChlKS50b0ZpeGVkKDQpOwogICAgICAgICAgICAgICAgYS5wcmljZXNUeXBlKGksIHQsIHMsIG4pOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoImJ1eSIgPT0gdCAmJiAiIiAhPSBhLmJ1eUluZm8uYnV5X3NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQobG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhc3RQcmljZSIpKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKG4gPSBwYXJzZUZsb2F0KGEuYnV5SW5mby5idXlfc2VsZWN0ZWQpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAocyA9IHBhcnNlRmxvYXQoZSkudG9GaXhlZCg0KSk7CiAgICAgICAgICAgICAgICBhLnByaWNlc1R5cGUoaSwgdCwgcywgbik7CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAoYS50b3RhbFByaWNlQnV5ID0gMCksIChhLnRyYW5kZUZyZWVCdXkgPSAwKSwgKGEuYm9uc0J1eSA9IDApOwogICAgICAgICAgICBlbHNlIGlmICgic2VsbCIgPT0gdCAmJiAiIiAhPSBhLnNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICBpZiAoIiIgIT0gYS5zZWxsSW5wdXRWYWx1ZSkgewogICAgICAgICAgICAgICAgKGkgPSBwYXJzZUZsb2F0KGEuc2VsbElucHV0VmFsdWUpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAobiA9IHBhcnNlRmxvYXQoYS5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKHMgPSBwYXJzZUZsb2F0KGUpLnRvRml4ZWQoNCkpOwogICAgICAgICAgICAgICAgYS5wcmljZXNUeXBlKGksIHQsIHMsIG4pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmICgiYnV5IiA9PSB0ICYmICIiICE9IGEuYnV5SW5mby5idXlfc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICBpZiAoIiIgIT0gYS5pbnB1dFByaWNlKSB7CiAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQoYS5pbnB1dFByaWNlKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKG4gPSBwYXJzZUZsb2F0KGEuYnV5SW5mby5idXlfc2VsZWN0ZWQpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAocyA9IHBhcnNlRmxvYXQoZSkudG9GaXhlZCg0KSk7CiAgICAgICAgICAgICAgICBhLnByaWNlc1R5cGUoaSwgdCwgcywgbik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAoYS50b3RhbFByaWNlQnV5ID0gMCksIChhLnRyYW5kZUZyZWVCdXkgPSAwKSwgKGEuYm9uc0J1eSA9IDApOwogICAgICAgICAgfSwKICAgICAgICAgIHNlbGVjdEFtb3VudDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVOdW0gPD0gMCkKICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcodGhpcy4kdCgibGV2ZXIucHRpbWVzIikpOwogICAgICAgICAgICBlbHNlIGlmICgoZSA+IDk5LjkgJiYgKGUgPSA5OS45KSwgImJ1eSIgPT0gdCkpIHsKICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMubGFzdFByaWNlICogdGhpcy5zaGFyZU51bSwKICAgICAgICAgICAgICAgIGkgPSB0aGlzLmJ1eUluZm8uYnV5X3NlbGVjdGVkLAogICAgICAgICAgICAgICAgbiA9ICgoZSAvIDEwMCkgKiB0aGlzLnVzZXJfbGVnYWwpLnRvRml4ZWQoMiksCiAgICAgICAgICAgICAgICBzID0gMC4wMSAqIHRoaXMuY3VycmVuY3lRSW5mby5sZXZlcl90cmFkZV9mZWU7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coImRkZCIsIHRoaXMubGFzdFByaWNlICogdGhpcy5zaGFyZU51bSksCiAgICAgICAgICAgICAgICAodGhpcy5idXlTYWhyZVBlcmNlbnQgPSBuKTsKICAgICAgICAgICAgICB2YXIgbyA9IG4gLyAoYSAvIGkgKyBhICogcyk7CiAgICAgICAgICAgICAgKHRoaXMuYnV5U2FocmUgPSBwYXJzZUludChvKSksIHRoaXMuY2hhbmdlVmFsdWUoImJ1eSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHZhciByID0gdGhpcy5sYXN0UHJpY2UgKiB0aGlzLnNoYXJlTnVtLAogICAgICAgICAgICAgICAgbCA9IHRoaXMuc2VsbEluZm8uc2VsbF9zZWxlY3RlZCwKICAgICAgICAgICAgICAgIGMgPSAoKGUgLyAxMDApICogdGhpcy51c2VyX2xlZ2FsKS50b0ZpeGVkKDIpLAogICAgICAgICAgICAgICAgZCA9IDAuMDEgKiB0aGlzLmN1cnJlbmN5UUluZm8ubGV2ZXJfdHJhZGVfZmVlOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJkZGQiLCB0aGlzLmxhc3RQcmljZSAqIHRoaXMuc2hhcmVOdW0pLAogICAgICAgICAgICAgICAgKHRoaXMuc2VsbFNoYXJlUGVyY2VudCA9IGMpOwogICAgICAgICAgICAgIHZhciB1ID0gYyAvIChyIC8gbCArIHIgKiBkKTsKICAgICAgICAgICAgICAodGhpcy5zZWxsU2hhcmUgPSBwYXJzZUludCh1KSksIHRoaXMuY2hhbmdlVmFsdWUoInNlbGwiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHByaWNlc1R5cGU6IGZ1bmN0aW9uIChlLCB0LCBhLCBpKSB7CiAgICAgICAgICAgIHZhciBuID0gdGhpcywKICAgICAgICAgICAgICBzID0gbGF5ZXIubG9hZCgxKTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9jdXJyZW5jeS9xdW90YXRpb25fbmV3IiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocykgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gcy5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIG8gPSBzLmRhdGEubWVzc2FnZVswXS5xdW90YXRpb247CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgaW4gbykKICAgICAgICAgICAgICAgICAgICBpZiAobi5jdXJyZW5jeV9pZCA9PSBvW3JdLmN1cnJlbmN5X2lkKSB7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHBhcnNlRmxvYXQob1tyXS5zcHJlYWQpLnRvRml4ZWQoNCksCiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBwYXJzZUZsb2F0KG9bcl0ubGV2ZXJfdHJhZGVfZmVlKS50b0ZpeGVkKDQpLAogICAgICAgICAgICAgICAgICAgICAgICBkID0gcGFyc2VGbG9hdCgocGFyc2VGbG9hdCgxICogZSkgKiBsKSAvIDEwMCkudG9GaXhlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICA0CiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIHUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgKHUgPQogICAgICAgICAgICAgICAgICAgICAgICAic2VsbCIgPT0gdAogICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFyc2VGbG9hdChwYXJzZUZsb2F0KDEgKiBlKSAtIChkIC0gMCkpLnRvRml4ZWQoNCkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IHBhcnNlRmxvYXQocGFyc2VGbG9hdCgxICogZSkgKyAoZCAtIDApKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgKGkgPSBwYXJzZUZsb2F0KGkpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAgICAgICAoYSA9IHBhcnNlRmxvYXQoYSkudG9GaXhlZCg0KSk7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHBhcnNlRmxvYXQob1tyXS5sZXZlcl9zaGFyZV9udW0pLnRvRml4ZWQoNCk7CiAgICAgICAgICAgICAgICAgICAgICBuLnNoYXJlTnVtID0gbTsKICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gcGFyc2VGbG9hdCh1ICogYSAqIG0pLnRvRml4ZWQoNCksCiAgICAgICAgICAgICAgICAgICAgICAgIGggPSBwYXJzZUZsb2F0KChwIC0gMCkgLyAoaSAtIDApKS50b0ZpeGVkKDQpLAogICAgICAgICAgICAgICAgICAgICAgICBmID0gcGFyc2VGbG9hdCgocCAqIGMpIC8gMTAwKS50b0ZpeGVkKDQpOwogICAgICAgICAgICAgICAgICAgICAgImJ1eSIgPT0gdAogICAgICAgICAgICAgICAgICAgICAgICA/ICgobi50b3RhbFByaWNlQnV5ID0gKGUgKiBhICogbSkudG9GaXhlZCg0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG4udHJhbmRlRnJlZUJ1eSA9IGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChuLmJvbnNCdXkgPSBoKSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAoKG4udG90YWxQcmljZSA9IChlICogYSAqIG0pLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChuLnRyYW5kZUZyZWUgPSBmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAobi5ib25zID0gaCkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBsYXllci5jbG9zZShzKTsKICAgICAgICAgICAgICB9LCAxNTAwKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZWxlY3RNdWl0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIGlmICgwICE9IHQuc2VsZWN0ZWRTdGF0dXMpCiAgICAgICAgICAgICAgaWYgKCJzZWxsIiA9PSBlICYmICIiICE9IHQuc2VsbFNoYXJlKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHBhcnNlRmxvYXQobG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhc3RQcmljZSIpKS50b0ZpeGVkKAogICAgICAgICAgICAgICAgICAgIDQKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgaSA9IHBhcnNlRmxvYXQodC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpLAogICAgICAgICAgICAgICAgICBuID0gcGFyc2VGbG9hdCh0LnNlbGxTaGFyZSkudG9GaXhlZCg0KTsKICAgICAgICAgICAgICAgIHQucHJpY2VzVHlwZShhLCBlLCBuLCBpKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJidXkiID09IGUgJiYgIiIgIT0gdC5idXlTYWhyZSkgewogICAgICAgICAgICAgICAgKGEgPSBwYXJzZUZsb2F0KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsYXN0UHJpY2UiKSkudG9GaXhlZCg0KSksCiAgICAgICAgICAgICAgICAgIChpID0gcGFyc2VGbG9hdCh0LmJ1eUluZm8uYnV5X3NlbGVjdGVkKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKG4gPSBwYXJzZUZsb2F0KHQuYnV5U2FocmUpLnRvRml4ZWQoNCkpOwogICAgICAgICAgICAgICAgdC5wcmljZXNUeXBlKGEsIGUsIG4sIGkpOwogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgKHQudG90YWxQcmljZUJ1eSA9IDApLCAodC50cmFuZGVGcmVlQnV5ID0gMCksICh0LmJvbnNCdXkgPSAwKTsKICAgICAgICAgICAgZWxzZSBpZiAoInNlbGwiID09IGUgJiYgIiIgIT0gdC5zZWxsU2hhcmUpIHsKICAgICAgICAgICAgICBpZiAoIiIgIT0gdC5zZWxsSW5wdXRWYWx1ZSkgewogICAgICAgICAgICAgICAgKGEgPSBwYXJzZUZsb2F0KHQuc2VsbElucHV0VmFsdWUpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQodC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKG4gPSBwYXJzZUZsb2F0KHQuc2VsbFNoYXJlKS50b0ZpeGVkKDQpKTsKICAgICAgICAgICAgICAgIHQucHJpY2VzVHlwZShhLCBlLCBuLCBpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoImJ1eSIgPT0gZSAmJiAiIiAhPSB0LnNlbGxTaGFyZSkgewogICAgICAgICAgICAgIGlmICgiIiAhPSB0LmlucHV0UHJpY2UpIHsKICAgICAgICAgICAgICAgIChhID0gcGFyc2VGbG9hdCh0LmlucHV0UHJpY2UpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQodC5idXlJbmZvLmJ1eV9zZWxlY3RlZCkudG9GaXhlZCg0KSksCiAgICAgICAgICAgICAgICAgIChuID0gcGFyc2VGbG9hdCh0LmJ1eVNhaHJlKS50b0ZpeGVkKDQpKTsKICAgICAgICAgICAgICAgIHQucHJpY2VzVHlwZShhLCBlLCBuLCBpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICh0LnRvdGFsUHJpY2VCdXkgPSAwKSwgKHQudHJhbmRlRnJlZUJ1eSA9IDApLCAodC5ib25zQnV5ID0gMCk7CiAgICAgICAgICAgICh0aGlzLnNlbGxTaGFyZVBlcmNlbnQgPSAwKSwgKHRoaXMuYnV5U2FocmVQZXJjZW50ID0gMCk7CiAgICAgICAgICB9LAogICAgICAgICAgY2hhbmdlVmFsdWU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gL15bMS05XSpbMC05XVswLTldKiQvOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgKCh0LnRvdGFsUHJpY2VCdXkgPSAwKSwKICAgICAgICAgICAgICAodC50cmFuZGVGcmVlQnV5ID0gMCksCiAgICAgICAgICAgICAgKHQuYm9uc0J1eSA9IDApLAogICAgICAgICAgICAgICh0LnRvdGFsUHJpY2UgPSAwKSwKICAgICAgICAgICAgICAodC50cmFuZGVGcmVlID0gMCksCiAgICAgICAgICAgICAgKHQuYm9ucyA9IDApLAogICAgICAgICAgICAgICJzZWxsIiA9PSBlKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICBpZiAoKCh0LnR5cGVzID0gIi0xIiksICIiID09IHQuc2VsbFNoYXJlKSkgcmV0dXJuOwogICAgICAgICAgICAgIGlmICghYS50ZXN0KHQuc2VsbFNoYXJlKSkKICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIGxheWVyLm1zZyh0LiR0KCJsZXZlci56aGVuZyIpKTsKICAgICAgICAgICAgICBpZiAodC5zZWxsU2hhcmUgPCB0Lm1pblNoYXJlKQogICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgbGF5ZXIubXNnKHQuJHQoImxheS5sZXNzbnVtIikgKyB0Lm1pblNoYXJlKTsKICAgICAgICAgICAgICBpZiAodC5tYXhTaGFyZSA+IDAgJiYgdC5zZWxsU2hhcmUgPiB0Lm1heFNoYXJlKQogICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgbGF5ZXIubXNnKHQuJHQoImxheS5tb3JlbnVtIikgKyB0Lm1heFNoYXJlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoKCh0LnR5cGUgPSAiLTEiKSwgIiIgPT0gdC5idXlTYWhyZSkpIHJldHVybjsKICAgICAgICAgICAgICBpZiAoIWEudGVzdCh0LmJ1eVNhaHJlKSkKICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIGxheWVyLm1zZyh0LiR0KCJsZXZlci56aGVuZyIpKTsKICAgICAgICAgICAgICBpZiAodC5idXlTYWhyZSA8IHQubWluU2hhcmUpCiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCBsYXllci5tc2codC4kdCgibGF5Lmxlc3NudW0iKSArIHQubWluU2hhcmUpOwogICAgICAgICAgICAgIGlmICh0Lm1heFNoYXJlID4gMCAmJiB0LmJ1eVNhaHJlID4gdC5tYXhTaGFyZSkKICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIGxheWVyLm1zZyh0LiR0KCJsYXkubW9yZW51bSIpICsgdC5tYXhTaGFyZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKDAgIT0gdC5zZWxlY3RlZFN0YXR1cykKICAgICAgICAgICAgICBpZiAoInNlbGwiID09IGUgJiYgIiIgIT0gdC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICB0LnR5cGVzID0gIiI7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHBhcnNlRmxvYXQobG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhc3RQcmljZSIpKS50b0ZpeGVkKAogICAgICAgICAgICAgICAgICAgIDQKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgbiA9IHBhcnNlRmxvYXQodC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpLAogICAgICAgICAgICAgICAgICBzID0gcGFyc2VGbG9hdCh0LnNlbGxTaGFyZSkudG9GaXhlZCg0KTsKICAgICAgICAgICAgICAgIHQucHJpY2VzVHlwZShpLCBlLCBzLCBuKTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJidXkiID09IGUgJiYgIiIgIT0gdC5idXlJbmZvLmJ1eV9zZWxlY3RlZCkgewogICAgICAgICAgICAgICAgdC50eXBlID0gIiI7CiAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQobG9jYWxTdG9yYWdlLmdldEl0ZW0oImxhc3RQcmljZSIpKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKG4gPSBwYXJzZUZsb2F0KHQuYnV5SW5mby5idXlfc2VsZWN0ZWQpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAocyA9IHBhcnNlRmxvYXQodC5idXlTYWhyZSkudG9GaXhlZCg0KSk7CiAgICAgICAgICAgICAgICB0LnByaWNlc1R5cGUoaSwgZSwgcywgbik7CiAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAodC50b3RhbFByaWNlQnV5ID0gMCksCiAgICAgICAgICAgICAgICAgICh0LnRyYW5kZUZyZWVCdXkgPSAwKSwKICAgICAgICAgICAgICAgICAgKHQuYm9uc0J1eSA9IDApLAogICAgICAgICAgICAgICAgICAodC50b3RhbFByaWNlID0gMCksCiAgICAgICAgICAgICAgICAgICh0LnRyYW5kZUZyZWUgPSAwKSwKICAgICAgICAgICAgICAgICAgKHQuYm9ucyA9IDApOwogICAgICAgICAgICBlbHNlIGlmICgic2VsbCIgPT0gZSAmJiAiIiAhPSB0LnNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICBpZiAoKCh0LnR5cGVzID0gIiIpLCAiIiAhPSB0LnNlbGxJbnB1dFZhbHVlKSkgewogICAgICAgICAgICAgICAgKGkgPSBwYXJzZUZsb2F0KHQuc2VsbElucHV0VmFsdWUpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAobiA9IHBhcnNlRmxvYXQodC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKHMgPSBwYXJzZUZsb2F0KHQuc2VsbFNoYXJlKS50b0ZpeGVkKDQpKTsKICAgICAgICAgICAgICAgIHQucHJpY2VzVHlwZShpLCBlLCBzLCBuKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoImJ1eSIgPT0gZSAmJiAiIiAhPSB0LmJ1eUluZm8uYnV5X3NlbGVjdGVkKSB7CiAgICAgICAgICAgICAgaWYgKCgodC50eXBlID0gIiIpLCAiIiAhPSB0LmlucHV0UHJpY2UpKSB7CiAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQodC5pbnB1dFByaWNlKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgKG4gPSBwYXJzZUZsb2F0KHQuYnV5SW5mby5idXlfc2VsZWN0ZWQpLnRvRml4ZWQoNCkpLAogICAgICAgICAgICAgICAgICAocyA9IHBhcnNlRmxvYXQodC5idXlTYWhyZSkudG9GaXhlZCg0KSk7CiAgICAgICAgICAgICAgICB0LnByaWNlc1R5cGUoaSwgZSwgcywgbik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAodC50b3RhbFByaWNlQnV5ID0gMCksCiAgICAgICAgICAgICAgICAodC50cmFuZGVGcmVlQnV5ID0gMCksCiAgICAgICAgICAgICAgICAodC5ib25zQnV5ID0gMCksCiAgICAgICAgICAgICAgICAodC50b3RhbFByaWNlID0gMCksCiAgICAgICAgICAgICAgICAodC50cmFuZGVGcmVlID0gMCksCiAgICAgICAgICAgICAgICAodC5ib25zID0gMCk7CiAgICAgICAgICB9LAogICAgICAgICAgY2hhbmdlVmFsdWVBbW91bnQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlTnVtIDw9IDApCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKHRoaXMuJCgibGV2ZXIucHRpbWVzIikpOwogICAgICAgICAgICBlbHNlIGlmICgiYnV5IiA9PSBlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmxhc3RQcmljZSAqIHRoaXMuc2hhcmVOdW0sCiAgICAgICAgICAgICAgICBhID0gdGhpcy5idXlJbmZvLmJ1eV9zZWxlY3RlZCwKICAgICAgICAgICAgICAgIGkgPSB0aGlzLmJ1eVNhaHJlUGVyY2VudCwKICAgICAgICAgICAgICAgIG4gPSAwLjAxICogdGhpcy5jdXJyZW5jeVFJbmZvLmxldmVyX3RyYWRlX2ZlZSwKICAgICAgICAgICAgICAgIHMgPSBpIC8gKHQgLyBhICsgdCAqIG4pOwogICAgICAgICAgICAgICh0aGlzLmJ1eVNhaHJlID0gcGFyc2VJbnQocykpLCB0aGlzLmNoYW5nZVZhbHVlKCJidXkiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgbyA9IHRoaXMubGFzdFByaWNlICogdGhpcy5zaGFyZU51bSwKICAgICAgICAgICAgICAgIHIgPSB0aGlzLnNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICBsID0gdGhpcy5zZWxsU2hhcmVQZXJjZW50LAogICAgICAgICAgICAgICAgYyA9IDAuMDEgKiB0aGlzLmN1cnJlbmN5UUluZm8ubGV2ZXJfdHJhZGVfZmVlLAogICAgICAgICAgICAgICAgZCA9IGwgLyAobyAvIHIgKyBvICogYyk7CiAgICAgICAgICAgICAgKHRoaXMuc2VsbFNoYXJlID0gcGFyc2VJbnQoZCkpLCB0aGlzLmNoYW5nZVZhbHVlKCJzZWxsIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBjbG9zZU1vc2FsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS5jb21maXJtU2hvdyA9ICExOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbWZpcm06IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUsCiAgICAgICAgICAgICAgdCA9IHRoaXM7CiAgICAgICAgICAgIDIgPT0gdC5idXlUeXBlCiAgICAgICAgICAgICAgPyAiIiAhPSB0LmxlZ2FsX2lkICYmICIiICE9IHQuY3VycmVuY3lfaWQKICAgICAgICAgICAgICAgID8gKGUgPSB7CiAgICAgICAgICAgICAgICAgICAgbGVnYWxfaWQ6IHQubGVnYWxfaWQsCiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IHQuY3VycmVuY3lfaWQsCiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IHQuc2VsbEluZm8uc2VsbF9zZWxlY3RlZCwKICAgICAgICAgICAgICAgICAgICBzaGFyZTogdC5zZWxsU2hhcmUsCiAgICAgICAgICAgICAgICAgICAgdHlwZTogMiwKICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHQuc2VsZWN0ZWRTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3ByaWNlOiB0LnNlbGxJbnB1dFZhbHVlLAogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgOiBsYXllci5tc2codC4kdCgidHJhZWRvZmYiKSkKICAgICAgICAgICAgICA6ICIiICE9IHQubGVnYWxfaWQgJiYgIiIgIT0gdC5jdXJyZW5jeV9pZAogICAgICAgICAgICAgID8gKGUgPSB7CiAgICAgICAgICAgICAgICAgIGxlZ2FsX2lkOiB0LmxlZ2FsX2lkLAogICAgICAgICAgICAgICAgICBjdXJyZW5jeV9pZDogdC5jdXJyZW5jeV9pZCwKICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IHQuYnV5SW5mby5idXlfc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAgIHNoYXJlOiB0LmJ1eVNhaHJlLAogICAgICAgICAgICAgICAgICB0eXBlOiAxLAogICAgICAgICAgICAgICAgICBzdGF0dXM6IHQuc2VsZWN0ZWRTdGF0dXMsCiAgICAgICAgICAgICAgICAgIHRhcmdldF9wcmljZTogdC5pbnB1dFByaWNlLAogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICA6IGxheWVyLm1zZyh0LiR0KCJ0cmFlZG9mZiIpKTsKICAgICAgICAgICAgdmFyIGEgPSBsYXllci5sb2FkKDEpOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpLyIgKyB0LnNlbGxJbmZvLnVybCwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiBlLAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoYSksCiAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICA/ICgyID09IHQuYnV5VHlwZQogICAgICAgICAgICAgICAgICAgICAgICA/ICgodC5zZWxsSW5mby5zZWxsUHJpY2UgPSAwKSwgKHQuc2VsbEluZm8uc2VsbE51bSA9IDApKQogICAgICAgICAgICAgICAgICAgICAgICA6ICgodC5idXlJbmZvLmJ1eVByaWNlID0gMCksICh0LmJ1eUluZm8uYnV5TnVtID0gMCkpLAogICAgICAgICAgICAgICAgICAgICAgKHQuY29tZmlybVNob3cgPSAhMSksCiAgICAgICAgICAgICAgICAgICAgICBldmVudEJ1cy4kZW1pdCgiYnV5VHJhZGUiLCAidHJhZGVidXkiKSwKICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ0b2NlbCIsICJ1cGRhdGEiKSwKICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCJ0b19sZXZlckV4Y2hhbmdlIiwgImxldmVyRXhjaGFuZ2UiKSwKICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgOiAobGF5ZXIubXNnKGUuZGF0YS5tZXNzYWdlKSwgKHQuY29tZmlybVNob3cgPSAhMSkpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKSwgKHQuY29tZmlybVNob3cgPSAhMSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2VsZWN0VHlwZXM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgKHQuc2VsZWN0ZWRTdGF0dXMgPSBlKSwKICAgICAgICAgICAgICAodC50b3RhbFByaWNlQnV5ID0gMCksCiAgICAgICAgICAgICAgKHQudHJhbmRlRnJlZUJ1eSA9IDApLAogICAgICAgICAgICAgICh0LmJvbnNCdXkgPSAwKSwKICAgICAgICAgICAgICAodC50b3RhbFByaWNlID0gMCksCiAgICAgICAgICAgICAgKHQudHJhbmRlRnJlZSA9IDApLAogICAgICAgICAgICAgICh0LmJvbnMgPSAwKSwKICAgICAgICAgICAgICAodC5idXlJbmZvLmJ1eV9zZWxlY3RlZCA9ICIiKSwKICAgICAgICAgICAgICAodC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkID0gIiIpLAogICAgICAgICAgICAgICh0LmlucHV0UHJpY2UgPSB0Lm5ld1ByaWNlKSwKICAgICAgICAgICAgICAodC5zZWxsSW5wdXRWYWx1ZSA9IHQubmV3UHJpY2UpOwogICAgICAgICAgfSwKICAgICAgICAgIGNoYW5nZVByaWNlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIGlmICgwID09IHQuc2VsZWN0ZWRTdGF0dXMpCiAgICAgICAgICAgICAgaWYgKCJidXkiID09IGUgJiYgIiIgIT0gdC5idXlJbmZvLmJ1eV9zZWxlY3RlZCkKICAgICAgICAgICAgICAgIGlmICgiIiAhPSB0LmlucHV0UHJpY2UpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSBwYXJzZUZsb2F0KHQuaW5wdXRQcmljZSkudG9GaXhlZCg0KSwKICAgICAgICAgICAgICAgICAgICBpID0gcGFyc2VGbG9hdCh0LmJ1eUluZm8uYnV5X3NlbGVjdGVkKS50b0ZpeGVkKDQpLAogICAgICAgICAgICAgICAgICAgIG4gPSBwYXJzZUZsb2F0KHQuYnV5U2FocmUpLnRvRml4ZWQoNCk7CiAgICAgICAgICAgICAgICAgIHQucHJpY2VzVHlwZShhLCBlLCBuLCBpKTsKICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAodC50b3RhbFByaWNlQnV5ID0gMCksICh0LnRyYW5kZUZyZWVCdXkgPSAwKSwgKHQuYm9uc0J1eSA9IDApOwogICAgICAgICAgICAgIGVsc2UgaWYgKCJzZWxsIiA9PSBlICYmICIiICE9IHQuc2VsbEluZm8uc2VsbF9zZWxlY3RlZCkKICAgICAgICAgICAgICAgIGlmICgiIiAhPSB0LnNlbGxJbnB1dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgIChhID0gcGFyc2VGbG9hdCh0LnNlbGxJbnB1dFZhbHVlKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgICAoaSA9IHBhcnNlRmxvYXQodC5zZWxsSW5mby5zZWxsX3NlbGVjdGVkKS50b0ZpeGVkKDQpKSwKICAgICAgICAgICAgICAgICAgICAobiA9IHBhcnNlRmxvYXQodC5zZWxsU2hhcmUpLnRvRml4ZWQoNCkpOwogICAgICAgICAgICAgICAgICB0LnByaWNlc1R5cGUoYSwgZSwgbiwgaSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgKHQudG90YWxQcmljZSA9IDApLCAodC50cmFuZGVGcmVlID0gMCksICh0LmJvbnMgPSAwKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAodC50b3RhbFByaWNlID0gMCksCiAgICAgICAgICAgICAgICAgICh0LnRyYW5kZUZyZWUgPSAwKSwKICAgICAgICAgICAgICAgICAgKHQuYm9ucyA9IDApLAogICAgICAgICAgICAgICAgICAodC50b3RhbFByaWNlQnV5ID0gMCksCiAgICAgICAgICAgICAgICAgICh0LnRyYW5kZUZyZWVCdXkgPSAwKSwKICAgICAgICAgICAgICAgICAgKHQuYm9uc0J1eSA9IDApOwogICAgICAgICAgfSwKICAgICAgICAgIEFtb3VudEZvbnQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICJmb250LXNpemU6JzEwcHgnIjsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjb21wdXRlZDogewogICAgICAgICAgYnV5VG90YWw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnV5SW5mby5idXlfc2VsZWN0ZWQgKiB0aGlzLmJ1eUluZm8uYnV5TnVtIHx8IDA7CiAgICAgICAgICB9LAogICAgICAgICAgc2VsbFRvdGFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGxJbmZvLnNlbGxfc2VsZWN0ZWQgKiB0aGlzLnNlbGxJbmZvLnNlbGxOdW0gfHwgMDsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgZWkgPSBYYSwKICAgICAgdGkgPSAoYSgiOTY3ZCIpLCBPYmplY3QoaFsiYSJdKShlaSwgSmEsIFlhLCAhMSwgbnVsbCwgIjJlNWFiMGQ4IiwgbnVsbCkpLAogICAgICBhaSA9IHRpLmV4cG9ydHMsCiAgICAgIGlpID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImVudHJ1c3QiIH0sIFsKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSBmQ29sb3IxIHRvcHNoYWRvdyIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGFiX3RpdGxlIiB9LCBbCiAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIubm93ZW50cnVzdCIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInRhYl90aXRsZSBmciBmdDEyIiB9LAogICAgICAgICAgICAgIGUuX2woZS53YXlMaXN0LCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogYSA9PSBlLmlzQ2hvb3NlZCB9LAogICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUud2F5Q2hvb3NlKGEsIHQudXJsKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyh0LnRpdGxlKSldCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIDAKICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgaSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgY2xlYXIiIH0sIFsKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MjAiIH0sIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIucGFpcnMiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLmRpcmVjdGlvbiIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzgiIH0sIFtlLl92KGUuX3MoZS4kdCgibnVtYmVyIikpKV0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IiB9LCBbZS5fdihlLl9zKGUuJHQoInByaWNlIikpKV0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLmNvbnRyYW4iKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIubm90ZGVhbCIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLmRlYWx0b3RhbCIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzggdHIiIH0sIFtlLl92KGUuX3MoZS4kdCgiZG8iKSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBlLmluTGlzdC5sZW5ndGggPiAwCiAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVycyBzY3JvbGwiIH0sIFsKICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJsaXN0LWl0ZW0gZkNvbG9yMSBmdDEyIiB9LAogICAgICAgICAgICAgICAgICAgIGUuX2woZS5pbkxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jcmVhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyh0LmN1cnJlbmN5X25hbWUpICsgIi8iICsgZS5fcyh0LmxlZ2FsX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIiA9PSBlLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuJHQoImNlbnRlci5pbmJ1eSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLiR0KCJjZW50ZXIub3V0c2VsbCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50b3RhbF9udW1iZXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5wcmljZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmNvbXBsZXRlX251bWJlcikpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm51bWJlcikpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50b3RhbF9tb25leSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbCB3OCB0ciBjdXJQZXIgY2VpbENvbG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnJldm9rZShhLCB0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInJldm9rZSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICFlLmxvYWRpbmcgJiYgZS5pbkxpc3QubGVuZ3RoID4gOAogICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRtb3JlIHRjIGZDb2xvcjEgZnQxNCBtdDEwIGN1clBlciBwZGIyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuZ2V0TW9yZSB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUubW9yZSkpXQogICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBlLmxvYWRpbmcKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyBwZGIyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsb2R3MjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiMTJhZSIpLCBhbHQ6ICIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgYmFzZUNvbG9yIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxvYWRpbmciKSkgKyAiLi4uIiksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgIGUuaW5MaXN0Lmxlbmd0aCA8PSAwICYmICFlLmxvYWRpbmcKICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJub19kYXRhIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI5NDg1IiksIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibm9kYXRhIikpKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIG5pID0gW10sCiAgICAgIHNpID0gewogICAgICAgIG5hbWU6ICJlbnRydXN0IiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBpc3Nob3c6ICExLAogICAgICAgICAgICBhZGRyZXNzOiAiIiwKICAgICAgICAgICAgaXNDaG9vc2VkOiAwLAogICAgICAgICAgICBpc1VybDogMCwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgdXJsOiAidHJhbnNhY3Rpb25faW4iLAogICAgICAgICAgICB0eXBlOiAiaW4iLAogICAgICAgICAgICBtb3JlOiB0aGlzLiR0KCJtb3JlIiksCiAgICAgICAgICAgIGxvYWRpbmc6ICExLAogICAgICAgICAgICB1cmxMaXN0OiBbeyB0aXRsZTogdGhpcy4kdCgibGV2ZXIubm93ZW50cnVzdCIpIH1dLAogICAgICAgICAgICB3YXlMaXN0OiBbCiAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy4kdCgiY2VudGVyLmluYnV5IiksIHVybDogInRyYW5zYWN0aW9uX2luIiB9LAogICAgICAgICAgICAgIHsgdGl0bGU6IHRoaXMuJHQoImNlbnRlci5vdXRzZWxsIiksIHVybDogInRyYW5zYWN0aW9uX291dCIgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgaW5MaXN0OiBbXSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiI7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICB3YXlDaG9vc2U6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgKGEuaW5MaXN0ID0gIiIpLAogICAgICAgICAgICAgIChhLnBhZ2UgPSAxKSwKICAgICAgICAgICAgICAoYS51cmwgPSB0KSwKICAgICAgICAgICAgICAoYS50eXBlID0KICAgICAgICAgICAgICAgICJ0cmFuc2FjdGlvbl9pbiIgPT0gdAogICAgICAgICAgICAgICAgICA/ICJpbiIKICAgICAgICAgICAgICAgICAgOiAidHJhbnNhY3Rpb25fb3V0IiA9PSB0CiAgICAgICAgICAgICAgICAgID8gIm91dCIKICAgICAgICAgICAgICAgICAgOiAiYWxsIiksCiAgICAgICAgICAgICAgYS5nZXREYXRhKCksCiAgICAgICAgICAgICAgKGEubW9yZSA9IHRoaXMuJHQoIm1vcmUiKSksCiAgICAgICAgICAgICAgKGEuaXNDaG9vc2VkID0gZSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TW9yZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAodGhpcy5wYWdlID0gKyt0aGlzLnBhZ2UpLCB0aGlzLmdldERhdGEoKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZXZva2U6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpcywKICAgICAgICAgICAgICBpID0gKCh0ID0gdCksIChlID0gZSksIGEudHlwZSk7CiAgICAgICAgICAgIGxheWVyLm9wZW4oewogICAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuJHQoInJldm9rZU9yZGVyIiksCiAgICAgICAgICAgICAgYnRuOiBbdGhpcy4kdCgiY29uZmlybSIpLCB0aGlzLiR0KCJsZWdhbC5jZWlsIildLAogICAgICAgICAgICAgIHllczogZnVuY3Rpb24gKG4pIHsKICAgICAgICAgICAgICAgIHZhciBzID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICAgICAgYS4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvdHJhbnNhY3Rpb25fZGVsIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IHQsIHR5cGU6IGkgfSwKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBhLnRva2VuIH0sCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKHMpLAogICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgICAgICA/IChhLmluTGlzdC5zcGxpY2UoZSwgMSksIGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKHQubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXREYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gZS51cmwsCiAgICAgICAgICAgICAgYSA9IGUucGFnZTsKICAgICAgICAgICAgKGUubG9hZGluZyA9ICEwKSwKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvIiArIHQsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgcGFnZTogYSB9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBlLnRva2VuIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIGlmICgoKGUubG9hZGluZyA9ICExKSwgIm9rIiA9PSB0LmRhdGEudHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT0gZS5wYWdlKSBlLmluTGlzdCA9IGE7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5sZW5ndGggPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGUubW9yZSA9IGUuJHQoInRkLm5vbW9yZSIpICsgIi4uLiIpOwogICAgICAgICAgICAgICAgICAgICAgZS5pbkxpc3QgPSBlLmluTGlzdC5jb25jYXQoYSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgZXZlbnRCdXMuJG9uKCJidXlUcmFkZSIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgIHQgJiYgZS5nZXREYXRhKCk7CiAgICAgICAgICB9KSwKICAgICAgICAgICAgZS5nZXREYXRhKCk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgb2kgPSBzaSwKICAgICAgcmkgPSAoYSgiNzA2ZSIpLCBPYmplY3QoaFsiYSJdKShvaSwgaWksIG5pLCAhMSwgbnVsbCwgIjYwMzdmYzJjIiwgbnVsbCkpLAogICAgICBsaSA9IHJpLmV4cG9ydHMsCiAgICAgIGNpID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImVudHJ1c3QiIH0sIFsKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSBmQ29sb3IxIHRvcHNoYWRvdyIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGFiX3RpdGxlIiB9LCBbCiAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuaGlzZW50cnVzdCIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IiB9LCBbCiAgICAgICAgICAgIGkoInVsIiwgeyBzdGF0aWNDbGFzczogImxpc3QtdGl0bGUgZkNvbG9yMiBmdDEyIGNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbZS5fdihlLl9zKGUuJHQoInRpbWUiKSkpXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLnBhaXJzIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCIgfSwgW2UuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdihlLl9zKGUuJHQoInByaWNlIikpKV0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLmRlYWx0b3RhbCIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLnRwcmljZSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdihlLl9zKGUuJHQoInN0YXR1cyIpKSldKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFtlLl92KGUuX3MoZS4kdCgicmF0ZSIpKSldKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCB0ciIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5kaXJlY3Rpb24iKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgZS5jb21MaXN0Lmxlbmd0aCA+IDAKICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250YWluZXJzIHNjcm9sbCIgfSwgWwogICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxpc3QtaXRlbSBmQ29sb3IxIGZ0MTIiIH0sCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLmNvbUxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQuY3VycmVuY3lfbmFtZSkgKyAiLyIgKyBlLl9zKHQubGVnYWxfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm51bWJlcikpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5wcmljZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJudW1GaWx0ZXIiKSh0LnByaWNlICogdC5udW1iZXIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnByaWNlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJkZWFsZWQiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoImluIiA9PSB0LnR5cGUgPyB0LmluX2ZlZSA6IHQub3V0X2ZlZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbCB3OCB0ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogIm91dCIgPT0gdC50eXBlID8gInJlZENvbG9yIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4iID09IHQudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLiR0KCJjZW50ZXIuaW5idXkiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLiR0KCJjZW50ZXIub3V0c2VsbCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAhZS5sb2FkaW5nICYmIGUuY29tTGlzdC5sZW5ndGggPiA4CiAgICAgICAgICAgICAgICAgICAgPyBpKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldG1vcmUgdGMgZkNvbG9yMSBmdDE0IG10MTAgY3VyUGVyIHBkYjIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nZXRNb3JlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5tb3JlKSldCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgIGUubG9hZGluZwogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIHBkYjIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxvZHcyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBhKCIxMmFlIiksIGFsdDogIiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBiYXNlQ29sb3IiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibG9hZGluZyIpKSArICIuLi4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgZS5jb21MaXN0Lmxlbmd0aCA8PSAwICYmICFlLmxvYWRpbmcKICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJub19kYXRhIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI5NDg1IiksIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibm9kYXRhIikpKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIGRpID0gW10sCiAgICAgIHVpID0gewogICAgICAgIG5hbWU6ICJoaXNlbnRydXN0IiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBhZGRyZXNzOiAiIiwKICAgICAgICAgICAgaXNDaG9vc2VkOiAwLAogICAgICAgICAgICBpc1VybDogMCwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgdXJsOiAidHJhbnNhY3Rpb25faW4iLAogICAgICAgICAgICB0eXBlOiAiaW4iLAogICAgICAgICAgICBtb3JlOiB0aGlzLiR0KCJtb3JlIiksCiAgICAgICAgICAgIGxvYWRpbmc6ICExLAogICAgICAgICAgICB3YXlMaXN0OiBbCiAgICAgICAgICAgICAgeyB0aXRsZTogdGhpcy4kdCgiY2VudGVyLmluYnV5IiksIHVybDogInRyYW5zYWN0aW9uX2luIiB9LAogICAgICAgICAgICAgIHsgdGl0bGU6IHRoaXMuJHQoImNlbnRlci5vdXRzZWxsIiksIHVybDogInRyYW5zYWN0aW9uX291dCIgfSwKICAgICAgICAgICAgICB7IHRpdGxlOiB0aGlzLiR0KCJjZW50ZXIuYWxsIiksIHVybDogInRyYW5zYWN0aW9uX2FsbCIgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgY29tTGlzdDogW10sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgd2FjdGg6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGV2ZW50QnVzLiRvbigiYnV5VHJhZGUiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBlICYmIHRoYXQuZ2V0RGF0YSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICB3YXlDaG9vc2U6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgKGEuY29tTGlzdCA9ICIiKSwKICAgICAgICAgICAgICAoYS5wYWdlID0gMSksCiAgICAgICAgICAgICAgKGEudXJsID0gdCksCiAgICAgICAgICAgICAgKGEudHlwZSA9ICJ0cmFuc2FjdGlvbl9pbiIgPT0gdCA/ICJpbiIgOiAib3V0IiksCiAgICAgICAgICAgICAgKGEubW9yZSA9IGEuJHQoIm1vcmUiKSksCiAgICAgICAgICAgICAgKGEuaXNDaG9vc2VkID0gZSksCiAgICAgICAgICAgICAgYS5nZXREYXRhKCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TW9yZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAodGhpcy5wYWdlID0gKyt0aGlzLnBhZ2UpLCB0aGlzLmdldERhdGEoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXREYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gZS5wYWdlOwogICAgICAgICAgICAoZS5sb2FkaW5nID0gITApLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS90cmFuc2FjdGlvbl9jb21wbGV0ZSIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgcGFnZTogdCB9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBlLnRva2VuIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIGlmICgoKGUubG9hZGluZyA9ICExKSwgIm9rIiA9PSB0LmRhdGEudHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICAgICAgaWYgKDEgPT0gZS5wYWdlKSBlLmNvbUxpc3QgPSBhOwogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgaWYgKGEubGVuZ3RoIDw9IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChlLm1vcmUgPSAkdCgidGQubm9tb3JlIikgKyAiLi4uIik7CiAgICAgICAgICAgICAgICAgICAgICBlLmNvbUxpc3QgPSBlLmNvbUxpc3QuY29uY2F0KGEpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgIGV2ZW50QnVzLiRvbigiYnV5VHJhZGUiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICB0ICYmIGUuZ2V0RGF0YSgpOwogICAgICAgICAgfSksCiAgICAgICAgICAgIGUuZ2V0RGF0YSgpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIG1pID0gdWksCiAgICAgIHBpID0gKGEoImVjYWQiKSwgT2JqZWN0KGhbImEiXSkobWksIGNpLCBkaSwgITEsIG51bGwsICI0OTEzMTczOCIsIG51bGwpKSwKICAgICAgaGkgPSBwaS5leHBvcnRzLAogICAgICBmaSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkZXRhaWwiIH0sIFsKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbmJsb2NrIiB9LCBbCiAgICAgICAgICAgICAgaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgidHJlYWRkZXRhaWwiKSkpXSksCiAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KCIoIiArIGUuX3MoZS4kdCgibGFzdHdlZWsiKSkgKyAiKSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZnQxMiBjdXJQZXIgbWwxMCBiYXNlQ29sb3IiLAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5uZXdEYXRhIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJyZWxvYWQiKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBpKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJ0YWJfdGl0bGUgZnIgZnQxMiBjbGVhciBoaWRlIiB9LAogICAgICAgICAgICAgIGUuX2woZS53YXlMaXN0LCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGkoCiAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogYSA9PSBlLmlzQ2hvb3NlZCB9LAogICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUud2F5Q2hvb3NlZChhKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyh0KSldCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIDAKICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgaSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgY2xlYXIiIH0sIFsKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTQiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJkZWFsdGltZSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdihlLl9zKGUuJHQoIndheSIpKSldKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KGUuX3MoZS4kdCgiZGVhbGVkIikpKV0pLAogICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5wcmljZSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdihlLl9zKGUuJHQoInRvcmciKSkpXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdihlLl9zKGUuJHQoInRudW0iKSkpXSksCiAgICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE0IiB9LCBbZS5fdihlLl9zKGUuJHQoInR0b3RhbCIpKSldKSwKICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAgdHIiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5yYXRlIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGUuZGVMaXN0Lmxlbmd0aCA+IDAKICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250YWluZXIgc2Nyb2xsIiB9LCBbCiAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICBlLl9sKGUuZGVMaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3JlYXRlX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImF1dG8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiZGVwLnllcyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnByaWNlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgW2UuX3YoImltdG9rZW4iKV0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm51bWJlcikpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5wcmljZSAqIHQubnVtYmVyKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCB0ciIgfSwgW2UuX3YoIjAuMDAiKV0pLAogICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgZS5kZUxpc3QubGVuZ3RoIDw9IDAKICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJub19kYXRhIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI5NDg1IiksIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibm9kYXRhIikpKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIGdpID0gW10sCiAgICAgIHZpID0gewogICAgICAgIG5hbWU6ICJkZXRhaWwiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICBpc0Nob29zZWQ6IDIsCiAgICAgICAgICAgIG5ldzogITEsCiAgICAgICAgICAgIHdheUxpc3Q6IFsKICAgICAgICAgICAgICB0aGlzLiR0KCJjZW50ZXIuaW5idXkiKSwKICAgICAgICAgICAgICB0aGlzLiR0KCJjZW50ZXIub3V0c2VsbCIpLAogICAgICAgICAgICAgIHRoaXMuJHQoImNlbnRlci5hbGwiKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgZGVMaXN0OiBbXSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRkcmVzcyIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgd2F5Q2hvb3NlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdGhpcy5pc0Nob29zZWQgPSBlOwogICAgICAgICAgfSwKICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3RyYW5zYWN0aW9uL2RlYWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgYWRkcmVzczogdGhpcy5hZGRyZXNzIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICh0ID0gdC5kYXRhKSwgKGUuZGVMaXN0ID0gdC5tZXNzYWdlLmNvbXBsZXRlKSwgKGUubmV3ID0gITApOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBuZXdEYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMubmV3OwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHt9LAogICAgICB9LAogICAgICBfaSA9IHZpLAogICAgICB5aSA9IChhKCJjNjIxIiksIE9iamVjdChoWyJhIl0pKF9pLCBmaSwgZ2ksICExLCBudWxsLCAiNTk1OWQ5MzAiLCBudWxsKSksCiAgICAgIGJpID0geWkuZXhwb3J0cywKICAgICAgQ2kgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAid3JhcCIgfSwgWwogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImRldGFpbCIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGl0bGUgZkNvbG9yMSB0b3BzaGFkb3ciIH0sIFsKICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5ibG9jayIgfSwgWwogICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgImEiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG9uY2xpY2s6ICJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygtMSk7IiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbaSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiYmFjayIpKSldKV0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImluYmxvY2sgZnIiIH0sIFsKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYWxsIiwgb246IHsgY2xpY2s6IGUuYWxsIH0gfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuYWxsIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhbGwiLCBvbjogeyBjbGljazogZS5yZWNvcmRMaXN0IH0gfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIudGRyZWNvcmQiKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudCIgfSwgWwogICAgICAgICAgICAgIGkoInVsIiwgeyBzdGF0aWNDbGFzczogImxpc3QtdGl0bGUgZkNvbG9yMiBmdDEyIGNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgW2UuX3YoZS5fcyhlLiR0KCJwcmljZSIpKSldKSwKICAgICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJob21lLnZvbHVtZSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBlLmRlTGlzdC5sZW5ndGggPiAwCiAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvbnRhaW5lcnMgc2Nyb2xsIiB9LAogICAgICAgICAgICAgICAgICAgIGUuX2woZS5kZUxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgKICAgICAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgeyBrZXk6IGEsIHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHQucHJpY2UpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoInRvZml4ZWQiKSh0Lm51bWJlcikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgZS5kZUxpc3QubGVuZ3RoIDw9IDAKICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5vX2RhdGEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiOTQ4NSIpLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJub2RhdGEiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIHdpID0gW10sCiAgICAgIGtpID0gewogICAgICAgIG5hbWU6ICJsZXZlclRyYW5zYWN0aW9uIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBhZGRyZXNzOiAiIiwKICAgICAgICAgICAgaXNDaG9vc2VkOiAyLAogICAgICAgICAgICBuZXc6ICExLAogICAgICAgICAgICB3YXlMaXN0OiBbCiAgICAgICAgICAgICAgdGhpcy4kdCgiY2VudGVyLmluYnV5IiksCiAgICAgICAgICAgICAgdGhpcy4kdCgiY2VudGVyLm91dHNlbGwiKSwKICAgICAgICAgICAgICB0aGlzLiR0KCJjZW50ZXIuYWxsIiksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGRlTGlzdDogW10sCiAgICAgICAgICAgIGxlZ2FsX2lkOiAiIiwKICAgICAgICAgICAgY3VycmVuY3lfaWQ6ICIiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIG51bUZpbHRlcnM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiBlID8gKChlID0gZS50b1N0cmluZygpKSwgZS5zbGljZSgwKSArICIgIikgOiAiIjsKICAgICAgICAgIH0sCiAgICAgICAgICB0b2ZpeGVkOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoMik7CiAgICAgICAgICB9LAogICAgICAgICAgdG9maXhlZEZvdXI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCg0KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImFkZHJlc3MiKSB8fCAiIiksCiAgICAgICAgICAgICh0aGlzLmxlZ2FsX2lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIikpLAogICAgICAgICAgICAodGhpcy5jdXJyZW5jeV9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpKTsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgIGUuY29tcGxldGUodGhpcy5sZWdhbF9pZCwgdGhpcy5jdXJyZW5jeV9pZCksCiAgICAgICAgICAgIGV2ZW50QnVzLiRvbigidG9fbGV2ZXJFeGNoYW5nZSIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgdCAmJgogICAgICAgICAgICAgICAgZS5jb21wbGV0ZSgKICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIiksCiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIHdheUNob29zZWQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuaXNDaG9vc2VkID0gZTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2xldmVyL2RlYWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgbGVnYWxfaWQ6IGUsIGN1cnJlbmN5X2lkOiB0IH0sCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgIChhLmRlTGlzdCA9IGUuZGF0YS5tZXNzYWdlLm15X3RyYW5zYWN0aW9uKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIGFsbDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICJhbGxUcmFuc2FjdGlvbiIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgbGlua3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAibGV2ZXJUcmFuc2FjdGlvbnMiIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlY29yZExpc3Q6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAibGV2ZXJMaXN0IiB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBldmVudEJ1cy4kb24oImJ1eVRyYWRlIiwgZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICB9LAogICAgICB9LAogICAgICB4aSA9IGtpLAogICAgICBTaSA9IChhKCJhYzkzIiksIE9iamVjdChoWyJhIl0pKHhpLCBDaSwgd2ksICExLCBudWxsLCAiNjMwZmU5MGYiLCBudWxsKSksCiAgICAgIEFpID0gU2kuZXhwb3J0cywKICAgICAgemkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7CiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBuYW1lOiAibG9hZGluZyIsCiAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1sb2FkaW5nLmZ1bGxzY3JlZW4ubG9jayIsCiAgICAgICAgICAgICAgICB2YWx1ZTogZS5sb2FkaW5nLAogICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImxvYWRpbmciLAogICAgICAgICAgICAgICAgbW9kaWZpZXJzOiB7IGZ1bGxzY3JlZW46ICEwLCBsb2NrOiAhMCB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAid3JhcCIsCiAgICAgICAgICB9LAogICAgICAgICAgWwogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGl0bGUgZkNvbG9yMSBmbGV4OyIsCiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAibGluZS1oZWlnaHQiOiAiNTFweCIgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiaW5ibG9jayIsIHN0YXRpY1N0eWxlOiB7IGRpc3BsYXk6ICJmbGV4IiB9IH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IDEgPT0gZS5sb2FkX3R5cGUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmxvYWQoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIubHZjaGkiKSkpXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IDAgPT0gZS5sb2FkX3R5cGUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmxvYWQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIubm93ZW50cnVzdCIpKSldCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljU3R5bGU6IHsgZmxleDogIjEiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiAzID09IGUubG9hZF90eXBlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5sb2FkKDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLmNsb3NlZCIpKSldCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogNCA9PSBlLmxvYWRfdHlwZSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXJnaW4tcmlnaHQiOiAiMCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmxvYWQoNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIucmV2b2tlZCIpKSldCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICBtYXJnaW46ICIxMHB4IDIwcHgiLAogICAgICAgICAgICAgICAgICBkaXNwbGF5OiAiZmxleCIsCiAgICAgICAgICAgICAgICAgICJmbGV4LWRpcmVjdGlvbiI6ICJjb2x1bW4iLAogICAgICAgICAgICAgICAgICBmbGV4OiAiMSIsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0X2hlYWQgZnQxNCIgfSwgWwogICAgICAgICAgICAgICAgICAgIDEgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgID8gYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibGktdHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJ0ZXh0LWFsaWduIjogImxlZnQiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci50eXBlIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktb3BlbnByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIub3BlblByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW5vd3ByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIubm93UHJpY2UiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktYmFpbCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmJhaWwiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktc3R5cHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5zdHlQcmljZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdHNwcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLnN0c1ByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW50aW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIub3BlblRpbWUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktcmF0ZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLnJhdGUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktbG9zcyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmxvc3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktdG9kbyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInRkLmRvIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgIDAgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgID8gYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibGktdHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJ0ZXh0LWFsaWduIjogImxlZnQiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci50eXBlIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktb3BlbnByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuZW50cnVzdFByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW5vd3ByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIubm93UHJpY2UiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktYmFpbCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmJhaWwiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktc3R5cHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5zdHlQcmljZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdHNwcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLnN0c1ByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW50aW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIud2VpdHVvVGltZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1yYXRlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIucmF0ZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS10b2RvIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgidGQuZG8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgMyA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgPyBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsaS10eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgInRleHQtYWxpZ24iOiAibGVmdCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLnR5cGUiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW5wcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5jbG9zZVByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktb3BlbnByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIub3BlblByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLWJhaWwiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5iYWlsIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0eXByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuc3R5UHJpY2UiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktc3R5cHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5zdHNQcmljZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVudGltZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLm9wZW5UaW1lIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXJhdGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5yYXRlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAwICE9IGUubG9hZF90eXBlICYmIDQgIT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1sb3NzIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmxvc3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW50aW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmNsb3NlVGltZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0YXR1cyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInRkMS5zdGF0dXMiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgNCA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgPyBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsaS10eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC1hbGlnbiI6ICJsZWZ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC1pbmRlbnQiOiAiMTBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci50eXBlIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktb3BlbnByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuZW50cnVzdFByaWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLWJhaWwiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5iYWlsIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0eXByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuc3R5UHJpY2UiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktc3RzcHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5zdHNQcmljZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PSBlLmxvYWRfdHlwZSB8fCA0ID09IGUubG9hZF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktb3BlbnRpbWUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIud2VpdHVvVGltZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXJhdGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5yYXRlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW50aW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIucmV2b2tlVGltZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdGF0dXMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJ0ZDEuc3RhdHVzIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImxvYWRpbmciLAogICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1sb2FkaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUubG9hZGluZ0RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJsb2FkaW5nRGF0YSIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsaXN0X2NvbnRlbnQgZkNvbG9yMSBmdDEyIiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAibWluLWhlaWdodCI6ICIzMDBweCIgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGUuX2woZS5saXN0X2NvbnRlbnQsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMSA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICA/IGEoImxpIiwgeyBrZXk6IGksIHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsaS10eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogMSA9PSB0LnR5cGUgPyAiZ3JlZW4iIDogInJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjI1cHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gdC50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiaWNvbi1kb3duLWppYW50b3UtdXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaWNvbi1hcnJvdy1kb3duIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZS5fcyh0LnN5bWJvbCkgKyAiICogIiArIGUuX3ModC5zaGFyZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVucHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuX2YoInRvZml4ZWRGb3VyIikodC5wcmljZSB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpLW5vd3ByaWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gdC50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdC51cGRhdGVfcHJpY2UgPiB0LnByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiZ3JlZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicmVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQudXBkYXRlX3ByaWNlIDw9IHQucHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiZ3JlZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnVwZGF0ZV9wcmljZSB8fCAiMC4wMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLWJhaWwiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSh0LmNhdXRpb25fbW9uZXkgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdHlwcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b2ZpeGVkRm91ciIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldF9wcm9maXRfcHJpY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0c3ByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvZml4ZWRGb3VyIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc3RvcF9sb3NzX3ByaWNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVudGltZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50cmFuc2FjdGlvbl90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktcmF0ZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9maXhlZEZvdXIiKSh0LnRyYWRlX2ZlZSB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpLWxvc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBncmVlbjogdC5wcm9maXRzID4gMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHQucHJvZml0cyB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGktdG9kbyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInN0b3AtYnRuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnN0b3BMb3NzKHQuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuc2V0bG9zcyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXJnaW4tbGVmdCI6ICIzcHgiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5waW5nY2FuZyh0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLnBpbmciKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLmxpc3RfY29udGVudCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwID09IGUubG9hZF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgID8gYSgibGkiLCB7IGtleTogaSwgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpLXR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiAxID09IHQudHlwZSA/ICJncmVlbiIgOiAicmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQtYWxpZ24iOiAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiMjVweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImljb25mb250ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSB0LnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJpY29uLWRvd24tamlhbnRvdS11cCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpY29uLWFycm93LWRvd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKHQuc3ltYm9sKSArICIgKiAiICsgZS5fcyh0LnNoYXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW5wcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9maXhlZEZvdXIiKSh0LnByaWNlIHx8ICIwLjAwIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibGktbm93cHJpY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSB0LnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0LnVwZGF0ZV9wcmljZSA+IHQucHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJncmVlbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdC51cGRhdGVfcHJpY2UgPD0gdC5wcmljZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJncmVlbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAicmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b2ZpeGVkRm91ciIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudXBkYXRlX3ByaWNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktYmFpbCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b2ZpeGVkRm91ciIpKHQuY2F1dGlvbl9tb25leSB8fCAiMC4wMCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0eXByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvZml4ZWRGb3VyIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0X3Byb2ZpdF9wcmljZSB8fCAiMC4wMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktc3RzcHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zdG9wX2xvc3NfcHJpY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW50aW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnRyYW5zYWN0aW9uX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1yYXRlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHQudHJhZGVfZmVlIHx8ICIwLjAwIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGktdG9kbyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxNDBweCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNhbmNlbCh0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5yZXZva2UiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgibGV2ZXIuY2xvc2VkIikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgibGV2ZXIucmV2b2tlZCIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLmxpc3RfY29udGVudCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAzID09IGUubG9hZF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgID8gYSgibGkiLCB7IGtleTogaSwgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpLXR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiAxID09IHQudHlwZSA/ICJncmVlbiIgOiAicmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRleHQtYWxpZ24iOiAibGVmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiMjVweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImljb25mb250ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9PSB0LnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJpY29uLWRvd24tamlhbnRvdS11cCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpY29uLWFycm93LWRvd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKHQuc3ltYm9sKSArICIgKiAiICsgZS5fcyh0LnNoYXJlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW5vd3ByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvZml4ZWRGb3VyIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHQudXBkYXRlX3ByaWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0LnByaWNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVucHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuX2YoInRvZml4ZWRGb3VyIikodC5wcmljZSB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLWJhaWwiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSh0LmNhdXRpb25fbW9uZXkgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdHNwcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b2ZpeGVkRm91ciIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldF9wcm9maXRfcHJpY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0eXByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvZml4ZWRGb3VyIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc3RvcF9sb3NzX3ByaWNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVudGltZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50cmFuc2FjdGlvbl90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktcmF0ZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9maXhlZEZvdXIiKSh0LnRyYWRlX2ZlZSB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpLWxvc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aDEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBncmVlbjogdC5wcm9maXRzID4gMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHQucHJvZml0cyB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLW9wZW50aW1lIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0LmNvbXBsZXRlX3RpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0LmhhbmRsZV90aW1lIHx8ICItIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdGF0dXMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJsZXZlci5jbG9zZWQiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIGUuX2woZS5saXN0X2NvbnRlbnQsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNCA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICA/IGEoImxpIiwgeyBrZXk6IGksIHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsaS10eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogMSA9PSB0LnR5cGUgPyAiZ3JlZW4iIDogInJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjI1cHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpY29uZm9udCAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gdC50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiaWNvbi1kb3duLWppYW50b3UtdXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaWNvbi1hcnJvdy1kb3duIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZS5fcyh0LnN5bWJvbCkgKyAiICogIiArIGUuX3ModC5zaGFyZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVucHJpY2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdC51cGRhdGVfcHJpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQucHJpY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLWJhaWwiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSh0LmNhdXRpb25fbW9uZXkgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1zdHlwcmljZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b2ZpeGVkRm91ciIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldF9wcm9maXRfcHJpY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImxpLXN0eXByaWNlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvZml4ZWRGb3VyIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc3RvcF9sb3NzX3ByaWNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVudGltZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50cmFuc2FjdGlvbl90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibGktcmF0ZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9maXhlZEZvdXIiKSh0LnRyYWRlX2ZlZSB8fCAiMC4wMCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICE9IGUubG9hZF90eXBlICYmIDQgIT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpLW9wZW5wcmljZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBncmVlbjogdC5wcm9maXRzID4gMCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9maXhlZEZvdXIiKSh0LnByb2ZpdHMgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJsaS1vcGVudGltZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ID09IGUubG9hZF90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdC5jb21wbGV0ZV90aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdC5oYW5kbGVfdGltZSB8fCAiLSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPT0gZS5sb2FkX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGktc3RhdHVzIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgibGV2ZXIucmV2b2tlZCIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCk7CiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgZS5saXN0X2NvbnRlbnQubGVuZ3RoIDw9IDAgJiYgIWUubG9hZGluZ0RhdGEKICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibW9yZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgIm1hcmdpbi10b3AiOiAiNTBweCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImkiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaWNvbmZvbnQgaWNvbi1lbXB0eTEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb250LXNpemUiOiAiODBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjE1MHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNTdHlsZTogeyBtYXJnaW46ICIwIGF1dG8iLCAidGV4dC1hbGlnbiI6ICJjZW50ZXIiIH0gfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIDMgPT0gZS5sb2FkX3R5cGUgfHwgNCA9PSBlLmxvYWRfdHlwZQogICAgICAgICAgICAgICAgICAgICAgPyBhKCJlbC1wYWdpbmF0aW9uIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFnZS1zaXplIjogMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ6ICJwcmV2LCBwYWdlciwgbmV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudC1wYWdlIjogZS5wYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGUudG90YWxDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZS1jaGFuZ2UiOiBlLmNoYW5nZVBhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3VycmVudC1jaGFuZ2UiOiBlLmhhbmRsZUN1cnJlbnRDaGFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLm1vZGFsU2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogIm1vZGFsU2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsb3NzLW1vZGFsIGZsZXgiLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsb3NzLW1vZGFsLWhlYWRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJoMyIsIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuc2V0bG9zcyIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2xvc2VNb3NhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFthKCJpIiwgeyBzdGF0aWNDbGFzczogImVsLWljb24tY2xvc2UiIH0pXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibG9zcy1tYWRhbC1jb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAiZm9udC1zaXplIjogIjE0cHgiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5zdHlQcmljZSIpKSArICLvvJoiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucmVkdWNlKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCItIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50YXJnZXRQcm9maXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJ0YXJnZXRQcm9maXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJ0ZXh0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnRhcmdldFByb2ZpdCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUudGFyZ2V0UHJvZml0ID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmlucHV0VmFsdWUoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5hZGQoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIisiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIm1vZGFsLXRleHQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgibGV2ZXIuZXhwZWN0UHJvZml0IikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yaIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm1vZGFsUHJvZml0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5zdHNQcmljZSIpKSArICLvvJoiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucmVkdWNlKDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCItIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5zdG9wTG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInN0b3BMb3NlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAidGV4dCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5zdG9wTG9zZSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuc3RvcExvc2UgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuaW5wdXRWYWx1ZSgyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmFkZCgyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigiKyIpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAibW9kYWwtdGV4dCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJsZXZlci5leHBlY3RMb3NzIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yaIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm1vZGFsU3RvcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogIm1vZGFsLWJ0biIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtYnV0dG9uLWdyb3VwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljU3R5bGU6IHsgd2lkdGg6ICIxMDAlIiwgaGVpZ2h0OiAiNDBweCIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBhZGRpbmc6ICIwIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2l6ZTogIm1lZGl1bSIsIHR5cGU6ICJpbmZvIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2xvc2VNb3NhbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgidGQuY2FuY2VpbCIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLWJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcGFkZGluZzogIjAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiAibWVkaXVtIiwgdHlwZTogInByaW1hcnkiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jb21maXJtKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ0ZC5jb25maXJtIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5zdG9wTW9kYWwsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJzdG9wTW9kYWwiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibG9zcy1tb2RhbCBmbGV4IiwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibG9zcy1tb2RhbC1oZWFkZXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiaDUiLCBbZS5fdihlLl9zKGUuJHQoImxldmVyLnN1cmVDbG9zZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2xvc2VTdG9wTW9kYWwoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigiWCIpXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAic3RvcE1vZGFsIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbInN0b3BhbGwiLCB7IGFsbHM6ICJhbGwiID09IGUuc2VsZWN0VHlwZSB9XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdFN0b3AoImFsbCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuYWxsQ2xvc2UiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogWyJzdG9wYnV5IiwgeyBidXlzOiAiYnV5IiA9PSBlLnNlbGVjdFR5cGUgfV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3RTdG9wKCJidXkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLm1vcmVDbG9zZSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdG9wc2VsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc2VsbHM6ICJzZWxsIiA9PSBlLnNlbGVjdFR5cGUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3RTdG9wKCJzZWxsIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJsZXZlci5udWxsQ2xvc2UiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAic3RvcC1tb2RhbC1idG5zIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImJ1dHRvbiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNsb3NlU3RvcE1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ0ZC5jYW5jZWlsIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY29tZmlybU1vZGFsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ0ZC5jb25maXJtIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0KICAgICAgICApOwogICAgICB9LAogICAgICBQaSA9IFtdLAogICAgICBUaSA9IHsKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBsZWdhbF9pZDogIiIsCiAgICAgICAgICAgIGN1cnJlbmN5X2lkOiAiIiwKICAgICAgICAgICAgbGlzdF9jb250ZW50OiBbXSwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgbGFzdHBhZ2U6IDEsCiAgICAgICAgICAgIG1vcmU6IHRoaXMuJHQoInRkLm1vcmUiKSwKICAgICAgICAgICAgbW9kYWxTaG93OiAhMSwKICAgICAgICAgICAgdGFyZ2V0UHJvZml0OiAiIiwKICAgICAgICAgICAgc3RvcExvc2U6ICIiLAogICAgICAgICAgICBtb2RhbFByb2ZpdDogIiIsCiAgICAgICAgICAgIG1vZGFsU3RvcDogIiIsCiAgICAgICAgICAgIG1vZGFsSWQ6ICIiLAogICAgICAgICAgICBwcmVzZW50UHJpY2U6ICIiLAogICAgICAgICAgICByaXNrUmF0ZTogIiIsCiAgICAgICAgICAgIHRvdGFsUHJvOiAiIiwKICAgICAgICAgICAgc3RvcE1vZGFsOiAhMSwKICAgICAgICAgICAgc2VsZWN0VHlwZTogImFsbCIsCiAgICAgICAgICAgIG9wZW5QcmljZTogIiIsCiAgICAgICAgICAgIHByb2ZpdHNQcmljZTogIiIsCiAgICAgICAgICAgIG9yZGVyVHlwZTogIiIsCiAgICAgICAgICAgIHNoYXJlTnVtOiAiIiwKICAgICAgICAgICAgbG9hZF90eXBlOiAxLAogICAgICAgICAgICBsb2FkaW5nRGF0YTogITEsCiAgICAgICAgICAgIHRvdGFsQ291bnQ6IDAsCiAgICAgICAgICAgIGxvYWRpbmc6ICExLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICh0aGlzLmxlZ2FsX2lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImxlZ2FsX2lkIikpLAogICAgICAgICAgICAodGhpcy5jdXJyZW5jeV9pZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJjdXJyZW5jeV9pZCIpKTsKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBlLmxvYWQoZS5sb2FkX3R5cGUpOwogICAgICAgICAgfSwgMTAwKSwKICAgICAgICAgICAgdGhpcy5sb2FkcygpOwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9maXhlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICAgIHRvZml4ZWRGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgbG9hZHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSB0aGlzOwogICAgICAgICAgICB0LiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICB0LnNvY2tldHMuc3Vic2NyaWJlKCJsZXZlcl90cmFkZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoImxldmVyX3RyYWRlIiA9PSBlLnR5cGUgJiYgMSA9PSB0LmxvYWRfdHlwZSkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoZS50cmFkZXNfYWxsKTsKICAgICAgICAgICAgICAgICAgKHQucmlza1JhdGUgPSBlLmhhemFyZF9yYXRlKSwKICAgICAgICAgICAgICAgICAgICAodC50b3RhbFBybyA9IGUucHJvZml0c19hbGwpLAogICAgICAgICAgICAgICAgICAgICh0LnByb2ZpdHNQcmljZSA9IGUucHJvZml0cyk7CiAgICAgICAgICAgICAgICAgIHZhciBpID0gW107CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gYSkKICAgICAgICAgICAgICAgICAgICB0LmxlZ2FsX2lkID09IGFbbl0ubGVnYWwgJiYKICAgICAgICAgICAgICAgICAgICAgIHQuY3VycmVuY3lfaWQgPT0gYVtuXS5jdXJyZW5jeSAmJgogICAgICAgICAgICAgICAgICAgICAgaS5wdXNoKGFbbl0pOwogICAgICAgICAgICAgICAgICB0Lmxpc3RfY29udGVudCA9IGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoImxldmVyX3RyYWRlIiA9PSBlLnR5cGUgJiYgMCA9PSB0LmxvYWRfdHlwZSkgewogICAgICAgICAgICAgICAgICBhID0gSlNPTi5wYXJzZShlLnRyYWRlc19lbnRydXN0KTsKICAgICAgICAgICAgICAgICAgKHQucmlza1JhdGUgPSBlLmhhemFyZF9yYXRlKSwKICAgICAgICAgICAgICAgICAgICAodC50b3RhbFBybyA9IGUucHJvZml0c19hbGwpLAogICAgICAgICAgICAgICAgICAgICh0LnByb2ZpdHNQcmljZSA9IGUucHJvZml0cyk7CiAgICAgICAgICAgICAgICAgIHZhciBzID0gW107CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIG8gaW4gYSkKICAgICAgICAgICAgICAgICAgICB0LmxlZ2FsX2lkID09IGFbb10ubGVnYWwgJiYKICAgICAgICAgICAgICAgICAgICAgIHQuY3VycmVuY3lfaWQgPT0gYVtvXS5jdXJyZW5jeSAmJgogICAgICAgICAgICAgICAgICAgICAgcy5wdXNoKGFbb10pOwogICAgICAgICAgICAgICAgICB0Lmxpc3RfY29udGVudCA9IHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgMCA9PSB0LmxvYWRfdHlwZSAmJiBlLmxpc3RfY29udGVudC5sZW5ndGg7CiAgICAgICAgICAgICAgfSwgMWUzKTsKICAgICAgICAgIH0sCiAgICAgICAgICBhbGw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAibGV2ZXJUcmFuc2FjdGlvbiIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgbGlua3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAibGV2ZXJUcmFuc2FjdGlvbnMiIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGNoYW5nZVBhZ2U6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMucGFnZSA9IGU7CiAgICAgICAgICB9LAogICAgICAgICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgKHRoaXMucGFnZSA9IGUpLCB0aGlzLmxvYWQodGhpcy5sb2FkX3R5cGUpOwogICAgICAgICAgfSwKICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gdGhpczsKICAgICAgICAgICAgdGhpcy5sb2FkX3R5cGUgIT09IGUgJiYKICAgICAgICAgICAgICAoKHRoaXMubG9hZF90eXBlID0gZSksICh0aGlzLmxhc3RwYWdlID0gMSksICh0aGlzLnBhZ2UgPSAxKSksCiAgICAgICAgICAgICAgKHRoaXMubG9hZGluZ0RhdGEgPSAhMCksCiAgICAgICAgICAgICAgKHRoaXMubGlzdF9jb250ZW50ID0gW10pLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9teV90cmFkZSIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlLAogICAgICAgICAgICAgICAgICBsZWdhbF9pZDogdGhpcy5sZWdhbF9pZCwKICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IHRoaXMuY3VycmVuY3lfaWQsCiAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpLAogICAgICAgICAgICAgICAgICAgIChhLmxvYWRpbmdEYXRhID0gITEpLAogICAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICgodC5tb3JlID0gdC4kdCgidGQubW9yZSIpKSwKICAgICAgICAgICAgICAgICAgICAgIChhLmxpc3RfY29udGVudCA9IGUuZGF0YS5tZXNzYWdlLm1lc3NhZ2UuZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAoYS50b3RhbENvdW50ID0gZS5kYXRhLm1lc3NhZ2UubWVzc2FnZS50b3RhbCkpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHJlY29yZExpc3Q6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAibGV2ZXJMaXN0IiB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBwaW5nY2FuZzogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRjb25maXJtKHQuJHQoImxldmVyLnN1cmVDbG9zZSIpLCAiVGlwcyIsIHsKICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy4kdCgiY29uZmlybSIpLAogICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuJHQoImxlZ2FsLmNlaWwiKSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgKHQubG9hZGluZyA9ICEwKSwKICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgICAgLiRodHRwKHsKICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL2xldmVyL2Nsb3NlIiwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IGlkOiBlIH0sCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICh0LmxvYWRpbmcgPSAhMSksCiAgICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgID8gKHQuJG1lc3NhZ2Uuc3VjY2VzcyhlLmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoInRvY2VsIiwgImEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IHQubGlzdF9jb250ZW50Lmxlbmd0aCAmJiAodC5saXN0X2NvbnRlbnQgPSBbXSkpCiAgICAgICAgICAgICAgICAgICAgICAgIDogZXZlbnRCdXMuJG1lc3NhZ2UuZXJyb3IoZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAodC5sb2FkaW5nID0gITEpLCBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGxvYWRfbW9yZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLnBhZ2UrKywgdGhpcy5pbml0KCk7CiAgICAgICAgICB9LAogICAgICAgICAgc3RvcExvc3M6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgZm9yICh2YXIgYSBpbiAoKHQubW9kYWxTaG93ID0gITApLCB0Lmxpc3RfY29udGVudCkpCiAgICAgICAgICAgICAgdC5saXN0X2NvbnRlbnRbYV0uaWQgPT0gZSAmJgogICAgICAgICAgICAgICAgKCh0LnNoYXJlTnVtID0gdC5saXN0X2NvbnRlbnRbYV0uc2hhcmUpLAogICAgICAgICAgICAgICAgKHQubW9kYWxJZCA9IHQubGlzdF9jb250ZW50W2FdLmlkKSwKICAgICAgICAgICAgICAgICh0LnByZXNlbnRQcmljZSA9IHBhcnNlRmxvYXQodC5saXN0X2NvbnRlbnRbYV0ucHJpY2UpLnRvRml4ZWQoCiAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICkpLAogICAgICAgICAgICAgICAgKHQub3BlblByaWNlID0gcGFyc2VGbG9hdCgKICAgICAgICAgICAgICAgICAgdC5saXN0X2NvbnRlbnRbYV0udXBkYXRlX3ByaWNlCiAgICAgICAgICAgICAgICApLnRvRml4ZWQoMikpLAogICAgICAgICAgICAgICAgdC5saXN0X2NvbnRlbnRbYV0udGFyZ2V0X3Byb2ZpdF9wcmljZSA+IDAKICAgICAgICAgICAgICAgICAgPyAodC50YXJnZXRQcm9maXQgPSBwYXJzZUZsb2F0KAogICAgICAgICAgICAgICAgICAgICAgdC5saXN0X2NvbnRlbnRbYV0udGFyZ2V0X3Byb2ZpdF9wcmljZQogICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkKICAgICAgICAgICAgICAgICAgOiAodC50YXJnZXRQcm9maXQgPSB0Lm9wZW5QcmljZSksCiAgICAgICAgICAgICAgICB0Lmxpc3RfY29udGVudFthXS5zdG9wX2xvc3NfcHJpY2UgPiAwCiAgICAgICAgICAgICAgICAgID8gKHQuc3RvcExvc2UgPSBwYXJzZUZsb2F0KAogICAgICAgICAgICAgICAgICAgICAgdC5saXN0X2NvbnRlbnRbYV0uc3RvcF9sb3NzX3ByaWNlCiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpKQogICAgICAgICAgICAgICAgICA6ICh0LnN0b3BMb3NlID0gdC5vcGVuUHJpY2UpLAogICAgICAgICAgICAgICAgMSA9PSB0Lmxpc3RfY29udGVudFthXS50eXBlCiAgICAgICAgICAgICAgICAgID8gKCh0Lm9yZGVyVHlwZSA9ICJidXkiKSwKICAgICAgICAgICAgICAgICAgICB0Lmxpc3RfY29udGVudFthXS50YXJnZXRfcHJvZml0X3ByaWNlID4gMAogICAgICAgICAgICAgICAgICAgICAgPyAodC5tb2RhbFByb2ZpdCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAodC50YXJnZXRQcm9maXQgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0Lmxpc3RfY29udGVudFthXS5wcmljZSkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICh0Lmxpc3RfY29udGVudFthXS5zaGFyZSAtIDApCiAgICAgICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkKICAgICAgICAgICAgICAgICAgICAgIDogKHQubW9kYWxQcm9maXQgPSAiMC4wMCIpLAogICAgICAgICAgICAgICAgICAgIHQubGlzdF9jb250ZW50W2FdLnN0b3BfbG9zc19wcmljZSA+IDAKICAgICAgICAgICAgICAgICAgICAgID8gKHQubW9kYWxTdG9wID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQubGlzdF9jb250ZW50W2FdLnByaWNlKS50b0ZpeGVkKDIpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc3RvcExvc2UgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICh0Lmxpc3RfY29udGVudFthXS5zaGFyZSAtIDApCiAgICAgICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkKICAgICAgICAgICAgICAgICAgICAgIDogKHQubW9kYWxTdG9wID0gIjAuMDAiKSkKICAgICAgICAgICAgICAgICAgOiAoKHQub3JkZXJUeXBlID0gInNlbGwiKSwKICAgICAgICAgICAgICAgICAgICB0Lmxpc3RfY29udGVudFthXS50YXJnZXRfcHJvZml0X3ByaWNlID4gMAogICAgICAgICAgICAgICAgICAgICAgPyAodC5tb2RhbFByb2ZpdCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyc2VGbG9hdCh0Lmxpc3RfY29udGVudFthXS5wcmljZSkudG9GaXhlZCgyKSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldFByb2ZpdCAtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHQubGlzdF9jb250ZW50W2FdLnNoYXJlIC0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpKQogICAgICAgICAgICAgICAgICAgICAgOiAodC5tb2RhbFByb2ZpdCA9ICIwLjAwIiksCiAgICAgICAgICAgICAgICAgICAgdC5saXN0X2NvbnRlbnRbYV0uc3RvcF9sb3NzX3ByaWNlID4gMAogICAgICAgICAgICAgICAgICAgICAgPyAodC5tb2RhbFN0b3AgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHQuc3RvcExvc2UgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0Lmxpc3RfY29udGVudFthXS5wcmljZSkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICh0Lmxpc3RfY29udGVudFthXS5zaGFyZSAtIDApCiAgICAgICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkKICAgICAgICAgICAgICAgICAgICAgIDogKHQubW9kYWxTdG9wID0gIjAuMDAiKSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICAiYnV5IiA9PSB0Lm9yZGVyVHlwZQogICAgICAgICAgICAgID8gMSA9PSBlCiAgICAgICAgICAgICAgICA/ICgodC50YXJnZXRQcm9maXQgPSAoCiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0LnRhcmdldFByb2ZpdCkgKyAwLjAxCiAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSksCiAgICAgICAgICAgICAgICAgICh0Lm1vZGFsUHJvZml0ID0gKAogICAgICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQudGFyZ2V0UHJvZml0KSAtIHQucHJlc2VudFByaWNlIC0gMCkgKgogICAgICAgICAgICAgICAgICAgICh0LnNoYXJlTnVtIC0gMCkKICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpKSkKICAgICAgICAgICAgICAgIDogKCh0LnN0b3BMb3NlID0gKHBhcnNlRmxvYXQodC5zdG9wTG9zZSkgKyAwLjAxKS50b0ZpeGVkKDIpKSwKICAgICAgICAgICAgICAgICAgKHQubW9kYWxTdG9wID0gKAogICAgICAgICAgICAgICAgICAgICh0LnByZXNlbnRQcmljZSAtIHQuc3RvcExvc2UgLSAwKSAqCiAgICAgICAgICAgICAgICAgICAgKHQuc2hhcmVOdW0gLSAwKQogICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMikpKQogICAgICAgICAgICAgIDogMSA9PSBlCiAgICAgICAgICAgICAgPyAoKHQudGFyZ2V0UHJvZml0ID0gKHBhcnNlRmxvYXQodC50YXJnZXRQcm9maXQpICsgMC4wMSkudG9GaXhlZCgKICAgICAgICAgICAgICAgICAgMgogICAgICAgICAgICAgICAgKSksCiAgICAgICAgICAgICAgICAodC5tb2RhbFByb2ZpdCA9ICgKICAgICAgICAgICAgICAgICAgKHBhcnNlRmxvYXQodC5wcmVzZW50UHJpY2UgLSB0LnRhcmdldFByb2ZpdCkgLSAwKSAqCiAgICAgICAgICAgICAgICAgICh0LnNoYXJlTnVtIC0gMCkKICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkpCiAgICAgICAgICAgICAgOiAoKHQuc3RvcExvc2UgPSAocGFyc2VGbG9hdCh0LnN0b3BMb3NlKSArIDAuMDEpLnRvRml4ZWQoMikpLAogICAgICAgICAgICAgICAgKHQubW9kYWxTdG9wID0gKAogICAgICAgICAgICAgICAgICAocGFyc2VGbG9hdCh0LnN0b3BMb3NlIC0gdC5wcmVzZW50UHJpY2UpIC0gMCkgKgogICAgICAgICAgICAgICAgICAodC5zaGFyZU51bSAtIDApCiAgICAgICAgICAgICAgICApLnRvRml4ZWQoMikpKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZWR1Y2U6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgImJ1eSIgPT0gdC5vcmRlclR5cGUKICAgICAgICAgICAgICA/IDEgPT0gZQogICAgICAgICAgICAgICAgPyB0LnRhcmdldFByb2ZpdCA+IDAKICAgICAgICAgICAgICAgICAgPyAoKHQudGFyZ2V0UHJvZml0ID0gKAogICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0LnRhcmdldFByb2ZpdCkgLSAwLjAxCiAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpKSwKICAgICAgICAgICAgICAgICAgICAodC5tb2RhbFByb2ZpdCA9ICgKICAgICAgICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQudGFyZ2V0UHJvZml0KSAtIHQucHJlc2VudFByaWNlIC0gMCkgKgogICAgICAgICAgICAgICAgICAgICAgKHQuc2hhcmVOdW0gLSAwKQogICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkpCiAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKHQuJHQoImxldmVyLnRoYW56b25lIikpCiAgICAgICAgICAgICAgICA6IHQuc3RvcExvc2UgPiAwCiAgICAgICAgICAgICAgICA/ICgodC5zdG9wTG9zZSA9IChwYXJzZUZsb2F0KHQuc3RvcExvc2UpIC0gMC4wMSkudG9GaXhlZCgyKSksCiAgICAgICAgICAgICAgICAgICh0Lm1vZGFsU3RvcCA9ICgKICAgICAgICAgICAgICAgICAgICAodC5wcmVzZW50UHJpY2UgLSB0LnN0b3BMb3NlIC0gMCkgKgogICAgICAgICAgICAgICAgICAgICh0LnNoYXJlTnVtIC0gMCkKICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpKSkKICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKHQuJHQoImxldmVyLnRoYW56b25lIikpCiAgICAgICAgICAgICAgOiAxID09IGUKICAgICAgICAgICAgICA/IHQudGFyZ2V0UHJvZml0ID4gMAogICAgICAgICAgICAgICAgPyAoKHQudGFyZ2V0UHJvZml0ID0gKAogICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodC50YXJnZXRQcm9maXQpIC0gMC4wMQogICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMikpLAogICAgICAgICAgICAgICAgICAodC5tb2RhbFByb2ZpdCA9ICgKICAgICAgICAgICAgICAgICAgICAodC5wcmVzZW50UHJpY2UgLSB0LnRhcmdldFByb2ZpdCAtIDApICoKICAgICAgICAgICAgICAgICAgICAodC5zaGFyZU51bSAtIDApCiAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkpCiAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyh0LiR0KCJsZXZlci50aGFuem9uZSIpKQogICAgICAgICAgICAgIDogdC5zdG9wTG9zZSA+IDAKICAgICAgICAgICAgICA/ICgodC5zdG9wTG9zZSA9IChwYXJzZUZsb2F0KHQuc3RvcExvc2UpIC0gMC4wMSkudG9GaXhlZCgyKSksCiAgICAgICAgICAgICAgICAodC5tb2RhbFN0b3AgPSAoCiAgICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQuc3RvcExvc2UgLSB0LnByZXNlbnRQcmljZSkgLSAwKSAqCiAgICAgICAgICAgICAgICAgICh0LnNoYXJlTnVtIC0gMCkKICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSkpCiAgICAgICAgICAgICAgOiBsYXllci5tc2codC4kdCgibGV2ZXIudGhhbnpvbmUiKSk7CiAgICAgICAgICB9LAogICAgICAgICAgaW5wdXRWYWx1ZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICBpZiAoImJ1eSIgPT0gdC5vcmRlclR5cGUpCiAgICAgICAgICAgICAgaWYgKDEgPT0gZSkgewogICAgICAgICAgICAgICAgdmFyIGEgPSAoCiAgICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQudGFyZ2V0UHJvZml0KSAtCiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdCh0LnByZXNlbnRQcmljZSkgLQogICAgICAgICAgICAgICAgICAgIDApICoKICAgICAgICAgICAgICAgICAgKHQuc2hhcmVOdW0gLSAwKQogICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpOwogICAgICAgICAgICAgICAgdC5tb2RhbFByb2ZpdCA9IGEgPiAwID8gYSA6IDA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBpID0gKAogICAgICAgICAgICAgICAgICAocGFyc2VGbG9hdCh0LnByZXNlbnRQcmljZSkgLSBwYXJzZUZsb2F0KHQuc3RvcExvc2UpIC0gMCkgKgogICAgICAgICAgICAgICAgICAodC5zaGFyZU51bSAtIDApCiAgICAgICAgICAgICAgICApLnRvRml4ZWQoMik7CiAgICAgICAgICAgICAgICB0Lm1vZGFsU3RvcCA9IGkgPiAwID8gaSA6IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICgxID09IGUpIHsKICAgICAgICAgICAgICB2YXIgbiA9ICgKICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQucHJlc2VudFByaWNlKSAtIHBhcnNlRmxvYXQodC50YXJnZXRQcm9maXQpIC0gMCkgKgogICAgICAgICAgICAgICAgKHQuc2hhcmVOdW0gLSAwKQogICAgICAgICAgICAgICkudG9GaXhlZCgyKTsKICAgICAgICAgICAgICB0Lm1vZGFsUHJvZml0ID0gbiA+IDAgPyBuIDogMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YXIgcyA9ICgKICAgICAgICAgICAgICAgIChwYXJzZUZsb2F0KHQuc3RvcExvc2UpIC0gcGFyc2VGbG9hdCh0LnByZXNlbnRQcmljZSkgLSAwKSAqCiAgICAgICAgICAgICAgICAodC5zaGFyZU51bSAtIDApCiAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpOwogICAgICAgICAgICAgIHQubW9kYWxTdG9wID0gcyA+IDAgPyBzIDogMDsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGNsb3NlTW9zYWw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICBlLm1vZGFsU2hvdyA9ICExOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbWZpcm06IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2xldmVyL3NldHN0b3AiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgIGlkOiBlLm1vZGFsSWQsCiAgICAgICAgICAgICAgICB0YXJnZXRfcHJvZml0X3ByaWNlOiBlLnRhcmdldFByb2ZpdCwKICAgICAgICAgICAgICAgIHN0b3BfbG9zc19wcmljZTogZS5zdG9wTG9zZSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpCiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgaW4gKChlLm1vZGFsU2hvdyA9ICExKSwKICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgZS5saXN0X2NvbnRlbnQpKQogICAgICAgICAgICAgICAgICAgIGUubW9kYWxJZCA9PSBlLmxpc3RfY29udGVudFthXS5pZCAmJgogICAgICAgICAgICAgICAgICAgICAgKChlLmxpc3RfY29udGVudFthXS50YXJnZXRfcHJvZml0X3ByaWNlID0gZS50YXJnZXRQcm9maXQpLAogICAgICAgICAgICAgICAgICAgICAgKGUubGlzdF9jb250ZW50W2FdLnN0b3BfbG9zc19wcmljZSA9IGUuc3RvcExvc2UpKTsKICAgICAgICAgICAgICAgIGVsc2UgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgc3RvcFRvdGFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS5zdG9wTW9kYWwgPSAhMDsKICAgICAgICAgIH0sCiAgICAgICAgICBjbG9zZVN0b3BNb2RhbDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIGUuc3RvcE1vZGFsID0gITE7CiAgICAgICAgICB9LAogICAgICAgICAgc2VsZWN0U3RvcDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICB0LnNlbGVjdFR5cGUgPSBlOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbWZpcm1Nb2RhbDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgICAgdCA9IDA7CiAgICAgICAgICAgICh0ID0gImFsbCIgPT0gZS5zZWxlY3RUeXBlID8gMCA6ICJidXkiID09IGUuc2VsZWN0VHlwZSA/IDEgOiAyKSwKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvbGV2ZXIvYmF0Y2hfY2xvc2UiLAogICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7IHR5cGU6IHQgfSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgID8gKChlLnN0b3BNb2RhbCA9ICExKSwKICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5saXN0X2NvbnRlbnQgPSBbXSksCiAgICAgICAgICAgICAgICAgICAgICBlLmluaXQoKSkKICAgICAgICAgICAgICAgICAgICA6ICgoZS5zdG9wTW9kYWwgPSAhMSksIGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSkpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAoZS5zdG9wTW9kYWwgPSAhMSksIGNvbnNvbGUubG9nKHQpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGFsZXJ0KHQuJHQoImxldmVyLnJldm9rZU9yZGVyIiksICIiLCB7CiAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHQuJHQoImN1eS5jb25maXJtIiksCiAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M6ICJtb2RhbENvbmZpcm0iLAogICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25DbGFzczogImNvbmZpcm1CdG4iLAogICAgICAgICAgICAgIGNsb3NlT25DbGlja01vZGFsOiAhMCwKICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICJjb25maXJtIiA9PSBhICYmCiAgICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgICAgICAuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9jYW5jZWwiLAogICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IGlkOiBlIH0sCiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFiQ2xpY2sodC5zdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKGkpLCBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgSWkgPSBUaSwKICAgICAgQmkgPSAoYSgiOGIyNSIpLCBPYmplY3QoaFsiYSJdKShJaSwgemksIFBpLCAhMSwgbnVsbCwgImE4ZmI3ZjFlIiwgbnVsbCkpLAogICAgICBOaSA9IEJpLmV4cG9ydHMsCiAgICAgIEZpID0gewogICAgICAgIG5hbWU6ICJkZWFsQ2VudGVyIiwKICAgICAgICBjb21wb25lbnRzOiB7CiAgICAgICAgICBpbmRleEhlYWRlcjogQSwKICAgICAgICAgIGxvYWQ6IDEsCiAgICAgICAgICBub3RpY2U6IGphLAogICAgICAgICAgZGVhbDogYmUsCiAgICAgICAgICB0djogTnQsCiAgICAgICAgICBleGNoYW5nZTogUHQsCiAgICAgICAgICBtYXJrZXQ6IEthLAogICAgICAgICAgdHJhZGU6IGFpLAogICAgICAgICAgY2hhcnQ6IFZlLAogICAgICAgICAgZW50cnVzdDogbGksCiAgICAgICAgICBoaXNlbnRydXN0OiBoaSwKICAgICAgICAgIGRldGFpbDogYmksCiAgICAgICAgICBjdXJyZW5jeTogYXQsCiAgICAgICAgICBjb21wbGV0ZTogbHQsCiAgICAgICAgICBsZXZlclRyYW5zYWN0aW9uOiBBaSwKICAgICAgICAgIGxldmVyVHJhbnNhY3Rpb25zOiBOaSwKICAgICAgICB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7IGlzUm91dGVyQWxpdmU6ICEwIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRkcmVzcyIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczoge30sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgIH0sCiAgICAgIExpID0gRmksCiAgICAgICRpID0gKGEoIjZjYmIiKSwgT2JqZWN0KGhbImEiXSkoTGksIEVhLCBWYSwgITEsIG51bGwsIG51bGwsIG51bGwpKSwKICAgICAgTWkgPSAkaS5leHBvcnRzLAogICAgICBFaSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJsb2dpbiIsIHN0YXRpY1N0eWxlOiB7IGhlaWdodDogIjEwMCUiIH0gfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiaW5kZXhIZWFkZXIiKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImNvbnRlbnRCSyIsCiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBoZWlnaHQ6ICJjYWxjKDEwMCUgLSAyMHB4KSIgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjb250ZW50LXdyYXAiLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGhlaWdodDogIjEwMCUiIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW4iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJtYWluX3RpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxvZ2luLndlbGNvbWUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWlucHV0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pdGVtIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudHMiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuYWNjb3VudF9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImFjY291bnRfbnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImlucHV0LW1haW4gaW5wdXQtY29udGVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIjEyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuYWNjb3VudF9udW1iZXIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuYWNjb3VudF9udW1iZXIgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWlucHV0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pdGVtIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicHdkIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwYXNzd29yZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpbnB1dC1tYWluIGlucHV0LWNvbnRlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInBhc3N3b3JkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoOiAiMTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogInB3ZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUucGFzc3dvcmQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUucGFzc3dvcmQgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNTdHlsZTogeyAibWFyZ2luLXRvcCI6ICIxMHB4IiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWl0ZW0iIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1idXR0b24gY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUubG9naW4gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImhlYWRlci5pbiIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiaGF2ZS1hY2NvdW50IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3V0ZXItbGluayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlQ29sb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgY3Vyc29yOiAicG9pbnRlciIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLmZldGlwIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigiICIgKyBlLl9zKGUuJHQoImxvZ2luLmZvcmdldCIpKSArICIgIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJyaWdodC10aXAgIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuJHQoImxvZ2luLmRvbnQiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJsb2dpbi5pbnZpdGUiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgaHJlZjogIi9yZWdpc3Rlci9yZWdpc3Rlci5odG1sIiB9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImJhc2VDb2xvciBtdDIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXJzIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICAxCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgVmkgPSBbXSwKICAgICAgRGkgPQogICAgICAgIChhKCI0OThhIiksCiAgICAgICAgewogICAgICAgICAgbmFtZTogImxvZ2luIiwKICAgICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEsIGluZGV4Rm9vdGVyOiBLIH0sCiAgICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7IGFjY291bnRfbnVtYmVyOiAiIiwgcGFzc3dvcmQ6ICIiIH07CiAgICAgICAgICB9LAogICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLmFjY291bnRfbnVtYmVyID0gdGhpcy4kcm91dGUucXVlcnkuYWNjb3VudF9udW1iZXIgfHwgIiI7CiAgICAgICAgICB9LAogICAgICAgICAgbWV0aG9kczogewogICAgICAgICAgICB1c2VySW5mbzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS91c2VyL2luZm8iLAogICAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICAgKGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJ1c2VyX2lkIiwgZS5kYXRhLm1lc3NhZ2UuaWQpLAogICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKAogICAgICAgICAgICAgICAgICAgICAgImV4dGVuc2lvbl9jb2RlIiwKICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YS5tZXNzYWdlLmV4dGVuc2lvbl9jb2RlCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiaXNfc2VsbGVyIiwgZS5kYXRhLm1lc3NhZ2UuaXNfc2VsbGVyKSwKICAgICAgICAgICAgICAgICAgICBldmVudEJ1cy4kZW1pdCgic2VsbGVyIiwgZS5kYXRhLm1lc3NhZ2UuaXNfc2VsbGVyKSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGZldGlwOmZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgbGF5ZXIubXNnKCJGb3Jnb3QgeW91ciBwYXNzd29yZCwgcGxlYXNlIGNvbnRhY3QgY3VzdG9tZXIgc2VydmljZSIpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBsb2dpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICAgIHQgPSB0aGlzLiR1dGlscy50cmltKHRoaXMuYWNjb3VudF9udW1iZXIpLAogICAgICAgICAgICAgICAgYSA9IHRoaXMuJHV0aWxzLnRyaW0odGhpcy5wYXNzd29yZCk7CiAgICAgICAgICAgICAgaWYgKCIiICE9IHRoaXMuYWNjb3VudF9udW1iZXIubGVuZ3RoKQogICAgICAgICAgICAgICAgaWYgKHRoaXMucGFzc3dvcmQubGVuZ3RoIDwgNikKICAgICAgICAgICAgICAgICAgbGF5ZXIudGlwcygi5a+G56CB5LiN6IO95bCP5LqO5YWt5L2NISIsICIjcHdkIik7CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgdmFyIGkgPSBsYXllci5sb2FkKCk7CiAgICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvdXNlci9sb2dpbiIsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyX3N0cmluZzogdCwgcGFzc3dvcmQ6IGEsIHR5cGU6IDEgfSwKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoaSksCiAgICAgICAgICAgICAgICAgICAgICAgIChhID0gYS5kYXRhKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PT0gYS50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAobG9jYWxTdG9yYWdlLnNldEl0ZW0oInRva2VuIiwgYS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2NvdW50TnVtIiwgdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzdG9yZS5jb21taXQoInNldEFjY291bnROdW0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudXNlckluZm8oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHJvdXRlci5wdXNoKCIvIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYXllci5tc2coYS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBsYXllci50aXBzKCLor7fovpPlhaXotKblj7chIiwgIiNhY2NvdW50Iik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgYmVmb3JlUm91dGVFbnRlcjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgYSgpOwogICAgICAgICAgfSwKICAgICAgICB9KSwKICAgICAgUmkgPSBEaSwKICAgICAgVWkgPSAoYSgiNTU3MSIpLCBPYmplY3QoaFsiYSJdKShSaSwgRWksIFZpLCAhMSwgbnVsbCwgbnVsbCwgbnVsbCkpLAogICAgICBPaSA9IFVpLmV4cG9ydHMsCiAgICAgIFdpID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgeyBzdGF0aWNTdHlsZTogeyBoZWlnaHQ6ICIxMDAlIiB9LCBhdHRyczogeyBpZDogInJlZ2lzdGVyLWJveCIgfSB9LAogICAgICAgICAgWwogICAgICAgICAgICBhKCJpbmRleEhlYWRlciIpLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbi1yZWdpc3RlciAiIH0sIFsKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCIsCiAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXgtd2lkdGgiOiAiMTIwMHB4IiwgbWFyZ2luOiAiMCBhdXRvIiB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInJlZy1jb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtaW4taGVpZ2h0IjogIjcwMHB4Iiwgd2lkdGg6ICI2MjBweCIgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicmVnaWR0ZXJzIikpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgZS5tb2JpbGVSZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtcmFkaW8tZ3JvdXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBtYXJnaW46ICIxNXB4IDAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogZS5jaGFuZ2VNb2RlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaXNNb2JpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzTW9iaWxlID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJpc01vYmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1yYWRpby1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgbGFiZWw6ICJwaG9uZSIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXIucGhvbmUiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1yYWRpby1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgbGFiZWw6ICJlbWFpbCIgfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXIuZW1haWwiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInRydWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAic3RlcC1vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImFjY291bnQtYm94IGhpZGUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXIwMS5jb3VudHJ5IikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLXNlbGVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhY2tncm91bmQtY29sb3IiOiAiIzE4MWQyNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiNTIwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogIiNjN2NjZTYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICIwcHggc29saWQgIzRlNWI4NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuY291bnRyeVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuY291bnRyeVMgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiY291bnRyeVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5jb3VudHJ5LCBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImVsLW9wdGlvbiIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLm5hbWVfZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuY291bnRyeV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaXNNYgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsYXkubm9waG9uZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzTWIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLl9lKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGlwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGF5Lm5lbWFpbCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzTWIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmFyZWFDb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYXJlYUNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogInNlbGVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjaG9vc2VUZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja2dyb3VuZC1jb2xvciI6ICIjMWUyMjM1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAiI2M3Y2NlNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6ICIxcHggc29saWQgIzRlNWI4NSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBuYW1lOiAiIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gQXJyYXkucHJvdG90eXBlLmZpbHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQub3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnNlbGVjdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdmFsdWUiIGluIGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGUuX3ZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuYXJlYUNvZGUgPSB0LnRhcmdldC5tdWx0aXBsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fbChlLmNvdW50cnksIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBpLCBkb21Qcm9wczogeyB2YWx1ZTogaSB9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyh0LmFyZWFfY29kZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3ModC5uYW1lX2VuKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzTWIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmFjY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJwaG9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJ0ZXh0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5hY2NvdW50IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuYWNjb3VudCA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pc01iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlLl9lKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmFjY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoInJlZ2lzdGVyLmVtYWlsbnVtIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmFjY291bnQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5hY2NvdW50ID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGUuc2hvd0NvZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBzdGF0aWNDbGFzczogInRpcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBzdGF0aWNTdHlsZTogeyAibWFyZ2luLWJvdHRvbSI6ICIxMHB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgW2UuX3YoZS5fcyhlLiR0KCJyZWdpc3Rlci5jb2RlbnVtIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5zaG93Q29kZQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29kZS1ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHZhbHVlOiBlLmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZXhwcmVzc2lvbjogImNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoInJlZ2lzdGVyLmNvZGVudW0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgcmVhZG9ubHk6IGUucmVhZG9ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuY29kZSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZS5yZWFkb25seSA9ICExOwogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIChlLmNvZGUgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjb2RlLWJ0biBjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBvbjogeyBjbGljazogZS5zZW5kQ29kZSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIFtlLl92KGUuX3MoZS5zZW5kQ29kZVRleHQpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgZS5pc0NoZWNrbmFtZQogICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicHdkLWJveCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGlwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInJlZ2lzdGVyLmxvZ3B3ZCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUucHdkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicHdkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInB3ZC1pbnB1dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJwYXNzd29yZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgicmVnaXN0ZXIucHdkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5wd2QgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5wd2QgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgXSkgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICBlLmlzQ2hlY2tuYW1lCiAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnZpdGUtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXIucmVwd2QiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnJlcHdkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicmVwd2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAicmVwd2QtaW5wdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicGFzc3dvcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoInJlZ2lzdGVyLnJlcHdkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5yZXB3ZCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLnJlcHdkID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgIF0pIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgZS5pc0NoZWNrbmFtZQogICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJpbnZpdGUtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGlwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJyZWdpc3Rlci5pbnZpdGVjb2RlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaW52aXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImludml0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpbnZpdGUtaW5wdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgicmVnaXN0ZXIuaW52aXRlY29kZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5pbnZpdGUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5pbnZpdGUgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGNvbHVtbiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtY2hlY2tib3giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmFncmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5hZ3JlZSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgieGlleWkiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInJlZy1idG4gY29uZmlybS1idG4gY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgImJvcmRlci1yYWRpdXMiOiAiNHB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5yZWdpc3RlciB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCIgIiArIGUuX3MoZS4kdCgicmVnaXN0ZXJzIikpICsgIiAiKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZkNvbG9yMiIsCiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAicGFkZGluZy10b3AiOiAiMTIwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAiZm9udC13ZWlnaHQiOiAibm9ybWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgImZvbnQtc2l6ZSI6ICIxNHB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjUwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXh0LWFsaWduIjogImxlZnQiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFtlLl92KGUuX3MoZS4kdCgieGlleWkxLmZpcnN0IikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJ4aWV5aTEuc2Vjb25kIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgW2UuX3YoZS5fcyhlLiR0KCJ4aWV5aTEudGhpcmQiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbZS5fdihlLl9zKGUuJHQoInhpZXlpMS5mb3VydGgiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSwKICAgICAgICAgIDEKICAgICAgICApOwogICAgICB9LAogICAgICBqaSA9IFtdLAogICAgICBxaSA9CiAgICAgICAgKGEoIjEyNzYiKSwKICAgICAgICBbCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis4NiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDM3LAogICAgICAgICAgICBuYW1lX2NuOiAi5Lit5Zu95aSn6ZmGLS0tWiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJDaGluYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrODUyIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNzEsCiAgICAgICAgICAgIG5hbWVfY246ICLkuK3lm73pppnmuK8tLS1aIiwKICAgICAgICAgICAgbmFtZV9lbjogIkhvbmcgS29uZyAoQ2hpbmEpIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis4NTMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA1MDAsCiAgICAgICAgICAgIG5hbWVfY246ICLkuK3lm73mvrPpl6gtLS1aIiwKICAgICAgICAgICAgbmFtZV9lbjogIk1hY2FvIChDaGluYSkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzg4NiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE2OSwKICAgICAgICAgICAgbmFtZV9jbjogIuS4reWbveWPsOa5vi0tLVoiLAogICAgICAgICAgICBuYW1lX2VuOiAiVGFpd2FuIChDaGluYSkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzgxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogODEsCiAgICAgICAgICAgIG5hbWVfY246ICLml6XmnKwtLS1aIiwKICAgICAgICAgICAgbmFtZV9lbjogIkphcGFuIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis0NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDQ0NDQ0LAogICAgICAgICAgICBuYW1lX2NuOiAi6Iux5Zu9LS0tVSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJVSyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzU1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMywKICAgICAgICAgICAgbmFtZV9jbjogIumYv+WwlOW3tOWwvOS6mi0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQWxiYW5pYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjEzIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNCwKICAgICAgICAgICAgbmFtZV9jbjogIumYv+WwlOWPiuWIqeS6mi0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQWxnZXJpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzc2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogNSwKICAgICAgICAgICAgbmFtZV9jbjogIuWuiemBk+WwlOWFseWSjOWbvS0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQW5kb3JyYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjQ0IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMSwKICAgICAgICAgICAgbmFtZV9jbjogIuWuieWTpeaLiS0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQW5nb2xhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisxMjY0IiwKICAgICAgICAgICAgY291bnRyeV9pZDogNiwKICAgICAgICAgICAgbmFtZV9jbjogIuWuieWcreaLieWymy0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQW5ndWlsbGEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzEyNjgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA3LAogICAgICAgICAgICBuYW1lX2NuOiAi5a6J5o+Q55Oc5ZKM5be05biD6L6+LS0tQSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJBbnRpZ3VhIGFuZCBCYXJidWRhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDgsCiAgICAgICAgICAgIG5hbWVfY246ICLpmL/moLnlu7ctLS1BIiwKICAgICAgICAgICAgbmFtZV9lbjogIkFyZ2VudGluYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjk3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTk0LAogICAgICAgICAgICBuYW1lX2NuOiAi6Zi/6bKB5be0LS0tQSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJBcnViYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjQ3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTAsCiAgICAgICAgICAgIG5hbWVfY246ICLpmL/mo67mnb4tLS1BIiwKICAgICAgICAgICAgbmFtZV9lbjogIkFzY2Vuc2lvbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjEiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMSwKICAgICAgICAgICAgbmFtZV9jbjogIua+s+Wkp+WIqeS6mi0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQXVzdHJhbGlhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2NzIiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxOTUsCiAgICAgICAgICAgIG5hbWVfY246ICLmvrPlpKfliKnkuprmtbflpJbpooblnLAtLS1BIiwKICAgICAgICAgICAgbmFtZV9lbjogIkF1c3RyYWxpYW5vdmVyc2Vhc3RlcnJpdG9yaWVzIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis0MyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEyLAogICAgICAgICAgICBuYW1lX2NuOiAi5aWl5Zyw5YipLS0tQSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJBdXN0cmlhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis5OTQiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMywKICAgICAgICAgICAgbmFtZV9jbjogIumYv+WhnuaLnOeWhi0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiQXplcmJhaWphbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA0OSwKICAgICAgICAgICAgbmFtZV9jbjogIuWfg+WPii0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiRWd5cHQiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM3MiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDUxLAogICAgICAgICAgICBuYW1lX2NuOiAi54ix5rKZ5bC85LqaLS0tQSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJFc3RvbmlhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNTEiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA1MiwKICAgICAgICAgICAgbmFtZV9jbjogIuWfg+WhnuS/hOavlOS6mi0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiRXRoaW9waWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM1MyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDc4LAogICAgICAgICAgICBuYW1lX2NuOiAi54ix5bCU5YWwLS0tQSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJJcmVsYW5kIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis5NjgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMjgsCiAgICAgICAgICAgIG5hbWVfY246ICLpmL/mm7wtLS1BIiwKICAgICAgICAgICAgbmFtZV9lbjogIk9tYW4iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzk3MSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE4MSwKICAgICAgICAgICAgbmFtZV9jbjogIumYv+aLieS8r+iBlOWQiOmFi+mVv+WbvS0tLUEiLAogICAgICAgICAgICBuYW1lX2VuOiAiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzEyNDIiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNCwKICAgICAgICAgICAgbmFtZV9jbjogIuW3tOWTiOmprC0tLUIiLAogICAgICAgICAgICBuYW1lX2VuOiAiQmFoYW1hcyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTczIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTUsCiAgICAgICAgICAgIG5hbWVfY246ICLlt7TmnpctLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJhaHJhaW4iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzEyNDYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNywKICAgICAgICAgICAgbmFtZV9jbjogIuW3tOW3tOWkmuaWry0tLUIiLAogICAgICAgICAgICBuYW1lX2VuOiAiQmFyYmFkb3MiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzMyIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTksCiAgICAgICAgICAgIG5hbWVfY246ICLmr5TliKnml7YtLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJlbGdpdW0iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzUwMSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIwLAogICAgICAgICAgICBuYW1lX2NuOiAi5Lyv5Yip5YW5LS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJCZWxpemUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzIyOSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIxLAogICAgICAgICAgICBuYW1lX2NuOiAi6LSd5a6BLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJCZW5pbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMTQ0MSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIyLAogICAgICAgICAgICBuYW1lX2NuOiAi55m+5oWV5aSn576k5bKbLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJCZXJtdWRhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis5NzUiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxOTYsCiAgICAgICAgICAgIG5hbWVfY246ICLkuI3kuLktLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJodXRhbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzg3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTk3LAogICAgICAgICAgICBuYW1lX2NuOiAi5rOi5pav5bC85Lqa5ZKM6buR5aGe5ZOl57u06YKjLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJCb3NuaWFhbmRIZXJ6ZWdvdmluYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjY3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjQsCiAgICAgICAgICAgIG5hbWVfY246ICLljZrojKjnk6bnurMtLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJvdHN3YW5hIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1NSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDI1LAogICAgICAgICAgICBuYW1lX2NuOiAi5be06KW/LS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJCcmF6aWwiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM1OSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDI3LAogICAgICAgICAgICBuYW1lX2NuOiAi5L+d5Yqg5Yip5LqaLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJCdWxnYXJpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjI2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjgsCiAgICAgICAgICAgIG5hbWVfY246ICLluIPln7rnurPms5XntKItLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJ1cmtpbmEgRmFzbyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjU3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMzAsCiAgICAgICAgICAgIG5hbWVfY246ICLluIPpmobov6otLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJ1cnVuZGkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzg1NSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDg1LAogICAgICAgICAgICBuYW1lX2NuOiAi5p+s5Z+U5a+oLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJDYW1ib2RpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjUzIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNDYsCiAgICAgICAgICAgIG5hbWVfY246ICLlkInluIPmj5AtLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIkRqaWJvdXRpIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNTQiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA3MywKICAgICAgICAgICAgbmFtZV9jbjogIuWGsOWymy0tLUIiLAogICAgICAgICAgICBuYW1lX2VuOiAiSWNlbGFuZCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTcwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjE5LAogICAgICAgICAgICBuYW1lX2NuOiAi5be05YuS5pav5Z2mLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJQYWxlc3RpbmUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzUwNyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEzMCwKICAgICAgICAgICAgbmFtZV9jbjogIuW3tOaLv+mprC0tLUIiLAogICAgICAgICAgICBuYW1lX2VuOiAiUGFuYW1hIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2NzUiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMzEsCiAgICAgICAgICAgIG5hbWVfY246ICLlt7TluIPkuprmlrDlh6DlhoXkupotLS1CIiwKICAgICAgICAgICAgbmFtZV9lbjogIlBhcHVhIE5ldyBDdWluZWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzU5NSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEzMiwKICAgICAgICAgICAgbmFtZV9jbjogIuW3tOaLieWcrS0tLUIiLAogICAgICAgICAgICBuYW1lX2VuOiAiUGFyYWd1YXkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzUxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTMzLAogICAgICAgICAgICBuYW1lX2NuOiAi56eY6bKBLS0tQiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJQZXJ1IiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis0OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEzNSwKICAgICAgICAgICAgbmFtZV9jbjogIuazouWFsC0tLUIiLAogICAgICAgICAgICBuYW1lX2VuOiAiUG9sYW5kIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNDAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMDMsCiAgICAgICAgICAgIG5hbWVfY246ICLotaTpgZPlh6DlhoXkupotLS1DIiwKICAgICAgICAgICAgbmFtZV9lbjogIkVxdWF0b3JpYWxHdWluZWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzQ5IiwKICAgICAgICAgICAgY291bnRyeV9pZDogNjAsCiAgICAgICAgICAgIG5hbWVfY246ICLlvrflm70tLS1EIiwKICAgICAgICAgICAgbmFtZV9lbjogIkdlcm1hbnkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY4NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE0NSwKICAgICAgICAgICAgbmFtZV9jbjogIuS4nOiQqOaRqeS6mijnvo4pLS0tRCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTYW1vYSBFYXN0ZXJuIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyMjgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNzMsCiAgICAgICAgICAgIG5hbWVfY246ICLlpJrlk6UtLS1EIiwKICAgICAgICAgICAgbmFtZV9lbjogIlRvZ28iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzQ1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogNDUsCiAgICAgICAgICAgIG5hbWVfY246ICLkuLnpuqYtLS1EIiwKICAgICAgICAgICAgbmFtZV9lbjogIkRlbm1hcmsiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzE4MDkiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA0NywKICAgICAgICAgICAgbmFtZV9jbjogIuWkmuexs+WwvOWKoOWFseWSjOWbvS0tLUQiLAogICAgICAgICAgICBuYW1lX2VuOiAiRG9taW5pY2FuIFJlcHVibGljIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2NzAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMDIsCiAgICAgICAgICAgIG5hbWVfY246ICLkuJzluJ3msbYtLS1EIiwKICAgICAgICAgICAgbmFtZV9lbjogIkVhc3RUaW1vciIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTcxNCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIzMCwKICAgICAgICAgICAgbmFtZV9jbjogIui/quaLnOmFi+mVv+WbvS0tLUQiLAogICAgICAgICAgICBuYW1lX2VuOiAiRW1pcmF0ZSBvZiBEdWJhaSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjkxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjA0LAogICAgICAgICAgICBuYW1lX2NuOiAi5Y6E56uL54m56YeM5LqaLS0tRSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJFcml0cmVhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTQyLAogICAgICAgICAgICBuYW1lX2NuOiAi5L+E572X5pavLS0tRSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJSdXNzaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzIzOCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE5OCwKICAgICAgICAgICAgbmFtZV9jbjogIuS9m+W+l+inki0tLUYiLAogICAgICAgICAgICBuYW1lX2VuOiAiQ2FwZVZlcmRlIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1MDAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMDUsCiAgICAgICAgICAgIG5hbWVfY246ICLnpo/lhYvlhbDnvqTlspstLS1GIiwKICAgICAgICAgICAgbmFtZV9lbjogIkZhbGtsYW5kSXNsYW5kcyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjk4IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjA2LAogICAgICAgICAgICBuYW1lX2NuOiAi5rOV572X576k5bKbLS0tRiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJGYXJvZUlzbGFuZHMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY3OSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDUzLAogICAgICAgICAgICBuYW1lX2NuOiAi5paQ5rWOLS0tRiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJGaWppIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNTgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA1NCwKICAgICAgICAgICAgbmFtZV9jbjogIuiKrOWFsC0tLUYiLAogICAgICAgICAgICBuYW1lX2VuOiAiRmlubGFuZCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA1NSwKICAgICAgICAgICAgbmFtZV9jbjogIuazleWbvS0tLUYiLAogICAgICAgICAgICBuYW1lX2VuOiAiRnJhbmNlIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1OTQiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA1NiwKICAgICAgICAgICAgbmFtZV9jbjogIuazleWxnuWcreS6mumCoy0tLUYiLAogICAgICAgICAgICBuYW1lX2VuOiAiRnJlbmNoIEd1aWFuYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjg5IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTM2LAogICAgICAgICAgICBuYW1lX2NuOiAi5rOV5bGe54675Yip5bC86KW/5LqaLS0tRiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJGcmVuY2ggUG9seW5lc2lhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2MyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEzNCwKICAgICAgICAgICAgbmFtZV9jbjogIuiPsuW+i+Wuvi0tLUYiLAogICAgICAgICAgICBuYW1lX2VuOiAiUGhpbGlwcGluZXMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM3OSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIyNywKICAgICAgICAgICAgbmFtZV9jbjogIuaiteiSguWGiOWfji0tLUYiLAogICAgICAgICAgICBuYW1lX2VuOiAiVmF0aWNhbkNpdHkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzU3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMzgsCiAgICAgICAgICAgIG5hbWVfY246ICLlk6XkvKbmr5TkupotLS1HIiwKICAgICAgICAgICAgbmFtZV9lbjogIkNvbG9tYmlhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1MDYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA0MSwKICAgICAgICAgICAgbmFtZV9jbjogIuWTpeaWr+i+vum7juWKoC0tLUciLAogICAgICAgICAgICBuYW1lX2VuOiAiQ29zdGEgUmljYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjIwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNTgsCiAgICAgICAgICAgIG5hbWVfY246ICLlhojmr5TkupotLS1HIiwKICAgICAgICAgICAgbmFtZV9lbjogIkdhbWJpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTk1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogNTksCiAgICAgICAgICAgIG5hbWVfY246ICLmoLzpsoHlkInkupotLS1HIiwKICAgICAgICAgICAgbmFtZV9lbjogIkdlb3JnaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI5OSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIwNywKICAgICAgICAgICAgbmFtZV9jbjogIuagvOmZteWFsOWymy0tLUciLAogICAgICAgICAgICBuYW1lX2VuOiAiR3JlZW5sYW5kIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisxNDczIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNjQsCiAgICAgICAgICAgIG5hbWVfY246ICLmoLzmnpfnurPovr4tLS1HIiwKICAgICAgICAgICAgbmFtZV9lbjogIkdyZW5hZGEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzU5MCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIwOCwKICAgICAgICAgICAgbmFtZV9jbjogIueTnOW+t+e9l+aZri0tLUciLAogICAgICAgICAgICBuYW1lX2VuOiAiR3VhZGVsb3VwZSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMTY3MSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDY1LAogICAgICAgICAgICBuYW1lX2NuOiAi5YWz5bKbLS0tRyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJHdWFtIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1OTIiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA2OCwKICAgICAgICAgICAgbmFtZV9jbjogIuWcreS6mumCoy0tLUciLAogICAgICAgICAgICBuYW1lX2VuOiAiR3V5YW5hIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1MDkiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA2OSwKICAgICAgICAgICAgbmFtZV9jbjogIua1t+WcsC0tLUgiLAogICAgICAgICAgICBuYW1lX2VuOiAiSGFpdGkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzUwNCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDcwLAogICAgICAgICAgICBuYW1lX2NuOiAi5rSq6YO95ouJ5pavLS0tSCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJIb25kdXJhcyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrODIiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA4OCwKICAgICAgICAgICAgbmFtZV9jbjogIumfqeWbvS0tLUgiLAogICAgICAgICAgICBuYW1lX2VuOiAiS29yZWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM4MiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIxNSwKICAgICAgICAgICAgbmFtZV9jbjogIum7keWxsS0tLUgiLAogICAgICAgICAgICBuYW1lX2VuOiAiTW9udGVuZWdybyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNTk5IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTIwLAogICAgICAgICAgICBuYW1lX2NuOiAi6I235bGe5a6J55qE5YiX5pavLS0tSCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJOZXRoZXJpYW5kcyBBbnRpbGxlcyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzEiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMjEsCiAgICAgICAgICAgIG5hbWVfY246ICLojbflhbAtLS1IIiwKICAgICAgICAgICAgbmFtZV9lbjogIk5ldGhlcmxhbmRzIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMzIsCiAgICAgICAgICAgIG5hbWVfY246ICLliqDmi7/lpKctLS1KIiwKICAgICAgICAgICAgbmFtZV9lbjogIkNhbmFkYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNDIwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNDQsCiAgICAgICAgICAgIG5hbWVfY246ICLmjbflhYstLS1KIiwKICAgICAgICAgICAgbmFtZV9lbjogIkN6ZWNoIFJlcHVibGljIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNDEiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA1NywKICAgICAgICAgICAgbmFtZV9jbjogIuWKoOiTrC0tLUoiLAogICAgICAgICAgICBuYW1lX2VuOiAiR2Fib24iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzIzMyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDYxLAogICAgICAgICAgICBuYW1lX2NuOiAi5Yqg57qzLS0tSiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJHaGFuYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjQ1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjA5LAogICAgICAgICAgICBuYW1lX2NuOiAi5Yeg5YaF5Lqa5q+U57uNLS0tSiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJHdWluZWEtQmlzc2F1IiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2ODYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMTAsCiAgICAgICAgICAgIG5hbWVfY246ICLln7rph4zlt7Tmlq8tLS1KIiwKICAgICAgICAgICAgbmFtZV9lbjogIktpcmliYXRpIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis5OTYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA5MCwKICAgICAgICAgICAgbmFtZV9jbjogIuWQieWwlOWQieaWr+Wdpi0tLUoiLAogICAgICAgICAgICBuYW1lX2VuOiAiS3lyZ3l6c3RhbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMTM0NSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDMzLAogICAgICAgICAgICBuYW1lX2NuOiAi5byA5pu8576k5bKbLS0tSyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJDYXltYW4gSXNsYW5kcy4iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI2OSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE5OSwKICAgICAgICAgICAgbmFtZV9jbjogIuenkeaRqee9l+e+pOWymy0tLUsiLAogICAgICAgICAgICBuYW1lX2VuOiAiQ29tb3Jvc0lzbGFuZHMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY4MiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDQwLAogICAgICAgICAgICBuYW1lX2NuOiAi5bqT5YWL576k5bKbLS0tSyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJDb29rIElzbGFuZHMuIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszODUiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMDAsCiAgICAgICAgICAgIG5hbWVfY246ICLlhYvnvZflnLDkupotLS1LIiwKICAgICAgICAgICAgbmFtZV9lbjogIkNyb2F0aWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI1NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDg3LAogICAgICAgICAgICBuYW1lX2NuOiAi6IKv5bC85LqaLS0tSyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJLZW55YSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTY1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogODksCiAgICAgICAgICAgIG5hbWVfY246ICLnp5HlqIHnibktLS1LIiwKICAgICAgICAgICAgbmFtZV9lbjogIkt1d2FpdCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTc0IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTM5LAogICAgICAgICAgICBuYW1lX2NuOiAi5Y2h5aGU5bCULS0tSyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJRYXRhciIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrODU2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogOTEsCiAgICAgICAgICAgIG5hbWVfY246ICLogIHmjJ0tLS1MIiwKICAgICAgICAgICAgbmFtZV9lbjogIkxhb3MiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM3MSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDkyLAogICAgICAgICAgICBuYW1lX2NuOiAi5ouJ6ISx57u05LqaLS0tTCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJMYXR2aWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI2NiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDk0LAogICAgICAgICAgICBuYW1lX2NuOiAi6I6x57Si5omYLS0tTCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJMZXNvdGhvIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis0MjMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA5NywKICAgICAgICAgICAgbmFtZV9jbjogIuWIl+aUr+aVpuWjq+eZuy0tLUwiLAogICAgICAgICAgICBuYW1lX2VuOiAiTGllY2h0ZW5zdGVpbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzcwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogOTgsCiAgICAgICAgICAgIG5hbWVfY246ICLnq4vpmbblrpstLS1MIiwKICAgICAgICAgICAgbmFtZV9lbjogIkxpdGh1YW5pYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzUyIiwKICAgICAgICAgICAgY291bnRyeV9pZDogOTksCiAgICAgICAgICAgIG5hbWVfY246ICLljaLmo67loKEtLS1MIiwKICAgICAgICAgICAgbmFtZV9lbjogIkx1eGVtYm91cmciLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI2MiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE0MCwKICAgICAgICAgICAgbmFtZV9jbjogIueVmeWwvOaXui0tLUwiLAogICAgICAgICAgICBuYW1lX2VuOiAiUmV1bmlvbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNDAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNDEsCiAgICAgICAgICAgIG5hbWVfY246ICLnvZfpqazlsLzkupotLS1MIiwKICAgICAgICAgICAgbmFtZV9lbjogIlJvbWFuaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI1MCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIyMCwKICAgICAgICAgICAgbmFtZV9jbjogIuWNouaXuui+vi0tLUwiLAogICAgICAgICAgICBuYW1lX2VuOiAiUndhbmRhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogIiIsCiAgICAgICAgICAgIG5hbWVfY246ICLnvo7lm70tLS1NIiwKICAgICAgICAgICAgbmFtZV9lbjogIkFtZXJhbmNyYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzg5IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjExLAogICAgICAgICAgICBuYW1lX2NuOiAi6ams5YW26aG/LS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNYWNlZG9uaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI2MSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEwMSwKICAgICAgICAgICAgbmFtZV9jbjogIumprOi+vuWKoOaWr+WKoC0tLU0iLAogICAgICAgICAgICBuYW1lX2VuOiAiTWFkYWdhc2NhciIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjY1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTAyLAogICAgICAgICAgICBuYW1lX2NuOiAi6ams5ouJ57u0LS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNYWxhd2kiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzYwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTAzLAogICAgICAgICAgICBuYW1lX2NuOiAi6ams5p2l6KW/5LqaLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNYWxheXNpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTYwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTA0LAogICAgICAgICAgICBuYW1lX2NuOiAi6ams5bCU5Luj5aSrLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNYWxkaXZlcyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjIzIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTA1LAogICAgICAgICAgICBuYW1lX2NuOiAi6ams6YeMLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNYWxpIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNTYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMDYsCiAgICAgICAgICAgIG5hbWVfY246ICLpqazogLPku5YtLS1NIiwKICAgICAgICAgICAgbmFtZV9lbjogIk1hbHRhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyMjMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMDcsCiAgICAgICAgICAgIG5hbWVfY246ICLpqazph4zkuprpgqPnvqTlspstLS1NIiwKICAgICAgICAgICAgbmFtZV9lbjogIk1hcnNoYWxsIElzbGFuZHMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY5MiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIxMiwKICAgICAgICAgICAgbmFtZV9jbjogIumprOe7jeWwlOe+pOWymy0tLU0iLAogICAgICAgICAgICBuYW1lX2VuOiAiTWFyc2hhbGxJc2xhbmRzIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1OTYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMDgsCiAgICAgICAgICAgIG5hbWVfY246ICLpqazmj5DlsLzlhYstLS1NIiwKICAgICAgICAgICAgbmFtZV9lbjogIk1hcnRpbmlxdWUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzIyMiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIxMywKICAgICAgICAgICAgbmFtZV9jbjogIuavm+mHjOWhlOWwvOS6mi0tLU0iLAogICAgICAgICAgICBuYW1lX2VuOiAiTWF1cml0YW5pYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjMwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTA5LAogICAgICAgICAgICBuYW1lX2NuOiAi5q+b6YeM5rGC5pavLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNYXVyaXRpdXMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzUyIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTEwLAogICAgICAgICAgICBuYW1lX2NuOiAi5aKo6KW/5ZOlLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNZXhpY28iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY5MSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIxNCwKICAgICAgICAgICAgbmFtZV9jbjogIuWvhuWFi+e9l+WwvOilv+S6mi0tLU0iLAogICAgICAgICAgICBuYW1lX2VuOiAiTWljcm9uZXNpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzczIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTExLAogICAgICAgICAgICBuYW1lX2NuOiAi5pGp5bCU5aSa55OmLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNb2xkb3ZhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNzciLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMTIsCiAgICAgICAgICAgIG5hbWVfY246ICLmkannurPlk6UtLS1NIiwKICAgICAgICAgICAgbmFtZV9lbjogIk1vbmFjbyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTc2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTEzLAogICAgICAgICAgICBuYW1lX2NuOiAi6JKZ5Y+kLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNb25nb2xpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMTY2NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDExNCwKICAgICAgICAgICAgbmFtZV9jbjogIuiSmeeJueWhnuaLieeJueWymy0tLU0iLAogICAgICAgICAgICBuYW1lX2VuOiAiTW9udHNlcnJhdCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjEyIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTE1LAogICAgICAgICAgICBuYW1lX2NuOiAi5pGp5rSb5ZOlLS0tTSIsCiAgICAgICAgICAgIG5hbWVfZW46ICJNb3JvY2NvIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNTgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMTYsCiAgICAgICAgICAgIG5hbWVfY246ICLojqvmoZHmr5TlhYstLS1NIiwKICAgICAgICAgICAgbmFtZV9lbjogIk1vemFtYmlxdWUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI2NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDExNywKICAgICAgICAgICAgbmFtZV9jbjogIue6s+exs+avlOS6mi0tLU4iLAogICAgICAgICAgICBuYW1lX2VuOiAiTmFtaWJpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjc0IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTE4LAogICAgICAgICAgICBuYW1lX2NuOiAi55GZ6bKBLS0tTiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJOYXVydSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTc3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTE5LAogICAgICAgICAgICBuYW1lX2NuOiAi5bC85rOK5bCULS0tTiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJOZXBhbCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjI3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTI0LAogICAgICAgICAgICBuYW1lX2NuOiAi5bC85pel5bCULS0tTiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJOaWdlciIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjM0IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTI1LAogICAgICAgICAgICBuYW1lX2NuOiAi5bC85pel5Yip5LqaLS0tTiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJOaWdlcmlhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2ODMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMTcsCiAgICAgICAgICAgIG5hbWVfY246ICLnur3ln4PlspstLS1OIiwKICAgICAgICAgICAgbmFtZV9lbjogIk5pdWUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzQ3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTI3LAogICAgICAgICAgICBuYW1lX2NuOiAi5oyq5aiBLS0tTiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJOb3J3YXkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTU4LAogICAgICAgICAgICBuYW1lX2NuOiAi5Y2X6Z2eLS0tTiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTb3V0aCBBZnJpY2EiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzMzOCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE4OSwKICAgICAgICAgICAgbmFtZV9jbjogIuWNl+aWr+aLieWkqy0tLU4iLAogICAgICAgICAgICBuYW1lX2VuOiAiWXVnb3NsYXZpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjgwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjE4LAogICAgICAgICAgICBuYW1lX2NuOiAi5biV5YqzLS0tUCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJQYWxhdSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzUxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTM3LAogICAgICAgICAgICBuYW1lX2NuOiAi6JGh6JCE54mZLS0tUCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJQb3J0dWdhbCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEzOCwKICAgICAgICAgICAgbmFtZV9jbjogIuazouWkmum7juWQhC0tLVAiLAogICAgICAgICAgICBuYW1lX2VuOiAiUHVlcnRvIFJpY28iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzQ2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTY2LAogICAgICAgICAgICBuYW1lX2NuOiAi55Ge5YW4LS0tUiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTd2VkZW4iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzQxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTY3LAogICAgICAgICAgICBuYW1lX2NuOiAi55Ge5aOrLS0tUiIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTd2l0emVybGFuZCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzU3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogNDMsCiAgICAgICAgICAgIG5hbWVfY246ICLloZ7mtabot6/mlq8tLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIkN5cHJ1cyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNTAzIiwKICAgICAgICAgICAgY291bnRyeV9pZDogNTAsCiAgICAgICAgICAgIG5hbWVfY246ICLokKjlsJTnk6blpJotLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIkVsIFNhbHZhZG9yIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis3IiwKICAgICAgICAgICAgY291bnRyeV9pZDogODYsCiAgICAgICAgICAgIG5hbWVfY246ICLlk4jokKjlhYvmlq/lnaYtLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIkthemFrc3RhbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMTc1OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE0MywKICAgICAgICAgICAgbmFtZV9jbjogIuWco+WNouilv+S6mi0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2FpbnQgTHVlaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzE3ODQiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNDQsCiAgICAgICAgICAgIG5hbWVfY246ICLlnKPmlofmo67nibnlspstLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIlNhaW50IFZpbmNlbnQiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzUwOCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIyMiwKICAgICAgICAgICAgbmFtZV9jbjogIuWco+earuWfg+WwlOWSjOWvhuWFi+mahue+pOWymy0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2FpbnRQaWVycmVhbmRNaXF1ZWxvbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzc4IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTQ3LAogICAgICAgICAgICBuYW1lX2NuOiAi5Zyj6ams5Yqb6K+6LS0tUyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTYW4gTWFyaW5vIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyMzkiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNDgsCiAgICAgICAgICAgIG5hbWVfY246ICLlnKPlpJrnvo7lkozmma7mnpfopb/mr5QtLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIlNhbyBUb21lIGFuZCBQcmluY2lwZSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTY2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTQ5LAogICAgICAgICAgICBuYW1lX2NuOiAi5rKZ54m56Zi/5ouJ5LyvLS0tUyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTYXVkaSBBcmFiaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzIyMSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1MCwKICAgICAgICAgICAgbmFtZV9jbjogIuWhnuWGheWKoOWwlC0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2VuZWdhbCIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzgxIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjIzLAogICAgICAgICAgICBuYW1lX2NuOiAi5aGe5bCU57u05LqaLS0tUyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTZXJiaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI0OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1MSwKICAgICAgICAgICAgbmFtZV9jbjogIuWhnuiIjOWwlC0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2V5Y2hlbGxlcyIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjMyIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTUyLAogICAgICAgICAgICBuYW1lX2NuOiAi5aGe5ouJ5Yip5piCLS0tUyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTaWVycmEgTGVvbmUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzQyMSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1NCwKICAgICAgICAgICAgbmFtZV9jbjogIuaWr+a0m+S8kOWFiy0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2xvdmFraWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM4NiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1NSwKICAgICAgICAgICAgbmFtZV9jbjogIuaWr+a0m+aWh+WwvOS6mi0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2xvdmVuaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY3NyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1NiwKICAgICAgICAgICAgbmFtZV9jbjogIuaJgOe9l+mXqOe+pOWymy0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU29sb21vbiBJc2xhbmRzIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis5NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE2MCwKICAgICAgICAgICAgbmFtZV9jbjogIuaWr+mHjOWFsOWNoS0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU3JpIExhbmthIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyOTAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMjEsCiAgICAgICAgICAgIG5hbWVfY246ICLlnKPotavli5Lmi7/lspstLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIlN0LkhlbGVuYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMTc1OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE2MSwKICAgICAgICAgICAgbmFtZV9jbjogIuWco+WNouilv+S6mi0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU3QuTHVjaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzE3ODQiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNjIsCiAgICAgICAgICAgIG5hbWVfY246ICLlnKPmlofmo67nibktLS1TIiwKICAgICAgICAgICAgbmFtZV9lbjogIlN0LlZpbmNlbnQiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzU5NyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE2NCwKICAgICAgICAgICAgbmFtZV9jbjogIuiLj+mHjOWNly0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU3VyaW5hbWUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzI2OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE2NSwKICAgICAgICAgICAgbmFtZV9jbjogIuaWr+WogeWjq+WFsC0tLVMiLAogICAgICAgICAgICBuYW1lX2VuOiAiU3dhemlsYW5kIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis5OTIiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNzAsCiAgICAgICAgICAgIG5hbWVfY246ICLloZTlkInlhYvmlq/lnaYtLS1UIiwKICAgICAgICAgICAgbmFtZV9lbjogIlRhamlrc3RhbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMjU1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTcxLAogICAgICAgICAgICBuYW1lX2NuOiAi5Z2m5qGR5bC85LqaLS0tVCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJUYW56YW5pYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNzIsCiAgICAgICAgICAgIG5hbWVfY246ICLms7Dlm70tLS1UIiwKICAgICAgICAgICAgbmFtZV9lbjogIlRoYWlsYW5kIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2OTAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMjQsCiAgICAgICAgICAgIG5hbWVfY246ICLmiZjlhYvlirPnvqTlspstLS1UIiwKICAgICAgICAgICAgbmFtZV9lbjogIlRva2VsYXUiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY3NiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE3NCwKICAgICAgICAgICAgbmFtZV9jbjogIuaxpOWKoC0tLVQiLAogICAgICAgICAgICBuYW1lX2VuOiAiVG9uZ2EiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzE4NjgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNzUsCiAgICAgICAgICAgIG5hbWVfY246ICLnibnnq4vlsLzovr7lkozlpJrlt7Tlk6UtLS1UIiwKICAgICAgICAgICAgbmFtZV9lbjogIlRyaW5pZGFkIGFuZCBUb2JhZ28iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzIxNiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE3NiwKICAgICAgICAgICAgbmFtZV9jbjogIueqgeWwvOaWry0tLVQiLAogICAgICAgICAgICBuYW1lX2VuOiAiVHVuaXNpYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNzcsCiAgICAgICAgICAgIG5hbWVfY246ICLlnJ/ogLPlhbYtLS1UIiwKICAgICAgICAgICAgbmFtZV9lbjogIlR1cmtleSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrOTkzIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTc4LAogICAgICAgICAgICBuYW1lX2NuOiAi5Zyf5bqT5pu85pav5Z2mLS0tVCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJUdXJrbWVuaXN0YW4iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY4OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIyNSwKICAgICAgICAgICAgbmFtZV9jbjogIuWbvueTpuWNoi0tLVQiLAogICAgICAgICAgICBuYW1lX2VuOiAiVHV2YWx1IiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2NzMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyNiwKICAgICAgICAgICAgbmFtZV9jbjogIuaWh+iOsS0tLVciLAogICAgICAgICAgICBuYW1lX2VuOiAiQnJ1bmVpIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1MDIiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA2NiwKICAgICAgICAgICAgbmFtZV9jbjogIuWNseWcsOmprOaLiS0tLVciLAogICAgICAgICAgICBuYW1lX2VuOiAiR3VhdGVtYWxhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNTYiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxNzksCiAgICAgICAgICAgIG5hbWVfY246ICLkuYzlubLovr4tLS1XIiwKICAgICAgICAgICAgbmFtZV9lbjogIlVnYW5kYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzgwIiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTgwLAogICAgICAgICAgICBuYW1lX2NuOiAi5LmM5YWL5YWwLS0tVyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJVa3JhaW5lIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1OTgiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxODQsCiAgICAgICAgICAgIG5hbWVfY246ICLkuYzmi4nlnK0tLS1XIiwKICAgICAgICAgICAgbmFtZV9lbjogIlVydWd1YXkiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzk5OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE4NSwKICAgICAgICAgICAgbmFtZV9jbjogIuS5jOWFueWIq+WFi+aWr+Wdpi0tLVciLAogICAgICAgICAgICBuYW1lX2VuOiAiVXpiZWtpc3RhbiIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjc4IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMjI2LAogICAgICAgICAgICBuYW1lX2NuOiAi55Om5Yqq6Zi/5Zu+LS0tVyIsCiAgICAgICAgICAgIG5hbWVfZW46ICJWYW51YXR1IiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1OCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE4NiwKICAgICAgICAgICAgbmFtZV9jbjogIuWnlOWGheeRnuaLiS0tLVciLAogICAgICAgICAgICBuYW1lX2VuOiAiVmVuZXp1ZWxhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2ODEiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMjgsCiAgICAgICAgICAgIG5hbWVfY246ICLnk6bliKnmlq/lkozlr4zlm77nurMtLS1XIiwKICAgICAgICAgICAgbmFtZV9lbjogIldhbGxpc2FuZEZ1dHVuYSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrMzAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA2MywKICAgICAgICAgICAgbmFtZV9jbjogIuW4jOiFii0tLVgiLAogICAgICAgICAgICBuYW1lX2VuOiAiR3JlZWNlIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNiIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDcyLAogICAgICAgICAgICBuYW1lX2NuOiAi5YyI54mZ5YipLS0tWCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJIdW5nYXJ5IiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDEyMiwKICAgICAgICAgICAgbmFtZV9jbjogIuaWsOilv+WFsC0tLVgiLAogICAgICAgICAgICBuYW1lX2VuOiAiTmV3IFplYWxhbmQiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzY4NyIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDIxNiwKICAgICAgICAgICAgbmFtZV9jbjogIuaWsOWWgOmHjOWkmuWwvOS6mi0tLVgiLAogICAgICAgICAgICBuYW1lX2VuOiAiTmV3Q2FsZWRvbmlhIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis1MDUiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxMjMsCiAgICAgICAgICAgIG5hbWVfY246ICLlsLzliqDmi4nnk5wtLS1YIiwKICAgICAgICAgICAgbmFtZV9lbjogIk5pY2FyYWd1YSIsCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBhcmVhX2NvZGU6ICIrNjg1IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMTQ2LAogICAgICAgICAgICBuYW1lX2NuOiAi6KW/6JCo5pGp5LqaLS0tWCIsCiAgICAgICAgICAgIG5hbWVfZW46ICJTYW1vYSBXZXN0ZXJuIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIis2NSIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1MywKICAgICAgICAgICAgbmFtZV9jbjogIuaWsOWKoOWdoS0tLVgiLAogICAgICAgICAgICBuYW1lX2VuOiAiU2luZ2Fwb3JlIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDE1OSwKICAgICAgICAgICAgbmFtZV9jbjogIuilv+ePreeJmS0tLVgiLAogICAgICAgICAgICBuYW1lX2VuOiAiU3BhaW4iLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzM3NCIsCiAgICAgICAgICAgIGNvdW50cnlfaWQ6IDksCiAgICAgICAgICAgIG5hbWVfY246ICLkuprnvo7lsLzkupotLS1ZIiwKICAgICAgICAgICAgbmFtZV9lbjogIkFybWVuaWEiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzEyODQiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAyMjksCiAgICAgICAgICAgIG5hbWVfY246ICLoi7HlsZ7nu7TlsJTkuqznvqTlspstLS1ZIiwKICAgICAgICAgICAgbmFtZV9lbjogIkJyaXRpc2ggVmlyZ2luIElzbGFuZHMiLAogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgYXJlYV9jb2RlOiAiKzU2IiwKICAgICAgICAgICAgY291bnRyeV9pZDogMzYsCiAgICAgICAgICAgIG5hbWVfY246ICLmmbrliKktLS1aIiwKICAgICAgICAgICAgbmFtZV9lbjogIkNoaWxlIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIiszNTAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiA2MiwKICAgICAgICAgICAgbmFtZV9jbjogIuebtOW4g+e9l+mZgC0tLVoiLAogICAgICAgICAgICBuYW1lX2VuOiAiR2licmFsdGFyIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNDMiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxOTIsCiAgICAgICAgICAgIG5hbWVfY246ICLmiY7kvIrlsJQtLS1aIiwKICAgICAgICAgICAgbmFtZV9lbjogIlphaXJlIiwKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIGFyZWFfY29kZTogIisyNjAiLAogICAgICAgICAgICBjb3VudHJ5X2lkOiAxOTMsCiAgICAgICAgICAgIG5hbWVfY246ICLotZ7mr5TkupotLS1aIiwKICAgICAgICAgICAgbmFtZV9lbjogIlphbWJpYSIsCiAgICAgICAgICB9LAogICAgICAgIF0pLAogICAgICBHaSA9IHsKICAgICAgICBuYW1lOiAicmVnaXN0ZXIiLAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEsIGluZGV4Rm9vdGVyOiBLIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc2hvd0NvZGU6IHNob3dWZXJpZnlDb2RlLAogICAgICAgICAgICBzaG93SW52aXRlOiBzaG93SW52aXRlLAogICAgICAgICAgICBtb2JpbGVSZWdpc3Rlcjogc2hvd01vYmlsZVJlZ2lzdGVyLAogICAgICAgICAgICBpc01vYmlsZTogImVtYWlsIiwKICAgICAgICAgICAgYWdyZWU6ICExLAogICAgICAgICAgICByZWFkb25seTogITAsCiAgICAgICAgICAgIHNlbmRDb2RlVGV4dDogdGhpcy4kdCgicmVnaXN0ZXIuc2VuZGNvZGUiKSwKICAgICAgICAgICAgc2VuZENvZGVUaW1lOiA2MCwKICAgICAgICAgICAgYXJlYUNvZGU6IDAsCiAgICAgICAgICAgIGNvZGVUcnVlOiAhMSwKICAgICAgICAgICAgaXNNYjogITEsCiAgICAgICAgICAgIGlzQ2hlY2tuYW1lOiAhMSwKICAgICAgICAgICAgYWNjb3VudDogIiIsCiAgICAgICAgICAgIHB3ZDogIiIsCiAgICAgICAgICAgIHJlcHdkOiAiIiwKICAgICAgICAgICAgY29kZTogc2hvd1ZlcmlmeUNvZGUgPyAiIiA6IGRlZmF1bHRDb2RlLAogICAgICAgICAgICBpbnZpdGU6IHNob3dJbnZpdGUgPyAiIiA6IGRlZmF1bHRJbnZpdGUsCiAgICAgICAgICAgIHRpbWVyOiAiIiwKICAgICAgICAgICAgc2hvd0xpc3Q6ICExLAogICAgICAgICAgICBjb3VudHJ5OiBxaSwKICAgICAgICAgICAgcHJvdmluY2U6IHsgaWQ6ICIiLCBuYW1lOiB0aGlzLiR0KCJsZWdhbHRyYWRlLnNlbGVjdCIpIH0sCiAgICAgICAgICAgIHByb3ZpbmNlczogW10sCiAgICAgICAgICAgIGNpdHk6IHsgaWQ6ICIiLCBuYW1lOiB0aGlzLiR0KCJsZWdhbHRyYWRlLnNlbGVjdCIpIH0sCiAgICAgICAgICAgIGNpdGllczogW10sCiAgICAgICAgICAgIGRpc3RyaWN0OiB7IGlkOiAiIiwgbmFtZTogdGhpcy4kdCgibGVnYWx0cmFkZS5zZWxlY3QiKSB9LAogICAgICAgICAgICBkaXN0cmljdHM6IFtdLAogICAgICAgICAgICBjb3VudHJ5UzogIiIsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLmdldF9hbGxfcGFyYW1zKCkuZXh0ZW5zaW9uX2NvZGU7CiAgICAgICAgICBlICYmICh0aGlzLmludml0ZSA9IGUpLCBjb25zb2xlLmxvZyhxaSk7CiAgICAgICAgICB2YXIgdCA9IHRoaXMuZ2V0X2FsbF9wYXJhbXMoKS5lbWFpbDsKICAgICAgICAgIGlmICgoKHQgPSBkZWNvZGVVUklDb21wb25lbnQodCkpLCB0KSkgewogICAgICAgICAgICB2YXIgYSA9CiAgICAgICAgICAgICAgL14oW2EtekEtWjAtOV0rW198XF98XC5dPykqW2EtekEtWjAtOV0rQChbYS16QS1aMC05XStbX3xcX3xcLl0/KSpbYS16QS1aMC05XStcLlthLXpBLVpdezIsM30kLzsKICAgICAgICAgICAgYS50ZXN0KHQpICYmICh0aGlzLmFjY291bnQgPSB0KTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGNoYW5nZU1vZGU6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuaXNNYiA9ICJwaG9uZSIgPT09IGU7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0X2FsbF9wYXJhbXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICB2YXIgZSwKICAgICAgICAgICAgICAgIHQgPSBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgICAgICAgYSA9IHQuc3Vic3RyaW5nKHQuaW5kZXhPZigiPyIpICsgMSwgdC5sZW5ndGgpLnNwbGl0KCImIiksCiAgICAgICAgICAgICAgICBpID0ge30sCiAgICAgICAgICAgICAgICBuID0gMDsKICAgICAgICAgICAgICAoZSA9IGFbbl0pOwogICAgICAgICAgICAgIG4rKwogICAgICAgICAgICApIHsKICAgICAgICAgICAgICB2YXIgcyA9IGUuc3Vic3RyaW5nKDAsIGUuaW5kZXhPZigiPSIpKS50b0xvd2VyQ2FzZSgpLAogICAgICAgICAgICAgICAgbyA9IGUuc3Vic3RyaW5nKGUuaW5kZXhPZigiPSIpICsgMSwgZS5sZW5ndGgpOwogICAgICAgICAgICAgIG8uaW5kZXhPZigiIyIpID4gLTEgJiYgKG8gPSBvLnNwbGl0KCIjIilbMF0pLAogICAgICAgICAgICAgICAgKGlbc10gPSBkZWNvZGVVUkkobykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgfSwKICAgICAgICAgIGdldFJlZ2lvbjogZnVuY3Rpb24gKGUsIHQsIGEpIHsKICAgICAgICAgICAgaWYgKCIiID09IHQpCiAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICh0aGlzLnNob3dMaXN0ID0gITEpLCB2b2lkICh0aGlzLmRpc3RyaWN0ID0geyBpZDogZSwgbmFtZTogYSB9KQogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICgiY2l0aWVzIiA9PSB0KSB7CiAgICAgICAgICAgICAgaWYgKGEgPT0gdGhpcy5wcm92aW5jZS5uYW1lKQogICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKHRoaXMuc2hvd0xpc3QgPSAiY2l0aWVzIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoImRpc3RyaWN0cyIgPT0gdCAmJiBhID09IHRoaXMuY2l0eS5uYW1lKQogICAgICAgICAgICAgIHJldHVybiB2b2lkICh0aGlzLnNob3dMaXN0ID0gImRpc3RyaWN0cyIpOwogICAgICAgICAgfSwKICAgICAgICAgIHNldElzTWI6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICh0aGlzLmFjY291bnQgPSAiIiksCiAgICAgICAgICAgICAgKHRoaXMucHdkID0gIiIpLAogICAgICAgICAgICAgICh0aGlzLnJlcHdkID0gIiIpLAogICAgICAgICAgICAgICh0aGlzLmNvZGUgPSAiIiksCiAgICAgICAgICAgICAgKHRoaXMuaW52aXRlID0gIiIpLAogICAgICAgICAgICAgICh0aGlzLmlzTWIgPSBlKSwKICAgICAgICAgICAgICAodGhpcy5jb2RlVHJ1ZSA9ICExKSwKICAgICAgICAgICAgICAodGhpcy5zaG93TGlzdCA9ICExKSwKICAgICAgICAgICAgICAodGhpcy5wcm92aW5jZXMgPSBbXSksCiAgICAgICAgICAgICAgKHRoaXMuY2l0aWVzID0gW10pLAogICAgICAgICAgICAgICh0aGlzLmRpc3RyaWN0cyA9IFtdKSwKICAgICAgICAgICAgICAodGhpcy5wcm92aW5jZSA9IHsgaWQ6ICIiLCBuYW1lOiB0aGlzLiR0KCJsZWdhbHRyYWRlLnNlbGVjdCIpIH0pLAogICAgICAgICAgICAgICh0aGlzLmNpdHkgPSB7IGlkOiAiIiwgbmFtZTogdGhpcy4kdCgibGVnYWx0cmFkZS5zZWxlY3QiKSB9KSwKICAgICAgICAgICAgICAodGhpcy5kaXN0cmljdCA9IHsgaWQ6ICIiLCBuYW1lOiB0aGlzLiR0KCJsZWdhbHRyYWRlLnNlbGVjdCIpIH0pLAogICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7CiAgICAgICAgICAgIHZhciB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmNvZGUtYnRuIik7CiAgICAgICAgICAgICh0LmRpc2FibGVkID0gITEpLCAodC5pbm5lckhUTUwgPSB0aGlzLiR0KCJjb2RlIikpOwogICAgICAgICAgfSwKICAgICAgICAgIHNlbmRDb2RlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgYSA9IHRoaXMsCiAgICAgICAgICAgICAgaSA9IHRoaXMuaXNNYiwKICAgICAgICAgICAgICBuID0gInNtc19zZW5kIjsKICAgICAgICAgICAgaWYgKCIiICE9IHRoaXMuYWNjb3VudCkgewogICAgICAgICAgICAgIGlmICghZS50YXJnZXQuZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgIGlmIChpKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpKSB7CiAgICAgICAgICAgICAgICAgIHZhciBzID0KICAgICAgICAgICAgICAgICAgICAvXihbYS16QS1aMC05XStbX3xcX3xcLl0/KSpbYS16QS1aMC05XStAKFthLXpBLVowLTldK1tffFxffFwuXT8pKlthLXpBLVowLTldK1wuW2EtekEtWl17Miw1fSQvOwogICAgICAgICAgICAgICAgICBpZiAoIXMudGVzdCh0aGlzLmFjY291bnQpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIHRoaXMuJG1lc3NhZ2UuZXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLiR0KCJyZWdpc3Rlci5lbWFpbG51bSIpCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgbiA9ICJzbXNfbWFpbCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgbyA9IHsgdXNlcl9zdHJpbmc6IHRoaXMuYWNjb3VudCB9OwogICAgICAgICAgICAgICAgInNtc19zZW5kIiA9PSBuICYmCiAgICAgICAgICAgICAgICAgIChvLmNvdW50cnlfY29kZSA9IHFpW3RoaXMuYXJlYUNvZGVdLmFyZWFfY29kZSk7CiAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMuJGxvYWRpbmcoewogICAgICAgICAgICAgICAgICBsb2NrOiAhMCwKICAgICAgICAgICAgICAgICAgdGV4dDogIkxvYWRpbmciLAogICAgICAgICAgICAgICAgICBzcGlubmVyOiAiZWwtaWNvbi1sb2FkaW5nIiwKICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogInJnYmEoMCwgMCwgMCwgMC43KSIsCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoeyB1cmw6ICIvYXBpLyIgKyBuLCBtZXRob2Q6ICJwb3N0IiwgZGF0YTogbyB9KS50aGVuKAogICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIHIuY2xvc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICJlcnJvciIgIT0gZS5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgPyAodC4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoYS5zZW5kQ29kZVRpbWUgPSA2MCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHQudGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhLnNlbmRDb2RlVGltZS0tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYS5zZW5kQ29kZVRleHQgPSBhLnNlbmRDb2RlVGltZSArICJzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgPT0gYS5zZW5kQ29kZVRpbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoYS50aW1lciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoYS5zZW5kQ29kZVRleHQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS4kdCgicmVnaXN0ZXIuc2VuZGNvZGUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxZTMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBhLiRtZXNzYWdlLmVycm9yKGUuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB0aGlzLiRtZXNzYWdlLmVycm9yKGEuJHQoImxheS5wYWNjb3VudCIpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjaGVja0NvZGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLmNvZGU7CiAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLmFjY291bnQpCiAgICAgICAgICAgICAgaWYgKCIiICE9IHRoaXMuY29kZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNYikgewogICAgICAgICAgICAgICAgICBpZiAoIS9eMVswLTldezEwfSQvLnRlc3QodGhpcy5hY2NvdW50KSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCBsYXllci5tc2coIuivt+i+k+WFpeato+ehrueahOaJi+acuuWPtyIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgKICAgICAgICAgICAgICAgICAgIS9eKFthLXpBLVowLTldK1tffFxffFwuXT8pKlthLXpBLVowLTldK0AoW2EtekEtWjAtOV0rW198XF98XC5dPykqW2EtekEtWjAtOV0rXC5bYS16QS1aXXsyLDV9JC8udGVzdCgKICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY291bnQKICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCBsYXllci5tc2codGhpcy4kdCgicmVnaXN0ZXIuZW1haWxudW0iKSk7CiAgICAgICAgICAgICAgICB2YXIgdCA9IHt9LAogICAgICAgICAgICAgICAgICBhID0gInVzZXIvY2hlY2tfZW1haWwiOwogICAgICAgICAgICAgICAgdGhpcy5pc01iCiAgICAgICAgICAgICAgICAgID8gKCh0ID0geyBtb2JpbGVfY29kZTogdGhpcy5jb2RlIH0pLAogICAgICAgICAgICAgICAgICAgIChhID0gInVzZXIvY2hlY2tfbW9iaWxlIikpCiAgICAgICAgICAgICAgICAgIDogKHQgPSB7IGVtYWlsX2NvZGU6IHRoaXMuY29kZSB9KSwKICAgICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS8iICsgYSwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB0LAogICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKChlLmNvZGVUcnVlID0gITApLCBlLmdldFJlZ2lvbigiIiwgInByb3ZpbmNlcyIpKTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBlbHNlIGxheWVyLm1zZyh0aGlzLiR0KCJsYXkubm90Y29kZSIpKTsKICAgICAgICAgICAgZWxzZSBsYXllci5tc2codGhpcy4kdCgibGF5LnBhY2NvdW50IikpOwogICAgICAgICAgfSwKICAgICAgICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gdGhpczsKICAgICAgICAgICAgaWYgKCF0aGlzLmFncmVlKQogICAgICAgICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIlBsZWFzZSB0aWNrIHRoZSBib3ggdG8gYWdyZWUgdG8gdGhlIHVzZXIgYWdyZWVtZW50IiksICExOwogICAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLmFjY291bnQpCiAgICAgICAgICAgICAgaWYgKHQuaXNDaGVja25hbWUpIHsKICAgICAgICAgICAgICAgIGlmICgiIiA9PSB0LnB3ZCkKICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgdC4kbWVzc2FnZS53YXJuaW5nKHQuJHQoImxheS5pbnB3ZCIpKTsKICAgICAgICAgICAgICAgIGlmICh0LnB3ZC5sZW5ndGggPCA2IHx8IHQucHdkLmxlbmd0aCA+IDE2KQogICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCB0LiRtZXNzYWdlLndhcm5pbmcodC4kdCgibGF5LnB3ZGxlbmd0aCIpKTsKICAgICAgICAgICAgICAgIGlmICgiIiA9PSB0LnJlcHdkKQogICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCB0LiRtZXNzYWdlLndhcm5pbmcodC4kdCgibGF5LnJlcHdkIikpOwogICAgICAgICAgICAgICAgaWYgKHQucHdkICE9PSBlLnJlcHdkKQogICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCB0LiRtZXNzYWdlLndhcm5pbmcodC4kdCgibGF5LnR3b3B3ZCIpKTsKICAgICAgICAgICAgICAgICAgaWYgKCIiID09IHQuaW52aXRlKQogICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCB0LiRtZXNzYWdlLndhcm5pbmcoCiAgICAgICAgICAgICAgICAgICAgdC4kdCgicmVnaXN0ZXIuaW52aXRlY29kZSIpCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHZhciBzID0gdGhpcy4kbG9hZGluZyh7CiAgICAgICAgICAgICAgICAgICAgbG9jazogITAsCiAgICAgICAgICAgICAgICAgICAgdGV4dDogIkxvYWRpbmciLAogICAgICAgICAgICAgICAgICAgIHNwaW5uZXI6ICJlbC1pY29uLWxvYWRpbmciLAogICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICJyZ2JhKDAsIDAsIDAsIDAuNykiLAogICAgICAgICAgICAgICAgICB9KSwKCiAgICAgICAgICAgICAgICAgIG4gPSB7fSwKICAgICAgICAgICAgICAgICAgaSA9IHQuaXNNYjsKCiAgICAgICAgICAgICAgICAobi50eXBlID0gaSA/ICJtb2JpbGUiIDogImVtYWlsIiksCiAgICAgICAgICAgICAgICAgIChuLnVzZXJfc3RyaW5nID0gdC5hY2NvdW50KSwKICAgICAgICAgICAgICAgICAgKG4uY29kZSA9IHQuY29kZSksCiAgICAgICAgICAgICAgICAgIChuLnBhc3N3b3JkID0gdC5wd2QpLAogICAgICAgICAgICAgICAgICAobi5yZV9wYXNzd29yZCA9IHQucmVwd2QpLAogICAgICAgICAgICAgICAgICAobi5leHRlbnNpb25fY29kZSA9IHQuaW52aXRlKSwKICAgICAgICAgICAgICAgICAgKG4uY291bnRyeV9jb2RlID0gcWlbdC5hcmVhQ29kZV0uYXJlYV9jb2RlKSwKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobikKICAgICAgICAgICAgICAgICAgdC4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvcmVnaXN0ZXIiLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogbiwKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgIHMuY2xvc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gKHQuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlLmRhdGEubWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LiRyb3V0ZXIucHVzaCgiL2NvbXBvbmVudHMvbG9naW4iKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IHQuJG1lc3NhZ2UuZXJyb3IoZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvdXNlci9jaGVja19lbWFpbCIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB7IGVtYWlsOiB0aGlzLmFjY291bnQgfSwKICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSBhLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgID8gKHQuaXNDaGVja25hbWUgPSAhMCkKICAgICAgICAgICAgICAgICAgICA6IHQuJG1lc3NhZ2UuZXJyb3IoYS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVsc2UgdGhpcy4kbWVzc2FnZS53YXJuaW5nKHRoaXMuJHQoImxheS5wYWNjb3VudCIpKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgWmkgPSBHaSwKICAgICAgUWkgPSAoYSgiZDczZSIpLCBPYmplY3QoaFsiYSJdKShaaSwgV2ksIGppLCAhMSwgbnVsbCwgbnVsbCwgbnVsbCkpLAogICAgICBIaSA9IFFpLmV4cG9ydHMsCiAgICAgIEtpID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgeyBzdGF0aWNDbGFzczogImJveCIgfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiaW5kZXhIZWFkZXIiKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm1pbmhlaWdodCIsCiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBiYWNrZ3JvdW5kOiAiIzE4MWQyNSIgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgImxpbmUtaGVpZ2h0IjogIjYwcHgiLAogICAgICAgICAgICAgICAgICAgICAgInRleHQtaW5kZW50IjogIjFlbSIsCiAgICAgICAgICAgICAgICAgICAgICAiZm9udC1zaXplIjogIjE4cHgiLAogICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICIxMjAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAiMCBhdXRvIiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImhlYWRlci5jZW50ZXIiKSkpXQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhY2NvdW50IGZsZXgiLAogICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXgtaGVpZ2h0IjogIjgwMHB4IiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgYSgibGVmdCIsIHsgYXR0cnM6IHsgbGFuZzogZS5sYW5nLCBjdXJyZW50OiAwIH0gfSksCiAgICAgICAgICAgICAgICAgICAgYSgicm91dGVyLXZpZXciLCB7CiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICBmbGV4OiAiMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJib3JkZXItcmFkaXVzIjogIjEwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAiIzAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICJtYXJnaW4tbGVmdCI6ICIzcHgiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGEoImluZGV4Rm9vdGVyIiksCiAgICAgICAgICBdLAogICAgICAgICAgMQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIEppID0gW10sCiAgICAgIFlpID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImxlZnROYXYgZnQxNiIgfSwgWwogICAgICAgICAgYSgKICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sCiAgICAgICAgICAgIGUuX2woZS5hcnJheSwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCIsCiAgICAgICAgICAgICAgICAgIGNsYXNzOiBpID09IGUuY3VyQWN0aXZlID8gImFjdGl2ZSIgOiAiIiwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvdG8oaSwgdC5wYWdlKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgYSgiaSIsIHsgc3RhdGljQ2xhc3M6ICJpY29uZm9udCBtcjEwIiwgY2xhc3M6IHQuaWNvbiB9KSwKICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3ModC50ZXh0KSldKSwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICApOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgMAogICAgICAgICAgKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgWGkgPSBbXSwKICAgICAgZW4gPSB7CiAgICAgICAgbmFtZTogImxlZnQiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGN1ckFjdGl2ZTogMCwKICAgICAgICAgICAgYXJyYXk6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcmMxOiBhKCI5MTRmIiksCiAgICAgICAgICAgICAgICBzcmMyOiBhKCIxZGI2IiksCiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLiR0KCJzZWN1cml0eS5hY2NvdW50c2V0IiksCiAgICAgICAgICAgICAgICBpY29uOiAiaWNvbi1zaGV6aGkiLAogICAgICAgICAgICAgICAgcGFnZTogImFjY291bnRTZXQiLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3JjMTogYSgiNmQwYSIpLAogICAgICAgICAgICAgICAgc3JjMjogYSgiMmIyMiIpLAogICAgICAgICAgICAgICAgdGV4dDogdGhpcy4kdCgiaGVhZGVyLnRyYWRlbG9nIiksCiAgICAgICAgICAgICAgICBpY29uOiAiaWNvbi1qaWFveWlqaWx1MSIsCiAgICAgICAgICAgICAgICBwYWdlOiAidHJhbnNmZXJMb2ciLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3JjMTogYSgiMDU5OCIpLAogICAgICAgICAgICAgICAgc3JjMjogYSgiMDIxZiIpLAogICAgICAgICAgICAgICAgdGV4dDogdGhpcy4kdCgic2VjdXJpdHkuaWRjYXJkIiksCiAgICAgICAgICAgICAgICBpY29uOiAiaWNvbi1pY29uIiwKICAgICAgICAgICAgICAgIHBhZ2U6ICJhdXRoZW50aWNhdGlvbiIsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcmMxOiBhKCIwNTk4IiksCiAgICAgICAgICAgICAgICBzcmMyOiBhKCIwMjFmIiksCiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLiR0KCJzZWN1cml0eS5pZGNhcmRoIiksCiAgICAgICAgICAgICAgICBpY29uOiAiaWNvbi1yZW56aGVuZyIsCiAgICAgICAgICAgICAgICBwYWdlOiAiYWR2YW5jZWQiLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLiRyb3V0ZS5uYW1lOwogICAgICAgICAgdGhpcy5jdXJBY3RpdmUgPSB0aGlzLmFycmF5LmZpbmRJbmRleChmdW5jdGlvbiAodCkgewogICAgICAgICAgICByZXR1cm4gdC5wYWdlID09PSBlIHx8ICh0LmNoaWxkcmVuICYmIHQuY2hpbGRyZW4uaW5jbHVkZXMoZSkpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICB0aGlzLmJ1cy4kb24oIm5hdl9uYW1lIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgZS5jdXJBY3RpdmUgPSBlLmFycmF5LmZpbmRJbmRleChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHJldHVybiBlLnBhZ2UgPT09IHQgfHwgKGUuY2hpbGRyZW4gJiYgZS5jaGlsZHJlbi5pbmNsdWRlcyh0KSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBnb3RvOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAodGhpcy5jdXJBY3RpdmUgPSBlKSwKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6IHQsIHBhcmFtczogeyBsYW5nOiB0aGlzLmxhbmcgfSB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgdG4gPSBlbiwKICAgICAgYW4gPSAoYSgiNzk1OSIpLCBPYmplY3QoaFsiYSJdKSh0biwgWWksIFhpLCAhMSwgbnVsbCwgIjUyZmMzNDM0IiwgbnVsbCkpLAogICAgICBubiA9IGFuLmV4cG9ydHMsCiAgICAgIHNuID0gewogICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBsYW5nOiAiIiB9OwogICAgICAgIH0sCiAgICAgICAgY29tcG9uZW50czogeyBpbmRleEhlYWRlcjogQSwgaW5kZXhGb290ZXI6IGRlLCBsZWZ0OiBubiB9LAogICAgICB9LAogICAgICBvbiA9IHNuLAogICAgICBybiA9IChhKCJiNjUzIiksIE9iamVjdChoWyJhIl0pKG9uLCBLaSwgSmksICExLCBudWxsLCAiM2I3NzJlZmEiLCBudWxsKSksCiAgICAgIGxuID0gcm4uZXhwb3J0cywKICAgICAgY24gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1tYWluIiB9LCBbCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC10b3AgZkNvbG9yMiIgfSwgWwogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0sIFsKICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MjQiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoIuaCqOWlve+8jCAiKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5hY2NvdW50SW5mby5hY2NvdW50X251bWJlcikpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZ0MTQgbXQxNSIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigi6K6k6K+BOiAiKSwKICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCJiNTRkIikgfSB9KSwKICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaXNob3csCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiaXNob3ciLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiZjIzZiIpIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaXNob3csCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiaXNob3ciLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiOGZlZiIpIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI2ZmZmIikgfSB9KSwKICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI1ZmNkIikgfSB9KSwKICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaXNob3csCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiaXNob3ciLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiY2M0OCIpIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmciBtdDE1IG1yNjAiIH0sIFsKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImJhc2VCdG4gbXIyMCBtb3VzZURlZmF1bHQiLAogICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAibGluZS1oZWlnaHQiOiAiNDBweCIgfSwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY3VycmVudDogMCB9LAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nb0NoYXJnZSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KCLlhYXluIEiKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgICAgaSgiZGl2IiwgewogICAgICAgICAgICBzdGF0aWNDbGFzczogInBhZ2VCYWNrIiwKICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgaGVpZ2h0OiAiMTBweCIgfSwKICAgICAgICAgIH0pLAogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtdGl0bGUiIH0sIFsKICAgICAgICAgICAgZS5fdigi5oC76LWE5Lqn77ya77+lIiArIGUuX3MoZS5hY2NvdW50SW5mby50b3RhbF9hc3NldHMpICsgIiAiKSwKICAgICAgICAgIF0pLAogICAgICAgICAgaSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxpc3Qtd3JhcCIsCiAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICJlbGVtZW50LWxvYWRpbmctdGV4dCI6ICJMb2FkaW5nLi4uIiwKICAgICAgICAgICAgICAgICJlbGVtZW50LWxvYWRpbmctc3Bpbm5lciI6ICJlbC1pY29uLWxvYWRpbmciLAogICAgICAgICAgICAgICAgImVsZW1lbnQtbG9hZGluZy1iYWNrZ3JvdW5kIjogInJnYmEoMjYsMzUsNDgsMSkiLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgInRhYmxlIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ3MTAwIHRsIGZ0MTQgZkNvbG9yMSIsCiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNlbGxzcGFjaW5nOiAiMCIgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgInRib2R5IiwKICAgICAgICAgICAgICAgICAgICBlLl9sKGUuZGF0YUxpc3QsIGZ1bmN0aW9uICh0LCBhKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSgidHIiLCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInRkIiwgW2UuX3YoZS5fcyh0LnRva2VuKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgidGQiLCBbZS5fdihlLl9zKHQuYmFsYW5jZSA/IHQuYmFsYW5jZSA6ICIwLjAwIikpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInRkIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmxvY2tfYmFsYW5jZSA/IHQubG9ja19iYWxhbmNlIDogIjAuMDAiKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJ0ZCIsIFtlLl92KGUuX3ModC50b2tlbikpXSksCiAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXQogICAgICAgICAgKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgZG4gPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJ0aGVhZCIsIFsKICAgICAgICAgICAgYSgidGgiLCB7IHN0YXRpY0NsYXNzOiAidzIwIiB9LCBbZS5fdigi5biB56eNIildKSwKICAgICAgICAgICAgYSgidGgiLCB7IHN0YXRpY0NsYXNzOiAidzI1IiB9LCBbZS5fdigi5Y+v55SoICIpXSksCiAgICAgICAgICAgIGEoInRoIiwgeyBzdGF0aWNDbGFzczogIncyNSIgfSwgW2UuX3YoIuWGu+e7kyIpXSksCiAgICAgICAgICAgIGEoInRoIiwgeyBzdGF0aWNDbGFzczogIncyMCIgfSwgW2UuX3YoIuS6pOaYk+aJgCAiKV0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgXSwKICAgICAgdW4gPSB7CiAgICAgICAgbmFtZTogImFjY291bnRDZW50ZXIiLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7IGlzaG93OiAhMSwgc2hvd0xvYWRpbmc6ICExLCBhY2NvdW50SW5mbzoge30sIGRhdGFMaXN0OiBbXSB9OwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ29DaGFyZ2U6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAicmVjaGFyZ2UiIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICh0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRkcmVzcyIpIHx8ICIiKSwKICAgICAgICAgICAgdGhpcy5hZGRyZXNzICYmCiAgICAgICAgICAgICAgKCh0aGlzLnNob3dMb2FkaW5nID0gITApLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGlzdD91c2VyX2lkPSIgKyB0aGlzLmFkZHJlc3MsCiAgICAgICAgICAgICAgICB0eXBlOiAiR0VUIiwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgID8gKChlLmFjY291bnRJbmZvID0gdC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgKGUuZGF0YUxpc3QgPSB0LmRhdGEubWVzc2FnZS5saXN0KSkKICAgICAgICAgICAgICAgICAgICA6IGFsZXJ0KHQubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBlOwogICAgICAgICAgICAgICAgfSkpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIG1uID0gdW4sCiAgICAgIHBuID0gKGEoIjkxMWQiKSwgT2JqZWN0KGhbImEiXSkobW4sIGNuLCBkbiwgITEsIG51bGwsICIwNWI4NGE5MiIsIG51bGwpKSwKICAgICAgaG4gPSBwbi5leHBvcnRzLAogICAgICBmbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LW1haW4gYWNjb3VudEVudHJ1c3QiIH0sIFsKICAgICAgICAgIGkoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAidGl0bGUgZnQxNiIgfSwKICAgICAgICAgICAgZS5fbChlLnRhYlRpdGxlLCBmdW5jdGlvbiAodCwgYSkgewogICAgICAgICAgICAgIHJldHVybiBpKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImN1clBlciIsCiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogZS5pc0FjdGl2ZSA9PSBhIH0sCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jaGFuZ2VFbnRydXN0KGEsIHQudXJsKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC50aXRsZSkpXQogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAwCiAgICAgICAgICApLAogICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgMCA9PSBlLmlzQWN0aXZlCiAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICBlLl9sKGUub3V0TGlzdCwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmNyZWF0ZV90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQubGVnYWxfbmFtZSkgKyAiLyIgKyBlLl9zKHQuY3VycmVuY3lfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5udW1iZXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQucHJpY2UpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuYWNjb3VudF9udW1iZXIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmwgdzggdHIgY3VyUGVyIGNlaWxDb2xvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5yZXZva2UodC5pZCwgIm91dCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCLmkqTplIAiKV0KICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgIWUubG9hZGluZyAmJiBlLm91dExpc3QubGVuZ3RoID4gNQogICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImdldG1vcmUgdGMgZkNvbG9yMSBmdDE0IG10MTAgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nZXRNb3JlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5tb3JlKSldCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgIGUubG9hZGluZwogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxvZHcyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBhKCIxMmFlIiksIGFsdDogIiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBiYXNlQ29sb3IiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLliqDovb3kuK0uLi4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBlLm91dExpc3QubGVuZ3RoIDw9IDAKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJub19kYXRhIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI5NDg1IiksIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLmmoLml6DmlbDmja4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgMSA9PSBlLmlzQWN0aXZlCiAgICAgICAgICAgICAgPyBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX20oMSksCiAgICAgICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICBlLl9sKGUuaW5MaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3JlYXRlX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3ModC5sZWdhbF9uYW1lKSArICIvIiArIGUuX3ModC5jdXJyZW5jeV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm51bWJlcikpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5wcmljZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5hY2NvdW50X251bWJlcikpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbCB3OCB0ciBjdXJQZXIgY2VpbENvbG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnJldm9rZSh0LmlkLCAiaW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigi5pKk6ZSAIildCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICFlLmxvYWRpbmcgJiYgZS5pbkxpc3QubGVuZ3RoID4gNQogICAgICAgICAgICAgICAgICAgID8gaSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImdldG1vcmUgdGMgZkNvbG9yMSBmdDE0IG10MTAgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nZXRNb3JlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5tb3JlKSldCiAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgIGUubG9hZGluZwogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImxvZHcyMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBhKCIxMmFlIiksIGFsdDogIiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBiYXNlQ29sb3IiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLliqDovb3kuK0uLi4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBlLmluTGlzdC5sZW5ndGggPD0gMAogICAgICAgICAgICAgICAgICAgID8gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5vX2RhdGEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjk0ODUiKSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxOCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIuaaguaXoOaVsOaNriIpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAyID09IGUuaXNBY3RpdmUKICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250YWluZXIiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fbSgyKSwKICAgICAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJsaXN0LWl0ZW0gZkNvbG9yMSBmdDEyIiB9LAogICAgICAgICAgICAgICAgICAgIGUuX2woZS5jb21MaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoImxpIiwgeyBzdGF0aWNDbGFzczogImNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyh0LmxlZ2FsX25hbWUpICsgIi8iICsgZS5fcyh0LmN1cnJlbmN5X25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQubnVtYmVyKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxNCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnByaWNlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsIHc4IHRyIGN1clBlciBjZWlsQ29sb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICJvdXQiID09IHQudHlwZSA/ICJyZWRDb2xvciIgOiAiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoImluIiA9PSB0LnR5cGUgPyAi5Lmw5YWlIiA6ICLljZblh7oiKSldCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICFlLmxvYWRpbmcgJiYgZS5vdXRMaXN0Lmxlbmd0aCA+IDUKICAgICAgICAgICAgICAgICAgICA/IGkoCiAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJnZXRtb3JlIHRjIGZDb2xvcjEgZnQxNCBtdDEwIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuZ2V0TW9yZSB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUubW9yZSkpXQogICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBlLmNvbUxpc3QubGVuZ3RoIDw9IDAKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJub19kYXRhIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI5NDg1IiksIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLmmoLml6DmlbDmja4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBlLmxvYWRpbmcKICAgICAgICAgICAgICAgICAgICA/IGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJsb2R3MjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiMTJhZSIpLCBhbHQ6ICIiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgYmFzZUNvbG9yIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigi5Yqg6L295LitLi4uIiksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgZ24gPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0LXRpdGxlIGZDb2xvcjIgZnQxMiBjbGVhciIgfSwgWwogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MjAiIH0sIFtlLl92KCLml7bpl7QiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLluIHnp40iKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLmlbDph48iKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTQiIH0sIFtlLl92KCLku7fmoLwiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MjAiIH0sIFtlLl92KCLotKbmiLciKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3OCB0ciIgfSwgW2UuX3YoIuaTjeS9nCIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgY2xlYXIiIH0sIFsKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbZS5fdigi5pe26Ze0IildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdigi5biB56eNIildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdigi5pWw6YePIildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE0IiB9LCBbZS5fdigi5Lu35qC8IildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbZS5fdigi6LSm5oi3IildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzggdHIiIH0sIFtlLl92KCLmk43kvZwiKV0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoInVsIiwgeyBzdGF0aWNDbGFzczogImxpc3QtdGl0bGUgZkNvbG9yMiBmdDEyIGNsZWFyIiB9LCBbCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcyMCIgfSwgW2UuX3YoIuaXtumXtCIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgW2UuX3YoIuW4geenjSIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgW2UuX3YoIuaVsOmHjyIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxNCIgfSwgW2UuX3YoIuS7t+agvCIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHc4IHRyIiB9LCBbZS5fdigi57G75Z6LIildKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIHZuID0gewogICAgICAgIG5hbWU6ICJhY2NvdW50RW50cnVzdCIsCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYWRkcmVzczogIiIsCiAgICAgICAgICAgIGlzQWN0aXZlOiAwLAogICAgICAgICAgICB1cmw6ICJ0cmFuc2FjdGlvbl9vdXQiLAogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBtb3JlOiAi5Yqg6L295pu05aSaIiwKICAgICAgICAgICAgbG9hZGluZzogITEsCiAgICAgICAgICAgIHRhYlRpdGxlOiBbCiAgICAgICAgICAgICAgeyB0aXRsZTogIuato+WcqOWNliIsIHVybDogInRyYW5zYWN0aW9uX291dCIgfSwKICAgICAgICAgICAgICB7IHRpdGxlOiAi5q2j5Zyo5LmwIiwgdXJsOiAidHJhbnNhY3Rpb25faW4iIH0sCiAgICAgICAgICAgICAgeyB0aXRsZTogIuW3suWujOaIkCIsIHVybDogInRyYW5zYWN0aW9uX2NvbXBsZXRlIiB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBvdXRMaXN0OiBbXSwKICAgICAgICAgICAgaW5MaXN0OiBbXSwKICAgICAgICAgICAgY29tTGlzdDogW10sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY2hhbmdlRW50cnVzdDogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgKHRoaXMuaXNBY3RpdmUgPSBlKSwKICAgICAgICAgICAgICAodGhpcy51cmwgPSB0KSwKICAgICAgICAgICAgICAodGhpcy5wYWdlID0gMSksCiAgICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TW9yZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAodGhpcy5wYWdlID0gKyt0aGlzLnBhZ2UpLCAodGhpcy5sb2FkaW5nID0gITApLCB0aGlzLmdldERhdGEoKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZXZva2U6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgZSA9IGU7CiAgICAgICAgICAgIGxheWVyLm9wZW4oewogICAgICAgICAgICAgIGNvbnRlbnQ6ICLmgqjnoa7lrpropoHmkqTplIDlkJfvvJ8iLAogICAgICAgICAgICAgIGJ0bjogWyLnoa7lrpoiLCAi5Y+W5raIIl0sCiAgICAgICAgICAgICAgeWVzOiBmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgYS4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvdHJhbnNhY3Rpb25fZGVsIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGUsIHR5cGU6IHQgfSwKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBhLnRva2VuIH0sCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpLCAib2siID09PSBlLmRhdGEudHlwZSAmJiBhLmdldGRhdGEoKTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSB0aGlzLnVybCwKICAgICAgICAgICAgICBpID0gdGhpcy5wYWdlOwogICAgICAgICAgICAodC5sb2FkaW5nID0gITApLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS8iICsgYSwKICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgZGF0YTogeyBwYWdlOiBpIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHQudG9rZW4gfSwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIChjb25zb2xlLmxvZyhpKSwKICAgICAgICAgICAgICAgICAgICAodC5sb2FkaW5nID0gITEpLAogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGEpLAogICAgICAgICAgICAgICAgICAgICJvayIgPT09IGkuZGF0YS50eXBlKQogICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgaWYgKCJ0cmFuc2FjdGlvbl9vdXQiID09IGEpCiAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvbnNvbGUubG9nKGkuZGF0YS5tZXNzYWdlLmxpc3QpLCAxID09IGUucGFnZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHQub3V0TGlzdCA9IGkuZGF0YS5tZXNzYWdlLmxpc3Q7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zb2xlLmxvZyhpLmRhdGEubWVzc2FnZS5saXN0Lmxlbmd0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaS5kYXRhLm1lc3NhZ2UubGlzdC5sZW5ndGggPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkICh0Lm1vcmUgPSAi5rKh5pyJ5pu05aSa5pWw5o2u5LqGLi4uIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHQub3V0TGlzdCA9IHQub3V0TGlzdC5jb25jYXQoaS5kYXRhLm1lc3NhZ2UubGlzdCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgInRyYW5zYWN0aW9uX2luIiA9PSBhCiAgICAgICAgICAgICAgICAgICAgICAgID8gMSA9PSBlLnBhZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh0LmluTGlzdCA9IGkuZGF0YS5tZXNzYWdlLmxpc3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpLmRhdGEubWVzc2FnZS5saXN0Lmxlbmd0aCA8PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAodC5tb3JlID0gIuayoeacieabtOWkmuaVsOaNruS6hi4uLiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodC5pbkxpc3QgPSBlLmluTGlzdC5jb25jYXQoaS5kYXRhLm1lc3NhZ2UubGlzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgIDogKHQuY29tTGlzdCA9IGkuZGF0YS5tZXNzYWdlLmxpc3QpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGdldE91dDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgICAgdCA9IHRoaXMucGFnZTsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS90cmFuc2FjdGlvbi9lbnRydXN0IiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGFkZHJlc3M6IHRoaXMuYWRkcmVzcywgdHlwZTogIm91dCIsIHBhZ2U6IHQgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgKHQgPSB0LmRhdGEpLAogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0Lm1lc3NhZ2UuZGF0YSksCiAgICAgICAgICAgICAgICAgICJvayIgPT09IHQudHlwZSAmJgogICAgICAgICAgICAgICAgICAgIChlLm91dExpc3QgPSBlLm91dExpc3QuY29uY2F0KHQubWVzc2FnZS5kYXRhKSk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHt9LAogICAgICB9LAogICAgICBfbiA9IHZuLAogICAgICB5biA9IChhKCI0YTQwIiksIE9iamVjdChoWyJhIl0pKF9uLCBmbiwgZ24sICExLCBudWxsLCAiYWVhNTY2MDQiLCBudWxsKSksCiAgICAgIGJuID0geW4uZXhwb3J0cywKICAgICAgQ24gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1tYWluIiB9LCBbCiAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXIgbWI1MCIgfSwgWwogICAgICAgICAgICBlLl9tKDApLAogICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmwgbWwzMCIgfSwgWwogICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxNiB3aGl0ZSIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInNlY3VyaXR5LmxldmVyIikpICsgIiAiKSwKICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWwxMCIgfSwgW2UuX3YoZS5fcyhlLmxldmVyKSldKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYmFyLWJvdHRvbSIgfSwgWwogICAgICAgICAgICAgICAgaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImJhci10b3AiLCBzdHlsZTogZS53aWR0aEJhciB9KSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxNCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoInNlY3VyaXR5LmxldmVyIikpICsKICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgIGUuX3MoZS5sZXZlcikgKwogICAgICAgICAgICAgICAgICAgICLvvIwiICsKICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoInNlY3VyaXR5LndhbiIpKQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGkoInVsIiwgWwogICAgICAgICAgICBpKCJsaSIsIFsKICAgICAgICAgICAgICBpKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogYSgiNDZlNiIpIH0gfSksCiAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJtbDIwIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkuaW52aXRlIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZsIiB9LCBbCiAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuZXh0ZW5zaW9uX2NvZGUpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnIgYmFzZSBtbDI1IG1vdXNlRGVmYXVsdCIgfSksCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmciBiYXNlIG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiAiY29weSIgfSwKICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuY29weSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkuY29weSIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGkoImxpIiwgWwogICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBlLnBzcmMgfSB9KSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgZS5hY2NvdW50LmluZGV4T2YoIkAiKSA+IDAKICAgICAgICAgICAgICAgICAgICAgID8gZS4kdCgic2VjdXJpdHkuZW1haWwiKQogICAgICAgICAgICAgICAgICAgICAgOiBlLiR0KCJiZHBob25lLmJpbmRwaG9uZSIpCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbCIgfSwgWwogICAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiB9LCBbZS5fdihlLl9zKGUuYWNjb3VudCkpXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmciBiYXNlIG1sMjUgbW91c2VEZWZhdWx0IiB9KSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZyIGJhc2UgbW91c2VEZWZhdWx0IiB9KSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGkoImxpIiwgWwogICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI0NmU2IikgfSB9KSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZWN1cml0eS5sb2dwd2QiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZWN1cml0eS5zdWdnZXN0IikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZyIGJhc2UgbWwyNSBtb3VzZURlZmF1bHQiIH0pLAogICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZnIgYmFzZSBtb3VzZURlZmF1bHQiLAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29Qd2QoKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkuc2V0IikpKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiaGlkZSIgfSwgWwogICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI1ZGM0IikgfSB9KSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZWN1cml0eS50dnB3IikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJwIiwgeyBzdGF0aWNDbGFzczogImZsIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkudGlwMSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmciBiYXNlIG1sMjUgbW91c2VEZWZhdWx0IiB9KSwKICAgICAgICAgICAgICBpKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZyIGJhc2UgbW91c2VEZWZhdWx0IiwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvVG8oMik7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInNlY3VyaXR5LnNldHRpbmciKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJoaWRlIiB9LCBbCiAgICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjVkYzQiKSB9IH0pLAogICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWwyMCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInNlY3VyaXR5Lmdvb2dsZSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInNlY3VyaXR5LnRpcDIiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnIgYmFzZSBtbDI1IG1vdXNlRGVmYXVsdCIgfSksCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmciBiYXNlIG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05vbmUoKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkuZ29iaW5kIikpKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiaGlkZSIgfSwgWwogICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI1ZGM0IikgfSB9KSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJob3AudHJ1ZW5hbWUiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZWN1cml0eS5iZWZvcmVuYW1lIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZyIGJhc2UgbWwyNSBtb3VzZURlZmF1bHQiIH0pLAogICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZnIgYmFzZSBtb3VzZURlZmF1bHQiLAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ29Ob25lKCk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInNlY3VyaXR5LmF1dGhlbnRpY2F0aW9uIikpKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiaGlkZSIgfSwgWwogICAgICAgICAgICAgIGkoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBhKCI1ZGM0IikgfSB9KSwKICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZWN1cml0eS5teWFkZHJlc3MiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGkoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0pLAogICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnIgYmFzZSBtbDI1IG1vdXNlRGVmYXVsdCIgfSksCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmciBiYXNlIG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb05vbmUoKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgic2V0LmFkZCIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgd24gPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBpKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0sIFsKICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoImQ4ZDYiKSB9IH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgXSwKICAgICAga24gPQogICAgICAgIChhKCI1Mzc3IiksCiAgICAgICAgYSgiZTNhZSIpLAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhY2NvdW50U2V0IiwKICAgICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICByb3V0ZXJMaXN0OiBbCiAgICAgICAgICAgICAgICAic2V0Q2FzaCIsCiAgICAgICAgICAgICAgICAic2V0Q2FzaCIsCiAgICAgICAgICAgICAgICAic2V0Q2FzaCIsCiAgICAgICAgICAgICAgICAic2V0Q2FzaCIsCiAgICAgICAgICAgICAgICAic2V0Q2FzaCIsCiAgICAgICAgICAgICAgICAic2V0Q2FzaCIsCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBhY2NvdW50OiB0aGlzLiR0KCJzZWN1cml0eS5ub3RiYWluZCIpLAogICAgICAgICAgICAgIGVtYWlsOiB0aGlzLiR0KCJzZWN1cml0eS5ub3RiYWluZCIpLAogICAgICAgICAgICAgIGV4dGVuc2lvbl9jb2RlOiAiIiwKICAgICAgICAgICAgICBsZXZlcjogdGhpcy4kdCgic2VjdXJpdHkubG93IiksCiAgICAgICAgICAgICAgd2lkdGhCYXI6ICJ3aWR0aDogMjUlIiwKICAgICAgICAgICAgICBiYXI6IDI1LAogICAgICAgICAgICAgIGF1dGhlbjogMCwKICAgICAgICAgICAgICBwc3JjOiBhKCI1ZGM0IiksCiAgICAgICAgICAgICAgZXNyYzogYSgiNWRjNCIpLAogICAgICAgICAgICB9OwogICAgICAgICAgfSwKICAgICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy51c2VySW5mbygpOwogICAgICAgICAgfSwKICAgICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgICAgZ29UbzogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBsYXllci5tc2codGhpcy4kdCgibGF5Lm5vdG9wZW4iKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdvTm9uZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGxheWVyLm1zZyh0aGlzLiR0KCJsYXkubm90b3BlbiIpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ29Qd2Q6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgiL3Jlc2V0UHdkIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHVzZXJJbmZvOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS91c2VyL2luZm8iLAogICAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICAgKG51bGwgIT0gdC5kYXRhLm1lc3NhZ2UucGhvbmUgJiYKICAgICAgICAgICAgICAgICAgICAgICgoZS5hY2NvdW50ID0gdC5kYXRhLm1lc3NhZ2UucGhvbmUpLAogICAgICAgICAgICAgICAgICAgICAgKGUucHNyYyA9IGEoIjQ2ZTYiKSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5iYXIgPSBlLmJhciArIDI1KSksCiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPSB0LmRhdGEubWVzc2FnZS5lbWFpbCAmJgogICAgICAgICAgICAgICAgICAgICAgKChlLmVtYWlsID0gdC5kYXRhLm1lc3NhZ2UuZW1haWwpLAogICAgICAgICAgICAgICAgICAgICAgKGUuZXNyYyA9IGEoIjQ2ZTYiKSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5iYXIgPSBlLmJhciArIDI1KSksCiAgICAgICAgICAgICAgICAgICAgKGUuZXh0ZW5zaW9uX2NvZGUgPSB0LmRhdGEubWVzc2FnZS5leHRlbnNpb25fY29kZSksCiAgICAgICAgICAgICAgICAgICAgKGUuYXV0aGVuID0gdC5kYXRhLm1lc3NhZ2UucmV2aWV3X3N0YXR1cyksCiAgICAgICAgICAgICAgICAgICAgMiA9PSBlLmF1dGhlbiAmJiAoZS5iYXIgPSBlLmJhciArIDI1KSwKICAgICAgICAgICAgICAgICAgICA1MCA9PSBlLmJhcgogICAgICAgICAgICAgICAgICAgICAgPyAoZS5sZXZlciA9IGUuJHQoImxheS5pbnRlcm1lZGlhdGUiKSkKICAgICAgICAgICAgICAgICAgICAgIDogNzUgPT0gZS5iYXIKICAgICAgICAgICAgICAgICAgICAgID8gKGUubGV2ZXIgPSBlLiR0KCJsYXkuaGlnaCIpKQogICAgICAgICAgICAgICAgICAgICAgOiAxMDAgPT0gZS5iYXIgJiYgKGUubGV2ZXIgPSBlLiR0KCJsYXkuc3Ryb25nIikpLAogICAgICAgICAgICAgICAgICAgIChlLndpZHRoQmFyID0gIndpZHRoOiIgKyBlLmJhciArICIlIikpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjb3B5OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgICAgdCA9IG5ldyBDbGlwYm9hcmQoIiNjb3B5IiwgewogICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZygiQ29weSBTdWNjZXNzIiksCiAgICAgICAgICAgICAgICAgICAgICAiIgogICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHV0aWxzLmhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi9yZWdpc3Rlci9yZWdpc3Rlci5odG1sP2V4dGVuc2lvbl9jb2RlPSIKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGUuZXh0ZW5zaW9uX2NvZGUpCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHQub24oInN1Y2Nlc3MiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgKGUuZmxhZ3MgPSAhMCksIGxheWVyLm1zZyh0aGlzLiR0KCJsYXkuY29weXMiKSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICB0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIChlLmZsYWdzID0gITEpLCBsYXllci5tc2codGhpcy4kdCgibGF5LnJlY29weSIpKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICB9KSwKICAgICAgeG4gPSBrbiwKICAgICAgU24gPSAoYSgiNTFjNCIpLCBPYmplY3QoaFsiYSJdKSh4biwgQ24sIHduLCAhMSwgbnVsbCwgImM0NmRjNWY2IiwgbnVsbCkpLAogICAgICBBbiA9IFNuLmV4cG9ydHMsCiAgICAgIHpuID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtbWFpbiB3cmFwIGZDb2xvcjEiIH0sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSIgfSwgWwogICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkuaWRjYXJkIikpKSwKICAgICAgICAgIF0pLAogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW4tY29udGVudCBtdDIwIiB9LCBbCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiAwID09IGUucmV2aWV3X3N0YXR1cywKICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicmV2aWV3X3N0YXR1cz09MCIsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW4taW5wdXQiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiYXV0aC5uYW1lIikpICsgIu+8miIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBlLiR0KCJhdXRoLnRydWVuYW1lIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUubmFtZSB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLm5hbWUgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY2VudGVyIG10MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJhdXRoMi5hdXRoQ2FyZCIpKSArICLvvJoiKV0pLAogICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuY2FyZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiY2FyZF9pZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgiYXV0aC50cnVlbnVtIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAiY2FyZCIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuY2FyZF9pZCB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLmNhcmRfaWQgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10NDAgZkNvbG9yMSBmdDE0IHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhdXRoLm5vdGUiKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaWRpbWcgZmxleCBjZW50ZXIgbXQ0MCIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgYSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGUuc3JjMSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImZpbGUiLCBhY2NlcHQ6ICJpbWFnZS8qIiwgbmFtZTogImZpbGUiIH0sCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZmlsZTEodCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGEoImltZyIsIHsgYXR0cnM6IHsgc3JjOiBlLnNyYzIsIGFsdDogIiIgfSB9KSwKICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJmaWxlIiwgYWNjZXB0OiAiaW1hZ2UvKiIsIG5hbWU6ICJmaWxlIiB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpbGUyKHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ1cGRhdGEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iLCB2YWx1ZTogZS4kdCgiYWQudXAiKSB9LAogICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLnVwZGF0YSB9LAogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDEgPT0gZS5yZXZpZXdfc3RhdHVzLAogICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJyZXZpZXdfc3RhdHVzPT0xIiwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGMgZnQzMCBhdS1zdGF0dWUiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImF1dGguaXNpbmciKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXQogICAgICAgICAgICApLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMiA9PSBlLnJldmlld19zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInJldmlld19zdGF0dXM9PTIiLAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyBmdDMwIGF1LXN0YXR1ZSIgfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYXV0aC5pc2VkIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBQbiA9IFtdLAogICAgICBUbiA9IGEoImJjM2EiKSwKICAgICAgSW4gPSBhLm4oVG4pLAogICAgICBCbiA9IHsKICAgICAgICBuYW1lOiAiYXV0aGVudGljYXRpb24iLAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIG5hbWU6ICIiLAogICAgICAgICAgICBjYXJkX2lkOiAiIiwKICAgICAgICAgICAgc3JjMTogIi4uLy4uL3N0YXRpYy9pbWdzL2FkZGltZy5wbmciLAogICAgICAgICAgICBzcmMyOiAiLi4vLi4vc3RhdGljL2ltZ3MvYWRkaW1nLnBuZyIsCiAgICAgICAgICAgIHNyYzM6ICIuLi8uLi9zdGF0aWMvaW1ncy9hZGRpbWcucG5nIiwKICAgICAgICAgICAgcmV2aWV3X3N0YXR1czogMywKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIik7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICDjgIDjgIAgY29udmVydEJhc2U2NFVybFRvQmxvYjpmdW5jdGlvbih1cmxEYXRhKSB7CiAgICAgICAgICAgIOOAgOOAgOOAgOOAgHZhciBhcnIgPSB1cmxEYXRhLnNwbGl0KCcsJyksIG1pbWUgPSBhcnJbMF0ubWF0Y2goLzooLio/KTsvKVsxXSwKICAgICAgICAgICAg44CA44CA44CA44CAYnN0ciA9IGF0b2IoYXJyWzFdKSwgbiA9IGJzdHIubGVuZ3RoLCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pOwogICAgICAgICAgICDjgIDjgIDjgIDjgIB3aGlsZSAobi0tKSB7CiAgICAgICAgICAgIOOAgOOAgOOAgOOAgOOAgOOAgHU4YXJyW25dID0gYnN0ci5jaGFyQ29kZUF0KG4pOwogICAgICAgICAgICDjgIDjgIDjgIDjgIB9CiAgICAgICAgICAgIOOAgOOAgOOAgOOAgHJldHVybiBuZXcgQmxvYihbdThhcnJdLCB7IHR5cGU6IG1pbWUgfSk7CiAgICAgICAgICAgIOOAgOOAgH0sCiAgICAvLyDlr7nlm77niYfov5vooYzljovnvKkKICAgIGNvbXByZXNzOmZ1bmN0aW9uKGZpbGUscmVuYW1lID0gIldoYXRldmVyLmpwZyIsY2FsbGJhY2sgPSBmdW5jdGlvbigpe30pIHsKICAgICAgbGV0IHQgPSB0aGlzOwogICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgIC8vICAgY29uc29sZS5sb2codC5KU09OLnBhcnNlKHNyY3BhdGgpKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgbGV0IGltYWdlID0gbmV3IEltYWdlKCk7IAogICAgICAgIGltYWdlLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDsKICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CuOAgOOAgOOAgOOAgOOAgOOAgOOAgGxldCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSwK44CA44CA44CA44CA44CA44CA44CA44CAY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwrjgIDjgIDjgIDjgIDjgIDjgIDjgIBjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aDvjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIAK44CA44CA44CA44CA44CA44CA44CAY2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodDsK44CA44CA44CA44CA44CA44CA44CAY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGltYWdlLndpZHRoIC8gMiwgaW1hZ2UuaGVpZ2h0IC8gMik7CgrjgIDjgIDjgIDjgIDjgIDjgIDjgIAvL+mihOiniOWbvueJhwrjgIDjgIDjgIDjgIDjgIDjgIDjgIBsZXQgYmFzZTY0aW1nID0gIiI7CuOAgOOAgOOAgOOAgOOAgOOAgOOAgGJhc2U2NGltZyA9IGNhbnZhcy50b0RhdGFVUkwoImltYWdlL2pwZWciKTsKCuOAgOOAgOOAgOOAgOOAgOOAgOOAgC8vIOS4iuS8oArjgIDjgIDjgIDjgIDjgIDjgIDjgIB2YXIgZmlsZURhdGEgPSBuZXcgRm9ybURhdGEoKTsK44CA44CA44CA44CA44CA44CA44CAZmlsZURhdGEuYXBwZW5kKCJmaWxlIiwgdC5jb252ZXJ0QmFzZTY0VXJsVG9CbG9iKGJhc2U2NGltZykscmVuYW1lKTsKCuOAgOOAgOOAgOOAgOOAgOOAgOOAgCAgdC4kaHR0cC5wb3N0KCIvYXBpL3VwbG9hZCIsIGZpbGVEYXRhLCB7CiAgICAgICAgICAgICBoZWFkZXJzOiB7ICJDb250ZW50LVR5cGUiOiAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgfSwKICAgICAgICAgICB9KQogICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICB2YXIgYSA9IGUuZGF0YTsKICAgICAgICAgICAgICJvayIgPT0gYS50eXBlID8gY2FsbGJhY2soYS5tZXNzYWdlKSA6IGxheWVyLm1zZyhhLm1lc3NhZ2UpOwogICAgICAgICAgIH0pOwrjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIDjgIAKICAgICAgICB9OwogICAgICB9OwogICAgfSwKCiAgICAgICAgICBmaWxlMTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgIGkgPSBlLnRhcmdldC5maWxlc1swXTsKCiAgICAgICAgIHQuY29tcHJlc3MoaSwiZmlsZTEuanBnIixmdW5jdGlvbihzKXsKICAgICAgICAgIHQuc3JjMSA9IHMKICAgICAgICAgfSk7CgogICAgICAgICAgfSwKICAgICAgICAgIGZpbGUyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgIGkgPSBlLnRhcmdldC5maWxlc1swXTsKCiAgICAgIHQuY29tcHJlc3MoaSwiZmlsZTIuanBnIixmdW5jdGlvbihzKXsKICAgICAgIHQuc3JjMiA9IHMKICAgICAgfSk7CiAgICAgICAgICAgIC8vIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgLy8gICBhID0gbmV3IEZpbGVSZWFkZXIoKSwKICAgICAgICAgICAgLy8gICBpID0gZS50YXJnZXQuZmlsZXNbMF07CiAgICAgICAgICAgIC8vIGEucmVhZEFzRGF0YVVSTChpKSwgKGEub25sb2FkID0gZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICAgICAgLy8gdmFyIG4gPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgLy8gbi5hcHBlbmQoImZpbGUiLCBpKSwKICAgICAgICAgICAgLy8gICBJbi5hCiAgICAgICAgICAgIC8vICAgICAucG9zdCgiL2FwaS91cGxvYWQiLCBuLCB7CiAgICAgICAgICAgIC8vICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJtdWx0aXBhcnQvZm9ybS1kYXRhIiB9LAogICAgICAgICAgICAvLyAgICAgfSkKICAgICAgICAgICAgLy8gICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIC8vICAgICAgIHZhciBhID0gZS5kYXRhOwogICAgICAgICAgICAvLyAgICAgICAib2siID09IGEudHlwZSA/ICh0LnNyYzIgPSBhLm1lc3NhZ2UpIDogbGF5ZXIubXNnKGEubWVzc2FnZSk7CiAgICAgICAgICAgIC8vICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBmaWxlMzogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICBpID0gZS50YXJnZXQuZmlsZXNbMF07CgogICAgICB0LmNvbXByZXNzKGksImZpbGUzLmpwZyIsZnVuY3Rpb24ocyl7CiAgICAgICB0LnNyYzMgPSBzCiAgICAgIH0pOwogICAgICAgICAgICAvLyB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgIC8vICAgYSA9IG5ldyBGaWxlUmVhZGVyKCksCiAgICAgICAgICAgIC8vICAgaSA9IGUudGFyZ2V0LmZpbGVzWzBdOwogICAgICAgICAgICAvLyBhLnJlYWRBc0RhdGFVUkwoaSksIChhLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICAgIC8vIHZhciBuID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIC8vIG4uYXBwZW5kKCJmaWxlIiwgaSksCiAgICAgICAgICAgIC8vICAgSW4uYQogICAgICAgICAgICAvLyAgICAgLnBvc3QoIi9hcGkvdXBsb2FkIiwgbiwgewogICAgICAgICAgICAvLyAgICAgICBoZWFkZXJzOiB7ICJDb250ZW50LVR5cGUiOiAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgfSwKICAgICAgICAgICAgLy8gICAgIH0pCiAgICAgICAgICAgIC8vICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAvLyAgICAgICB2YXIgYSA9IGUuZGF0YTsKICAgICAgICAgICAgLy8gICAgICAgIm9rIiA9PSBhLnR5cGUgPyAodC5zcmMzID0gYS5tZXNzYWdlKSA6IGxheWVyLm1zZyhhLm1lc3NhZ2UpOwogICAgICAgICAgICAvLyAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgdXBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gdGhpcy4kdXRpbHMudHJpbShlLm5hbWUpLAogICAgICAgICAgICAgIGEgPSB0aGlzLiR1dGlscy50cmltKGUuY2FyZF9pZCk7CiAgICAgICAgICAgICIiICE9IHRoaXMubmFtZS5sZW5ndGgKICAgICAgICAgICAgICA/ICIiICE9IHRoaXMuY2FyZF9pZC5sZW5ndGgKICAgICAgICAgICAgICAgID8gIiIgIT0gZS5zcmMxICYmICIiICE9IGUuc3JjMiAmJiAiIiAhPSBlLnNyYzMKICAgICAgICAgICAgICAgICAgPyB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvdXNlci9yZWFsX25hbWUiLAogICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRfaWQ6IGEsCiAgICAgICAgICAgICAgICAgICAgICAgIGZyb250X3BpYzogZS5zcmMxLAogICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlX3BpYzogZS5zcmMyLAogICAgICAgICAgICAgICAgICAgICAgICBoYW5kX3BpYzogZS5zcmMyLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICBsYXllci5tc2codC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRyb3V0ZXIucHVzaCgiLyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTsKICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHt9KQogICAgICAgICAgICAgICAgICA6IGxheWVyLnRpcHMoZS4kdCgiYXV0aC5pbWciKSwgIiNuYW1lIikKICAgICAgICAgICAgICAgIDogbGF5ZXIudGlwcyhlLiR0KCJhdXRoLnRydWVudW0iKSwgIiNjYXJkIikKICAgICAgICAgICAgICA6IGxheWVyLnRpcHMoZS4kdCgiYXV0aC50cnVlbmFtZSIpLCAiI25hbWUiKTsKICAgICAgICAgIH0sCiAgICAgICAgICBJbmZvOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS91c2VyL2NlbnRlciIsCiAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICBkYXRhOiB7fSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGUudG9rZW4gfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgZS5yZXZpZXdfc3RhdHVzID0gdC5kYXRhLm1lc3NhZ2UucmV2aWV3X3N0YXR1czsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuSW5mbygpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIE5uID0gQm4sCiAgICAgIEZuID0gKGEoIjI5MWMiKSwgT2JqZWN0KGhbImEiXSkoTm4sIHpuLCBQbiwgITEsIG51bGwsICIzMjU0ZTMwOCIsIG51bGwpKSwKICAgICAgTG4gPSBGbi5leHBvcnRzLAogICAgICAkbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhY2NvdW50LW1haW4gd3JhcCBmQ29sb3IxIiwKICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgIm1heC13aWR0aCI6ICI5ODBweCIgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSIgfSwgWwogICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZWN1cml0eS5pZGNhcmRoIikpKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluLWNvbnRlbnQgbXQyMCIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDIgIT0gZS5iYXNlX3Jldmlld19zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYmFzZV9yZXZpZXdfc3RhdHVzIT0yIiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRjIGZ0MzAgYXUtc3RhdHVlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImF1dGguYmFzZWZpcnN0IikpKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAyID09IGUuYmFzZV9yZXZpZXdfc3RhdHVzICYmIDAgPT0gZS5yZXZpZXdfc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImJhc2VfcmV2aWV3X3N0YXR1cz09MiYmcmV2aWV3X3N0YXR1cz09MCIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluLWlucHV0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJhdXRoLnBhc3Nwb3J0IikpICsgIu+8miIpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5wYXNzcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwYXNzcG9ydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoImF1dGgucGFzc3BvcnRpZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAicGFzc3BvcnQiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5wYXNzcG9ydCB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLnBhc3Nwb3J0ID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciBjZW50ZXIgbXQyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiYXV0aC5qaWFzaGkiKSkgKyAi77yaIildKSwKICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmppYXNoaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJqaWFzaGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBlLiR0KCJhdXRoLmppYXNoaWlkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICJqaWFzaGkiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5qaWFzaGkgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5qaWFzaGkgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10NDAgZkNvbG9yMSBmdDE0IHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImF1dGgubm90ZTEiKSkpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImlkaW1nIGZsZXggY2VudGVyIG10NDAiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogZS5zcmMxLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiAiaW1hZ2UvKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpbGUxKHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogZS5zcmMyLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiAiaW1hZ2UvKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpbGUyKHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogZS5zcmMzLCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiAiaW1hZ2UvKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpbGUzKHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogZS5zcmM0LCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiAiaW1hZ2UvKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpbGU0KHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbWciLCB7IGF0dHJzOiB7IHNyYzogZS5zcmM1LCBhbHQ6ICIiIH0gfSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiZmlsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0OiAiaW1hZ2UvKiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogImZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmZpbGU1KHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ1cGRhdGEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iLCB2YWx1ZTogZS4kdCgiYWQudXAiKSB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUudXBkYXRhIH0sCiAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMiA9PSBlLmJhc2VfcmV2aWV3X3N0YXR1cyAmJiAxID09IGUucmV2aWV3X3N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJiYXNlX3Jldmlld19zdGF0dXM9PTImJnJldmlld19zdGF0dXM9PTEiLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGMgZnQzMCBhdS1zdGF0dWUiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYXV0aC5pc2luZyIpKSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogMiA9PSBlLmJhc2VfcmV2aWV3X3N0YXR1cyAmJiAyID09IGUucmV2aWV3X3N0YXR1cywKICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJiYXNlX3Jldmlld19zdGF0dXM9PTImJnJldmlld19zdGF0dXM9PTIiLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGMgZnQzMCBhdS1zdGF0dWUiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYXV0aC5pc2VkIikpKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgTW4gPSBbXSwKICAgICAgRW4gPSB7CiAgICAgICAgbmFtZTogImFkdmFuY2VkIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwYXNzcG9ydDogIiIsCiAgICAgICAgICAgIGppYXNoaTogIiIsCiAgICAgICAgICAgIHNyYzE6ICIuLi8uLi9zdGF0aWMvaW1ncy9hZGRpbWcucG5nIiwKICAgICAgICAgICAgc3JjMjogIi4uLy4uL3N0YXRpYy9pbWdzL2FkZGltZy5wbmciLAogICAgICAgICAgICBzcmMzOiAiLi4vLi4vc3RhdGljL2ltZ3MvYWRkaW1nLnBuZyIsCiAgICAgICAgICAgIHNyYzQ6ICIuLi8uLi9zdGF0aWMvaW1ncy9hZGRpbWcucG5nIiwKICAgICAgICAgICAgc3JjNTogIi4uLy4uL3N0YXRpYy9pbWdzL2FkZGltZy5wbmciLAogICAgICAgICAgICByZXZpZXdfc3RhdHVzOiAzLAogICAgICAgICAgICBiYXNlX3Jldmlld19zdGF0dXM6IDMsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZmlsZTE6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gbmV3IEZpbGVSZWFkZXIoKSwKICAgICAgICAgICAgICBpID0gZS50YXJnZXQuZmlsZXNbMF07CiAgICAgICAgICAgIGEucmVhZEFzRGF0YVVSTChpKSwgKGEub25sb2FkID0gZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICAgICAgdmFyIG4gPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgbi5hcHBlbmQoImZpbGUiLCBpKSwKICAgICAgICAgICAgICBJbi5hCiAgICAgICAgICAgICAgICAucG9zdCgiL2FwaS91cGxvYWQiLCBuLCB7CiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJtdWx0aXBhcnQvZm9ybS1kYXRhIiB9LAogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhID0gZS5kYXRhOwogICAgICAgICAgICAgICAgICAib2siID09IGEudHlwZSA/ICh0LnNyYzEgPSBhLm1lc3NhZ2UpIDogbGF5ZXIubXNnKGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBmaWxlMjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSBuZXcgRmlsZVJlYWRlcigpLAogICAgICAgICAgICAgIGkgPSBlLnRhcmdldC5maWxlc1swXTsKICAgICAgICAgICAgYS5yZWFkQXNEYXRhVVJMKGkpLCAoYS5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgICB2YXIgbiA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICBuLmFwcGVuZCgiZmlsZSIsIGkpLAogICAgICAgICAgICAgIEluLmEKICAgICAgICAgICAgICAgIC5wb3N0KCIvYXBpL3VwbG9hZCIsIG4sIHsKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAiQ29udGVudC1UeXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiIH0sCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSBlLmRhdGE7CiAgICAgICAgICAgICAgICAgICJvayIgPT0gYS50eXBlID8gKHQuc3JjMiA9IGEubWVzc2FnZSkgOiBsYXllci5tc2coYS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGZpbGUzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgYSA9IG5ldyBGaWxlUmVhZGVyKCksCiAgICAgICAgICAgICAgaSA9IGUudGFyZ2V0LmZpbGVzWzBdOwogICAgICAgICAgICBhLnJlYWRBc0RhdGFVUkwoaSksIChhLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICAgIHZhciBuID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgIG4uYXBwZW5kKCJmaWxlIiwgaSksCiAgICAgICAgICAgICAgSW4uYQogICAgICAgICAgICAgICAgLnBvc3QoIi9hcGkvdXBsb2FkIiwgbiwgewogICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICJDb250ZW50LVR5cGUiOiAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgfSwKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IGUuZGF0YTsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSBhLnR5cGUgPyAodC5zcmMzID0gYS5tZXNzYWdlKSA6IGxheWVyLm1zZyhhLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgZmlsZTQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gbmV3IEZpbGVSZWFkZXIoKSwKICAgICAgICAgICAgICBpID0gZS50YXJnZXQuZmlsZXNbMF07CiAgICAgICAgICAgIGEucmVhZEFzRGF0YVVSTChpKSwgKGEub25sb2FkID0gZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICAgICAgdmFyIG4gPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgbi5hcHBlbmQoImZpbGUiLCBpKSwKICAgICAgICAgICAgICBJbi5hCiAgICAgICAgICAgICAgICAucG9zdCgiL2FwaS91cGxvYWQiLCBuLCB7CiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgIkNvbnRlbnQtVHlwZSI6ICJtdWx0aXBhcnQvZm9ybS1kYXRhIiB9LAogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhID0gZS5kYXRhOwogICAgICAgICAgICAgICAgICAib2siID09IGEudHlwZSA/ICh0LnNyYzQgPSBhLm1lc3NhZ2UpIDogbGF5ZXIubXNnKGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBmaWxlNTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSBuZXcgRmlsZVJlYWRlcigpLAogICAgICAgICAgICAgIGkgPSBlLnRhcmdldC5maWxlc1swXTsKICAgICAgICAgICAgYS5yZWFkQXNEYXRhVVJMKGkpLCAoYS5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgICB2YXIgbiA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICBuLmFwcGVuZCgiZmlsZSIsIGkpLAogICAgICAgICAgICAgIEluLmEKICAgICAgICAgICAgICAgIC5wb3N0KCIvYXBpL3VwbG9hZCIsIG4sIHsKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAiQ29udGVudC1UeXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiIH0sCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSBlLmRhdGE7CiAgICAgICAgICAgICAgICAgICJvayIgPT0gYS50eXBlID8gKHQuc3JjNSA9IGEubWVzc2FnZSkgOiBsYXllci5tc2coYS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHVwZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgICAgdCA9IHRoaXMuJHV0aWxzLnRyaW0oZS5wYXNzcG9ydCksCiAgICAgICAgICAgICAgYSA9IHRoaXMuJHV0aWxzLnRyaW0oZS5qaWFzaGkpOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvcmVhbF9uYW1lX2hpZ2giLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgIHBhc3Nwb3J0OiB0LAogICAgICAgICAgICAgICAgamlhc2hpOiBhLAogICAgICAgICAgICAgICAgZnJvbnRfcGljOiBlLnNyYzEsCiAgICAgICAgICAgICAgICBwYXNzcG9ydF9waWM6IGUuc3JjMiwKICAgICAgICAgICAgICAgIHBhc3Nwb3J0X2hhbmRfcGljOiBlLnNyYzMsCiAgICAgICAgICAgICAgICBqaWFzaGlfcGljOiBlLnNyYzQsCiAgICAgICAgICAgICAgICBqaWFzaGlfaGFuZF9waWM6IGUuc3JjNSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgIGUuJHJvdXRlci5wdXNoKCIvIik7CiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIEluZm86IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvY2VudGVyIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIChlLnJldmlld19zdGF0dXMgPSB0LmRhdGEubWVzc2FnZS5ocmV2aWV3X3N0YXR1cyksCiAgICAgICAgICAgICAgICAgIChlLmJhc2VfcmV2aWV3X3N0YXR1cyA9IHQuZGF0YS5tZXNzYWdlLnJldmlld19zdGF0dXMpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy5JbmZvKCk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgVm4gPSBFbiwKICAgICAgRG4gPSAoYSgiNDUzZCIpLCBPYmplY3QoaFsiYSJdKShWbiwgJG4sIE1uLCAhMSwgbnVsbCwgIjY1ZjIwMGM4IiwgbnVsbCkpLAogICAgICBSbiA9IERuLmV4cG9ydHMsCiAgICAgIFVuID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtbWFpbiB3cmFwIGZDb2xvcjEiIH0sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXRsZSIgfSwgW2UuX3YoIuaUr+S7mCIpXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbi1jb250ZW50IG10MjAiIH0sIFsKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZm9ybSIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgYWN0aW9uOiAiaHR0cDovL2NhbGwuYWJjdGVzZGFkYXMuY29tL3lqcGF5L3lqc3VibWl0LnBocCIsCiAgICAgICAgICAgICAgICAgIGlkOiAiZm9ybWRhdGEiLAogICAgICAgICAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbi1pbnB1dCIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUucGlja3VwVXIsCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwaWNrdXBVciIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImhpZGRlbiIsIG5hbWU6ICJwaWNrdXBVciIsIGlkOiAicGlja3VwVXIiIH0sCiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUucGlja3VwVXIgfSwKICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5waWNrdXBVciA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5yZWNlaXZlVXJsLAogICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicmVjZWl2ZVVybCIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJoaWRkZW4iLAogICAgICAgICAgICAgICAgICAgICAgbmFtZTogInJlY2VpdmVVcmwiLAogICAgICAgICAgICAgICAgICAgICAgaWQ6ICJyZWNlaXZlVXJsIiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnJlY2VpdmVVcmwgfSwKICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5yZWNlaXZlVXJsID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnNpZ25UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAic2lnblR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJoaWRkZW4iLCBuYW1lOiAic2lnblR5cGUiLCBpZDogInNpZ25UeXBlIiB9LAogICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnNpZ25UeXBlIH0sCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwgKGUuc2lnblR5cGUgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUub3JkZXJObywKICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogIm9yZGVyTm8iLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJoaWRkZW4iLCBuYW1lOiAib3JkZXJObyIsIGlkOiAib3JkZXJObyIgfSwKICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5vcmRlck5vIH0sCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwgKGUub3JkZXJObyA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5vcmRlckN1cnJlbmN5LAogICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAib3JkZXJDdXJyZW5jeSIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJoaWRkZW4iLAogICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm9yZGVyQ3VycmVuY3kiLAogICAgICAgICAgICAgICAgICAgICAgaWQ6ICJvcmRlckN1cnJlbmN5IiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLm9yZGVyQ3VycmVuY3kgfSwKICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgIChlLm9yZGVyQ3VycmVuY3kgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuc2lnbiwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInNpZ24iLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJoaWRkZW4iLCBuYW1lOiAic2lnbiIsIGlkOiAic2lnbiIgfSwKICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5zaWduIH0sCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwgKGUuc2lnbiA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi6LSm5Y+377yaIildKSwKICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLmN1c3RvbWVySWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImN1c3RvbWVySWQiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICLor7fovpPlhaXotKblj7ciLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAiY3VzdG9tZXJJZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAiY3VzdG9tZXJJZCIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuY3VzdG9tZXJJZCB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLmN1c3RvbWVySWQgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgY2VudGVyIG10MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIumHkemine+8miIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5vcmRlckFtb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAib3JkZXJBbW91bnQiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogIuivt+i+k+WFpemHkeminSIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJvcmRlckFtb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAib3JkZXJBbW91bnQiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLm9yZGVyQW1vdW50IH0sCiAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLm9yZGVyQW1vdW50ID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ1cGRhdGEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iLCB2YWx1ZTogIuaPkOS6pCIgfSwKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLnVwZGF0YSB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBPbiA9IFtdLAogICAgICBXbiA9IGEoIjgyMzciKSwKICAgICAgam4gPSBhLm4oV24pLAogICAgICBxbiA9IHsKICAgICAgICBuYW1lOiAicGF5bWVudCIsCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGlja3VwVXI6ICIiLAogICAgICAgICAgICByZWNlaXZlVXJsOiAiIiwKICAgICAgICAgICAgc2lnblR5cGU6ICJNRDUiLAogICAgICAgICAgICBvcmRlck5vOiAiIiwKICAgICAgICAgICAgb3JkZXJDdXJyZW5jeTogIkNOWSIsCiAgICAgICAgICAgIHNpZ246ICIiLAogICAgICAgICAgICBjdXN0b21lcklkOiAiIiwKICAgICAgICAgICAgb3JkZXJBbW91bnQ6ICIiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0KICAgICAgICAgICAgdGhpcy5waWNrdXBVciArCiAgICAgICAgICAgIHRoaXMucmVjZWl2ZVVybCArCiAgICAgICAgICAgIHRoaXMuc2lnblR5cGUgKwogICAgICAgICAgICB0aGlzLm9yZGVyTm8gKwogICAgICAgICAgICB0aGlzLm9yZGVyQ3VycmVuY3kgKwogICAgICAgICAgICB0aGlzLmN1c3RvbWVySWQgKwogICAgICAgICAgICB0aGlzLm9yZGVyQW1vdW50OwogICAgICAgICAgKHRoaXMuc2lnbiA9IGpuKCkoZSkpLAogICAgICAgICAgICBjb25zb2xlLmxvZyhlKSwKICAgICAgICAgICAgY29uc29sZS5sb2coam4oKShlKSksCiAgICAgICAgICAgICh0aGlzLnBpY2t1cFVyID0gbG9jYXRpb24ub3JpZ2luICsgIi9kaXN0LyMvc3VjY2VzcyIpLAogICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnBpY2t1cFVyKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIHVwZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gIiIgPT0gdGhpcy5jdXN0b21lcklkCiAgICAgICAgICAgICAgPyBsYXllci5tc2coIuivt+i+k+WFpei0puWPtyIpCiAgICAgICAgICAgICAgOiAiIiA9PSB0aGlzLm9yZGVyQW1vdW50IHx8IHRoaXMub3JkZXJBbW91bnQgPD0gMAogICAgICAgICAgICAgID8gbGF5ZXIubXNnKCLor7fovpPlhaXph5Hpop0iKQogICAgICAgICAgICAgIDogdm9pZCAkKCIjZm9ybWRhdGEiKS5zdWJtaXQoKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgfSwKICAgICAgR24gPSBxbiwKICAgICAgWm4gPSAoYSgiOTlmZCIpLCBPYmplY3QoaFsiYSJdKShHbiwgVW4sIE9uLCAhMSwgbnVsbCwgImVlOGNhMjI4IiwgbnVsbCkpLAogICAgICBRbiA9IFpuLmV4cG9ydHMsCiAgICAgIEhuID0ge30sCiAgICAgIEtuID0gT2JqZWN0KGhbImEiXSkoSG4sIFRhLCBJYSwgITEsIG51bGwsIG51bGwsIG51bGwpLAogICAgICBKbiA9IEtuLmV4cG9ydHMsCiAgICAgIFluID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgWwogICAgICAgICAgICBhKCJpbmRleC1oZWFkZXIiKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtd3JhcCIgfSwgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50IiB9LCBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJiYWNrLW5hdiBmQ29sb3IxIGZ0MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJzZWN1cml0eS5zZXR0aW5nIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJzZWN1cml0eS50YnB3IikpICsKICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZyIGZDb2xvcjIgbW91c2VEZWZhdWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuZ29CYWNrIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIjw8IiArIGUuX3MoZS4kdCgiYmFjayIpKSldCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJuYXYtYWZ0ZXIiIH0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1jb250ZW50IiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluIGZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgbGVmdCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic2VjdXJpdHkudGJwdyIpKSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiKSwKICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm1haW4taW5wdXQiLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJwYXNzd29yZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoOiAiNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICI25L2N5a2X5q+N5oiW5pWw5a2XIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDQwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgbGVmdCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicmVnaXN0ZXIucmVwd2QiKSkpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiksCiAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJtYWluLWlucHV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicGFzc3dvcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIjYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAiJHQoJ2xwd2QucmVwd2QnKSIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQ2MCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGxlZnQiIH0sIFtlLl92KCLCoCIpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYmFzZUJ0biBtbDIwIG1vdXNlRGVmYXVsdCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY29uZmlybSIpKSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdLAogICAgICAgICAgMQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIFhuID0gW10sCiAgICAgIGVzID0gewogICAgICAgIG5hbWU6ICJzZXRDYXNoIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4ge307CiAgICAgICAgfSwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ29CYWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5iYWNrKC0xKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgdHMgPSBlcywKICAgICAgYXMgPSAoYSgiZTBiYSIpLCBPYmplY3QoaFsiYSJdKSh0cywgWW4sIFhuLCAhMSwgbnVsbCwgIjFjYTg0NThmIiwgbnVsbCkpLAogICAgICBpcyA9IGFzLmV4cG9ydHMsCiAgICAgIG5zID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtbWFpbiIgfSwgWwogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtdGl0bGUiIH0sIFsKICAgICAgICAgICAgZS5fdigiIOWFheW4gSAiKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmciBiYXNlIG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nb1JlY29yZCB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgW2UuX3YoIuWFheW4geiusOW9lSIpXQogICAgICAgICAgICApLAogICAgICAgICAgXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVjaGFyZ2Utd3JhcCBmdDE0IGZDb2xvcjIiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10NDAgY2xlYXIiIH0sIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGVmdCBmbCB0ciIgfSwgW2UuX3YoIuWFheW4geWcsOWdgCIpXSksCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJpZ2h0IGZsIiB9LCBbCiAgICAgICAgICAgICAgICBhKCJpbWciLCB7IHN0YXRpY0NsYXNzOiAicXJjb2RlIiwgYXR0cnM6IHsgc3JjOiBlLnVybCB9IH0pLAogICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDIwIGZDb2xvcjEgbXQxNSIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBhdHRyczogeyBpZDogImNvcHktdGV4dCIgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuYWRkcikpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJiYXNlIG1sMjAgZjE0IG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICBpZDogImNvcHkiLAogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YS1jbGlwYm9hcmQtYWN0aW9uIjogImNvcHkiLAogICAgICAgICAgICAgICAgICAgICAgICAiZGF0YS1jbGlwYm9hcmQtdGFyZ2V0IjogIiNjb3B5LXRleHQiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KCLlpI3liLYiKV0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgZS5fbSgwKSwKICAgICAgICAgICAgZS5fbSgxKSwKICAgICAgICAgICAgZS5fbSgyKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBzcyA9IFsKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0aXAiIH0sIFsKICAgICAgICAgICAgYSgicCIsIFtlLl92KCLmuKnppqjmj5DnpLoiKV0pLAogICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgIGUuX3YoIuKAoiDor7fli7/lkJHkuIrov7DlnLDlnYDlhYXlgLzku7vkvZXpnZ4gSk5CIOi1hOS6p++8jOWQpuWImei1hOS6p+WwhuS4jeWPr+aJvuWbnuOAgiIpLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgIuKAoiDmgqjlhYXlgLzoh7PkuIrov7DlnLDlnYDlkI7vvIzpnIDopoHmlbTkuKrnvZHnu5zoioLngrnnmoTnoa7orqTvvIw25qyh572R57uc6IqC54K556Gu6K6k5ZCO5Yiw6LSm77yM5Yiw6LSm5pe26Ze05LiA6Iis5pivMTDliIbpkp8tNjDliIbpkp/kuYvpl7TjgIIiCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICLigKIgVVNEVOWFheW4geS7heaUr+aMgXNpbXBsZSBzZW5k55qE5pa55rOV77yM5L2/55So5YW25LuW5pa55rOV77yIc2VuZCBhbGzvvInnmoTlhYXluIHmmoLml7bml6Dms5XkuIrotKbvvIzor7fmgqjosIXop6PjgIIiCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICLigKIg5oKo5YWF5YC86Iez5LiK6L+w5Zyw5Z2A5ZCO77yM6ZyA6KaB5pW05Liq572R57uc6IqC54K555qE56Gu6K6k77yMMeasoee9kee7nOehruiupOWQjuWIsOi0pu+8jDbmrKHnvZHnu5znoa7orqTlkI7lj6/mj5DluIHjgIIiCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICLigKIg5pyA5bCP5YWF5YC86YeR6aKd77ya77yM5bCP5LqO5pyA5bCP6YeR6aKd55qE5YWF5YC85bCG5LiN5Lya5LiK6LSm5LiU5peg5rOV6YCA5Zue44CCIDEwMCBVU0RU5bCP5LqO5pyA5bCP6YeR6aKd55qE5YWF5YC85bCG5LiN5Lya5LiK6LSm5LiU5peg5rOV6YCA5Zue44CCIgogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAi4oCiIOaCqOeahOWFheWAvOWcsOWdgOS4jeS8mue7j+W4uOaUueWPmO+8jOWPr+S7pemHjeWkjeWFheWAvO+8m+WmguacieabtOaUue+8jOaIkeS7rOS8muWwvemHj+mAmui/h+e9keermeWFrOWRiuaIlumCruS7tumAmuefpeaCqOOAgiIKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICBlLl92KCLigKIg6K+35Yqh5b+F56Gu6K6k55S16ISR5Y+K5rWP6KeI5Zmo5a6J5YWo77yM6Ziy5q2i5L+h5oGv6KKr56+h5pS55oiW5rOE6Zyy44CCIiksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAidGlwIiwgc3RhdGljU3R5bGU6IHsgZGlzcGxheTogIm5vbmUiIH0gfSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgIGEoInAiLCBbZS5fdigi5rip6aao5o+Q56S6IildKSwKICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgIuKAoiDor7fli7/lkJHkuIrov7DlnLDlnYDlhYXlgLzku7vkvZXpnZ5VU0RU6LWE5Lqn77yM5ZCm5YiZ6LWE5Lqn5bCG5LiN5Y+v5om+5Zue44CCIgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgIuKAoiDmgqjlhYXlgLzoh7PkuIrov7DlnLDlnYDlkI7vvIzpnIDopoHmlbTkuKrnvZHnu5zoioLngrnnmoTnoa7orqTvvIwxNeasoee9kee7nOehruiupOWQjuWIsOi0pu+8jDMw5qyh572R57uc56Gu6K6k5ZCO5Y+v5o+Q5biB44CCIgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgIuKAoiDmnIDlsI/lhYXlgLzph5Hpop3vvJrvvIzlsI/kuo7mnIDlsI/ph5Hpop3nmoTlhYXlgLzlsIbkuI3kvJrkuIrotKbkuJTml6Dms5XpgIDlm57jgIIgMC4wMSBVU0RUIOWwj+S6juacgOWwj+mHkemineeahOWFheWAvOWwhuS4jeS8muS4iui0puS4lOaXoOazlemAgOWbnuOAgiIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICLigKIg55uu5YmN5LiN5pSv5oyB5L2/55So5pm66IO95ZCI57qm5oiW5Yy65Z2X5aWW5YqxKENvaW5iYXNlKeeahOi9rOi0puWFheWAvO+8jOaZuuiDveWQiOe6puaIluWMuuWdl+WlluWKseeahOi9rOi0puWwhuS4jeS8muS4iui0pu+8jOivt+aCqOiwheino+OAgiIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICLigKIg5oKo55qE5YWF5YC85Zyw5Z2A5LiN5Lya57uP5bi45pS55Y+Y77yM5Y+v5Lul6YeN5aSN5YWF5YC877yb5aaC5pyJ5pu05pS577yM5oiR5Lus5Lya5bC96YeP6YCa6L+H572R56uZ5YWs5ZGK5oiW6YKu5Lu26YCa55+l5oKo44CCIgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgZS5fdigi4oCiIOivt+WKoeW/heehruiupOeUteiEkeWPiua1j+iniOWZqOWuieWFqO+8jOmYsuatouS/oeaBr+iiq+evoeaUueaIluazhOmcsuOAgiIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInRpcCIsIHN0YXRpY1N0eWxlOiB7IGRpc3BsYXk6ICJub25lIiB9IH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoIua4qemmqOaPkOekuiIpXSksCiAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICLigKIg6K+35Yu/5ZCR5LiK6L+w5Zyw5Z2A5YWF5YC85Lu75L2V6Z2eIFVTRFQg6LWE5Lqn77yM5ZCm5YiZ6LWE5Lqn5bCG5LiN5Y+v5om+5Zue44CCIgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgIuKAoiDmgqjlhYXlgLzoh7PkuIrov7DlnLDlnYDlkI7vvIzpnIDopoHmlbTkuKrnvZHnu5zoioLngrnnmoTnoa7orqTvvIwx5qyh572R57uc56Gu6K6k5ZCO5Yiw6LSm77yMNuasoee9kee7nOehruiupOWQjuWPr+aPkOW4geOAgiIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICLigKIg5pyA5bCP5YWF5YC86YeR6aKd77ya77yM5bCP5LqO5pyA5bCP6YeR6aKd55qE5YWF5YC85bCG5LiN5Lya5LiK6LSm5LiU5peg5rOV6YCA5Zue44CCIDAuMDEgVVNEVCDlsI/kuo7mnIDlsI/ph5Hpop3nmoTlhYXlgLzlsIbkuI3kvJrkuIrotKbkuJTml6Dms5XpgIDlm57jgIIiCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAi4oCiIOaCqOeahOWFheWAvOWcsOWdgOS4jeS8mue7j+W4uOaUueWPmO+8jOWPr+S7pemHjeWkjeWFheWAvO+8m+WmguacieabtOaUue+8jOaIkeS7rOS8muWwvemHj+mAmui/h+e9keermeWFrOWRiuaIlumCruS7tumAmuefpeaCqOOAgiIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICLigKIg5Li65L+d6Zqc6LWE6YeR5a6J5YWo77yM5b2T5oKo6LSm5oi35a6J5YWo562W55Wl5Y+Y5pu044CB5a+G56CB5L+u5pS544CB5L2/55So5paw5Zyw5Z2A5o+Q5biB77yM5oiR5Lus5Lya5a+55o+Q5biB6L+b6KGM5Lq65bel5a6h5qC477yM6K+36ICQ5b+D562J5b6F5bel5L2c5Lq65ZGY55S16K+d5oiW6YKu5Lu26IGU57O744CCIgogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgZS5fdigi4oCiIOivt+WKoeW/heehruiupOeUteiEkeWPiua1j+iniOWZqOWuieWFqO+8jOmYsuatouS/oeaBr+iiq+evoeaUueaIluazhOmcsuOAgiIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIG9zID0gewogICAgICAgIG5hbWU6ICJyZWNoYXJnZSIsCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsgYWRkcjogIiIsIHVybDogIiIgfTsKICAgICAgICB9LAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEsIGxlZnQ6IG5uIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ29SZWNvcmQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAiY29pblJlY29yZCIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IG5ldyBDbGlwYm9hcmQoIiNjb3B5Iik7CiAgICAgICAgICAgIGUub24oInN1Y2Nlc3MiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGFsZXJ0KCJDb3B5IFN1Y2Nlc3MiKTsKICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgZS5vbigiZXJyb3IiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgYWxlcnQoIuWkjeWItuWksei0pSIpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICh0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRkcmVzcyIpIHx8ICIiKSwKICAgICAgICAgICAgdGhpcy5hZGRyZXNzICYmCiAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL21vbmV5L3JlY2hhbmdlP3VzZXJfaWQ9IiArIHRoaXMuYWRkcmVzcywKICAgICAgICAgICAgICAgIHR5cGU6ICJHRVQiLAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAoZS5hZGRyID0gdC5kYXRhLm1lc3NhZ2UuY29tcGFueV9ldGhfYWRkcmVzcyksCiAgICAgICAgICAgICAgICAgICAgKGUudXJsID0KICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vcXIubGlhbnR1LmNvbS9hcGkucGhwPyZ3PTMwMCZ0ZXh0PSIgKwogICAgICAgICAgICAgICAgICAgICAgdC5kYXRhLm1lc3NhZ2UuY29tcGFueV9ldGhfYWRkcmVzcyk7CiAgICAgICAgICAgICAgICAgIGUuYWRkciwgbmV3IENsaXBib2FyZCgiI2NvcHkiKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuaW5pdCgpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIHJzID0gb3MsCiAgICAgIGxzID0gKGEoIjFjOTgiKSwgT2JqZWN0KGhbImEiXSkocnMsIG5zLCBzcywgITEsIG51bGwsICIzMGQ4NjMzZCIsIG51bGwpKSwKICAgICAgY3MgPSBscy5leHBvcnRzLAogICAgICBkcyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LW1haW4iIH0sIFsKICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudCIgfSwgWwogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJ0YWJCYXIgZkNvbG9yMSBmdDE4IiB9LAogICAgICAgICAgICAgIGUuX2woZS50YWJMaXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibWwyNSIsCiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBpID09IGUuY3VycmVudCB9LAogICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2hhbmdlKGkpOwogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQpKV0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgMAogICAgICAgICAgICApLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVyIGZDb2xvcjEgIG10NDAiIH0sIFsKICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1haW5fdGl0bGUiIH0sIFtlLl92KCLmib/lhZHllYYiKV0pLAogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJpbmJsb2NrIG1sNDAiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuYWNlaXRlTGlzdC5uYW1lKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQ0MCIgfSwgWwogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluX3RpdGxlIiB9LCBbZS5fdigi5omL5py65Y+356CBIildKSwKICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnN1Ym1pdEluZm8ubW9iaWxlLAogICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInN1Ym1pdEluZm8ubW9iaWxlIiwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm1haW5faW5wdXQiLAogICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAidGVsIiwgcGxhY2Vob2xkZXI6ICLor7fovpPlhaXkvaDnmoTmiYvmnLrlj7fnoIEiIH0sCiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnN1Ym1pdEluZm8ubW9iaWxlIH0sCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KGUuc3VibWl0SW5mbywgIm1vYmlsZSIsIHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10NDAiIH0sIFsKICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWFpbl90aXRsZSIgfSwgW2UuX3YoIuS6pOaYk+i0puWPtyIpXSksCiAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5zdWJtaXRJbmZvLmRlYWxfYWNjb3VudCwKICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJzdWJtaXRJbmZvLmRlYWxfYWNjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJtYWluX2lucHV0IiwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogInRleHQiLCBwbGFjZWhvbGRlcjogIuivt+i+k+WFpeS9oOeahOS6pOaYk+i0puWPtyIgfSwKICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuc3VibWl0SW5mby5kZWFsX2FjY291bnQgfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoZS5zdWJtaXRJbmZvLCAiZGVhbF9hY2NvdW50IiwgdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAwID09IHRoaXMuY3VycmVudAogICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQ0MCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWFpbl90aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi5YWF5YC86YeR6aKdKENOWSkiKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnN1Ym1pdEluZm8ubW9uZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInN1Ym1pdEluZm8ubW9uZXkiLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibWFpbl9pbnB1dCIsCiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICLor7fovpPlhaXkvaDnmoTlhYXlgLzph5Hpop0iLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnN1Ym1pdEluZm8ubW9uZXkgfSwKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KGUuc3VibWl0SW5mbywgIm1vbmV5IiwgdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgIDEgPT0gdGhpcy5jdXJyZW50CiAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDQwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluX3RpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KCLmj5DnjrDph5Hpop0oQ05ZKSIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuc3VibWl0SW5mby5tb25leSwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAic3VibWl0SW5mby5tb25leSIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJtYWluX2lucHV0IiwKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogIuivt+i+k+WFpeS9oOeahOaPkOeOsOmHkeminSIsCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuc3VibWl0SW5mby5tb25leSB9LAogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoZS5zdWJtaXRJbmZvLCAibW9uZXkiLCB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgIijotKbmiLfkvZnpop06ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5hY2VpdGVMaXN0LnVzZXJfYmFsYW5jZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICIgQ05ZKSIKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgZS5fbSgxKSwKICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtdDQwIiB9LCBbCiAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1haW5fdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdigi6K+36YCJ5oup5YWF5YC85pa55byPOiIpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogIm10NDAgcGF5Y29udGVudCIgfSwKICAgICAgICAgICAgICAgICAgZS5fbChlLmNoYXJnZUluZm8sIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJwYXlib3ggcGF5aW1nIGluYmxvY2siIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKHQudHlwZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIm10NSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIuWnk+WQje+8miIgKyBlLl9zKHQubmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi6LSm5oi377yaIiArIGUuX3ModC5hY2NvdW50KSldKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJjaG9vc2UgZkNvbG9yMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIumAieaLqSIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS53YXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJ3YXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJyYWRpbyIsIG5hbWU6ICJjaG9vc2UiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGksIGNoZWNrZWQ6IGUuX3EoZS53YXksIGkpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS53YXkgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQ0MCIgfSwgWwogICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImJ0biBjdXJQZXIgdGMgbWwyMCIsCiAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuc2VuZERhdGEgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgW2UuX3YoIiDnoa7orqQgIildCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICB1cyA9IFsKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImJhY2stbmF2IGZDb2xvcjEgZnQyMCIgfSwgWwogICAgICAgICAgICAgIGUuX3YoIiDmib/lhZHmj5DnjrAgIiksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmciBmQ29sb3IyIG1vdXNlRGVmYXVsdCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigiPDzov5Tlm54iKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJuYXYtYWZ0ZXIiIH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhdHRlbnRpb24gZnQxMiBtdDE1IiB9LCBbCiAgICAgICAgICAgIGEoInAiLCBbZS5fdigiKuazqOaEjzoiKV0pLAogICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAi5o+Q546w6K6i5Y2V5o+Q5Lqk5oiQ5Yqf5ZCO6K+35YWz5rOo6K6i5Y2V54q25oCBLOWmguaenOWFkeWVhuagh+iusOW3sui9rOi0puWQjjIw5YiG6ZKf5YaF55So5oi35pyq56Gu6K6kLOivpeiuouWNleS8muiHquWKqOehruiupOOAgiIKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIG1zID0gewogICAgICAgIG5hbWU6ICJyZWNoYXJnZU1vbmV5IiwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBsZWZ0OiBubiB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGN1cnJlbnQ6IDAsCiAgICAgICAgICAgIGFjdGl2ZTogMCwKICAgICAgICAgICAgaWQ6ICIiLAogICAgICAgICAgICB3YXk6IDAsCiAgICAgICAgICAgIHRhYkxpc3Q6IFsi5YWF5YC8IiwgIuaPkOeOsCJdLAogICAgICAgICAgICBjaGFyZ2VJbmZvOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZTogIuW+ruS/oSIsCiAgICAgICAgICAgICAgICBuYW1lOiAiIiwKICAgICAgICAgICAgICAgIGFjY291bnQ6ICIiLAogICAgICAgICAgICAgICAgaW1ndXJsOiAiLi4vYXNzZXRzL2ltYWdlcy93eC5wbmciLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZTogIuaUr+S7mOWunSIsCiAgICAgICAgICAgICAgICBuYW1lOiAiIiwKICAgICAgICAgICAgICAgIGFjY291bnQ6ICIiLAogICAgICAgICAgICAgICAgaW1ndXJsOiAiLi4vYXNzZXRzL2ltYWdlcy96aGlmdWJhby5wbmciLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZTogIumTtuihjCIsCiAgICAgICAgICAgICAgICBuYW1lOiAiIiwKICAgICAgICAgICAgICAgIGFjY291bnQ6ICIiLAogICAgICAgICAgICAgICAgaW1ndXJsOiAiLi4vYXNzZXRzL2ltYWdlcy9iYW5rLnBuZyIsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgYWNlaXRlTGlzdDoge30sCiAgICAgICAgICAgIHN1Ym1pdEluZm86IHsgbW9iaWxlOiAiIiwgZGVhbF9hY2NvdW50OiAiIiwgbW9uZXk6ICIiIH0sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLiRyb3V0ZS5xdWVyeTsKICAgICAgICAgICh0aGlzLmN1cnJlbnQgPSBlLmN1cnJlbnQpLAogICAgICAgICAgICAodGhpcy5pZCA9IGUuaWQpLAogICAgICAgICAgICAodGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImFkZHJlc3MiKSB8fCAiIiksCiAgICAgICAgICAgIHRoaXMuaW5pdCgpOwogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBlOwogICAgICAgICAgfSwKICAgICAgICAgIHNldFR5cGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKHRoaXMuY2hhcmdlSW5mb1swXS5uYW1lID0gdGhpcy5hY2VpdGVMaXN0LndlY2hhdF9uaWNrbmFtZSksCiAgICAgICAgICAgICAgKHRoaXMuY2hhcmdlSW5mb1swXS5hY2NvdW50ID0gdGhpcy5hY2VpdGVMaXN0LndlY2hhdF9hY2NvdW50KSwKICAgICAgICAgICAgICAodGhpcy5jaGFyZ2VJbmZvWzFdLm5hbWUgPSB0aGlzLmFjZWl0ZUxpc3QuYWxpX25pY2tuYW1lKSwKICAgICAgICAgICAgICAodGhpcy5jaGFyZ2VJbmZvWzFdLmFjY291bnQgPSB0aGlzLmFjZWl0ZUxpc3QuYWxpX2FjY291bnQpLAogICAgICAgICAgICAgICh0aGlzLmNoYXJnZUluZm9bMl0udHlwZSA9IHRoaXMuYWNlaXRlTGlzdC5iYW5rX25hbWUpLAogICAgICAgICAgICAgICh0aGlzLmNoYXJnZUluZm9bMl0ubmFtZSA9IHRoaXMuYWNlaXRlTGlzdC5iYW5rX2FjY291bnQpLAogICAgICAgICAgICAgICh0aGlzLmNoYXJnZUluZm9bMl0uYWNjb3VudCA9IHRoaXMuYWNlaXRlTGlzdC5iYW5rX2FkZHJlc3MpOwogICAgICAgICAgfSwKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSBsYXllci5sb2FkKCk7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDoKICAgICAgICAgICAgICAgICIvYXBpL2FjY2VwdG9yL2luZm8/aWQ9IiArIHRoaXMuaWQgKyAiJmFkZHJlc3M9IiArIHRoaXMuYWRkcmVzcywKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UodCksCiAgICAgICAgICAgICAgICAib2siID09IGEuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICgoZS5hY2VpdGVMaXN0ID0gYS5kYXRhLm1lc3NhZ2UpLCBlLnNldFR5cGUoKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHNlbmREYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0SW5mby5tb2JpbGUpCiAgICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0SW5mby5kZWFsX2FjY291bnQpCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3VibWl0SW5mby5tb25leSB8fCB0aGlzLnN1Ym1pdEluZm8ubW9uZXkgPD0gMCkKICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKCLor7fovpPlhaXph5Hpop3vvIEiKTsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKCIiICE9PSB0aGlzLndheSkgewogICAgICAgICAgICAgICAgICB2YXIgdCA9ICIiOwogICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMud2F5KSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgdCA9ICJ3ZV9jaGF0IjsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAgIHQgPSAiYWxpX3BheSI7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICB0ID0gImJhbmsiOwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgdmFyIGEgPSB7CiAgICAgICAgICAgICAgICAgICAgYWNjZXB0b3JfaWQ6IHRoaXMuaWQsCiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogdGhpcy5hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgIHdheTogdCwKICAgICAgICAgICAgICAgICAgICB0eXBlOiAwID09IHRoaXMuY3VycmVudCA/ICJidXkiIDogInNlbGwiLAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAoYSA9IE9iamVjdC5hc3NpZ24oYSwgdGhpcy5zdWJtaXRJbmZvKSksCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL2FjY2VwdG9yL2RlYWwiLAogICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBhLAogICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgPyAobGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRyb3V0ZXIucHVzaCgiY29pblJlY29yZCIpKQogICAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyh0Lm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGxheWVyLm1zZygi6K+36YCJ5oup5YWF5YC85pa55byP77yBIik7CiAgICAgICAgICAgICAgZWxzZSBsYXllci5tc2coIuivt+i+k+WFpei0puWPt++8gSIpOwogICAgICAgICAgICBlbHNlIGxheWVyLm1zZygi6K+36L6T5YWl5omL5py65Y+377yBIik7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIHBzID0gbXMsCiAgICAgIGhzID0gKGEoIjU2NTEiKSwgT2JqZWN0KGhbImEiXSkocHMsIGRzLCB1cywgITEsIG51bGwsICJiNjE0ZWRjMiIsIG51bGwpKSwKICAgICAgZnMgPSBocy5leHBvcnRzLAogICAgICBncyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50LW1haW4iIH0sIFsKICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICBhKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYWNjb3VudC10aXRsZSBtb3VzZURlZmF1bHQiLAogICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJwYWRkaW5nLWxlZnQiOiAiMzBweCIgfSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZS5fbChlLndheUxpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogaSA9PSBlLmN1cnJlbnQgfSwKICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNoYW5nZVdheShpLCB0LndheSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudGl0bGUpKV0KICAgICAgICAgICAgICApOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgMAogICAgICAgICAgKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250YWluZXIiIH0sIFsKICAgICAgICAgICAgICBlLl9tKDEpLAogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxpc3QtaXRlbSBmQ29sb3IxIGZ0MTIiIH0sCiAgICAgICAgICAgICAgICBlLl9sKGUuY29pbkxpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jcmVhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5kZWFsX2FjY291bnQpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuYWNjZXB0b3JfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5oZXNfYWNjb3VudCkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC53YXlfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE1IiB9LCBbZS5fdihlLl9zKHQubW9uZXkpKV0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE1IHRyIGN1clBlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudXBkYXRlX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICB2cyA9IFsKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImJhY2stbmF2IGZDb2xvcjEgZnQyMCIgfSwgWwogICAgICAgICAgICAgIGUuX3YoIiDlhYXluIHmj5DluIHorrDlvZUgIiksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmciBmQ29sb3IyIG1vdXNlRGVmYXVsdCIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigiPDzov5Tlm54iKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJuYXYtYWZ0ZXIiIH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoInVsIiwgeyBzdGF0aWNDbGFzczogImxpc3QtdGl0bGUgZkNvbG9yMiBmdDEyIGNsZWFyIiB9LCBbCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcyMCIgfSwgW2UuX3YoIuaJv+WFkeaXtumXtCIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgW2UuX3YoIuS6pOaYk+i0puWPtyIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgW2UuX3YoIuaJv+WFkeWVhiIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxNSIgfSwgW2UuX3YoIuaJv+WFkeWVhuS6pOaYk+i0puWPtyIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCIgfSwgW2UuX3YoIuS6pOaYk+aWueW8jyIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxNSIgfSwgW2UuX3YoIuS6pOaYk+mHkeminSIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxNSAgdHIiIH0sIFtlLl92KCLnirbmgIEiKV0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgXSwKICAgICAgX3MgPSB7CiAgICAgICAgbmFtZTogInJlY2hhcmdlIiwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBsZWZ0OiBubiB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICBjdXJyZW50OiAwLAogICAgICAgICAgICB3YXk6ICJidXkiLAogICAgICAgICAgICB3YXlMaXN0OiBbCiAgICAgICAgICAgICAgeyB0aXRsZTogIuWFheW4geiusOW9lSIsIHdheTogImJ1eSIgfSwKICAgICAgICAgICAgICB7IHRpdGxlOiAi5o+Q5biB6K6w5b2VIiwgd2F5OiAic2VsbCIgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgY29pbkxpc3Q6IFtdLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuYWRkcmVzcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhZGRyZXNzIikgfHwgIiI7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBjaGFuZ2VXYXk6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICh0aGlzLmN1cnJlbnQgPSBlKSwgKHRoaXMud2F5ID0gdCksIHRoaXMuZ2V0UmVjb3JkKCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0UmVjb3JkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgaWYgKCIiICE9IHRoaXMuYWRkcmVzcykgewogICAgICAgICAgICAgIHZhciB0ID0gdGhpcy53YXksCiAgICAgICAgICAgICAgICBhID0gdGhpcy5hZGRyZXNzOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9hY2NlcHRvci9teV9kZWFsP2FkZHJlc3M9IiArIGEgKyAiJndheT0iICsgdCwKICAgICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICh0ID0gdC5kYXRhKSwgIm9rIiA9PT0gdC50eXBlICYmIChlLmNvaW5MaXN0ID0gdC5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuZ2V0UmVjb3JkKCk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgeXMgPSBfcywKICAgICAgYnMgPSAoYSgiNjg0NyIpLCBPYmplY3QoaFsiYSJdKSh5cywgZ3MsIHZzLCAhMSwgbnVsbCwgIjE5ZjcxZmZlIiwgbnVsbCkpLAogICAgICBDcyA9IGJzLmV4cG9ydHMsCiAgICAgIHdzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgeyBzdGF0aWNDbGFzczogIm5vdGljZURldGFpbCIgfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiaW5kZXhIZWFkZXIiKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtd3JhcCIgfSwgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50IiB9LCBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJiYWNrLW5hdiBmQ29sb3IxIGZ0MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZyIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJmb250LXNpemUiOiAiMTZweCIsIGNvbG9yOiAiI2M3Y2NkYSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuZ29CZWZvcmUgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImJhY2siKSkpXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1jb250ZW50IiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkZXRhaWxCaWciIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWIzMCBjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIHc5MCBmbCB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS50aXRsZSkpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImRldGFpbENvbnRlbnQgZkNvbG9yMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiAiY29uIiwKICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBlLl9zKGUuY29udGVudCkgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIG10NDAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAidHIiIH0sIFtlLl92KGUuX3MoZS5hYnN0cmFjdCkpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogInRyIG10NSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS51cGRhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJpbmRleC1mb290ZXIiKSwKICAgICAgICAgIF0sCiAgICAgICAgICAxCiAgICAgICAgKTsKICAgICAgfSwKICAgICAga3MgPSBbXSwKICAgICAgeHMgPSB7CiAgICAgICAgbmFtZTogIm5vdGljZURldGFpbCIsCiAgICAgICAgY29tcG9uZW50czogeyBpbmRleEhlYWRlcjogQSwgaW5kZXhGb290ZXI6IGRlIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsgdGl0bGU6ICIiLCBjb250ZW50OiAiIiwgYWJzdHJhY3Q6ICIiLCB1cGRhdGVfdGltZTogIiIgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICh0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIiksCiAgICAgICAgICAgICh0aGlzLmlkID0gdGhpcy4kcm91dGUucXVlcnkuaWQpOwogICAgICAgICAgdmFyIHQgPSB0aGlzLmlkOwogICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgIHVybDogIi9hcGkvbmV3cy9kZXRhaWwiLAogICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgZGF0YTogeyBpZDogdCB9LAogICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICB9KQogICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICh0ID0gdC5kYXRhKSwKICAgICAgICAgICAgICAgICJvayIgPT09IHQudHlwZSAmJgogICAgICAgICAgICAgICAgICAoKGUudGl0bGUgPSB0Lm1lc3NhZ2UudGl0bGUpLAogICAgICAgICAgICAgICAgICAoZS5jb250ZW50ID0gdC5tZXNzYWdlLmNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAoZS5hYnN0cmFjdCA9IHQubWVzc2FnZS5hYnN0cmFjdCksCiAgICAgICAgICAgICAgICAgIChlLnVwZGF0ZV90aW1lID0gdC5tZXNzYWdlLnVwZGF0ZV90aW1lKSwKICAgICAgICAgICAgICAgICAgZS5zZXRQcm9wZXJ0eSgpKTsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ29CZWZvcmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLmJhY2soLTEpOwogICAgICAgICAgfSwKICAgICAgICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKTsKICAgICAgICAgICAgKEhUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBbXS5zbGljZS5jYWxsKHRoaXMpLmZvckVhY2goZSk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIGUuZm9yRWFjaChmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAiIzY2NiAhaW1wb3J0YW50IjsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgU3MgPSB4cywKICAgICAgQXMgPSAoYSgiNzg5MCIpLCBPYmplY3QoaFsiYSJdKShTcywgd3MsIGtzLCAhMSwgbnVsbCwgIjFhNjQxYTQ1IiwgbnVsbCkpLAogICAgICB6cyA9IEFzLmV4cG9ydHMsCiAgICAgIFBzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtbWFpbiBhY2NvdW50RW50cnVzdCIgfSwgWwogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtdG9wIGZDb2xvcjIiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsIiB9LCBbCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInRpdGxlIGZ0MTYiIH0sCiAgICAgICAgICAgICAgICBlLl9sKGUudGFiTGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogZS5pc0FjdGl2ZSA9PSBpIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKHQudGl0bGUpKV0KICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmciBtdDE1IG1yNjAiIH0sCiAgICAgICAgICAgICAgZS5fbChlLnRhYjJMaXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUJ0biBtcjIwIG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nb1JlY29yZChpKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyh0LnRpdGxlKSldCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIDAKICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgMCA9PSBlLmlzQWN0aXZlCiAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGFpbmVyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiAiIH0sCiAgICAgICAgICAgICAgICAgICAgZS5fbChlLmFjZWl0ZUxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC51c2VyX2lkKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm5hbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQucmVjaGFyZ2VfYW1vdW50KSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LnJlY2hhcmdlX3JhdGUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY2FzaF9hbW91bnQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY2FzaF9yYXRlKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5vcGVyYXRvckxpc3QsIGZ1bmN0aW9uIChpLCBuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbCB3NiB0ciBjdXJQZXIgY2VpbENvbG9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdvdG8odC5pZCwgbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoaS5uYW1lKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgVHMgPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0LXRpdGxlIGZDb2xvcjIgZnQxMiBjbGVhciAiIH0sIFsKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigiaWQiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLkvpvlupTllYYiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLlhYXlgLzpop3luqYiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLlhYXlgLzotLnnjociKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLmj5DnjrDpop3luqYiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFtlLl92KCLmj5DnjrDotLnnjociKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3NiB0ciIgfSwgW2UuX3YoIuaTjeS9nCIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICBdLAogICAgICBJcyA9IHsKICAgICAgICBuYW1lOiAiYWNlaXRlIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBpc0FjdGl2ZTogMCwKICAgICAgICAgICAgdGFiTGlzdDogW3sgdGl0bGU6ICJDTlnmib/lhZEiIH0sIHsgdGl0bGU6ICLomZrmi5/otKfluIHmib/lhZEiIH1dLAogICAgICAgICAgICB0YWIyTGlzdDogW3sgdGl0bGU6ICLlhYXluIHorrDlvZUiIH0sIHsgdGl0bGU6ICLmj5DluIHorrDlvZUiIH1dLAogICAgICAgICAgICBvcGVyYXRvckxpc3Q6IFt7IG5hbWU6ICLlhYXlgLwiIH0sIHsgbmFtZTogIuaPkOeOsCIgfV0sCiAgICAgICAgICAgIGFjZWl0ZUxpc3Q6IFtdLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuaW5pdCgpOwogICAgICAgIH0sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICh0aGlzLmFkZHJlc3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWRkcmVzcyIpIHx8ICIiKSwKICAgICAgICAgICAgICAiIiAhPSB0aGlzLmFkZHJlc3MgJiYKICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoeyB1cmw6ICIvYXBpL2FjY2VwdG9yL2xpc3QiLCBtZXRob2Q6ICJnZXQiIH0pCiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoaSksCiAgICAgICAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmIChlLmFjZWl0ZUxpc3QgPSB0LmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIGdvdG86IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsKICAgICAgICAgICAgICBuYW1lOiAicmVjaGFyZ2VNb25leSIsCiAgICAgICAgICAgICAgcXVlcnk6IHsgaWQ6IGUsIGN1cnJlbnQ6IHQgfSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ29SZWNvcmQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImNoYXJnZVJlY29yZCIsIHF1ZXJ5OiB7IGN1cnJlbnQ6IGUgfSB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgQnMgPSBJcywKICAgICAgTnMgPSAoYSgiOGI1OSIpLCBPYmplY3QoaFsiYSJdKShCcywgUHMsIFRzLCAhMSwgbnVsbCwgIjJiOTUxOTg4IiwgbnVsbCkpLAogICAgICBGcyA9IE5zLmV4cG9ydHMsCiAgICAgIExzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtbWFpbiBhY2NvdW50RW50cnVzdCIgfSwgWwogICAgICAgICAgZS5fbSgwKSwKICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IiB9LCBbCiAgICAgICAgICAgIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250YWluZXIiIH0sIFsKICAgICAgICAgICAgICBlLl9tKDEpLAogICAgICAgICAgICAgIGkoCiAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxpc3QtaXRlbSBmQ29sb3IxIGZ0MTIgIiB9LAogICAgICAgICAgICAgICAgZS5fbChlLmFjZWl0ZUxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBpKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJjbGVhciIgfSwgWwogICAgICAgICAgICAgICAgICAgIGkoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzMwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jaXR5X25hbWUpICsgIiAiICsgZS5fcyh0LmRpc3RyaWN0X25hbWUpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHczMCIgfSwgW2UuX3YoZS5fcyh0LnBob25lKSldKSwKICAgICAgICAgICAgICAgICAgICBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHczMCB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudGltZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5hY2VpdGVMaXN0Lmxlbmd0aCA+IDAsCiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYWNlaXRlTGlzdC5sZW5ndGg+MCIsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJtb3JlIHRjIGZ0MTIiLAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nZXRtb3JlIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLm1vcmUpKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgaSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuaXNSZWdpb24sCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImlzUmVnaW9uIiwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm5vX2RhdGEgdGMiLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgaSgiaW1nIiwgeyBhdHRyczogeyBzcmM6IGEoIjk0ODUiKSwgYWx0OiAiIiB9IH0pLAogICAgICAgICAgICAgICAgaSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTgiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdigi5L2g5LiN5piv5Yy65Z+f5Luj55CGLOaXoOadg+aTjeS9nCIpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXQogICAgICAgICAgICApLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgICRzID0gWwogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQtdG9wIGZDb2xvcjIiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsIiB9LCBbCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRpdGxlIGZ0MTYiIH0sIFsKICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi5Yy65Z+f5Luj55CGIildKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgY2xlYXIgIiB9LCBbCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHczMCIgfSwgW2UuX3YoIuWcsOWMuiIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHczMCIgfSwgW2UuX3YoIuiBlOezu+aWueW8jyIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHczMCB0YyIgfSwgW2UuX3YoIuaXtumXtCIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICBdLAogICAgICBNcyA9IHsKICAgICAgICBuYW1lOiAiYWNlaXRlIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBpc1JlZ2lvbjogITEsIGFjZWl0ZUxpc3Q6IFtdLCBtb3JlOiAi5Yqg6L295pu05aSaIiwgcGFnZTogMSB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ2V0RGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvdXNlci9yZWdpb25fdXNlcnM/cGFnZT0iICsgZS5wYWdlLAogICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBlLnRva2VuIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgPyB0LmRhdGEubWVzc2FnZS5kYXRhLmxlbmd0aCA+IDAKICAgICAgICAgICAgICAgICAgICA/IChlLmFjZWl0ZUxpc3QgPSBlLmFjZWl0ZUxpc3QuY29uY2F0KHQuZGF0YS5tZXNzYWdlLmRhdGEpKQogICAgICAgICAgICAgICAgICAgIDogKGUubW9yZSA9ICLmsqHmnInmm7TlpJrmlbDmja7kuoYuLi4iKQogICAgICAgICAgICAgICAgICA6IChlLmlzUmVnaW9uID0gITApOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRtb3JlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMucGFnZSsrLCB0aGlzLmdldERhdGEoKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmdldERhdGEoKTsKICAgICAgICB9LAogICAgICB9LAogICAgICBFcyA9IE1zLAogICAgICBWcyA9IChhKCJmMWVlIiksIE9iamVjdChoWyJhIl0pKEVzLCBMcywgJHMsICExLCBudWxsLCAiNzgwYjUyZjAiLCBudWxsKSksCiAgICAgIERzID0gVnMuZXhwb3J0cywKICAgICAgUnMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1tYWluIiB9LCBbCiAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJiYWNrLW5hdiBmQ29sb3IxIGZ0MjAiIH0sIFsKICAgICAgICAgICAgICBlLl92KCIg5YWF5biB5o+Q5biB6K6w5b2VICIpLAogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZnIgZkNvbG9yMiBtb3VzZURlZmF1bHQiLAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5nb0JhY2sgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdigiPDzov5Tlm54iKV0KICAgICAgICAgICAgICApLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm5hdi1hZnRlciIgfSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhY2NvdW50LXRpdGxlIG1vdXNlRGVmYXVsdCIsCiAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgInBhZGRpbmctbGVmdCI6ICIzMHB4IiB9LAogICAgICAgICAgICB9LAogICAgICAgICAgICBlLl9sKGUud2F5TGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBpID09IGUuY3VycmVudCB9LAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2hhbmdlV2F5KGksIHQud2F5KTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC50aXRsZSkpXQogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAwCiAgICAgICAgICApLAogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRhaW5lciIgfSwgWwogICAgICAgICAgICAgIGUuX20oMCksCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibGlzdC1pdGVtIGZDb2xvcjEgZnQxMiIgfSwKICAgICAgICAgICAgICAgIGUuX2woZS5jb2luTGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImNsZWFyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lm1vbmV5KSArICIgQ05ZIiksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmRlYWxfYWNjb3VudCkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5hY2NlcHRvcl9uYW1lKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0Lmhlc19hY2NvdW50KSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgImJhbmsiID09IHQud2F5CiAgICAgICAgICAgICAgICAgICAgICA/IGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigi6ZO26KGMIildKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgImFsaV9wYXkiID09IHQud2F5CiAgICAgICAgICAgICAgICAgICAgICA/IGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigi5pSv5LuY5a6dIildKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgIndlX2NoYXQiID09IHQud2F5CiAgICAgICAgICAgICAgICAgICAgICA/IGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigi5b6u5L+hIildKQogICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgMCA9PSB0LmlzX3N1cmUKICAgICAgICAgICAgICAgICAgICAgID8gYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTAgZ3JlZW4iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLnrYnlvoXmib/lhZHllYbnoa7orqQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgIDEgPT0gdC5pc19zdXJlCiAgICAgICAgICAgICAgICAgICAgICA/IGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIGdyZWVuIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigi5bey56Gu6K6kIiksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAyID09IHQuaXNfc3VyZQogICAgICAgICAgICAgICAgICAgICAgPyBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsIHcxMCByZWQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLlt7Lmi5Lnu50iKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzE4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jcmVhdGVfdGltZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIHQuaXNfc3VyZSA+IDAKICAgICAgICAgICAgICAgICAgICAgID8gYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTggY3VyUGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQudXBkYXRlX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIFVzID0gWwogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdC10aXRsZSBmQ29sb3IyIGZ0MTIgY2xlYXIiIH0sIFsKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigi5Lqk5piT6YeR6aKdIildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdigi5Lqk5piT6LSm5Y+3IildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigi5om/5YWR5ZWGIildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEyIiB9LCBbZS5fdigi5om/5YWR5ZWG5Lqk5piT6LSm5Y+3IildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwIiB9LCBbZS5fdigi5Lqk5piT5pa55byPIildKSwKICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiZmwgdzEwICIgfSwgW2UuX3YoIueKtuaAgSIpXSksCiAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsIHcxOCAiIH0sIFtlLl92KCLmib/lhZHml7bpl7QiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbCB3MTggIiB9LCBbZS5fdigi56Gu6K6k5pe26Ze0IildKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIE9zID0gewogICAgICAgIG5hbWU6ICJyZWNoYXJnZSIsCiAgICAgICAgY29tcG9uZW50czogeyBpbmRleEhlYWRlcjogQSwgbGVmdDogbm4gfSwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBhZGRyZXNzOiAiIiwKICAgICAgICAgICAgY3VycmVudDogMCwKICAgICAgICAgICAgd2F5OiAiYnV5IiwKICAgICAgICAgICAgd2F5TGlzdDogWwogICAgICAgICAgICAgIHsgdGl0bGU6ICLlhYXluIHorrDlvZUiLCB3YXk6ICJidXkiIH0sCiAgICAgICAgICAgICAgeyB0aXRsZTogIuaPkOW4geiusOW9lSIsIHdheTogInNlbGwiIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGNvaW5MaXN0OiBbXSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy5hZGRyZXNzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImFkZHJlc3MiKSB8fCAiIiksCiAgICAgICAgICAgICh0aGlzLmN1cnJlbnQgPSB0aGlzLiRyb3V0ZS5xdWVyeS5jdXJyZW50KTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGNoYW5nZVdheTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgKHRoaXMuY3VycmVudCA9IGUpLCAodGhpcy53YXkgPSB0KSwgdGhpcy5nZXRSZWNvcmQoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnb0JhY2s6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRSZWNvcmQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAiIiAhPSB0aGlzLmFkZHJlc3MgJiYKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDoKICAgICAgICAgICAgICAgICAgIi9hcGkvYWNjZXB0b3IvbXlfZGVhbD9hZGRyZXNzPSIgKwogICAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3MgKwogICAgICAgICAgICAgICAgICAiJnR5cGU9IiArCiAgICAgICAgICAgICAgICAgIHRoaXMud2F5LAogICAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgKHQgPSB0LmRhdGEpLCAib2siID09PSB0LnR5cGUgJiYgKGUuY29pbkxpc3QgPSB0Lm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuZ2V0UmVjb3JkKCk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgV3MgPSBPcywKICAgICAganMgPSAoYSgiNzVlZSIpLCBPYmplY3QoaFsiYSJdKShXcywgUnMsIFVzLCAhMSwgbnVsbCwgIjZlNzFiNmRjIiwgbnVsbCkpLAogICAgICBxcyA9IGpzLmV4cG9ydHMsCiAgICAgIEdzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICJkaXYiLAogICAgICAgICAgeyBzdGF0aWNDbGFzczogImJveCIgfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiaW5kZXhIZWFkZXIiKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnQiIH0sIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidG9wY29udGVudCBmdDIwIGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY1N0eWxlOiB7IHdpZHRoOiAiMTIwMHB4IiwgbWFyZ2luOiAiMCBhdXRvIiB9IH0sCiAgICAgICAgICAgICAgICAgIFthKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmFzc2V0cyIpKSldKV0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjEyMDBweCIsIG1hcmdpbjogIjAgYXV0byIgfSB9LCBbCiAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxlZnRjb250ZW50IGNvbnRlbnRCSyIgfSwKICAgICAgICAgICAgICAgICAgW2EoImxlZnQiKV0sCiAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInJpZ2h0Y29udGVudCBjb250ZW50QksiIH0sCiAgICAgICAgICAgICAgICAgIFthKCJyb3V0ZXItdmlldyIpXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImluZGV4Rm9vdGVyIiksCiAgICAgICAgICBdLAogICAgICAgICAgMQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIFpzID0gW10sCiAgICAgIFFzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImxlZnROYXYgZnQxNCIgfSwgWwogICAgICAgICAgYSgKICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sCiAgICAgICAgICAgIGUuX2woZS5hcnJheSwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGtleTogaSwKICAgICAgICAgICAgICAgICAgY2xhc3M6IGkgPT0gZS5jdXJBY3RpdmUgPyAiYWN0aXZlIiA6ICIiLAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZ290byhpLCB0LnBhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICBhKCJpIiwgeyBzdGF0aWNDbGFzczogImljb25mb250IG1yMTAiLCBjbGFzczogdC5pY29uIH0pLAogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LnRleHQpKV0pLAogICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAwCiAgICAgICAgICApLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBIcyA9IFtdLAogICAgICBLcyA9IHsKICAgICAgICBuYW1lOiAibGVmdF9hY2NvdW50IiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBjdXJBY3RpdmU6IDAsCiAgICAgICAgICAgIGFycmF5OiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3JjMTogYSgiZjBhYiIpLAogICAgICAgICAgICAgICAgc3JjMjogYSgiMzJiYSIpLAogICAgICAgICAgICAgICAgdGV4dDogdGhpcy4kdCgiYWNjb3VudC5sZXRyYW5zYWN0aW9uIiksCiAgICAgICAgICAgICAgICBpY29uOiAiaWNvbi1xdWt1YWlsaWFuIiwKICAgICAgICAgICAgICAgIHBhZ2U6ICJsZXRyYW5zYWN0aW9ucyIsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogWyJsZXRyYW5zYWN0aW9ucyJdLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3JjMTogYSgiZjBhYiIpLAogICAgICAgICAgICAgICAgc3JjMjogYSgiMzJiYSIpLAogICAgICAgICAgICAgICAgdGV4dDogdGhpcy4kdCgiYWNjb3VudC50YWNjb3VudCIpLAogICAgICAgICAgICAgICAgaWNvbjogImljb24tcXVrdWFpbGlhbiIsCiAgICAgICAgICAgICAgICBwYWdlOiAiZmluYW5jZSIsCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogWyJmaW5hbmNlIl0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcmMxOiBhKCJmMGFiIiksCiAgICAgICAgICAgICAgICBzcmMyOiBhKCIzMmJhIiksCiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLiR0KCJ1c2VyY2VudGVyLmNoYW5nZSIpLAogICAgICAgICAgICAgICAgaWNvbjogImljb24tYmliaWppYW95aSIsCiAgICAgICAgICAgICAgICBwYWdlOiAiY2hhbmdlIiwKICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbImNoYW5nZSJdLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3JjMTogYSgiY2E1ZSIpLAogICAgICAgICAgICAgICAgc3JjMjogYSgiMmE0MCIpLAogICAgICAgICAgICAgICAgdGV4dDogdGhpcy4kdCgiYWNjb3VudC50cmFuc2ZlciIpLAogICAgICAgICAgICAgICAgaWNvbjogImljb24taHVhemh1YW4iLAogICAgICAgICAgICAgICAgcGFnZTogInRyYW5zZmVyTGVnYWwiLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IFsidHJhbnNmZXJMZWdhbCJdLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLiRyb3V0ZS5uYW1lOwogICAgICAgICAgdGhpcy5jdXJBY3RpdmUgPSB0aGlzLmFycmF5LmZpbmRJbmRleChmdW5jdGlvbiAodCkgewogICAgICAgICAgICByZXR1cm4gdC5wYWdlID09PSBlIHx8ICh0LmNoaWxkcmVuICYmIHQuY2hpbGRyZW4uaW5jbHVkZXMoZSkpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICB0aGlzLmJ1cy4kb24oIm5hdl9uYW1lIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgZS5jdXJBY3RpdmUgPSBlLmFycmF5LmZpbmRJbmRleChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHJldHVybiBlLnBhZ2UgPT09IHQgfHwgKGUuY2hpbGRyZW4gJiYgZS5jaGlsZHJlbi5pbmNsdWRlcyh0KSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBnb3RvOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAodGhpcy5jdXJBY3RpdmUgPSBlKSwKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6IHQsIHBhcmFtczogeyBsYW5nOiB0aGlzLmxhbmcgfSB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgSnMgPSBLcywKICAgICAgWXMgPSAoYSgiNWE4MSIpLCBPYmplY3QoaFsiYSJdKShKcywgUXMsIEhzLCAhMSwgbnVsbCwgImQ0MjQxMTQ2IiwgbnVsbCkpLAogICAgICBYcyA9IFlzLmV4cG9ydHMsCiAgICAgIGVvID0gewogICAgICAgIG5hbWU6ICJhY2NvdW50IiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBsYW5nOiAiIiwgY3VycmVudEluZGV4OiAwIH07CiAgICAgICAgfSwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBsZWZ0OiBYcywgaW5kZXhGb290ZXI6IEsgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgfSwKICAgICAgdG8gPSBlbywKICAgICAgYW8gPSAoYSgiNjI4OCIpLCBPYmplY3QoaFsiYSJdKSh0bywgR3MsIFpzLCAhMSwgbnVsbCwgIjFiYjA3NjY3IiwgbnVsbCkpLAogICAgICBubyA9IGFvLmV4cG9ydHMsCiAgICAgIHNvID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2Iiwge30sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJoZWFkZXIgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsIiB9LCBbCiAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImFjY291bnQudG90YWxhc3NldHMiKSkgKyAi77yaICIpLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYXNzZXRfbnVtIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigidG9GaXhlZHMiKShlLnRvdGxlKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYXNzZXRfbmFtZSIgfSwgW2UuX3YoIiBVU0RUIildKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnIgcmlnaHRfdGV4dCIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYWRkcmVzcyBoaWRlIiwKICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUud2l0aGRyYXdfYWRkcmVzcyB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC51cGFkZHJlc3MiKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudCBmQ29sb3IxIGZ0MTIiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnRfdG9wIGZsZXggYWxjZW50ZXIgZkNvbG9yMiIgfSwgWwogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJtYXJrZXQuY3VycmVuY3kiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgYSgiaSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuYXZhaWxhYmxlIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5mcmVlemVzIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jb252ZXJzaW9uIikpICsgIihVU0RUKSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFtlLl92KGUuX3MoZS4kdCgiZG8iKSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvbnRlbnRfdWwiIH0sCiAgICAgICAgICAgICAgZS5fbChlLmFzc2V0X2xpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMSA9PSB0LmlzX2xlZ2FsICYmIDEgPT0gdC5pc19sZXZlcgogICAgICAgICAgICAgICAgICA/IGEoImxpIiwgeyBrZXk6IGkgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50X2xpIGZsZXggYWxjZW50ZXIgYmV0d2VlbiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmN1cnJlbmN5X25hbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuX2YoInRvRml4ZWRzIikodC5sZXZlcl9iYWxhbmNlIHx8ICIwLjAwIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9GaXhlZHMiKSh0LmxvY2tfbGV2ZXJfYmFsYW5jZSB8fCAiMC4wMCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC51c2R0X3ByaWNlICogdC5sZXZlcl9iYWxhbmNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIG9wZXJhdGlvbiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50cmFuc0luKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInRyYW5zaW4iKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudHJhbnNPdXQoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgidHJhbnNvdXQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucmVjKGksIHQuY3VycmVuY3kpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQucmVjb3JkIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBpID09IGUuYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImhpZGVfZGl2IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jZ2FkZHJlc3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIm10NTAgbWI1MCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZ0MTggZkNvbG9yMSBleGNoYXJnZV9hZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGJnOiBlLmZsYWdzIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuZXhjaGFyZ2VfYWRkcmVzcykpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImNvcHkgZnQxNCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogImNvcHkiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5jb3B5IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQuY29weSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZXdtX3dyYXAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImV3bSBmdDE0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuc2hvd19ld20gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQuY29kZSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImV3bV9pbWciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgaGlkZTogZS5pc0hpZGUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiAiY29kZSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBmQ29sb3IyIG1iNTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImFjY291bnQudmlldyIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZXhjaGFyZ2VfcmVjb3JkIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQuY2hhcnJlY29yZCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5mc3RhdXMiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgZkNvbG9yMiBtYjE1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50Lm5vdGljZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfdWwgZnQxMiBmQ29sb3IyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5hMSIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQuY3VycmVuY3lfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50LmEyIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV0aCIgPT0gdC5jdXJyZW5jeV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC5hNCIpKSArICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImJ0YyIgPT0gdC5jdXJyZW5jeV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC5hOSIpKSArICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImVyYzIwIiA9PSB0LmN1cnJlbmN5X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZS5fcyhlLiR0KCJhY2NvdW50LmE0IikpICsgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAib21uaSIgPT0gdC5jdXJyZW5jeV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgVVNEVCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5hMyIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICBpID09IGUuYWN0aXZlMDEKICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaGlkZV9kaXYiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDEyIG1iMTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQuY2hhZGRyZXNzIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJhZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImFkZHJlc3NfaW5wIGZDb2xvcjEgbWIzMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHBsYWNlaG9sZGVyOiBlLnRpYmlfbXNnLCB0eXBlOiAidGV4dCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuYWRkcmVzcyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmFkZHJlc3MgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZkNvbG9yMiBmdDEyIG1iMTUgZmxleCBiZXR3ZWVuIGFsY2VudGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoIm51bWJlciIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZS5fcyhlLiR0KCJjZW50ZXIuYXZhaWxhYmxlIikpICsgIu+8miAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ1c2VfbnVtIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvRml4ZWRzIikoZS5iYWxhbmNlIHx8ICIwLjAwIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLmNvaW5uYW1lKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAibnVtX2xhYiBmbGV4IGJldHdlZW4gbWIzMCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUubnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjb2xvcjogIndoaXRlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS5taW5fbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLm51bWJlciB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5udW1iZXIgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuY29pbm5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggbWI1MCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGVmdF9pbnBfd3JhcCBmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDEyIG1iMTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoInJhdGUiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLnJhdGVudW0pICsgIiUiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmFuZ2VfbGFiIGZsZXggYWxjZW50ZXIgYmV0d2VlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLm51bWJlciAqIGUucmF0ZW51bSkgLyAxMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmNvaW5uYW1lKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAicmlnaHRfaW5wX3dyYXAgZmxleDEiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJtYjE1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQuaGF2ZW51bSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0X2xhYiBmbGV4IGFsY2VudGVyIGJldHdlZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9GaXhlZHMiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUubnVtYmVyIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUubnVtYmVyICogZS5yYXRlbnVtKSAvIDEwMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLmNvaW5uYW1lKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBmQ29sb3IyIG1iMTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50Lm5vdGljZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc191bCBmdDEyIGZDb2xvcjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50Lm1pbm51bSIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIu+8miIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5taW5fbnVtYmVyX3R4dCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jb2lubmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLjgIIiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQub25jZW1heG51bSIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIu+8miIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5tYXhfbnVtYmVyKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmNvaW5uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuOAgiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5kYXludW0iKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5kYXlfbGltaXQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY29pbm5hbWUpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX2xpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQuY2FsbCIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ3aXRoZHJhd19idG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5tZW50aW9uIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LndpdGhkcmF3IikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgaSA9PSBlLmFjdGl2ZTAyCiAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImhpZGVfZGl2IHJlYy1ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWMtY29uIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWMtdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoInRpbWUiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInJlYy1saXN0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5yZWNEYXRhLCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImxpIiwgeyBrZXk6IGkgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKHQudmFsdWUgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKHQuY3JlYXRlZF90aW1lKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJtb3JlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLm1vcmVEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLm1vcmUpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgIDogZS5fZSgpOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIDAKICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgICAgYSgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIG5hbWU6ICJzaG93IiwKICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtc2hvdyIsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnRyYW5zZmVyRGF0YS5tb2RhbFNob3csCiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJ0cmFuc2ZlckRhdGEubW9kYWxTaG93IiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRyYW5zZmVyLW1vZGFsIGZsZXgiLAogICAgICAgICAgICB9LAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRyYW5zZmVyLW1hc2siIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0cmFuc2Zlci1oZWFkZXIiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiaDMiLCBbZS5fdihlLl9zKGUuJHQoImFjY291bnQudHJhbnNmZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNsb3NlcygpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KCJYIildCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0cmFuc2Zlci1jb250ZW50IiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMuY3VycmVuY3kiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFtlLl92KGUuX3MoZS50cmFuc2ZlckRhdGEudHJhbnNmZXJOYW1lKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZW50ZXIuYXZhaWxhYmxlIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2ZjLmJhbGFuY2UiKSkKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFtlLl92KGUuX3MoZS50cmFuc2ZlckRhdGEudHJhbnNmZXJCYWxhbmNlKSldKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoIuS7jiIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QiLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnRyYW5zZmVyRGF0YS5zdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJ0cmFuc2ZlckRhdGEuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHQudGFyZ2V0Lm9wdGlvbnMsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc2VsZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9ICJfdmFsdWUiIGluIGUgPyBlLl92YWx1ZSA6IGUudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRyYW5zZmVyRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQubXVsdGlwbGUgPyBhIDogYVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5iYWxhbmNlTGlzdCwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoIm9wdGlvbiIsIHsgZG9tUHJvcHM6IHsgdmFsdWU6IHQgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuJHQoInRvIikpKV0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0IiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50cmFuc2ZlckRhdGEuZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInRyYW5zZmVyRGF0YS5lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHQudGFyZ2V0Lm9wdGlvbnMsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuc2VsZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9ICJfdmFsdWUiIGluIGUgPyBlLl92YWx1ZSA6IGUudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRyYW5zZmVyRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0Lm11bHRpcGxlID8gYSA6IGFbMF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUuYmFsYW5jZUxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJvcHRpb24iLCB7IGRvbVByb3BzOiB7IHZhbHVlOiB0IH0gfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0KSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLiR0KCJjb3VudC5odWFudW0iKSkpXSksCiAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAidGV4dCIsIHBsYWNlaG9sZGVyOiAiJHQoJ2xheS5odWFudW0nKSIgfSwKICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXQogICAgICAgICAgKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgb28gPSBbXSwKICAgICAgcm8gPQogICAgICAgIChhKCI1NDc4IiksCiAgICAgICAgewogICAgICAgICAgbmFtZTogImZpbmFuY2UiLAogICAgICAgICAgZmlsdGVyczogewogICAgICAgICAgICB0b0ZpeGVkczogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoOCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHRvdGxlOiAiIiwKICAgICAgICAgICAgICByZWNEYXRhOiBbXSwKICAgICAgICAgICAgICB0b2tlbjogIiIsCiAgICAgICAgICAgICAgZmxhZ3M6ICExLAogICAgICAgICAgICAgIGZsYWc6ICExLAogICAgICAgICAgICAgIGlzSGlkZTogITAsCiAgICAgICAgICAgICAgYWN0aXZlOiAiYSIsCiAgICAgICAgICAgICAgYWN0aXZlMDE6ICJhIiwKICAgICAgICAgICAgICB0aWJpX21zZzogdGhpcy4kdCgiYWNjb3VudC50aWJpIiksCiAgICAgICAgICAgICAgYWN0aXZlMDI6ICJhIiwKICAgICAgICAgICAgICBhZGRyOiAiIiwKICAgICAgICAgICAgICB1cmw6ICIiLAogICAgICAgICAgICAgIGV4Y2hhcmdlX2FkZHJlc3M6ICIiLAogICAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICAgIG51bWJlcjogIiIsCiAgICAgICAgICAgICAgcmF0ZTogIiIsCiAgICAgICAgICAgICAgY29pbm5hbWU6ICIiLAogICAgICAgICAgICAgIGJhbGFuY2U6ICIiLAogICAgICAgICAgICAgIHJhdGVudW06ICIiLAogICAgICAgICAgICAgIHJlYWNobnVtOiAiIiwKICAgICAgICAgICAgICBtaW5fbnVtYmVyOiAiIiwKICAgICAgICAgICAgICBtaW5fbnVtYmVyX3R4dDogIiIsCiAgICAgICAgICAgICAgY3VycmVuY3k6ICIiLAogICAgICAgICAgICAgIGFzc2V0X2xpc3Q6IFtdLAogICAgICAgICAgICAgIHRpcF9saXN0OiBbCiAgICAgICAgICAgICAgICB0aGlzLiR0KCJhY2NvdW50LmExIikgKyAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEyIiksCiAgICAgICAgICAgICAgICAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEzIiksCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICB0aXBfbGlzdDAxOiBbCiAgICAgICAgICAgICAgICB0aGlzLiR0KCJhY2NvdW50LmExIikgKyAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEyIiksCiAgICAgICAgICAgICAgICAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEzIiksCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICAgIG1vcmU6IHRoaXMuJHQoIm1vcmUiKSwKICAgICAgICAgICAgICBiYWxhbmNlTGlzdDogWwogICAgICAgICAgICAgICAgdGhpcy4kdCgiYWNjb3VudC5sYWNjb3VudCIpLAogICAgICAgICAgICAgICAgdGhpcy4kdCgidXNlcmNlbnRlci5sZXZlciIpLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgdHJhbnNmZXJEYXRhOiB7CiAgICAgICAgICAgICAgICBtb2RhbFNob3c6ICExLAogICAgICAgICAgICAgICAgdHJhbnNmZXJOYW1lOiAiIiwKICAgICAgICAgICAgICAgIHRyYW5zZmVyQmFsYW5jZTogIiIsCiAgICAgICAgICAgICAgICBzdGFydDogIiIsCiAgICAgICAgICAgICAgICBlbmQ6ICIiLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgc3RhdHVzOiAiIiwKICAgICAgICAgICAgICBjaGFuZ2VCYWxhbmNlOiBbXSwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBsZWZ0OiBubiB9LAogICAgICAgICAgbWV0aG9kczogewogICAgICAgICAgICB0cmFuc0luOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICAgIGEgPSB0aGlzOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7CiAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmNoYW5nZUJhbGFuY2UuZmlsdGVyKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0LmN1cnJlbmN5ID09PSBhLmFzc2V0X2xpc3RbZV0uY3VycmVuY3k7CiAgICAgICAgICAgICAgICB9KVswXSwKICAgICAgICAgICAgICAgIG4gPSB0aGlzLiR0KCJjZW50ZXIuYXZhaWxhYmxlIik7CiAgICAgICAgICAgICAgdGhpcy4kcHJvbXB0KAogICAgICAgICAgICAgICAgIiIKICAgICAgICAgICAgICAgICAgLmNvbmNhdChpLmN1cnJlbmN5X25hbWUsICIgIikKICAgICAgICAgICAgICAgICAgLmNvbmNhdChuLCAiICIpCiAgICAgICAgICAgICAgICAgIC5jb25jYXQoaS5jaGFuZ2VfYmFsYW5jZSwgIiAiKSwKICAgICAgICAgICAgICAgIHRoaXMuJHQoInRyYW5zZmVyRnJvbUNoYW5nZSIpLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy4kdCgidHJhbnNmZXJGcm9tQ2hhbmdlIiksCiAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuJHQoImxlZ2FsLmNlaWwiKSwKICAgICAgICAgICAgICAgICAgaW5wdXRQbGFjZWhvbGRlcjogdGhpcy4kdCgiYWNjb3VudC5odWFudW0iKSwKICAgICAgICAgICAgICAgICAgaW5wdXRUeXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgY2xvc2VPbkNsaWNrTW9kYWw6ICExLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBuID0gZS52YWx1ZTsKICAgICAgICAgICAgICAgICAgYS4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICBudW1iZXI6IG4sCiAgICAgICAgICAgICAgICAgICAgICBmcm9tX2ZpZWxkOiAiY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgICAgIHRvX2ZpZWxkOiAibGV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IGkuY3VycmVuY3ksCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKGEuZ2V0ZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICB0LiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2xvc2U6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGEuJHQoInRyYW5zZmVyT2siKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdHJhbnNPdXQ6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgICAgYSA9IHRoaXMsCiAgICAgICAgICAgICAgICBpID0gdGhpcy5hc3NldF9saXN0W2VdLAogICAgICAgICAgICAgICAgbiA9IHRoaXMuJHQoImNlbnRlci5hdmFpbGFibGUiKTsKICAgICAgICAgICAgICB0aGlzLiRwcm9tcHQoCiAgICAgICAgICAgICAgICAiIgogICAgICAgICAgICAgICAgICAuY29uY2F0KGkuY3VycmVuY3lfbmFtZSwgIiAiKQogICAgICAgICAgICAgICAgICAuY29uY2F0KG4sICIgIikKICAgICAgICAgICAgICAgICAgLmNvbmNhdChpLmxldmVyX2JhbGFuY2UsICIgIiksCiAgICAgICAgICAgICAgICB0aGlzLiR0KCJ0cmFuc2ZlckNoYW5nZSIpLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy4kdCgidHJhbnNmZXJDaGFuZ2UiKSwKICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy4kdCgibGVnYWwuY2VpbCIpLAogICAgICAgICAgICAgICAgICBpbnB1dFBsYWNlaG9sZGVyOiB0aGlzLiR0KCJhY2NvdW50Lmh1YW51bSIpLAogICAgICAgICAgICAgICAgICBpbnB1dFR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgICBjbG9zZU9uQ2xpY2tNb2RhbDogITEsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIG4gPSBlLnZhbHVlOwogICAgICAgICAgICAgICAgICBhLiRodHRwKHsKICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9jaGFuZ2UiLAogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICAgIG51bWJlcjogbiwKICAgICAgICAgICAgICAgICAgICAgIGZyb21fZmllbGQ6ICJsZXZlciIsCiAgICAgICAgICAgICAgICAgICAgICB0b19maWVsZDogImNoYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeV9pZDogaS5jdXJyZW5jeSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoYS5nZXRkYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHQuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDbG9zZTogITAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYS4kdCgidHJhbnNmZXJPayIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnb1JlY29yZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImNvaW5SZWNvcmQiIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgICAgdCA9IG5ldyBDbGlwYm9hcmQoIi5jb3B5Iik7CiAgICAgICAgICAgICAgdC5vbigic3VjY2VzcyIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBsYXllci5hbGVydChlLiR0KCJsYXkuY29weXMiKSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICB0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIGFsZXJ0KGUuJHQoImxheS5mY29weSIpKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBleGNoYXJnZTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICAxID09IHRoaXMuc3RhdHVzCiAgICAgICAgICAgICAgICA/ICgodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgICB0aGlzLmZsYWcKICAgICAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAxID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gZSksCiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpLAogICAgICAgICAgICAgICAgICB0aGlzLnNlbmREYXRhKHQpKQogICAgICAgICAgICAgICAgOiBsYXllci5hbGVydCh0aGlzLiR0KCJub3RvcGVuIikpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZW5kRGF0YTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9nZXRfaW5fYWRkcmVzcyIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUgfSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdC50b2tlbiB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICAgKCh0LmV4Y2hhcmdlX2FkZHJlc3MgPSBlLmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgJCgiI2NvZGUiKS5xcmNvZGUoewogICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCwKICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLAogICAgICAgICAgICAgICAgICAgICAgdGV4dDogZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICB3aXRoZHJhdzogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICAxID09IHRoaXMuc3RhdHVzCiAgICAgICAgICAgICAgICA/ICgodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgICB0aGlzLmZsYWcKICAgICAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAxID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSBlKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpLAogICAgICAgICAgICAgICAgICB0aGlzLmdldE51bSh0KSkKICAgICAgICAgICAgICAgIDogbGF5ZXIuYWxlcnQodGhpcy4kdCgibm90b3BlbiIpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVjOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgICAodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgKHRoaXMucmVjRGF0YSA9IFtdKSwKICAgICAgICAgICAgICAgIHRoaXMuZmxhZwogICAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgICAgOiAoKHRoaXMuZmxhZyA9ICEwKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9IGUpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB0eXBlOiAiMyIsIGN1cnJlbmN5OiB0LCBwYWdlOiAxIH0sCiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmIChhLnJlY0RhdGEgPSBlLmRhdGEubWVzc2FnZS5saXN0KTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGdldE51bTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICAgIHR5cGU6ICJQT1NUIiwKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2dldF9pbmZvIiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUgfSwKICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCiAgICAgICAgICAgICAgICBhc3luYzogITAsCiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBlLnNldFJlcXVlc3RIZWFkZXIoIkF1dGhvcml6YXRpb24iLCB0LnRva2VuKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAib2siID09IGUudHlwZSAmJgogICAgICAgICAgICAgICAgICAgICgodC5jb2lubmFtZSA9IGUubWVzc2FnZS5uYW1lKSwKICAgICAgICAgICAgICAgICAgICAodC5iYWxhbmNlID0gZS5tZXNzYWdlLmNoYW5nZV9iYWxhbmNlKSwKICAgICAgICAgICAgICAgICAgICAodC5taW5fbnVtYmVyID0KICAgICAgICAgICAgICAgICAgICAgIHQuJHQoImFjY291bnQubWlubnVtIikgKwogICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChlLm1lc3NhZ2UubWluX251bWJlcikudG9GaXhlZCgyKSArCiAgICAgICAgICAgICAgICAgICAgICAiICAgIiArCiAgICAgICAgICAgICAgICAgICAgICB0LiR0KCJhY2NvdW50Lm9uY2VtYXhudW0iKSArCiAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGUubWVzc2FnZS5tYXhfbnVtYmVyKS50b0ZpeGVkKDIpICsKICAgICAgICAgICAgICAgICAgICAgICIgICAiICsKICAgICAgICAgICAgICAgICAgICAgIHQuJHQoImFjY291bnQuZGF5bnVtIikgKwogICAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChlLm1lc3NhZ2UuZGF5X2xpbWl0KS50b0ZpeGVkKDIpKSwKICAgICAgICAgICAgICAgICAgICAodC5taW5fbnVtYmVyX3R4dCA9IHBhcnNlRmxvYXQoCiAgICAgICAgICAgICAgICAgICAgICBlLm1lc3NhZ2UubWluX251bWJlcgogICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKSksCiAgICAgICAgICAgICAgICAgICAgKHQubWlubnVtYmVyID0gZS5tZXNzYWdlLm1pbl9udW1iZXIpLAogICAgICAgICAgICAgICAgICAgICh0Lm1heF9udW1iZXIgPSBlLm1lc3NhZ2UubWF4X251bWJlciksCiAgICAgICAgICAgICAgICAgICAgKHQuZGF5X2xpbWl0ID0gZS5tZXNzYWdlLmRheV9saW1pdCksCiAgICAgICAgICAgICAgICAgICAgKHQucmF0ZW51bSA9IGUubWVzc2FnZS5yYXRlKSwKICAgICAgICAgICAgICAgICAgICAodC5yZWFjaG51bSA9IDApLAogICAgICAgICAgICAgICAgICAgICh0LnJhdGUgPSBlLm1lc3NhZ2UucmF0ZSkpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXhjaGFuZ2U6IGZ1bmN0aW9uICgpIHt9LAogICAgICAgICAgICBjb3B5OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgICAgdCA9IG5ldyBDbGlwYm9hcmQoIi5jb3B5IiwgewogICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZXhjaGFyZ2VfYWRkcmVzczsKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHQub24oInN1Y2Nlc3MiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgKGUuZmxhZ3MgPSAhMCksIGxheWVyLm1zZyhlLiR0KCJsYXkuY29weXMiKSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICB0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIChlLmZsYWdzID0gITEpLCBsYXllci5tc2coZS4kdCgibGF5LmZjb3B5IikpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlY29yZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImZpbmFucmVjIiB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgd2l0aGRyYXdfYWRkcmVzczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogIndpdGhkcmF3X2FkZHJlc3MiIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzaG93X2V3bTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuaXNIaWRlID8gKHRoaXMuaXNIaWRlID0gITEpIDogKHRoaXMuaXNIaWRlID0gITApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXRkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGlzdCIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBlLnRva2VuIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAoKGUuYXNzZXRfbGlzdCA9IHQuZGF0YS5tZXNzYWdlLmxldmVyX3dhbGxldC5iYWxhbmNlKSwKICAgICAgICAgICAgICAgICAgICAoZS50b3RsZSA9IHQuZGF0YS5tZXNzYWdlLmxldmVyX3dhbGxldC51c2R0X3RvdGxlKSwKICAgICAgICAgICAgICAgICAgICAoZS5zdGF0dXMgPSB0LmRhdGEubWVzc2FnZS5pc19vcGVuX0NUYmkpLAogICAgICAgICAgICAgICAgICAgIChlLmNoYW5nZUJhbGFuY2UgPSB0LmRhdGEubWVzc2FnZS5jaGFuZ2Vfd2FsbGV0LmJhbGFuY2UpKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbW9yZURhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICAgKGUucGFnZSA9IGUucGFnZSArIDEpLAogICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xlZ2FsX2xvZyIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB7IHR5cGU6ICIzIiwgY3VycmVuY3k6IGUuY3VycmVuY3ksIHBhZ2U6IGUucGFnZSB9LAogICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGUuYXNzZXRfbGlzdDsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGEpCiAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbmN5ID09IGFbaV0uY3VycmVuY3kgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKChlLmFjdGl2ZTAyID0gaSksCiAgICAgICAgICAgICAgICAgICAgICAgIHQuZGF0YS5tZXNzYWdlLmxpc3QubGVuZ3RoID4gMAogICAgICAgICAgICAgICAgICAgICAgICAgID8gKGUucmVjRGF0YSA9IGUucmVjRGF0YS5jb25jYXQodC5kYXRhLm1lc3NhZ2UubGlzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZS5tb3JlID0gZS4kdCgibm9tb3JlIikpKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRyYW5zZmVyOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgICBhLnRyYW5zZmVyRGF0YS5tb2RhbFNob3cgPSAhMDsKICAgICAgICAgICAgfSwKICAgICAgICAgIH0sCiAgICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIjsKICAgICAgICAgIH0sCiAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS5nZXRkYXRhKCksIHRoaXMuaW5pdCgpOwogICAgICAgICAgfSwKICAgICAgICB9KSwKICAgICAgbG8gPSBybywKICAgICAgY28gPSAoYSgiZTBlOSIpLCBPYmplY3QoaFsiYSJdKShsbywgc28sIG9vLCAhMSwgbnVsbCwgIjVhNzAxOGU1IiwgbnVsbCkpLAogICAgICB1byA9IGNvLmV4cG9ydHMsCiAgICAgIG1vID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2Iiwge30sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInJlY29yZCIsCiAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5saW5rKCk7CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LnJlY29yZCIpKSldCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgYSgicCIsIFtlLl92KCLku44iKV0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAidHJhZGUiIH0sIFtlLl92KGUuX3MoZS5uYW1lKSldKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjdXJzb3I6ICJwb2ludGVyIiB9LAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS50YWJDbGljayB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgidG8iKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJ0cmFkZSIgfSwgW2UuX3YoZS5fcyhlLmxldmVyTmFtZSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibnVtIiB9LCBbCiAgICAgICAgICAgICAgYSgicCIsIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5odWFudW0iKSkpXSksCiAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5pbnB1dFZhbHVlLAogICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJpbnB1dFZhbHVlIiwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAidGV4dCIsIHBsYWNlaG9sZGVyOiAi6K+36L6T5YWl5pyA5L2OMTAw55qE5YiS6L2s5pWw6YePIiB9LAogICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuaW5wdXRWYWx1ZSB9LAogICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLmlucHV0VmFsdWUgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkgKwogICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiY2ZjLmJhbGFuY2UiKSkgKwogICAgICAgICAgICAgICAgICAgICLvvJoiICsKICAgICAgICAgICAgICAgICAgICBlLl9zKGUuX2YoInRvRml4ZWRzIikoZS50b3RhbE1vbmV5IHx8ICIwLjAwIikpICsKICAgICAgICAgICAgICAgICAgICAiVVNEVCIKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29tZmlybS1idG4iLAogICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImJ1dHRvbiIgfSwKICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmNvbWZpcm0oKTsKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBbZS5fdigi56Gu6K6k5YiS6L2sIildCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgcG8gPSBbXSwKICAgICAgaG8gPSB7CiAgICAgICAgbmFtZTogInRyYW5zZmVyIiwKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICB0b0ZpeGVkczogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIG5hbWU6IHRoaXMuJHQoImFjY291bnQubGFjY291bnQiKSwKICAgICAgICAgICAgbGV2ZXJOYW1lOiB0aGlzLiR0KCJ1c2VyY2VudGVyLmxldmVyIiksCiAgICAgICAgICAgIHRvdGFsTW9uZXk6ICIiLAogICAgICAgICAgICBsZXZlck1vbmV5OiAiIiwKICAgICAgICAgICAgdHJhZGVNb25leTogIiIsCiAgICAgICAgICAgIHR5cGU6IDIsCiAgICAgICAgICAgIHRva2VuOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSwKICAgICAgICAgICAgaW5wdXRWYWx1ZTogIiIsCiAgICAgICAgICAgIGN1cnJlbmN5SWQ6ICIiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEsIGxlZnQ6IG5uIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBpZiAoIm9rIiA9PSB0LmRhdGEudHlwZSkgewogICAgICAgICAgICAgICAgICBmb3IgKAogICAgICAgICAgICAgICAgICAgIHZhciBhID0gdC5kYXRhLm1lc3NhZ2UubGVnYWxfd2FsbGV0LmJhbGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICBpID0gdC5kYXRhLm1lc3NhZ2UubGV2ZXJfd2FsbGV0LmJhbGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICBuID0gMDsKICAgICAgICAgICAgICAgICAgICBuIDwgYS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgbisrCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAiVVNEVCIgPT0gYVtuXS5jdXJyZW5jeV9uYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAoKGUudHJhZGVNb25leSA9IGFbbl0ubGVnYWxfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS50b3RhbE1vbmV5ID0gZS50cmFkZU1vbmV5KSwKICAgICAgICAgICAgICAgICAgICAgIChlLmN1cnJlbmN5SWQgPSBhW25dLmN1cnJlbmN5KSk7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSAwOyBzIDwgaS5sZW5ndGg7IHMrKykKICAgICAgICAgICAgICAgICAgICAiVVNEVCIgPT0gaVtzXS5jdXJyZW5jeV9uYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAoKGUubGV2ZXJNb25leSA9IGlbc10ubGV2ZXJfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5jdXJyZW5jeUlkID0gaVtzXS5jdXJyZW5jeSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICB0YWJDbGljazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIDEgPT0gZS50eXBlCiAgICAgICAgICAgICAgPyAoKGUudHlwZSA9IDIpLAogICAgICAgICAgICAgICAgKGUubmFtZSA9IHRoaXMuJHQoImFjY291bnQubGFjY291bnQiKSksCiAgICAgICAgICAgICAgICAoZS5sZXZlck5hbWUgPSB0aGlzLiR0KCJ1c2VyY2VudGVyLmxldmVyIikpLAogICAgICAgICAgICAgICAgKGUudG90YWxNb25leSA9IGUudHJhZGVNb25leSkpCiAgICAgICAgICAgICAgOiAoKGUudHlwZSA9IDEpLAogICAgICAgICAgICAgICAgKGUubmFtZSA9IHRoaXMuJHQoInVzZXJjZW50ZXIubGV2ZXIiKSksCiAgICAgICAgICAgICAgICAoZS5sZXZlck5hbWUgPSB0aGlzLiR0KCJhY2NvdW50LmxhY2NvdW50IikpLAogICAgICAgICAgICAgICAgKGUudG90YWxNb25leSA9IGUubGV2ZXJNb25leSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGNvbWZpcm06IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICByZXR1cm4gIiIgPT0gZS5pbnB1dFZhbHVlCiAgICAgICAgICAgICAgPyAobGF5ZXIubXNnKHRoaXMuJHQoImxheS5odWFudW0iKSksICExKQogICAgICAgICAgICAgIDogZS5pbnB1dFZhbHVlIDwgMTAwCiAgICAgICAgICAgICAgPyAobGF5ZXIubXNnKCLovpPlhaXnmoTliJLovazmlbDph4/kuI3og73kvY7kuo4xMDAiKSwgITEpCiAgICAgICAgICAgICAgOiB2b2lkIGxheWVyLmNvbmZpcm0oIuaYr+WQpuehruiupOWIkui9rO+8nyIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKHQpOwogICAgICAgICAgICAgICAgICB2YXIgYSA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgZS4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICBudW1iZXI6IGUuaW5wdXRWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBlLmN1cnJlbmN5SWQsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlLnR5cGUsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGUudG9rZW4gfSwKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgaWYgKCJvayIgIT0gdC5kYXRhLnR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci5tc2codC5kYXRhLm1lc3NhZ2UpLCB2b2lkIGxheWVyLmNsb3NlKGEpOwogICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoYSksCiAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHJvdXRlci5wdXNoKHsgbmFtZTogInRyYW5zZmVyUmVjb3JkIiB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBsaW5rOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogInRyYW5zZmVyUmVjb3JkIiB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKSwgdGhpcy5pbml0KCk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgfSwKICAgICAgZm8gPSBobywKICAgICAgZ28gPSAoYSgiNTg3YyIpLCBPYmplY3QoaFsiYSJdKShmbywgbW8sIHBvLCAhMSwgbnVsbCwgIjA1NjE2NzljIiwgbnVsbCkpLAogICAgICB2byA9IGdvLmV4cG9ydHMsCiAgICAgIF9vID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImxldmVyIiB9LCBbCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGV2ZXItaGVhZCBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi5YeA6LWE5Lqn5oqY5ZCIOiIpXSksCiAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBtaW5jbnkiIH0sIFsKICAgICAgICAgICAgICBlLl92KCLiiYgiICsgZS5fcyhlLnRvdGxlKSArICIgQ05ZIiksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZyIGJhc2VDb2xvciIgfSwgW2UuX3YoIui0ouWKoeiusOW9lSIpXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsZXZlcmJvZHkgY29udGVudEJLIGZ0MTIiIH0sIFsKICAgICAgICAgICAgZS5fbSgwKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50Ym94IGZDb2xvcjEiIH0sCiAgICAgICAgICAgICAgZS5fbChlLmxlZ2FsX2xpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAiY2xlYXJmaXggZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIncxNiBsNDAiIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jdXJyZW5jeV9uYW1lKSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIncyMCB0ciIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKHQubGVnYWxfYmFsYW5jZSkpXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIncyMCB0ciIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKHQubG9ja19sZWdhbF9iYWxhbmNlKSldKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAidzI1IHRyIGJhc2VDb2xvciBsNDAgYnRuIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmN1cnJlbnQgPSBpKSwgKGUuaW5EaWFsb2cgPSAhMCksIChlLnR5cGUgPSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCLovazlhaUiKV0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5jdXJyZW50ID0gaSksIChlLm91dERpYWxvZyA9ICEwKSwgKGUudHlwZSA9IDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIui9rOWHuiIpXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICIvbGVnYWxBY2NvdW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHsgY3VycmVuY3lfaWQ6IHQuY3VycmVuY3kgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIuiusOW9lSIpXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgMAogICAgICAgICAgICApLAogICAgICAgICAgICBlLmxlZ2FsX2xpc3QubGVuZ3RoIDw9IDAKICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0YyBmdDE2IGZDb2xvcjEgbXQ1MCIgfSwgWwogICAgICAgICAgICAgICAgICBlLl92KCLmmoLml6DmlbDmja4iKSwKICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBuYW1lOiAic2hvdyIsCiAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LXNob3ciLAogICAgICAgICAgICAgICAgICB2YWx1ZTogZS5pbkRpYWxvZywKICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImluRGlhbG9nIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImRpYWxvZ193cmFwIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWFsb2ciIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWEtdGl0IGNsZWFyZml4IiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgZkNvbG9yMSIgfSwgW2UuX3YoIui9rOWFpeacrOmHkSIpXSksCiAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmciBmQ29sb3IzIGNsb3NlIiwgb246IHsgY2xpY2s6IGUuY2xvc2UgfSB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KCJYIildCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWEtY29udGVudCBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWEtY29udGFpbmVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgZS5fbSgxKSwKICAgICAgICAgICAgICAgICAgICBlLl9tKDIpLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIGZyb21ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBmdDEyIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIuWIsCIpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTQgZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUubm93Q29pbi5jdXJyZW5jeV9uYW1lKSArICLotYTkuqfotKbmiLciKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgZS5fbSgzKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImRpdi1pbnB1dCBtdDIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIGZDb2xvcjMgZmxleCBiZXR3ZWVuIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIuaVsOmHjyIpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICLlj6/ovawgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubm93Q29pbi5sZXZlcl9iYWxhbmNlKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm5vd0NvaW4uY3VycmVuY3lfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJpbnB1dGJveHMgZmxleCBiZXR3ZWVuIGFsY2VudGVyIG10MTAiIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5hbW91bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJhbW91bnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJ0ZXh0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmFtb3VudCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLmFtb3VudCA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIGZDb2xvcjMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLm5vd0NvaW4uY3VycmVuY3lfbmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCJ8IildKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImFsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFtb3VudCA9IGUubm93Q29pbi5sZXZlcl9iYWxhbmNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIuWFqOmDqCIpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYnRuLWJveCBmbGV4IGZ0MTYgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IG9uOiB7IGNsaWNrOiBlLmNsb3NlIH0gfSwgW2UuX3YoIuWPlua2iCIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInN1cmUiLCBvbjogeyBjbGljazogZS50dXJuIH0gfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi56Gu5a6aIiksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0KICAgICAgICAgICksCiAgICAgICAgICBhKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgICAgICAgICAgdmFsdWU6IGUub3V0RGlhbG9nLAogICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAib3V0RGlhbG9nIiwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImRpYWxvZ193cmFwIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWFsb2ciIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWEtdGl0IGNsZWFyZml4IiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmwgZkNvbG9yMSIgfSwgW2UuX3YoIui9rOWHuuacrOmHkSIpXSksCiAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmciBmQ29sb3IzIGNsb3NlIiwgb246IHsgY2xpY2s6IGUuY2xvc2UgfSB9LAogICAgICAgICAgICAgICAgICAgIFtlLl92KCJYIildCiAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWEtY29udGVudCBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaWEtY29udGFpbmVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgZnJvbWJveCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IzIGZ0MTIgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigi5LuOIiksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxNCBmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5ub3dDb2luLmN1cnJlbmN5X25hbWUpICsgIui1hOS6p+i0puaItyIpLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgZS5fbSg0KSwKICAgICAgICAgICAgICAgICAgICBlLl9tKDUpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgZS5fbSg2KSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImRpdi1pbnB1dCBtdDIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIGZDb2xvcjMgZmxleCBiZXR3ZWVuIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIuaVsOmHjyIpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICLlj6/ovawgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubm93Q29pbi5sZWdhbF9iYWxhbmNlKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm5vd0NvaW4uY3VycmVuY3lfbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJpbnB1dGJveHMgZmxleCBiZXR3ZWVuIGFsY2VudGVyIG10MTAiIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5hbW91bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJhbW91bnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJ0ZXh0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmFtb3VudCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8IChlLmFtb3VudCA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIGZDb2xvcjMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLm5vd0NvaW4ubGVnYWxfYmFsYW5jZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCJ8IildKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImFsbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFtb3VudCA9IGUubm93Q29pbi5sZWdhbF9iYWxhbmNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoIuWFqOmDqCIpXQogICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYnRuLWJveCBmbGV4IGZ0MTYgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IG9uOiB7IGNsaWNrOiBlLmNsb3NlIH0gfSwgW2UuX3YoIuWPlua2iCIpXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInN1cmUiLCBvbjogeyBjbGljazogZS50dXJuIH0gfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi56Gu5a6aIiksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0KICAgICAgICAgICksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIHlvID0gWwogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAidGl0bGVib3ggZkNvbG9yMyBjbGVhcmZpeCIgfSwgWwogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MTYiIH0sIFtlLl92KCLlkIjnuqbotKbmiLciKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MjAgdHIiIH0sIFtlLl92KCLlj6/nlKgiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MjAgdHIiIH0sIFtlLl92KCLlhrvnu5MiKV0pLAogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MjUgdHIiIH0sIFtlLl92KCLmk43kvZwiKV0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIGZyb21ib3giIH0sIFsKICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IzIGZ0MTIgdGMiIH0sIFtlLl92KCLku44iKV0pLAogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTQgZmxleDEiIH0sIFtlLl92KCLlkIjnuqbotKbmiLciKV0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBpID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGkoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmcm9tYm94IGZsZXggYWxjZW50ZXIgdzEwIHRjIiB9LCBbCiAgICAgICAgICAgIGkoImltZyIsIHsKICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImNvaW5pbWciLAogICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogYSgiNWZhYiIpLCBhbHQ6ICIiIH0sCiAgICAgICAgICAgIH0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJkaXYtaW5wdXQgbXQyMCIgfSwgWwogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgZkNvbG9yMyIgfSwgW2UuX3YoIuW4geenjSIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGkgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gaSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZyb21ib3ggZmxleCBhbGNlbnRlciB3MTAgdGMiIH0sIFsKICAgICAgICAgICAgaSgiaW1nIiwgewogICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29pbmltZyIsCiAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBhKCI1ZmFiIiksIGFsdDogIiIgfSwKICAgICAgICAgICAgfSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIgZnJvbWJveCIgfSwgWwogICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjMgZnQxMiB0YyIgfSwgW2UuX3YoIuWIsCIpXSksCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxNCBmbGV4MSIgfSwgW2UuX3YoIuWQiOe6pui0puaItyIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImRpdi1pbnB1dCBtdDIwIiB9LCBbCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBmQ29sb3IzIiB9LCBbZS5fdigi5biB56eNIildKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIGJvID0gewogICAgICAgIG5hbWU6ICJjaGFuZ2UiLAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEgfSwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBjdXJyZW50OiAwLAogICAgICAgICAgICBpbkRpYWxvZzogITEsCiAgICAgICAgICAgIG91dERpYWxvZzogITEsCiAgICAgICAgICAgIGxlZ2FsX2xpc3Q6IFtdLAogICAgICAgICAgICBhbW91bnQ6ICIiLAogICAgICAgICAgICB0b3RsZTogMCwKICAgICAgICAgICAgdHlwZTogMywKICAgICAgICAgICAgY29pbnM6IFt7IGNvaW46ICJFVEMiIH0sIHsgY29pbjogIlVTRFQiIH1dLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICh0aGlzLmluRGlhbG9nID0gITEpLCAodGhpcy5vdXREaWFsb2cgPSAhMSksICh0aGlzLmFtb3VudCA9ICIiKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnb2xldmVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogIm1hbmdlciIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0ZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHQuZGF0YS5tZXNzYWdlLmxlZ2FsX3dhbGxldDsKICAgICAgICAgICAgICAgIGUudG90bGUgPSBhLnRvdGxlOwogICAgICAgICAgICAgICAgZm9yICgKICAgICAgICAgICAgICAgICAgdmFyIGkgPSB7fSwKICAgICAgICAgICAgICAgICAgICBuID0gdC5kYXRhLm1lc3NhZ2UubGV2ZXJfd2FsbGV0LmJhbGFuY2UubGVuZ3RoIC0gMTsKICAgICAgICAgICAgICAgICAgbiA+PSAwOwogICAgICAgICAgICAgICAgICBuLS0KICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICB2YXIgcyA9IHQuZGF0YS5tZXNzYWdlLmxldmVyX3dhbGxldC5iYWxhbmNlW25dOwogICAgICAgICAgICAgICAgICBpW3MuY3VycmVuY3ldID0gcy5sZXZlcl9iYWxhbmNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIChuID0gYS5iYWxhbmNlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSB7CiAgICAgICAgICAgICAgICAgIHMgPSBhLmJhbGFuY2Vbbl07CiAgICAgICAgICAgICAgICAgIGlbcy5jdXJyZW5jeV0gJiYgKGEuYmFsYW5jZVtuXS5sZXZlcl9iYWxhbmNlID0gaVtzLmN1cnJlbmN5XSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAoZS5sZWdhbF9saXN0ID0gYS5iYWxhbmNlKSwKICAgICAgICAgICAgICAgICAgKGUudG90bGUgPSB0LmRhdGEubWVzc2FnZS5sZWdhbF93YWxsZXQudG90bGUpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICB0dXJuOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY2hhbmdlIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsCiAgICAgICAgICAgICAgICBudW1iZXI6IHRoaXMuYW1vdW50LAogICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IHRoaXMubm93Q29pbi5jdXJyZW5jeSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwgIm9rIiA9PSB0LmRhdGEudHlwZSAmJiBlLmNsb3NlKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIjsKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMuZ2V0ZGF0YSgpOwogICAgICAgIH0sCiAgICAgICAgY29tcHV0ZWQ6IHsKICAgICAgICAgIG5vd0NvaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLmxlZ2FsX2xpc3Q7CiAgICAgICAgICAgIHJldHVybiBlLmxlbmd0aCA/IGVbdGhpcy5jdXJyZW50XSA6IHt9OwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBDbyA9IGJvLAogICAgICB3byA9IChhKCIwYTk3IiksIE9iamVjdChoWyJhIl0pKENvLCBfbywgeW8sICExLCBudWxsLCAiOTViYTY0OGEiLCBudWxsKSksCiAgICAgIGtvID0gd28uZXhwb3J0cywKICAgICAgeG8gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiYm94IiB9LAogICAgICAgICAgWwogICAgICAgICAgICBhKCJpbmRleEhlYWRlciIpLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYWNjb3VudCIsCiAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAicGFkZGluZy10b3AiOiAiNDhweCIgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0b3Bjb250ZW50IGZ0MjAgIiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2hpdGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImJhc2VDb2xvciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQudGFjY291bnQiKSkgKyAiPiIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJhY2NvdW50Lm1yZWNvcmQiKSkpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbl9ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudF90aXRsZSB0dEJrIHdoaXRlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KCIg5pyA5pawICIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50QksgZkNvbG9yMSAgcGRscjIwIHBkdGIyMCBmdDEyIiB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJ0aW1lIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibWFya2V0LmN1cnJlbmN5IikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYzJjLnR5cGUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjMmMuc3RhdGUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJkbyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibXQxMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIjIwMTgtMDEtMjkgMTI6MjM6NDUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgW2UuX3YoInVzZHQiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgW2UuX3YoInVzZHQiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgW2UuX3YoIjI0NSIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjMmMuY29tcGxldGVkIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgicmV2b2tlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJub25lIGNvbG9yMSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoIm5vZGF0YSIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29uX2JveCBtdDE1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFjY291bnRfdGl0bGUgdHRCayB3aGl0ZSBmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWN0aXZlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50LmNoYXJnaW5nIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5yZWNvcmQiKSkKICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1sMjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQud2l0aGRyYXciKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50LnJlY29yZCIpKQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWwyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC50cmFuc2ZlciIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQucmVjb3JkIikpCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtbDIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhdXRoMi5vdGhlciIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQucmVjb3JkIikpCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29udGVudEJLIGZDb2xvcjEgIHBkbHIyMCBwZHRiMjAgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgidGltZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoIm1hcmtldC5jdXJyZW5jeSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImMyYy50eXBlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibnVtYmVyIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYzJjLnN0YXRlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiZG8iKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIyMDE4LTAxLTI5IDEyOjIzOjQ1IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFtlLl92KCJ1c2R0IildKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFtlLl92KCJ1c2R0IildKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFtlLl92KCIyNDUiKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYzJjLmNvbXBsZXRlZCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInJldm9rZSIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibm9uZSBjb2xvcjEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJub2RhdGEiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICAxCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgU28gPSBbXSwKICAgICAgQW8gPSB7CiAgICAgICAgbmFtZTogImZpbmFucmVjIiwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsgbGFuZzogIiIsIHRva2VuOiAiIiwgY2hhbmdlTGlzdDogW10gfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIjsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGdldGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICB0eXBlOiAiUE9TVCIsCiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICBkYXRhOiB7fSwKICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAogICAgICAgICAgICAgIGFzeW5jOiAhMCwKICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgZS5zZXRSZXF1ZXN0SGVhZGVyKCJBdXRob3JpemF0aW9uIiwgdGhhdC50b2tlbik7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgZS50eXBlOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgIGUuZ2V0ZGF0YSgpOwogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIHpvID0gQW8sCiAgICAgIFBvID0gKGEoIjU0ZWYiKSwgT2JqZWN0KGhbImEiXSkoem8sIHhvLCBTbywgITEsIG51bGwsICIwYmI2YjUwMCIsIG51bGwpKSwKICAgICAgVG8gPSBQby5leHBvcnRzLAogICAgICBJbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJtYW5nZXIiIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGEoImluZGV4SGVhZGVyIiksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjb250ZW50IGZ0MTQiLAogICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgInBhZGRpbmctdG9wIjogIjQ4cHgiIH0sCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICBlLl9tKDApLAogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW5ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW4tbGVmdCBmbCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGUuX20oMSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImJhci10YiBmdDEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl9tKDIpLAogICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInRiLXVsIGZDb2xvcjEgc2Nyb2xsIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUuY29pbkxpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBzZWxlY3Q6IGkgPT0gZS5jdXJyZW50IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jb2luKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0Lm5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigi5peg6aOO6ZmpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgZS5fbSgzKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgZS5fbSg0KSwKICAgICAgICAgICAgICAgIGUuX20oNSksCiAgICAgICAgICAgICAgXQogICAgICAgICAgICApLAogICAgICAgICAgICBhKCJpbmRleEZvb3RlciIpLAogICAgICAgICAgXSwKICAgICAgICAgIDEKICAgICAgICApOwogICAgICB9LAogICAgICBCbyA9IFsKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJ0b3Bjb250ZW50IGZ0MjAgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImJhc2VDb2xvciIgfSwgW2UuX3YoIuWQiOe6pui0puaItyIpXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmdDEyIiwgc3RhdGljU3R5bGU6IHsgcGFkZGluZzogIjAgMTBweCIgfSB9LAogICAgICAgICAgICAgIFtlLl92KCI+IildCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi5ZCI57qm566h55CGIildKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYmFyLWhkIGZDb2xvcjEgcGwxMCIgfSwgWwogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTYgYmFyLXRpdGxlIiB9LCBbZS5fdigi5ZCI57qm6LSm5oi3IildKSwKICAgICAgICAgICAgYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImFjdGl2ZSIgfSwgW2UuX3YoIlVTRFQiKV0pLAogICAgICAgICAgICAgIGEoImxpIiwgW2UuX3YoIkJUQyIpXSksCiAgICAgICAgICAgICAgYSgibGkiLCBbZS5fdigiRVRIIildKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRiLXRpdGxlIGZsZXgiIH0sIFsKICAgICAgICAgICAgYSgicCIsIFtlLl92KCLluIHnp40iKV0pLAogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogInRyIiB9LCBbZS5fdigi6aOO6Zmp546HIildKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbi1yaWdodCBmdCIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidHRCayBmQ29sb3IxIGJsb2QgdG9wc2hhZG93IG1yLXRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmdDE2IGJvbGQiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoIkVUSC9VU0RUIOWQiOe6pui0puaItyIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWwxMCBmQ29sb3I0IiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KCLlvZPpo47pmannjofiiaQxMTAl5pe277yM6LSm5oi35bCG6Kem5Y+R54iG5LuT5Lul5b2S6L+Y5YCf6LS36LWE6YeRIiksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibW9kLWJkIiB9LCBbCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImJhbGFuY2VfYmFyIiB9LCBbCiAgICAgICAgICAgICAgICBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImxpIiwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBjYW51c2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIuWPr+eUqFVTRFQiKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigiMC4wMDAwMDAwIildKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAibWwxMCBiYXNlQ29sb3IiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigi6L2s5YWlIiksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImxpIiwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBjYW51c2UiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoIuWPr+eUqGJ0YyIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCIwLjAwMDAwMDAiKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJtbDEwIGJhc2VDb2xvciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICBlLl92KCLovazlhaUiKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgibGkiLCBbCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IzIGNhbnVzZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigi54iG5LuT5Lu3KFVTRFQpIiksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIi0tLSIpXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJsaSIsIFsKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjMgY2FudXNlIiB9LCBbZS5fdigi6aOO6Zmp546HIildKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEgZnQxMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCLml6Dpo47pmakiKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJwYW5uZWwgY2xlYXJmaXgiIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJwYW5uZWwtbGVmdCBmbCIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicGFuLXRpdGxlIGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIlVTRFQiKV0pLAogICAgICAgICAgICAgICAgICAgIGUuX3YoIuWAn+i0tyIpLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAicGFubmVsLXVsIGZ0MTIgZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoImxpIiwgWwogICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IzIGJyb3ciIH0sIFtlLl92KCLlt7LlgJ8iKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiB9LCBbZS5fdigiMC4wMDAwMDAwIildKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJsaSIsIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBicm93IiB9LCBbZS5fdigi5Y+v5YCfIildKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIgfSwgW2UuX3YoIjAuMDAiKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImxpIiwgWwogICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IzIGJyb3ciIH0sIFtlLl92KCLliKnnjociKV0pLAogICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiB9LCBbZS5fdigiMC4xJSIpXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicGFubmVsLXJpZ2h0IGZyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJwYW4tdGl0bGUgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigiQlRDIildKSwKICAgICAgICAgICAgICAgICAgICBlLl92KCLlgJ/otLciKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoInVsIiwgeyBzdGF0aWNDbGFzczogInBhbm5lbC11bCBmdDEyIGZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJsaSIsIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBicm93IiB9LCBbZS5fdigi5bey5YCfIildKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIgfSwgW2UuX3YoIjAuMDAwMDAwMCIpXSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgibGkiLCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjMgYnJvdyIgfSwgW2UuX3YoIuWPr+WAnyIpXSksCiAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEiIH0sIFtlLl92KCIwLjAwIildKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJsaSIsIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBicm93IiB9LCBbZS5fdigi5Yip546HIildKSwKICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSIgfSwgW2UuX3YoIjAuMSUiKV0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYXBwbHlib3ggbXQyMCBjb250ZW50QksiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFwLWhlYWRlciBmdDE2IGZDb2xvcjEiIH0sIFsKICAgICAgICAgICAgICBlLl92KCLlvZPliY3nlLPor7ciKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhcC1saXN0IiB9LCBbCiAgICAgICAgICAgICAgYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMyBmbGV4IGZ0MTIgdWwtdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogIncxOCIgfSwgW2UuX3YoIueUs+ivt+aXtumXtCIpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MTUiIH0sIFtlLl92KCLlkIjnuqbotKbmiLciKV0pLAogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzgiIH0sIFtlLl92KCLluIHnp40iKV0pLAogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzggdHIiIH0sIFtlLl92KCLmlbDph48iKV0pLAogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzEwIHRyIiB9LCBbZS5fdigi5Yip546HIildKSwKICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogIncxNCB0ciIgfSwgW2UuX3YoIuacqui/mOWIqeaBryIpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MTYgdHIiIH0sIFtlLl92KCLmnKrlvZLov5jmlbDph48iKV0pLAogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzExIHRyIiB9LCBbZS5fdigi5pON5L2cIildKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZDb2xvcjEgbXQ0MCB0YyIgfSwgW2UuX3YoIuaaguaXoOiusOW9lSIpXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSk7CiAgICAgICAgfSwKICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhcHBseWJveCBtdDIwIGNvbnRlbnRCSyIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYXAtaGVhZGVyIGZ0MTYgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICAgIGUuX3YoIueUs+ivt+iusOW9lSIpLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImFwLWxpc3QiIH0sIFsKICAgICAgICAgICAgICBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IzIGZsZXggZnQxMiB1bC10aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzE4IiB9LCBbZS5fdigi55Sz6K+35pe26Ze0IildKSwKICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogIncxNSIgfSwgW2UuX3YoIuWQiOe6pui0puaItyIpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3OCIgfSwgW2UuX3YoIuW4geenjSIpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3OCB0ciIgfSwgW2UuX3YoIuaVsOmHjyIpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MTAgdHIiIH0sIFtlLl92KCLliKnnjociKV0pLAogICAgICAgICAgICAgICAgYSgibGkiLCB7IHN0YXRpY0NsYXNzOiAidzE0IHRyIiB9LCBbZS5fdigi5pyq6L+Y5Yip5oGvIildKSwKICAgICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogIncxNiB0ciIgfSwgW2UuX3YoIuacquW9kui/mOaVsOmHjyIpXSksCiAgICAgICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJ3MTEgdHIiIH0sIFtlLl92KCLmk43kvZwiKV0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMSBtdDQwIHRjIiB9LCBbZS5fdigi5pqC5peg6K6w5b2VIildKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICBdLAogICAgICBObyA9IHsKICAgICAgICBuYW1lOiAibWFuZ2VyIiwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBpbmRleEZvb3RlcjogSyB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGN1cnJlbnQ6IDAsCiAgICAgICAgICAgIGNvaW5MaXN0OiBbCiAgICAgICAgICAgICAgeyBuYW1lOiAiQlRDIiB9LAogICAgICAgICAgICAgIHsgbmFtZTogIkJUQyIgfSwKICAgICAgICAgICAgICB7IG5hbWU6ICJCVEMiIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiQlRDIiB9LAogICAgICAgICAgICAgIHsgbmFtZTogIkJUQyIgfSwKICAgICAgICAgICAgICB7IG5hbWU6ICJCVEMiIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiQlRDIiB9LAogICAgICAgICAgICAgIHsgbmFtZTogIkJUQyIgfSwKICAgICAgICAgICAgICB7IG5hbWU6ICJCVEMiIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiQlRDIiB9LAogICAgICAgICAgICAgIHsgbmFtZTogIkJUQyIgfSwKICAgICAgICAgICAgICB7IG5hbWU6ICJCVEMiIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgY29pbjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gZTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgRm8gPSBObywKICAgICAgTG8gPSAoYSgiYmQzMyIpLCBPYmplY3QoaFsiYSJdKShGbywgSW8sIEJvLCAhMSwgbnVsbCwgIjFkNDU2OThmIiwgbnVsbCkpLAogICAgICAkbyA9IExvLmV4cG9ydHMsCiAgICAgIE1vID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2Iiwge30sIFsKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJoZWFkZXIgZkNvbG9yMSIgfSwgWwogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsIiB9LCBbCiAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoImFjY291bnQudG90YWxhc3NldHMiKSkgKyAi77yaICIpLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYXNzZXRfbnVtIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigidG9GaXhlZHMiKShlLnRvdGxlKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYXNzZXRfbmFtZSIgfSwgW2UuX3YoIiBVU0RUIildKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnIgcmlnaHRfdGV4dCIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYWRkcmVzcyBoaWRlIiwKICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUud2l0aGRyYXdfYWRkcmVzcyB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC51cGFkZHJlc3MiKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudCBmQ29sb3IxIGZ0MTIiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnRfdG9wIGZsZXggYWxjZW50ZXIgZkNvbG9yMiIgfSwgWwogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJtYXJrZXQuY3VycmVuY3kiKSkgKyAiICIpLAogICAgICAgICAgICAgICAgYSgiaSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuYXZhaWxhYmxlIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5mcmVlemVzIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jb252ZXJzaW9uIikpICsgIihVU0RUKSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFtlLl92KGUuX3MoZS4kdCgiZG8iKSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvbnRlbnRfdWwiIH0sCiAgICAgICAgICAgICAgZS5fbChlLmFzc2V0X2xpc3QsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMSA9PSB0LmlzX2xlZ2FsCiAgICAgICAgICAgICAgICAgID8gYSgibGkiLCB7IGtleTogaSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvbnRlbnRfbGkgZmxleCBhbGNlbnRlciBiZXR3ZWVuIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9GaXhlZHMiKSh0LmxlZ2FsX2JhbGFuY2UgfHwgIjAuMDAiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKHQubG9ja19sZWdhbF9iYWxhbmNlIHx8ICIwLjAwIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvRml4ZWRzIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnVzZHRfcHJpY2UgKiB0LmxlZ2FsX2JhbGFuY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMgb3BlcmF0aW9uIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnRyYW5zSW4oaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgidHJhbnNpbiIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50cmFuc091dChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ0cmFuc291dCIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5yZWMoaSwgdC5jdXJyZW5jeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5yZWNvcmQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIGkgPT0gZS5hY3RpdmUwMgogICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJoaWRlX2RpdiByZWMtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVjLWNvbiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVjLXRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibnVtYmVyIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoImFjY291bnQucmVjb3JkIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoInRpbWUiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogInJlYy1saXN0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5yZWNEYXRhLCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImxpIiwgeyBrZXk6IGkgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKHQudmFsdWUgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LmluZm8pKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LmNyZWF0ZWRfdGltZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibW9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5tb3JlRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5tb3JlKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICA6IGUuX2UoKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAwCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgRW8gPSBbXSwKICAgICAgVm8gPSB7CiAgICAgICAgbmFtZTogImZpbmFuY2UiLAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIHRvRml4ZWRzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoOCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG90bGU6ICIiLAogICAgICAgICAgICByZWNEYXRhOiBbXSwKICAgICAgICAgICAgdG9rZW46ICIiLAogICAgICAgICAgICBmbGFnczogITEsCiAgICAgICAgICAgIGZsYWc6ICExLAogICAgICAgICAgICBpc0hpZGU6ICEwLAogICAgICAgICAgICBhY3RpdmU6ICJhIiwKICAgICAgICAgICAgYWN0aXZlMDE6ICJhIiwKICAgICAgICAgICAgdGliaV9tc2c6IHRoaXMuJHQoImFjY291bnQudGliaSIpLAogICAgICAgICAgICBhY3RpdmUwMjogImEiLAogICAgICAgICAgICBhZGRyOiAiIiwKICAgICAgICAgICAgdXJsOiAiIiwKICAgICAgICAgICAgZXhjaGFyZ2VfYWRkcmVzczogIiIsCiAgICAgICAgICAgIGFkZHJlc3M6ICIiLAogICAgICAgICAgICBudW1iZXI6ICIiLAogICAgICAgICAgICByYXRlOiAiIiwKICAgICAgICAgICAgY29pbm5hbWU6ICIiLAogICAgICAgICAgICBiYWxhbmNlOiAiIiwKICAgICAgICAgICAgcmF0ZW51bTogIiIsCiAgICAgICAgICAgIHJlYWNobnVtOiAiIiwKICAgICAgICAgICAgbWluX251bWJlcjogIiIsCiAgICAgICAgICAgIG1pbl9udW1iZXJfdHh0OiAiIiwKICAgICAgICAgICAgY3VycmVuY3k6ICIiLAogICAgICAgICAgICBhc3NldF9saXN0OiBbXSwKICAgICAgICAgICAgdGlwX2xpc3Q6IFsKICAgICAgICAgICAgICB0aGlzLiR0KCJhY2NvdW50LmExIikgKyAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEyIiksCiAgICAgICAgICAgICAgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMyIpLAogICAgICAgICAgICBdLAogICAgICAgICAgICB0aXBfbGlzdDAxOiBbCiAgICAgICAgICAgICAgdGhpcy4kdCgiYWNjb3VudC5hMSIpICsgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMiIpLAogICAgICAgICAgICAgICJVU0RUIiArIHRoaXMuJHQoImFjY291bnQuYTMiKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgbW9yZTogdGhpcy4kdCgibW9yZSIpLAogICAgICAgICAgICBiYWxhbmNlTGlzdDogWwogICAgICAgICAgICAgIHRoaXMuJHQoImFjY291bnQubGFjY291bnQiKSwKICAgICAgICAgICAgICB0aGlzLiR0KCJ1c2VyY2VudGVyLmxldmVyIiksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHRyYW5zZmVyRGF0YTogewogICAgICAgICAgICAgIG1vZGFsU2hvdzogITEsCiAgICAgICAgICAgICAgdHJhbnNmZXJOYW1lOiAiIiwKICAgICAgICAgICAgICB0cmFuc2ZlckJhbGFuY2U6ICIiLAogICAgICAgICAgICAgIHN0YXJ0OiAiIiwKICAgICAgICAgICAgICBlbmQ6ICIiLAogICAgICAgICAgICB9LAogICAgICAgICAgICBzdGF0dXM6ICIiLAogICAgICAgICAgICBmb3JtOiB7IGZyb206ICIiLCBudW06ICIiLCBwaWM6IFtdLCBoYXNoOiAiIiB9LAogICAgICAgICAgICBpbkRpYWxvZzogITEsCiAgICAgICAgICAgIG91dERpYWxvZzogITEsCiAgICAgICAgICAgIHVwbG9hZFVybDogIiIsCiAgICAgICAgICAgIHVwbG9hZEhlYWRlcnM6IHt9LAogICAgICAgICAgICBsZWdhbF9saXN0OiBbXSwKICAgICAgICAgICAgYW1vdW50OiAwLAogICAgICAgICAgICBjdXJyZW50OiAwLAogICAgICAgICAgICBjaGFuZ2VCYWxhbmNlOiBbXSwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBsZWZ0OiBubiB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGdvUmVjb3JkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImNvaW5SZWNvcmQiIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHRyYW5zSW46IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcywKICAgICAgICAgICAgICBhID0gdGhpcy5jaGFuZ2VCYWxhbmNlW2VdLAogICAgICAgICAgICAgIGkgPSB0aGlzLiR0KCJjZW50ZXIuYXZhaWxhYmxlIiksCiAgICAgICAgICAgICAgbiA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJHByb21wdCgKICAgICAgICAgICAgICAiIgogICAgICAgICAgICAgICAgLmNvbmNhdChhLmN1cnJlbmN5X25hbWUsICIgIikKICAgICAgICAgICAgICAgIC5jb25jYXQoaSwgIiAiKQogICAgICAgICAgICAgICAgLmNvbmNhdChhLmNoYW5nZV9iYWxhbmNlLCAiICIpLAogICAgICAgICAgICAgICLku47luIHluIHotKbmiLfovazlhaUiLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAi5LuO5biB5biB6LSm5oi36L2s5YWlIiwKICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgICAgICAgICAgaW5wdXRQbGFjZWhvbGRlcjogdGhpcy4kdCgiYWNjb3VudC5odWFudW0iKSwKICAgICAgICAgICAgICAgIGlucHV0VHlwZTogIm51bWJlciIsCiAgICAgICAgICAgICAgICBjbG9zZU9uQ2xpY2tNb2RhbDogITEsCiAgICAgICAgICAgICAgfQogICAgICAgICAgICApCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIHZhciBpID0gZS52YWx1ZTsKICAgICAgICAgICAgICAgIG4uJGh0dHAoewogICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9jaGFuZ2UiLAogICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgZGF0YTogewogICAgICAgICAgICAgICAgICAgIG51bWJlcjogaSwKICAgICAgICAgICAgICAgICAgICBmcm9tX2ZpZWxkOiAiY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgICB0b19maWVsZDogImxlZ2FsIiwKICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeV9pZDogYS5jdXJyZW5jeSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICAgICAobi5nZXRkYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICB0LiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Nsb3NlOiAhMCwKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogIuWIkui9rOWujOaIkCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICB0cmFuc091dDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSB0aGlzLAogICAgICAgICAgICAgIGkgPSB0aGlzLmFzc2V0X2xpc3RbZV0sCiAgICAgICAgICAgICAgbiA9IHRoaXMuJHQoImNlbnRlci5hdmFpbGFibGUiKTsKICAgICAgICAgICAgdGhpcy4kcHJvbXB0KAogICAgICAgICAgICAgICIiCiAgICAgICAgICAgICAgICAuY29uY2F0KGkuY3VycmVuY3lfbmFtZSwgIiAiKQogICAgICAgICAgICAgICAgLmNvbmNhdChuLCAiICIpCiAgICAgICAgICAgICAgICAuY29uY2F0KGkubGVnYWxfYmFsYW5jZSwgIiAiKSwKICAgICAgICAgICAgICAi6L2s5Ye65Yiw5biB5biB6LSm5oi3IiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogIui9rOWHuuWIsOW4geW4gei0puaItyIsCiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAi5Y+W5raIIiwKICAgICAgICAgICAgICAgIGlucHV0UGxhY2Vob2xkZXI6IHRoaXMuJHQoImFjY291bnQuaHVhbnVtIiksCiAgICAgICAgICAgICAgICBpbnB1dFR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgY2xvc2VPbkNsaWNrTW9kYWw6ICExLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgKQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB2YXIgbiA9IGUudmFsdWU7CiAgICAgICAgICAgICAgICBhLiRodHRwKHsKICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICBudW1iZXI6IG4sCiAgICAgICAgICAgICAgICAgICAgZnJvbV9maWVsZDogImxlZ2FsIiwKICAgICAgICAgICAgICAgICAgICB0b19maWVsZDogImNoYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IGkuY3VycmVuY3ksCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgICAgICAgKGEuZ2V0ZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgdC4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDbG9zZTogITAsCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICLliJLovazlrozmiJAiLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICAgICAgICB9LAogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIChlLnVwbG9hZEhlYWRlcnMgPSB7CiAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIiksCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIChlLnVwbG9hZFVybCA9IGUuJHV0aWxzLmJhY2tfYXBpICsgImFwaS91cGxvYWQiKTsKICAgICAgICAgICAgdmFyIHQgPSBuZXcgQ2xpcGJvYXJkKCIuY29weSIpOwogICAgICAgICAgICB0Lm9uKCJzdWNjZXNzIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICBsYXllci5hbGVydChlLiR0KCJsYXkuY29weXMiKSk7CiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHQub24oImVycm9yIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KGUuJHQoImxheS5mY29weSIpKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBleGNoYXJnZTogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coZSwgdCksCiAgICAgICAgICAgICAgMSA9PSB0aGlzLnN0YXR1cwogICAgICAgICAgICAgICAgPyAoKHRoaXMuY3VycmVuY3kgPSB0KSwKICAgICAgICAgICAgICAgICAgdGhpcy5mbGFnCiAgICAgICAgICAgICAgICAgICAgPyAoKHRoaXMuZmxhZyA9ICExKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpCiAgICAgICAgICAgICAgICAgICAgOiAoKHRoaXMuZmxhZyA9ICEwKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9IGUpLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDIgPSAiYSIpKSwKICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kRGF0YSh0KSkKICAgICAgICAgICAgICAgIDogbGF5ZXIuYWxlcnQodGhpcy4kdCgibm90b3BlbiIpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZW5kRGF0YTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9nZXRfaW5fYWRkcmVzcyIsCiAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YTogeyBjdXJyZW5jeTogZSB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdC50b2tlbiB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAib2siID09IGEuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICgodC5leGNoYXJnZV9hZGRyZXNzID0KICAgICAgICAgICAgICAgICAgICAxID09IGUgPyBhLmRhdGEubWVzc2FnZS5idGMgOiBhLmRhdGEubWVzc2FnZS51c2R0X2VyYzIwKSwKICAgICAgICAgICAgICAgICAgJCgiI2NvZGUiKS5xcmNvZGUoewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMzAsCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMzAsCiAgICAgICAgICAgICAgICAgICAgdGV4dDogdC5leGNoYXJnZV9hZGRyZXNzLAogICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHdpdGhkcmF3OiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAxID09IHRoaXMuc3RhdHVzCiAgICAgICAgICAgICAgPyAoKHRoaXMuY3VycmVuY3kgPSB0KSwKICAgICAgICAgICAgICAgIHRoaXMuZmxhZwogICAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgICAgOiAoKHRoaXMuZmxhZyA9ICEwKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9IGUpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDIgPSAiYSIpKSwKICAgICAgICAgICAgICAgIHRoaXMuZ2V0TnVtKHQpKQogICAgICAgICAgICAgIDogbGF5ZXIuYWxlcnQodGhpcy4kdCgibm90b3BlbiIpKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZWM6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3kgPSB0KSwKICAgICAgICAgICAgICAodGhpcy5yZWNEYXRhID0gW10pLAogICAgICAgICAgICAgIHRoaXMuZmxhZwogICAgICAgICAgICAgICAgPyAoKHRoaXMuZmxhZyA9ICExKSwKICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpCiAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9IGUpLAogICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUgPSAiYSIpLAogICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9ICJhIiksCiAgICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xlZ2FsX2xvZyIsCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB0eXBlOiAxLCBjdXJyZW5jeTogdCwgcGFnZTogMSB9LAogICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJiAoYS5yZWNEYXRhID0gZS5kYXRhLm1lc3NhZ2UubGlzdCk7CiAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXROdW06IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvZ2V0X2luZm8iLAogICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAoZSA9IGUuZGF0YSksCiAgICAgICAgICAgICAgICAodC5jb2lubmFtZSA9IGUubWVzc2FnZS5uYW1lKSwKICAgICAgICAgICAgICAgICh0LmJhbGFuY2UgPSBlLm1lc3NhZ2UubGVnYWxfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAodC5taW5fbnVtYmVyID0KICAgICAgICAgICAgICAgICAgdC4kdCgiYWNjb3VudC5taW5udW0iKSArCiAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoZS5tZXNzYWdlLm1pbl9udW1iZXIpLnRvRml4ZWQoMikgKwogICAgICAgICAgICAgICAgICAiICAgIiArCiAgICAgICAgICAgICAgICAgIHQuJHQoImFjY291bnQub25jZW1heG51bSIpICsKICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChlLm1lc3NhZ2UubWF4X251bWJlcikudG9GaXhlZCgyKSArCiAgICAgICAgICAgICAgICAgICIgICAiICsKICAgICAgICAgICAgICAgICAgdC4kdCgiYWNjb3VudC5kYXludW0iKSArCiAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoZS5tZXNzYWdlLmRheV9saW1pdCkudG9GaXhlZCgyKSksCiAgICAgICAgICAgICAgICAodC5taW5fbnVtYmVyX3R4dCA9IHBhcnNlRmxvYXQoZS5tZXNzYWdlLm1pbl9udW1iZXIpLnRvRml4ZWQoCiAgICAgICAgICAgICAgICAgIDgKICAgICAgICAgICAgICAgICkpLAogICAgICAgICAgICAgICAgKHQubWlubnVtYmVyID0gZS5tZXNzYWdlLm1pbl9udW1iZXIpLAogICAgICAgICAgICAgICAgKHQubWF4X251bWJlciA9IGUubWVzc2FnZS5tYXhfbnVtYmVyKSwKICAgICAgICAgICAgICAgICh0LmRheV9saW1pdCA9IGUubWVzc2FnZS5kYXlfbGltaXQpLAogICAgICAgICAgICAgICAgKHQucmF0ZW51bSA9IGUubWVzc2FnZS5yYXRlKSwKICAgICAgICAgICAgICAgICh0LnJlYWNobnVtID0gMCksCiAgICAgICAgICAgICAgICAodC5yYXRlID0gZS5tZXNzYWdlLnJhdGUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBtZW50aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gKHRoaXMuY3VycmVuY3ksIHRoaXMuYWRkcmVzcyksCiAgICAgICAgICAgICAgYSA9IHRoaXMubnVtYmVyLAogICAgICAgICAgICAgIGkgPSAodGhpcy5yYXRlLCB0aGlzLm1pbm51bWJlcik7CiAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgaWYgKGEpCiAgICAgICAgICAgICAgICByZXR1cm4gYSAtIDAgPCBpCiAgICAgICAgICAgICAgICAgID8gbGF5ZXIuYWxlcnQoZS4kdCgibGF5Lm1pbm51bSIpKQogICAgICAgICAgICAgICAgICA6IHZvaWQgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L291dCIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5LAogICAgICAgICAgICAgICAgICAgICAgICBudW1iZXI6IHRoaXMubnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHJhdGU6IHRoaXMucmF0ZSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgKGUgPSBlLmRhdGEpLAogICAgICAgICAgICAgICAgICAgICAgICAib2siID09IGUudHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgID8gKGxheWVyLmFsZXJ0KGUubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTUwMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYXllci5hbGVydChlLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGxheWVyLmFsZXJ0KGUuJHQoImxheS5jbnVtYmVyIikpOwogICAgICAgICAgICB9IGVsc2UgbGF5ZXIuYWxlcnQoZS4kdCgibGF5LmNhZGRyZXNzIikpOwogICAgICAgICAgfSwKICAgICAgICAgIGV4Y2hhbmdlOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgIGNvcHk6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSBuZXcgQ2xpcGJvYXJkKCIuY29weSIsIHsKICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZXhjaGFyZ2VfYWRkcmVzczsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHQub24oInN1Y2Nlc3MiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIChlLmZsYWdzID0gITApLCBsYXllci5tc2coZS4kdCgibGF5LmNvcHlzIikpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAoZS5mbGFncyA9ICExKSwgbGF5ZXIubXNnKGUuJHQoImxheS5mY29weSIpKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICByZWNvcmQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAiZmluYW5yZWMiIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHdpdGhkcmF3X2FkZHJlc3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAid2l0aGRyYXdfYWRkcmVzcyIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2hvd19ld206IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5pc0hpZGUgPyAodGhpcy5pc0hpZGUgPSAhMSkgOiAodGhpcy5pc0hpZGUgPSAhMCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0ZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgIChjb25zb2xlLmxvZygi5rOV5biB5L2Z6aKdIiwgdC5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAoZS5hc3NldF9saXN0ID0gdC5kYXRhLm1lc3NhZ2UubGVnYWxfd2FsbGV0LmJhbGFuY2UpLAogICAgICAgICAgICAgICAgICAoZS5jaGFuZ2VCYWxhbmNlID0gdC5kYXRhLm1lc3NhZ2UuY2hhbmdlX3dhbGxldC5iYWxhbmNlKSwKICAgICAgICAgICAgICAgICAgKGUudG90bGUgPSB0LmRhdGEubWVzc2FnZS5sZWdhbF93YWxsZXQudXNkdF90b3RsZSksCiAgICAgICAgICAgICAgICAgIChlLnN0YXR1cyA9IHQuZGF0YS5tZXNzYWdlLmlzX29wZW5fQ1RiaSkpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBtb3JlRGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIChlLnBhZ2UgPSBlLnBhZ2UgKyAxKSwKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xlZ2FsX2xvZyIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgdHlwZTogIjEiLCBjdXJyZW5jeTogZS5jdXJyZW5jeSwgcGFnZTogZS5wYWdlIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBpZiAoIm9rIiA9PSB0LmRhdGEudHlwZSkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IGUuYXNzZXRfbGlzdDsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBhKQogICAgICAgICAgICAgICAgICAgIGUuY3VycmVuY3kgPT0gYVtpXS5jdXJyZW5jeSAmJgogICAgICAgICAgICAgICAgICAgICAgKChlLmFjdGl2ZTAyID0gaSksCiAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5saXN0Lmxlbmd0aCA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgPyAoZS5yZWNEYXRhID0gZS5yZWNEYXRhLmNvbmNhdCh0LmRhdGEubWVzc2FnZS5saXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAoZS5tb3JlID0gZS4kdCgibm9tb3JlIikpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICB0cmFuc2ZlcjogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICBhLnRyYW5zZmVyRGF0YS5tb2RhbFNob3cgPSAhMDsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGxvYWRGaWxlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgYSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAgICAgICBhLmFwcGVuZCgiZmlsZSIsIGUuZmlsZSksCiAgICAgICAgICAgICAgdGhpcy4kaHR0cAogICAgICAgICAgICAgICAgLnBvc3QoIi9hcGkvdXBsb2FkIiwgYSwgewogICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICJDb250ZW50LVR5cGUiOiAibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgfSwKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICB2YXIgYSA9IGUuZGF0YTsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSBhLnR5cGUKICAgICAgICAgICAgICAgICAgICA/ICh0LmZvcm0ucGljID0gW3sgbmFtZTogIlVwbG9hZGVkIiwgdXJsOiBhLm1lc3NhZ2UgfV0pCiAgICAgICAgICAgICAgICAgICAgOiBsYXllci5tc2coYS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1pdENoYXJnZUluZm86IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0ge307CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAoKHQuY3VycmVuY3kgPSBlKSwKICAgICAgICAgICAgICAodC5hY2MgPSB0aGlzLmZvcm0uZnJvbSksCiAgICAgICAgICAgICAgKHQuaGFzaCA9IHRoaXMuZm9ybS5oYXNoKSwKICAgICAgICAgICAgICAodC5hbW91bnQgPSB0aGlzLmZvcm0ubnVtKSwKICAgICAgICAgICAgICB0LmFjYyAmJgogICAgICAgICAgICAgICAgdC5oYXNoICYmCiAgICAgICAgICAgICAgICB0LmFtb3VudCAmJgogICAgICAgICAgICAgICAgdC5jdXJyZW5jeSAmJgogICAgICAgICAgICAgICAgISh0aGlzLmZvcm0ucGljLmxlbmd0aCA8IDEpKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICB0LnBpYyA9IHRoaXMuZm9ybS5waWNbMF0udXJsOwogICAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2NoYXJnZV9yZXEiLAogICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICBkYXRhOiB0LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coIlJlY2hhcmdlIGFwcGxpY2F0aW9uIHN1Ym1pdHRlZCIpLAogICAgICAgICAgICAgICAgICAgIChhLmZvcm0ubnVtID0gIiIpLAogICAgICAgICAgICAgICAgICAgIChhLmZvcm0uZnJvbSA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAoYS5mb3JtLmhhc2ggPSAiIiksCiAgICAgICAgICAgICAgICAgICAgKGEuZm9ybS5waWMgPSBbXSkpCiAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKCJSZWNoYXJnZSBhcHBsaWNhdGlvbiBzdWJtaXNzaW9uIGZhaWxlZCIpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgbGF5ZXIubXNnKCLlj4LmlbDplJnor68iKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiI7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICBlLmdldGRhdGEoKSwgZS5pbml0KCk7CiAgICAgICAgfSwKICAgICAgfSwKICAgICAgRG8gPSBWbywKICAgICAgUm8gPQogICAgICAgIChhKCIxZWNmIiksCiAgICAgICAgYSgiMmUyNyIpLAogICAgICAgIE9iamVjdChoWyJhIl0pKERvLCBNbywgRW8sICExLCBudWxsLCAiMDUxYmQ3MjMiLCBudWxsKSksCiAgICAgIFVvID0gUm8uZXhwb3J0cywKICAgICAgT28gPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7fSwgWwogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImhlYWRlciBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0sIFsKICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC50b3RhbGFzc2V0cyIpKSArICLvvJogIiksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhc3NldF9udW0iIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKGUudG90bGUpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhc3NldF9uYW1lIiB9LCBbZS5fdigiIFVTRFQiKV0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmciByaWdodF90ZXh0IiB9LCBbCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhZGRyZXNzIGhpZGUiLAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS53aXRoZHJhd19hZGRyZXNzIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LnVwYWRkcmVzcyIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IGZDb2xvcjEgZnQxMiIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudF90b3AgZmxleCBhbGNlbnRlciBmQ29sb3IyIiB9LCBbCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoIm1hcmtldC5jdXJyZW5jeSIpKSArICIgIiksCiAgICAgICAgICAgICAgICBhKCJpIiksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmZyZWV6ZXMiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmNvbnZlcnNpb24iKSkgKyAiKFVTRFQpIiksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgW2UuX3YoZS5fcyhlLiR0KCJkbyIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29udGVudF91bCIgfSwKICAgICAgICAgICAgICBlLl9sKGUuYXNzZXRfbGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAxID09IHQuaXNfbWF0Y2gKICAgICAgICAgICAgICAgICAgPyBhKCJsaSIsIHsga2V5OiBpIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29udGVudF9saSBmbGV4IGFsY2VudGVyIGJldHdlZW4iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jdXJyZW5jeV9uYW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKHQuY2hhbmdlX2JhbGFuY2UgfHwgIjAuMDAiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5sb2NrX2NoYW5nZV9iYWxhbmNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvRml4ZWRzIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnVzZHRfcHJpY2UgKiB0LmNoYW5nZV9iYWxhbmNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIG9wZXJhdGlvbiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJUQyIgPT09IHQuY3VycmVuY3lfbmFtZSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVTRFQiID09PSB0LmN1cnJlbmN5X25hbWUgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFVEgiID09PSB0LmN1cnJlbmN5X25hbWUKICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZXhjaGFyZ2UoaSwgdC5jdXJyZW5jeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQuY2hhcmdpbmciKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQlRDIiA9PT0gdC5jdXJyZW5jeV9uYW1lIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVNEVCIgPT09IHQuY3VycmVuY3lfbmFtZSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVUSCIgPT09IHQuY3VycmVuY3lfbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS53aXRoZHJhdyhpLCB0LmN1cnJlbmN5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC53aXRoZHJhdyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucmVjKGksIHQuY3VycmVuY3kpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQucmVjb3JkIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBpID09IGUuYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImhpZGVfZGl2IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAiNjAwcHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGV4dC1hbGlnbiI6ICJjZW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICIwIGF1dG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDE0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmNnYWRkcmVzcyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC10YWJzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IG1hcmdpbjogIjEwcHggMCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYm9yZGVyLWNhcmQiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgInRhYi1jbGljayI6IGUuY2hhbmdlVVNEVCB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGUudXNkdF93YWxsZXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMgPT0gZS5jdXJyZW5jeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgiZWwtdGFiLXBhbmUiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHQudG9VcHBlckNhc2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbWciLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm10MTAgbWIxNSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyB3aWR0aDogIjIwMHB4IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiID09IGUucXJjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICJodHRwczovLyIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRvbWFpbiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvYXBpL3FyY29kZT90ZXh0PSIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmV4Y2hhcmdlX2FkZHJlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5xcmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiIG1iNTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZ0MTggZkNvbG9yMSBleGNoYXJnZV9hZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBiZzogZS5mbGFncyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuZXhjaGFyZ2VfYWRkcmVzcykpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29weSBmdDE0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogImNvcHkiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuY29weSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQuY29weSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJld21fd3JhcCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImV3bSBmdDE0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLnNob3dfZXdtIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQuY29kZSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImV3bV9pbWciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGhpZGU6IGUuaXNIaWRlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6ICJjb2RlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1mb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6ICJmb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkluRm9yOiAhMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBlLmZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbC13aWR0aCI6ICIxNjBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbC1zdHlsZSI6ICJjb2xvcjojZmZmOyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLWZvcm0taXRlbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsYWJlbDogZS4kdCgiYWNjb3VudC5hbW91bnQiKSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZWwtaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgiYWNjb3VudC5hbW91bnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5mb3JtLm51bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS4kc2V0KGUuZm9ybSwgIm51bSIsIHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiZm9ybS5udW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1mb3JtLWl0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLiR0KCJhY2NvdW50LmNnYWRkcmVzcyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJlbC1pbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHQoImFjY291bnQuY2dhZGRyZXNzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuZm9ybS5mcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoZS5mb3JtLCAiZnJvbSIsIHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiZm9ybS5mcm9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtZm9ybS1pdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaGlkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLiR0KCJ3aXRoZHJhd0xpc3QuaGFzaCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJlbC1pbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHQoIndpdGhkcmF3TGlzdC5oYXNoIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuZm9ybS5oYXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoZS5mb3JtLCAiaGFzaCIsIHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiZm9ybS5oYXNoIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtZm9ybS1pdGVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxhYmVsOiBlLiR0KCJhY2NvdW50LnBpY3R1cmUiKSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC11cGxvYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6ICJ1cGxvYWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkluRm9yOiAhMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ1cGxvYWQtZGVtbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBlLnVwbG9hZFVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBlLnVwbG9hZEhlYWRlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAtcmVxdWVzdCI6IGUudXBsb2FkRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogITEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QtdHlwZSI6ICJwaWN0dXJlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZS1saXN0IjogZS5mb3JtLnBpYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLWJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogIm1pbmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmNob29zZSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImVsLXVwbG9hZF9fdGlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzbG90OiAidGlwIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Q6ICJ0aXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1mb3JtLWl0ZW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbC1idXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJwcmltYXJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAibWVkaXVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnN1Ym1pdENoYXJnZUluZm8oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuY3VycmVuY3kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHQoImFjY291bnQuc3VibWl0UmVjaGFyZ2UiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgZkNvbG9yMiBtYjE1IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQubm90aWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfdWwgZnQxMiBmQ29sb3IyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5hMSIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3ModC5jdXJyZW5jeV9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5hMiIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRoIiA9PSB0LmN1cnJlbmN5X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX2xpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC5hNCIpKSArICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiYnRjIiA9PSB0LmN1cnJlbmN5X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX2xpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC5hOSIpKSArICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAidXNkdCIgPT0gdC5jdXJyZW5jeV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKGUuJHQoImFjY291bnQuYTQiKSkgKyAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm9tbmkiID09IHQuY3VycmVuY3lfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBVU0RUIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQuYTMiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICBpID09IGUuYWN0aXZlMDEKICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiaGlkZV9kaXYiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVsLXRhYnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IG1hcmdpbjogIjEwcHggMCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJib3JkZXItY2FyZCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7ICJ0YWItY2xpY2siOiBlLmNoYW5nZVVTRFQxIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9sKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImVyYzIwIiwgInRyYzIwIiwgIm9tbmkiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMyA9PSBlLmN1cnJlbmN5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoImVsLXRhYi1wYW5lIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxhYmVsOiB0LnRvVXBwZXJDYXNlKCkgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTIgbWIxNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jaGFkZHJlc3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYWRkcmVzc19pbnAgZkNvbG9yMSBtYjMwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS50aWJpX21zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmFkZHJlc3MgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5hZGRyZXNzID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZDb2xvcjIgZnQxMiBtYjE1IGZsZXggYmV0d2VlbiBhbGNlbnRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZW50ZXIuYXZhaWxhYmxlIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yaICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInVzZV9udW0iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9GaXhlZHMiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5iYWxhbmNlIHx8ICIwLjAwIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuY29pbm5hbWUpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm51bV9sYWIgZmxleCBiZXR3ZWVuIG1iMzAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGNvbG9yOiAid2hpdGUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBlLm1pbl9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUubnVtYmVyIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLm51bWJlciA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5jb2lubmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBtYjUwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxlZnRfaW5wX3dyYXAgZmxleDEiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDEyIG1iMTUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInJhdGUiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYW5nZV9sYWIgZmxleCBhbGNlbnRlciBiZXR3ZWVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUucmF0ZW51bSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5jb2lubmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJyaWdodF9pbnBfd3JhcCBmbGV4MSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIm1iMTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImZDb2xvcjIgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQuaGF2ZW51bSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRfbGFiIGZsZXggYWxjZW50ZXIgYmV0d2VlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5udW1iZXIgLSBlLnJhdGVudW0gPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5udW1iZXIgLSBlLnJhdGVudW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuY29pbm5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zaG93Q29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDEyIG1iMTUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInNlbmRNYWlsIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zaG93Q29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibnVtX2xhYiBmbGV4IGJldHdlZW4gbWIzMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuYW5xdWFuY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImFucXVhbmNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZkNvbG9yMSBmbGV4MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgY29sb3I6ICJ3aGl0ZSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHQoInNlbmRNYWlsSW5wdXQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmFucXVhbmNvZGUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmFucXVhbmNvZGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWwtbGluayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGUuc2VuZGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicHJpbWFyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuc2VuZE1lc3NhZ2UgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgic2VuZCIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleDIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhZGRpbmctcmlnaHQiOiAiMTBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZnQxMiBmQ29sb3IyIG1iMTUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5ub3RpY2UiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfdWwgZnQxMiBmQ29sb3IyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX2xpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiR0KCJhY2NvdW50Lm1pbm51bSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICLvvJoiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5taW5fbnVtYmVyX3R4dCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmNvaW5uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi44CCIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiR0KCJhY2NvdW50Lm9uY2VtYXhudW0iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yaIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUubWF4X251bWJlcikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmNvaW5uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi44CCIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiR0KCJhY2NvdW50LmRheW51bSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5kYXlfbGltaXQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jb2lubmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX2xpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmNhbGwiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAid2l0aGRyYXdfYnRuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUubWVudGlvbiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC53aXRoZHJhdyIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgIGkgPT0gZS5hY3RpdmUwMgogICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJoaWRlX2RpdiByZWMtYm94IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVjLWNvbiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVjLXRpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibnVtYmVyIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJ0aW1lIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJyZWMtbGlzdCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUucmVjRGF0YSwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJsaSIsIHsga2V5OiBpIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9GaXhlZHMiKSh0LnZhbHVlIHx8ICIwLjAwIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LmNyZWF0ZWRfdGltZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibW9yZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5tb3JlRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5tb3JlKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICA6IGUuX2UoKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAwCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICBdKTsKICAgICAgfSwKICAgICAgV28gPSBbXSwKICAgICAgam8gPQogICAgICAgIChhKCJiNjRiIiksCiAgICAgICAgewogICAgICAgICAgbmFtZTogImZpbmFuY2UiLAogICAgICAgICAgZmlsdGVyczogewogICAgICAgICAgICB0b0ZpeGVkczogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoOCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9LAogICAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGFucXVhbmNvZGU6ICIiLAogICAgICAgICAgICAgIHNlbmRlZDogITEsCiAgICAgICAgICAgICAgZG9tYWluOiAiIiwKICAgICAgICAgICAgICBxcmNvZGU6ICIiLAogICAgICAgICAgICAgIHNob3dDb2RlOiBzaG93UG9zdFZlcmlmeSwKICAgICAgICAgICAgICB0b3RsZTogIiIsCiAgICAgICAgICAgICAgcmVjRGF0YTogW10sCiAgICAgICAgICAgICAgdG9rZW46ICIiLAogICAgICAgICAgICAgIGZsYWdzOiAhMSwKICAgICAgICAgICAgICBmbGFnOiAhMSwKICAgICAgICAgICAgICBpc0hpZGU6ICEwLAogICAgICAgICAgICAgIGFjdGl2ZTogImEiLAogICAgICAgICAgICAgIGFjdGl2ZTAxOiAiYSIsCiAgICAgICAgICAgICAgdGliaV9tc2c6ICIiLAogICAgICAgICAgICAgIGFjdGl2ZTAyOiAiYSIsCiAgICAgICAgICAgICAgYWRkcjogIiIsCiAgICAgICAgICAgICAgdXJsOiAiIiwKICAgICAgICAgICAgICBleGNoYXJnZV9hZGRyZXNzOiAiIiwKICAgICAgICAgICAgICBhZGRyZXNzOiAiIiwKICAgICAgICAgICAgICBudW1iZXI6ICIiLAogICAgICAgICAgICAgIHJhdGU6ICIiLAogICAgICAgICAgICAgIGNvaW5uYW1lOiAiIiwKICAgICAgICAgICAgICBiYWxhbmNlOiAiIiwKICAgICAgICAgICAgICByYXRlbnVtOiAiIiwKICAgICAgICAgICAgICByZWFjaG51bTogIiIsCiAgICAgICAgICAgICAgbWluX251bWJlcjogIiIsCiAgICAgICAgICAgICAgbWluX251bWJlcl90eHQ6ICIiLAogICAgICAgICAgICAgIGN1cnJlbmN5OiAiIiwKICAgICAgICAgICAgICBhc3NldF9saXN0OiBbXSwKICAgICAgICAgICAgICB0aXBfbGlzdDogWwogICAgICAgICAgICAgICAgdGhpcy4kdCgiYWNjb3VudC5hMSIpICsgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMiIpLAogICAgICAgICAgICAgICAgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMyIpLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgdGlwX2xpc3QwMTogWwogICAgICAgICAgICAgICAgdGhpcy4kdCgiYWNjb3VudC5hMSIpICsgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMiIpLAogICAgICAgICAgICAgICAgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMyIpLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgICBtb3JlOiB0aGlzLiR0KCJtb3JlIiksCiAgICAgICAgICAgICAgYmFsYW5jZUxpc3Q6IFsKICAgICAgICAgICAgICAgIHRoaXMuJHQoImFjY291bnQubGFjY291bnQiKSwKICAgICAgICAgICAgICAgIHRoaXMuJHQoInVzZXJjZW50ZXIubGV2ZXIiKSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHRyYW5zZmVyRGF0YTogewogICAgICAgICAgICAgICAgbW9kYWxTaG93OiAhMSwKICAgICAgICAgICAgICAgIHRyYW5zZmVyTmFtZTogIiIsCiAgICAgICAgICAgICAgICB0cmFuc2ZlckJhbGFuY2U6ICIiLAogICAgICAgICAgICAgICAgc3RhcnQ6ICIiLAogICAgICAgICAgICAgICAgZW5kOiAiIiwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHN0YXR1czogIiIsCiAgICAgICAgICAgICAgZm9ybTogeyBmcm9tOiAiIiwgbnVtOiAiIiwgcGljOiBbXSwgaGFzaDogIiIgfSwKICAgICAgICAgICAgICB1cGxvYWRVcmw6ICIiLAogICAgICAgICAgICAgIHVwbG9hZEhlYWRlcnM6IHt9LAogICAgICAgICAgICAgIHVzZHRfd2FsbGV0OiB7fSwKICAgICAgICAgICAgICB0aWJpVHlwZTogMCwKICAgICAgICAgICAgfTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBsZWZ0OiBubiB9LAogICAgICAgICAgbWV0aG9kczogewogICAgICAgICAgICBnb1JlY29yZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImNvaW5SZWNvcmQiIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzZW5kTWVzc2FnZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHRoaXMuc2VuZGVkID0gITA7CiAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9zbXNfbWFpbF9hcSIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgPyAoKGUuc2VuZGVkID0gITApLAogICAgICAgICAgICAgICAgICAgIGUuJG1lc3NhZ2Uuc3VjY2Vzcyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICBlLnNlbmRlZCA9ICExOwogICAgICAgICAgICAgICAgICAgIH0sIDZlNCkpCiAgICAgICAgICAgICAgICAgIDogKGUuc2VuZGVkID0gITEpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjaGFuZ2VVU0RUOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIHZhciBhID0gT2JqZWN0LmtleXModGhpcy51c2R0X3dhbGxldClbZS5pbmRleF07CiAgICAgICAgICAgICAgdGhpcy5leGNoYXJnZV9hZGRyZXNzID0gdGhpcy51c2R0X3dhbGxldFthXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY2hhbmdlVVNEVDE6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICAgdGhpcy50aWJpVHlwZSA9IGUuaW5kZXg7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICAgKGUudXBsb2FkSGVhZGVycyA9IHsKICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpLAogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgKGUudXBsb2FkVXJsID0gZS4kdXRpbHMuYmFja19hcGkgKyAiYXBpL3VwbG9hZCIpOwogICAgICAgICAgICAgIHZhciB0ID0gbmV3IENsaXBib2FyZCgiLmNvcHkiKTsKICAgICAgICAgICAgICB0Lm9uKCJzdWNjZXNzIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGxheWVyLmFsZXJ0KGUuJHQoImxheS5jb3B5cyIpKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIHQub24oImVycm9yIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgYWxlcnQoZS4kdCgibGF5LmZjb3B5IikpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGV4Y2hhcmdlOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUsIHQpLAogICAgICAgICAgICAgICAgMSA9PSB0aGlzLnN0YXR1cwogICAgICAgICAgICAgICAgICA/ICgodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZwogICAgICAgICAgICAgICAgICAgICAgPyAoKHRoaXMuZmxhZyA9ICExKSwKICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpCiAgICAgICAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUgPSBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpLAogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZERhdGEodCkpCiAgICAgICAgICAgICAgICAgIDogbGF5ZXIuYWxlcnQodGhpcy4kdCgibm90b3BlbiIpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2VuZERhdGE6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgICAgYSA9IHRoaXM7CiAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9nZXRfaW5fYWRkcmVzcyIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUgfSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYS50b2tlbiB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICBpZiAoIm9rIiA9PSBpLmRhdGEudHlwZSkKICAgICAgICAgICAgICAgICAgICBpZiAoMSA9PSBlIHx8IDMgPT0gZSB8fCAyID09IGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgKChhLmV4Y2hhcmdlX2FkZHJlc3MgPQogICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZSA/IGkuZGF0YS5tZXNzYWdlLmJ0YyA6IGkuZGF0YS5tZXNzYWdlLnVzZHQpLAogICAgICAgICAgICAgICAgICAgICAgICAoYS5leGNoYXJnZV9hZGRyZXNzID0gaS5kYXRhLm1lc3NhZ2UuYWRkcmVzcyksCiAgICAgICAgICAgICAgICAgICAgICAgIChhLnFyY29kZSA9IGkuZGF0YS5tZXNzYWdlLnFyY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgIDMgPT0gdC5jdXJyZW5jeSkKICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGkuZGF0YS5tZXNzYWdlLmFkZHJlc3M7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG4pOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobikgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gbi5zcGxpdCgiLCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxID09IG8ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IG9bMF0uc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gci5sZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoc1siZXJjMjAiXSA9IHJbMF0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKHNbclswXV0gPSByWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8uZm9yRWFjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGUuc3BsaXQoIjoiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5sZW5ndGggPiAxICYmIChzW3RbMF1dID0gdFsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAoYS51c2R0X3dhbGxldCA9IHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoYS51c2R0X3dhbGxldCkubGVuZ3RoID4gMSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYS5leGNoYXJnZV9hZGRyZXNzID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnVzZHRfd2FsbGV0W09iamVjdC5rZXlzKGEudXNkdF93YWxsZXQpWzBdXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgIChhLmV4Y2hhcmdlX2FkZHJlc3MgPSAiTm90IHN1cHBvcnQgeWV0ISIpLAogICAgICAgICAgICAgICAgICAgICAgICAkKCIjY29kZSIpLnFyY29kZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEzMCwKICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEzMCwKICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBhLmV4Y2hhcmdlX2FkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICB3aXRoZHJhdzogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgICAxID09IHRoaXMuc3RhdHVzCiAgICAgICAgICAgICAgICA/ICgodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgICB0aGlzLmZsYWcKICAgICAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAxID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSBlKSwKICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpLAogICAgICAgICAgICAgICAgICB0aGlzLmdldE51bSh0KSkKICAgICAgICAgICAgICAgIDogbGF5ZXIuYWxlcnQodGhpcy4kdCgibm90b3BlbiIpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVjOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgICAodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgKHRoaXMucmVjRGF0YSA9IFtdKSwKICAgICAgICAgICAgICAgIHRoaXMuZmxhZwogICAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgICAgOiAoKHRoaXMuZmxhZyA9ICEwKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9IGUpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDEgPSAiYSIpLAogICAgICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB0eXBlOiAyLCBjdXJyZW5jeTogdCwgcGFnZTogMSB9LAogICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJiAoYS5yZWNEYXRhID0gZS5kYXRhLm1lc3NhZ2UubGlzdCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBnZXROdW06IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9nZXRfaW5mbyIsCiAgICAgICAgICAgICAgICBkYXRhOiB7IGN1cnJlbmN5OiBlIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgKGUgPSBlLmRhdGEpLAogICAgICAgICAgICAgICAgICAodC5jb2lubmFtZSA9IGUubWVzc2FnZS5uYW1lKSwKICAgICAgICAgICAgICAgICAgKHQuYmFsYW5jZSA9IGUubWVzc2FnZS5jaGFuZ2VfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgICh0Lm1pbl9udW1iZXIgPQogICAgICAgICAgICAgICAgICAgIHQuJHQoImFjY291bnQubWlubnVtIikgKwogICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoZS5tZXNzYWdlLm1pbl9udW1iZXIpLnRvRml4ZWQoMikpLAogICAgICAgICAgICAgICAgICAodC5taW5fbnVtYmVyX3R4dCA9IHBhcnNlRmxvYXQoZS5tZXNzYWdlLm1pbl9udW1iZXIpLnRvRml4ZWQoCiAgICAgICAgICAgICAgICAgICAgOAogICAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgICAgICAgKHQubWlubnVtYmVyID0gZS5tZXNzYWdlLm1pbl9udW1iZXIpLAogICAgICAgICAgICAgICAgICAodC5tYXhfbnVtYmVyID0gZS5tZXNzYWdlLm1heF9udW1iZXIpLAogICAgICAgICAgICAgICAgICAodC5kYXlfbGltaXQgPSBlLm1lc3NhZ2UuZGF5X2xpbWl0KSwKICAgICAgICAgICAgICAgICAgKHQucmF0ZW51bSA9IGUubWVzc2FnZS5yYXRlKSwKICAgICAgICAgICAgICAgICAgKHQucmVhY2hudW0gPSAwKSwKICAgICAgICAgICAgICAgICAgKHQucmF0ZSA9IGUubWVzc2FnZS5yYXRlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbWVudGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICAgIHQgPSAodGhpcy5jdXJyZW5jeSwgdGhpcy5hZGRyZXNzKSwKICAgICAgICAgICAgICAgIGEgPSB0aGlzLm51bWJlciwKICAgICAgICAgICAgICAgIGkgPSAodGhpcy5yYXRlLCB0aGlzLm1pbm51bWJlcik7CiAgICAgICAgICAgICAgaWYgKHQpIHsKICAgICAgICAgICAgICAgIGlmIChhKQogICAgICAgICAgICAgICAgICByZXR1cm4gYSAtIDAgPCBpCiAgICAgICAgICAgICAgICAgICAgPyBsYXllci5hbGVydChlLiR0KCJsYXkubWlubnVtIiksIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuJHQoImF1dGgyLnJlbWluZGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGJ0bjogW2UuJHQoImxheS5zdXJlIildLAogICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICA6IHZvaWQgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9vdXQiLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiB0aGlzLm51bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiB0aGlzLmFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZTogdGhpcy5yYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMudGliaVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZWNvZGU6IHRoaXMuYW5xdWFuY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAodCA9IHQuZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSB0LnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGxheWVyLmFsZXJ0KHQubWVzc2FnZSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBlLiR0KCJhdXRoMi5yZW1pbmRlciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bjogW2UuJHQoImxheS5zdXJlIildLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxNTAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGF5ZXIuYWxlcnQodC5tZXNzYWdlLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGUuJHQoImF1dGgyLnJlbWluZGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuOiBbZS4kdCgibGF5LnN1cmUiKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBsYXllci5hbGVydChlLiR0KCJsYXkuY251bWJlciIpLCB7CiAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLiR0KCJhdXRoMi5yZW1pbmRlciIpLAogICAgICAgICAgICAgICAgICBidG46IFtlLiR0KCJsYXkuc3VyZSIpXSwKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgbGF5ZXIuYWxlcnQoZS4kdCgibGF5LmNhZGRyZXNzIiksIHsKICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuJHQoImF1dGgyLnJlbWluZGVyIiksCiAgICAgICAgICAgICAgICAgIGJ0bjogW2UuJHQoImxheS5zdXJlIildLAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGV4Y2hhbmdlOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgICAgY29weTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICAgIHQgPSBuZXcgQ2xpcGJvYXJkKCIuY29weSIsIHsKICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmV4Y2hhcmdlX2FkZHJlc3M7CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB0Lm9uKCJzdWNjZXNzIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIChlLmZsYWdzID0gITApLCBsYXllci5tc2coZS4kdCgibGF5LmNvcHlzIikpOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgdC5vbigiZXJyb3IiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAoZS5mbGFncyA9ICExKSwgbGF5ZXIubXNnKGUuJHQoImxheS5mY29weSIpKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWNvcmQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICJmaW5hbnJlYyIgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHdpdGhkcmF3X2FkZHJlc3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICJ3aXRoZHJhd19hZGRyZXNzIiB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc2hvd19ld206IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB0aGlzLmlzSGlkZSA/ICh0aGlzLmlzSGlkZSA9ICExKSA6ICh0aGlzLmlzSGlkZSA9ICEwKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZ2V0ZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xpc3QiLAogICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7fSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICAgKChlLmFzc2V0X2xpc3QgPSB0LmRhdGEubWVzc2FnZS5jaGFuZ2Vfd2FsbGV0LmJhbGFuY2UpLAogICAgICAgICAgICAgICAgICAgIChlLnRvdGxlID0gdC5kYXRhLm1lc3NhZ2UuY2hhbmdlX3dhbGxldC51c2R0X3RvdGxlKSwKICAgICAgICAgICAgICAgICAgICAoZS5zdGF0dXMgPSB0LmRhdGEubWVzc2FnZS5pc19vcGVuX0NUYmkpKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbW9yZURhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICAgKGUucGFnZSA9IGUucGFnZSArIDEpLAogICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xlZ2FsX2xvZyIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB7IHR5cGU6ICIyIiwgY3VycmVuY3k6IGUuY3VycmVuY3ksIHBhZ2U6IGUucGFnZSB9LAogICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGUuYXNzZXRfbGlzdDsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGEpCiAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbmN5ID09IGFbaV0uY3VycmVuY3kgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKChlLmFjdGl2ZTAyID0gaSksCiAgICAgICAgICAgICAgICAgICAgICAgIHQuZGF0YS5tZXNzYWdlLmxpc3QubGVuZ3RoID4gMAogICAgICAgICAgICAgICAgICAgICAgICAgID8gKGUucmVjRGF0YSA9IGUucmVjRGF0YS5jb25jYXQodC5kYXRhLm1lc3NhZ2UubGlzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZS5tb3JlID0gZS4kdCgibm9tb3JlIikpKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRyYW5zZmVyOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgIHZhciBhID0gdGhpczsKICAgICAgICAgICAgICBhLnRyYW5zZmVyRGF0YS5tb2RhbFNob3cgPSAhMDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdXBsb2FkRmlsZTogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgICBhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgICAgICAgICAgYS5hcHBlbmQoImZpbGUiLCBlLmZpbGUpLAogICAgICAgICAgICAgICAgdGhpcy4kaHR0cAogICAgICAgICAgICAgICAgICAucG9zdCgiL2FwaS91cGxvYWQiLCBhLCB7CiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAiQ29udGVudC1UeXBlIjogIm11bHRpcGFydC9mb3JtLWRhdGEiIH0sCiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBlLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgID8gKHQuZm9ybS5waWMgPSBbeyBuYW1lOiAiVXBsb2FkZWQiLCB1cmw6IGEubWVzc2FnZSB9XSkKICAgICAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBzdWJtaXRDaGFyZ2VJbmZvOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHZhciB0ID0ge307CiAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgKCh0LmN1cnJlbmN5ID0gZSksCiAgICAgICAgICAgICAgICAodC5hY2MgPSB0aGlzLmZvcm0uZnJvbSksCiAgICAgICAgICAgICAgICAodC5oYXNoID0gdGhpcy5mb3JtLmhhc2gpLAogICAgICAgICAgICAgICAgKHQuYW1vdW50ID0gdGhpcy5mb3JtLm51bSksCiAgICAgICAgICAgICAgICAodC50eXBlID0gdGhpcy5leGNoYXJnZV9hZGRyZXNzKSwKICAgICAgICAgICAgICAgIHQuYW1vdW50KQogICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgKHQuYWNjID0gdC5hY2MgPyB0LmFjYyA6ICJkZWZhdWx0IiksCiAgICAgICAgICAgICAgICAgICh0LnBpYyA9CiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBpYy5sZW5ndGggPiAwID8gdGhpcy5mb3JtLnBpY1swXS51cmwgOiAiMTExIik7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXM7CiAgICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY2hhcmdlX3JlcSIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB0LAogICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZygiUmVjaGFyZ2UgYXBwbGljYXRpb24gc3VibWl0dGVkIiksCiAgICAgICAgICAgICAgICAgICAgICAoYS5mb3JtLm51bSA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAgIChhLmZvcm0uZnJvbSA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAgIChhLmZvcm0uaGFzaCA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAgIChhLmZvcm0ucGljID0gW10pKQogICAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKCJSZWNoYXJnZSBhcHBsaWNhdGlvbiBzdWJtaXNzaW9uIGZhaWxlZCIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBlbHNlIGxheWVyLm1zZygicGxlYXNlIGlucHV0IG51bWJlciIpOwogICAgICAgICAgICB9LAogICAgICAgICAgfSwKICAgICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiOwogICAgICAgICAgfSwKICAgICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAodGhpcy5kb21haW4gPSB0aGlzLiR1dGlscy5kb21haW4pLCBlLmdldGRhdGEoKSwgZS5pbml0KCk7CiAgICAgICAgICB9LAogICAgICAgIH0pLAogICAgICBxbyA9IGpvLAogICAgICBHbyA9CiAgICAgICAgKGEoIjFjZDUiKSwKICAgICAgICBhKCJlNGE5IiksCiAgICAgICAgT2JqZWN0KGhbImEiXSkocW8sIE9vLCBXbywgITEsIG51bGwsICIxMTEwZmQ1OCIsIG51bGwpKSwKICAgICAgWm8gPSBHby5leHBvcnRzLAogICAgICBRbyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluIiB9LCBbCiAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImxlZ2FsX25hbWUgcGxyMTAiIH0sIFsKICAgICAgICAgICAgZS5fdihlLl9zKGUubGVnYWxfbmFtZSkpLAogICAgICAgICAgXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibGVnYWxBY2NvdW50X21zZyBmbGV4IGJldHdlZW4gcGxyMTAiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBtc2dfdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuYXZhaWxhYmxlIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKGUubGVnYWxfYmFsYW5jZSkpKV0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBtc2dfdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmZyZWV6ZXMiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuX2YoInRvRml4ZWRzIikoZS5sb2NrX2xlZ2FsX2JhbGFuY2UpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIFsKICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZ0MTIgbXNnX3RpdGxlIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jb252ZXJzaW9uIikpICsgIu+8iENOWe+8iSIpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuX2YoInRvRml4ZWRzIikoZS5jbnlfcHJpY2UpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWNfd3JhcCIgfSwgWwogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogInJlY190aXRsZSBmbGV4IGJldHdlZW4iIH0sIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50Lm1yZWNvcmQiKSkpXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhbGwiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjZW50ZXIuYWxsIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAibGlzdF90aXRsZSBmbGV4IiB9LCBbCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmdDE0IiB9LCBbZS5fdihlLl9zKGUuJHQoIm51bWJlciIpKSldKSwKICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZ0MTQgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LnJlY29yZCIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmdDE0IHRyIiB9LCBbZS5fdihlLl9zKGUuJHQoInRpbWUiKSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxvZ19saXN0IiB9LAogICAgICAgICAgICAgIGUuX2woZS5saXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFycm91bmQgZnQxMiBmbGV4IGFyb3VuZCIgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuX2YoInRvRml4ZWRzIikodC52YWx1ZSkpKV0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidGMiIH0sIFtlLl92KGUuX3ModC5pbmZvKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jcmVhdGVkX3RpbWUpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAwCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGUubW9yZQogICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0YyBmdDEyIGN1clBlciBtdDIwIiwKICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmdldE1vcmUoKTsKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJtb3JlIikpKV0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICA6IGEoInAiLCB7IHN0YXRpY0NsYXNzOiAidGMgZnQxMiBjdXJQZXIgbXQyMCIgfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibm9kYXRhIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIEhvID0gW10sCiAgICAgIEtvID0gewogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGN1cnJlbmN5OiAiIiwKICAgICAgICAgICAgbGVnYWxfbmFtZTogIiIsCiAgICAgICAgICAgIGxlZ2FsX2JhbGFuY2U6ICIiLAogICAgICAgICAgICBsb2NrX2xlZ2FsX2JhbGFuY2U6ICIiLAogICAgICAgICAgICBjbnlfcHJpY2U6ICIiLAogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBsaXN0OiBbXSwKICAgICAgICAgICAgbW9yZTogITAsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9GaXhlZHM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCgyKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKSwKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3kgPSB0aGlzLiRyb3V0ZS5xdWVyeS5jdXJyZW5jeV9pZCk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmluaXQoKSwgdGhpcy5sZWdhbF9sb2coKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9kZXRhaWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUuY3VycmVuY3ksIHR5cGU6ICJsZWdhbCIgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGUudG9rZW4gfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZTsKICAgICAgICAgICAgICAgICAgKGUubGVnYWxfbmFtZSA9IGEuY3VycmVuY3lfbmFtZSksCiAgICAgICAgICAgICAgICAgICAgKGUubGVnYWxfYmFsYW5jZSA9IGEubGVnYWxfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgICAgKGUubG9ja19sZWdhbF9iYWxhbmNlID0gYS5sb2NrX2xlZ2FsX2JhbGFuY2UpLAogICAgICAgICAgICAgICAgICAgIChlLmNueV9wcmljZSA9IChhLmxlZ2FsX2JhbGFuY2UgLSAwKSAqIGEuY255X3ByaWNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgbGVnYWxfbG9nOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGN1cnJlbmN5OiBlLmN1cnJlbmN5LCB0eXBlOiAxLCBwYWdlOiBlLnBhZ2UgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGUudG9rZW4gfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICAgICAgICBhLmxlbmd0aCA+IDAgPyAoZS5saXN0ID0gZS5saXN0LmNvbmNhdChhKSkgOiAoZS5tb3JlID0gITEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRNb3JlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICh0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxKSwgdGhpcy5sZWdhbF9sb2coKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgSm8gPSBLbywKICAgICAgWW8gPSAoYSgiYzIyYyIpLCBPYmplY3QoaFsiYSJdKShKbywgUW8sIEhvLCAhMSwgbnVsbCwgIjVjYmUzMTQxIiwgbnVsbCkpLAogICAgICBYbyA9IFlvLmV4cG9ydHMsCiAgICAgIGVyID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW4iIH0sIFsKICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAibGVnYWxfbmFtZSBwbHIxMCIgfSwgWwogICAgICAgICAgICBlLl92KGUuX3MoZS5sZWdhbF9uYW1lKSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsZWdhbEFjY291bnRfbXNnIGZsZXggYmV0d2VlbiBwbHIxMCIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIG1zZ190aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuX2YoInRvRml4ZWRzIikoZS5jaGFuZ2VfYmFsYW5jZSkpKV0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBtc2dfdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmZyZWV6ZXMiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuX2YoInRvRml4ZWRzIikoZS5sb2NrX2NoYW5nZV9iYWxhbmNlKSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIG1zZ190aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQuY29udmVyc2lvbiIpKSArICLvvIhDTlnvvIkiKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKGUuY255X3ByaWNlKSkpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgXSksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVjX3dyYXAiIH0sIFsKICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJyZWNfdGl0bGUgZmxleCBiZXR3ZWVuIiB9LCBbCiAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5tcmVjb3JkIikpKV0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYWxsIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiY2VudGVyLmFsbCIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImxpc3RfdGl0bGUgZmxleCIgfSwgWwogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnQxNCIgfSwgW2UuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmdDE0IHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5yZWNvcmQiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZnQxNCB0ciIgfSwgW2UuX3YoZS5fcyhlLiR0KCJ0aW1lIikpKV0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJsb2dfbGlzdCIgfSwKICAgICAgICAgICAgICBlLl9sKGUubGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhKAogICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZmxleCBhcnJvdW5kIGZ0MTIgZmxleCBhcm91bmQiIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKHQudmFsdWUpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInRjIiB9LCBbZS5fdihlLl9zKHQuaW5mbykpXSksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ0ciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3JlYXRlZF90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgMAogICAgICAgICAgICApLAogICAgICAgICAgICBlLm1vcmUKICAgICAgICAgICAgICA/IGEoCiAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGMgZnQxMiBjdXJQZXIgbXQyMCIsCiAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5nZXRNb3JlKCk7CiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibW9yZSIpKSldCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgOiBhKCJwIiwgeyBzdGF0aWNDbGFzczogInRjIGZ0MTIgY3VyUGVyIG10MjAiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoIm5vZGF0YSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICB0ciA9IFtdLAogICAgICBhciA9IHsKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBjdXJyZW5jeTogIiIsCiAgICAgICAgICAgIGxlZ2FsX25hbWU6ICIiLAogICAgICAgICAgICBjaGFuZ2VfYmFsYW5jZTogIiIsCiAgICAgICAgICAgIGxvY2tfY2hhbmdlX2JhbGFuY2U6ICIiLAogICAgICAgICAgICBjbnlfcHJpY2U6ICIiLAogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBsaXN0OiBbXSwKICAgICAgICAgICAgbW9yZTogITAsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9GaXhlZHM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCgyKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAodGhpcy50b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIHx8ICIiKSwKICAgICAgICAgICAgKHRoaXMuY3VycmVuY3kgPSB0aGlzLiRyb3V0ZS5xdWVyeS5jdXJyZW5jeV9pZCk7CiAgICAgICAgfSwKICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmluaXQoKSwgdGhpcy5sZWdhbF9sb2coKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9kZXRhaWwiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUuY3VycmVuY3ksIHR5cGU6ICJjaGFuZ2UiIH0sCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBlLnRva2VuIH0sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhID0gdC5kYXRhLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICAgIChlLmxlZ2FsX25hbWUgPSBhLmN1cnJlbmN5X25hbWUpLAogICAgICAgICAgICAgICAgICAgIChlLmNoYW5nZV9iYWxhbmNlID0gYS5jaGFuZ2VfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgICAgKGUubG9ja19jaGFuZ2VfYmFsYW5jZSA9IGEubG9ja19jaGFuZ2VfYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgICAgKGUuY255X3ByaWNlID0gKGEuY2hhbmdlX2JhbGFuY2UgLSAwKSAqIGEuY255X3ByaWNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgbGVnYWxfbG9nOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGN1cnJlbmN5OiBlLmN1cnJlbmN5LCB0eXBlOiAyLCBwYWdlOiBlLnBhZ2UgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGUudG9rZW4gfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEubWVzc2FnZS5saXN0OwogICAgICAgICAgICAgICAgICBhLmxlbmd0aCA+IDAgPyAoZS5saXN0ID0gZS5saXN0LmNvbmNhdChhKSkgOiAoZS5tb3JlID0gITEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRNb3JlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICh0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxKSwgdGhpcy5sZWdhbF9sb2coKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgaXIgPSBhciwKICAgICAgbnIgPSAoYSgiYTM0MSIpLCBPYmplY3QoaFsiYSJdKShpciwgZXIsIHRyLCAhMSwgbnVsbCwgIjA4NTRmMzU2IiwgbnVsbCkpLAogICAgICBzciA9IG5yLmV4cG9ydHMsCiAgICAgIG9yID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gZS5jb2lucy5sZW5ndGgKICAgICAgICAgID8gYSgiZGl2IiwgeyBhdHRyczogeyBpZDogInRyYW5zZmVyLWxlZ2FsIiB9IH0sIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LnRyYW5zZmVyIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY2hvb3NlLXdyYXAiIH0sIFsKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAiYWxpZ24taXRlbXMiOiAiY2VudGVyIiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCB7IHN0YXRpY0NsYXNzOiAibXIyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQuY2hvb3NlY29pbiIpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJlbC1zZWxlY3QiLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBwbGFjZWhvbGRlcjogIuivt+mAieaLqSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2hhbmdlOiBlLmNoYW5nZUNvaW4gfSwKICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5jb2luSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmNvaW5JbmRleCA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiY29pbkluZGV4IiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUuY29pbnMsIGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJlbC1vcHRpb24iLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxhYmVsOiBlLmN1cnJlbmN5X25hbWUsIHZhbHVlOiB0IH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAiYWxpZ24taXRlbXMiOiAiY2VudGVyIiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCB7IHN0YXRpY0NsYXNzOiAibXIyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImZyb20iKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZWwtc2VsZWN0IiwKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcGxhY2Vob2xkZXI6IGUuJHQoInRyYW5zZmVyLnNlbGVjdCIpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogZS5zZWxlY3RPbmUgfSwKICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS52YWx1ZTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnZhbHVlMSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAidmFsdWUxIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUuYWNjb3VudExpc3QsIGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJlbC1vcHRpb24iLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxhYmVsOiBlLnRleHRzLCB2YWx1ZTogZS50eXBlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAxCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4IiwKICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAiYWxpZ24taXRlbXMiOiAiY2VudGVyIiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgYSgibGFiZWwiLCB7IHN0YXRpY0NsYXNzOiAibXIyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoInRvIikpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgImVsLXNlbGVjdCIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHBsYWNlaG9sZGVyOiBlLiR0KCJ0cmFuc2Zlci5zZWxlY3QiKSB9LAogICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IGUuc2VsZWN0T25lIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUudmFsdWUyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS52YWx1ZTIgPSB0OwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInZhbHVlMiIsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgZS5fbChlLmFjY291bnRMaXN0LCBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgiZWwtb3B0aW9uIiwgewogICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsYWJlbDogZS50ZXh0cywgdmFsdWU6IGUudHlwZSB9LAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgIDEKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZmxleCIsCiAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgImFsaWduLWl0ZW1zIjogImNlbnRlciIgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgIGEoImxhYmVsIiwgeyBzdGF0aWNDbGFzczogIm1yMjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50Lmh1YW51bSIpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJlbC1pbnB1dCIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAiOTk5OTk5OTkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIjEwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgiYWNjb3VudC5odWFudW0iKSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm51bWJlciA9IHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInRlbXBsYXRlIiwgeyBzbG90OiAic3VmZml4IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiNDBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAiMTBweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLmNvaW5zW2UuY29pbkluZGV4XS5jdXJyZW5jeV9uYW1lKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInRlbXBsYXRlIiwgeyBzbG90OiAiYXBwZW5kIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5udW1iZXIgPSBlLnRyYW5zZmVyQmFsYW5jZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIuYWxsIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAyCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgMQogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkgKyAi77yaIiksCiAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZ3JlZW4iIH0sIFsKICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS50cmFuc2ZlckJhbGFuY2UpKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidHJhbnNmZXIgY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImJ1dHRvbiIgfSwKICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUudHJhbnNmZXIgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQudHJhbnNmZXIiKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pCiAgICAgICAgICA6IGUuX2UoKTsKICAgICAgfSwKICAgICAgcnIgPSBbXSwKICAgICAgbHIgPSAhMSwKICAgICAgY3IgPSAhMSwKICAgICAgZHIgPSB7CiAgICAgICAgZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW46ICIiLAogICAgICAgICAgICBzZWxlY3RlZENvaW46IHsgbmFtZTogIiIsIGlkOiAiIiB9LAogICAgICAgICAgICBjb2luczogW10sCiAgICAgICAgICAgIGNvaW5JbmRleDogMCwKICAgICAgICAgICAgdHlwZXM6IFt0aGlzLiR0KCJ1c2VyY2VudGVyLmxldmVyIiksIHRoaXMuJHQoInVzZXJjZW50ZXIuY2hhbmdlIildLAogICAgICAgICAgICBudW1iZXI6ICIiLAogICAgICAgICAgICBzZWxlY3RlZEZyb206ICLlkIjnuqbotKbmiLciLAogICAgICAgICAgICBzZWxlY3RlZFRvOiAi6LWE5Lqn6LSm5oi3IiwKICAgICAgICAgICAgY3VycmVuY3lMaXN0OiBbXSwKICAgICAgICAgICAgYWNjb3VudExpc3Q6IFtdLAogICAgICAgICAgICB2YWx1ZTE6ICJjaGFuZ2UiLAogICAgICAgICAgICB2YWx1ZTI6ICJsZXZlciIsCiAgICAgICAgICAgIHRyYW5zZmVyQmFsYW5jZTogMCwKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmdldENvaW5zKCksIHRoaXMuaW5pdEN1cnJlbmN5TGlzdCgpOwogICAgICAgIH0sCiAgICAgICAgd2F0Y2g6IHsKICAgICAgICAgIHZhbHVlMTogewogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGxyICYmIHRoaXMuY29tcHV0ZUJhbGFuY2UoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVlcDogITAsCiAgICAgICAgICAgIGltbWVkaWF0ZTogITEsCiAgICAgICAgICB9LAogICAgICAgICAgdmFsdWUyOiB7IGhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7fSwgZGVlcDogITAsIGltbWVkaWF0ZTogITEgfSwKICAgICAgICAgIGNvaW5JbmRleDogewogICAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGNyICYmIHRoaXMuY29tcHV0ZUJhbGFuY2UoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGVlcDogITAsCiAgICAgICAgICAgIGltbWVkaWF0ZTogITEsCiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgZ2V0Q29pbnM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAodGhpcy50b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIiksCiAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9saXN0IiwKICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSBbCiAgICAgICAgICAgICAgICAgICAgICB7fSwKICAgICAgICAgICAgICAgICAgICAgIHt9LAogICAgICAgICAgICAgICAgICAgICAge30sCiAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5sZXZlcl93YWxsZXQsCiAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5taWNyb193YWxsZXQsCiAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5sZWdhbF93YWxsZXQsCiAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5jaGFuZ2Vfd2FsbGV0LAogICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgaSA9IGFbMF0sCiAgICAgICAgICAgICAgICAgICAgbiA9IGFbMV0sCiAgICAgICAgICAgICAgICAgICAgcyA9IGFbMl0sCiAgICAgICAgICAgICAgICAgICAgbyA9IGFbM10sCiAgICAgICAgICAgICAgICAgICAgciA9IGFbNF0sCiAgICAgICAgICAgICAgICAgICAgbCA9IGFbNV0sCiAgICAgICAgICAgICAgICAgICAgYyA9IGFbNl07CiAgICAgICAgICAgICAgICAgIG8uYmFsYW5jZS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgaVtlLmN1cnJlbmN5X25hbWVdID0gZS5sZXZlcl9iYWxhbmNlOwogICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICByLmJhbGFuY2UuZm9yRWFjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgbltlLmN1cnJlbmN5X25hbWVdID0gZS5taWNyb19iYWxhbmNlOwogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIGMuYmFsYW5jZS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICBzW2UuY3VycmVuY3lfbmFtZV0gPSBlLmNoYW5nZV9iYWxhbmNlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBkID0gbC5iYWxhbmNlLCB1ID0gZC5sZW5ndGggLSAxOyB1ID49IDA7IHUtLSkgewogICAgICAgICAgICAgICAgICAgIHZhciBtID0gZFt1XTsKICAgICAgICAgICAgICAgICAgICAoZFt1XS5sZXZlcl9iYWxhbmNlID0gaVttLmN1cnJlbmN5X25hbWVdKSwKICAgICAgICAgICAgICAgICAgICAgIChkW3VdLm1pY3JvX2JhbGFuY2UgPSBuW20uY3VycmVuY3lfbmFtZV0pLAogICAgICAgICAgICAgICAgICAgICAgKGRbdV0uY2hhbmdlX2JhbGFuY2UgPSBzW20uY3VycmVuY3lfbmFtZV0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIChlLmNvaW5zID0gZCksCiAgICAgICAgICAgICAgICAgICAgKGUuY29pbkluZGV4ID0gMCksCiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAoZS52YWx1ZTEgPSAiY2hhbmdlIiksIChlLnZhbHVlMiA9ICJsZXZlciIpOwogICAgICAgICAgICAgICAgICAgIH0sIDEwMCksCiAgICAgICAgICAgICAgICAgICAgKGxyID0gITApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHRyYW5zZmVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gdGhpczsKICAgICAgICAgICAgaWYgKCIiICE9IHRoaXMubnVtYmVyKSB7CiAgICAgICAgICAgICAgdmFyIGEgPSB7fTsKICAgICAgICAgICAgICBhLm51bWJlciA9IHRoaXMubnVtYmVyOwogICAgICAgICAgICAgIHRoaXMuY29pbnNbdGhpcy5jb2luSW5kZXhdOwogICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICgoYS5mcm9tX2ZpZWxkID0gdGhpcy52YWx1ZTEpLAogICAgICAgICAgICAgICAgKGEudG9fZmllbGQgPSB0aGlzLnZhbHVlMiksCiAgICAgICAgICAgICAgICBhLmZyb21fZmllbGQgIT09IGEudG9fZmllbGQpCiAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBhLmN1cnJlbmN5X2lkID0gdGhpcy5jb2luc1t0aGlzLmNvaW5JbmRleF0uY3VycmVuY3k7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuJGxvYWRpbmcoewogICAgICAgICAgICAgICAgICBsb2NrOiAhMCwKICAgICAgICAgICAgICAgICAgdGV4dDogIkxvYWRpbmciLAogICAgICAgICAgICAgICAgICBzcGlubmVyOiAiZWwtaWNvbi1sb2FkaW5nIiwKICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogInJnYmEoMCwgMCwgMCwgMC43KSIsCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9jaGFuZ2UiLAogICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgZGF0YTogYSwKICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgIGkuY2xvc2UoKSwKICAgICAgICAgICAgICAgICAgICAib2siID09IGEuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgICAgICA/IChlLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0LiR0KCJ0cmFuc2Zlci5vayIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9LCAxZTMpKQogICAgICAgICAgICAgICAgICAgICAgOiBlLiRtZXNzYWdlLmVycm9yKGEuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0gZWxzZSB0aGlzLiRtZXNzYWdlLmVycm9yKHRoaXMuJHQoInRyYW5zZmVyLnNhbWUiKSk7CiAgICAgICAgICAgIH0gZWxzZSBsYXllci5tc2codGhpcy4kdCgiYWNjb3VudC5odWFudW0iKSk7CiAgICAgICAgICB9LAogICAgICAgICAgaW5pdEN1cnJlbmN5TGlzdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpLAogICAgICAgICAgICAgIHQgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2N1cnJlbmN5L3VzZXJfY3VycmVuY3lfbGlzdCIsCiAgICAgICAgICAgICAgbWV0aG9kOiAiZ2V0IiwKICAgICAgICAgICAgICBkYXRhOiB7fSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGUgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gZS5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgdmFyIGEgPSBlLmRhdGEubWVzc2FnZTsKICAgICAgICAgICAgICAgICAgaWYgKGEubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBbXSwgbiA9IDA7IG4gPCBhLmxlbmd0aDsgbisrKSB7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9CiAgICAgICAgICAgICAgICAgICAgICAgIGFbbl0uaXNfbGVnYWwgLQogICAgICAgICAgICAgICAgICAgICAgICAwICsKICAgICAgICAgICAgICAgICAgICAgICAgKGFbbl0uaXNfbGV2ZXIgLSAwKSArCiAgICAgICAgICAgICAgICAgICAgICAgIChhW25dLmlzX21hdGNoIC0gMCkgKwogICAgICAgICAgICAgICAgICAgICAgICAoYVtuXS5pc19taWNybyAtIDApOwogICAgICAgICAgICAgICAgICAgICAgcyA+IDEgJiYgaS5wdXNoKGFbbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGlmICgxID09IGlbMF0uaXNfbWljcm8pIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAibWljcm8iLAogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0czogdC4kdCgiYWNjb3VudC5sZXRyYW5zYWN0aW9uIiksCiAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgby5wdXNoKHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoMSA9PSBpWzBdLmlzX2xldmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICByID0geyB0eXBlOiAibGV2ZXIiLCB0ZXh0czogdC4kdCgiYWNjb3VudC50YWNjb3VudCIpIH07CiAgICAgICAgICAgICAgICAgICAgICBvLnB1c2gocik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgxID09IGlbMF0uaXNfbWF0Y2gpIHsKICAgICAgICAgICAgICAgICAgICAgIHIgPSB7IHR5cGU6ICJjaGFuZ2UiLCB0ZXh0czogdC4kdCgidXNlcmNlbnRlci5jaGFuZ2UiKSB9OwogICAgICAgICAgICAgICAgICAgICAgby5wdXNoKHIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAodC5hY2NvdW50TGlzdCA9IG8pLAogICAgICAgICAgICAgICAgICAgICAgKHQuY3VycmVuY3lMaXN0ID0gaSksCiAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygi6LSm5oi35YiX6KGoIiwgbywgaSksCiAgICAgICAgICAgICAgICAgICAgICAodC52YWx1ZTEgPSBvWzBdLnRleHRzKSwKICAgICAgICAgICAgICAgICAgICAgICh0LnZhbHVlMiA9IG9bMV0udGV4dHMpLAogICAgICAgICAgICAgICAgICAgICAgImxldmVyIiA9PSBvWzBdLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgPyAodC50cmFuc2ZlckJhbGFuY2UgPSBpWzBdLndhbGxldC5sZXZlcl9iYWxhbmNlKQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtaWNybyIgPT0gb1swXS50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgID8gKHQudHJhbnNmZXJCYWxhbmNlID0gaVswXS53YWxsZXQubWljcm9fYmFsYW5jZSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiY2hhbmdlIiA9PSBvWzBdLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgPyAodC50cmFuc2ZlckJhbGFuY2UgPSBpWzBdLndhbGxldC5jaGFuZ2VfYmFsYW5jZSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibGVnYWwiID09IG9bMF0udHlwZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICh0LnRyYW5zZmVyQmFsYW5jZSA9IGlbMF0ud2FsbGV0LmxlZ2FsX2JhbGFuY2UpLAogICAgICAgICAgICAgICAgICAgICAgKGNyID0gITApOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHNlbGVjdE9uZTogZnVuY3Rpb24gKGUpIHt9LAogICAgICAgICAgc2VsZWN0VHdvOiBmdW5jdGlvbiAoZSkge30sCiAgICAgICAgICBjb21wdXRlQmFsYW5jZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAobHIgJiYgY3IpIHsKICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuY29pbnNbdGhpcy5jb2luSW5kZXhdOwogICAgICAgICAgICAgIGlmICghZSkgcmV0dXJuOwogICAgICAgICAgICAgIHN3aXRjaCAoKCh0aGlzLm51bWJlciA9ICIiKSwgdGhpcy52YWx1ZTEpKSB7CiAgICAgICAgICAgICAgICBjYXNlICJsZWdhbCI6CiAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmZXJCYWxhbmNlID0gZS5sZWdhbF9iYWxhbmNlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIm1pY3JvIjoKICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2ZlckJhbGFuY2UgPSBlLm1pY3JvX2JhbGFuY2U7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAibGV2ZXIiOgogICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQmFsYW5jZSA9IGUubGV2ZXJfYmFsYW5jZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjaGFuZ2UiOgogICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZmVyQmFsYW5jZSA9IGUuY2hhbmdlX2JhbGFuY2U7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGNoYW5nZUNvaW46IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRoaXMuY29pbkluZGV4ID0gZTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgdXIgPSBkciwKICAgICAgbXIgPQogICAgICAgIChhKCIzOGIzIiksCiAgICAgICAgYSgiYWE0YSIpLAogICAgICAgIE9iamVjdChoWyJhIl0pKHVyLCBvciwgcnIsICExLCBudWxsLCAiYmM2NTk2ZjgiLCBudWxsKSksCiAgICAgIHByID0gbXIuZXhwb3J0cywKICAgICAgaHIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudC1tYWluIHdyYXAiIH0sIFsKICAgICAgICAgIGEoInVsIiwgeyBzdGF0aWNDbGFzczogIndoaXRlIGxvZ191bCIgfSwgWwogICAgICAgICAgICBhKCJsaSIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGZ0MTQiIH0sIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgidGltZSIpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxlZ2FsLmFjY291bnQiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGUuX2UoKSwKICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibnVtYmVyIikpKSwKICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxpX3dyYXAgc2Nyb2xsIiB9LAogICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIGUuX2woZS5sb2dfbGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoImxpIiwgeyBrZXk6IGksIHN0YXRpY0NsYXNzOiAiZmxleCBmdDEyIGFyb3VuZCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmNyZWF0ZWRfdGltZSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmFjY291bnQpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoInRvRml4ZWRzIikodC52YWx1ZSkpKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAidGMgbW9yZSIsIG9uOiB7IGNsaWNrOiBlLmdldE1vcmUgfSB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLm1vcmUpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgMgogICAgICAgICAgICApLAogICAgICAgICAgXSksCiAgICAgICAgXSk7CiAgICAgIH0sCiAgICAgIGZyID0gW10sCiAgICAgIGdyID0gewogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7IG1vcmU6IHRoaXMuJHQoIm1vcmUiKSwgcGFnZTogMSwgbGltaXQ6IDIwLCBsb2dfbGlzdDogW10gfTsKICAgICAgICB9LAogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIHRvRml4ZWRzOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoMik7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdGhpcy5pbml0KCk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9hY2NvdW50L2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgbGltaXQ6IHRoaXMubGltaXQsIHBhZ2U6IHRoaXMucGFnZSB9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZQogICAgICAgICAgICAgICAgICA/ICgoZS5sb2dfbGlzdCA9IGUubG9nX2xpc3QuY29uY2F0KHQuZGF0YS5tZXNzYWdlLmRhdGEpKSwKICAgICAgICAgICAgICAgICAgICAwID09IHQuZGF0YS5tZXNzYWdlLmRhdGEubGVuZ3RoICYmCiAgICAgICAgICAgICAgICAgICAgICAoZS5tb3JlID0gZS4kdCgibm9kYXRhIikpLAogICAgICAgICAgICAgICAgICAgIHQuZGF0YS5tZXNzYWdlLmRhdGEubGVuZ3RoIDwgZS5saW1pdAogICAgICAgICAgICAgICAgICAgICAgPyAoZS5tb3JlID0gZS4kdCgibm9tb3JlIikpCiAgICAgICAgICAgICAgICAgICAgICA6IHQuZGF0YS5tZXNzYWdlLmRhdGEubGVuZ3RoID09IGUubGltaXQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKGUubW9yZSA9IGUuJHQoIm1vcmUiKSkpCiAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIGdldE1vcmU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKHRoaXMubW9yZSA9IHRoaXMuJHQoImxvYWRpbmciKSksICh0aGlzLnBhZ2UgKz0gMSksIHRoaXMuaW5pdCgpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICB2ciA9IGdyLAogICAgICBfciA9IChhKCI0NGZhIiksIE9iamVjdChoWyJhIl0pKHZyLCBociwgZnIsICExLCBudWxsLCAiNDE1NDM0MDEiLCBudWxsKSksCiAgICAgIHlyID0gX3IuZXhwb3J0cywKICAgICAgYnIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAid3JhcCIsIHN0YXRpY1N0eWxlOiB7IGZsZXg6ICIxIiB9IH0sIFsKICAgICAgICAgIGEoCiAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXRsZSBmQ29sb3IxIHRvcHNoYWRvdyIsCiAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgIHdpZHRoOiAiMTIwMHB4IiwKICAgICAgICAgICAgICAgIG1hcmdpbjogIjAgYXV0byIsCiAgICAgICAgICAgICAgICAibGluZS1oZWlnaHQiOiAiNjBweCIsCiAgICAgICAgICAgICAgICAidGV4dC1pbmRlbnQiOiAiMCIsCiAgICAgICAgICAgICAgICAiZm9udC1zaXplIjogIjE4cHgiLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaW5ibG9jayIgfSwgWwogICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgImEiLAogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJjdXJQZXIiLAogICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG9uY2xpY2s6ICJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygtMSk7IiB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBbYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgiYmFjayIpKSldKV0KICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImluYmxvY2sgZnIiIH0sIFsKICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYWxsIiwgb246IHsgY2xpY2s6IGUuYWxsIH0gfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuYWxsIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhbGwiLCBvbjogeyBjbGljazogZS5yZWNvcmRMaXN0IH0gfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIudGRyZWNvcmQiKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0KICAgICAgICAgICksCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZGV0YWlsIiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IiB9LCBbCiAgICAgICAgICAgICAgYSgidWwiLCB7IHN0YXRpY0NsYXNzOiAibGlzdF9oZWFkIGZ0MTQiIH0sIFsKICAgICAgICAgICAgICAgIGEoImxpIiwgWwogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJ0aW1lIikpKV0pLAogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJwcmljZSIpKSldKSwKICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCLkuqTmmJPph48iKV0pLAogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJkbyIpKSldKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAidWwiLAogICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxpc3RfY29udGVudCBmQ29sb3IxIGZ0MTIiIH0sCiAgICAgICAgICAgICAgICBlLl9sKGUubGlzdF9jb250ZW50LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gYSgibGkiLCB7IGtleTogaSB9LCBbCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3ModC50aW1lKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkRm91ciIpKHQucHJpY2UpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b2ZpeGVkIikodC5udW1iZXIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5waW5nY2FuZyh0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCLlubPku5MiKV0KICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJtb3JlIiwgb246IHsgY2xpY2s6IGUubG9hZF9tb3JlIH0gfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUubW9yZSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBDciA9IFtdLAogICAgICB3ciA9IHsKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBsZWdhbF9pZDogIiIsCiAgICAgICAgICAgIGN1cnJlbmN5X2lkOiAiIiwKICAgICAgICAgICAgbGlzdF9jb250ZW50OiBbXSwKICAgICAgICAgICAgcGFnZTogMSwKICAgICAgICAgICAgbW9yZTogIuWKoOi9veabtOWkmiIsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9maXhlZDogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgcmV0dXJuIChlID0gTnVtYmVyKGUpKSwgZS50b0ZpeGVkKDIpOwogICAgICAgICAgfSwKICAgICAgICAgIHRvZml4ZWRGb3VyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICByZXR1cm4gKGUgPSBOdW1iZXIoZSkpLCBlLnRvRml4ZWQoNCk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgKHRoaXMubGVnYWxfaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgibGVnYWxfaWQiKSksCiAgICAgICAgICAgICh0aGlzLmN1cnJlbmN5X2lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oImN1cnJlbmN5X2lkIikpLAogICAgICAgICAgICB0aGlzLmluaXQoKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICAodGhpcy5tb3JlID0gIuWKoOi9veS4rS4uLiIpLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9kZWFsYWxsIiwKICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgZGF0YTogewogICAgICAgICAgICAgICAgICBsZWdhbF9pZDogdGhpcy5sZWdhbF9pZCwKICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IHRoaXMuY3VycmVuY3lfaWQsCiAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICA/ICgoZS5tb3JlID0gIuWKoOi9veabtOWkmiIpLAogICAgICAgICAgICAgICAgICAgICAgKGUubGlzdF9jb250ZW50ID0gZS5saXN0X2NvbnRlbnQuY29uY2F0KAogICAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5vcmRlci5kYXRhCiAgICAgICAgICAgICAgICAgICAgICApKSwKICAgICAgICAgICAgICAgICAgICAgIDAgPT0gdC5kYXRhLm1lc3NhZ2Uub3JkZXIuZGF0YS5sZW5ndGggJiYKICAgICAgICAgICAgICAgICAgICAgICAgKGUubW9yZSA9ICLmsqHmnInmm7TlpJrkuoYuLi4iKSkKICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgcGluZ2Nhbmc6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgbGF5ZXIuY29uZmlybSgi56Gu5a6a5bmz5LuT77yfIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHQuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9jbG9zZSIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGUgfSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZQogICAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSksIGxvY2F0aW9uLnJlbG9hZCgpKQogICAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGUuZGF0YS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgbG9hZF9tb3JlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMucGFnZSsrLCB0aGlzLmluaXQoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBhbGw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAiYWxsVHJhbnNhY3Rpb24iIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGxpbmtzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImxldmVyVHJhbnNhY3Rpb25zIiB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICByZWNvcmRMaXN0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgbmFtZTogImxldmVyTGlzdCIgfSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGtyID0gd3IsCiAgICAgIHhyID0gKGEoImNkMWEiKSwgT2JqZWN0KGhbImEiXSkoa3IsIGJyLCBDciwgITEsIG51bGwsICJmOTc0MjJhYSIsIG51bGwpKSwKICAgICAgU3IgPSB4ci5leHBvcnRzLAogICAgICBBciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJ3cmFwIiB9LAogICAgICAgICAgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGFiLWhlYWRlciIgfSwgWwogICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbeyBhY3RpdmU6IDEgPT0gZS5zdGF0dXMgfV0sCiAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50YWJDbGljaygxKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgibGV2ZXIudGRpbiIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjbGFzczogW3sgYWN0aXZlOiAwID09IGUuc3RhdHVzIH1dLAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudGFiQ2xpY2soMCk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLmxpc3RpbiIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjbGFzczogW3sgYWN0aXZlOiAzID09IGUuc3RhdHVzIH1dLAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudGFiQ2xpY2soMyk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLmNsb3NlZCIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjbGFzczogW3sgYWN0aXZlOiA0ID09IGUuc3RhdHVzIH1dLAogICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudGFiQ2xpY2soNCk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLnJldm9rZWQiKSkpXQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJ1bCIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0X2hlYWQgZnQxNCIgfSwgWwogICAgICAgICAgICAgIGEoImxpIiwgeyBzdGF0aWNDbGFzczogImZsZXgiIH0sIFsKICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci50eXBlIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgMCA9PSBlLnN0YXR1cyB8fCA0ID09IGUuc3RhdHVzCiAgICAgICAgICAgICAgICAgID8gYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5lbnRydXN0UHJpY2UiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgIDogYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5vcGVuUHJpY2UiKSkpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLm5vd1ByaWNlIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLnN0eVByaWNlIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLnN0c1ByaWNlIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmJhaWwiKSkpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMSIgfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIuY2FuQmFpbCIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgyIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5vcGVuVGltZSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIDMgPT0gZS5zdGF0dXMKICAgICAgICAgICAgICAgICAgPyBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxldmVyLmNsb3NlVGltZSIpKSksCiAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMSIgfSwgWwogICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibGV2ZXIucmF0ZSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgxIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5uaWdodEZlZSIpKSksCiAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgxIiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJsZXZlci5sb3NzIikpKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgMCA9PSBlLnN0YXR1cyB8fCAxID09IGUuc3RhdHVzCiAgICAgICAgICAgICAgICAgID8gYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJ0ZC5kbyIpKSksCiAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJ1bCIsCiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImxpc3RfY29udGVudCBmdDEyIiB9LAogICAgICAgICAgICAgIGUuX2woZS5saXN0X2NvbnRlbnQsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgeyBrZXk6IGksIHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciBjZW50ZXIiIH0sCiAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAxID09IHQudHlwZSA/IGUuJHQoInRkLmJ1eWluIikgOiBlLiR0KCJ0ZC5zZWxsb3V0IikKICAgICAgICAgICAgICAgICAgICAgICAgKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQuc3ltYm9sKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiB4IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyh0LnNoYXJlKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIihOby4iICsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKHQuaWQpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAiKSIKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgMCA9PSBlLnN0YXR1cyB8fCA0ID09IGUuc3RhdHVzCiAgICAgICAgICAgICAgICAgICAgICA/IGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoIm51bUZpbHRlcnMiKSh0Lm9yaWdpbl9wcmljZSB8fCAiMC4wMCIsIDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS5fZigibnVtRmlsdGVycyIpKHQucHJpY2UgfHwgIjAuMDAiLCA0KSkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJudW1GaWx0ZXJzIikodC51cGRhdGVfcHJpY2UgfHwgIjAuMDAiLCA0KSkKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigibnVtRmlsdGVycyIpKHQudGFyZ2V0X3Byb2ZpdF9wcmljZSB8fCAiMC4wMCIsIDQpCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigibnVtRmlsdGVycyIpKHQuc3RvcF9sb3NzX3ByaWNlIHx8ICIwLjAwIiwgNCkpCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoIm51bUZpbHRlcnMiKSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQub3JpZ2luX2NhdXRpb25fbW9uZXkgfHwgIjAuMDAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgNAogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJudW1GaWx0ZXJzIikodC5jYXV0aW9uX21vbmV5IHx8ICIwLjAwIiwgNCkpCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAid2lkdGgyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC50cmFuc2FjdGlvbl90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgMyA9PSBlLnN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgPyBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmhhbmRsZV90aW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIndpZHRoMSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuX2YoIm51bUZpbHRlcnMiKSh0LnRyYWRlX2ZlZSB8fCAiMC4wMCIsIDQpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aWR0aDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigibnVtRmlsdGVycyIpKHQub3Zlcm5pZ2h0X21vbmV5IHx8ICIwLjAwIiwgNCkpCiAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAid2lkdGgxIiwKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHQucHJvZml0cyA+IDAgPyAiZ3JlZW5Db2xvciIgOiAicmVkQ29sb3IiLAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5fZigibnVtRmlsdGVycyIpKHQucHJvZml0cyB8fCAiMC4wMCIsIDQpKSldCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAwID09IGUuc3RhdHVzIHx8IDEgPT0gZS5zdGF0dXMKICAgICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIndpZHRoMSBidG5zIHRyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PSBlLnN0YXR1cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5jYW5uZWxPcmRlcih0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLnJldm9rZSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDEgPT0gZS5zdGF0dXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2xvc2VQb3NpdGlvbih0LmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImxldmVyLnBpbmciKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIDAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgZS50b3RhbCA+IDEwCiAgICAgICAgICAgICAgPyBhKCJlbC1wYWdpbmF0aW9uIiwgewogICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm1vcmVzIiwKICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbGF5b3V0OiAicHJldiwgcGFnZXIsIG5leHQiLCB0b3RhbDogZS50b3RhbCB9LAogICAgICAgICAgICAgICAgICBvbjogeyAiY3VycmVudC1jaGFuZ2UiOiBlLmhhbmRsZUN1cnJlbnRDaGFuZ2UgfSwKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICBdLAogICAgICAgICAgMQogICAgICAgICk7CiAgICAgIH0sCiAgICAgIHpyID0gW10sCiAgICAgIFByID0gewogICAgICAgIGZpbHRlcnM6IHsKICAgICAgICAgIG51bUZpbHRlcnM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiBlID8gZS5zbGljZSgwKSArICIgIiA6ICIwLjAwMDAiOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGxlZ2FsX2lkOiAiIiwKICAgICAgICAgICAgY3VycmVuY3lfaWQ6ICIiLAogICAgICAgICAgICBsaXN0X2NvbnRlbnQ6IFtdLAogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBtb3JlOiAi5Yqg6L295pu05aSaIiwKICAgICAgICAgICAgc3RhdHVzOiAxLAogICAgICAgICAgICBmbGFnOiAhMCwKICAgICAgICAgICAgdG90YWw6ICIiLAogICAgICAgICAgICBza2luczogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInNraW4iKSB8fCAiZGF5cyIsCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgZS5pbml0KCksICgwICE9IGUuc3RhdHVzICYmIDEgIT0gZS5zdGF0dXMpIHx8IGUucG9sbGluZygpOwogICAgICAgIH0sCiAgICAgICAgYmVmb3JlQ3JlYXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBkb2N1bWVudAogICAgICAgICAgICAucXVlcnlTZWxlY3RvcigiaHRtbCIpCiAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgImJhY2tncm91bmQtY29sb3I6I2Y3ZjdmNzsiKTsKICAgICAgICB9LAogICAgICAgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgaWYgKCgoZS5tb3JlID0gZS4kdCgibGV2ZXIubG9hZGluZyIpKSwgZS5mbGFnKSkgewogICAgICAgICAgICAgIHZhciB0ID0gbGF5ZXIubG9hZCgpOwogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9teV90cmFkZSIsCiAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlLnN0YXR1cywKICAgICAgICAgICAgICAgICAgbGVnYWxfaWQ6IGUubGVnYWxfaWQsCiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBlLmN1cnJlbmN5X2lkLAogICAgICAgICAgICAgICAgICBwYWdlOiBlLnBhZ2UsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB9LAogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICBsYXllci5jbG9zZSh0KSwKICAgICAgICAgICAgICAgICAgICAoZS5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICJvayIgPT0gYS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICgoZS5tb3JlID0gZS4kdCgidGQubW9yZSIpKSwKICAgICAgICAgICAgICAgICAgICAgIChlLmxpc3RfY29udGVudCA9IGEuZGF0YS5tZXNzYWdlLm1lc3NhZ2UuZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAoZS50b3RhbCA9IGEuZGF0YS5tZXNzYWdlLm1lc3NhZ2UudG90YWwpKTsKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHBvbGxpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICBlLiRzb2NrZXQuZW1pdCgibG9naW4iLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidXNlcl9pZCIpKSwKICAgICAgICAgICAgICBlLiRzb2NrZXQub24oImxldmVyX3RyYWRlIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGlmICgibGV2ZXJfdHJhZGUiID09IHQudHlwZSkKICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gZS5zdGF0dXMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UodC50cmFkZXNfZW50cnVzdCk7CiAgICAgICAgICAgICAgICAgICAgZS5saXN0X2NvbnRlbnQgPSBhOwogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDEgPT0gZS5zdGF0dXMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IEpTT04ucGFyc2UodC50cmFkZXNfYWxsKTsKICAgICAgICAgICAgICAgICAgICBlLmxpc3RfY29udGVudCA9IGk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBoYW5kbGVDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgICh0LnBhZ2UgPSBlKSwgdC5pbml0KCk7CiAgICAgICAgICB9LAogICAgICAgICAgdGFiQ2xpY2s6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgKHQuc3RhdHVzID0gZSksCiAgICAgICAgICAgICAgKHQubGlzdF9jb250ZW50ID0gW10pLAogICAgICAgICAgICAgICh0LnBhZ2UgPSAxKSwKICAgICAgICAgICAgICB0LmluaXQoKSwKICAgICAgICAgICAgICAodC5mbGFnID0gITEpLAogICAgICAgICAgICAgICgwICE9IGUgJiYgMSAhPSBlKSB8fCB0LnBvbGxpbmcoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjbG9zZVBvc2l0aW9uOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGFsZXJ0KHQuJHQoImxldmVyLnN1cmVwaW5nIiksICIiLCB7CiAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHQuJHQoImN1eS5jb25maXJtIiksCiAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M6ICJtb2RhbENvbmZpcm0iLAogICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25DbGFzczogImNvbmZpcm1CdG4iLAogICAgICAgICAgICAgIGNsb3NlT25DbGlja01vZGFsOiAhMCwKICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICJjb25maXJtIiA9PSBhICYmCiAgICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgICAgICAuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9jbG9zZSIsCiAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgaWQ6IGUgfSwKICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlCiAgICAgICAgICAgICAgICAgICAgICAgID8gKGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxZTMpKQogICAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGNhbm5lbE9yZGVyOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGFsZXJ0KHQuJHQoImxldmVyLnJldm9rZU9yZGVyIiksICIiLCB7CiAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHQuJHQoImN1eS5jb25maXJtIiksCiAgICAgICAgICAgICAgY3VzdG9tQ2xhc3M6ICJtb2RhbENvbmZpcm0iLAogICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25DbGFzczogImNvbmZpcm1CdG4iLAogICAgICAgICAgICAgIGNsb3NlT25DbGlja01vZGFsOiAhMCwKICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICJjb25maXJtIiA9PSBhICYmCiAgICAgICAgICAgICAgICAgIHQKICAgICAgICAgICAgICAgICAgICAuJGh0dHAoewogICAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS9sZXZlci9jYW5jZWwiLAogICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IGlkOiBlIH0sCiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICA/IChsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFiQ2xpY2sodC5zdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxheWVyLm1zZyhlLmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGxheWVyLmNsb3NlKGkpLCBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSwKICAgICAgVHIgPSBQciwKICAgICAgSXIgPSAoYSgiMjU0YiIpLCBPYmplY3QoaFsiYSJdKShUciwgQXIsIHpyLCAhMSwgbnVsbCwgIjZkNDVlN2MwIiwgbnVsbCkpLAogICAgICBCciA9IElyLmV4cG9ydHMsCiAgICAgIE5yID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgIHQgPSBlLiRjcmVhdGVFbGVtZW50LAogICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBhdHRyczogeyBpZDogImxldmVyLXJlY29yZCIgfSB9LCBbCiAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidGl0bGUiIH0sIFsKICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbCIgfSwgW2UuX3YoIlVTRFQiKV0pLAogICAgICAgICAgICBhKAogICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZyIiwKICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBlLiRyb3V0ZXIuZ28oLTEpOwogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYmFjayIpKSldCiAgICAgICAgICAgICksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0IiB9LCBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsaXN0LXRpdGxlIGZsZXgiIH0sIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJjMmMudHlwZSIpKSldKSwKICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLiR0KCJudW1iZXIiKSkpXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICBlLl9sKGUubG9nLCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGEoImxpIiwgeyBrZXk6IGkgfSwgWwogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LnR5cGUpKV0pLAogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKHQubnVtYmVyIHx8ICIwLjAwIikpKV0pLAogICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoZS5fcyh0LmFkZF90aW1lKSldKSwKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIDAKICAgICAgICAgICAgKSwKICAgICAgICAgIF0pLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBGciA9IFtdLAogICAgICBMciA9IHsKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4geyBsb2c6IFtdLCBwYWdlOiAxIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmdldExvZygpOwogICAgICAgIH0sCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9GaXhlZHM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCgyKTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBnZXRMb2c6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIik7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2h6aGlzdG9yeSIsCiAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0IH0sCiAgICAgICAgICAgICAgZGF0YToge30sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICBpZiAoIm9rIiA9PSB0LmRhdGEudHlwZSkgewogICAgICAgICAgICAgICAgdmFyIGEgPSB0LmRhdGEuZGF0YTsKICAgICAgICAgICAgICAgIGUubG9nID0gYTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICAkciA9IExyLAogICAgICBNciA9IChhKCIxNTE2IiksIE9iamVjdChoWyJhIl0pKCRyLCBOciwgRnIsICExLCBudWxsLCBudWxsLCBudWxsKSksCiAgICAgIEVyID0gTXIuZXhwb3J0cywKICAgICAgVnIgPSB7fSwKICAgICAgRHIgPSBPYmplY3QoaFsiYSJdKShWciwgQmEsIE5hLCAhMSwgbnVsbCwgbnVsbCwgbnVsbCksCiAgICAgIFJyID0gRHIuZXhwb3J0cywKICAgICAgVXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiaG9tZSIsIHN0YXRpY1N0eWxlOiB7ICJwYWRkaW5nLXRvcCI6ICI0OHB4IiB9IH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJoYW5ncWlhbmciIH0sIFtlLl92KCIg5YWo6YOo6KGM5oOFICIpXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluX3NodWp1IiB9LCBbCiAgICAgICAgICAgICAgZS5fbSgwKSwKICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29pbmJveCBmdDEyIHJib20iLAogICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyAibWluLWhlaWdodCI6ICI3MDBweCIgfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgIGUuX20oMSksCiAgICAgICAgICAgICAgICAgIGEoInVsIiwgWwogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgZS5fbChlLnF1b3RhdGlvbkxpc3QsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxID09IHQuaXNfZGlzcGxheSAmJiAxID09IHQub3Blbl9taWNyb3RyYWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdC5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZmxleCBjb2lubGlzdCBhbGNlbnRlciBjdXJQZXIgaG92ZSBob3ZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fbSgyLCAhMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogIm1sNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5jdXJyZW5jeV9uYW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigibnVtRmlsdGVycyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm5vd19wcmljZSB8fCAiMC4wMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRsIGNoYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB0LmNoYW5nZSA8IDAgPyAicmVkIiA6ICJncmVlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKHQuY2hhbmdlIHx8ICIwLjAwIikgKyAiJSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigibnVtRmlsdGVycyIpKHQuaGlnaCB8fCAiMC4wMCIsIDUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLl9mKCJudW1GaWx0ZXJzIikodC5sb3cgfHwgIjAuMDAiLCA1KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigibnVtRmlsdGVycyIpKHQudm9sdW1lIHx8ICIwLjAwIiwgMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgIDogZS5fZSgpOwogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgT3IgPSBbCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgYSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbl9idG4iIH0sIFsKICAgICAgICAgICAgYSgiYnV0dG9uIiwgeyBzdGF0aWNDbGFzczogImJ0biIgfSwgW2UuX3YoIiBVU0RUICIpXSksCiAgICAgICAgICBdKTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgICByZXR1cm4gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggY2xhc3NmaXR5IHR4dGdyYXkiIH0sIFsKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIiIH0sIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIuS6pOaYk+WvuSIpXSksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGNvbHVtbiBiZXR3ZWVuIiB9KSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIGpzY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCLmnIDmlrDku7ciKV0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBjb2x1bW4gYmV0d2VlbiIgfSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciBqc2NlbnRlciIgfSwgWwogICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi5rao5bmFIildKSwKICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXggY29sdW1uIGJldHdlZW4iIH0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIganNjZW50ZXIiIH0sIFsKICAgICAgICAgICAgICBhKCJzcGFuIiwgW2UuX3YoIuacgOmrmOS7tyIpXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciBqc2NlbnRlciIgfSwgWwogICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdigi5pyA5L2O5Lu3IildKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4IGFsY2VudGVyIGpzY2VudGVyIiB9LCBbCiAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KCIyNEjph48iKV0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgICAgaSA9IGUuX3NlbGYuX2MgfHwgdDsKICAgICAgICAgIHJldHVybiBpKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImljb25mb250IGZ0MTQgZ3JheSIgfSwgWwogICAgICAgICAgICBpKCJpbWciLCB7CiAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgIHdpZHRoOiAiMTRweCIsCiAgICAgICAgICAgICAgICBoZWlnaHQ6ICIxNHB4IiwKICAgICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogIjVweCIsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IGEoIjZkYzEiKSwgYWx0OiAiIiB9LAogICAgICAgICAgICB9KSwKICAgICAgICAgIF0pOwogICAgICAgIH0sCiAgICAgIF0sCiAgICAgIFdyID0gewogICAgICAgIG5hbWU6ICJxdW90YXRpb24iLAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEgfSwKICAgICAgICBmaWx0ZXJzOiB7CiAgICAgICAgICBudW1GaWx0ZXJzOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICByZXR1cm4gZQogICAgICAgICAgICAgID8gKChlID0gZS50b0ZpeGVkKHBhcnNlSW50KHQpKS50b1N0cmluZygpKSwgZS5zbGljZSgwKSArICIgIikKICAgICAgICAgICAgICA6ICIwLjAwMDAiOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiAiIiwKICAgICAgICAgICAgcGFzc3dvcmQ6ICIiLAogICAgICAgICAgICBxdW90YXRpb25MaXN0OiBbXSwKICAgICAgICAgICAgYnRuU2VsZWN0OiAwLAogICAgICAgICAgICB1c2VyQWNjb3VudDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzZXJBY2NvdW50IikgfHwgIiIsCiAgICAgICAgICAgIGNvZGVTaG93OiAzLAogICAgICAgICAgICBuZXdzTGlzdDogW10sCiAgICAgICAgICAgIHNraW5zOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgic2tpbiIpIHx8ICJkYXlzIiwKICAgICAgICAgICAgc3dpcGVySW1nczogW10sCiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgKHRoaXMuYWNjb3VudF9udW1iZXIgPSAiIiksCiAgICAgICAgICAgICh0aGlzLnBhc3N3b3JkID0gIiIpLAogICAgICAgICAgICB0aGlzLmluaXQoKSwKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS9uZXdzL2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgY19pZDogNCB9LAogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgIm9rIiA9PSB0LmRhdGEudHlwZSAmJiAoZS5uZXdzTGlzdCA9IHQuZGF0YS5tZXNzYWdlLmxpc3QpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy5nZXRTd2lwZXIoKTsKICAgICAgICB9LAogICAgICAgIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gKCkge30sCiAgICAgICAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gKCkgewogICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiaHRtbCIpLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTsKICAgICAgICB9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL2N1cnJlbmN5L3F1b3RhdGlvbl9uZXciLAogICAgICAgICAgICAgIG1ldGhvZDogImdldCIsCiAgICAgICAgICAgICAgZGF0YToge30sCiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSBbXSwgaSA9IDA7IGkgPCB0LmRhdGEubWVzc2FnZS5sZW5ndGg7IGkrKykKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IHQuZGF0YS5tZXNzYWdlW2ldLnF1b3RhdGlvbi5sZW5ndGg7IG4rKykKICAgICAgICAgICAgICAgICAgICAgIGEucHVzaCh0LmRhdGEubWVzc2FnZVtpXS5xdW90YXRpb25bbl0pOwogICAgICAgICAgICAgICAgICAoZS5xdW90YXRpb25MaXN0ID0gYSksIGUubWFya2V0U29ja2V0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICB1c2VySW5mbzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvdXNlci9pbmZvIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJnZXQiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgaWYgKCJvayIgPT0gdC5kYXRhLnR5cGUpIHsKICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgIChsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNlcl9pZCIsIHQuZGF0YS5tZXNzYWdlLmlkKSwKICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidXNlckFjY291bnQiLCB0LmRhdGEubWVzc2FnZS5hY2NvdW50KSwKICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICJleHRlbnNpb25fY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICB0LmRhdGEubWVzc2FnZS5leHRlbnNpb25fY29kZQogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oImlzX3NlbGxlciIsIHQuZGF0YS5tZXNzYWdlLmlzX3NlbGxlciksCiAgICAgICAgICAgICAgICAgICAgdC5kYXRhLm1lc3NhZ2Uuc2VsbGVyICYmIHQuZGF0YS5tZXNzYWdlLnNlbGxlci5sZW5ndGggPiAwKQogICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgKICAgICAgICAgICAgICAgICAgICAgICJzdGF0dXMiLAogICAgICAgICAgICAgICAgICAgICAgdC5kYXRhLm1lc3NhZ2Uuc2VsbGVyWzBdLnN0YXR1cwogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICBzZWxsZXJWYWx1ZTogdC5kYXRhLm1lc3NhZ2UuaXNfc2VsbGVyLAogICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVmFsdWU6IHQuZGF0YS5tZXNzYWdlLnNlbGxlclswXS5zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBldmVudEJ1cy4kZW1pdCgic2VsbGVyIiwgYSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZS4kcm91dGVyLnB1c2goeyBwYXRoOiAiLyIgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBsb2dpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICAgICAgdCA9IHRoaXMuJHV0aWxzLnRyaW0odGhpcy5hY2NvdW50X251bWJlciksCiAgICAgICAgICAgICAgYSA9IHRoaXMuJHV0aWxzLnRyaW0odGhpcy5wYXNzd29yZCk7CiAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLmFjY291bnRfbnVtYmVyLmxlbmd0aCkKICAgICAgICAgICAgICBpZiAodGhpcy5wYXNzd29yZC5sZW5ndGggPCA2KQogICAgICAgICAgICAgICAgbGF5ZXIudGlwcyh0aGlzLiR0KCJsb2dpbi5wc3c2IiksICIjcHdkIik7CiAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IGxheWVyLmxvYWQoKTsKICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvbG9naW4iLAogICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyX3N0cmluZzogdCwgcGFzc3dvcmQ6IGEsIHR5cGU6IDEgfSwKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChhKSB7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIuY2xvc2UoaSksCiAgICAgICAgICAgICAgICAgICAgICAoYSA9IGEuZGF0YSksCiAgICAgICAgICAgICAgICAgICAgICAib2siID09PSBhLnR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgPyAobG9jYWxTdG9yYWdlLnNldEl0ZW0oInRva2VuIiwgYS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjb3VudE51bSIsIHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGUuJHN0b3JlLmNvbW1pdCgic2V0QWNjb3VudE51bSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGUudXNlckluZm8oKSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBsYXllci5tc2coYS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBsYXllci50aXBzKHRoaXMuJHQoInNldC5lbnRlckFjY291bnQiKSwgIiNhY2NvdW50Iik7CiAgICAgICAgICB9LAogICAgICAgICAgaW5wdXRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgIiIgIT0gZS5hY2NvdW50X251bWJlciAmJiBlLnBhc3N3b3JkLmxlbmd0aCA+PSA2CiAgICAgICAgICAgICAgPyAoZS5idG5TZWxlY3QgPSAxKQogICAgICAgICAgICAgIDogKGUuYnRuU2VsZWN0ID0gMCk7CiAgICAgICAgICB9LAogICAgICAgICAgbWFya2V0U29ja2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS4kc29ja2V0LmVtaXQoImxvZ2luIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oInVzZXJfaWQiKSksCiAgICAgICAgICAgICAgZS5zb2NrZXRzLnN1YnNjcmliZSgiZGF5bWFya2V0IiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGlmICgiZGF5bWFya2V0IiA9PSB0LnR5cGUpIHsKICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coImRheW1hcmtldCIsIHQpOwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGUucXVvdGF0aW9uTGlzdC5sZW5ndGg7IGErKykKICAgICAgICAgICAgICAgICAgICBlLnF1b3RhdGlvbkxpc3RbYV0ubGVnYWxfaWQgPT0gdC5sZWdhbF9pZCAmJgogICAgICAgICAgICAgICAgICAgICAgZS5xdW90YXRpb25MaXN0W2FdLmN1cnJlbmN5X2lkID09IHQuY3VycmVuY3lfaWQgJiYKICAgICAgICAgICAgICAgICAgICAgICgoZS5xdW90YXRpb25MaXN0W2FdLm5vd19wcmljZSA9IHQubm93X3ByaWNlKSwKICAgICAgICAgICAgICAgICAgICAgIChlLnF1b3RhdGlvbkxpc3RbYV0uY2hhbmdlID0gdC5jaGFuZ2UpLAogICAgICAgICAgICAgICAgICAgICAgKGUucXVvdGF0aW9uTGlzdFthXS52b2x1bWUgPSB0LnZvbHVtZSksCiAgICAgICAgICAgICAgICAgICAgICAoZS5xdW90YXRpb25MaXN0W2FdLmhpZ2ggPSB0LmhpZ2gpLAogICAgICAgICAgICAgICAgICAgICAgKGUucXVvdGF0aW9uTGlzdFthXS5sb3cgPSB0LmxvdykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIGxpbmtzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS4kcm91dGVyLnB1c2goeyBwYXRoOiAiL2xldmVyZGVhbENlbnRlciIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgbWluZV9vdmVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS5jb2RlU2hvdyA9ICEwOwogICAgICAgICAgfSwKICAgICAgICAgIG1pbmVfb3V0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgZS5jb2RlU2hvdyA9ICExOwogICAgICAgICAgfSwKICAgICAgICAgIGdldFN3aXBlcjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLnN3aXBlckltZ3MgPSBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWQ6IDk5LAogICAgICAgICAgICAgICAgY19pZDogNCwKICAgICAgICAgICAgICAgIGxhbmc6ICJ6aCIsCiAgICAgICAgICAgICAgICB0aXRsZTogIklGVEkiLAogICAgICAgICAgICAgICAgdGh1bWJuYWlsOiAiaHR0cDovL3d3dy5pZnRpZXguY29tL2ltYWdlcy96d3RwLnBuZyIsCiAgICAgICAgICAgICAgICBjb3ZlcjogImh0dHA6Ly93d3cuaWZ0aWV4LmNvbS9pbWFnZXMvend0cC5wbmciLAogICAgICAgICAgICAgICAgc29ydHM6IDAsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZDogOTksCiAgICAgICAgICAgICAgICBjX2lkOiA0LAogICAgICAgICAgICAgICAgbGFuZzogInpoIiwKICAgICAgICAgICAgICAgIHRpdGxlOiAiSUZUSSIsCiAgICAgICAgICAgICAgICB0aHVtYm5haWw6ICJodHRwOi8vd3d3LmlmdGlleC5jb20vaW1hZ2VzL3p3dHAucG5nIiwKICAgICAgICAgICAgICAgIGNvdmVyOiAiaHR0cDovL3d3dy5pZnRpZXguY29tL2ltYWdlcy96d3RwLnBuZyIsCiAgICAgICAgICAgICAgICBzb3J0czogMCwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBqciA9IFdyLAogICAgICBxciA9IChhKCJkZDc1IiksIE9iamVjdChoWyJhIl0pKGpyLCBVciwgT3IsICExLCBudWxsLCAiYTVlYzVkY2EiLCBudWxsKSksCiAgICAgIEdyID0gcXIuZXhwb3J0cywKICAgICAgWnIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiZm9yZ2V0LWJveCIgfSwKICAgICAgICAgIFsKICAgICAgICAgICAgYSgiaW5kZXhIZWFkZXIiKSwKICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImNvbnRlbnRCSyIgfSwgWwogICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50LXdyYXAiIH0sIFsKICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJhY2NvdW50IiB9LCBbCiAgICAgICAgICAgICAgICAgIGUuc2hvd1Jlc2V0CiAgICAgICAgICAgICAgICAgICAgPyBlLl9lKCkKICAgICAgICAgICAgICAgICAgICA6IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtYWluIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAibWFpbl90aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJmb3JnZXQuZnB3ZCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAicmVnaXN0ZXItaW5wdXQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWl0ZW0iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50cyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5hY2NvdW50X251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAiYWNjb3VudF9udW1iZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5wdXQtbWFpbiBpbnB1dC1jb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJ0ZXh0IiwgaWQ6ICJhY2NvdW50IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUuYWNjb3VudF9udW1iZXIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuYWNjb3VudF9udW1iZXIgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWlucHV0IGNvZGUtaW5wdXQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWl0ZW0iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJjb2RlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29kZS1ib3giIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnBob25lQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJwaG9uZUNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5wdXQtbWFpbiBpbnB1dC1jb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogInRleHQiLCBpZDogInB3ZCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUucGhvbmVDb2RlIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUucGhvbmVDb2RlID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogImJ1dHRvbiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5zZXRUaW1lIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiZm9yZ2V0LmdldGNvZGUiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljU3R5bGU6IHsgIm1hcmdpbi10b3AiOiAiMTBweCIgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pdGVtIiB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAicmVnaXN0ZXItYnV0dG9uIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJidXR0b24iIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLmNoZWNrIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJjb25maXJtIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBlLnNob3dSZXNldAogICAgICAgICAgICAgICAgICAgID8gYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW4iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm1haW5fdGl0bGUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibHB3ZC5zcHdkIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pbnB1dCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAicmVnaXN0ZXItaXRlbSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImZvcmdldC5pbnB3ZCIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5wYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicGFzc3dvcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5wdXQtbWFpbiBpbnB1dC1jb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJwYXNzd29yZCIsIGlkOiAicHdkIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUucGFzc3dvcmQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUucGFzc3dvcmQgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWlucHV0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pdGVtIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiZm9yZ2V0LnJlcHdkIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnJlX3Bhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJyZV9wYXNzd29yZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpbnB1dC1tYWluIGlucHV0LWNvbnRlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogInBhc3N3b3JkIiwgaWQ6ICJyZXB3ZCIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLnJlX3Bhc3N3b3JkIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLnJlX3Bhc3N3b3JkID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dHRvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1idXR0b24gY3VyUGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJtYXJnaW4tdG9wIjogIjIwcHgiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAiYnV0dG9uIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUucmVzZXRQYXNzIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdigi56Gu6K6kIildCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgIDogZS5fZSgpLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJpbmRleEZvb3RlciIpLAogICAgICAgICAgXSwKICAgICAgICAgIDEKICAgICAgICApOwogICAgICB9LAogICAgICBRciA9IFtdLAogICAgICBIciA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBpbmRleEZvb3RlcjogSyB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGlzTWI6ICEwLAogICAgICAgICAgICBhY2NvdW50X251bWJlcjogIiIsCiAgICAgICAgICAgIHBob25lQ29kZTogIiIsCiAgICAgICAgICAgIHNob3dSZXNldDogITEsCiAgICAgICAgICAgIHBhc3N3b3JkOiAiIiwKICAgICAgICAgICAgcmVfcGFzc3dvcmQ6ICIiLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHt9LAogICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgIHNlbmRDb2RlOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpLyIgKyBlLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgdXNlcl9zdHJpbmc6IHRoaXMuYWNjb3VudF9udW1iZXIsIHR5cGU6ICJmb3JnZXQiIH0sCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBzZXRUaW1lOiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICBpZiAoIWUudGFyZ2V0LmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgdmFyIHQgPSAvXjFbMzQ1Njc4XVxkezl9JC8sCiAgICAgICAgICAgICAgICBhID0gInNtc19zZW5kIiwKICAgICAgICAgICAgICAgIGkgPQogICAgICAgICAgICAgICAgICAvXihbYS16QS1aMC05XStbX3xcX3xcLl0/KSpbYS16QS1aMC05XStAKFthLXpBLVowLTldK1tffFxffFwuXT8pKlthLXpBLVowLTldK1wuW2EtekEtWl17MiwzfSQvOwogICAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLmFjY291bnRfbnVtYmVyKSB7CiAgICAgICAgICAgICAgICBpZiAodC50ZXN0KHRoaXMuYWNjb3VudF9udW1iZXIpKTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBpZiAoIWkudGVzdCh0aGlzLmFjY291bnRfbnVtYmVyKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCBsYXllci50aXBzKAogICAgICAgICAgICAgICAgICAgICAgIuaCqOi+k+WFpeeahOaJi+acuuaIlumCrueusei0puWPt+S4jeespuWQiOinhOWImSEiLAogICAgICAgICAgICAgICAgICAgICAgIiNhY2NvdW50IgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIChhID0gInNtc19tYWlsIiksICh0aGlzLmlzTWIgPSAhMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDb2RlKGEpOwogICAgICAgICAgICAgICAgdmFyIG4gPSA2MCwKICAgICAgICAgICAgICAgICAgcyA9IG51bGw7CiAgICAgICAgICAgICAgICBzID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgKChlLnRhcmdldC5pbm5lckhUTUwgPSBuICsgIuenkiIpLAogICAgICAgICAgICAgICAgICAgIChlLnRhcmdldC5kaXNhYmxlZCA9ICEwKSwKICAgICAgICAgICAgICAgICAgICAwID09IG4pCiAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKAogICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChzKSwKICAgICAgICAgICAgICAgICAgICAgIChlLnRhcmdldC5pbm5lckhUTUwgPSAi6aqM6K+B56CBIiksCiAgICAgICAgICAgICAgICAgICAgICB2b2lkIChlLnRhcmdldC5kaXNhYmxlZCA9ICExKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgIG4tLTsKICAgICAgICAgICAgICAgIH0sIDFlMyk7CiAgICAgICAgICAgICAgfSBlbHNlIGxheWVyLnRpcHMoIuivt+i+k+WFpei0puWPtyIsICIjYWNjb3VudCIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgY2hlY2s6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSAvXjFbMzQ1Njc4XVxkezl9JC8sCiAgICAgICAgICAgICAgYSA9CiAgICAgICAgICAgICAgICAvXihbYS16QS1aMC05XStbX3xcX3xcLl0/KSpbYS16QS1aMC05XStAKFthLXpBLVowLTldK1tffFxffFwuXT8pKlthLXpBLVowLTldK1wuW2EtekEtWl17MiwzfSQvLAogICAgICAgICAgICAgIGkgPSB0aGlzLmFjY291bnRfbnVtYmVyLAogICAgICAgICAgICAgIG4gPSB0LnRlc3QoaSksCiAgICAgICAgICAgICAgcyA9IGEudGVzdChpKSwKICAgICAgICAgICAgICBvID0gInVzZXIvY2hlY2tfbW9iaWxlIiwKICAgICAgICAgICAgICByID0ge307CiAgICAgICAgICAgIGlmICgiIiAhPSBpKQogICAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLnBob25lQ29kZSkgewogICAgICAgICAgICAgICAgaWYgKHMpCiAgICAgICAgICAgICAgICAgIChvID0gInVzZXIvY2hlY2tfZW1haWwiKSwgKHIuZW1haWxfY29kZSA9IHRoaXMucGhvbmVDb2RlKTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgbGF5ZXIudGlwcygKICAgICAgICAgICAgICAgICAgICAgICLmgqjovpPlhaXnmoTpgq7nrrHmiJbmiYvmnLrlj7fkuI3nrKblkIjop4TliJkhIiwKICAgICAgICAgICAgICAgICAgICAgICIjYWNjb3VudCIKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAobyA9ICJ1c2VyL2NoZWNrX21vYmlsZSIpLCAoci5tb2JpbGVfY29kZSA9IHRoaXMucGhvbmVDb2RlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAoeyB1cmw6ICIvYXBpLyIgKyBvLCBtZXRob2Q6ICJwb3N0IiwgZGF0YTogciB9KS50aGVuKAogICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIGxheWVyLm1zZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmIChlLnNob3dSZXNldCA9ICEwKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICB9IGVsc2UgbGF5ZXIudGlwcygi6K+36L6T5YWl6aqM6K+B56CBISIsICIjcHdkIik7CiAgICAgICAgICAgIGVsc2UgbGF5ZXIudGlwcygi6K+36L6T5YWl6LSm5Y+3ISIsICIjYWNjb3VudCIpOwogICAgICAgICAgfSwKICAgICAgICAgIHJlc2V0UGFzczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLnBhc3N3b3JkKQogICAgICAgICAgICAgIGlmICgiIiAhPSB0aGlzLnJlX3Bhc3N3b3JkKQogICAgICAgICAgICAgICAgaWYgKHRoaXMucGFzc3dvcmQgPT09IHRoaXMucmVfcGFzc3dvcmQpIHsKICAgICAgICAgICAgICAgICAgdmFyIHQgPSB7CiAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50X251bWJlciwKICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICByZXBhc3N3b3JkOiB0aGlzLnJlX3Bhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgIGNvZGU6IHRoaXMucGhvbmVDb2RlLAogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3VzZXIvZm9yZ2V0IiwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB0LAogICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgZS4kcm91dGVyLnB1c2goIi9jb21wb25lbnRzL2xvZ2luIik7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIGxheWVyLm1zZygi5Lik5qyh6L6T5YWl55qE5a+G56CB5LiN5LiA6Ie0Iik7CiAgICAgICAgICAgICAgZWxzZSBsYXllci5tc2coIuivt+WGjeasoei+k+WFpeWvhueggSIpOwogICAgICAgICAgICBlbHNlIGxheWVyLm1zZygi6K+36L6T5YWl5a+G56CBIik7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIEtyID0gSHIsCiAgICAgIEpyID0gKGEoIjE0MjgiKSwgT2JqZWN0KGhbImEiXSkoS3IsIFpyLCBRciwgITEsIG51bGwsICIyNGZmNjI2OSIsIG51bGwpKSwKICAgICAgWXIgPSBKci5leHBvcnRzLAogICAgICBYciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJyZXNldC1ib3giIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGEoImluZGV4SGVhZGVyIiksCiAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50QksiIH0sIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudC13cmFwIiB9LCBbCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudCIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAibWFpbiIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAibWFpbl90aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxncHdkLnNldHB3ZCIpKSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWlucHV0IiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInJlZ2lzdGVyLWl0ZW0iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImxwd2QubmV3cHdkIikpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUucHdkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInB3ZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJpbnB1dC1tYWluIGlucHV0LWNvbnRlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAicGFzc3dvcmQiLCBtYXhsZW5ndGg6ICIyMCIsIGlkOiAicHdkIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5wd2QgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5wd2QgPSB0LnRhcmdldC52YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pbnB1dCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJyZWdpc3Rlci1pdGVtIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJscHdkLnJlcHdkIikpKSwKICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUucmVwd2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAicmVwd2QiLAogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiaW5wdXQtbWFpbiBpbnB1dC1jb250ZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAicGFzc3dvcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aDogIjE2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogInJlcHdkIiwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUucmVwd2QgfSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fCAoZS5yZXB3ZCA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNTdHlsZTogeyAibWFyZ2luLXRvcCI6ICIxMHB4IiB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAicmVnaXN0ZXItaXRlbSIgfSksCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAiYnV0dG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAicmVnaXN0ZXItYnV0dG9uIGN1clBlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUucmVzZXQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJjb25maXJtIikpKV0KICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBhKCJpbmRleEZvb3RlciIpLAogICAgICAgICAgXSwKICAgICAgICAgIDEKICAgICAgICApOwogICAgICB9LAogICAgICBlbCA9IFtdLAogICAgICB0bCA9IHsKICAgICAgICBjb21wb25lbnRzOiB7IGluZGV4SGVhZGVyOiBBLCBpbmRleEZvb3RlcjogSyB9LAogICAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiB7IHB3ZDogIiIsIHJlcHdkOiAiIiwgdXNlcl9zdHJpbmc6ICIiIH07CiAgICAgICAgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmFjY291bnRfbnVtYmVyID0gdGhpcy4kcm91dGUucGFyYW1zLnVzZXJfc3RyaW5nIHx8ICIiOwogICAgICAgIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiIsZSA9IHRoaXM7CiAgICAgICAgICAgICIiICE9IHRoaXMucHdkCiAgICAgICAgICAgICAgPyAiIiAhPSB0aGlzLnJlcHdkCiAgICAgICAgICAgICAgICA/IHRoaXMucHdkID09PSB0aGlzLnJlcHdkCiAgICAgICAgICAgICAgICAgID8gdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS91c2VyL2VfcHdkIiwKICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRva2VuIH0sCiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBwd2Q6IHRoaXMucHdkLCByZXB3ZDogdGhpcy5yZXB3ZCB9LAogICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgbGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgZS4kcm91dGVyLnB1c2goIi9jb21wb25lbnRzL2xvZ2luIik7CiAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGUuJHQoImxheS50d29wd2QiKSkKICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKGUuJHQoImxncHdkLnJlbmV3cHdkIikpCiAgICAgICAgICAgICAgOiBsYXllci5tc2coZS4kdCgibHB3ZC5wd2QiKSk7CiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0sCiAgICAgIGFsID0gdGwsCiAgICAgIGlsID0gKGEoIjdlNTUiKSwgT2JqZWN0KGhbImEiXSkoYWwsIFhyLCBlbCwgITEsIG51bGwsICIzZWQzOGRjZCIsIG51bGwpKSwKICAgICAgbmwgPSBpbC5leHBvcnRzLAogICAgICBzbCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZSA9IHRoaXMsCiAgICAgICAgICB0ID0gZS4kY3JlYXRlRWxlbWVudCwKICAgICAgICAgIGEgPSBlLl9zZWxmLl9jIHx8IHQ7CiAgICAgICAgcmV0dXJuIGEoCiAgICAgICAgICAiZGl2IiwKICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJib3giIH0sCiAgICAgICAgICBbCiAgICAgICAgICAgIGEoImluZGV4SGVhZGVyIiksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhY2NvdW50IiwKICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJwYWRkaW5nLXRvcCI6ICI0OHB4IiB9LAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRvcGNvbnRlbnQgZnQyMCAiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJ3aGl0ZSIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiYmFzZUNvbG9yIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5hc3NldHMiKSkgKyAiPiIpLAogICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgIGUuX3YoIiAiICsgZS5fcyhlLiR0KCJhY2NvdW50LnVwYWRkcmVzcyIpKSksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudCIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29uX2JveCIgfSwgWwogICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50QksgZkNvbG9yMSAgcGRscjIwIHBkdGIyMCBmdDEyIiB9LAogICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAidzEwIG1yMjAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJtYXJrZXQuY3VycmVuY3kiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgbXIyMCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQud2hhZGRyZXNzIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgic2V0LnJlbWFya3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogIm10MTAiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuYWRkSWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJhZGRJZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ3MTAgbXIyMCAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6ICIiLCBpZDogIiIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2FsbCh0LnRhcmdldC5vcHRpb25zLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX3ZhbHVlIiBpbiBlID8gZS5fdmFsdWUgOiBlLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuYWRkSWQgPSB0LnRhcmdldC5tdWx0aXBsZSA/IGEgOiBhWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnNldENvaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGF0dHJzOiB7IHZhbHVlOiAiJHQoJ21hcmtldC5jdXJyZW5jeScpIiB9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoIm1hcmtldC5jdXJyZW5jeSIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9sKGUuY29pbnMsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsga2V5OiBpLCBkb21Qcm9wczogeyB2YWx1ZTogdC5pZCB9IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3ModC5uYW1lKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUuYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICJhZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXgxIG1yMjAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogZS4kdCgid0FkZHJlc3MuZW50ZXJBZGRyZXNzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBlLmFkZHJlc3MgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmNvbXBvc2luZyB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5hZGRyZXNzID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImlucHV0IiwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLm5vdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogIm5vdGVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogImZsZXgxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGUuJHQoIndBZGRyZXNzLmVudGVyTWFyayIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5ub3RlcyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQuY29tcG9zaW5nIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLm5vdGVzID0gdC50YXJnZXQudmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWRkIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYmFzZUJ0biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IGUuYWRkQWRkcmVzcyB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoInNldC5hZGQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb25fYm94IG10MTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiYWNjb3VudF90aXRsZSB0dEJrIHdoaXRlIGZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJtbDIwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJ3QWRkcmVzcy5hZGRyZXNzTGlzdCIpKSksCiAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgImRpdiIsCiAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29udGVudEJLIGZDb2xvcjEgIHBkbHIyMCBwZHRiMjAgZnQxMiIgfSwKICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXggYWxjZW50ZXIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgibWFya2V0LmN1cnJlbmN5IikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC53aGFkZHJlc3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJzZXQucmVtYXJrcyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0ciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImRvIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5saXN0LCBmdW5jdGlvbiAodCwgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhKCJkaXYiLCB7IGtleTogaSwgc3RhdGljQ2xhc3M6ICJtdDEwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBhbGNlbnRlciIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUubm93Q29pbikgKyAiICIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyh0LmFkZHJlc3MpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModC5ub3RlcykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmbGV4MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5kZWxBZGRyZXNzKHQuaWQsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgid0FkZHJlc3MuZGVsIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZS5saXN0Lmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICAgID8gZS5fZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAibm9uZSBjb2xvcjEgdGMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBhZGRpbmc6ICIyMHB4IDAiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KCIgIiArIGUuX3MoZS4kdCgidHBjLm5vZGF0YSIpKSArICIgIildCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgIDIKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0KICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICAxCiAgICAgICAgKTsKICAgICAgfSwKICAgICAgb2wgPSBbXSwKICAgICAgcmwgPSB7CiAgICAgICAgbmFtZTogImZpbmFucmVjIiwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b2tlbjogIiIsCiAgICAgICAgICAgIGxhbmc6ICIiLAogICAgICAgICAgICBjb2luczogW10sCiAgICAgICAgICAgIG5vd0NvaW46ICIiLAogICAgICAgICAgICBsaXN0OiBbXSwKICAgICAgICAgICAgYWRkcmVzczogIiIsCiAgICAgICAgICAgIG5vdGVzOiAiIiwKICAgICAgICAgICAgYWRkSWQ6IHRoaXMuJHQoIm1hcmtldC5jdXJyZW5jeSIpLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEgfSwKICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB0aGlzLmdldENvaW5zKCk7CiAgICAgICAgfSwKICAgICAgICBtZXRob2RzOiB7CiAgICAgICAgICBnZXRDb2luczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICh0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiIpLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY3VycmVuY3lsaXN0IiwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICJvayIgPT0gdC5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgMCAhPSB0LmRhdGEubWVzc2FnZS5sZW5ndGggJiYKICAgICAgICAgICAgICAgICAgKGUuY29pbnMgPSB0LmRhdGEubWVzc2FnZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2V0Q29pbjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKHRoaXMuYWRkSWQgIT0gdGhpcy4kdCgibWFya2V0LmN1cnJlbmN5IikpIHsKICAgICAgICAgICAgICB2YXIgdCA9IGUudGFyZ2V0LnNlbGVjdGVkSW5kZXgsCiAgICAgICAgICAgICAgICBhID0gZS50YXJnZXQucXVlcnlTZWxlY3RvckFsbCgib3B0aW9uIilbdF07CiAgICAgICAgICAgICAgKHRoaXMubm93Q29pbiA9IGEudGV4dCksIHRoaXMuZ2V0TGlzdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0TGlzdDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgICh0aGlzLnRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfHwgIiIpLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvZ2V0X2FkZHJlc3MiLAogICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICBkYXRhOiB7IGN1cnJlbmN5OiB0aGlzLmFkZElkIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlID8gKGUubGlzdCA9IHQuZGF0YS5tZXNzYWdlKSA6IChlLmxpc3QgPSBbXSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgZGVsQWRkcmVzczogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9kZWxhZGRyZXNzIiwKICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICBkYXRhOiB7IGFkZHJlc3NfaWQ6IGUgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgIChhLmxpc3Quc3BsaWNlKHQsIDEpLCBsYXllci5tc2coZS5kYXRhLm1lc3NhZ2UpKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgYWRkQWRkcmVzczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuYWRkSWQgIT0gdGhpcy4kdCgibWFya2V0LmN1cnJlbmN5IikKICAgICAgICAgICAgICA/ICIiICE9IHRoaXMuYWRkcmVzcwogICAgICAgICAgICAgICAgPyB0aGlzLiRodHRwKHsKICAgICAgICAgICAgICAgICAgICB1cmw6ICIvYXBpL3dhbGxldC9hZGRhZGRyZXNzIiwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHRoaXMudG9rZW4gfSwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeV9pZDogdGhpcy5hZGRJZCwKICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHRoaXMuYWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgIG5vdGVzOiB0aGlzLm5vdGVzLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgICAgICAobGF5ZXIubXNnKHQuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgICAgIChlLmFkZHJlc3MgPSAiIiksCiAgICAgICAgICAgICAgICAgICAgICAoZS5ub3RlcyA9ICIiKSwKICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0TGlzdCgpKTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIDogbGF5ZXIubXNnKHRoaXMuJHQoIndBZGRyZXNzLmVudGVyQWRkcmVzcyIpKQogICAgICAgICAgICAgIDogbGF5ZXIubXNnKHRoaXMuJHQoImNhaXd1LnNlbEN1IikpOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICB9LAogICAgICBsbCA9IHJsLAogICAgICBjbCA9IChhKCI0OWM2IiksIE9iamVjdChoWyJhIl0pKGxsLCBzbCwgb2wsICExLCBudWxsLCAiZmEyNzFhZGUiLCBudWxsKSksCiAgICAgIGRsID0gY2wuZXhwb3J0cywKICAgICAgdWwgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgdCA9IGUuJGNyZWF0ZUVsZW1lbnQsCiAgICAgICAgICBhID0gZS5fc2VsZi5fYyB8fCB0OwogICAgICAgIHJldHVybiBhKCJkaXYiLCB7fSwgWwogICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImhlYWRlciBmQ29sb3IxIiB9LCBbCiAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmwiIH0sIFsKICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC50b3RhbGFzc2V0cyIpKSArICLvvJogIiksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhc3NldF9udW0iIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLl9mKCJ0b0ZpeGVkcyIpKGUudG90bGUpKSksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJhc3NldF9uYW1lIiB9LCBbZS5fdigiIFVTRFQiKV0pLAogICAgICAgICAgICBdKSwKICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmciByaWdodF90ZXh0IiB9LCBbCiAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJhZGRyZXNzIGhpZGUiLAogICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS53aXRoZHJhd19hZGRyZXNzIH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJhY2NvdW50LnVwYWRkcmVzcyIpKSldCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICBdKSwKICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJjb250ZW50IGZDb2xvcjEgZnQxMiIgfSwgWwogICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiY29udGVudF90b3AgZmxleCBhbGNlbnRlciBmQ29sb3IyIiB9LCBbCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuJHQoIm1hcmtldC5jdXJyZW5jeSIpKSArICIgIiksCiAgICAgICAgICAgICAgICBhKCJpIiksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmZyZWV6ZXMiKSkpLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmNvbnZlcnNpb24iKSkgKyAiKFVTRFQpIiksCiAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgW2UuX3YoZS5fcyhlLiR0KCJkbyIpKSldKSwKICAgICAgICAgICAgXSksCiAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAiY29udGVudF91bCIgfSwKICAgICAgICAgICAgICBlLl9sKGUuYXNzZXRfbGlzdCwgZnVuY3Rpb24gKHQsIGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAxID09IHQuaXNfbGVnYWwgJiYgMSA9PSB0LmlzX21pY3JvCiAgICAgICAgICAgICAgICAgID8gYSgibGkiLCB7IGtleTogaSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogImNvbnRlbnRfbGkgZmxleCBhbGNlbnRlciBiZXR3ZWVuIiB9LAogICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQuY3VycmVuY3lfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5fZigidG9GaXhlZHMiKSh0Lm1pY3JvX2JhbGFuY2UgfHwgIjAuMDAiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmbGV4MSB0YyIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKHQubG9ja19taWNyb19iYWxhbmNlIHx8ICIwLjAwIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvRml4ZWRzIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnVzZHRfcHJpY2UgKiB0Lm1pY3JvX2JhbGFuY2UgfHwgIjAuMDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZmxleDEgdGMgb3BlcmF0aW9uIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnRyYW5zSW4oaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgidHJhbnNpbiIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50cmFuc091dChpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2UuX3YoZS5fcyhlLiR0KCJ0cmFuc291dCIpKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5yZWMoaSwgdC5jdXJyZW5jeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5yZWNvcmQiKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgIGkgPT0gZS5hY3RpdmUKICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaGlkZV9kaXYiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZkNvbG9yMiBmdDEyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmNnYWRkcmVzcyIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAibXQ1MCBtYjUwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZnQxOCBmQ29sb3IxIGV4Y2hhcmdlX2FkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYmc6IGUuZmxhZ3MgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS5leGNoYXJnZV9hZGRyZXNzKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiY29weSBmdDE0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGlkOiAiY29weSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLmNvcHkgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jb3B5IikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJld21fd3JhcCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZXdtIGZ0MTQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogZS5zaG93X2V3bSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jb2RlIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiZXdtX2ltZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBoaWRlOiBlLmlzSGlkZSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6ICJjb2RlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIGZDb2xvcjIgbWI1MCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KCIgIiArIGUuX3MoZS4kdCgiYWNjb3VudC52aWV3IikpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJleGNoYXJnZV9yZWNvcmQiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jaGFycmVjb3JkIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3YoZS5fcyhlLiR0KCJhY2NvdW50LmZzdGF1cyIpKSArICIgIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInAiLCB7IHN0YXRpY0NsYXNzOiAiZnQxMiBmQ29sb3IyIG1iMTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQubm90aWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc191bCBmdDEyIGZDb2xvcjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7ICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50LmExIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3ModC5jdXJyZW5jeV9uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQuYTIiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRoIiA9PSB0LmN1cnJlbmN5X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZS5fcyhlLiR0KCJhY2NvdW50LmE0IikpICsgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiYnRjIiA9PSB0LmN1cnJlbmN5X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsgZS5fcyhlLiR0KCJhY2NvdW50LmE5IikpICsgIiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiZXJjMjAiID09IHQuY3VycmVuY3lfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX2xpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0LXN0eWxlIjogImRpc2MgaW5zaWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKGUuJHQoImFjY291bnQuYTQiKSkgKyAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJvbW5pIiA9PSB0LmN1cnJlbmN5X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBVU0RUIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50LmEzIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgICAgICAgICAgICAgICAgICAgICA6IGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgIGkgPT0gZS5hY3RpdmUwMQogICAgICAgICAgICAgICAgICAgICAgICA/IGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJoaWRlX2RpdiIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTIgbWIxNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jaGFkZHJlc3MiKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICJtb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1tb2RlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogImFkZHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAiYWRkcmVzc19pbnAgZkNvbG9yMSBtYjMwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcGxhY2Vob2xkZXI6IGUudGliaV9tc2csIHR5cGU6ICJ0ZXh0IiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogZS5hZGRyZXNzIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUuYWRkcmVzcyA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmQ29sb3IyIGZ0MTIgbWIxNSBmbGV4IGJldHdlZW4gYWxjZW50ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgibnVtYmVyIikpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIgKyBlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkgKyAi77yaICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgeyBzdGF0aWNDbGFzczogInVzZV9udW0iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fZigidG9GaXhlZHMiKShlLmJhbGFuY2UgfHwgIjAuMDAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigiICIgKyBlLl9zKGUuY29pbm5hbWUpICsgIiAiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJudW1fbGFiIGZsZXggYmV0d2VlbiBtYjMwIiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiaW5wdXQiLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS5udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJmQ29sb3IxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGNvbG9yOiAid2hpdGUiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBlLm1pbl9udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGUubnVtYmVyIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5jb21wb3NpbmcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLm51bWJlciA9IHQudGFyZ2V0LnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS5jb2lubmFtZSkpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiZmxleCBtYjUwIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoImRpdiIsIHsgc3RhdGljQ2xhc3M6ICJsZWZ0X2lucF93cmFwIGZsZXgxIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTIgbWIxNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgicmF0ZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUucmF0ZW51bSkgKyAiJSIpXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYW5nZV9sYWIgZmxleCBhbGNlbnRlciBiZXR3ZWVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvRml4ZWRzIikoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGUubnVtYmVyICogZS5yYXRlbnVtKSAvIDEwMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuY29pbm5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXYiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6ICJyaWdodF9pbnBfd3JhcCBmbGV4MSIgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJwIiwgeyBzdGF0aWNDbGFzczogIm1iMTUiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIHsgc3RhdGljQ2xhc3M6ICJmQ29sb3IyIGZ0MTIiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5oYXZlbnVtIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRfbGFiIGZsZXggYWxjZW50ZXIgYmV0d2VlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKCJzcGFuIiwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9mKCJ0b0ZpeGVkcyIpKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5udW1iZXIgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5udW1iZXIgKiBlLnJhdGVudW0pIC8gMTAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuY29pbm5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgiIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgyIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgicCIsIHsgc3RhdGljQ2xhc3M6ICJmdDEyIGZDb2xvcjIgbWIxNSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKGUuJHQoImFjY291bnQubm90aWNlIikpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6ICJ0aXBzX3VsIGZ0MTIgZkNvbG9yMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidGlwc19saSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdC1zdHlsZSI6ICJkaXNjIGluc2lkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImFjY291bnQubWlubnVtIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yaIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm1pbl9udW1iZXJfdHh0KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmNvaW5uYW1lKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIuOAgiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS4kdCgiYWNjb3VudC5vbmNlbWF4bnVtIikpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi77yaIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLm1heF9udW1iZXIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuY29pbm5hbWUpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi44CCIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJhY2NvdW50LmRheW51bSIpKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLmRheV9saW1pdCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoZS5jb2lubmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogInRpcHNfbGkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3Qtc3R5bGUiOiAiZGlzYyBpbnNpZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC5jYWxsIikpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogImZsZXgxIHRjIiB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXR0b24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIndpdGhkcmF3X2J0biIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBlLm1lbnRpb24gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUuJHQoImFjY291bnQud2l0aGRyYXciKSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICBpID09IGUuYWN0aXZlMDIKICAgICAgICAgICAgICAgICAgICAgICAgPyBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAiaGlkZV9kaXYgcmVjLWJveCIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlYy1jb24iIH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInJlYy10aXRsZSIgfSwgWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbZS5fdihlLl9zKGUuJHQoIm51bWJlciIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3MoZS4kdCgidGltZSIpKSldKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiAicmVjLWxpc3QiIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fbChlLnJlY0RhdGEsIGZ1bmN0aW9uICh0LCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgibGkiLCB7IGtleTogaSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoInNwYW4iLCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX3MoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2YoInRvRml4ZWRzIikodC52YWx1ZSB8fCAiMC4wMCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuX2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSgic3BhbiIsIFtlLl92KGUuX3ModC5jcmVhdGVkX3RpbWUpKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogIm1vcmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUubW9yZURhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZS5fdihlLl9zKGUubW9yZSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlLl9lKCksCiAgICAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgICAgICAgOiBlLl9lKCk7CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgMAogICAgICAgICAgICApLAogICAgICAgICAgXSksCiAgICAgICAgICBhKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmFtZTogInNob3ciLAogICAgICAgICAgICAgICAgICByYXdOYW1lOiAidi1zaG93IiwKICAgICAgICAgICAgICAgICAgdmFsdWU6IGUudHJhbnNmZXJEYXRhLm1vZGFsU2hvdywKICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInRyYW5zZmVyRGF0YS5tb2RhbFNob3ciLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAidHJhbnNmZXItbW9kYWwgZmxleCIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICBhKCJkaXYiLCB7IHN0YXRpY0NsYXNzOiAidHJhbnNmZXItbWFzayIgfSwgWwogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRyYW5zZmVyLWhlYWRlciIgfSwgWwogICAgICAgICAgICAgICAgICBhKCJoMyIsIFtlLl92KGUuX3MoZS4kdCgiYWNjb3VudC50cmFuc2ZlciIpKSldKSwKICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAicCIsCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY2xvc2VzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgW2UuX3YoIlgiKV0KICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgYSgiZGl2IiwgeyBzdGF0aWNDbGFzczogInRyYW5zZmVyLWNvbnRlbnQiIH0sIFsKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuJHQoImMyYy5jdXJyZW5jeSIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLnRyYW5zZmVyRGF0YS50cmFuc2Zlck5hbWUpKV0pLAogICAgICAgICAgICAgICAgICAgIGEoInAiLCBbCiAgICAgICAgICAgICAgICAgICAgICBlLl92KAogICAgICAgICAgICAgICAgICAgICAgICBlLl9zKGUuJHQoImNlbnRlci5hdmFpbGFibGUiKSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fcyhlLiR0KCJjZmMuYmFsYW5jZSIpKQogICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgICBhKCJwIiwgW2UuX3YoZS5fcyhlLnRyYW5zZmVyRGF0YS50cmFuc2ZlckJhbGFuY2UpKV0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCBbZS5fdigi5LuOIildKSwKICAgICAgICAgICAgICAgICAgICBhKAogICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCIsCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAibW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogInYtbW9kZWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGUudHJhbnNmZXJEYXRhLnN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogInRyYW5zZmVyRGF0YS5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwodC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gIl92YWx1ZSIgaW4gZSA/IGUuX3ZhbHVlIDogZS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHJhbnNmZXJEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRhcmdldC5tdWx0aXBsZSA/IGEgOiBhWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgZS5fbChlLmJhbGFuY2VMaXN0LCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSgib3B0aW9uIiwgeyBkb21Qcm9wczogeyB2YWx1ZTogdCB9IH0sIFsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLl92KGUuX3ModCkpLAogICAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAgICAgMAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgICAgICBhKCJkaXYiLCBbCiAgICAgICAgICAgICAgICAgICAgYSgicCIsIFtlLl92KGUuX3MoZS4kdCgidG8iKSkpXSksCiAgICAgICAgICAgICAgICAgICAgYSgKICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QiLAogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogIm1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6ICJ2LW1vZGVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnRyYW5zZmVyRGF0YS5lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAidHJhbnNmZXJEYXRhLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwodC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5zZWxlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gIl92YWx1ZSIgaW4gZSA/IGUuX3ZhbHVlIDogZS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLiRzZXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHJhbnNmZXJEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50YXJnZXQubXVsdGlwbGUgPyBhIDogYVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGUuX2woZS5iYWxhbmNlTGlzdCwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEoIm9wdGlvbiIsIHsgZG9tUHJvcHM6IHsgdmFsdWU6IHQgfSB9LCBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5fdihlLl9zKHQpKSwKICAgICAgICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgICAgYSgiZGl2IiwgWwogICAgICAgICAgICAgICAgICAgIGEoInAiLCBbZS5fdihlLl9zKGUuJHQoImNvdW50Lmh1YW51bSIpKSldKSwKICAgICAgICAgICAgICAgICAgICBhKCJpbnB1dCIsIHsKICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6ICJ0ZXh0IiwgcGxhY2Vob2xkZXI6ICIkdCgnbGF5Lmh1YW51bScpIiB9LAogICAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICBdKSwKICAgICAgICAgICAgICAgIF0pLAogICAgICAgICAgICAgIF0pLAogICAgICAgICAgICBdCiAgICAgICAgICApLAogICAgICAgIF0pOwogICAgICB9LAogICAgICBtbCA9IFtdLAogICAgICBwbCA9IHsKICAgICAgICBuYW1lOiAiZmluYW5jZSIsCiAgICAgICAgZmlsdGVyczogewogICAgICAgICAgdG9GaXhlZHM6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJldHVybiAoZSA9IE51bWJlcihlKSksIGUudG9GaXhlZCg4KTsKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b3RsZTogIiIsCiAgICAgICAgICAgIHJlY0RhdGE6IFtdLAogICAgICAgICAgICB0b2tlbjogIiIsCiAgICAgICAgICAgIGZsYWdzOiAhMSwKICAgICAgICAgICAgZmxhZzogITEsCiAgICAgICAgICAgIGlzSGlkZTogITAsCiAgICAgICAgICAgIGFjdGl2ZTogImEiLAogICAgICAgICAgICBhY3RpdmUwMTogImEiLAogICAgICAgICAgICB0aWJpX21zZzogdGhpcy4kdCgiYWNjb3VudC50aWJpIiksCiAgICAgICAgICAgIGFjdGl2ZTAyOiAiYSIsCiAgICAgICAgICAgIGFkZHI6ICIiLAogICAgICAgICAgICB1cmw6ICIiLAogICAgICAgICAgICBleGNoYXJnZV9hZGRyZXNzOiAiIiwKICAgICAgICAgICAgYWRkcmVzczogIiIsCiAgICAgICAgICAgIG51bWJlcjogIiIsCiAgICAgICAgICAgIHJhdGU6ICIiLAogICAgICAgICAgICBjb2lubmFtZTogIiIsCiAgICAgICAgICAgIGJhbGFuY2U6ICIiLAogICAgICAgICAgICByYXRlbnVtOiAiIiwKICAgICAgICAgICAgcmVhY2hudW06ICIiLAogICAgICAgICAgICBtaW5fbnVtYmVyOiAiIiwKICAgICAgICAgICAgbWluX251bWJlcl90eHQ6ICIiLAogICAgICAgICAgICBjdXJyZW5jeTogIiIsCiAgICAgICAgICAgIGFzc2V0X2xpc3Q6IFtdLAogICAgICAgICAgICB0aXBfbGlzdDogWwogICAgICAgICAgICAgIHRoaXMuJHQoImFjY291bnQuYTEiKSArICJVU0RUIiArIHRoaXMuJHQoImFjY291bnQuYTIiKSwKICAgICAgICAgICAgICAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEzIiksCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHRpcF9saXN0MDE6IFsKICAgICAgICAgICAgICB0aGlzLiR0KCJhY2NvdW50LmExIikgKyAiVVNEVCIgKyB0aGlzLiR0KCJhY2NvdW50LmEyIiksCiAgICAgICAgICAgICAgIlVTRFQiICsgdGhpcy4kdCgiYWNjb3VudC5hMyIpLAogICAgICAgICAgICBdLAogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBtb3JlOiB0aGlzLiR0KCJtb3JlIiksCiAgICAgICAgICAgIGJhbGFuY2VMaXN0OiBbCiAgICAgICAgICAgICAgdGhpcy4kdCgiYWNjb3VudC5sYWNjb3VudCIpLAogICAgICAgICAgICAgIHRoaXMuJHQoInVzZXJjZW50ZXIubGV2ZXIiKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgdHJhbnNmZXJEYXRhOiB7CiAgICAgICAgICAgICAgbW9kYWxTaG93OiAhMSwKICAgICAgICAgICAgICB0cmFuc2Zlck5hbWU6ICIiLAogICAgICAgICAgICAgIHRyYW5zZmVyQmFsYW5jZTogIiIsCiAgICAgICAgICAgICAgc3RhcnQ6ICIiLAogICAgICAgICAgICAgIGVuZDogIiIsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0YXR1czogIiIsCiAgICAgICAgICAgIGNoYW5nZUJhbGFuY2U6IFtdLAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGNvbXBvbmVudHM6IHsgaW5kZXhIZWFkZXI6IEEsIGxlZnQ6IG5uIH0sCiAgICAgICAgbWV0aG9kczogewogICAgICAgICAgdHJhbnNJbjogZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHQgPSB0aGlzLAogICAgICAgICAgICAgIGEgPSB0aGlzLAogICAgICAgICAgICAgIGkgPSB0aGlzLmNoYW5nZUJhbGFuY2UuZmlsdGVyKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdC5jdXJyZW5jeSA9PT0gYS5hc3NldF9saXN0W2VdLmN1cnJlbmN5OwogICAgICAgICAgICAgIH0pWzBdLAogICAgICAgICAgICAgIG4gPSB0aGlzLiR0KCJjZW50ZXIuYXZhaWxhYmxlIik7CiAgICAgICAgICAgIHRoaXMuJHByb21wdCgKICAgICAgICAgICAgICAiIgogICAgICAgICAgICAgICAgLmNvbmNhdChpLmN1cnJlbmN5X25hbWUsICIgIikKICAgICAgICAgICAgICAgIC5jb25jYXQobiwgIiAiKQogICAgICAgICAgICAgICAgLmNvbmNhdChpLmNoYW5nZV9iYWxhbmNlLCAiICIpLAogICAgICAgICAgICAgIHRoaXMuJHQoInRyYW5zZmVyRnJvbUNoYW5nZSIpLAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLiR0KCJ0cmFuc2ZlckZyb21DaGFuZ2UiKSwKICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHRoaXMuJHQoImxlZ2FsLmNlaWwiKSwKICAgICAgICAgICAgICAgIGlucHV0UGxhY2Vob2xkZXI6IHRoaXMuJHQoImFjY291bnQuaHVhbnVtIiksCiAgICAgICAgICAgICAgICBpbnB1dFR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICAgICAgY2xvc2VPbkNsaWNrTW9kYWw6ICExLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgKQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB2YXIgbiA9IGUudmFsdWU7CiAgICAgICAgICAgICAgICBhLiRodHRwKHsKICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvY2hhbmdlIiwKICAgICAgICAgICAgICAgICAgbWV0aG9kOiAicG9zdCIsCiAgICAgICAgICAgICAgICAgIGRhdGE6IHsKICAgICAgICAgICAgICAgICAgICBudW1iZXI6IG4sCiAgICAgICAgICAgICAgICAgICAgZnJvbV9maWVsZDogImNoYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgdG9fZmllbGQ6ICJtaWNybyIsCiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3lfaWQ6IGkuY3VycmVuY3ksCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oInRva2VuIikgfSwKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgICAgICAgKGEuZ2V0ZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgdC4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDbG9zZTogITAsCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGEuJHQoInRyYW5zZmVyT2siKSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgICAgICAgfSwKICAgICAgICAgIHRyYW5zT3V0OiBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB2YXIgdCA9IHRoaXMsCiAgICAgICAgICAgICAgYSA9IHRoaXMsCiAgICAgICAgICAgICAgaSA9IHRoaXMuYXNzZXRfbGlzdFtlXSwKICAgICAgICAgICAgICBuID0gdGhpcy4kdCgiY2VudGVyLmF2YWlsYWJsZSIpOwogICAgICAgICAgICB0aGlzLiRwcm9tcHQoCiAgICAgICAgICAgICAgIiIKICAgICAgICAgICAgICAgIC5jb25jYXQoaS5jdXJyZW5jeV9uYW1lLCAiICIpCiAgICAgICAgICAgICAgICAuY29uY2F0KG4sICIgIikKICAgICAgICAgICAgICAgIC5jb25jYXQoaS5taWNyb19iYWxhbmNlLCAiICIpLAogICAgICAgICAgICAgIHRoaXMuJHQoInRyYW5zZmVyQ2hhbmdlIiksCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMuJHQoInRyYW5zZmVyQ2hhbmdlIiksCiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLiR0KCJsZWdhbC5jZWlsIiksCiAgICAgICAgICAgICAgICBpbnB1dFBsYWNlaG9sZGVyOiB0aGlzLiR0KCJhY2NvdW50Lmh1YW51bSIpLAogICAgICAgICAgICAgICAgaW5wdXRUeXBlOiAibnVtYmVyIiwKICAgICAgICAgICAgICAgIGNsb3NlT25DbGlja01vZGFsOiAhMSwKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgdmFyIG4gPSBlLnZhbHVlOwogICAgICAgICAgICAgICAgYS4kaHR0cCh7CiAgICAgICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2NoYW5nZSIsCiAgICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgICBkYXRhOiB7CiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBuLAogICAgICAgICAgICAgICAgICAgIGZyb21fZmllbGQ6ICJtaWNybyIsCiAgICAgICAgICAgICAgICAgICAgdG9fZmllbGQ6ICJjaGFuZ2UiLAogICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBpLmN1cnJlbmN5LAogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0b2tlbiIpIH0sCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICJvayIgPT0gZS5kYXRhLnR5cGUgJiYKICAgICAgICAgICAgICAgICAgICAgIChhLmdldGRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgIHQuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2xvc2U6ICEwLAogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhLiR0KCJ0cmFuc2Zlck9rIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnb1JlY29yZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IG5hbWU6ICJjb2luUmVjb3JkIiB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpcywKICAgICAgICAgICAgICB0ID0gbmV3IENsaXBib2FyZCgiLmNvcHkiKTsKICAgICAgICAgICAgdC5vbigic3VjY2VzcyIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgbGF5ZXIuYWxlcnQoZS4kdCgibGF5LmNvcHlzIikpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBhbGVydChlLiR0KCJsYXkuZmNvcHkiKSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgZXhjaGFyZ2U6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIDEgPT0gdGhpcy5zdGF0dXMKICAgICAgICAgICAgICA/ICgodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgdGhpcy5mbGFnCiAgICAgICAgICAgICAgICAgID8gKCh0aGlzLmZsYWcgPSAhMSksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDIgPSAiYSIpKQogICAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9IGUpLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAxID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpLAogICAgICAgICAgICAgICAgdGhpcy5zZW5kRGF0YSh0KSkKICAgICAgICAgICAgICA6IGxheWVyLmFsZXJ0KHRoaXMuJHQoIm5vdG9wZW4iKSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2VuZERhdGE6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpczsKICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvZ2V0X2luX2FkZHJlc3MiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHsgY3VycmVuY3k6IGUgfSwKICAgICAgICAgICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IHQudG9rZW4gfSwKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgIm9rIiA9PSBlLmRhdGEudHlwZSAmJgogICAgICAgICAgICAgICAgICAoKHQuZXhjaGFyZ2VfYWRkcmVzcyA9IGUuZGF0YS5tZXNzYWdlKSwKICAgICAgICAgICAgICAgICAgJCgiI2NvZGUiKS5xcmNvZGUoewogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAsCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAsCiAgICAgICAgICAgICAgICAgICAgdGV4dDogZS5kYXRhLm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgd2l0aGRyYXc6IGZ1bmN0aW9uIChlLCB0KSB7CiAgICAgICAgICAgIDEgPT0gdGhpcy5zdGF0dXMKICAgICAgICAgICAgICA/ICgodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICAgdGhpcy5mbGFnCiAgICAgICAgICAgICAgICAgID8gKCh0aGlzLmZsYWcgPSAhMSksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlMDIgPSAiYSIpKQogICAgICAgICAgICAgICAgICA6ICgodGhpcy5mbGFnID0gITApLAogICAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAxID0gZSksCiAgICAgICAgICAgICAgICAgICAgKHRoaXMuYWN0aXZlID0gImEiKSwKICAgICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMiA9ICJhIikpLAogICAgICAgICAgICAgICAgdGhpcy5nZXROdW0odCkpCiAgICAgICAgICAgICAgOiBsYXllci5hbGVydCh0aGlzLiR0KCJub3RvcGVuIikpOwogICAgICAgICAgfSwKICAgICAgICAgIHJlYzogZnVuY3Rpb24gKGUsIHQpIHsKICAgICAgICAgICAgdmFyIGEgPSB0aGlzOwogICAgICAgICAgICAodGhpcy5jdXJyZW5jeSA9IHQpLAogICAgICAgICAgICAgICh0aGlzLnJlY0RhdGEgPSBbXSksCiAgICAgICAgICAgICAgdGhpcy5mbGFnCiAgICAgICAgICAgICAgICA/ICgodGhpcy5mbGFnID0gITEpLAogICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUgPSAiYSIpLAogICAgICAgICAgICAgICAgICAodGhpcy5hY3RpdmUwMSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gImEiKSkKICAgICAgICAgICAgICAgIDogKCh0aGlzLmZsYWcgPSAhMCksCiAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAyID0gZSksCiAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZSA9ICJhIiksCiAgICAgICAgICAgICAgICAgICh0aGlzLmFjdGl2ZTAxID0gImEiKSwKICAgICAgICAgICAgICAgICAgdGhpcy4kaHR0cCh7CiAgICAgICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICJwb3N0IiwKICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHR5cGU6IDQsIGN1cnJlbmN5OiB0LCBwYWdlOiAxIH0sCiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiB0aGlzLnRva2VuIH0sCiAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAib2siID09IGUuZGF0YS50eXBlICYmIChhLnJlY0RhdGEgPSBlLmRhdGEubWVzc2FnZS5saXN0KTsKICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGV4Y2hhbmdlOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgIGNvcHk6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGUgPSB0aGlzLAogICAgICAgICAgICAgIHQgPSBuZXcgQ2xpcGJvYXJkKCIuY29weSIsIHsKICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuZXhjaGFyZ2VfYWRkcmVzczsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHQub24oInN1Y2Nlc3MiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgIChlLmZsYWdzID0gITApLCBsYXllci5tc2coZS4kdCgibGF5LmNvcHlzIikpOwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB0Lm9uKCJlcnJvciIsIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAoZS5mbGFncyA9ICExKSwgbGF5ZXIubXNnKGUuJHQoImxheS5mY29weSIpKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0sCiAgICAgICAgICByZWNvcmQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAiZmluYW5yZWMiIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHdpdGhkcmF3X2FkZHJlc3M6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBuYW1lOiAid2l0aGRyYXdfYWRkcmVzcyIgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgc2hvd19ld206IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5pc0hpZGUgPyAodGhpcy5pc0hpZGUgPSAhMSkgOiAodGhpcy5pc0hpZGUgPSAhMCk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0ZGF0YTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZSA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgIHVybDogIi9hcGkvd2FsbGV0L2xpc3QiLAogICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgIGRhdGE6IHt9LAogICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogZS50b2tlbiB9LAogICAgICAgICAgICB9KQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAib2siID09IHQuZGF0YS50eXBlICYmCiAgICAgICAgICAgICAgICAgIChjb25zb2xlLmxvZyh0LmRhdGEubWVzc2FnZSksCiAgICAgICAgICAgICAgICAgIChlLmFzc2V0X2xpc3QgPSB0LmRhdGEubWVzc2FnZS5taWNyb193YWxsZXQuYmFsYW5jZSksCiAgICAgICAgICAgICAgICAgIChlLmNoYW5nZUJhbGFuY2UgPSB0LmRhdGEubWVzc2FnZS5jaGFuZ2Vfd2FsbGV0LmJhbGFuY2UpLAogICAgICAgICAgICAgICAgICAoZS50b3RsZSA9IHQuZGF0YS5tZXNzYWdlLm1pY3JvX3dhbGxldC51c2R0X3RvdGxlKSk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIG1vcmVEYXRhOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlID0gdGhpczsKICAgICAgICAgICAgKGUucGFnZSA9IGUucGFnZSArIDEpLAogICAgICAgICAgICAgIHRoaXMuJGh0dHAoewogICAgICAgICAgICAgICAgdXJsOiAiL2FwaS93YWxsZXQvbGVnYWxfbG9nIiwKICAgICAgICAgICAgICAgIG1ldGhvZDogInBvc3QiLAogICAgICAgICAgICAgICAgZGF0YTogeyB0eXBlOiAiNCIsIGN1cnJlbmN5OiBlLmN1cnJlbmN5LCBwYWdlOiBlLnBhZ2UgfSwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogdGhpcy50b2tlbiB9LAogICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIGlmICgib2siID09IHQuZGF0YS50eXBlKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhID0gZS5hc3NldF9saXN0OwogICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGEpCiAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW5jeSA9PSBhW2ldLmN1cnJlbmN5ICYmCiAgICAgICAgICAgICAgICAgICAgICAoKGUuYWN0aXZlMDIgPSBpKSwKICAgICAgICAgICAgICAgICAgICAgIHQuZGF0YS5tZXNzYWdlLmxpc3QubGVuZ3RoID4gMAogICAgICAgICAgICAgICAgICAgICAgICA/IChlLnJlY0RhdGEgPSBlLnJlY0RhdGEuY29uY2F0KHQuZGF0YS5tZXNzYWdlLmxpc3QpKQogICAgICAgICAgICAgICAgICAgICAgICA6IChlLm1vcmUgPSBlLiR0KCJub21vcmUiKSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgIHRyYW5zZmVyOiBmdW5jdGlvbiAoZSwgdCkgewogICAgICAgICAgICB2YXIgYSA9IHRoaXM7CiAgICAgICAgICAgIGEudHJhbnNmZXJEYXRhLm1vZGFsU2hvdyA9ICEwOwogICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoaXMudG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidG9rZW4iKSB8fCAiIjsKICAgICAgICB9LAogICA="}},"time_used":647,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":647,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/layer/layer.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.542Z","timestamp":1785149590542,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/layer/layer.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:52 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9864-5664\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":22116,"size_decoded":7991,"mime_type":"application/javascript","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (22020)","md5":"d0c975e34297f3e44e99c9d83555ffc1","sha1":"7e465bd79e65428cf07e5991196cff512ce44a4b","sha256":"691aad750624d84b17f2fbb73a4982860edd18837f3000c5b660ac82bf408e82","sha512":"1d9dcd7e1afe695e5716ea55f9a5a3e3aa45852722b4e1a2653ebd3f3a85c8b7a34b15264751f5ee26ea56ee49c8683a00d771197d8b32d9ea53d842d6db3b79","ssdeep":"384:41xCih92A3igrLXSt/SdMrXqE6tGLxzAOTElH0jjhtjfs8:41EiV3i+WtXItqF13k8","tlshash":"56a2b66a754034976323906ad11fba0b31f21d24d7078128f22bb4ae1dbcd95a2b7f5f","first_seen":"2023-04-05T06:05:22Z","last_seen":"2026-08-04T14:16:17.871474Z","times_seen":6109,"resource_available":true,"data":"LyohIGxheWVyLXYzLjEuMSBXZWLlvLnlsYLnu4Tku7YgTUlUIExpY2Vuc2UgIGh0dHA6Ly9sYXllci5sYXl1aS5jb20vICBCeSDotKTlv4MgKi8KIDshZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7dmFyIGksbixhPWUubGF5dWkmJmxheXVpLmRlZmluZSxvPXtnZXRQYXRoOmZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PWRvY3VtZW50LnNjcmlwdHMsaT10Lmxlbmd0aC0xLG49aTtuPjA7bi0tKWlmKCJpbnRlcmFjdGl2ZSI9PT10W25dLnJlYWR5U3RhdGUpe2U9dFtuXS5zcmM7YnJlYWt9cmV0dXJuIGV8fHRbaV0uc3JjfSgpO3JldHVybiBlLnN1YnN0cmluZygwLGUubGFzdEluZGV4T2YoIi8iKSsxKX0oKSxjb25maWc6e30sZW5kOnt9LG1pbkluZGV4OjAsbWluTGVmdDpbXSxidG46WyImI3g3ODZFOyYjeDVCOUE7IiwiJiN4NTNENjsmI3g2RDg4OyJdLHR5cGU6WyJkaWFsb2ciLCJwYWdlIiwiaWZyYW1lIiwibG9hZGluZyIsInRpcHMiXSxnZXRTdHlsZTpmdW5jdGlvbih0LGkpe3ZhciBuPXQuY3VycmVudFN0eWxlP3QuY3VycmVudFN0eWxlOmUuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpO3JldHVybiBuW24uZ2V0UHJvcGVydHlWYWx1ZT8iZ2V0UHJvcGVydHlWYWx1ZSI6ImdldEF0dHJpYnV0ZSJdKGkpfSxsaW5rOmZ1bmN0aW9uKHQsaSxuKXtpZihyLnBhdGgpe3ZhciBhPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0scz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7InN0cmluZyI9PXR5cGVvZiBpJiYobj1pKTt2YXIgbD0obnx8dCkucmVwbGFjZSgvXC58XC8vZywiIiksZj0ibGF5dWljc3MtIitsLGM9MDtzLnJlbD0ic3R5bGVzaGVldCIscy5ocmVmPXIucGF0aCt0LHMuaWQ9Zixkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmKXx8YS5hcHBlbmRDaGlsZChzKSwiZnVuY3Rpb24iPT10eXBlb2YgaSYmIWZ1bmN0aW9uIHUoKXtyZS5jb25zb2xlJiZjb25zb2xlLmVycm9yKCJsYXllci5jc3M6IEludmFsaWQiKTp2b2lkKDE5ODk9PT1wYXJzZUludChvLmdldFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGYpLCJ3aWR0aCIpKT9pKCk6c2V0VGltZW91dCh1LDEwMCkpfSgpfX19LHI9e3Y6IjMuMS4xIixpZTpmdW5jdGlvbigpe3ZhciB0PW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtyZXR1cm4hIShlLkFjdGl2ZVhPYmplY3R8fCJBY3RpdmVYT2JqZWN0ImluIGUpJiYoKHQubWF0Y2goL21zaWVccyhcZCspLyl8fFtdKVsxXXx8IjExIil9KCksaW5kZXg6ZS5sYXllciYmZS5sYXllci52PzFlNTowLHBhdGg6by5nZXRQYXRoLGNvbmZpZzpmdW5jdGlvbihlLHQpe3JldHVybiBlPWV8fHt9LHIuY2FjaGU9by5jb25maWc9aS5leHRlbmQoe30sby5jb25maWcsZSksci5wYXRoPW8uY29uZmlnLnBhdGh8fHIucGF0aCwic3RyaW5nIj09dHlwZW9mIGUuZXh0ZW5kJiYoZS5leHRlbmQ9W2UuZXh0ZW5kXSksby5jb25maWcucGF0aCYmci5yZWFkeSgpLGUuZXh0ZW5kPyhhP2xheXVpLmFkZGNzcygibW9kdWxlcy9sYXllci8iK2UuZXh0ZW5kKTpvLmxpbmsoInRoZW1lLyIrZS5leHRlbmQpLHRoaXMpOnRoaXN9LHJlYWR5OmZ1bmN0aW9uKGUpe3ZhciB0PSJsYXllciIsaT0iIixuPShhPyJtb2R1bGVzL2xheWVyLyI6InRoZW1lLyIpKyJkZWZhdWx0L2xheWVyLmNzcz92PSIrci52K2k7cmV0dXJuIGE/bGF5dWkuYWRkY3NzKG4sZSx0KTpvLmxpbmsobixlLHQpLHRoaXN9LGFsZXJ0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgdDtyZXR1cm4gYSYmKG49dCksci5vcGVuKGkuZXh0ZW5kKHtjb250ZW50OmUseWVzOm59LGE/e306dCkpfSxjb25maXJtOmZ1bmN0aW9uKGUsdCxuLGEpe3ZhciBzPSJmdW5jdGlvbiI9PXR5cGVvZiB0O3JldHVybiBzJiYoYT1uLG49dCksci5vcGVuKGkuZXh0ZW5kKHtjb250ZW50OmUsYnRuOm8uYnRuLHllczpuLGJ0bjI6YX0scz97fTp0KSl9LG1zZzpmdW5jdGlvbihlLG4sYSl7dmFyIHM9ImZ1bmN0aW9uIj09dHlwZW9mIG4sZj1vLmNvbmZpZy5za2luLGM9KGY/ZisiICIrZisiLW1zZyI6IiIpfHwibGF5dWktbGF5ZXItbXNnIix1PWwuYW5pbS5sZW5ndGgtMTtyZXR1cm4gcyYmKGE9biksci5vcGVuKGkuZXh0ZW5kKHtjb250ZW50OmUsdGltZTozZTMsc2hhZGU6ITEsc2tpbjpjLHRpdGxlOiExLGNsb3NlQnRuOiExLGJ0bjohMSxyZXNpemU6ITEsZW5kOmF9LHMmJiFvLmNvbmZpZy5za2luP3tza2luOmMrIiBsYXl1aS1sYXllci1odWkiLGFuaW06dX06ZnVuY3Rpb24oKXtyZXR1cm4gbj1ufHx7fSwobi5pY29uPT09LTF8fG4uaWNvbj09PXQmJiFvLmNvbmZpZy5za2luKSYmKG4uc2tpbj1jKyIgIisobi5za2lufHwibGF5dWktbGF5ZXItaHVpIikpLG59KCkpKX0sbG9hZDpmdW5jdGlvbihlLHQpe3JldHVybiByLm9wZW4oaS5leHRlbmQoe3R5cGU6MyxpY29uOmV8fDAscmVzaXplOiExLHNoYWRlOi4wMX0sdCkpfSx0aXBzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5vcGVuKGkuZXh0ZW5kKHt0eXBlOjQsY29udGVudDpbZSx0XSxjbG9zZUJ0bjohMSx0aW1lOjNlMyxzaGFkZTohMSxyZXNpemU6ITEsZml4ZWQ6ITEsbWF4V2lkdGg6MjEwfSxuKSl9fSxzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5pbmRleD0rK3IuaW5kZXgsdC5jb25maWc9aS5leHRlbmQoe30sdC5jb25maWcsby5jb25maWcsZSksZG9jdW1lbnQuYm9keT90LmNyZWF0KCk6c2V0VGltZW91dChmdW5jdGlvbigpe3QuY3JlYXQoKX0sMzApfTtzLnB0PXMucHJvdG90eXBlO3ZhciBsPVsibGF5dWktbGF5ZXIiLCIubGF5dWktbGF5ZXItdGl0bGUiLCIubGF5dWktbGF5ZXItbWFpbiIsIi5sYXl1aS1sYXllci1kaWFsb2ciLCJsYXl1aS1sYXllci1pZnJhbWUiLCJsYXl1aS1sYXllci1jb250ZW50IiwibGF5dWktbGF5ZXItYnRuIiwibGF5dWktbGF5ZXItY2xvc2UiXTtsLmFuaW09WyJsYXllci1hbmltLTAwIiwibGF5ZXItYW5pbS0wMSIsImxheWVyLWFuaW0tMDIiLCJsYXllci1hbmltLTAzIiwibGF5ZXItYW5pbS0wNCIsImxheWVyLWFuaW0tMDUiLCJsYXllci1hbmltLTA2Il0scy5wdC5jb25maWc9e3R5cGU6MCxzaGFkZTouMyxmaXhlZDohMCxtb3ZlOmxbMV0sdGl0bGU6IiYjeDRGRTE7JiN4NjA2RjsiLG9mZnNldDoiYXV0byIsYXJlYToiYXV0byIsY2xvc2VCdG46MSx0aW1lOjAsekluZGV4OjE5ODkxMDE0LG1heFdpZHRoOjM2MCxhbmltOjAsaXNPdXRBbmltOiEwLGljb246LTEsbW92ZVR5cGU6MSxyZXNpemU6ITAsc2Nyb2xsYmFyOiEwLHRpcHM6Mn0scy5wdC52ZXNzZWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLGE9bi5pbmRleCxyPW4uY29uZmlnLHM9ci56SW5kZXgrYSxmPSJvYmplY3QiPT10eXBlb2Ygci50aXRsZSxjPXIubWF4bWluJiYoMT09PXIudHlwZXx8Mj09PXIudHlwZSksdT1yLnRpdGxlPyc8ZGl2IGNsYXNzPSJsYXl1aS1sYXllci10aXRsZSIgc3R5bGU9IicrKGY/ci50aXRsZVsxXToiIikrJyI+JysoZj9yLnRpdGxlWzBdOnIudGl0bGUpKyI8L2Rpdj4iOiIiO3JldHVybiByLnpJbmRleD1zLHQoW3Iuc2hhZGU/JzxkaXYgY2xhc3M9ImxheXVpLWxheWVyLXNoYWRlIiBpZD0ibGF5dWktbGF5ZXItc2hhZGUnK2ErJyIgdGltZXM9IicrYSsnIiBzdHlsZT0iJysoInotaW5kZXg6Iisocy0xKSsiOyAiKSsnIj48L2Rpdj4nOiIiLCc8ZGl2IGNsYXNzPSInK2xbMF0rKCIgbGF5dWktbGF5ZXItIitvLnR5cGVbci50eXBlXSkrKDAhPXIudHlwZSYmMiE9ci50eXBlfHxyLnNoYWRlPyIiOiIgbGF5dWktbGF5ZXItYm9yZGVyIikrIiAiKyhyLnNraW58fCIiKSsnIiBpZD0iJytsWzBdK2ErJyIgdHlwZT0iJytvLnR5cGVbci50eXBlXSsnIiB0aW1lcz0iJythKyciIHNob3d0aW1lPSInK3IudGltZSsnIiBjb25UeXBlPSInKyhlPyJvYmplY3QiOiJzdHJpbmciKSsnIiBzdHlsZT0iei1pbmRleDogJytzKyI7IHdpZHRoOiIrci5hcmVhWzBdKyI7aGVpZ2h0OiIrci5hcmVhWzFdKyhyLmZpeGVkPyIiOiI7cG9zaXRpb246YWJzb2x1dGU7IikrJyI+JysoZSYmMiE9ci50eXBlPyIiOnUpKyc8ZGl2IGlkPSInKyhyLmlkfHwiIikrJyIgY2xhc3M9ImxheXVpLWxheWVyLWNvbnRlbnQnKygwPT1yLnR5cGUmJnIuaWNvbiE9PS0xPyIgbGF5dWktbGF5ZXItcGFkZGluZyI6IiIpKygzPT1yLnR5cGU/IiBsYXl1aS1sYXllci1sb2FkaW5nIityLmljb246IiIpKyciPicrKDA9PXIudHlwZSYmci5pY29uIT09LTE/JzxpIGNsYXNzPSJsYXl1aS1sYXllci1pY28gbGF5dWktbGF5ZXItaWNvJytyLmljb24rJyI+PC9pPic6IiIpKygxPT1yLnR5cGUmJmU/IiI6ci5jb250ZW50fHwiIikrJzwvZGl2PjxzcGFuIGNsYXNzPSJsYXl1aS1sYXllci1zZXR3aW4iPicrZnVuY3Rpb24oKXt2YXIgZT1jPyc8YSBjbGFzcz0ibGF5dWktbGF5ZXItbWluIiBocmVmPSJqYXZhc2NyaXB0OjsiPjxjaXRlPjwvY2l0ZT48L2E+PGEgY2xhc3M9ImxheXVpLWxheWVyLWljbyBsYXl1aS1sYXllci1tYXgiIGhyZWY9ImphdmFzY3JpcHQ6OyI+PC9hPic6IiI7cmV0dXJuIHIuY2xvc2VCdG4mJihlKz0nPGEgY2xhc3M9ImxheXVpLWxheWVyLWljbyAnK2xbN10rIiAiK2xbN10rKHIudGl0bGU/ci5jbG9zZUJ0bjo0PT1yLnR5cGU/IjEiOiIyIikrJyIgaHJlZj0iamF2YXNjcmlwdDo7Ij48L2E+JyksZX0oKSsiPC9zcGFuPiIrKHIuYnRuP2Z1bmN0aW9uKCl7dmFyIGU9IiI7InN0cmluZyI9PXR5cGVvZiByLmJ0biYmKHIuYnRuPVtyLmJ0bl0pO2Zvcih2YXIgdD0wLGk9ci5idG4ubGVuZ3RoO3Q8aTt0KyspZSs9JzxhIGNsYXNzPSInK2xbNl0rdCsnIj4nK3IuYnRuW3RdKyI8L2E+IjtyZXR1cm4nPGRpdiBjbGFzcz0iJytsWzZdKyIgbGF5dWktbGF5ZXItYnRuLSIrKHIuYnRuQWxpZ258fCIiKSsnIj4nK2UrIjwvZGl2PiJ9KCk6IiIpKyhyLnJlc2l6ZT8nPHNwYW4gY2xhc3M9ImxheXVpLWxheWVyLXJlc2l6ZSI+PC9zcGFuPic6IiIpKyI8L2Rpdj4iXSx1LGkoJzxkaXYgY2xhc3M9ImxheXVpLWxheWVyLW1vdmUiPjwvZGl2PicpKSxufSxzLnB0LmNyZWF0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLGE9ZS5pbmRleCxzPXQuY29udGVudCxmPSJvYmplY3QiPT10eXBlb2YgcyxjPWkoImJvZHkiKTtpZighdC5pZHx8IWkoIiMiK3QuaWQpWzBdKXtzd2l0Y2goInN0cmluZyI9PXR5cGVvZiB0LmFyZWEmJih0LmFyZWE9ImF1dG8iPT09dC5hcmVhP1siIiwiIl06W3QuYXJlYSwiIl0pLHQuc2hpZnQmJih0LmFuaW09dC5zaGlmdCksNj09ci5pZSYmKHQuZml4ZWQ9ITEpLHQudHlwZSl7Y2FzZSAwOnQuYnRuPSJidG4iaW4gdD90LmJ0bjpvLmJ0blswXSxyLmNsb3NlQWxsKCJkaWFsb2ciKTticmVhaztjYXNlIDI6dmFyIHM9dC5jb250ZW50PWY/dC5jb250ZW50Olt0LmNvbnRlbnR8fCJodHRwOi8vbGF5ZXIubGF5dWkuY29tIiwiYXV0byJdO3QuY29udGVudD0nPGlmcmFtZSBzY3JvbGxpbmc9IicrKHQuY29udGVudFsxXXx8ImF1dG8iKSsnIiBhbGxvd3RyYW5zcGFyZW5jeT0idHJ1ZSIgaWQ9IicrbFs0XSthKyciIG5hbWU9IicrbFs0XSthKyciIG9ubG9hZD0idGhpcy5jbGFzc05hbWU9XCdcJzsiIGNsYXNzPSJsYXl1aS1sYXllci1sb2FkIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSInK3QuY29udGVudFswXSsnIj48L2lmcmFtZT4nO2JyZWFrO2Nhc2UgMzpkZWxldGUgdC50aXRsZSxkZWxldGUgdC5jbG9zZUJ0bix0Lmljb249PT0tMSYmMD09PXQuaWNvbixyLmNsb3NlQWxsKCJsb2FkaW5nIik7YnJlYWs7Y2FzZSA0OmZ8fCh0LmNvbnRlbnQ9W3QuY29udGVudCwiYm9keSJdKSx0LmZvbGxvdz10LmNvbnRlbnRbMV0sdC5jb250ZW50PXQuY29udGVudFswXSsnPGkgY2xhc3M9ImxheXVpLWxheWVyLVRpcHNHIj48L2k+JyxkZWxldGUgdC50aXRsZSx0LnRpcHM9Im9iamVjdCI9PXR5cGVvZiB0LnRpcHM/dC50aXBzOlt0LnRpcHMsITBdLHQudGlwc01vcmV8fHIuY2xvc2VBbGwoInRpcHMiKX1pZihlLnZlc3NlbChmLGZ1bmN0aW9uKG4scix1KXtjLmFwcGVuZChuWzBdKSxmP2Z1bmN0aW9uKCl7Mj09dC50eXBlfHw0PT10LnR5cGU/ZnVuY3Rpb24oKXtpKCJib2R5IikuYXBwZW5kKG5bMV0pfSgpOmZ1bmN0aW9uKCl7cy5wYXJlbnRzKCIuIitsWzBdKVswXXx8KHMuZGF0YSgiZGlzcGxheSIscy5jc3MoImRpc3BsYXkiKSkuc2hvdygpLmFkZENsYXNzKCJsYXl1aS1sYXllci13cmFwIikud3JhcChuWzFdKSxpKCIjIitsWzBdK2EpLmZpbmQoIi4iK2xbNV0pLmJlZm9yZShyKSl9KCl9KCk6Yy5hcHBlbmQoblsxXSksaSgiLmxheXVpLWxheWVyLW1vdmUiKVswXXx8Yy5hcHBlbmQoby5tb3ZlRWxlbT11KSxlLmxheWVybz1pKCIjIitsWzBdK2EpLHQuc2Nyb2xsYmFyfHxsLmh0bWwuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmF0dHIoImxheWVyLWZ1bGwiLGEpfSkuYXV0byhhKSxpKCIjbGF5dWktbGF5ZXItc2hhZGUiK2UuaW5kZXgpLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOnQuc2hhZGVbMV18fCIjMDAwIixvcGFjaXR5OnQuc2hhZGVbMF18fHQuc2hhZGV9KSwyPT10LnR5cGUmJjY9PXIuaWUmJmUubGF5ZXJvLmZpbmQoImlmcmFtZSIpLmF0dHIoInNyYyIsc1swXSksND09dC50eXBlP2UudGlwcygpOmUub2Zmc2V0KCksdC5maXhlZCYmbi5vbigicmVzaXplIixmdW5jdGlvbigpe2Uub2Zmc2V0KCksKC9eXGQrJSQvLnRlc3QodC5hcmVhWzBdKXx8L15cZCslJC8udGVzdCh0LmFyZWFbMV0pKSYmZS5hdXRvKGEpLDQ9PXQudHlwZSYmZS50aXBzKCl9KSx0LnRpbWU8PTB8fHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLmNsb3NlKGUuaW5kZXgpfSx0LnRpbWUpLGUubW92ZSgpLmNhbGxiYWNrKCksbC5hbmltW3QuYW5pbV0pe3ZhciB1PSJsYXllci1hbmltICIrbC5hbmltW3QuYW5pbV07ZS5sYXllcm8uYWRkQ2xhc3ModSkub25lKCJ3ZWJraXRBbmltYXRpb25FbmQgbW96QW5pbWF0aW9uRW5kIE1TQW5pbWF0aW9uRW5kIG9hbmltYXRpb25lbmQgYW5pbWF0aW9uZW5kIixmdW5jdGlvbigpe2kodGhpcykucmVtb3ZlQ2xhc3ModSl9KX10LmlzT3V0QW5pbSYmZS5sYXllcm8uZGF0YSgiaXNPdXRBbmltIiwhMCl9fSxzLnB0LmF1dG89ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxhPXQuY29uZmlnLG89aSgiIyIrbFswXStlKTsiIj09PWEuYXJlYVswXSYmYS5tYXhXaWR0aD4wJiYoci5pZSYmci5pZTw4JiZhLmJ0biYmby53aWR0aChvLmlubmVyV2lkdGgoKSksby5vdXRlcldpZHRoKCk+YS5tYXhXaWR0aCYmby53aWR0aChhLm1heFdpZHRoKSk7dmFyIHM9W28uaW5uZXJXaWR0aCgpLG8uaW5uZXJIZWlnaHQoKV0sZj1vLmZpbmQobFsxXSkub3V0ZXJIZWlnaHQoKXx8MCxjPW8uZmluZCgiLiIrbFs2XSkub3V0ZXJIZWlnaHQoKXx8MCx1PWZ1bmN0aW9uKGUpe2U9by5maW5kKGUpLGUuaGVpZ2h0KHNbMV0tZi1jLTIqKDB8cGFyc2VGbG9hdChlLmNzcygicGFkZGluZy10b3AiKSkpKX07c3dpdGNoKGEudHlwZSl7Y2FzZSAyOnUoImlmcmFtZSIpO2JyZWFrO2RlZmF1bHQ6IiI9PT1hLmFyZWFbMV0/YS5tYXhIZWlnaHQ+MCYmby5vdXRlckhlaWdodCgpPmEubWF4SGVpZ2h0PyhzWzFdPWEubWF4SGVpZ2h0LHUoIi4iK2xbNV0pKTphLmZpeGVkJiZzWzFdPj1uLmhlaWdodCgpJiYoc1sxXT1uLmhlaWdodCgpLHUoIi4iK2xbNV0pKTp1KCIuIitsWzVdKX1yZXR1cm4gdH0scy5wdC5vZmZzZXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsaT1lLmxheWVybyxhPVtpLm91dGVyV2lkdGgoKSxpLm91dGVySGVpZ2h0KCldLG89Im9iamVjdCI9PXR5cGVvZiB0Lm9mZnNldDtlLm9mZnNldFRvcD0obi5oZWlnaHQoKS1hWzFdKS8yLGUub2Zmc2V0TGVmdD0obi53aWR0aCgpLWFbMF0pLzIsbz8oZS5vZmZzZXRUb3A9dC5vZmZzZXRbMF0sZS5vZmZzZXRMZWZ0PXQub2Zmc2V0WzFdfHxlLm9mZnNldExlZnQpOiJhdXRvIiE9PXQub2Zmc2V0JiYoInQiPT09dC5vZmZzZXQ/ZS5vZmZzZXRUb3A9MDoiciI9PT10Lm9mZnNldD9lLm9mZnNldExlZnQ9bi53aWR0aCgpLWFbMF06ImIiPT09dC5vZmZzZXQ/ZS5vZmZzZXRUb3A9bi5oZWlnaHQoKS1hWzFdOiJsIj09PXQub2Zmc2V0P2Uub2Zmc2V0TGVmdD0wOiJsdCI9PT10Lm9mZnNldD8oZS5vZmZzZXRUb3A9MCxlLm9mZnNldExlZnQ9MCk6ImxiIj09PXQub2Zmc2V0PyhlLm9mZnNldFRvcD1uLmhlaWdodCgpLWFbMV0sZS5vZmZzZXRMZWZ0PTApOiJydCI9PT10Lm9mZnNldD8oZS5vZmZzZXRUb3A9MCxlLm9mZnNldExlZnQ9bi53aWR0aCgpLWFbMF0pOiJyYiI9PT10Lm9mZnNldD8oZS5vZmZzZXRUb3A9bi5oZWlnaHQoKS1hWzFdLGUub2Zmc2V0TGVmdD1uLndpZHRoKCktYVswXSk6ZS5vZmZzZXRUb3A9dC5vZmZzZXQpLHQuZml4ZWR8fChlLm9mZnNldFRvcD0vJSQvLnRlc3QoZS5vZmZzZXRUb3ApP24uaGVpZ2h0KCkqcGFyc2VGbG9hdChlLm9mZnNldFRvcCkvMTAwOnBhcnNlRmxvYXQoZS5vZmZzZXRUb3ApLGUub2Zmc2V0TGVmdD0vJSQvLnRlc3QoZS5vZmZzZXRMZWZ0KT9uLndpZHRoKCkqcGFyc2VGbG9hdChlLm9mZnNldExlZnQpLzEwMDpwYXJzZUZsb2F0KGUub2Zmc2V0TGVmdCksZS5vZmZzZXRUb3ArPW4uc2Nyb2xsVG9wKCksZS5vZmZzZXRMZWZ0Kz1uLnNjcm9sbExlZnQoKSksaS5hdHRyKCJtaW5MZWZ0IikmJihlLm9mZnNldFRvcD1uLmhlaWdodCgpLShpLmZpbmQobFsxXSkub3V0ZXJIZWlnaHQoKXx8MCksZS5vZmZzZXRMZWZ0PWkuY3NzKCJsZWZ0IikpLGkuY3NzKHt0b3A6ZS5vZmZzZXRUb3AsbGVmdDplLm9mZnNldExlZnR9KX0scy5wdC50aXBzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuY29uZmlnLGE9ZS5sYXllcm8sbz1bYS5vdXRlcldpZHRoKCksYS5vdXRlckhlaWdodCgpXSxyPWkodC5mb2xsb3cpO3JbMF18fChyPWkoImJvZHkiKSk7dmFyIHM9e3dpZHRoOnIub3V0ZXJXaWR0aCgpLGhlaWdodDpyLm91dGVySGVpZ2h0KCksdG9wOnIub2Zmc2V0KCkudG9wLGxlZnQ6ci5vZmZzZXQoKS5sZWZ0fSxmPWEuZmluZCgiLmxheXVpLWxheWVyLVRpcHNHIiksYz10LnRpcHNbMF07dC50aXBzWzFdfHxmLnJlbW92ZSgpLHMuYXV0b0xlZnQ9ZnVuY3Rpb24oKXtzLmxlZnQrb1swXS1uLndpZHRoKCk+MD8ocy50aXBMZWZ0PXMubGVmdCtzLndpZHRoLW9bMF0sZi5jc3Moe3JpZ2h0OjEyLGxlZnQ6ImF1dG8ifSkpOnMudGlwTGVmdD1zLmxlZnR9LHMud2hlcmU9W2Z1bmN0aW9uKCl7cy5hdXRvTGVmdCgpLHMudGlwVG9wPXMudG9wLW9bMV0tMTAsZi5yZW1vdmVDbGFzcygibGF5dWktbGF5ZXItVGlwc0IiKS5hZGRDbGFzcygibGF5dWktbGF5ZXItVGlwc1QiKS5jc3MoImJvcmRlci1yaWdodC1jb2xvciIsdC50aXBzWzFdKX0sZnVuY3Rpb24oKXtzLnRpcExlZnQ9cy5sZWZ0K3Mud2lkdGgrMTAscy50aXBUb3A9cy50b3AsZi5yZW1vdmVDbGFzcygibGF5dWktbGF5ZXItVGlwc0wiKS5hZGRDbGFzcygibGF5dWktbGF5ZXItVGlwc1IiKS5jc3MoImJvcmRlci1ib3R0b20tY29sb3IiLHQudGlwc1sxXSl9LGZ1bmN0aW9uKCl7cy5hdXRvTGVmdCgpLHMudGlwVG9wPXMudG9wK3MuaGVpZ2h0KzEwLGYucmVtb3ZlQ2xhc3MoImxheXVpLWxheWVyLVRpcHNUIikuYWRkQ2xhc3MoImxheXVpLWxheWVyLVRpcHNCIikuY3NzKCJib3JkZXItcmlnaHQtY29sb3IiLHQudGlwc1sxXSl9LGZ1bmN0aW9uKCl7cy50aXBMZWZ0PXMubGVmdC1vWzBdLTEwLHMudGlwVG9wPXMudG9wLGYucmVtb3ZlQ2xhc3MoImxheXVpLWxheWVyLVRpcHNSIikuYWRkQ2xhc3MoImxheXVpLWxheWVyLVRpcHNMIikuY3NzKCJib3JkZXItYm90dG9tLWNvbG9yIix0LnRpcHNbMV0pfV0scy53aGVyZVtjLTFdKCksMT09PWM/cy50b3AtKG4uc2Nyb2xsVG9wKCkrb1sxXSsxNik8MCYmcy53aGVyZVsyXSgpOjI9PT1jP24ud2lkdGgoKS0ocy5sZWZ0K3Mud2lkdGgrb1swXSsxNik+MHx8cy53aGVyZVszXSgpOjM9PT1jP3MudG9wLW4uc2Nyb2xsVG9wKCkrcy5oZWlnaHQrb1sxXSsxNi1uLmhlaWdodCgpPjAmJnMud2hlcmVbMF0oKTo0PT09YyYmb1swXSsxNi1zLmxlZnQ+MCYmcy53aGVyZVsxXSgpLGEuZmluZCgiLiIrbFs1XSkuY3NzKHsiYmFja2dyb3VuZC1jb2xvciI6dC50aXBzWzFdLCJwYWRkaW5nLXJpZ2h0Ijp0LmNsb3NlQnRuPyIzMHB4IjoiIn0pLGEuY3NzKHtsZWZ0OnMudGlwTGVmdC0odC5maXhlZD9uLnNjcm9sbExlZnQoKTowKSx0b3A6cy50aXBUb3AtKHQuZml4ZWQ/bi5zY3JvbGxUb3AoKTowKX0pfSxzLnB0Lm1vdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS5jb25maWcsYT1pKGRvY3VtZW50KSxzPWUubGF5ZXJvLGw9cy5maW5kKHQubW92ZSksZj1zLmZpbmQoIi5sYXl1aS1sYXllci1yZXNpemUiKSxjPXt9O3JldHVybiB0Lm1vdmUmJmwuY3NzKCJjdXJzb3IiLCJtb3ZlIiksbC5vbigibW91c2Vkb3duIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdC5tb3ZlJiYoYy5tb3ZlU3RhcnQ9ITAsYy5vZmZzZXQ9W2UuY2xpZW50WC1wYXJzZUZsb2F0KHMuY3NzKCJsZWZ0IikpLGUuY2xpZW50WS1wYXJzZUZsb2F0KHMuY3NzKCJ0b3AiKSldLG8ubW92ZUVsZW0uY3NzKCJjdXJzb3IiLCJtb3ZlIikuc2hvdygpKX0pLGYub24oIm1vdXNlZG93biIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGMucmVzaXplU3RhcnQ9ITAsYy5vZmZzZXQ9W2UuY2xpZW50WCxlLmNsaWVudFldLGMuYXJlYT1bcy5vdXRlcldpZHRoKCkscy5vdXRlckhlaWdodCgpXSxvLm1vdmVFbGVtLmNzcygiY3Vyc29yIiwic2UtcmVzaXplIikuc2hvdygpfSksYS5vbigibW91c2Vtb3ZlIixmdW5jdGlvbihpKXtpZihjLm1vdmVTdGFydCl7dmFyIGE9aS5jbGllbnRYLWMub2Zmc2V0WzBdLG89aS5jbGllbnRZLWMub2Zmc2V0WzFdLGw9ImZpeGVkIj09PXMuY3NzKCJwb3NpdGlvbiIpO2lmKGkucHJldmVudERlZmF1bHQoKSxjLnN0WD1sPzA6bi5zY3JvbGxMZWZ0KCksYy5zdFk9bD8wOm4uc2Nyb2xsVG9wKCksIXQubW92ZU91dCl7dmFyIGY9bi53aWR0aCgpLXMub3V0ZXJXaWR0aCgpK2Muc3RYLHU9bi5oZWlnaHQoKS1zLm91dGVySGVpZ2h0KCkrYy5zdFk7YTxjLnN0WCYmKGE9Yy5zdFgpLGE+ZiYmKGE9ZiksbzxjLnN0WSYmKG89Yy5zdFkpLG8+dSYmKG89dSl9cy5jc3Moe2xlZnQ6YSx0b3A6b30pfWlmKHQucmVzaXplJiZjLnJlc2l6ZVN0YXJ0KXt2YXIgYT1pLmNsaWVudFgtYy5vZmZzZXRbMF0sbz1pLmNsaWVudFktYy5vZmZzZXRbMV07aS5wcmV2ZW50RGVmYXVsdCgpLHIuc3R5bGUoZS5pbmRleCx7d2lkdGg6Yy5hcmVhWzBdK2EsaGVpZ2h0OmMuYXJlYVsxXStvfSksYy5pc1Jlc2l6ZT0hMCx0LnJlc2l6aW5nJiZ0LnJlc2l6aW5nKHMpfX0pLm9uKCJtb3VzZXVwIixmdW5jdGlvbihlKXtjLm1vdmVTdGFydCYmKGRlbGV0ZSBjLm1vdmVTdGFydCxvLm1vdmVFbGVtLmhpZGUoKSx0Lm1vdmVFbmQmJnQubW92ZUVuZChzKSksYy5yZXNpemVTdGFydCYmKGRlbGV0ZSBjLnJlc2l6ZVN0YXJ0LG8ubW92ZUVsZW0uaGlkZSgpKX0pLGV9LHMucHQuY2FsbGJhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU9YS5jYW5jZWwmJmEuY2FuY2VsKHQuaW5kZXgsbik7ZT09PSExfHxyLmNsb3NlKHQuaW5kZXgpfXZhciB0PXRoaXMsbj10LmxheWVybyxhPXQuY29uZmlnO3Qub3BlbkxheWVyKCksYS5zdWNjZXNzJiYoMj09YS50eXBlP24uZmluZCgiaWZyYW1lIikub24oImxvYWQiLGZ1bmN0aW9uKCl7YS5zdWNjZXNzKG4sdC5pbmRleCl9KTphLnN1Y2Nlc3Mobix0LmluZGV4KSksNj09ci5pZSYmdC5JRTYobiksbi5maW5kKCIuIitsWzZdKS5jaGlsZHJlbigiYSIpLm9uKCJjbGljayIsZnVuY3Rpb24oKXt2YXIgZT1pKHRoaXMpLmluZGV4KCk7aWYoMD09PWUpYS55ZXM/YS55ZXModC5pbmRleCxuKTphLmJ0bjE/YS5idG4xKHQuaW5kZXgsbik6ci5jbG9zZSh0LmluZGV4KTtlbHNle3ZhciBvPWFbImJ0biIrKGUrMSldJiZhWyJidG4iKyhlKzEpXSh0LmluZGV4LG4pO289PT0hMXx8ci5jbG9zZSh0LmluZGV4KX19KSxuLmZpbmQoIi4iK2xbN10pLm9uKCJjbGljayIsZSksYS5zaGFkZUNsb3NlJiZpKCIjbGF5dWktbGF5ZXItc2hhZGUiK3QuaW5kZXgpLm9uKCJjbGljayIsZnVuY3Rpb24oKXtyLmNsb3NlKHQuaW5kZXgpfSksbi5maW5kKCIubGF5dWktbGF5ZXItbWluIikub24oImNsaWNrIixmdW5jdGlvbigpe3ZhciBlPWEubWluJiZhLm1pbihuKTtlPT09ITF8fHIubWluKHQuaW5kZXgsYSl9KSxuLmZpbmQoIi5sYXl1aS1sYXllci1tYXgiKS5vbigiY2xpY2siLGZ1bmN0aW9uKCl7aSh0aGlzKS5oYXNDbGFzcygibGF5dWktbGF5ZXItbWF4bWluIik/KHIucmVzdG9yZSh0LmluZGV4KSxhLnJlc3RvcmUmJmEucmVzdG9yZShuKSk6KHIuZnVsbCh0LmluZGV4LGEpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLmZ1bGwmJmEuZnVsbChuKX0sMTAwKSl9KSxhLmVuZCYmKG8uZW5kW3QuaW5kZXhdPWEuZW5kKX0sby5yZXNlbGVjdD1mdW5jdGlvbigpe2kuZWFjaChpKCJzZWxlY3QiKSxmdW5jdGlvbihlLHQpe3ZhciBuPWkodGhpcyk7bi5wYXJlbnRzKCIuIitsWzBdKVswXXx8MT09bi5hdHRyKCJsYXllciIpJiZpKCIuIitsWzBdKS5sZW5ndGg8MSYmbi5yZW1vdmVBdHRyKCJsYXllciIpLnNob3coKSxuPW51bGx9KX0scy5wdC5JRTY9ZnVuY3Rpb24oZSl7aSgic2VsZWN0IikuZWFjaChmdW5jdGlvbihlLHQpe3ZhciBuPWkodGhpcyk7bi5wYXJlbnRzKCIuIitsWzBdKVswXXx8Im5vbmUiPT09bi5jc3MoImRpc3BsYXkiKXx8bi5hdHRyKHtsYXllcjoiMSJ9KS5oaWRlKCksbj1udWxsfSl9LHMucHQub3BlbkxheWVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyLnpJbmRleD1lLmNvbmZpZy56SW5kZXgsci5zZXRUb3A9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oKXtyLnpJbmRleCsrLGUuY3NzKCJ6LWluZGV4IixyLnpJbmRleCsxKX07cmV0dXJuIHIuekluZGV4PXBhcnNlSW50KGVbMF0uc3R5bGUuekluZGV4KSxlLm9uKCJtb3VzZWRvd24iLHQpLHIuekluZGV4fX0sby5yZWNvcmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9W2Uud2lkdGgoKSxlLmhlaWdodCgpLGUucG9zaXRpb24oKS50b3AsZS5wb3NpdGlvbigpLmxlZnQrcGFyc2VGbG9hdChlLmNzcygibWFyZ2luLWxlZnQiKSldO2UuZmluZCgiLmxheXVpLWxheWVyLW1heCIpLmFkZENsYXNzKCJsYXl1aS1sYXllci1tYXhtaW4iKSxlLmF0dHIoe2FyZWE6dH0pfSxvLnJlc2NvbGxiYXI9ZnVuY3Rpb24oZSl7bC5odG1sLmF0dHIoImxheWVyLWZ1bGwiKT09ZSYmKGwuaHRtbFswXS5zdHlsZS5yZW1vdmVQcm9wZXJ0eT9sLmh0bWxbMF0uc3R5bGUucmVtb3ZlUHJvcGVydHkoIm92ZXJmbG93Iik6bC5odG1sWzBdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgib3ZlcmZsb3ciKSxsLmh0bWwucmVtb3ZlQXR0cigibGF5ZXItZnVsbCIpKX0sZS5sYXllcj1yLHIuZ2V0Q2hpbGRGcmFtZT1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fGkoIi4iK2xbNF0pLmF0dHIoInRpbWVzIiksaSgiIyIrbFswXSt0KS5maW5kKCJpZnJhbWUiKS5jb250ZW50cygpLmZpbmQoZSl9LHIuZ2V0RnJhbWVJbmRleD1mdW5jdGlvbihlKXtyZXR1cm4gaSgiIyIrZSkucGFyZW50cygiLiIrbFs0XSkuYXR0cigidGltZXMiKX0sci5pZnJhbWVBdXRvPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXIuZ2V0Q2hpbGRGcmFtZSgiaHRtbCIsZSkub3V0ZXJIZWlnaHQoKSxuPWkoIiMiK2xbMF0rZSksYT1uLmZpbmQobFsxXSkub3V0ZXJIZWlnaHQoKXx8MCxvPW4uZmluZCgiLiIrbFs2XSkub3V0ZXJIZWlnaHQoKXx8MDtuLmNzcyh7aGVpZ2h0OnQrYStvfSksbi5maW5kKCJpZnJhbWUiKS5jc3Moe2hlaWdodDp0fSl9fSxyLmlmcmFtZVNyYz1mdW5jdGlvbihlLHQpe2koIiMiK2xbMF0rZSkuZmluZCgiaWZyYW1lIikuYXR0cigic3JjIix0KX0sci5zdHlsZT1mdW5jdGlvbihlLHQsbil7dmFyIGE9aSgiIyIrbFswXStlKSxyPWEuZmluZCgiLmxheXVpLWxheWVyLWNvbnRlbnQiKSxzPWEuYXR0cigidHlwZSIpLGY9YS5maW5kKGxbMV0pLm91dGVySGVpZ2h0KCl8fDAsYz1hLmZpbmQoIi4iK2xbNl0pLm91dGVySGVpZ2h0KCl8fDA7YS5hdHRyKCJtaW5MZWZ0Iik7cyE9PW8udHlwZVszXSYmcyE9PW8udHlwZVs0XSYmKG58fChwYXJzZUZsb2F0KHQud2lkdGgpPD0yNjAmJih0LndpZHRoPTI2MCkscGFyc2VGbG9hdCh0LmhlaWdodCktZi1jPD02NCYmKHQuaGVpZ2h0PTY0K2YrYykpLGEuY3NzKHQpLGM9YS5maW5kKCIuIitsWzZdKS5vdXRlckhlaWdodCgpLHM9PT1vLnR5cGVbMl0/YS5maW5kKCJpZnJhbWUiKS5jc3Moe2hlaWdodDpwYXJzZUZsb2F0KHQuaGVpZ2h0KS1mLWN9KTpyLmNzcyh7aGVpZ2h0OnBhcnNlRmxvYXQodC5oZWlnaHQpLWYtYy1wYXJzZUZsb2F0KHIuY3NzKCJwYWRkaW5nLXRvcCIpKS1wYXJzZUZsb2F0KHIuY3NzKCJwYWRkaW5nLWJvdHRvbSIpKX0pKX0sci5taW49ZnVuY3Rpb24oZSx0KXt2YXIgYT1pKCIjIitsWzBdK2UpLHM9YS5maW5kKGxbMV0pLm91dGVySGVpZ2h0KCl8fDAsZj1hLmF0dHIoIm1pbkxlZnQiKXx8MTgxKm8ubWluSW5kZXgrInB4IixjPWEuY3NzKCJwb3NpdGlvbiIpO28ucmVjb3JkKGEpLG8ubWluTGVmdFswXSYmKGY9by5taW5MZWZ0WzBdLG8ubWluTGVmdC5zaGlmdCgpKSxhLmF0dHIoInBvc2l0aW9uIixjKSxyLnN0eWxlKGUse3dpZHRoOjE4MCxoZWlnaHQ6cyxsZWZ0OmYsdG9wOm4uaGVpZ2h0KCktcyxwb3NpdGlvbjoiZml4ZWQiLG92ZXJmbG93OiJoaWRkZW4ifSwhMCksYS5maW5kKCIubGF5dWktbGF5ZXItbWluIikuaGlkZSgpLCJwYWdlIj09PWEuYXR0cigidHlwZSIpJiZhLmZpbmQobFs0XSkuaGlkZSgpLG8ucmVzY29sbGJhcihlKSxhLmF0dHIoIm1pbkxlZnQiKXx8by5taW5JbmRleCsrLGEuYXR0cigibWluTGVmdCIsZil9LHIucmVzdG9yZT1mdW5jdGlvbihlKXt2YXIgdD1pKCIjIitsWzBdK2UpLG49dC5hdHRyKCJhcmVhIikuc3BsaXQoIiwiKTt0LmF0dHIoInR5cGUiKTtyLnN0eWxlKGUse3dpZHRoOnBhcnNlRmxvYXQoblswXSksaGVpZ2h0OnBhcnNlRmxvYXQoblsxXSksdG9wOnBhcnNlRmxvYXQoblsyXSksbGVmdDpwYXJzZUZsb2F0KG5bM10pLHBvc2l0aW9uOnQuYXR0cigicG9zaXRpb24iKSxvdmVyZmxvdzoidmlzaWJsZSJ9LCEwKSx0LmZpbmQoIi5sYXl1aS1sYXllci1tYXgiKS5yZW1vdmVDbGFzcygibGF5dWktbGF5ZXItbWF4bWluIiksdC5maW5kKCIubGF5dWktbGF5ZXItbWluIikuc2hvdygpLCJwYWdlIj09PXQuYXR0cigidHlwZSIpJiZ0LmZpbmQobFs0XSkuc2hvdygpLG8ucmVzY29sbGJhcihlKX0sci5mdWxsPWZ1bmN0aW9uKGUpe3ZhciB0LGE9aSgiIyIrbFswXStlKTtvLnJlY29yZChhKSxsLmh0bWwuYXR0cigibGF5ZXItZnVsbCIpfHxsLmh0bWwuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmF0dHIoImxheWVyLWZ1bGwiLGUpLGNsZWFyVGltZW91dCh0KSx0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD0iZml4ZWQiPT09YS5jc3MoInBvc2l0aW9uIik7ci5zdHlsZShlLHt0b3A6dD8wOm4uc2Nyb2xsVG9wKCksbGVmdDp0PzA6bi5zY3JvbGxMZWZ0KCksd2lkdGg6bi53aWR0aCgpLGhlaWdodDpuLmhlaWdodCgpfSwhMCksYS5maW5kKCIubGF5dWktbGF5ZXItbWluIikuaGlkZSgpfSwxMDApfSxyLnRpdGxlPWZ1bmN0aW9uKGUsdCl7dmFyIG49aSgiIyIrbFswXSsodHx8ci5pbmRleCkpLmZpbmQobFsxXSk7bi5odG1sKGUpfSxyLmNsb3NlPWZ1bmN0aW9uKGUpe3ZhciB0PWkoIiMiK2xbMF0rZSksbj10LmF0dHIoInR5cGUiKSxhPSJsYXllci1hbmltLWNsb3NlIjtpZih0WzBdKXt2YXIgcz0ibGF5dWktbGF5ZXItd3JhcCIsZj1mdW5jdGlvbigpe2lmKG49PT1vLnR5cGVbMV0mJiJvYmplY3QiPT09dC5hdHRyKCJjb25UeXBlIikpe3QuY2hpbGRyZW4oIjpub3QoLiIrbFs1XSsiKSIpLnJlbW92ZSgpO2Zvcih2YXIgYT10LmZpbmQoIi4iK3MpLHI9MDtyPDI7cisrKWEudW53cmFwKCk7YS5jc3MoImRpc3BsYXkiLGEuZGF0YSgiZGlzcGxheSIpKS5yZW1vdmVDbGFzcyhzKX1lbHNle2lmKG49PT1vLnR5cGVbMl0pdHJ5e3ZhciBmPWkoIiMiK2xbNF0rZSlbMF07Zi5jb250ZW50V2luZG93LmRvY3VtZW50LndyaXRlKCIiKSxmLmNvbnRlbnRXaW5kb3cuY2xvc2UoKSx0LmZpbmQoIi4iK2xbNV0pWzBdLnJlbW92ZUNoaWxkKGYpfWNhdGNoKGMpe310WzBdLmlubmVySFRNTD0iIix0LnJlbW92ZSgpfSJmdW5jdGlvbiI9PXR5cGVvZiBvLmVuZFtlXSYmby5lbmRbZV0oKSxkZWxldGUgby5lbmRbZV19O3QuZGF0YSgiaXNPdXRBbmltIikmJnQuYWRkQ2xhc3MoImxheWVyLWFuaW0gIithKSxpKCIjbGF5dWktbGF5ZXItbW92ZXMsICNsYXl1aS1sYXllci1zaGFkZSIrZSkucmVtb3ZlKCksNj09ci5pZSYmby5yZXNlbGVjdCgpLG8ucmVzY29sbGJhcihlKSx0LmF0dHIoIm1pbkxlZnQiKSYmKG8ubWluSW5kZXgtLSxvLm1pbkxlZnQucHVzaCh0LmF0dHIoIm1pbkxlZnQiKSkpLHIuaWUmJnIuaWU8MTB8fCF0LmRhdGEoImlzT3V0QW5pbSIpP2YoKTpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZigpfSwyMDApfX0sci5jbG9zZUFsbD1mdW5jdGlvbihlKXtpLmVhY2goaSgiLiIrbFswXSksZnVuY3Rpb24oKXt2YXIgdD1pKHRoaXMpLG49ZT90LmF0dHIoInR5cGUiKT09PWU6MTtuJiZyLmNsb3NlKHQuYXR0cigidGltZXMiKSksbj1udWxsfSl9O3ZhciBmPXIuY2FjaGV8fHt9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGYuc2tpbj8iICIrZi5za2luKyIgIitmLnNraW4rIi0iK2U6IiJ9O3IucHJvbXB0PWZ1bmN0aW9uKGUsdCl7dmFyIGE9IiI7aWYoZT1lfHx7fSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmKHQ9ZSksZS5hcmVhKXt2YXIgbz1lLmFyZWE7YT0nc3R5bGU9IndpZHRoOiAnK29bMF0rIjsgaGVpZ2h0OiAiK29bMV0rJzsiJyxkZWxldGUgZS5hcmVhfXZhciBzLGw9Mj09ZS5mb3JtVHlwZT8nPHRleHRhcmVhIGNsYXNzPSJsYXl1aS1sYXllci1pbnB1dCInK2ErIj4iKyhlLnZhbHVlfHwiIikrIjwvdGV4dGFyZWE+IjpmdW5jdGlvbigpe3JldHVybic8aW5wdXQgdHlwZT0iJysoMT09ZS5mb3JtVHlwZT8icGFzc3dvcmQiOiJ0ZXh0IikrJyIgY2xhc3M9ImxheXVpLWxheWVyLWlucHV0IiB2YWx1ZT0iJysoZS52YWx1ZXx8IiIpKyciPid9KCksZj1lLnN1Y2Nlc3M7cmV0dXJuIGRlbGV0ZSBlLnN1Y2Nlc3Msci5vcGVuKGkuZXh0ZW5kKHt0eXBlOjEsYnRuOlsiJiN4Nzg2RTsmI3g1QjlBOyIsIiYjeDUzRDY7JiN4NkQ4ODsiXSxjb250ZW50Omwsc2tpbjoibGF5dWktbGF5ZXItcHJvbXB0IitjKCJwcm9tcHQiKSxtYXhXaWR0aDpuLndpZHRoKCksc3VjY2VzczpmdW5jdGlvbihlKXtzPWUuZmluZCgiLmxheXVpLWxheWVyLWlucHV0Iikscy5mb2N1cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBmJiZmKGUpfSxyZXNpemU6ITEseWVzOmZ1bmN0aW9uKGkpe3ZhciBuPXMudmFsKCk7IiI9PT1uP3MuZm9jdXMoKTpuLmxlbmd0aD4oZS5tYXhsZW5ndGh8fDUwMCk/ci50aXBzKCImI3g2NzAwOyYjeDU5MUE7JiN4OEY5MzsmI3g1MTY1OyIrKGUubWF4bGVuZ3RofHw1MDApKyImI3g0RTJBOyYjeDVCNTc7JiN4NjU3MDsiLHMse3RpcHM6MX0pOnQmJnQobixpLHMpfX0sZSkpfSxyLnRhYj1mdW5jdGlvbihlKXtlPWV8fHt9O3ZhciB0PWUudGFifHx7fSxuPSJsYXl1aS10aGlzIixhPWUuc3VjY2VzcztyZXR1cm4gZGVsZXRlIGUuc3VjY2VzcyxyLm9wZW4oaS5leHRlbmQoe3R5cGU6MSxza2luOiJsYXl1aS1sYXllci10YWIiK2MoInRhYiIpLHJlc2l6ZTohMSx0aXRsZTpmdW5jdGlvbigpe3ZhciBlPXQubGVuZ3RoLGk9MSxhPSIiO2lmKGU+MClmb3IoYT0nPHNwYW4gY2xhc3M9IicrbisnIj4nK3RbMF0udGl0bGUrIjwvc3Bhbj4iO2k8ZTtpKyspYSs9IjxzcGFuPiIrdFtpXS50aXRsZSsiPC9zcGFuPiI7cmV0dXJuIGF9KCksY29udGVudDonPHVsIGNsYXNzPSJsYXl1aS1sYXllci10YWJtYWluIj4nK2Z1bmN0aW9uKCl7dmFyIGU9dC5sZW5ndGgsaT0xLGE9IiI7aWYoZT4wKWZvcihhPSc8bGkgY2xhc3M9ImxheXVpLWxheWVyLXRhYmxpICcrbisnIj4nKyh0WzBdLmNvbnRlbnR8fCJubyBjb250ZW50IikrIjwvbGk+IjtpPGU7aSsrKWErPSc8bGkgY2xhc3M9ImxheXVpLWxheWVyLXRhYmxpIj4nKyh0W2ldLmNvbnRlbnR8fCJubyAgY29udGVudCIpKyI8L2xpPiI7cmV0dXJuIGF9KCkrIjwvdWw+IixzdWNjZXNzOmZ1bmN0aW9uKHQpe3ZhciBvPXQuZmluZCgiLmxheXVpLWxheWVyLXRpdGxlIikuY2hpbGRyZW4oKSxyPXQuZmluZCgiLmxheXVpLWxheWVyLXRhYm1haW4iKS5jaGlsZHJlbigpO28ub24oIm1vdXNlZG93biIsZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0LmNhbmNlbEJ1YmJsZT0hMDt2YXIgYT1pKHRoaXMpLG89YS5pbmRleCgpO2EuYWRkQ2xhc3Mobikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhuKSxyLmVxKG8pLnNob3coKS5zaWJsaW5ncygpLmhpZGUoKSwiZnVuY3Rpb24iPT10eXBlb2YgZS5jaGFuZ2UmJmUuY2hhbmdlKG8pfSksImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEodCl9fSxlKSl9LHIucGhvdG9zPWZ1bmN0aW9uKHQsbixhKXtmdW5jdGlvbiBvKGUsdCxpKXt2YXIgbj1uZXcgSW1hZ2U7cmV0dXJuIG4uc3JjPWUsbi5jb21wbGV0ZT90KG4pOihuLm9ubG9hZD1mdW5jdGlvbigpe24ub25sb2FkPW51bGwsdChuKX0sdm9pZChuLm9uZXJyb3I9ZnVuY3Rpb24oZSl7bi5vbmVycm9yPW51bGwsaShlKX0pKX12YXIgcz17fTtpZih0PXR8fHt9LHQucGhvdG9zKXt2YXIgbD10LnBob3Rvcy5jb25zdHJ1Y3Rvcj09PU9iamVjdCxmPWw/dC5waG90b3M6e30sdT1mLmRhdGF8fFtdLGQ9Zi5zdGFydHx8MDtzLmltZ0luZGV4PSgwfGQpKzEsdC5pbWc9dC5pbWd8fCJpbWciO3ZhciB5PXQuc3VjY2VzcztpZihkZWxldGUgdC5zdWNjZXNzLGwpe2lmKDA9PT11Lmxlbmd0aClyZXR1cm4gci5tc2coIiYjeDZDQTE7JiN4NjcwOTsmI3g1NkZFOyYjeDcyNDc7Iil9ZWxzZXt2YXIgcD1pKHQucGhvdG9zKSxoPWZ1bmN0aW9uKCl7dT1bXSxwLmZpbmQodC5pbWcpLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzKTt0LmF0dHIoImxheWVyLWluZGV4IixlKSx1LnB1c2goe2FsdDp0LmF0dHIoImFsdCIpLHBpZDp0LmF0dHIoImxheWVyLXBpZCIpLHNyYzp0LmF0dHIoImxheWVyLXNyYyIpfHx0LmF0dHIoInNyYyIpLHRodW1iOnQuYXR0cigic3JjIil9KX0pfTtpZihoKCksMD09PXUubGVuZ3RoKXJldHVybjtpZihufHxwLm9uKCJjbGljayIsdC5pbWcsZnVuY3Rpb24oKXt2YXIgZT1pKHRoaXMpLG49ZS5hdHRyKCJsYXllci1pbmRleCIpO3IucGhvdG9zKGkuZXh0ZW5kKHQse3Bob3Rvczp7c3RhcnQ6bixkYXRhOnUsdGFiOnQudGFifSxmdWxsOnQuZnVsbH0pLCEwKSxoKCl9KSwhbilyZXR1cm59cy5pbWdwcmV2PWZ1bmN0aW9uKGUpe3MuaW1nSW5kZXgtLSxzLmltZ0luZGV4PDEmJihzLmltZ0luZGV4PXUubGVuZ3RoKSxzLnRhYmltZyhlKX0scy5pbWduZXh0PWZ1bmN0aW9uKGUsdCl7cy5pbWdJbmRleCsrLHMuaW1nSW5kZXg+dS5sZW5ndGgmJihzLmltZ0luZGV4PTEsdCl8fHMudGFiaW1nKGUpfSxzLmtleXVwPWZ1bmN0aW9uKGUpe2lmKCFzLmVuZCl7dmFyIHQ9ZS5rZXlDb2RlO2UucHJldmVudERlZmF1bHQoKSwzNz09PXQ/cy5pbWdwcmV2KCEwKTozOT09PXQ/cy5pbWduZXh0KCEwKToyNz09PXQmJnIuY2xvc2Uocy5pbmRleCl9fSxzLnRhYmltZz1mdW5jdGlvbihlKXtpZighKHUubGVuZ3RoPD0xKSlyZXR1cm4gZi5zdGFydD1zLmltZ0luZGV4LTEsci5jbG9zZShzLmluZGV4KSxyLnBob3Rvcyh0LCEwLGUpfSxzLmV2ZW50PWZ1bmN0aW9uKCl7cy5iaWdpbWcuaG92ZXIoZnVuY3Rpb24oKXtzLmltZ3NlZS5zaG93KCl9LGZ1bmN0aW9uKCl7cy5pbWdzZWUuaGlkZSgpfSkscy5iaWdpbWcuZmluZCgiLmxheXVpLWxheWVyLWltZ3ByZXYiKS5vbigiY2xpY2siLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxzLmltZ3ByZXYoKX0pLHMuYmlnaW1nLmZpbmQoIi5sYXl1aS1sYXllci1pbWduZXh0Iikub24oImNsaWNrIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCkscy5pbWduZXh0KCl9KSxpKGRvY3VtZW50KS5vbigia2V5dXAiLHMua2V5dXApfSxzLmxvYWRpPXIubG9hZCgxLHtzaGFkZTohKCJzaGFkZSJpbiB0KSYmLjksc2Nyb2xsYmFyOiExfSksbyh1W2RdLnNyYyxmdW5jdGlvbihuKXtyLmNsb3NlKHMubG9hZGkpLHMuaW5kZXg9ci5vcGVuKGkuZXh0ZW5kKHt0eXBlOjEsaWQ6ImxheXVpLWxheWVyLXBob3RvcyIsYXJlYTpmdW5jdGlvbigpe3ZhciBhPVtuLndpZHRoLG4uaGVpZ2h0XSxvPVtpKGUpLndpZHRoKCktMTAwLGkoZSkuaGVpZ2h0KCktMTAwXTtpZighdC5mdWxsJiYoYVswXT5vWzBdfHxhWzFdPm9bMV0pKXt2YXIgcj1bYVswXS9vWzBdLGFbMV0vb1sxXV07clswXT5yWzFdPyhhWzBdPWFbMF0vclswXSxhWzFdPWFbMV0vclswXSk6clswXTxyWzFdJiYoYVswXT1hWzBdL3JbMV0sYVsxXT1hWzFdL3JbMV0pfXJldHVyblthWzBdKyJweCIsYVsxXSsicHgiXX0oKSx0aXRsZTohMSxzaGFkZTouOSxzaGFkZUNsb3NlOiEwLGNsb3NlQnRuOiExLG1vdmU6Ii5sYXl1aS1sYXllci1waGltZyBpbWciLG1vdmVUeXBlOjEsc2Nyb2xsYmFyOiExLG1vdmVPdXQ6ITAsaXNPdXRBbmltOiExLHNraW46ImxheXVpLWxheWVyLXBob3RvcyIrYygicGhvdG9zIiksY29udGVudDonPGRpdiBjbGFzcz0ibGF5dWktbGF5ZXItcGhpbWciPjxpbWcgc3JjPSInK3VbZF0uc3JjKyciIGFsdD0iJysodVtkXS5hbHR8fCIiKSsnIiBsYXllci1waWQ9IicrdVtkXS5waWQrJyI+PGRpdiBjbGFzcz0ibGF5dWktbGF5ZXItaW1nc2VlIj4nKyh1Lmxlbmd0aD4xPyc8c3BhbiBjbGFzcz0ibGF5dWktbGF5ZXItaW1ndWlkZSI+PGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ibGF5dWktbGF5ZXItaWNvbmV4dCBsYXl1aS1sYXllci1pbWdwcmV2Ij48L2E+PGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0ibGF5dWktbGF5ZXItaWNvbmV4dCBsYXl1aS1sYXllci1pbWduZXh0Ij48L2E+PC9zcGFuPic6IiIpKyc8ZGl2IGNsYXNzPSJsYXl1aS1sYXllci1pbWdiYXIiIHN0eWxlPSJkaXNwbGF5OicrKGE/ImJsb2NrIjoiIikrJyI+PHNwYW4gY2xhc3M9ImxheXVpLWxheWVyLWltZ3RpdCI+PGEgaHJlZj0iamF2YXNjcmlwdDo7Ij4nKyh1W2RdLmFsdHx8IiIpKyI8L2E+PGVtPiIrcy5pbWdJbmRleCsiLyIrdS5sZW5ndGgrIjwvZW0+PC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PiIsc3VjY2VzczpmdW5jdGlvbihlLGkpe3MuYmlnaW1nPWUuZmluZCgiLmxheXVpLWxheWVyLXBoaW1nIikscy5pbWdzZWU9ZS5maW5kKCIubGF5dWktbGF5ZXItaW1ndWlkZSwubGF5dWktbGF5ZXItaW1nYmFyIikscy5ldmVudChlKSx0LnRhYiYmdC50YWIodVtkXSxlKSwiZnVuY3Rpb24iPT10eXBlb2YgeSYmeShlKX0sZW5kOmZ1bmN0aW9uKCl7cy5lbmQ9ITAsaShkb2N1bWVudCkub2ZmKCJrZXl1cCIscy5rZXl1cCl9fSx0KSl9LGZ1bmN0aW9uKCl7ci5jbG9zZShzLmxvYWRpKSxyLm1zZygiJiN4NUY1MzsmI3g1MjREOyYjeDU2RkU7JiN4NzI0NzsmI3g1NzMwOyYjeDU3NDA7JiN4NUYwMjsmI3g1RTM4Ozxicj4mI3g2NjJGOyYjeDU0MjY7JiN4N0VFNzsmI3g3RUVEOyYjeDY3RTU7JiN4NzcwQjsmI3g0RTBCOyYjeDRFMDA7JiN4NUYyMDsmI3hGRjFGOyIse3RpbWU6M2U0LGJ0bjpbIiYjeDRFMEI7JiN4NEUwMDsmI3g1RjIwOyIsIiYjeDRFMEQ7JiN4NzcwQjsmI3g0RTg2OyJdLHllczpmdW5jdGlvbigpe3UubGVuZ3RoPjEmJnMuaW1nbmV4dCghMCwhMCl9fSl9KX19LG8ucnVuPWZ1bmN0aW9uKHQpe2k9dCxuPWkoZSksbC5odG1sPWkoImh0bWwiKSxyLm9wZW49ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMoZSk7cmV0dXJuIHQuaW5kZXh9fSxlLmxheXVpJiZsYXl1aS5kZWZpbmU/KHIucmVhZHkoKSxsYXl1aS5kZWZpbmUoImpxdWVyeSIsZnVuY3Rpb24odCl7ci5wYXRoPWxheXVpLmNhY2hlLmRpcixvLnJ1bihsYXl1aS4kKSxlLmxheWVyPXIsdCgibGF5ZXIiLHIpfSkpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sZnVuY3Rpb24oKXtyZXR1cm4gby5ydW4oZS5qUXVlcnkpLHJ9KTpmdW5jdGlvbigpe28ucnVuKGUualF1ZXJ5KSxyLnJlYWR5KCl9KCl9KHdpbmRvdyk7"}},"time_used":495,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":495,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/static/tradeview/datafeeds/udf/dist/bundle.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.544Z","timestamp":1785149590544,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/static/tradeview/datafeeds/udf/dist/bundle.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:54 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9866-34e3\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":13539,"size_decoded":4469,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (13538)","md5":"fd3251e228d9edda60ce01ccb3046f77","sha1":"acea866435eea9c7a0564dd82435bab93c22a9db","sha256":"f016a5c57c09504aea2cca849831255353ad7e56e008fd49a45a23b114b1247d","sha512":"07db2933537e3a704befe64479130db26145597802b80cc9f9c3dcc437aff0823e896626240801ac121e06c25ec986b42580c7d240f900b160646d29c99429ad","ssdeep":"384:kpe0jAoNzmAHgWH4NRZsPA4iCA2PHDJMW:oBiWH4jZsDPA2PHyW","tlshash":"9452a6c97611312182936472e87f380ba139b515688a903c71c8e9de6efdb5dea17f3c","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.199307Z","times_seen":348,"resource_available":true,"data":"IWZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT90KGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLHQpOnQoZS5EYXRhZmVlZHM9e30pfSh0aGlzLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07dmFyIHI9ITE7ZnVuY3Rpb24gbihlKXtpZihyKXt2YXIgdD1uZXcgRGF0ZTtjb25zb2xlLmxvZyh0LnRvTG9jYWxlVGltZVN0cmluZygpKyIuIit0LmdldE1pbGxpc2Vjb25kcygpKyI+ICIrZSl9fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIHZvaWQgMD09PWU/IiI6InN0cmluZyI9PXR5cGVvZiBlP2U6ZS5tZXNzYWdlfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2RhdGFmZWVkVXJsPWUsdGhpcy5fcmVxdWVzdGVyPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldEJhcnM9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIG89dGhpcyxpPXtzeW1ib2w6ZS50aWNrZXJ8fCIiLHJlc29sdXRpb246dCxmcm9tOnIsdG86c307cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsdSl7by5fcmVxdWVzdGVyLnNlbmRSZXF1ZXN0KG8uX2RhdGFmZWVkVXJsLCJoaXN0b3J5IixpKS50aGVuKGZ1bmN0aW9uKGUpe2lmKCJvayI9PT1lLnN8fCJub19kYXRhIj09PWUucyl7dmFyIHQ9W10scj17bm9EYXRhOiExfTtpZigibm9fZGF0YSI9PT1lLnMpci5ub0RhdGE9ITAsci5uZXh0VGltZT1lLm5leHRUaW1lO2Vsc2UgZm9yKHZhciBzPXZvaWQgMCE9PWUudixvPXZvaWQgMCE9PWUubyxpPTA7aTxlLnQubGVuZ3RoOysraSl7dmFyIG49e3RpbWU6MWUzKmUudFtpXSxjbG9zZTpOdW1iZXIoZS5jW2ldKSxvcGVuOk51bWJlcihlLmNbaV0pLGhpZ2g6TnVtYmVyKGUuY1tpXSksbG93Ok51bWJlcihlLmNbaV0pfTtvJiYobi5vcGVuPU51bWJlcihlLm9baV0pLG4uaGlnaD1OdW1iZXIoZS5oW2ldKSxuLmxvdz1OdW1iZXIoZS5sW2ldKSkscyYmKG4udm9sdW1lPU51bWJlcihlLnZbaV0pKSx0LnB1c2gobil9YSh7YmFyczp0LG1ldGE6cn0pfWVsc2UgdShlLmVycm1zZyl9KS5jYXRjaChmdW5jdGlvbihlKXt2YXIgdD1jKGUpO2NvbnNvbGUud2FybigiSGlzdG9yeVByb3ZpZGVyOiBnZXRCYXJzKCkgZmFpbGVkLCBlcnJvcj0iK3QpLHUodCl9KX0pfSxlfSgpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fc3Vic2NyaWJlcnM9e30sdGhpcy5fcmVxdWVzdHNQZW5kaW5nPTAsdGhpcy5faGlzdG9yeVByb3ZpZGVyPWUsc2V0SW50ZXJ2YWwodGhpcy5fdXBkYXRlRGF0YS5iaW5kKHRoaXMpLHQpfXJldHVybiBlLnByb3RvdHlwZS5zdWJzY3JpYmVCYXJzPWZ1bmN0aW9uKGUsdCxyLHMpe3RoaXMuX3N1YnNjcmliZXJzLmhhc093blByb3BlcnR5KHMpP24oIkRhdGFQdWxzZVByb3ZpZGVyOiBhbHJlYWR5IGhhcyBzdWJzY3JpYmVyIHdpdGggaWQ9IitzKToodGhpcy5fc3Vic2NyaWJlcnNbc109e2xhc3RCYXJUaW1lOm51bGwsbGlzdGVuZXI6cixyZXNvbHV0aW9uOnQsc3ltYm9sSW5mbzplfSxuKCJEYXRhUHVsc2VQcm92aWRlcjogc3Vic2NyaWJlZCBmb3IgIyIrcysiIC0geyIrZS5uYW1lKyIsICIrdCsifSIpKX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmVCYXJzPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9zdWJzY3JpYmVyc1tlXSxuKCJEYXRhUHVsc2VQcm92aWRlcjogdW5zdWJzY3JpYmVkIGZvciAjIitlKX0sZS5wcm90b3R5cGUuX3VwZGF0ZURhdGE9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2lmKCEoMDx0aGlzLl9yZXF1ZXN0c1BlbmRpbmcpKXt0aGlzLl9yZXF1ZXN0c1BlbmRpbmc9MDt2YXIgZT1mdW5jdGlvbih0KXtzLl9yZXF1ZXN0c1BlbmRpbmcrPTEscy5fdXBkYXRlRGF0YUZvclN1YnNjcmliZXIodCkudGhlbihmdW5jdGlvbigpe3IuX3JlcXVlc3RzUGVuZGluZy09MSxuKCJEYXRhUHVsc2VQcm92aWRlcjogZGF0YSBmb3IgIyIrdCsiIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LCBwZW5kaW5nPSIrci5fcmVxdWVzdHNQZW5kaW5nKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3IuX3JlcXVlc3RzUGVuZGluZy09MSxuKCJEYXRhUHVsc2VQcm92aWRlcjogZGF0YSBmb3IgIyIrdCsiIHVwZGF0ZWQgd2l0aCBlcnJvcj0iK2MoZSkrIiwgcGVuZGluZz0iK3IuX3JlcXVlc3RzUGVuZGluZyl9KX0scz10aGlzO2Zvcih2YXIgdCBpbiB0aGlzLl9zdWJzY3JpYmVycyllKHQpfX0sZS5wcm90b3R5cGUuX3VwZGF0ZURhdGFGb3JTdWJzY3JpYmVyPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMsZT10aGlzLl9zdWJzY3JpYmVyc1t0XSxzPXBhcnNlSW50KChEYXRlLm5vdygpLzFlMykudG9TdHJpbmcoKSksbz1zLWZ1bmN0aW9uKGUsdCl7dmFyIHI9MDtyPSJEIj09PWV8fCIxRCI9PT1lP3Q6Ik0iPT09ZXx8IjFNIj09PWU/MzEqdDoiVyI9PT1lfHwiMVciPT09ZT83KnQ6dCpwYXJzZUludChlKS8xNDQwO3JldHVybiAyNCpyKjYwKjYwfShlLnJlc29sdXRpb24sMTApO3JldHVybiB0aGlzLl9oaXN0b3J5UHJvdmlkZXIuZ2V0QmFycyhlLnN5bWJvbEluZm8sZS5yZXNvbHV0aW9uLG8scykudGhlbihmdW5jdGlvbihlKXtyLl9vblN1YnNjcmliZXJEYXRhUmVjZWl2ZWQodCxlKX0pfSxlLnByb3RvdHlwZS5fb25TdWJzY3JpYmVyRGF0YVJlY2VpdmVkPWZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fc3Vic2NyaWJlcnMuaGFzT3duUHJvcGVydHkoZSkpe3ZhciByPXQuYmFycztpZigwIT09ci5sZW5ndGgpe3ZhciBzPXJbci5sZW5ndGgtMV0sbz10aGlzLl9zdWJzY3JpYmVyc1tlXTtpZighKG51bGwhPT1vLmxhc3RCYXJUaW1lJiZzLnRpbWU8by5sYXN0QmFyVGltZSkpe2lmKG51bGwhPT1vLmxhc3RCYXJUaW1lJiZzLnRpbWU+by5sYXN0QmFyVGltZSl7aWYoci5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggYmFycyBpbiBoaXN0b3J5IGZvciBwcm9wZXIgcHVsc2UgdXBkYXRlLiBOZWVkIGF0IGxlYXN0IDIuIik7dmFyIGk9cltyLmxlbmd0aC0yXTtvLmxpc3RlbmVyKGkpfW8ubGFzdEJhclRpbWU9cy50aW1lLG8ubGlzdGVuZXIocyl9fX1lbHNlIG4oIkRhdGFQdWxzZVByb3ZpZGVyOiBEYXRhIGNvbWVzIGZvciBhbHJlYWR5IHVuc3Vic2NyaWJlZCBzdWJzY3JpcHRpb24gIyIrZSl9LGV9KCk7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuX3N1YnNjcmliZXJzPXt9LHRoaXMuX3JlcXVlc3RzUGVuZGluZz0wLHRoaXMuX3F1b3Rlc1Byb3ZpZGVyPWUsc2V0SW50ZXJ2YWwodGhpcy5fdXBkYXRlUXVvdGVzLmJpbmQodGhpcywxKSwxZTQpLHNldEludGVydmFsKHRoaXMuX3VwZGF0ZVF1b3Rlcy5iaW5kKHRoaXMsMCksNmU0KX1yZXR1cm4gZS5wcm90b3R5cGUuc3Vic2NyaWJlUXVvdGVzPWZ1bmN0aW9uKGUsdCxyLHMpe3RoaXMuX3N1YnNjcmliZXJzW3NdPXtzeW1ib2xzOmUsZmFzdFN5bWJvbHM6dCxsaXN0ZW5lcjpyfSxuKCJRdW90ZXNQdWxzZVByb3ZpZGVyOiBzdWJzY3JpYmVkIHF1b3RlcyB3aXRoICMiK3MpfSxlLnByb3RvdHlwZS51bnN1YnNjcmliZVF1b3Rlcz1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5fc3Vic2NyaWJlcnNbZV0sbigiUXVvdGVzUHVsc2VQcm92aWRlcjogdW5zdWJzY3JpYmVkIHF1b3RlcyB3aXRoICMiK2UpfSxlLnByb3RvdHlwZS5fdXBkYXRlUXVvdGVzPWZ1bmN0aW9uKHMpe3ZhciBvPXRoaXM7aWYoISgwPHRoaXMuX3JlcXVlc3RzUGVuZGluZykpe3ZhciBlPWZ1bmN0aW9uKHQpe2kuX3JlcXVlc3RzUGVuZGluZysrO3ZhciByPWkuX3N1YnNjcmliZXJzW3RdO2kuX3F1b3Rlc1Byb3ZpZGVyLmdldFF1b3RlcygxPT09cz9yLmZhc3RTeW1ib2xzOnIuc3ltYm9scykudGhlbihmdW5jdGlvbihlKXtvLl9yZXF1ZXN0c1BlbmRpbmctLSxvLl9zdWJzY3JpYmVycy5oYXNPd25Qcm9wZXJ0eSh0KSYmKHIubGlzdGVuZXIoZSksbigiUXVvdGVzUHVsc2VQcm92aWRlcjogZGF0YSBmb3IgIyIrdCsiICgiK3MrIikgdXBkYXRlZCBzdWNjZXNzZnVsbHksIHBlbmRpbmc9IitvLl9yZXF1ZXN0c1BlbmRpbmcpKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe28uX3JlcXVlc3RzUGVuZGluZy0tLG4oIlF1b3Rlc1B1bHNlUHJvdmlkZXI6IGRhdGEgZm9yICMiK3QrIiAoIitzKyIpIHVwZGF0ZWQgd2l0aCBlcnJvcj0iK2MoZSkrIiwgcGVuZGluZz0iK28uX3JlcXVlc3RzUGVuZGluZyl9KX0saT10aGlzO2Zvcih2YXIgdCBpbiB0aGlzLl9zdWJzY3JpYmVycyllKHQpfX0sZX0oKTtmdW5jdGlvbiBmKGUsdCxyKXt2YXIgcz1lW3RdO3JldHVybiBBcnJheS5pc0FycmF5KHMpP3Nbcl06c312YXIgdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3RoaXMuX2V4Y2hhbmdlc0xpc3Q9WyJOWVNFIiwiRk9SRVgiLCJBTUVYIl0sdGhpcy5fc3ltYm9sc0luZm89e30sdGhpcy5fc3ltYm9sc0xpc3Q9W10sdGhpcy5fZGF0YWZlZWRVcmw9ZSx0aGlzLl9kYXRhZmVlZFN1cHBvcnRlZFJlc29sdXRpb25zPXQsdGhpcy5fcmVxdWVzdGVyPXIsdGhpcy5fcmVhZHlQcm9taXNlPXRoaXMuX2luaXQoKSx0aGlzLl9yZWFkeVByb21pc2UuY2F0Y2goZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcigiU3ltYm9sc1N0b3JhZ2U6IENhbm5vdCBpbml0LCBlcnJvcj0iK2UudG9TdHJpbmcoKSl9KX1yZXR1cm4gZS5wcm90b3R5cGUucmVzb2x2ZVN5bWJvbD1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9yZWFkeVByb21pc2UudGhlbihmdW5jdGlvbigpe3ZhciBlPXIuX3N5bWJvbHNJbmZvW3RdO3JldHVybiB2b2lkIDA9PT1lP1Byb21pc2UucmVqZWN0KCJpbnZhbGlkIHN5bWJvbCIpOlByb21pc2UucmVzb2x2ZShlKX0pfSxlLnByb3RvdHlwZS5zZWFyY2hTeW1ib2xzPWZ1bmN0aW9uKGEsdSxjLG8pe3ZhciBsPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7dmFyIGk9W10sbj0wPT09YS5sZW5ndGg7YT1hLnRvVXBwZXJDYXNlKCk7Zm9yKHZhciBlPWZ1bmN0aW9uKGUpe3ZhciB0PWwuX3N5bWJvbHNJbmZvW2VdO2lmKHZvaWQgMD09PXQpcmV0dXJuImNvbnRpbnVlIjtpZigwPGMubGVuZ3RoJiZ0LnR5cGUhPT1jKXJldHVybiJjb250aW51ZSI7aWYodSYmMDx1Lmxlbmd0aCYmdC5leGNoYW5nZSE9PXUpcmV0dXJuImNvbnRpbnVlIjt2YXIgcj10Lm5hbWUudG9VcHBlckNhc2UoKS5pbmRleE9mKGEpLHM9dC5kZXNjcmlwdGlvbi50b1VwcGVyQ2FzZSgpLmluZGV4T2YoYSk7aWYoKG58fDA8PXJ8fDA8PXMpJiYhaS5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN5bWJvbEluZm89PT10fSkpe3ZhciBvPTA8PXI/cjo4ZTMrcztpLnB1c2goe3N5bWJvbEluZm86dCx3ZWlnaHQ6b30pfX0sdD0wLHI9bC5fc3ltYm9sc0xpc3Q7dDxyLmxlbmd0aDt0Kyspe2Uoclt0XSl9dmFyIHM9aS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUud2VpZ2h0LXQud2VpZ2h0fSkuc2xpY2UoMCxvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zeW1ib2xJbmZvO3JldHVybntzeW1ib2w6dC5uYW1lLGZ1bGxfbmFtZTp0LmZ1bGxfbmFtZSxkZXNjcmlwdGlvbjp0LmRlc2NyaXB0aW9uLGV4Y2hhbmdlOnQuZXhjaGFuZ2UscGFyYW1zOltdLHR5cGU6dC50eXBlLHRpY2tlcjp0Lm5hbWV9fSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKX0pfSxlLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9W10scj17fSxzPTAsbz10aGlzLl9leGNoYW5nZXNMaXN0O3M8by5sZW5ndGg7cysrKXt2YXIgaT1vW3NdO3JbaV18fChyW2ldPSEwLHQucHVzaCh0aGlzLl9yZXF1ZXN0RXhjaGFuZ2VEYXRhKGkpKSl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oZnVuY3Rpb24oKXtlLl9zeW1ib2xzTGlzdC5zb3J0KCksbigiU3ltYm9sc1N0b3JhZ2U6IEFsbCBleGNoYW5nZXMgZGF0YSBsb2FkZWQiKX0pfSxlLnByb3RvdHlwZS5fcmVxdWVzdEV4Y2hhbmdlRGF0YT1mdW5jdGlvbihzKXt2YXIgbz10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe28uX3JlcXVlc3Rlci5zZW5kUmVxdWVzdChvLl9kYXRhZmVlZFVybCwic3ltYm9sX2luZm8iLHtncm91cDpzfSkudGhlbihmdW5jdGlvbihlKXt0cnl7by5fb25FeGNoYW5nZURhdGFSZWNlaXZlZChzLGUpfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9dCgpfSkuY2F0Y2goZnVuY3Rpb24oZSl7bigiU3ltYm9sc1N0b3JhZ2U6IFJlcXVlc3QgZGF0YSBmb3IgZXhjaGFuZ2UgJyIrcysiJyBmYWlsZWQsIHJlYXNvbj0iK2MoZSkpLHQoKX0pfSl9LGUucHJvdG90eXBlLl9vbkV4Y2hhbmdlRGF0YVJlY2VpdmVkPWZ1bmN0aW9uKHQscil7dmFyIGU9dGhpcyxzPTA7dHJ5e2Zvcih2YXIgbz1yLnN5bWJvbC5sZW5ndGgsaT12b2lkIDAhPT1yLnRpY2tlcjtzPG87KytzKXt2YXIgbj1yLnN5bWJvbFtzXSxhPWYociwiZXhjaGFuZ2UtbGlzdGVkIixzKSx1PWYociwiZXhjaGFuZ2UtdHJhZGVkIixzKSxjPXUrIjoiK24sbD1pP2YociwidGlja2VyIixzKTpuLGg9e3RpY2tlcjpsLG5hbWU6bixiYXNlX25hbWU6W2ErIjoiK25dLGZ1bGxfbmFtZTpjLGxpc3RlZF9leGNoYW5nZTphLGV4Y2hhbmdlOnUsZGVzY3JpcHRpb246ZihyLCJkZXNjcmlwdGlvbiIscyksaGFzX2ludHJhZGF5OmQoZihyLCJoYXMtaW50cmFkYXkiLHMpLCExKSxoYXNfbm9fdm9sdW1lOmQoZihyLCJoYXMtbm8tdm9sdW1lIixzKSwhMSksbWlubW92OmYociwibWlubW92ZW1lbnQiLHMpfHxmKHIsIm1pbm1vdiIscyl8fDAsbWlubW92ZTI6ZihyLCJtaW5tb3ZlMiIscyl8fGYociwibWlubW92MiIscyksZnJhY3Rpb25hbDpmKHIsImZyYWN0aW9uYWwiLHMpLHByaWNlc2NhbGU6ZihyLCJwcmljZXNjYWxlIixzKSx0eXBlOmYociwidHlwZSIscyksc2Vzc2lvbjpmKHIsInNlc3Npb24tcmVndWxhciIscyksdGltZXpvbmU6ZihyLCJ0aW1lem9uZSIscyksc3VwcG9ydGVkX3Jlc29sdXRpb25zOmQoZihyLCJzdXBwb3J0ZWQtcmVzb2x1dGlvbnMiLHMpLGUuX2RhdGFmZWVkU3VwcG9ydGVkUmVzb2x1dGlvbnMpLGZvcmNlX3Nlc3Npb25fcmVidWlsZDpmKHIsImZvcmNlLXNlc3Npb24tcmVidWlsZCIscyksaGFzX2RhaWx5OmQoZihyLCJoYXMtZGFpbHkiLHMpLCEwKSxpbnRyYWRheV9tdWx0aXBsaWVyczpkKGYociwiaW50cmFkYXktbXVsdGlwbGllcnMiLHMpLFsiMSIsIjUiLCIxNSIsIjMwIiwiNjAiXSksaGFzX3dlZWtseV9hbmRfbW9udGhseTpmKHIsImhhcy13ZWVrbHktYW5kLW1vbnRobHkiLHMpLGhhc19lbXB0eV9iYXJzOmYociwiaGFzLWVtcHR5LWJhcnMiLHMpLHZvbHVtZV9wcmVjaXNpb246ZChmKHIsInZvbHVtZS1wcmVjaXNpb24iLHMpLDApfTtlLl9zeW1ib2xzSW5mb1tsXT1oLGUuX3N5bWJvbHNJbmZvW25dPWgsZS5fc3ltYm9sc0luZm9bY109aCxlLl9zeW1ib2xzTGlzdC5wdXNoKG4pfX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bWJvbHNTdG9yYWdlOiBBUEkgZXJyb3Igd2hlbiBwcm9jZXNzaW5nIGV4Y2hhbmdlICIrdCsiIHN5bWJvbCAjIitzKyIgKCIrci5zeW1ib2xbc10rIik6ICIrZS5tZXNzYWdlKX19LGV9KCk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiB2b2lkIDAhPT1lP2U6dH1mdW5jdGlvbiBsKGUsdCxyKXt2YXIgcz1lW3RdO3JldHVybiBBcnJheS5pc0FycmF5KHMpP3Nbcl06c312YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIscyl7dm9pZCAwPT09cyYmKHM9MWU0KTt2YXIgbz10aGlzO3RoaXMuX2NvbmZpZ3VyYXRpb249e3N1cHBvcnRzX3NlYXJjaDohMSxzdXBwb3J0c19ncm91cF9yZXF1ZXN0OiEwLHN1cHBvcnRlZF9yZXNvbHV0aW9uczpbIjEiLCI1IiwiMTUiLCIzMCIsIjYwIiwiMUQiLCIxVyIsIjFNIl0sc3VwcG9ydHNfbWFya3M6ITEsc3VwcG9ydHNfdGltZXNjYWxlX21hcmtzOiExfSx0aGlzLl9zeW1ib2xzU3RvcmFnZT1udWxsLHRoaXMuX2RhdGFmZWVkVVJMPWUsdGhpcy5fcmVxdWVzdGVyPXIsdGhpcy5faGlzdG9yeVByb3ZpZGVyPW5ldyBpKGUsdGhpcy5fcmVxdWVzdGVyKSx0aGlzLl9xdW90ZXNQcm92aWRlcj10LHRoaXMuX2RhdGFQdWxzZVByb3ZpZGVyPW5ldyBhKHRoaXMuX2hpc3RvcnlQcm92aWRlcixzKSx0aGlzLl9xdW90ZXNQdWxzZVByb3ZpZGVyPW5ldyB1KHRoaXMuX3F1b3Rlc1Byb3ZpZGVyKSx0aGlzLl9jb25maWd1cmF0aW9uUmVhZHlQcm9taXNlPXRoaXMuX3JlcXVlc3RDb25maWd1cmF0aW9uKCkudGhlbihmdW5jdGlvbihlKXtudWxsPT09ZSYmKGU9e3N1cHBvcnRzX3NlYXJjaDohMSxzdXBwb3J0c19ncm91cF9yZXF1ZXN0OiEwLHN1cHBvcnRlZF9yZXNvbHV0aW9uczpbIjEiLCI1IiwiMTUiLCIzMCIsIjYwIiwiMUQiLCIxVyIsIjFNIl0sc3VwcG9ydHNfbWFya3M6ITEsc3VwcG9ydHNfdGltZXNjYWxlX21hcmtzOiExfSksby5fc2V0dXBXaXRoQ29uZmlndXJhdGlvbihlKX0pfXJldHVybiBlLnByb3RvdHlwZS5vblJlYWR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5fY29uZmlndXJhdGlvblJlYWR5UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7ZSh0Ll9jb25maWd1cmF0aW9uKX0pfSxlLnByb3RvdHlwZS5nZXRRdW90ZXM9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX3F1b3Rlc1Byb3ZpZGVyLmdldFF1b3RlcyhlKS50aGVuKHQpLmNhdGNoKHIpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmVRdW90ZXM9ZnVuY3Rpb24oZSx0LHIscyl7dGhpcy5fcXVvdGVzUHVsc2VQcm92aWRlci5zdWJzY3JpYmVRdW90ZXMoZSx0LHIscyl9LGUucHJvdG90eXBlLnVuc3Vic2NyaWJlUXVvdGVzPWZ1bmN0aW9uKGUpe3RoaXMuX3F1b3Rlc1B1bHNlUHJvdmlkZXIudW5zdWJzY3JpYmVRdW90ZXMoZSl9LGUucHJvdG90eXBlLmNhbGN1bGF0ZUhpc3RvcnlEZXB0aD1mdW5jdGlvbihlLHQscil7fSxlLnByb3RvdHlwZS5nZXRNYXJrcz1mdW5jdGlvbihlLHQscixzLG8pe2lmKHRoaXMuX2NvbmZpZ3VyYXRpb24uc3VwcG9ydHNfbWFya3Mpe3ZhciBpPXtzeW1ib2w6ZS50aWNrZXJ8fCIiLGZyb206dCx0bzpyLHJlc29sdXRpb246b307dGhpcy5fc2VuZCgibWFya3MiLGkpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmlkLmxlbmd0aDsrK3IpdC5wdXNoKHtpZDpsKGUsImlkIixyKSx0aW1lOmwoZSwidGltZSIsciksY29sb3I6bChlLCJjb2xvciIsciksdGV4dDpsKGUsInRleHQiLHIpLGxhYmVsOmwoZSwibGFiZWwiLHIpLGxhYmVsRm9udENvbG9yOmwoZSwibGFiZWxGb250Q29sb3IiLHIpLG1pblNpemU6bChlLCJtaW5TaXplIixyKX0pO2U9dH1zKGUpfSkuY2F0Y2goZnVuY3Rpb24oZSl7bigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBSZXF1ZXN0IG1hcmtzIGZhaWxlZDogIitjKGUpKSxzKFtdKX0pfX0sZS5wcm90b3R5cGUuZ2V0VGltZXNjYWxlTWFya3M9ZnVuY3Rpb24oZSx0LHIscyxvKXtpZih0aGlzLl9jb25maWd1cmF0aW9uLnN1cHBvcnRzX3RpbWVzY2FsZV9tYXJrcyl7dmFyIGk9e3N5bWJvbDplLnRpY2tlcnx8IiIsZnJvbTp0LHRvOnIscmVzb2x1dGlvbjpvfTt0aGlzLl9zZW5kKCJ0aW1lc2NhbGVfbWFya3MiLGkpLnRoZW4oZnVuY3Rpb24oZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmlkLmxlbmd0aDsrK3IpdC5wdXNoKHtpZDpsKGUsImlkIixyKSx0aW1lOmwoZSwidGltZSIsciksY29sb3I6bChlLCJjb2xvciIsciksbGFiZWw6bChlLCJsYWJlbCIsciksdG9vbHRpcDpsKGUsInRvb2x0aXAiLHIpfSk7ZT10fXMoZSl9KS5jYXRjaChmdW5jdGlvbihlKXtuKCJVZGZDb21wYXRpYmxlRGF0YWZlZWQ6IFJlcXVlc3QgdGltZXNjYWxlIG1hcmtzIGZhaWxlZDogIitjKGUpKSxzKFtdKX0pfX0sZS5wcm90b3R5cGUuZ2V0U2VydmVyVGltZT1mdW5jdGlvbihyKXt0aGlzLl9jb25maWd1cmF0aW9uLnN1cHBvcnRzX3RpbWUmJnRoaXMuX3NlbmQoInRpbWUiKS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PXBhcnNlSW50KGUpO2lzTmFOKHQpfHxyKHQpfSkuY2F0Y2goZnVuY3Rpb24oZSl7bigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBGYWlsIHRvIGxvYWQgc2VydmVyIHRpbWUsIGVycm9yPSIrYyhlKSl9KX0sZS5wcm90b3R5cGUuc2VhcmNoU3ltYm9scz1mdW5jdGlvbih0LGUscixzKXtpZih0aGlzLl9jb25maWd1cmF0aW9uLnN1cHBvcnRzX3NlYXJjaCl7dmFyIG89e2xpbWl0OjMwLHF1ZXJ5OnQudG9VcHBlckNhc2UoKSx0eXBlOnIsZXhjaGFuZ2U6ZX07dGhpcy5fc2VuZCgic2VhcmNoIixvKS50aGVuKGZ1bmN0aW9uKGUpe2lmKHZvaWQgMCE9PWUucylyZXR1cm4gbigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBzZWFyY2ggc3ltYm9scyBlcnJvcj0iK2UuZXJybXNnKSx2b2lkIHMoW10pO3MoZSl9KS5jYXRjaChmdW5jdGlvbihlKXtuKCJVZGZDb21wYXRpYmxlRGF0YWZlZWQ6IFNlYXJjaCBzeW1ib2xzIGZvciAnIit0KyInIGZhaWxlZC4gRXJyb3I9IitjKGUpKSxzKFtdKX0pfWVsc2V7aWYobnVsbD09PXRoaXMuX3N5bWJvbHNTdG9yYWdlKXRocm93IG5ldyBFcnJvcigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBpbmNvbnNpc3RlbnQgY29uZmlndXJhdGlvbiAoc3ltYm9scyBzdG9yYWdlKSIpO3RoaXMuX3N5bWJvbHNTdG9yYWdlLnNlYXJjaFN5bWJvbHModCxlLHIsMzApLnRoZW4ocykuY2F0Y2gocy5iaW5kKG51bGwsW10pKX19LGUucHJvdG90eXBlLnJlc29sdmVTeW1ib2w9ZnVuY3Rpb24oZSx0LHIpe24oIlJlc29sdmUgcmVxdWVzdGVkIik7dmFyIHM9RGF0ZS5ub3coKTtmdW5jdGlvbiBvKGUpe24oIlN5bWJvbCByZXNvbHZlZDogIisoRGF0ZS5ub3coKS1zKSsibXMiKSx0KGUpfWlmKHRoaXMuX2NvbmZpZ3VyYXRpb24uc3VwcG9ydHNfZ3JvdXBfcmVxdWVzdCl7aWYobnVsbD09PXRoaXMuX3N5bWJvbHNTdG9yYWdlKXRocm93IG5ldyBFcnJvcigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBpbmNvbnNpc3RlbnQgY29uZmlndXJhdGlvbiAoc3ltYm9scyBzdG9yYWdlKSIpO3RoaXMuX3N5bWJvbHNTdG9yYWdlLnJlc29sdmVTeW1ib2woZSkudGhlbihvKS5jYXRjaChyKX1lbHNle3ZhciBpPXtzeW1ib2w6ZX07dGhpcy5fc2VuZCgic3ltYm9scyIsaSkudGhlbihmdW5jdGlvbihlKXt2b2lkIDAhPT1lLnM/cigidW5rbm93bl9zeW1ib2wiKTpvKGUpfSkuY2F0Y2goZnVuY3Rpb24oZSl7bigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBFcnJvciByZXNvbHZpbmcgc3ltYm9sOiAiK2MoZSkpLHIoInVua25vd25fc3ltYm9sIil9KX19LGUucHJvdG90eXBlLmdldEJhcnM9ZnVuY3Rpb24oZSx0LHIscyxvLGkpe3RoaXMuX2hpc3RvcnlQcm92aWRlci5nZXRCYXJzKGUsdCxyLHMpLnRoZW4oZnVuY3Rpb24oZSl7byhlLmJhcnMsZS5tZXRhKX0pLmNhdGNoKGkpfSxlLnByb3RvdHlwZS5zdWJzY3JpYmVCYXJzPWZ1bmN0aW9uKGUsdCxyLHMsbyl7dGhpcy5fZGF0YVB1bHNlUHJvdmlkZXIuc3Vic2NyaWJlQmFycyhlLHQscixzKX0sZS5wcm90b3R5cGUudW5zdWJzY3JpYmVCYXJzPWZ1bmN0aW9uKGUpe3RoaXMuX2RhdGFQdWxzZVByb3ZpZGVyLnVuc3Vic2NyaWJlQmFycyhlKX0sZS5wcm90b3R5cGUuX3JlcXVlc3RDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlbmQoImNvbmZpZyIpLmNhdGNoKGZ1bmN0aW9uKGUpe3JldHVybiBuKCJVZGZDb21wYXRpYmxlRGF0YWZlZWQ6IENhbm5vdCBnZXQgZGF0YWZlZWQgY29uZmlndXJhdGlvbiAtIHVzZSBkZWZhdWx0LCBlcnJvcj0iK2MoZSkpLG51bGx9KX0sZS5wcm90b3R5cGUuX3NlbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVxdWVzdGVyLnNlbmRSZXF1ZXN0KHRoaXMuX2RhdGFmZWVkVVJMLGUsdCl9LGUucHJvdG90eXBlLl9zZXR1cFdpdGhDb25maWd1cmF0aW9uPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PSh0aGlzLl9jb25maWd1cmF0aW9uPWUpLmV4Y2hhbmdlcyYmKGUuZXhjaGFuZ2VzPVtdKSwhZS5zdXBwb3J0c19zZWFyY2gmJiFlLnN1cHBvcnRzX2dyb3VwX3JlcXVlc3QpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBkYXRhZmVlZCBjb25maWd1cmF0aW9uLiBNdXN0IGVpdGhlciBzdXBwb3J0IHNlYXJjaCwgb3Igc3VwcG9ydCBncm91cCByZXF1ZXN0Iik7IWUuc3VwcG9ydHNfZ3JvdXBfcmVxdWVzdCYmZS5zdXBwb3J0c19zZWFyY2h8fCh0aGlzLl9zeW1ib2xzU3RvcmFnZT1uZXcgdCh0aGlzLl9kYXRhZmVlZFVSTCxlLnN1cHBvcnRlZF9yZXNvbHV0aW9uc3x8W10sdGhpcy5fcmVxdWVzdGVyKSksbigiVWRmQ29tcGF0aWJsZURhdGFmZWVkOiBJbml0aWFsaXplZCB3aXRoICIrSlNPTi5zdHJpbmdpZnkoZSkpfSxlfSgpO3ZhciBoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2RhdGFmZWVkVXJsPWUsdGhpcy5fcmVxdWVzdGVyPXR9cmV0dXJuIGUucHJvdG90eXBlLmdldFF1b3Rlcz1mdW5jdGlvbihlKXt2YXIgcz10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe3MuX3JlcXVlc3Rlci5zZW5kUmVxdWVzdChzLl9kYXRhZmVlZFVybCwicXVvdGVzIix7c3ltYm9sczplfSkudGhlbihmdW5jdGlvbihlKXsib2siPT09ZS5zP3QoZS5kKTpyKGUuZXJybXNnKX0pLmNhdGNoKGZ1bmN0aW9uKGUpe3ZhciB0PWMoZSk7bigiUXVvdGVzUHJvdmlkZXI6IGdldFF1b3RlcyBmYWlsZWQsIGVycm9yPSIrdCkscigibmV0d29yayBlcnJvcjogIit0KX0pfSl9LGV9KCkscD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZSYmKHRoaXMuX2hlYWRlcnM9ZSl9cmV0dXJuIGUucHJvdG90eXBlLnNlbmRSZXF1ZXN0PWZ1bmN0aW9uKGUsdCxyKXtpZih2b2lkIDAhPT1yKXt2YXIgcz1PYmplY3Qua2V5cyhyKTswIT09cy5sZW5ndGgmJih0Kz0iPyIpLHQrPXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChyW2VdLnRvU3RyaW5nKCkpfSkuam9pbigiJiIpfW4oIk5ldyByZXF1ZXN0OiAiK3QpO3ZhciBvPXtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifTtyZXR1cm4gdm9pZCAwIT09dGhpcy5faGVhZGVycyYmKG8uaGVhZGVycz10aGlzLl9oZWFkZXJzKSxmZXRjaChlKyIvIit0LG8pLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dCgpfSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5wYXJzZShlKX0pfSxlfSgpLF89ZnVuY3Rpb24obyl7ZnVuY3Rpb24gZShlLHQpe3ZvaWQgMD09PXQmJih0PTFlNCk7dmFyIHI9bmV3IHAscz1uZXcgaChlLHIpO3JldHVybiBvLmNhbGwodGhpcyxlLHMscix0KXx8dGhpc31yZXR1cm4gZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXMoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9KGUsbyksZX0obyk7ZS5VREZDb21wYXRpYmxlRGF0YWZlZWQ9XyxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KTsK"}},"time_used":493,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":493,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/static/tradeview/charting_library/charting_library.min.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.545Z","timestamp":1785149590545,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/static/tradeview/charting_library/charting_library.min.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:54 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9866-2d8f\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":11663,"size_decoded":3541,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (2132)","md5":"c8cd63cddf0ab72e873d68a2d68ca336","sha1":"2d0b483c39ea41187d9fcb8200bb2819525dbd3b","sha256":"6571ad1a4bb68aacbd4c3a78fc0c26f9c1f1bb34a92164ea3fac2b4532acf88e","sha512":"f3956ab3268f27911de0789fa0858de98e26bcd2736544a6694a225aa61ab5b8ceff26774af62bad71294531d75e4faa198f44ee85a5731ffb26480940f4144d","ssdeep":"192:S4DF7XcEbRi1H0FEKyhWbviztF89xo/g81Qit+0idiiV8M5MSBj5JCWotPSXmYRB:fhoEbizXAoINoWoxSXmBEU3OHQI","tlshash":"18320054df6c2c3205c720fc8d7f288f513de276e895449e388491dc59ed44bbaaba39","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.200411Z","times_seen":261,"resource_available":true,"data":"ISBmdW5jdGlvbih0LCBlKSB7Cgkib2JqZWN0IiA9PSB0eXBlb2YgZXhwb3J0cyAmJiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgbW9kdWxlID8gZShleHBvcnRzKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsiZXhwb3J0cyJdLCBlKSA6IGUodC5UcmFkaW5nVmlldyA9IHQuVHJhZGluZ1ZpZXcgfHwge30pCn0odGhpcywgZnVuY3Rpb24odCkgewoJInVzZSBzdHJpY3QiOwoKCWZ1bmN0aW9uIGUodCwgbykgewoJCXZhciBpID0gbih7fSwgdCk7CgkJZm9yKHZhciBzIGluIG8pICJvYmplY3QiICE9IHR5cGVvZiB0W3NdIHx8IG51bGwgPT09IHRbc10gfHwgQXJyYXkuaXNBcnJheSh0W3NdKSA/IHZvaWQgMCAhPT0gb1tzXSAmJiAoaVtzXSA9IG9bc10pIDogaVtzXSA9IGUodFtzXSwgb1tzXSk7CgkJcmV0dXJuIGkKCX0KCglmdW5jdGlvbiBvKCkgewoJCXJldHVybiAiMS4xMiAoaW50ZXJuYWwgaWQgNjMwYjcwNGEgQCAyMDE4LTA2LTA2IDAyOjE2OjExLjMwNTUwOSkiCgl9CgoJZnVuY3Rpb24gaSh0KSB7CgkJd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCB0LCAhMSkKCX0KCXZhciBuID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7CgkJCWZvcih2YXIgZSwgbyA9IGFyZ3VtZW50cywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7CgkJCQllID0gb1tpXTsKCQkJCWZvcih2YXIgcyBpbiBlKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwgcykgJiYgKHRbc10gPSBlW3NdKQoJCQl9CgkJCXJldHVybiB0CgkJfSwKCQlzID0gewoJCQltb2JpbGU6IHsKCQkJCWRpc2FibGVkX2ZlYXR1cmVzOiBbImxlZnRfdG9vbGJhciIsICJoZWFkZXJfd2lkZ2V0IiwgInRpbWVmcmFtZXNfdG9vbGJhciIsICJlZGl0X2J1dHRvbnNfaW5fbGVnZW5kIiwgImNvbnRleHRfbWVudXMiLCAiY29udHJvbF9iYXIiLCAiYm9yZGVyX2Fyb3VuZF90aGVfY2hhcnQiXSwKCQkJCWVuYWJsZWRfZmVhdHVyZXM6IFtdCgkJCX0KCQl9LAoJCXIgPSB7CgkJCXdpZHRoOiA4MDAsCgkJCWhlaWdodDogNTAwLAoJCQlzeW1ib2w6ICJBQSIsCgkJCWludGVydmFsOiAiRCIsCgkJCXRpbWV6b25lOiAiVVRDIiwKCQkJY29udGFpbmVyX2lkOiAiIiwKCQkJbGlicmFyeV9wYXRoOiAiIiwKCQkJbG9jYWxlOiAiZW4iLAoJCQl3aWRnZXRiYXI6IHsKCQkJCWRldGFpbHM6ICExLAoJCQkJd2F0Y2hsaXN0OiAhMSwKCQkJCXdhdGNobGlzdF9zZXR0aW5nczogewoJCQkJCWRlZmF1bHRfc3ltYm9sczogW10KCQkJCX0KCQkJfSwKCQkJb3ZlcnJpZGVzOiB7CgkJCQkibWFpblNlcmllc1Byb3BlcnRpZXMuc2hvd0NvdW50ZG93biI6ICExCgkJCX0sCgkJCXN0dWRpZXNfb3ZlcnJpZGVzOiB7fSwKCQkJYnJva2VyQ29uZmlnOiB7CgkJCQljb25maWdGbGFnczoge30KCQkJfSwKCQkJZnVsbHNjcmVlbjogITEsCgkJCWF1dG9zaXplOiAhMSwKCQkJZGlzYWJsZWRfZmVhdHVyZXM6IFtdLAoJCQllbmFibGVkX2ZlYXR1cmVzOiBbXSwKCQkJZGVidWc6ICExLAoJCQlsb2dvOiB7fSwKCQkJdGltZV9mcmFtZXM6IFt7CgkJCQl0ZXh0OiAiNXkiLAoJCQkJcmVzb2x1dGlvbjogIlciCgkJCX0sIHsKCQkJCXRleHQ6ICIxeSIsCgkJCQlyZXNvbHV0aW9uOiAiVyIKCQkJfSwgewoJCQkJdGV4dDogIjZtIiwKCQkJCXJlc29sdXRpb246ICIxMjAiCgkJCX0sIHsKCQkJCXRleHQ6ICIzbSIsCgkJCQlyZXNvbHV0aW9uOiAiNjAiCgkJCX0sIHsKCQkJCXRleHQ6ICIxbSIsCgkJCQlyZXNvbHV0aW9uOiAiMzAiCgkJCX0sIHsKCQkJCXRleHQ6ICI1ZCIsCgkJCQlyZXNvbHV0aW9uOiAiNSIKCQkJfSwgewoJCQkJdGV4dDogIjFkIiwKCQkJCXJlc29sdXRpb246ICIxIgoJCQl9XSwKCQkJY2xpZW50X2lkOiAiMCIsCgkJCXVzZXJfaWQ6ICIwIiwKCQkJY2hhcnRzX3N0b3JhZ2VfYXBpX3ZlcnNpb246ICIxLjAiLAoJCQlmYXZvcml0ZXM6IHsKCQkJCWludGVydmFsczogW10sCgkJCQljaGFydFR5cGVzOiBbXQoJCQl9CgkJfSwKCQlhID0gZnVuY3Rpb24oKSB7CgkJCWZ1bmN0aW9uIHQodCkgewoJCQkJaWYodGhpcy5faWQgPSAidHJhZGluZ3ZpZXdfIiArICgxMDQ4NTc2ICogKDEgKyBNYXRoLnJhbmRvbSgpKSB8IDApLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSksIHRoaXMuX3JlYWR5ID0gITEsIHRoaXMuX3JlYWR5SGFuZGxlcnMgPSBbXSwgdGhpcy5fb25XaW5kb3dSZXNpemUgPSB0aGlzLl9hdXRvUmVzaXplQ2hhcnQuYmluZCh0aGlzKSwgIXQuZGF0YWZlZWQpIHRocm93IG5ldyBFcnJvcigiRGF0YWZlZWQgaXMgbm90IGRlZmluZWQiKTsKCQkJCWlmKHRoaXMuX29wdGlvbnMgPSBlKHIsIHQpLCB0LnByZXNldCkgewoJCQkJCXZhciBvID0gc1t0LnByZXNldF07CgkJCQkJbyA/ICh2b2lkIDAgIT09IHRoaXMuX29wdGlvbnMuZGlzYWJsZWRfZmVhdHVyZXMgPyB0aGlzLl9vcHRpb25zLmRpc2FibGVkX2ZlYXR1cmVzID0gdGhpcy5fb3B0aW9ucy5kaXNhYmxlZF9mZWF0dXJlcy5jb25jYXQoby5kaXNhYmxlZF9mZWF0dXJlcykgOiB0aGlzLl9vcHRpb25zLmRpc2FibGVkX2ZlYXR1cmVzID0gby5kaXNhYmxlZF9mZWF0dXJlcywgdm9pZCAwICE9PSB0aGlzLl9vcHRpb25zLmVuYWJsZWRfZmVhdHVyZXMgPyB0aGlzLl9vcHRpb25zLmVuYWJsZWRfZmVhdHVyZXMgPSB0aGlzLl9vcHRpb25zLmVuYWJsZWRfZmVhdHVyZXMuY29uY2F0KG8uZW5hYmxlZF9mZWF0dXJlcykgOiB0aGlzLl9vcHRpb25zLmVuYWJsZWRfZmVhdHVyZXMgPSBvLmVuYWJsZWRfZmVhdHVyZXMpIDogY29uc29sZS53YXJuKCJVbmtub3duIHByZXNldDogYCIgKyB0LnByZXNldCArICJgIikKCQkJCX0KCQkJCXRoaXMuX2NyZWF0ZSgpCgkJCX0KCQkJcmV0dXJuIHQucHJvdG90eXBlLm9uQ2hhcnRSZWFkeSA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX3JlYWR5ID8gdC5jYWxsKHRoaXMpIDogdGhpcy5fcmVhZHlIYW5kbGVycy5wdXNoKHQpCgkJCX0sIHQucHJvdG90eXBlLm9uR3JheWVkT2JqZWN0Q2xpY2tlZCA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkub25HcmF5ZWRPYmplY3RDbGlja2VkKHQpCgkJCX0sIHQucHJvdG90eXBlLm9uU2hvcnRjdXQgPSBmdW5jdGlvbih0LCBlKSB7CgkJCQl0aGlzLl9pbm5lcldpbmRvdygpLmNyZWF0ZVNob3J0Y3V0QWN0aW9uKHQsIGUpCgkJCX0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHQsIGUpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuc3Vic2NyaWJlKHQsIGUpCgkJCX0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24odCwgZSkgewoJCQkJdGhpcy5faW5uZXJBUEkoKS51bnN1YnNjcmliZSh0LCBlKQoJCQl9LCB0LnByb3RvdHlwZS5jaGFydCA9IGZ1bmN0aW9uKHQpIHsKCQkJCXJldHVybiB0aGlzLl9pbm5lckFQSSgpLmNoYXJ0KHQpCgkJCX0sIHQucHJvdG90eXBlLnNldExhbmd1YWdlID0gZnVuY3Rpb24odCkgewoJCQkJdGhpcy5yZW1vdmUoKSwgdGhpcy5fb3B0aW9ucy5sb2NhbGUgPSB0LCB0aGlzLl9jcmVhdGUoKQoJCQl9LCB0LnByb3RvdHlwZS5zZXRTeW1ib2wgPSBmdW5jdGlvbih0LCBlLCBvKSB7CgkJCQl0aGlzLl9pbm5lckFQSSgpLmNoYW5nZVN5bWJvbCh0LCBlICsgIiIsIG8pCgkJCX0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKCkgewoJCQkJd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuX29uV2luZG93UmVzaXplKSwgdGhpcy5fcmVhZHlIYW5kbGVycy5zcGxpY2UoMCwgdGhpcy5fcmVhZHlIYW5kbGVycy5sZW5ndGgpLCBkZWxldGUgd2luZG93W3RoaXMuX2lkXTsKCQkJCXZhciB0ID0gdGhpcy5fZ2V0SUZyYW1lRWxlbWVudCgpOwoJCQkJdC5jb250ZW50V2luZG93LmRlc3Ryb3lDaGFydCgpLCB0LnBhcmVudE5vZGUgJiYgdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpCgkJCX0sIHQucHJvdG90eXBlLmNsb3NlUG9wdXBzQW5kRGlhbG9ncyA9IGZ1bmN0aW9uKCkgewoJCQkJdGhpcy5faW5uZXJBUEkoKS5jbG9zZVBvcHVwc0FuZERpYWxvZ3MoKQoJCQl9LCB0LnByb3RvdHlwZS5zZWxlY3RMaW5lVG9vbCA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuc2VsZWN0TGluZVRvb2wodCkKCQkJfSwgdC5wcm90b3R5cGUuc2VsZWN0ZWRMaW5lVG9vbCA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2lubmVyQVBJKCkuc2VsZWN0ZWRMaW5lVG9vbCgpCgkJCX0sIHQucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbih0KSB7CgkJCQl0aGlzLl9pbm5lckFQSSgpLnNhdmVDaGFydCh0KQoJCQl9LCB0LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24odCwgZSkgewoJCQkJdGhpcy5faW5uZXJBUEkoKS5sb2FkQ2hhcnQoewoJCQkJCWpzb246IHQsCgkJCQkJZXh0ZW5kZWREYXRhOiBlCgkJCQl9KQoJCQl9LCB0LnByb3RvdHlwZS5nZXRTYXZlZENoYXJ0cyA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuZ2V0U2F2ZWRDaGFydHModCkKCQkJfSwgdC5wcm90b3R5cGUubG9hZENoYXJ0RnJvbVNlcnZlciA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkubG9hZENoYXJ0RnJvbVNlcnZlcih0KQoJCQl9LCB0LnByb3RvdHlwZS5zYXZlQ2hhcnRUb1NlcnZlciA9IGZ1bmN0aW9uKHQsIGUsIG8sIGkpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuc2F2ZUNoYXJ0VG9TZXJ2ZXIodCwgZSwgbywgaSkKCQkJfSwgdC5wcm90b3R5cGUucmVtb3ZlQ2hhcnRGcm9tU2VydmVyID0gZnVuY3Rpb24odCwgZSkgewoJCQkJdGhpcy5faW5uZXJBUEkoKS5yZW1vdmVDaGFydEZyb21TZXJ2ZXIodCwgZSkKCQkJfSwgdC5wcm90b3R5cGUub25Db250ZXh0TWVudSA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkub25Db250ZXh0TWVudSh0KQoJCQl9LCB0LnByb3RvdHlwZS5jcmVhdGVCdXR0b24gPSBmdW5jdGlvbih0KSB7CgkJCQlyZXR1cm4gdGhpcy5faW5uZXJXaW5kb3coKS5jcmVhdGVCdXR0b24odCkKCQkJfSwgdC5wcm90b3R5cGUuc2hvd05vdGljZURpYWxvZyA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuc2hvd05vdGljZURpYWxvZyh0KQoJCQl9LCB0LnByb3RvdHlwZS5zaG93Q29uZmlybURpYWxvZyA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuc2hvd0NvbmZpcm1EaWFsb2codCkKCQkJfSwgdC5wcm90b3R5cGUuc2hvd0xvYWRDaGFydERpYWxvZyA9IGZ1bmN0aW9uKCkgewoJCQkJdGhpcy5faW5uZXJBUEkoKS5zaG93TG9hZENoYXJ0RGlhbG9nKCkKCQkJfSwgdC5wcm90b3R5cGUuc2hvd1NhdmVBc0NoYXJ0RGlhbG9nID0gZnVuY3Rpb24oKSB7CgkJCQl0aGlzLl9pbm5lckFQSSgpLnNob3dTYXZlQXNDaGFydERpYWxvZygpCgkJCX0sIHQucHJvdG90eXBlLnN5bWJvbEludGVydmFsID0gZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gdGhpcy5faW5uZXJBUEkoKS5nZXRTeW1ib2xJbnRlcnZhbCgpCgkJCX0sIHQucHJvdG90eXBlLm1haW5TZXJpZXNQcmljZUZvcm1hdHRlciA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2lubmVyQVBJKCkubWFpblNlcmllc1ByaWNlRm9ybWF0dGVyKCkKCQkJfSwgdC5wcm90b3R5cGUuZ2V0SW50ZXJ2YWxzID0gZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gdGhpcy5faW5uZXJBUEkoKS5nZXRJbnRlcnZhbHMoKQoJCQl9LCB0LnByb3RvdHlwZS5nZXRTdHVkaWVzTGlzdCA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2lubmVyQVBJKCkuZ2V0U3R1ZGllc0xpc3QoKQoJCQl9LCB0LnByb3RvdHlwZS5hZGRDdXN0b21DU1NGaWxlID0gZnVuY3Rpb24odCkgewoJCQkJdGhpcy5faW5uZXJXaW5kb3coKS5hZGRDdXN0b21DU1NGaWxlKHQpCgkJCX0sIHQucHJvdG90eXBlLmFwcGx5T3ZlcnJpZGVzID0gZnVuY3Rpb24odCkgewoJCQkJdGhpcy5fb3B0aW9ucyA9IGUodGhpcy5fb3B0aW9ucywgewoJCQkJCW92ZXJyaWRlczogdAoJCQkJfSksIHRoaXMuX2lubmVyV2luZG93KCkuYXBwbHlPdmVycmlkZXModCkKCQkJfSwgdC5wcm90b3R5cGUuYXBwbHlTdHVkaWVzT3ZlcnJpZGVzID0gZnVuY3Rpb24odCkgewoJCQkJdGhpcy5faW5uZXJXaW5kb3coKS5hcHBseVN0dWRpZXNPdmVycmlkZXModCkKCQkJfSwgdC5wcm90b3R5cGUud2F0Y2hMaXN0ID0gZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gdGhpcy5faW5uZXJBUEkoKS53YXRjaGxpc3QoKQoJCQl9LCB0LnByb3RvdHlwZS5hY3RpdmVDaGFydCA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2lubmVyQVBJKCkuYWN0aXZlQ2hhcnQoKQoJCQl9LCB0LnByb3RvdHlwZS5jaGFydHNDb3VudCA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2lubmVyQVBJKCkuY2hhcnRzQ291bnQoKQoJCQl9LCB0LnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbigpIHsKCQkJCXJldHVybiB0aGlzLl9pbm5lckFQSSgpLmxheW91dCgpCgkJCX0sIHQucHJvdG90eXBlLnNldExheW91dCA9IGZ1bmN0aW9uKHQpIHsKCQkJCXRoaXMuX2lubmVyQVBJKCkuc2V0TGF5b3V0KHQpCgkJCX0sIHQucHJvdG90eXBlLl9nZXRJRnJhbWVFbGVtZW50ID0gZnVuY3Rpb24oKSB7CgkJCQl2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2lkKTsKCQkJCWlmKG51bGwgPT09IHQpIHRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc3VjaCBpZnJhbWUiKTsKCQkJCXJldHVybiB0CgkJCX0sIHQucHJvdG90eXBlLl9pbm5lckFQSSA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2dldElGcmFtZUVsZW1lbnQoKS5jb250ZW50V2luZG93LnRyYWRpbmdWaWV3QXBpCgkJCX0sIHQucHJvdG90eXBlLl9pbm5lcldpbmRvdyA9IGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuIHRoaXMuX2dldElGcmFtZUVsZW1lbnQoKS5jb250ZW50V2luZG93CgkJCX0sIHQucHJvdG90eXBlLl9hdXRvUmVzaXplQ2hhcnQgPSBmdW5jdGlvbigpIHsKCQkJCXRoaXMuX29wdGlvbnMuZnVsbHNjcmVlbiAmJiAodGhpcy5fZ2V0SUZyYW1lRWxlbWVudCgpLnN0eWxlLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCArICJweCIpCgkJCX0sIHQucHJvdG90eXBlLl9jcmVhdGUgPSBmdW5jdGlvbigpIHsKCQkJCXZhciB0ID0gdGhpcywKCQkJCQllID0gdGhpcy5fcmVuZGVyKCksCgkJCQkJbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX29wdGlvbnMuY29udGFpbmVyX2lkKTsKCQkJCWlmKG51bGwgPT09IG8pIHRocm93IG5ldyBFcnJvcigiVGhlcmUgaXMgbm8gc3VjaCBlbGVtZW50IC0gIyIgKyB0aGlzLl9vcHRpb25zLmNvbnRhaW5lcl9pZCk7CgkJCQlvLmlubmVySFRNTCA9IGU7CgkJCQl2YXIgaSA9IHRoaXMuX2dldElGcmFtZUVsZW1lbnQoKTsKCQkJCSh0aGlzLl9vcHRpb25zLmF1dG9zaXplIHx8IHRoaXMuX29wdGlvbnMuZnVsbHNjcmVlbikgJiYgKGkuc3R5bGUud2lkdGggPSAiMTAwJSIsIHRoaXMuX29wdGlvbnMuZnVsbHNjcmVlbiB8fCAoaS5zdHlsZS5oZWlnaHQgPSAiMTAwJSIpKSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuX29uV2luZG93UmVzaXplKSwgdGhpcy5fb25XaW5kb3dSZXNpemUoKTsKCQkJCXZhciBuID0gZnVuY3Rpb24oKSB7CgkJCQkJaS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIiwgbiwgITEpLCBpLmNvbnRlbnRXaW5kb3cud2lkZ2V0UmVhZHkoZnVuY3Rpb24oKSB7CgkJCQkJCXQuX3JlYWR5ID0gITA7CgkJCQkJCWZvcih2YXIgZSA9IDAsIG8gPSB0Ll9yZWFkeUhhbmRsZXJzOyBlIDwgby5sZW5ndGg7IGUrKykgewoJCQkJCQkJb1tlXS5jYWxsKHQpCgkJCQkJCX0KCQkJCQkJaS5jb250ZW50V2luZG93LmluaXRpYWxpemF0aW9uRmluaXNoZWQoKQoJCQkJCX0pCgkJCQl9OwoJCQkJaS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgbiwgITEpCgkJCX0sIHQucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbigpIHsKCQkJCXZhciB0ID0gd2luZG93OwoJCQkJdFt0aGlzLl9pZF0gPSB7CgkJCQkJZGF0YWZlZWQ6IHRoaXMuX29wdGlvbnMuZGF0YWZlZWQsCgkJCQkJY3VzdG9tRm9ybWF0dGVyczogdGhpcy5fb3B0aW9ucy5jdXN0b21Gb3JtYXR0ZXJzLAoJCQkJCWJyb2tlckZhY3Rvcnk6IHRoaXMuX29wdGlvbnMuYnJva2VyRmFjdG9yeSwKCQkJCQlvdmVycmlkZXM6IHRoaXMuX29wdGlvbnMub3ZlcnJpZGVzLAoJCQkJCXN0dWRpZXNPdmVycmlkZXM6IHRoaXMuX29wdGlvbnMuc3R1ZGllc19vdmVycmlkZXMsCgkJCQkJZGlzYWJsZWRGZWF0dXJlczogdGhpcy5fb3B0aW9ucy5kaXNhYmxlZF9mZWF0dXJlcywKCQkJCQllbmFibGVkRmVhdHVyZXM6IHRoaXMuX29wdGlvbnMuZW5hYmxlZF9mZWF0dXJlcywKCQkJCQlicm9rZXJDb25maWc6IHRoaXMuX29wdGlvbnMuYnJva2VyQ29uZmlnLAoJCQkJCXJlc3RDb25maWc6IHRoaXMuX29wdGlvbnMucmVzdENvbmZpZywKCQkJCQlmYXZvcml0ZXM6IHRoaXMuX29wdGlvbnMuZmF2b3JpdGVzLAoJCQkJCWxvZ286IHRoaXMuX29wdGlvbnMubG9nbywKCQkJCQludW1lcmljX2Zvcm1hdHRpbmc6IHRoaXMuX29wdGlvbnMubnVtZXJpY19mb3JtYXR0aW5nLAoJCQkJCXJzc19uZXdzX2ZlZWQ6IHRoaXMuX29wdGlvbnMucnNzX25ld3NfZmVlZCwKCQkJCQluZXdzUHJvdmlkZXI6IHRoaXMuX29wdGlvbnMubmV3c19wcm92aWRlciwKCQkJCQlsb2FkTGFzdENoYXJ0OiB0aGlzLl9vcHRpb25zLmxvYWRfbGFzdF9jaGFydCwKCQkJCQlzYXZlTG9hZEFkYXB0ZXI6IHRoaXMuX29wdGlvbnMuc2F2ZV9sb2FkX2FkYXB0ZXIsCgkJCQkJbG9hZGluZ19zY3JlZW46IHRoaXMuX29wdGlvbnMubG9hZGluZ19zY3JlZW4sCgkJCQkJc2V0dGluZ3NBZGFwdGVyOiB0aGlzLl9vcHRpb25zLnNldHRpbmdzX2FkYXB0ZXIKCQkJCX0sIHRoaXMuX29wdGlvbnMuc2F2ZWRfZGF0YSAmJiAodFt0aGlzLl9pZF0uY2hhcnRDb250ZW50ID0gewoJCQkJCWpzb246IHRoaXMuX29wdGlvbnMuc2F2ZWRfZGF0YQoJCQkJfSk7CgkJCQl2YXIgZSA9ICh0aGlzLl9vcHRpb25zLmxpYnJhcnlfcGF0aCB8fCAiIikgKyAicHVibGljL3N0YXRpYy90di1jaGFydC5odG1sI2xvY2Fsc2VydmVyPTEmc3ltYm9sPSIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5fb3B0aW9ucy5zeW1ib2wpICsgIiZpbnRlcnZhbD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuX29wdGlvbnMuaW50ZXJ2YWwpICsgKHRoaXMuX29wdGlvbnMudGltZWZyYW1lID8gIiZ0aW1lZnJhbWU9IiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9vcHRpb25zLnRpbWVmcmFtZSkgOiAiIikgKyAodGhpcy5fb3B0aW9ucy50b29sYmFyX2JnID8gIiZ0b29sYmFyYmc9IiArIHRoaXMuX29wdGlvbnMudG9vbGJhcl9iZy5yZXBsYWNlKCIjIiwgIiIpIDogIiIpICsgKHRoaXMuX29wdGlvbnMuc3R1ZGllc19hY2Nlc3MgPyAiJnN0dWRpZXNBY2Nlc3M9IiArIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh0aGlzLl9vcHRpb25zLnN0dWRpZXNfYWNjZXNzKSkgOiAiIikgKyAiJndpZGdldGJhcj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHRoaXMuX29wdGlvbnMud2lkZ2V0YmFyKSkgKyAodGhpcy5fb3B0aW9ucy5kcmF3aW5nc19hY2Nlc3MgPyAiJmRyYXdpbmdzQWNjZXNzPSIgKyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkodGhpcy5fb3B0aW9ucy5kcmF3aW5nc19hY2Nlc3MpKSA6ICIiKSArICImdGltZUZyYW1lcz0iICsgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHRoaXMuX29wdGlvbnMudGltZV9mcmFtZXMpKSArICImbG9jYWxlPSIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5fb3B0aW9ucy5sb2NhbGUpICsgIiZ1aWQ9IiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9pZCkgKyAiJmNsaWVudElkPSIgKyBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHRoaXMuX29wdGlvbnMuY2xpZW50X2lkKSkgKyAiJnVzZXJJZD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0aGlzLl9vcHRpb25zLnVzZXJfaWQpKSArICh0aGlzLl9vcHRpb25zLmNoYXJ0c19zdG9yYWdlX3VybCA/ICImY2hhcnRzU3RvcmFnZVVybD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuX29wdGlvbnMuY2hhcnRzX3N0b3JhZ2VfdXJsKSA6ICIiKSArICh0aGlzLl9vcHRpb25zLmNoYXJ0c19zdG9yYWdlX2FwaV92ZXJzaW9uID8gIiZjaGFydHNTdG9yYWdlVmVyPSIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5fb3B0aW9ucy5jaGFydHNfc3RvcmFnZV9hcGlfdmVyc2lvbikgOiAiIikgKyAodGhpcy5fb3B0aW9ucy5pbmRpY2F0b3JzX2ZpbGVfbmFtZSA/ICImaW5kaWNhdG9yc0ZpbGU9IiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9vcHRpb25zLmluZGljYXRvcnNfZmlsZV9uYW1lKSA6ICIiKSArICh0aGlzLl9vcHRpb25zLmN1c3RvbV9jc3NfdXJsID8gIiZjdXN0b21DU1M9IiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9vcHRpb25zLmN1c3RvbV9jc3NfdXJsKSA6ICIiKSArICh0aGlzLl9vcHRpb25zLmF1dG9fc2F2ZV9kZWxheSA/ICImYXV0b1NhdmVEZWxheT0iICsgZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0aGlzLl9vcHRpb25zLmF1dG9fc2F2ZV9kZWxheSkpIDogIiIpICsgIiZkZWJ1Zz0iICsgdGhpcy5fb3B0aW9ucy5kZWJ1ZyArICh0aGlzLl9vcHRpb25zLnNuYXBzaG90X3VybCA/ICImc25hcHNob3RVcmw9IiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9vcHRpb25zLnNuYXBzaG90X3VybCkgOiAiIikgKyAodGhpcy5fb3B0aW9ucy50aW1lem9uZSA/ICImdGltZXpvbmU9IiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLl9vcHRpb25zLnRpbWV6b25lKSA6ICIiKSArICh0aGlzLl9vcHRpb25zLnN0dWR5X2NvdW50X2xpbWl0ID8gIiZzdHVkeUNvdW50TGltaXQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodGhpcy5fb3B0aW9ucy5zdHVkeV9jb3VudF9saW1pdCkpIDogIiIpICsgKHRoaXMuX29wdGlvbnMuc3ltYm9sX3NlYXJjaF9yZXF1ZXN0X2RlbGF5ID8gIiZzc3JlcWRlbGF5PSIgKyBlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKHRoaXMuX29wdGlvbnMuc3ltYm9sX3NlYXJjaF9yZXF1ZXN0X2RlbGF5KSkgOiAiIik7CgkJCQlyZXR1cm4gJzxpZnJhbWUgaWQ9IicgKyB0aGlzLl9pZCArICciIG5hbWU9IicgKyB0aGlzLl9pZCArICciICBzcmM9IicgKyBlICsgJyInICsgKHRoaXMuX29wdGlvbnMuYXV0b3NpemUgfHwgdGhpcy5fb3B0aW9ucy5mdWxsc2NyZWVuID8gIiIgOiAnIHdpZHRoPSInICsgdGhpcy5fb3B0aW9ucy53aWR0aCArICciIGhlaWdodD0iJyArIHRoaXMuX29wdGlvbnMuaGVpZ2h0ICsgJyInKSArICcgZnJhbWVib3JkZXI9IjAiIGFsbG93VHJhbnNwYXJlbmN5PSJ0cnVlIiBzY3JvbGxpbmc9Im5vIiBhbGxvd2Z1bGxzY3JlZW4gc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ij48L2lmcmFtZT4nCgkJCX0sIHQKCQl9KCksCgkJZCA9IGE7Cgl3aW5kb3cuVHJhZGluZ1ZpZXcgPSB3aW5kb3cuVHJhZGluZ1ZpZXcgfHwge30sIHdpbmRvdy5UcmFkaW5nVmlldy52ZXJzaW9uID0gbywgdC52ZXJzaW9uID0gbywgdC5vbnJlYWR5ID0gaSwgdC53aWRnZXQgPSBkLCBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgIl9fZXNNb2R1bGUiLCB7CgkJdmFsdWU6ICEwCgl9KQp9KTs="}},"time_used":492,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":492,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/static/tradeview/datafeeds/udf/dist/polyfills.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.547Z","timestamp":1785149590547,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/static/tradeview/datafeeds/udf/dist/polyfills.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:54 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9866-25af\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":9647,"size_decoded":3646,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (9646)","md5":"a24c8424ecaa94595878ee39970c7b46","sha1":"651ecfd5fa247c45b1138bdb2629399882c50384","sha256":"67396f17c514b90f31cbe905241e290c820130be7f55edc770ce81587d37040e","sha512":"6a09a1c41bb241c93b864eda4c57ac14bf91c2b0d0a5323f03d24c31ba266c53af6b9b15580a914aebfca0c825ec6e19cc73e352398fde352c188c604addfe39","ssdeep":"192:/5C5b4rmkiNL70mrZm3KosuxV6/hk3haw5UPQ0wx9B4EhN0xhOU8c:xGegVrZLO3gyP6EhN0xhD","tlshash":"29128588f7e0b472036360b4917f450fb2b53925648e41b8f260d8ea6cbd44d962bf7c","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.201435Z","times_seen":303,"resource_available":true,"data":"IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiOyFmdW5jdGlvbih0KXt2YXIgZT1zZXRUaW1lb3V0O2Z1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gaSh0KXtpZigib2JqZWN0IiE9dHlwZW9mIHRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Iik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigibm90IGEgZnVuY3Rpb24iKTt0aGlzLl9zdGF0ZT0wLHRoaXMuX2hhbmRsZWQ9ITEsdGhpcy5fdmFsdWU9dm9pZCAwLHRoaXMuX2RlZmVycmVkcz1bXSxoKHQsdGhpcyl9ZnVuY3Rpb24gbyhyLG4pe2Zvcig7Mz09PXIuX3N0YXRlOylyPXIuX3ZhbHVlOzAhPT1yLl9zdGF0ZT8oci5faGFuZGxlZD0hMCxpLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpe3ZhciB0PTE9PT1yLl9zdGF0ZT9uLm9uRnVsZmlsbGVkOm4ub25SZWplY3RlZDtpZihudWxsIT09dCl7dmFyIGU7dHJ5e2U9dChyLl92YWx1ZSl9Y2F0Y2godCl7cmV0dXJuIHZvaWQgYShuLnByb21pc2UsdCl9cyhuLnByb21pc2UsZSl9ZWxzZSgxPT09ci5fc3RhdGU/czphKShuLnByb21pc2Usci5fdmFsdWUpfSkpOnIuX2RlZmVycmVkcy5wdXNoKG4pfWZ1bmN0aW9uIHMoZSx0KXt0cnl7aWYodD09PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQSBwcm9taXNlIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGl0c2VsZi4iKTtpZih0JiYoIm9iamVjdCI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpe3ZhciByPXQudGhlbjtpZih0IGluc3RhbmNlb2YgaSlyZXR1cm4gZS5fc3RhdGU9MyxlLl92YWx1ZT10LHZvaWQgdShlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdm9pZCBoKChuPXIsbz10LGZ1bmN0aW9uKCl7bi5hcHBseShvLGFyZ3VtZW50cyl9KSxlKX1lLl9zdGF0ZT0xLGUuX3ZhbHVlPXQsdShlKX1jYXRjaCh0KXthKGUsdCl9dmFyIG4sb31mdW5jdGlvbiBhKHQsZSl7dC5fc3RhdGU9Mix0Ll92YWx1ZT1lLHUodCl9ZnVuY3Rpb24gdSh0KXsyPT09dC5fc3RhdGUmJjA9PT10Ll9kZWZlcnJlZHMubGVuZ3RoJiZpLl9pbW1lZGlhdGVGbihmdW5jdGlvbigpe3QuX2hhbmRsZWR8fGkuX3VuaGFuZGxlZFJlamVjdGlvbkZuKHQuX3ZhbHVlKX0pO2Zvcih2YXIgZT0wLHI9dC5fZGVmZXJyZWRzLmxlbmd0aDtlPHI7ZSsrKW8odCx0Ll9kZWZlcnJlZHNbZV0pO3QuX2RlZmVycmVkcz1udWxsfWZ1bmN0aW9uIGYodCxlLHIpe3RoaXMub25GdWxmaWxsZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpudWxsLHRoaXMub25SZWplY3RlZD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm51bGwsdGhpcy5wcm9taXNlPXJ9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPSExO3RyeXt0KGZ1bmN0aW9uKHQpe3J8fChyPSEwLHMoZSx0KSl9LGZ1bmN0aW9uKHQpe3J8fChyPSEwLGEoZSx0KSl9KX1jYXRjaCh0KXtpZihyKXJldHVybjtyPSEwLGEoZSx0KX19aS5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfSxpLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3Iobik7cmV0dXJuIG8odGhpcyxuZXcgZih0LGUscikpLHJ9LGkuYWxsPWZ1bmN0aW9uKHQpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpO3JldHVybiBuZXcgaShmdW5jdGlvbihuLG8pe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbihbXSk7dmFyIGk9YS5sZW5ndGg7ZnVuY3Rpb24gcyhlLHQpe3RyeXtpZih0JiYoIm9iamVjdCI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdCkpe3ZhciByPXQudGhlbjtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdm9pZCByLmNhbGwodCxmdW5jdGlvbih0KXtzKGUsdCl9LG8pfWFbZV09dCwwPT0tLWkmJm4oYSl9Y2F0Y2godCl7byh0KX19Zm9yKHZhciB0PTA7dDxhLmxlbmd0aDt0Kyspcyh0LGFbdF0pfSl9LGkucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yPT09aT9lOm5ldyBpKGZ1bmN0aW9uKHQpe3QoZSl9KX0saS5yZWplY3Q9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBpKGZ1bmN0aW9uKHQsZSl7ZShyKX0pfSxpLnJhY2U9ZnVuY3Rpb24obyl7cmV0dXJuIG5ldyBpKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1vLmxlbmd0aDtyPG47cisrKW9bcl0udGhlbih0LGUpfSl9LGkuX2ltbWVkaWF0ZUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUmJmZ1bmN0aW9uKHQpe3NldEltbWVkaWF0ZSh0KX18fGZ1bmN0aW9uKHQpe2UodCwwKX0saS5fdW5oYW5kbGVkUmVqZWN0aW9uRm49ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlJiZjb25zb2xlLndhcm4oIlBvc3NpYmxlIFVuaGFuZGxlZCBQcm9taXNlIFJlamVjdGlvbjoiLHQpfSxpLl9zZXRJbW1lZGlhdGVGbj1mdW5jdGlvbih0KXtpLl9pbW1lZGlhdGVGbj10fSxpLl9zZXRVbmhhbmRsZWRSZWplY3Rpb25Gbj1mdW5jdGlvbih0KXtpLl91bmhhbmRsZWRSZWplY3Rpb25Gbj10fSwidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9aTp0LlByb21pc2V8fCh0LlByb21pc2U9aSl9KHdpbmRvdyksZnVuY3Rpb24odCl7aWYoIXQuZmV0Y2gpe3ZhciBlPSJVUkxTZWFyY2hQYXJhbXMiaW4gdCxyPSJTeW1ib2wiaW4gdCYmIml0ZXJhdG9yImluIFN5bWJvbCxzPSJGaWxlUmVhZGVyImluIHQmJiJCbG9iImluIHQmJmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgQmxvYiwhMH1jYXRjaCh0KXtyZXR1cm4hMX19KCksbj0iRm9ybURhdGEiaW4gdCxvPSJBcnJheUJ1ZmZlciJpbiB0O2lmKG8pdmFyIGk9WyJbb2JqZWN0IEludDhBcnJheV0iLCJbb2JqZWN0IFVpbnQ4QXJyYXldIiwiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLCJbb2JqZWN0IEludDE2QXJyYXldIiwiW29iamVjdCBVaW50MTZBcnJheV0iLCJbb2JqZWN0IEludDMyQXJyYXldIiwiW29iamVjdCBVaW50MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLCJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXSxhPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZEYXRhVmlldy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZih0KX0sdT1BcnJheUJ1ZmZlci5pc1ZpZXd8fGZ1bmN0aW9uKHQpe3JldHVybiB0JiYtMTxpLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKX07eS5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dD1kKHQpLGU9YyhlKTt2YXIgcj10aGlzLm1hcFt0XTt0aGlzLm1hcFt0XT1yP3IrIiwiK2U6ZX0seS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe2RlbGV0ZSB0aGlzLm1hcFtkKHQpXX0seS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PWQodCksdGhpcy5oYXModCk/dGhpcy5tYXBbdF06bnVsbH0seS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShkKHQpKX0seS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5tYXBbZCh0KV09YyhlKX0seS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0aGlzLm1hcCl0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShyKSYmdC5jYWxsKGUsdGhpcy5tYXBbcl0scix0aGlzKX0seS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3ZhciByPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxlKXtyLnB1c2goZSl9KSxsKHIpfSx5LnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe2UucHVzaCh0KX0pLGwoZSl9LHkucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7ci5wdXNoKFtlLHRdKX0pLGwocil9LHImJih5LnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPXkucHJvdG90eXBlLmVudHJpZXMpO3ZhciBmPVsiREVMRVRFIiwiR0VUIiwiSEVBRCIsIk9QVElPTlMiLCJQT1NUIiwiUFVUIl07di5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcyx7Ym9keTp0aGlzLl9ib2R5SW5pdH0pfSxfLmNhbGwodi5wcm90b3R5cGUpLF8uY2FsbChULnByb3RvdHlwZSksVC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFQodGhpcy5fYm9keUluaXQse3N0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnRoaXMuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyB5KHRoaXMuaGVhZGVycyksdXJsOnRoaXMudXJsfSl9LFQuZXJyb3I9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVChudWxsLHtzdGF0dXM6MCxzdGF0dXNUZXh0OiIifSk7cmV0dXJuIHQudHlwZT0iZXJyb3IiLHR9O3ZhciBoPVszMDEsMzAyLDMwMywzMDcsMzA4XTtULnJlZGlyZWN0PWZ1bmN0aW9uKHQsZSl7aWYoLTE9PT1oLmluZGV4T2YoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgc3RhdHVzIGNvZGUiKTtyZXR1cm4gbmV3IFQobnVsbCx7c3RhdHVzOmUsaGVhZGVyczp7bG9jYXRpb246dH19KX0sdC5IZWFkZXJzPXksdC5SZXF1ZXN0PXYsdC5SZXNwb25zZT1ULHQuZmV0Y2g9ZnVuY3Rpb24ocixvKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgdihyLG8pLGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2kub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQsbyxlPXtzdGF0dXM6aS5zdGF0dXMsc3RhdHVzVGV4dDppLnN0YXR1c1RleHQsaGVhZGVyczoodD1pLmdldEFsbFJlc3BvbnNlSGVhZGVycygpfHwiIixvPW5ldyB5LHQuc3BsaXQoL1xyP1xuLykuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT10LnNwbGl0KCI6Iikscj1lLnNoaWZ0KCkudHJpbSgpO2lmKHIpe3ZhciBuPWUuam9pbigiOiIpLnRyaW0oKTtvLmFwcGVuZChyLG4pfX0pLG8pfTtlLnVybD0icmVzcG9uc2VVUkwiaW4gaT9pLnJlc3BvbnNlVVJMOmUuaGVhZGVycy5nZXQoIlgtUmVxdWVzdC1VUkwiKTt2YXIgcj0icmVzcG9uc2UiaW4gaT9pLnJlc3BvbnNlOmkucmVzcG9uc2VUZXh0O24obmV3IFQocixlKSl9LGkub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IFR5cGVFcnJvcigiTmV0d29yayByZXF1ZXN0IGZhaWxlZCIpKX0saS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXt0KG5ldyBUeXBlRXJyb3IoIk5ldHdvcmsgcmVxdWVzdCBmYWlsZWQiKSl9LGkub3BlbihlLm1ldGhvZCxlLnVybCwhMCksImluY2x1ZGUiPT09ZS5jcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSEwKSwicmVzcG9uc2VUeXBlImluIGkmJnMmJihpLnJlc3BvbnNlVHlwZT0iYmxvYiIpLGUuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7aS5zZXRSZXF1ZXN0SGVhZGVyKGUsdCl9KSxpLnNlbmQodm9pZCAwPT09ZS5fYm9keUluaXQ/bnVsbDplLl9ib2R5SW5pdCl9KX0sdC5mZXRjaC5wb2x5ZmlsbD0hMH1mdW5jdGlvbiBkKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKSwvW15hLXowLTlcLSMkJSYnKisuXF5fYHx+XS9pLnRlc3QodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWUiKTtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGModCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1TdHJpbmcodCkpLHR9ZnVuY3Rpb24gbChlKXt2YXIgdD17bmV4dDpmdW5jdGlvbigpe3ZhciB0PWUuc2hpZnQoKTtyZXR1cm57ZG9uZTp2b2lkIDA9PT10LHZhbHVlOnR9fX07cmV0dXJuIHImJih0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdH0pLHR9ZnVuY3Rpb24geShlKXt0aGlzLm1hcD17fSxlIGluc3RhbmNlb2YgeT9lLmZvckVhY2goZnVuY3Rpb24odCxlKXt0aGlzLmFwcGVuZChlLHQpfSx0aGlzKTpBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmFwcGVuZCh0WzBdLHRbMV0pfSx0aGlzKTplJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuYXBwZW5kKHQsZVt0XSl9LHRoaXMpfWZ1bmN0aW9uIHAodCl7aWYodC5ib2R5VXNlZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIikpO3QuYm9keVVzZWQ9ITB9ZnVuY3Rpb24gYihyKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxlKXtyLm9ubG9hZD1mdW5jdGlvbigpe3Qoci5yZXN1bHQpfSxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKHIuZXJyb3IpfX0pfWZ1bmN0aW9uIG0odCl7dmFyIGU9bmV3IEZpbGVSZWFkZXIscj1iKGUpO3JldHVybiBlLnJlYWRBc0FycmF5QnVmZmVyKHQpLHJ9ZnVuY3Rpb24gdyh0KXtpZih0LnNsaWNlKXJldHVybiB0LnNsaWNlKDApO3ZhciBlPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aCk7cmV0dXJuIGUuc2V0KG5ldyBVaW50OEFycmF5KHQpKSxlLmJ1ZmZlcn1mdW5jdGlvbiBfKCl7cmV0dXJuIHRoaXMuYm9keVVzZWQ9ITEsdGhpcy5faW5pdEJvZHk9ZnVuY3Rpb24odCl7aWYodGhpcy5fYm9keUluaXQ9dClpZigic3RyaW5nIj09dHlwZW9mIHQpdGhpcy5fYm9keVRleHQ9dDtlbHNlIGlmKHMmJkJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCkpdGhpcy5fYm9keUJsb2I9dDtlbHNlIGlmKG4mJkZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpKXRoaXMuX2JvZHlGb3JtRGF0YT10O2Vsc2UgaWYoZSYmVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKHQpKXRoaXMuX2JvZHlUZXh0PXQudG9TdHJpbmcoKTtlbHNlIGlmKG8mJnMmJmEodCkpdGhpcy5fYm9keUFycmF5QnVmZmVyPXcodC5idWZmZXIpLHRoaXMuX2JvZHlJbml0PW5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKTtlbHNle2lmKCFvfHwhQXJyYXlCdWZmZXIucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCkmJiF1KHQpKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQm9keUluaXQgdHlwZSIpO3RoaXMuX2JvZHlBcnJheUJ1ZmZlcj13KHQpfWVsc2UgdGhpcy5fYm9keVRleHQ9IiI7dGhpcy5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIil8fCgic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIiwidGV4dC9wbGFpbjtjaGFyc2V0PVVURi04Iik6dGhpcy5fYm9keUJsb2ImJnRoaXMuX2JvZHlCbG9iLnR5cGU/dGhpcy5oZWFkZXJzLnNldCgiY29udGVudC10eXBlIix0aGlzLl9ib2R5QmxvYi50eXBlKTplJiZVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YodCkmJnRoaXMuaGVhZGVycy5zZXQoImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IikpfSxzJiYodGhpcy5ibG9iPWZ1bmN0aW9uKCl7dmFyIHQ9cCh0aGlzKTtpZih0KXJldHVybiB0O2lmKHRoaXMuX2JvZHlCbG9iKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpO2lmKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKSk7aWYodGhpcy5fYm9keUZvcm1EYXRhKXRocm93IG5ldyBFcnJvcigiY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyBibG9iIik7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSl9LHRoaXMuYXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYm9keUFycmF5QnVmZmVyP3AodGhpcyl8fFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpOnRoaXMuYmxvYigpLnRoZW4obSl9KSx0aGlzLnRleHQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj1wKHRoaXMpO2lmKG4pcmV0dXJuIG47aWYodGhpcy5fYm9keUJsb2IpcmV0dXJuIHQ9dGhpcy5fYm9keUJsb2IsZT1uZXcgRmlsZVJlYWRlcixyPWIoZSksZS5yZWFkQXNUZXh0KHQpLHI7aWYodGhpcy5fYm9keUFycmF5QnVmZmVyKXJldHVybiBQcm9taXNlLnJlc29sdmUoZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLHI9bmV3IEFycmF5KGUubGVuZ3RoKSxuPTA7bjxlLmxlbmd0aDtuKyspcltuXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pO3JldHVybiByLmpvaW4oIiIpfSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpKTtpZih0aGlzLl9ib2R5Rm9ybURhdGEpdGhyb3cgbmV3IEVycm9yKCJjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQiKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KX0sbiYmKHRoaXMuZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0KCkudGhlbihBKX0pLHRoaXMuanNvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpfSx0aGlzfWZ1bmN0aW9uIHYodCxlKXt2YXIgcixuLG89KGU9ZXx8e30pLmJvZHk7aWYodCBpbnN0YW5jZW9mIHYpe2lmKHQuYm9keVVzZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWxyZWFkeSByZWFkIik7dGhpcy51cmw9dC51cmwsdGhpcy5jcmVkZW50aWFscz10LmNyZWRlbnRpYWxzLGUuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgeSh0LmhlYWRlcnMpKSx0aGlzLm1ldGhvZD10Lm1ldGhvZCx0aGlzLm1vZGU9dC5tb2RlLG98fG51bGw9PXQuX2JvZHlJbml0fHwobz10Ll9ib2R5SW5pdCx0LmJvZHlVc2VkPSEwKX1lbHNlIHRoaXMudXJsPVN0cmluZyh0KTtpZih0aGlzLmNyZWRlbnRpYWxzPWUuY3JlZGVudGlhbHN8fHRoaXMuY3JlZGVudGlhbHN8fCJvbWl0IiwhZS5oZWFkZXJzJiZ0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IHkoZS5oZWFkZXJzKSksdGhpcy5tZXRob2Q9KHI9ZS5tZXRob2R8fHRoaXMubWV0aG9kfHwiR0VUIixuPXIudG9VcHBlckNhc2UoKSwtMTxmLmluZGV4T2Yobik/bjpyKSx0aGlzLm1vZGU9ZS5tb2RlfHx0aGlzLm1vZGV8fG51bGwsdGhpcy5yZWZlcnJlcj1udWxsLCgiR0VUIj09PXRoaXMubWV0aG9kfHwiSEVBRCI9PT10aGlzLm1ldGhvZCkmJm8pdGhyb3cgbmV3IFR5cGVFcnJvcigiQm9keSBub3QgYWxsb3dlZCBmb3IgR0VUIG9yIEhFQUQgcmVxdWVzdHMiKTt0aGlzLl9pbml0Qm9keShvKX1mdW5jdGlvbiBBKHQpe3ZhciBvPW5ldyBGb3JtRGF0YTtyZXR1cm4gdC50cmltKCkuc3BsaXQoIiYiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuc3BsaXQoIj0iKSxyPWUuc2hpZnQoKS5yZXBsYWNlKC9cKy9nLCIgIiksbj1lLmpvaW4oIj0iKS5yZXBsYWNlKC9cKy9nLCIgIik7by5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KHIpLGRlY29kZVVSSUNvbXBvbmVudChuKSl9fSksb31mdW5jdGlvbiBUKHQsZSl7ZXx8KGU9e30pLHRoaXMudHlwZT0iZGVmYXVsdCIsdGhpcy5zdGF0dXM9InN0YXR1cyJpbiBlP2Uuc3RhdHVzOjIwMCx0aGlzLm9rPTIwMDw9dGhpcy5zdGF0dXMmJnRoaXMuc3RhdHVzPDMwMCx0aGlzLnN0YXR1c1RleHQ9InN0YXR1c1RleHQiaW4gZT9lLnN0YXR1c1RleHQ6Ik9LIix0aGlzLmhlYWRlcnM9bmV3IHkoZS5oZWFkZXJzKSx0aGlzLnVybD1lLnVybHx8IiIsdGhpcy5faW5pdEJvZHkodCl9fSgidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp3aW5kb3cpfSgpOwo="}},"time_used":490,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":490,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/layer/theme/default/layer.css?v=3.1.1","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:11.052Z","timestamp":1785149591052,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/layer/theme/default/layer.css?v=3.1.1 HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:11 GMT\r\ncontent-type: text/css\r\nlast-modified: Tue, 09 Nov 2021 15:48:54 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9866-381f\"\r\nexpires: Mon, 27 Jul 2026 22:53:11 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":14367,"size_decoded":3174,"mime_type":"text/css","magic":"ASCII text, with very long lines (14367), with no line terminators","md5":"3d2e0d91c5c0b96abb8dbdc2234aba77","sha1":"9d55e153b30fd7414fada5718e20918e9c7f65e7","sha256":"e3144d018a6a24f733c6fc2a2ee603fb583f0030585e9d4b71bec471b78e31fc","sha512":"42bf3eff281998d088ce012b9a5910f72951c91715595572bb968fbfc5fa2b1cddacef3ca683a1734eb41114b302b6a4dad8b7432c5877b3563a080a2547ae05","ssdeep":"96:mp+Ntha8qNEp+wRY1vUPXiK6nMLPD2OtLzXyPHL/LztJDzyv2OQ7KGx1jyd2/SWz:1WmLr2OtSrzzt42OQ7KGx1jCWR2b+RcU","tlshash":"2e5221e144811299b0278721d6dc7eba32f88d43e5630daef257381f874c6dba2b6647","first_seen":"2023-04-05T06:05:22Z","last_seen":"2026-08-07T09:24:12.821915Z","times_seen":6791,"resource_available":false,"data":"LmxheXVpLWxheWVyLWltZ2JhciwubGF5dWktbGF5ZXItaW1ndGl0IGEsLmxheXVpLWxheWVyLXRhYiAubGF5dWktbGF5ZXItdGl0bGUgc3BhbiwubGF5dWktbGF5ZXItdGl0bGV7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9aHRtbCAjbGF5dWljc3MtbGF5ZXJ7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjE5ODlweH0ubGF5dWktbGF5ZXIsLmxheXVpLWxheWVyLXNoYWRle3Bvc2l0aW9uOmZpeGVkO19wb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvfS5sYXl1aS1sYXllci1zaGFkZXt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtfaGVpZ2h0OmV4cHJlc3Npb24oZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQrInB4Iil9LmxheXVpLWxheWVyey13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3RvcDoxNTBweDtsZWZ0OjA7bWFyZ2luOjA7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6I2ZmZjstd2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50O2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MXB4IDFweCA1MHB4IHJnYmEoMCwwLDAsLjMpfS5sYXl1aS1sYXllci1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZX0ubGF5dWktbGF5ZXItY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZX0ubGF5dWktbGF5ZXItYm9yZGVye2JvcmRlcjoxcHggc29saWQgI0IyQjJCMjtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6MXB4IDFweCA1cHggcmdiYSgwLDAsMCwuMil9LmxheXVpLWxheWVyLWxvYWR7YmFja2dyb3VuZDp1cmwobG9hZGluZy0xLmdpZikgY2VudGVyIGNlbnRlciBuby1yZXBlYXQgI2VlZX0ubGF5dWktbGF5ZXItaWNve2JhY2tncm91bmQ6dXJsKGljb24ucG5nKSBuby1yZXBlYXR9LmxheXVpLWxheWVyLWJ0biBhLC5sYXl1aS1sYXllci1kaWFsb2cgLmxheXVpLWxheWVyLWljbywubGF5dWktbGF5ZXItc2V0d2luIGF7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjE7dmVydGljYWwtYWxpZ246dG9wfS5sYXl1aS1sYXllci1tb3Zle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDsqcG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Y3Vyc29yOm1vdmU7b3BhY2l0eTowO2ZpbHRlcjphbHBoYShvcGFjaXR5PTApO2JhY2tncm91bmQtY29sb3I6I2ZmZjt6LWluZGV4OjIxNDc0ODM2NDd9LmxheXVpLWxheWVyLXJlc2l6ZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O3JpZ2h0OjA7Ym90dG9tOjA7Y3Vyc29yOnNlLXJlc2l6ZX0ubGF5ZXItYW5pbXstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Ym90aDthbmltYXRpb24tZmlsbC1tb2RlOmJvdGg7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246LjNzO2FuaW1hdGlvbi1kdXJhdGlvbjouM3N9QC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLWJvdW5jZUluezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNSk7dHJhbnNmb3JtOnNjYWxlKC41KX0xMDAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgxKTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbGF5ZXItYm91bmNlSW57MCV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC41KTstbXMtdHJhbnNmb3JtOnNjYWxlKC41KTt0cmFuc2Zvcm06c2NhbGUoLjUpfTEwMCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpOy1tcy10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpfX0ubGF5ZXItYW5pbS0wMHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmxheWVyLWJvdW5jZUluO2FuaW1hdGlvbi1uYW1lOmxheWVyLWJvdW5jZUlufUAtd2Via2l0LWtleWZyYW1lcyBsYXllci16b29tSW5Eb3duezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguMSkgdHJhbnNsYXRlWSgtMjAwMHB4KTt0cmFuc2Zvcm06c2NhbGUoLjEpIHRyYW5zbGF0ZVkoLTIwMDBweCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXR9NjAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNDc1KSB0cmFuc2xhdGVZKDYwcHgpO3RyYW5zZm9ybTpzY2FsZSguNDc1KSB0cmFuc2xhdGVZKDYwcHgpOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0fX1Aa2V5ZnJhbWVzIGxheWVyLXpvb21JbkRvd257MCV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC4xKSB0cmFuc2xhdGVZKC0yMDAwcHgpOy1tcy10cmFuc2Zvcm06c2NhbGUoLjEpIHRyYW5zbGF0ZVkoLTIwMDBweCk7dHJhbnNmb3JtOnNjYWxlKC4xKSB0cmFuc2xhdGVZKC0yMDAwcHgpOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0fTYwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjQ3NSkgdHJhbnNsYXRlWSg2MHB4KTstbXMtdHJhbnNmb3JtOnNjYWxlKC40NzUpIHRyYW5zbGF0ZVkoNjBweCk7dHJhbnNmb3JtOnNjYWxlKC40NzUpIHRyYW5zbGF0ZVkoNjBweCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXR9fS5sYXllci1hbmltLTAxey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bGF5ZXItem9vbUluRG93bjthbmltYXRpb24tbmFtZTpsYXllci16b29tSW5Eb3dufUAtd2Via2l0LWtleWZyYW1lcyBsYXllci1mYWRlSW5VcEJpZ3swJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgyMDAwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDIwMDBweCl9MTAwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX19QGtleWZyYW1lcyBsYXllci1mYWRlSW5VcEJpZ3swJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgyMDAwcHgpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgyMDAwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDIwMDBweCl9MTAwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fS5sYXllci1hbmltLTAyey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bGF5ZXItZmFkZUluVXBCaWc7YW5pbWF0aW9uLW5hbWU6bGF5ZXItZmFkZUluVXBCaWd9QC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLXpvb21JbkxlZnR7MCV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC4xKSB0cmFuc2xhdGVYKC0yMDAwcHgpO3RyYW5zZm9ybTpzY2FsZSguMSkgdHJhbnNsYXRlWCgtMjAwMHB4KTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dH02MCV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC40NzUpIHRyYW5zbGF0ZVgoNDhweCk7dHJhbnNmb3JtOnNjYWxlKC40NzUpIHRyYW5zbGF0ZVgoNDhweCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXR9fUBrZXlmcmFtZXMgbGF5ZXItem9vbUluTGVmdHswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjEpIHRyYW5zbGF0ZVgoLTIwMDBweCk7LW1zLXRyYW5zZm9ybTpzY2FsZSguMSkgdHJhbnNsYXRlWCgtMjAwMHB4KTt0cmFuc2Zvcm06c2NhbGUoLjEpIHRyYW5zbGF0ZVgoLTIwMDBweCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXR9NjAle29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNDc1KSB0cmFuc2xhdGVYKDQ4cHgpOy1tcy10cmFuc2Zvcm06c2NhbGUoLjQ3NSkgdHJhbnNsYXRlWCg0OHB4KTt0cmFuc2Zvcm06c2NhbGUoLjQ3NSkgdHJhbnNsYXRlWCg0OHB4KTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dH19LmxheWVyLWFuaW0tMDN7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpsYXllci16b29tSW5MZWZ0O2FuaW1hdGlvbi1uYW1lOmxheWVyLXpvb21JbkxlZnR9QC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLXJvbGxJbnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSkgcm90YXRlKC0xMjBkZWcpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKSByb3RhdGUoLTEyMGRlZyl9MTAwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKSByb3RhdGUoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCkgcm90YXRlKDApfX1Aa2V5ZnJhbWVzIGxheWVyLXJvbGxJbnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSkgcm90YXRlKC0xMjBkZWcpOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSkgcm90YXRlKC0xMjBkZWcpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKSByb3RhdGUoLTEyMGRlZyl9MTAwJXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKSByb3RhdGUoMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApIHJvdGF0ZSgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKSByb3RhdGUoMCl9fS5sYXllci1hbmltLTA0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bGF5ZXItcm9sbEluO2FuaW1hdGlvbi1uYW1lOmxheWVyLXJvbGxJbn1Aa2V5ZnJhbWVzIGxheWVyLWZhZGVJbnswJXtvcGFjaXR5OjB9MTAwJXtvcGFjaXR5OjF9fS5sYXllci1hbmltLTA1ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bGF5ZXItZmFkZUluO2FuaW1hdGlvbi1uYW1lOmxheWVyLWZhZGVJbn1ALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItc2hha2V7MCUsMTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfTEwJSwzMCUsNTAlLDcwJSw5MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpfTIwJSw0MCUsNjAlLDgwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwcHgpfX1Aa2V5ZnJhbWVzIGxheWVyLXNoYWtlezAlLDEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9MTAlLDMwJSw1MCUsNzAlLDkwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMHB4KX0yMCUsNDAlLDYwJSw4MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMHB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTBweCl9fS5sYXllci1hbmltLTA2ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6bGF5ZXItc2hha2U7YW5pbWF0aW9uLW5hbWU6bGF5ZXItc2hha2V9QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjB9MTAwJXtvcGFjaXR5OjF9fS5sYXl1aS1sYXllci10aXRsZXtwYWRkaW5nOjAgODBweCAwIDIwcHg7aGVpZ2h0OjQycHg7bGluZS1oZWlnaHQ6NDJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMzMzM7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I0Y4RjhGODtib3JkZXItcmFkaXVzOjJweCAycHggMCAwfS5sYXl1aS1sYXllci1zZXR3aW57cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTVweDsqcmlnaHQ6MDt0b3A6MTVweDtmb250LXNpemU6MDtsaW5lLWhlaWdodDppbml0aWFsfS5sYXl1aS1sYXllci1zZXR3aW4gYXtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O21hcmdpbi1sZWZ0OjEwcHg7Zm9udC1zaXplOjEycHg7X292ZXJmbG93OmhpZGRlbn0ubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1taW4gY2l0ZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxNHB4O2hlaWdodDoycHg7bGVmdDowO3RvcDo1MCU7bWFyZ2luLXRvcDotMXB4O2JhY2tncm91bmQtY29sb3I6IzJFMkQzQztjdXJzb3I6cG9pbnRlcjtfb3ZlcmZsb3c6aGlkZGVufS5sYXl1aS1sYXllci1zZXR3aW4gLmxheXVpLWxheWVyLW1pbjpob3ZlciBjaXRle2JhY2tncm91bmQtY29sb3I6IzJEOTNDQX0ubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1tYXh7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNDBweH0ubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1tYXg6aG92ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNDBweH0ubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1tYXhtaW57YmFja2dyb3VuZC1wb3NpdGlvbjotNjVweCAtNDBweH0ubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1tYXhtaW46aG92ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDlweCAtNDBweH0ubGF5dWktbGF5ZXItc2V0d2luIC5sYXl1aS1sYXllci1jbG9zZTF7YmFja2dyb3VuZC1wb3NpdGlvbjoxcHggLTQwcHg7Y3Vyc29yOnBvaW50ZXJ9LmxheXVpLWxheWVyLXNldHdpbiAubGF5dWktbGF5ZXItY2xvc2UxOmhvdmVye29wYWNpdHk6Ljd9LmxheXVpLWxheWVyLXNldHdpbiAubGF5dWktbGF5ZXItY2xvc2Uye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0yOHB4O3RvcDotMjhweDt3aWR0aDozMHB4O2hlaWdodDozMHB4O21hcmdpbi1sZWZ0OjA7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ5cHggLTMxcHg7KnJpZ2h0Oi0xOHB4O19kaXNwbGF5Om5vbmV9LmxheXVpLWxheWVyLXNldHdpbiAubGF5dWktbGF5ZXItY2xvc2UyOmhvdmVye2JhY2tncm91bmQtcG9zaXRpb246LTE4MHB4IC0zMXB4fS5sYXl1aS1sYXllci1idG57dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nOjAgMTVweCAxMnB4O3BvaW50ZXItZXZlbnRzOmF1dG87dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmV9LmxheXVpLWxheWVyLWJ0biBhe2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7bWFyZ2luOjVweCA1cHggMDtwYWRkaW5nOjAgMTVweDtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMzMzM7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC13ZWlnaHQ6NDAwO2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lfS5sYXl1aS1sYXllci1idG4gYTpob3ZlcntvcGFjaXR5Oi45O3RleHQtZGVjb3JhdGlvbjpub25lfS5sYXl1aS1sYXllci1idG4gYTphY3RpdmV7b3BhY2l0eTouOH0ubGF5dWktbGF5ZXItYnRuIC5sYXl1aS1sYXllci1idG4we2JvcmRlci1jb2xvcjojMUU5RkZGO2JhY2tncm91bmQtY29sb3I6IzFFOUZGRjtjb2xvcjojZmZmfS5sYXl1aS1sYXllci1idG4tbHt0ZXh0LWFsaWduOmxlZnR9LmxheXVpLWxheWVyLWJ0bi1je3RleHQtYWxpZ246Y2VudGVyfS5sYXl1aS1sYXllci1kaWFsb2d7bWluLXdpZHRoOjI2MHB4fS5sYXl1aS1sYXllci1kaWFsb2cgLmxheXVpLWxheWVyLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoyMHB4O2xpbmUtaGVpZ2h0OjI0cHg7d29yZC1icmVhazpicmVhay1hbGw7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtc2l6ZToxNHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0b30ubGF5dWktbGF5ZXItZGlhbG9nIC5sYXl1aS1sYXllci1jb250ZW50IC5sYXl1aS1sYXllci1pY297cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDoxNXB4O19sZWZ0Oi00MHB4O3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9LmxheXVpLWxheWVyLWljbzF7YmFja2dyb3VuZC1wb3NpdGlvbjotMzBweCAwfS5sYXl1aS1sYXllci1pY28ye2JhY2tncm91bmQtcG9zaXRpb246LTYwcHggMH0ubGF5dWktbGF5ZXItaWNvM3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05MHB4IDB9LmxheXVpLWxheWVyLWljbzR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggMH0ubGF5dWktbGF5ZXItaWNvNXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNTBweCAwfS5sYXl1aS1sYXllci1pY282e2JhY2tncm91bmQtcG9zaXRpb246LTE4MHB4IDB9LmxheXVpLWxheWVyLXJpbXtib3JkZXI6NnB4IHNvbGlkICM4RDhEOEQ7Ym9yZGVyOjZweCBzb2xpZCByZ2JhKDAsMCwwLC4zKTtib3JkZXItcmFkaXVzOjVweDtib3gtc2hhZG93Om5vbmV9LmxheXVpLWxheWVyLW1zZ3ttaW4td2lkdGg6MTgwcHg7Ym9yZGVyOjFweCBzb2xpZCAjRDNENEQzO2JveC1zaGFkb3c6bm9uZX0ubGF5dWktbGF5ZXItaHVpe21pbi13aWR0aDoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NjApO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNik7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0ubGF5dWktbGF5ZXItaHVpIC5sYXl1aS1sYXllci1jb250ZW50e3BhZGRpbmc6MTJweCAyNXB4O3RleHQtYWxpZ246Y2VudGVyfS5sYXl1aS1sYXllci1kaWFsb2cgLmxheXVpLWxheWVyLXBhZGRpbmd7cGFkZGluZzoyMHB4IDIwcHggMjBweCA1NXB4O3RleHQtYWxpZ246bGVmdH0ubGF5dWktbGF5ZXItcGFnZSAubGF5dWktbGF5ZXItY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzphdXRvfS5sYXl1aS1sYXllci1pZnJhbWUgLmxheXVpLWxheWVyLWJ0biwubGF5dWktbGF5ZXItcGFnZSAubGF5dWktbGF5ZXItYnRue3BhZGRpbmctdG9wOjEwcHh9LmxheXVpLWxheWVyLW5vYmd7YmFja2dyb3VuZDowIDB9LmxheXVpLWxheWVyLWlmcmFtZSBpZnJhbWV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5sYXl1aS1sYXllci1sb2FkaW5ne2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmU7Ym9yZGVyOm5vbmV9LmxheXVpLWxheWVyLWxvYWRpbmcgLmxheXVpLWxheWVyLWNvbnRlbnR7d2lkdGg6NjBweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOnVybChsb2FkaW5nLTAuZ2lmKSBuby1yZXBlYXR9LmxheXVpLWxheWVyLWxvYWRpbmcgLmxheXVpLWxheWVyLWxvYWRpbmcxe3dpZHRoOjM3cHg7aGVpZ2h0OjM3cHg7YmFja2dyb3VuZDp1cmwobG9hZGluZy0xLmdpZikgbm8tcmVwZWF0fS5sYXl1aS1sYXllci1pY28xNiwubGF5dWktbGF5ZXItbG9hZGluZyAubGF5dWktbGF5ZXItbG9hZGluZzJ7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDtiYWNrZ3JvdW5kOnVybChsb2FkaW5nLTIuZ2lmKSBuby1yZXBlYXR9LmxheXVpLWxheWVyLXRpcHN7YmFja2dyb3VuZDowIDA7Ym94LXNoYWRvdzpub25lO2JvcmRlcjpub25lfS5sYXl1aS1sYXllci10aXBzIC5sYXl1aS1sYXllci1jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjIycHg7bWluLXdpZHRoOjEycHg7cGFkZGluZzo4cHggMTVweDtmb250LXNpemU6MTJweDtfZmxvYXQ6bGVmdDtib3JkZXItcmFkaXVzOjJweDtib3gtc2hhZG93OjFweCAxcHggM3B4IHJnYmEoMCwwLDAsLjIpO2JhY2tncm91bmQtY29sb3I6IzAwMDtjb2xvcjojZmZmfS5sYXl1aS1sYXllci10aXBzIC5sYXl1aS1sYXllci1jbG9zZXtyaWdodDotMnB4O3RvcDotMXB4fS5sYXl1aS1sYXllci10aXBzIGkubGF5dWktbGF5ZXItVGlwc0d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItd2lkdGg6OHB4O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6ZGFzaGVkOypvdmVyZmxvdzpoaWRkZW59LmxheXVpLWxheWVyLXRpcHMgaS5sYXl1aS1sYXllci1UaXBzQiwubGF5dWktbGF5ZXItdGlwcyBpLmxheXVpLWxheWVyLVRpcHNUe2xlZnQ6NXB4O2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6IzAwMH0ubGF5dWktbGF5ZXItdGlwcyBpLmxheXVpLWxheWVyLVRpcHNUe2JvdHRvbTotOHB4fS5sYXl1aS1sYXllci10aXBzIGkubGF5dWktbGF5ZXItVGlwc0J7dG9wOi04cHh9LmxheXVpLWxheWVyLXRpcHMgaS5sYXl1aS1sYXllci1UaXBzTCwubGF5dWktbGF5ZXItdGlwcyBpLmxheXVpLWxheWVyLVRpcHNSe3RvcDo1cHg7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDB9LmxheXVpLWxheWVyLXRpcHMgaS5sYXl1aS1sYXllci1UaXBzUntsZWZ0Oi04cHh9LmxheXVpLWxheWVyLXRpcHMgaS5sYXl1aS1sYXllci1UaXBzTHtyaWdodDotOHB4fS5sYXl1aS1sYXllci1sYW5bdHlwZT1kaWFsb2dde21pbi13aWR0aDoyODBweH0ubGF5dWktbGF5ZXItbGFuIC5sYXl1aS1sYXllci10aXRsZXtiYWNrZ3JvdW5kOiM0NDc2QTc7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0ubGF5dWktbGF5ZXItbGFuIC5sYXl1aS1sYXllci1idG57cGFkZGluZzo1cHggMTBweCAxMHB4O3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLXRvcDoxcHggc29saWQgI0U5RTdFN30ubGF5dWktbGF5ZXItbGFuIC5sYXl1aS1sYXllci1idG4gYXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiNFOUU3RTc7Y29sb3I6IzMzM30ubGF5dWktbGF5ZXItbGFuIC5sYXl1aS1sYXllci1idG4gLmxheXVpLWxheWVyLWJ0bjF7YmFja2dyb3VuZDojQzlDNUM1fS5sYXl1aS1sYXllci1tb2x2IC5sYXl1aS1sYXllci10aXRsZXtiYWNrZ3JvdW5kOiMwMDlmOTU7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0ubGF5dWktbGF5ZXItbW9sdiAubGF5dWktbGF5ZXItYnRuIGF7YmFja2dyb3VuZDojMDA5Zjk1O2JvcmRlci1jb2xvcjojMDA5Zjk1fS5sYXl1aS1sYXllci1tb2x2IC5sYXl1aS1sYXllci1idG4gLmxheXVpLWxheWVyLWJ0bjF7YmFja2dyb3VuZDojOTJCOEIxfS5sYXl1aS1sYXllci1pY29uZXh0e2JhY2tncm91bmQ6dXJsKGljb24tZXh0LnBuZykgbm8tcmVwZWF0fS5sYXl1aS1sYXllci1wcm9tcHQgLmxheXVpLWxheWVyLWlucHV0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjMwcHg7aGVpZ2h0OjM2cHg7bWFyZ2luOjAgYXV0bztsaW5lLWhlaWdodDozMHB4O3BhZGRpbmctbGVmdDoxMHB4O2JvcmRlcjoxcHggc29saWQgI2U2ZTZlNjtjb2xvcjojMzMzfS5sYXl1aS1sYXllci1wcm9tcHQgdGV4dGFyZWEubGF5dWktbGF5ZXItaW5wdXR7d2lkdGg6MzAwcHg7aGVpZ2h0OjEwMHB4O2xpbmUtaGVpZ2h0OjIwcHg7cGFkZGluZzo2cHggMTBweH0ubGF5dWktbGF5ZXItcHJvbXB0IC5sYXl1aS1sYXllci1jb250ZW50e3BhZGRpbmc6MjBweH0ubGF5dWktbGF5ZXItcHJvbXB0IC5sYXl1aS1sYXllci1idG57cGFkZGluZy10b3A6MH0ubGF5dWktbGF5ZXItdGFie2JveC1zaGFkb3c6MXB4IDFweCA1MHB4IHJnYmEoMCwwLDAsLjQpfS5sYXl1aS1sYXllci10YWIgLmxheXVpLWxheWVyLXRpdGxle3BhZGRpbmctbGVmdDowO292ZXJmbG93OnZpc2libGV9LmxheXVpLWxheWVyLXRhYiAubGF5dWktbGF5ZXItdGl0bGUgc3Bhbntwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O21pbi13aWR0aDo4MHB4O21heC13aWR0aDoyNjBweDtwYWRkaW5nOjAgMjBweDt0ZXh0LWFsaWduOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47Y3Vyc29yOnBvaW50ZXJ9LmxheXVpLWxheWVyLXRhYiAubGF5dWktbGF5ZXItdGl0bGUgc3Bhbi5sYXl1aS10aGlze2hlaWdodDo0M3B4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWVlO2JvcmRlci1yaWdodDoxcHggc29saWQgI2VlZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDoxMH0ubGF5dWktbGF5ZXItdGFiIC5sYXl1aS1sYXllci10aXRsZSBzcGFuOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0Om5vbmV9LmxheXVpLWxheWVyLXRhYm1haW57bGluZS1oZWlnaHQ6MjRweDtjbGVhcjpib3RofS5sYXl1aS1sYXllci10YWJtYWluIC5sYXl1aS1sYXllci10YWJsaXtkaXNwbGF5Om5vbmV9LmxheXVpLWxheWVyLXRhYm1haW4gLmxheXVpLWxheWVyLXRhYmxpLmxheXVpLXRoaXN7ZGlzcGxheTpibG9ja30ubGF5dWktbGF5ZXItcGhvdG9zey13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOi44czthbmltYXRpb24tZHVyYXRpb246LjhzfS5sYXl1aS1sYXllci1waG90b3MgLmxheXVpLWxheWVyLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyfS5sYXl1aS1sYXllci1waG90b3MgLmxheXVpLWxheWVyLXBoaW1nIGltZ3twb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxO3ZlcnRpY2FsLWFsaWduOnRvcH0ubGF5dWktbGF5ZXItaW1nYmFyLC5sYXl1aS1sYXllci1pbWd1aWRle2Rpc3BsYXk6bm9uZX0ubGF5dWktbGF5ZXItaW1nbmV4dCwubGF5dWktbGF5ZXItaW1ncHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjI3cHg7X3dpZHRoOjQ0cHg7aGVpZ2h0OjQ0cHg7bWFyZ2luLXRvcDotMjJweDtvdXRsaW5lOjA7YmxyOmV4cHJlc3Npb24odGhpcy5vbkZvY3VzPXRoaXMuYmx1cigpKX0ubGF5dWktbGF5ZXItaW1ncHJldntsZWZ0OjEwcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNXB4IC01cHg7X2JhY2tncm91bmQtcG9zaXRpb246LTcwcHggLTVweH0ubGF5dWktbGF5ZXItaW1ncHJldjpob3ZlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zM3B4IC01cHg7X2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC01cHh9LmxheXVpLWxheWVyLWltZ25leHR7cmlnaHQ6MTBweDtfcmlnaHQ6OHB4O2JhY2tncm91bmQtcG9zaXRpb246LTVweCAtNTBweDtfYmFja2dyb3VuZC1wb3NpdGlvbjotNzBweCAtNTBweH0ubGF5dWktbGF5ZXItaW1nbmV4dDpob3ZlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zM3B4IC01MHB4O19iYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNTBweH0ubGF5dWktbGF5ZXItaW1nYmFye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt3aWR0aDoxMDAlO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHg7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44KTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDBcOTtmaWx0ZXI6QWxwaGEob3BhY2l0eT04MCk7Y29sb3I6I2ZmZjtvdmVyZmxvdzpoaWRkZW47Zm9udC1zaXplOjB9LmxheXVpLWxheWVyLWltZ3RpdCAqe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxO3ZlcnRpY2FsLWFsaWduOnRvcDtmb250LXNpemU6MTJweH0ubGF5dWktbGF5ZXItaW1ndGl0IGF7bWF4LXdpZHRoOjY1JTtvdmVyZmxvdzpoaWRkZW47Y29sb3I6I2ZmZn0ubGF5dWktbGF5ZXItaW1ndGl0IGE6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5sYXl1aS1sYXllci1pbWd0aXQgZW17cGFkZGluZy1sZWZ0OjEwcHg7Zm9udC1zdHlsZTpub3JtYWx9QC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLWJvdW5jZU91dHsxMDAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguNyk7dHJhbnNmb3JtOnNjYWxlKC43KX0zMCV7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpfTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zZm9ybTpzY2FsZSgxKX19QGtleWZyYW1lcyBsYXllci1ib3VuY2VPdXR7MTAwJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjcpOy1tcy10cmFuc2Zvcm06c2NhbGUoLjcpO3RyYW5zZm9ybTpzY2FsZSguNyl9MzAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEuMDUpOy1tcy10cmFuc2Zvcm06c2NhbGUoMS4wNSk7dHJhbnNmb3JtOnNjYWxlKDEuMDUpfTAley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKDEpOy1tcy10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpfX0ubGF5ZXItYW5pbS1jbG9zZXstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmxheWVyLWJvdW5jZU91dDthbmltYXRpb24tbmFtZTpsYXllci1ib3VuY2VPdXQ7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmJvdGg7YW5pbWF0aW9uLWZpbGwtbW9kZTpib3RoOy13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOi4yczthbmltYXRpb24tZHVyYXRpb246LjJzfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTEwMHB4KXsubGF5dWktbGF5ZXItaWZyYW1le292ZXJmbG93LXk6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaH19"}},"time_used":481,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":481,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"at.alicdn.com/t/font_2302506_w05z3emunp.js","fqdn":"at.alicdn.com","domain":"alicdn.com","tld":"com"},"ip":{"addr":"","port":0,"asn":0,"as":"","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.549Z","timestamp":1785149590549,"http_version":"","security_state":"","security_info":null,"request":{"raw":"GET /t/font_2302506_w05z3emunp.js HTTP/1.1\r\nHost: at.alicdn.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://global-cryptocurrencies.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":"","headers":null,"cookies":null,"status_code":"","status_text":"","fingerprints":null,"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-08-07T09:07:10.188554Z","times_seen":17758850,"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":null,"urlquery":null}},{"url":{"schema":"https","addr":"plugin-code.salesmartly.com/js/project_431350_443911_1755776497.js","fqdn":"plugin-code.salesmartly.com","domain":"salesmartly.com","tld":"com"},"ip":{"addr":"3.164.240.34","port":443,"asn":16509,"as":"AMAZON-02","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.559Z","timestamp":1785149590559,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_128_GCM_SHA256","key_group_name":"mlkem768x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"*.salesmartly.com","organization":""},"issuer":{"commonName":"Amazon RSA 2048 M01","organization":"Amazon"},"validity":{"start":"Wed, 05 Nov 2025 00:00:00 GMT","end":"Fri, 04 Dec 2026 23:59:59 GMT"},"fingerprint":{"sha1":"21:16:EC:FB:98:9D:64:FD:1E:C8:5C:02:6A:93:88:4B:65:15:09:07","sha256":"26:1B:3A:72:0D:8B:91:C8:40:3E:89:B3:CC:5C:13:07:99:A8:EB:AB:72:A0:AC:58:2B:0F:C1:C8:C7:85:2F:3A"}}},"request":{"raw":"GET /js/project_431350_443911_1755776497.js HTTP/1.1\r\nHost: plugin-code.salesmartly.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://global-cryptocurrencies.com/\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: cross-site\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\ncontent-type: application/javascript\r\nserver: AliyunOSS\r\ndate: Thu, 23 Jul 2026 09:32:57 GMT\r\nx-oss-server-time: 20\r\ncontent-encoding: gzip\r\nx-oss-request-id: 6A61DFC9FEEE6A363906EE10\r\nlast-modified: Thu, 21 Aug 2025 11:41:37 GMT\r\nx-oss-object-type: Normal\r\nx-oss-hash-crc64ecma: 6154156941818811933\r\nx-oss-storage-class: Standard\r\ncontent-md5: iAYCdfkeSFInseBOeLCZCg==\r\nvary: Accept-Encoding\r\nx-cache: Hit from cloudfront\r\nvia: 1.1 e3aded687d9d5fd28450d38e25aba824.cloudfront.net (CloudFront)\r\nx-amz-cf-pop: ARN53-P2\r\nx-amz-cf-id: ZulEwCBBh0KNI0w-Q6OJ3s6f_wnryRSG4vRlEni2NSrChWjj3LBrhA==\r\nage: 350413\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Alibaba Cloud Object Storage Service","description":"Alibaba Cloud Object Storage Service (OSS) is a cloud-based object storage service provided by Alibaba Cloud, which allows users to store and access large amounts of data in the cloud.","website":"https://www.alibabacloud.com/product/object-storage-service","common_platform_enumeration":"","icon":"Alibaba Cloud.svg","categories":["IaaS"]},{"name":"Amazon CloudFront","description":"Amazon CloudFront is a fast content delivery network (CDN) service that securely delivers data, videos, applications, and APIs to customers globally with low latency, high transfer speeds.","website":"https://aws.amazon.com/cloudfront/","common_platform_enumeration":"","icon":"Amazon Cloudfront.svg","categories":["CDN"]},{"name":"Amazon Web Services","description":"Amazon Web Services (AWS) is a comprehensive cloud services platform offering compute power, database storage, content delivery and other functionality.","website":"https://aws.amazon.com/","common_platform_enumeration":"","icon":"Amazon Web Services.svg","categories":["PaaS"]}],"data":{"size":1184,"size_decoded":1177,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text","md5":"88060275f91e485227b1e04e78b0990a","sha1":"2942fb7c90cf47a7ddccf2fe184c251de5b41eee","sha256":"3896aeafd5c4a92f02c7ebacdeb2ef10a94824f85ec2151e13b8ef8d5120680e","sha512":"1e00f932c473c0cf9fc137cf1b9b24db9b62dc435bf419328fab8ebb579b043819a14a52494026f044432ac0db8b06097f29b4ebd4d6996f3e69e4f116280b15","ssdeep":"","tlshash":"3521c9471c63a4797ad5727b8b3f88ad3998a2432004cc10bc8dd4681f909e20a9eee4","first_seen":"2026-07-27T08:49:19.83817Z","last_seen":"2026-07-27T10:54:16.514464Z","times_seen":3,"resource_available":false,"data":"CiAgICAgICAgKGZ1bmN0aW9uKGQsIHMsIGlkLCB3LCBuKSB7CiAgICAgICAgICAgIHcuX19zc2MgPSB3Ll9fc3NjIHx8IHt9OwogICAgICAgICAgICB3Ll9fc3NjLmxpY2Vuc2UgPSAnZzExZGhhMyc7CiAgICAgICAgICAgIGlmICh3LnNzcSkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBuID0gdy5zc3EgPSBmdW5jdGlvbigpIHtuLmNhbGxNZXRob2Q/bi5jYWxsTWV0aG9kLmFwcGx5KG4sYXJndW1lbnRzKTpuLnF1ZXVlLnB1c2goYXJndW1lbnRzKX07CiAgICAgICAgICAgIG4ucHVzaD1uO24ubG9hZGVkPSEwO24ucXVldWU9W107CiAgICAgICAgICAgIHZhciBqcywgc2pzID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZShzKVswXTsKICAgICAgICAgICAgaWYgKGQuZ2V0RWxlbWVudEJ5SWQoaWQpKSByZXR1cm47CiAgICAgICAgICAgIGpzID0gZC5jcmVhdGVFbGVtZW50KHMpOyBqcy5pZCA9IGlkOwogICAgICAgICAgICB2YXIgZGVVcmwgPSBhdG9iKCdhSFIwY0hNNkx5OXdiSFZuYVc0dFkyOWtaUzV6WVd4bGMyMWhjblJzZVM1amIyMD0nKSwgcGF0aCA9ICcvY2hhdC93aWRnZXQvY29kZS9pbnN0YWxsLmpzJzsKICAgICAgICAgICAgdmFyIGNzID0gZC5jdXJyZW50U2NyaXB0LCBjc1VybCA9IGRlVXJsOwogICAgICAgICAgICBpZiAoY3MgJiYgY3Muc3JjKSB7dmFyIHNjcmlwdFVSTCA9IG5ldyBVUkwoY3Muc3JjKTsgY3NVcmwgPSBzY3JpcHRVUkwub3JpZ2luO30KICAgICAgICAgICAganMuc3JjID0gY3NVcmwgKyBwYXRoOwogICAgICAgICAgICBzanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIHNqcyk7CiAgICAgICAgICAgIGpzLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmIChkLmdldEVsZW1lbnRCeUlkKGlkKSkge3ZhciBlbCA9IGQuZ2V0RWxlbWVudEJ5SWQoaWQpOyBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTt9CiAgICAgICAgICAgICAgICB2YXIgbmV3SnMgPSBkLmNyZWF0ZUVsZW1lbnQocyk7IG5ld0pzLmlkID0gaWQ7CiAgICAgICAgICAgICAgICBuZXdKcy5zcmMgPSBkZVVybCArIHBhdGg7CiAgICAgICAgICAgICAgICBzanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3SnMsIHNqcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KGRvY3VtZW50LCAnc2NyaXB0JywgJ3NzLWNoYXQnLCB3aW5kb3cpKTsKICAgICAgICA="}},"time_used":37,"timings":{"blocked":-1,"dns":3,"connect":8,"send":0,"wait":10,"receive":0,"ssl":15},"alerts":{"ids":null,"analyzer":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/css/app.221a8ea1.css","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.553Z","timestamp":1785149590553,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/css/app.221a8ea1.css HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=0\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\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: text/css\r\nlast-modified: Fri, 14 Jan 2022 14:17:18 GMT\r\nvary: Accept-Encoding\r\netag: W/\"61e185ee-2f111\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":192785,"size_decoded":30195,"mime_type":"text/css","magic":"Unicode text, UTF-8 text, with very long lines (58203), with CRLF line terminators","md5":"66e320b89ffbded60302475ebce092af","sha1":"6f1a9fc7090aea8c7cc3ba4c46aa47c7dd70cada","sha256":"7780b6d7b9d1ffabc388526971ef39c0b7b179cfd058f9b5e95cf70bb68e7ab3","sha512":"b8aa4c229c91001fe757b98b38217e82189ee25c66974a407ed17ffa64a48f8f4d3e3062bee1d0a8feb76cab70e4a73570eaa1fd8fbaf9ba2d24284625cbb58d","ssdeep":"3072:ikZzwg1sA/kiDT36yo5prSeZ0ITxBBY4JLHkAZMSDpL+0Aul38vAPcCGcB3GBGEG:ikZzwg1sA/kiDT36yo5prSeZ0ITxBBYI","tlshash":"af14a720b658102ab13bc26374d4bddd3124e797a16256fefa81392dce836d6377370a","first_seen":"2026-07-27T08:49:19.827823Z","last_seen":"2026-07-27T10:54:16.51134Z","times_seen":3,"resource_available":false,"data":"QGNoYXJzZXQgIlVURi04IjsuZmxleHtmbGV4LWRpcmVjdGlvbjpyb3d9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVue2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5mbGV4LWFsbHtmbGV4OjF9I2FwcCAuZWwtc2xpZGVyX19ydW53YXl7YmFja2dyb3VuZC1jb2xvcjojMmUzMjQ0fS5mciAuaWNvbi14aWF6YWlhcHBbZGF0YS12LTVkNTA5MDFkXXtmb250LXNpemU6MThweDttYXJnaW4tdG9wOjB9LmN1c3RvbS1zZXJ2aWNlW2RhdGEtdi01ZDUwOTAxZF06aG92ZXIsLmZyIC5pY29uLXhpYXphaWFwcFtkYXRhLXYtNWQ1MDkwMWRdOmhvdmVye2NvbG9yOiMwMGE0ZDh9Lm1yNVtkYXRhLXYtNWQ1MDkwMWRde21hcmdpbi1yaWdodDo1cHh9Lm1yMTBbZGF0YS12LTVkNTA5MDFkXXttYXJnaW4tcmlnaHQ6MTBweH0ubmF2LWxpc3QtYVtkYXRhLXYtNWQ1MDkwMWRde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyfS5mciAuZWwtaWNvbi1zdW5ueVtkYXRhLXYtNWQ1MDkwMWRde2NvbG9yOiNmMzkwNDk7bWFyZ2luOjAgMTJweH0uZnIgLmVsLWljb24tbW9vbltkYXRhLXYtNWQ1MDkwMWRde2NvbG9yOiNkNWI0MzM7bWFyZ2luOjAgMTJweH0uZGF5IC5uYXZfYmFyW2RhdGEtdi01ZDUwOTAxZF17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC44NSl9Lmljb24temhhbmthaVtkYXRhLXYtNWQ1MDkwMWRde3RyYW5zaXRpb246YWxsIC4ycztmb250LXNpemU6MTRweH0uaWNvbi16aGFua2FpLm9wZW5bZGF0YS12LTVkNTA5MDFkXXt0cmFuc2Zvcm06c2NhbGUoLjkpIHJvdGF0ZSg0NTBkZWcpIWltcG9ydGFudH0uaWNvbi16aGFua2FpLmNsb3NlW2RhdGEtdi01ZDUwOTAxZF17dHJhbnNmb3JtOnNjYWxlKC45KSByb3RhdGUoMTgwZGVnKSFpbXBvcnRhbnR9LmFjY291bnRfbG9naW5bZGF0YS12LTVkNTA5MDFkXTpob3ZlciwuY2hvb3NlbGFuZy13cmFwW2RhdGEtdi01ZDUwOTAxZF06aG92ZXJ7Y29sb3I6IzAwYTRkOH0ubmF2X2JhcltkYXRhLXYtNWQ1MDkwMWRde2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ5cHg7d2lkdGg6MTAwJTttaW4td2lkdGg6MTIwMHB4O3BhZGRpbmc6MCAyMHB4O2JhY2tncm91bmQ6IzE4MWQyNTtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZfYmFyIC5iYXNlIGFbZGF0YS12LTVkNTA5MDFkXXtkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0OHB4fS5uYXZfYmFyIC5iYXNlIC5yb3V0ZXItbGluay1hY3RpdmVbZGF0YS12LTVkNTA5MDFkXSwubmF2X2JhciAuYmFzZSBhW2RhdGEtdi01ZDUwOTAxZF06aG92ZXJ7Y29sb3I6IzAwYTRkODtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMDBhNGQ4fS5uYXZfYmFyIC5sb2dpbltkYXRhLXYtNWQ1MDkwMWRde2ZvbnQtc2l6ZToxNHB4fS5uYXZfYmFyIC5sb2dpbiAucm91dGVyLWxpbmstYWN0aXZlW2RhdGEtdi01ZDUwOTAxZF0sLm5hdl9iYXIgLmxvZ2luIGFbZGF0YS12LTVkNTA5MDFkXTpob3Zlcntjb2xvcjojMDBhNGQ4fS5uYXZfYmFyIC5jb250ZW50W2RhdGEtdi01ZDUwOTAxZF17bWFyZ2luOjAgYXV0b30ubmF2X2JhciAucm91dGVyLWxpbmstYWN0aXZlW2RhdGEtdi01ZDUwOTAxZF17Y29sb3I6IzdhOThmN30ubmF2X2JhciAubXNnX3dyYXBbZGF0YS12LTVkNTA5MDFkXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5uYXZfYmFyIC5tc2dfd3JhcD5kaXZbZGF0YS12LTVkNTA5MDFkXXttYXJnaW46MCAxMHB4fS5uYXZfYmFyIC5pY29uX2ltZ1tkYXRhLXYtNWQ1MDkwMWRde3dpZHRoOjE1cHh9Lm5hdl9iYXIgLmFzc2V0c19pY29uX2ltZ1tkYXRhLXYtNWQ1MDkwMWRdLC5uYXZfYmFyIC5vcmRlcl9pY29uX2ltZ1tkYXRhLXYtNWQ1MDkwMWRde3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHh9Lm5hdl9iYXIgLnNwW2RhdGEtdi01ZDUwOTAxZF17bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDRweH0ubmF2X2JhciAubmF2YmFyLWxvZ29bZGF0YS12LTVkNTA5MDFkXXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm5hdl9iYXIgLmFjY291bnRfbG9naW5bZGF0YS12LTVkNTA5MDFkXSwubmF2X2JhciAuYXNzZXRzX2l0ZW1bZGF0YS12LTVkNTA5MDFkXSwubmF2X2JhciAub3JkZXJfaXRlbVtkYXRhLXYtNWQ1MDkwMWRde2ZvbnQtc2l6ZToxNHB4fS5uYXZfYmFyIC5hc3NldHNfaXRlbVtkYXRhLXYtNWQ1MDkwMWRdLC5uYXZfYmFyIC5vcmRlcl9pdGVtW2RhdGEtdi01ZDUwOTAxZF17aGVpZ2h0OjQ4cHg7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubmF2X2JhciAubGFuZy1jaG9vc2VbZGF0YS12LTVkNTA5MDFkXXtkaXNwbGF5Om5vbmU7Y3Vyc29yOmRlZmF1bHQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQ4cHg7cmlnaHQ6LTQ0cHg7ei1pbmRleDo5OTk7d2lkdGg6MTg4cHg7bGluZS1oZWlnaHQ6NDBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDo1MDAwO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAwIDJweCA0cHggcmdiYSgwLDAsMCwuMil9Lm5hdl9iYXIgLmxhbmctY2hvb3NlIHBbZGF0YS12LTVkNTA5MDFkXXtwYWRkaW5nLWxlZnQ6MjBweH0ubmF2X2JhciAubGFuZy1jaG9vc2UgcCBpbWdbZGF0YS12LTVkNTA5MDFkXXt3aWR0aDoxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXZfYmFyIC5sYW5nLWNob29zZSBwIGltZ1tkYXRhLXYtNWQ1MDkwMWRdOm50aC1jaGlsZCgyKXtkaXNwbGF5Om5vbmV9Lm5hdl9iYXIgLmxhbmctY2hvb3NlIHBbZGF0YS12LTVkNTA5MDFkXTpob3Zlcntjb2xvcjojMDBhNGQ4O2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDIsMjQ2LDI1MCwuNykhaW1wb3J0YW50fS5uYXZfYmFyIC5sYW5nLWNob29zZSBwOmhvdmVyIGltZ1tkYXRhLXYtNWQ1MDkwMWRdOm50aC1jaGlsZCgyKXtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2X2JhciAuYWNjb3VudC1jaG9vc2VbZGF0YS12LTVkNTA5MDFkXXtjdXJzb3I6ZGVmYXVsdDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDhweDtyaWdodDotNDRweDt6LWluZGV4Ojk5OTt3aWR0aDoxODhweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQtY29sb3I6IzE4MWQyNTt6LWluZGV4OjUwMDA7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMnB4IDRweCByZ2JhKDAsMCwwLC4yKX0ubmF2X2JhciAuYWNjb3VudC1jaG9vc2UgcFtkYXRhLXYtNWQ1MDkwMWRde3BhZGRpbmctbGVmdDoyMHB4fS5uYXZfYmFyIC5hY2NvdW50LWNob29zZSBwIGltZ1tkYXRhLXYtNWQ1MDkwMWRde3dpZHRoOjE0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdl9iYXIgLmFjY291bnQtY2hvb3NlIHAgaW1nW2RhdGEtdi01ZDUwOTAxZF06bnRoLWNoaWxkKDIpe2Rpc3BsYXk6bm9uZX0ubmF2X2JhciAuYWNjb3VudC1jaG9vc2UgcFtkYXRhLXYtNWQ1MDkwMWRdOmhvdmVye2NvbG9yOiMwMGE0ZDg7YmFja2dyb3VuZC1jb2xvcjojMzAzMjNjfS5uYXZfYmFyIC5hY2NvdW50LWNob29zZSBwOmhvdmVyIGltZ1tkYXRhLXYtNWQ1MDkwMWRdOm50aC1jaGlsZCgyKXtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2X2JhciAuYWNjb3VudC1jaG9vc2UgcDpob3ZlciBpbWdbZGF0YS12LTVkNTA5MDFkXTpmaXJzdC1jaGlsZHtkaXNwbGF5Om5vbmV9Lm5hdl9iYXIgLmFzc2V0LWNob29zZVtkYXRhLXYtNWQ1MDkwMWRde2N1cnNvcjpkZWZhdWx0O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0OHB4O3JpZ2h0OjE1NnB4O3dpZHRoOjE4OHB4O2xpbmUtaGVpZ2h0OjQwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO3otaW5kZXg6NTAwMDtib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMCAycHggNHB4IHJnYmEoMCwwLDAsLjIpfS5uYXZfYmFyIC5hc3NldC1jaG9vc2UgcFtkYXRhLXYtNWQ1MDkwMWRde3BhZGRpbmctbGVmdDoyMHB4fS5uYXZfYmFyIC5hc3NldC1jaG9vc2UgcCBpbWdbZGF0YS12LTVkNTA5MDFkXXt3aWR0aDoxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6OHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXZfYmFyIC5hc3NldC1jaG9vc2UgcCBpbWdbZGF0YS12LTVkNTA5MDFkXTpudGgtY2hpbGQoMil7ZGlzcGxheTpub25lfS5uYXZfYmFyIC5hc3NldC1jaG9vc2UgcFtkYXRhLXYtNWQ1MDkwMWRdOmhvdmVye2NvbG9yOiM1Njk3ZjQ7YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhfS5uYXZfYmFyIC5hc3NldC1jaG9vc2UgcDpob3ZlciBpbWdbZGF0YS12LTVkNTA5MDFkXTpudGgtY2hpbGQoMil7ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdl9iYXIgLmFzc2V0LWNob29zZSBwOmhvdmVyIGltZ1tkYXRhLXYtNWQ1MDkwMWRdOmZpcnN0LWNoaWxke2Rpc3BsYXk6bm9uZX0ubmF2X2JhciAub3JkZXItY2hvb3NlW2RhdGEtdi01ZDUwOTAxZF17Y3Vyc29yOmRlZmF1bHQ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQ4cHg7cmlnaHQ6NTZweDt3aWR0aDoxODhweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQtY29sb3I6IzI2MmE0Mjt6LWluZGV4OjUwMDA7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMnB4IDRweCByZ2JhKDAsMCwwLC4yKX0ubmF2X2JhciAub3JkZXItY2hvb3NlIHBbZGF0YS12LTVkNTA5MDFkXXtwYWRkaW5nLWxlZnQ6MjBweH0ubmF2X2JhciAub3JkZXItY2hvb3NlIHAgaW1nW2RhdGEtdi01ZDUwOTAxZF17d2lkdGg6MTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9ja30ubmF2X2JhciAub3JkZXItY2hvb3NlIHAgaW1nW2RhdGEtdi01ZDUwOTAxZF06bnRoLWNoaWxkKDIpe2Rpc3BsYXk6bm9uZX0ubmF2X2JhciAub3JkZXItY2hvb3NlIHBbZGF0YS12LTVkNTA5MDFkXTpob3Zlcntjb2xvcjojNTY5N2Y0O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0ubmF2X2JhciAub3JkZXItY2hvb3NlIHA6aG92ZXIgaW1nW2RhdGEtdi01ZDUwOTAxZF06bnRoLWNoaWxkKDIpe2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXZfYmFyIC5vcmRlci1jaG9vc2UgcDpob3ZlciBpbWdbZGF0YS12LTVkNTA5MDFkXTpmaXJzdC1jaGlsZHtkaXNwbGF5Om5vbmV9Lm5hdl9iYXIgLm5hdmJhci1pdGVtW2RhdGEtdi01ZDUwOTAxZF17Y29sb3I6I2NkZDZlNH0ubmF2X2JhciAubmF2YmFyLWl0ZW0gbGlbZGF0YS12LTVkNTA5MDFkXXtmbG9hdDpsZWZ0O2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7cGFkZGluZzowIDExcHg7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTRweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojYzdjY2U2fS5uYXZfYmFyIC5uYXZiYXItaXRlbSBsaS5hY3RpdmVbZGF0YS12LTVkNTA5MDFkXXtjb2xvcjojMDBhNGQ4O2JvcmRlcjpub25lfS5uYXZfYmFyIC5sb2dpbltkYXRhLXYtNWQ1MDkwMWRde2NvbG9yOiNjZGQ2ZTR9Lm5hdl9iYXIgLmxvZ2luIHNwYW5bZGF0YS12LTVkNTA5MDFkXXtjdXJzb3I6cG9pbnRlcn0ubmF2X2JhciAubG9naW4gLm1sMjBbZGF0YS12LTVkNTA5MDFkXXttYXJnaW4tbGVmdDoyMHB4fS5kb3duYXBwW2RhdGEtdi01ZDUwOTAxZF17cG9zaXRpb246cmVsYXRpdmV9LmRvd25hcHAgLmFwcGNvZGVbZGF0YS12LTVkNTA5MDFkXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTBweDt6LWluZGV4OjEwO2xlZnQ6LTgwcHg7d2lkdGg6MjYwcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDoxNDBweDtib3JkZXItcmFkaXVzOjRweH0uZG93bmFwcCAuYXBwY29kZSBzcGFuW2RhdGEtdi01ZDUwOTAxZF17cG9zaXRpb246YWJzb2x1dGU7dG9wOi0yMHB4O2xlZnQ6MTMwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItd2lkdGg6MTBweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNmZmYgdHJhbnNwYXJlbnR9LmRvd25hcHAgLmFwcGNvZGUgLmFwcC1sZWZ0W2RhdGEtdi01ZDUwOTAxZF17d2lkdGg6MTMwcHg7ZmxvYXQ6bGVmdDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uZG93bmFwcCAuYXBwY29kZSAuYXBwLWxlZnQgLmNvZGVbZGF0YS12LTVkNTA5MDFkXXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NXB4O2xlZnQ6MTBweH0uZG93bmFwcCAuYXBwY29kZSAuYXBwLWxlZnQgLmNvZGUgaW1nW2RhdGEtdi01ZDUwOTAxZF17d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4fS5kb3duYXBwIC5hcHBjb2RlIC5hcHAtbGVmdCAuY29kZSBwW2RhdGEtdi01ZDUwOTAxZF06bGFzdC1jaGlsZHtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MH0uZG93bmFwcCAuYXBwY29kZSAuYXBwLXJpZ2h0W2RhdGEtdi01ZDUwOTAxZF17ZmxvYXQ6cmlnaHQ7d2lkdGg6MTEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLXJpZ2h0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4O21hcmdpbi10b3A6NXB4fS5kb3duYXBwIC5hcHBjb2RlIC5hcHAtcmlnaHQgcFtkYXRhLXYtNWQ1MDkwMWRde3RvcDotMTBweH0uZG93bmFwcCAuYXBwY29kZSAuYXBwLXJpZ2h0IHAgaW1nW2RhdGEtdi01ZDUwOTAxZF17d2lkdGg6MjBweDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NHB4O21hcmdpbi10b3A6MH0uZG93bmFwcCAuYXBwY29kZSAuYXBwLXJpZ2h0IGltZ1tkYXRhLXYtNWQ1MDkwMWRde3dpZHRoOjQwcHg7bWFyZ2luLXRvcDozMHB4fS5kb3duYXBwIC5hcHBjb2RlIC5hcHAtcmlnaHQgYltkYXRhLXYtNWQ1MDkwMWRde2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwcHg7aGVpZ2h0OjEwMHB4O2JvcmRlcjoxcHggc29saWQgI2Y3ZjZmNjt0ZXh0LWFsaWduOmNlbnRlcjt0b3A6MDtib3JkZXItcmFkaXVzOjRweH0uZG93bmFwcCAuYXBwY29kZSAudGV4dHNbZGF0YS12LTVkNTA5MDFkXXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTMwcHg7Y29sb3I6IzMzM30ucmVnaXN0ZXJfYnRuW2RhdGEtdi01ZDUwOTAxZF17Ym9yZGVyOjFweCBzb2xpZCAjMDBhNGQ4O3BhZGRpbmc6MCAxNnB4O2xpbmUtaGVpZ2h0OjI4cHg7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjE0cHh9LnJlZ2lzdGVyX2J0bltkYXRhLXYtNWQ1MDkwMWRdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwYTRkODtjb2xvcjojZmZmfS8qIQ0KQW5pbWF0ZS5jc3MgLSBodHRwOi8vZGFuZWRlbi5tZS9hbmltYXRlDQpMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgLSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUDQoNCkNvcHlyaWdodCAoYykgMjAxNSBEYW5pZWwgRWRlbg0KKi8uYW5pbWF0ZWR7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246MXM7YW5pbWF0aW9uLWR1cmF0aW9uOjFzOy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTpib3RoO2FuaW1hdGlvbi1maWxsLW1vZGU6Ym90aH0uYW5pbWF0ZWQuaW5maW5pdGV7LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGV9LmFuaW1hdGVkLmhpbmdley13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOjJzO2FuaW1hdGlvbi1kdXJhdGlvbjoyc31ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlezAlLDIwJSw1MyUsODAlLHRve3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfTQwJSw0MyV7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC43NTUsLjA1LC44NTUsLjA2KTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMzBweCwwKX03MCV7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC43NTUsLjA1LC44NTUsLjA2KTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMTVweCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTRweCwwKX19QGtleWZyYW1lcyBib3VuY2V7MCUsMjAlLDUzJSw4MCUsdG97dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yMTUsLjYxLC4zNTUsMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9NDAlLDQzJXt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjc1NSwuMDUsLjg1NSwuMDYpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0zMHB4LDApfTcwJXt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjc1NSwuMDUsLjg1NSwuMDYpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xNXB4LDApfTkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtNHB4LDApfX0uYm91bmNley13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlO2FuaW1hdGlvbi1uYW1lOmJvdW5jZTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBib3R0b219QC13ZWJraXQta2V5ZnJhbWVzIGZsYXNoezAlLDUwJSx0b3tvcGFjaXR5OjF9MjUlLDc1JXtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgZmxhc2h7MCUsNTAlLHRve29wYWNpdHk6MX0yNSUsNzUle29wYWNpdHk6MH19LmZsYXNoey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Zmxhc2g7YW5pbWF0aW9uLW5hbWU6Zmxhc2h9QC13ZWJraXQta2V5ZnJhbWVzIHB1bHNlezAle3RyYW5zZm9ybTpzY2FsZVgoMSl9NTAle3RyYW5zZm9ybTpzY2FsZTNkKDEuMDUsMS4wNSwxLjA1KX10b3t0cmFuc2Zvcm06c2NhbGVYKDEpfX1Aa2V5ZnJhbWVzIHB1bHNlezAle3RyYW5zZm9ybTpzY2FsZVgoMSl9NTAle3RyYW5zZm9ybTpzY2FsZTNkKDEuMDUsMS4wNSwxLjA1KX10b3t0cmFuc2Zvcm06c2NhbGVYKDEpfX0ucHVsc2V7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpwdWxzZTthbmltYXRpb24tbmFtZTpwdWxzZX1ALXdlYmtpdC1rZXlmcmFtZXMgcnViYmVyQmFuZHswJXt0cmFuc2Zvcm06c2NhbGVYKDEpfTMwJXt0cmFuc2Zvcm06c2NhbGUzZCgxLjI1LC43NSwxKX00MCV7dHJhbnNmb3JtOnNjYWxlM2QoLjc1LDEuMjUsMSl9NTAle3RyYW5zZm9ybTpzY2FsZTNkKDEuMTUsLjg1LDEpfTY1JXt0cmFuc2Zvcm06c2NhbGUzZCguOTUsMS4wNSwxKX03NSV7dHJhbnNmb3JtOnNjYWxlM2QoMS4wNSwuOTUsMSl9dG97dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyBydWJiZXJCYW5kezAle3RyYW5zZm9ybTpzY2FsZVgoMSl9MzAle3RyYW5zZm9ybTpzY2FsZTNkKDEuMjUsLjc1LDEpfTQwJXt0cmFuc2Zvcm06c2NhbGUzZCguNzUsMS4yNSwxKX01MCV7dHJhbnNmb3JtOnNjYWxlM2QoMS4xNSwuODUsMSl9NjUle3RyYW5zZm9ybTpzY2FsZTNkKC45NSwxLjA1LDEpfTc1JXt0cmFuc2Zvcm06c2NhbGUzZCgxLjA1LC45NSwxKX10b3t0cmFuc2Zvcm06c2NhbGVYKDEpfX0ucnViYmVyQmFuZHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnJ1YmJlckJhbmQ7YW5pbWF0aW9uLW5hbWU6cnViYmVyQmFuZH1ALXdlYmtpdC1rZXlmcmFtZXMgc2hha2V7MCUsdG97dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9MTAlLDMwJSw1MCUsNzAlLDkwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwcHgsMCwwKX0yMCUsNDAlLDYwJSw4MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwcHgsMCwwKX19QGtleWZyYW1lcyBzaGFrZXswJSx0b3t0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0xMCUsMzAlLDUwJSw3MCUsOTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTBweCwwLDApfTIwJSw0MCUsNjAlLDgwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTBweCwwLDApfX0uc2hha2V7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpzaGFrZTthbmltYXRpb24tbmFtZTpzaGFrZX1ALXdlYmtpdC1rZXlmcmFtZXMgc3dpbmd7MjAle3RyYW5zZm9ybTpyb3RhdGUoMTVkZWcpfTQwJXt0cmFuc2Zvcm06cm90YXRlKC0xMGRlZyl9NjAle3RyYW5zZm9ybTpyb3RhdGUoNWRlZyl9ODAle3RyYW5zZm9ybTpyb3RhdGUoLTVkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9fUBrZXlmcmFtZXMgc3dpbmd7MjAle3RyYW5zZm9ybTpyb3RhdGUoMTVkZWcpfTQwJXt0cmFuc2Zvcm06cm90YXRlKC0xMGRlZyl9NjAle3RyYW5zZm9ybTpyb3RhdGUoNWRlZyl9ODAle3RyYW5zZm9ybTpyb3RhdGUoLTVkZWcpfXRve3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9fS5zd2luZ3t0cmFuc2Zvcm0tb3JpZ2luOnRvcCBjZW50ZXI7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpzd2luZzthbmltYXRpb24tbmFtZTpzd2luZ31ALXdlYmtpdC1rZXlmcmFtZXMgdGFkYXswJXt0cmFuc2Zvcm06c2NhbGVYKDEpfTEwJSwyMCV7dHJhbnNmb3JtOnNjYWxlM2QoLjksLjksLjkpIHJvdGF0ZSgtM2RlZyl9MzAlLDUwJSw3MCUsOTAle3RyYW5zZm9ybTpzY2FsZTNkKDEuMSwxLjEsMS4xKSByb3RhdGUoM2RlZyl9NDAlLDYwJSw4MCV7dHJhbnNmb3JtOnNjYWxlM2QoMS4xLDEuMSwxLjEpIHJvdGF0ZSgtM2RlZyl9dG97dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyB0YWRhezAle3RyYW5zZm9ybTpzY2FsZVgoMSl9MTAlLDIwJXt0cmFuc2Zvcm06c2NhbGUzZCguOSwuOSwuOSkgcm90YXRlKC0zZGVnKX0zMCUsNTAlLDcwJSw5MCV7dHJhbnNmb3JtOnNjYWxlM2QoMS4xLDEuMSwxLjEpIHJvdGF0ZSgzZGVnKX00MCUsNjAlLDgwJXt0cmFuc2Zvcm06c2NhbGUzZCgxLjEsMS4xLDEuMSkgcm90YXRlKC0zZGVnKX10b3t0cmFuc2Zvcm06c2NhbGVYKDEpfX0udGFkYXstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnRhZGE7YW5pbWF0aW9uLW5hbWU6dGFkYX1ALXdlYmtpdC1rZXlmcmFtZXMgd29iYmxlezAle3RyYW5zZm9ybTpub25lfTE1JXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTI1JSwwLDApIHJvdGF0ZSgtNWRlZyl9MzAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMCUsMCwwKSByb3RhdGUoM2RlZyl9NDUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTUlLDAsMCkgcm90YXRlKC0zZGVnKX02MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwJSwwLDApIHJvdGF0ZSgyZGVnKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01JSwwLDApIHJvdGF0ZSgtMWRlZyl9dG97dHJhbnNmb3JtOm5vbmV9fUBrZXlmcmFtZXMgd29iYmxlezAle3RyYW5zZm9ybTpub25lfTE1JXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTI1JSwwLDApIHJvdGF0ZSgtNWRlZyl9MzAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMCUsMCwwKSByb3RhdGUoM2RlZyl9NDUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTUlLDAsMCkgcm90YXRlKC0zZGVnKX02MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwJSwwLDApIHJvdGF0ZSgyZGVnKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01JSwwLDApIHJvdGF0ZSgtMWRlZyl9dG97dHJhbnNmb3JtOm5vbmV9fS53b2JibGV7LXdlYmtpdC1hbmltYXRpb24tbmFtZTp3b2JibGU7YW5pbWF0aW9uLW5hbWU6d29iYmxlfUAtd2Via2l0LWtleWZyYW1lcyBib3VuY2VJbnswJSwyMCUsNDAlLDYwJSw4MCUsdG97dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yMTUsLjYxLC4zNTUsMSl9MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4zLC4zLC4zKX0yMCV7dHJhbnNmb3JtOnNjYWxlM2QoMS4xLDEuMSwxLjEpfTQwJXt0cmFuc2Zvcm06c2NhbGUzZCguOSwuOSwuOSl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCgxLjAzLDEuMDMsMS4wMyl9ODAle3RyYW5zZm9ybTpzY2FsZTNkKC45NywuOTcsLjk3KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyBib3VuY2VJbnswJSwyMCUsNDAlLDYwJSw4MCUsdG97dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yMTUsLjYxLC4zNTUsMSl9MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4zLC4zLC4zKX0yMCV7dHJhbnNmb3JtOnNjYWxlM2QoMS4xLDEuMSwxLjEpfTQwJXt0cmFuc2Zvcm06c2NhbGUzZCguOSwuOSwuOSl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCgxLjAzLDEuMDMsMS4wMyl9ODAle3RyYW5zZm9ybTpzY2FsZTNkKC45NywuOTcsLjk3KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX19LmJvdW5jZUluey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlSW47YW5pbWF0aW9uLW5hbWU6Ym91bmNlSW47LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246Ljc1czthbmltYXRpb24tZHVyYXRpb246Ljc1c31ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlSW5Eb3duezAlLDYwJSw3NSUsOTAlLHRve3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMzAwMHB4LDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMjVweCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTEwcHgsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDVweCwwKX10b3t0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBib3VuY2VJbkRvd257MCUsNjAlLDc1JSw5MCUsdG97dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yMTUsLjYxLC4zNTUsMSl9MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0zMDAwcHgsMCl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwyNXB4LDApfTc1JXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMTBweCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsNXB4LDApfXRve3RyYW5zZm9ybTpub25lfX0uYm91bmNlSW5Eb3duey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlSW5Eb3duO2FuaW1hdGlvbi1uYW1lOmJvdW5jZUluRG93bn1ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlSW5MZWZ0ezAlLDYwJSw3NSUsOTAlLHRve3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTMwMDBweCwwLDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDI1cHgsMCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMHB4LDAsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCg1cHgsMCwwKX10b3t0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBib3VuY2VJbkxlZnR7MCUsNjAlLDc1JSw5MCUsdG97dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4yMTUsLjYxLC4zNTUsMSl9MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMzAwMHB4LDAsMCl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMjVweCwwLDApfTc1JXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwcHgsMCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDVweCwwLDApfXRve3RyYW5zZm9ybTpub25lfX0uYm91bmNlSW5MZWZ0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlSW5MZWZ0O2FuaW1hdGlvbi1uYW1lOmJvdW5jZUluTGVmdH1ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlSW5SaWdodHswJSw2MCUsNzUlLDkwJSx0b3t0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjIxNSwuNjEsLjM1NSwxKX0wJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDMwMDBweCwwLDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0yNXB4LDAsMCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMHB4LDAsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNXB4LDAsMCl9dG97dHJhbnNmb3JtOm5vbmV9fUBrZXlmcmFtZXMgYm91bmNlSW5SaWdodHswJSw2MCUsNzUlLDkwJSx0b3t0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjIxNSwuNjEsLjM1NSwxKX0wJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDMwMDBweCwwLDApfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0yNXB4LDAsMCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMHB4LDAsMCl9OTAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNXB4LDAsMCl9dG97dHJhbnNmb3JtOm5vbmV9fS5ib3VuY2VJblJpZ2h0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlSW5SaWdodDthbmltYXRpb24tbmFtZTpib3VuY2VJblJpZ2h0fUAtd2Via2l0LWtleWZyYW1lcyBib3VuY2VJblVwezAlLDYwJSw3NSUsOTAlLHRve3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwzMDAwcHgsMCl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMTBweCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTVweCwwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX19QGtleWZyYW1lcyBib3VuY2VJblVwezAlLDYwJSw3NSUsOTAlLHRve3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMjE1LC42MSwuMzU1LDEpfTAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwzMDAwcHgsMCl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKX03NSV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMTBweCwwKX05MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTVweCwwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX19LmJvdW5jZUluVXB7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpib3VuY2VJblVwO2FuaW1hdGlvbi1uYW1lOmJvdW5jZUluVXB9QC13ZWJraXQta2V5ZnJhbWVzIGJvdW5jZU91dHsyMCV7dHJhbnNmb3JtOnNjYWxlM2QoLjksLjksLjkpfTUwJSw1NSV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKDEuMSwxLjEsMS4xKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjMsLjMsLjMpfX1Aa2V5ZnJhbWVzIGJvdW5jZU91dHsyMCV7dHJhbnNmb3JtOnNjYWxlM2QoLjksLjksLjkpfTUwJSw1NSV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKDEuMSwxLjEsMS4xKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjMsLjMsLjMpfX0uYm91bmNlT3V0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlT3V0O2FuaW1hdGlvbi1uYW1lOmJvdW5jZU91dDstd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjouNzVzO2FuaW1hdGlvbi1kdXJhdGlvbjouNzVzfUAtd2Via2l0LWtleWZyYW1lcyBib3VuY2VPdXREb3duezIwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwxMHB4LDApfTQwJSw0NSV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwyMDAwcHgsMCl9fUBrZXlmcmFtZXMgYm91bmNlT3V0RG93bnsyMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMTBweCwwKX00MCUsNDUle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMjAwMHB4LDApfX0uYm91bmNlT3V0RG93bnstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmJvdW5jZU91dERvd247YW5pbWF0aW9uLW5hbWU6Ym91bmNlT3V0RG93bn1ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlT3V0TGVmdHsyMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMHB4LDAsMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMjAwMHB4LDAsMCl9fUBrZXlmcmFtZXMgYm91bmNlT3V0TGVmdHsyMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMHB4LDAsMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMjAwMHB4LDAsMCl9fS5ib3VuY2VPdXRMZWZ0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6Ym91bmNlT3V0TGVmdDthbmltYXRpb24tbmFtZTpib3VuY2VPdXRMZWZ0fUAtd2Via2l0LWtleWZyYW1lcyBib3VuY2VPdXRSaWdodHsyMCV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMjBweCwwLDApfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMjAwMHB4LDAsMCl9fUBrZXlmcmFtZXMgYm91bmNlT3V0UmlnaHR7MjAle29wYWNpdHk6MTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTIwcHgsMCwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDIwMDBweCwwLDApfX0uYm91bmNlT3V0UmlnaHR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpib3VuY2VPdXRSaWdodDthbmltYXRpb24tbmFtZTpib3VuY2VPdXRSaWdodH1ALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlT3V0VXB7MjAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMHB4LDApfTQwJSw0NSV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDIwcHgsMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMDAwcHgsMCl9fUBrZXlmcmFtZXMgYm91bmNlT3V0VXB7MjAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMHB4LDApfTQwJSw0NSV7b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDIwcHgsMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMDAwcHgsMCl9fS5ib3VuY2VPdXRVcHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmJvdW5jZU91dFVwO2FuaW1hdGlvbi1uYW1lOmJvdW5jZU91dFVwfUAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowfXRve29wYWNpdHk6MX19QGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowfXRve29wYWNpdHk6MX19LmZhZGVJbnstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmZhZGVJbjthbmltYXRpb24tbmFtZTpmYWRlSW59QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbkRvd257MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMDAlLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5Eb3duezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMTAwJSwwKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmV9fS5mYWRlSW5Eb3duey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZUluRG93bjthbmltYXRpb24tbmFtZTpmYWRlSW5Eb3dufUAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW5Eb3duQmlnezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjAwMHB4LDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5Eb3duQmlnezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjAwMHB4LDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19LmZhZGVJbkRvd25CaWd7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpmYWRlSW5Eb3duQmlnO2FuaW1hdGlvbi1uYW1lOmZhZGVJbkRvd25CaWd9QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJbkxlZnR7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5MZWZ0ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmV9fS5mYWRlSW5MZWZ0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZUluTGVmdDthbmltYXRpb24tbmFtZTpmYWRlSW5MZWZ0fUAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW5MZWZ0QmlnezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTIwMDBweCwwLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5MZWZ0QmlnezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTIwMDBweCwwLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19LmZhZGVJbkxlZnRCaWd7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpmYWRlSW5MZWZ0QmlnO2FuaW1hdGlvbi1uYW1lOmZhZGVJbkxlZnRCaWd9QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJblJpZ2h0ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5SaWdodHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmV9fS5mYWRlSW5SaWdodHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmZhZGVJblJpZ2h0O2FuaW1hdGlvbi1uYW1lOmZhZGVJblJpZ2h0fUAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW5SaWdodEJpZ3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDIwMDBweCwwLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5SaWdodEJpZ3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDIwMDBweCwwLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19LmZhZGVJblJpZ2h0Qmlney13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZUluUmlnaHRCaWc7YW5pbWF0aW9uLW5hbWU6ZmFkZUluUmlnaHRCaWd9QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVJblVwezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwxMDAlLDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5VcHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMTAwJSwwKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmV9fS5mYWRlSW5VcHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmZhZGVJblVwO2FuaW1hdGlvbi1uYW1lOmZhZGVJblVwfUAtd2Via2l0LWtleWZyYW1lcyBmYWRlSW5VcEJpZ3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMjAwMHB4LDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19QGtleWZyYW1lcyBmYWRlSW5VcEJpZ3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMjAwMHB4LDApfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZX19LmZhZGVJblVwQmlney13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZUluVXBCaWc7YW5pbWF0aW9uLW5hbWU6ZmFkZUluVXBCaWd9QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVPdXR7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MH19QGtleWZyYW1lcyBmYWRlT3V0ezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjB9fS5mYWRlT3V0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZU91dDthbmltYXRpb24tbmFtZTpmYWRlT3V0fUAtd2Via2l0LWtleWZyYW1lcyBmYWRlT3V0RG93bnswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDEwMCUsMCl9fUBrZXlmcmFtZXMgZmFkZU91dERvd257MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwxMDAlLDApfX0uZmFkZU91dERvd257LXdlYmtpdC1hbmltYXRpb24tbmFtZTpmYWRlT3V0RG93bjthbmltYXRpb24tbmFtZTpmYWRlT3V0RG93bn1ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZU91dERvd25CaWd7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwyMDAwcHgsMCl9fUBrZXlmcmFtZXMgZmFkZU91dERvd25CaWd7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwyMDAwcHgsMCl9fS5mYWRlT3V0RG93bkJpZ3std2Via2l0LWFuaW1hdGlvbi1uYW1lOmZhZGVPdXREb3duQmlnO2FuaW1hdGlvbi1uYW1lOmZhZGVPdXREb3duQmlnfUAtd2Via2l0LWtleWZyYW1lcyBmYWRlT3V0TGVmdHswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApfX1Aa2V5ZnJhbWVzIGZhZGVPdXRMZWZ0ezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xMDAlLDAsMCl9fS5mYWRlT3V0TGVmdHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmZhZGVPdXRMZWZ0O2FuaW1hdGlvbi1uYW1lOmZhZGVPdXRMZWZ0fUAtd2Via2l0LWtleWZyYW1lcyBmYWRlT3V0TGVmdEJpZ3swJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMjAwMHB4LDAsMCl9fUBrZXlmcmFtZXMgZmFkZU91dExlZnRCaWd7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTIwMDBweCwwLDApfX0uZmFkZU91dExlZnRCaWd7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpmYWRlT3V0TGVmdEJpZzthbmltYXRpb24tbmFtZTpmYWRlT3V0TGVmdEJpZ31ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZU91dFJpZ2h0ezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKX19QGtleWZyYW1lcyBmYWRlT3V0UmlnaHR7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApfX0uZmFkZU91dFJpZ2h0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZU91dFJpZ2h0O2FuaW1hdGlvbi1uYW1lOmZhZGVPdXRSaWdodH1ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZU91dFJpZ2h0QmlnezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDIwMDBweCwwLDApfX1Aa2V5ZnJhbWVzIGZhZGVPdXRSaWdodEJpZ3swJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgyMDAwcHgsMCwwKX19LmZhZGVPdXRSaWdodEJpZ3std2Via2l0LWFuaW1hdGlvbi1uYW1lOmZhZGVPdXRSaWdodEJpZzthbmltYXRpb24tbmFtZTpmYWRlT3V0UmlnaHRCaWd9QC13ZWJraXQta2V5ZnJhbWVzIGZhZGVPdXRVcHswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMDAlLDApfX1Aa2V5ZnJhbWVzIGZhZGVPdXRVcHswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0xMDAlLDApfX0uZmFkZU91dFVwey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZU91dFVwO2FuaW1hdGlvbi1uYW1lOmZhZGVPdXRVcH1ALXdlYmtpdC1rZXlmcmFtZXMgZmFkZU91dFVwQmlnezAle29wYWNpdHk6MX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwMDBweCwwKX19QGtleWZyYW1lcyBmYWRlT3V0VXBCaWd7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjAwMHB4LDApfX0uZmFkZU91dFVwQmlney13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmFkZU91dFVwQmlnO2FuaW1hdGlvbi1uYW1lOmZhZGVPdXRVcEJpZ31ALXdlYmtpdC1rZXlmcmFtZXMgZmxpcHswJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVkoLTF0dXJuKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dH00MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSB0cmFuc2xhdGVaKDE1MHB4KSByb3RhdGVZKC0xOTBkZWcpOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0fTUwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHRyYW5zbGF0ZVooMTUwcHgpIHJvdGF0ZVkoLTE3MGRlZyk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufTgwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHNjYWxlM2QoLjk1LC45NSwuOTUpOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbn10b3t0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbn19QGtleWZyYW1lcyBmbGlwezAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWSgtMXR1cm4pOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0fTQwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHRyYW5zbGF0ZVooMTUwcHgpIHJvdGF0ZVkoLTE5MGRlZyk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXR9NTAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgdHJhbnNsYXRlWigxNTBweCkgcm90YXRlWSgtMTcwZGVnKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW59ODAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgc2NhbGUzZCguOTUsLjk1LC45NSk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufXRve3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufX0uYW5pbWF0ZWQuZmxpcHstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6dmlzaWJsZTtiYWNrZmFjZS12aXNpYmlsaXR5OnZpc2libGU7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpmbGlwO2FuaW1hdGlvbi1uYW1lOmZsaXB9QC13ZWJraXQta2V5ZnJhbWVzIGZsaXBJblh7MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKDkwZGVnKTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO29wYWNpdHk6MH00MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKC0yMGRlZyk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbn02MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKDEwZGVnKTtvcGFjaXR5OjF9ODAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCgtNWRlZyl9dG97dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KX19QGtleWZyYW1lcyBmbGlwSW5YezAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCg5MGRlZyk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjtvcGFjaXR5OjB9NDAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCgtMjBkZWcpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW59NjAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCgxMGRlZyk7b3BhY2l0eToxfTgwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVgoLTVkZWcpfXRve3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCl9fS5mbGlwSW5Yey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudDtiYWNrZmFjZS12aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50Oy13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmxpcEluWDthbmltYXRpb24tbmFtZTpmbGlwSW5YfUAtd2Via2l0LWtleWZyYW1lcyBmbGlwSW5ZezAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWSg5MGRlZyk7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjtvcGFjaXR5OjB9NDAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWSgtMjBkZWcpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW59NjAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWSgxMGRlZyk7b3BhY2l0eToxfTgwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVkoLTVkZWcpfXRve3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCl9fUBrZXlmcmFtZXMgZmxpcEluWXswJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVkoOTBkZWcpO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47b3BhY2l0eTowfTQwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVkoLTIwZGVnKTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWlufTYwJXt0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVkoMTBkZWcpO29wYWNpdHk6MX04MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVZKC01ZGVnKX10b3t0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpfX0uZmxpcEluWXstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnQ7YmFja2ZhY2UtdmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudDstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmZsaXBJblk7YW5pbWF0aW9uLW5hbWU6ZmxpcEluWX1ALXdlYmtpdC1rZXlmcmFtZXMgZmxpcE91dFh7MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KX0zMCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVYKC0yMGRlZyk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCg5MGRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIGZsaXBPdXRYezAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCl9MzAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWCgtMjBkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVgoOTBkZWcpO29wYWNpdHk6MH19LmZsaXBPdXRYey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmxpcE91dFg7YW5pbWF0aW9uLW5hbWU6ZmxpcE91dFg7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246Ljc1czthbmltYXRpb24tZHVyYXRpb246Ljc1czstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnQ7YmFja2ZhY2UtdmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudH1ALXdlYmtpdC1rZXlmcmFtZXMgZmxpcE91dFl7MCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KX0zMCV7dHJhbnNmb3JtOnBlcnNwZWN0aXZlKDQwMHB4KSByb3RhdGVZKC0xNWRlZyk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWSg5MGRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIGZsaXBPdXRZezAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCl9MzAle3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSg0MDBweCkgcm90YXRlWSgtMTVkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06cGVyc3BlY3RpdmUoNDAwcHgpIHJvdGF0ZVkoOTBkZWcpO29wYWNpdHk6MH19LmZsaXBPdXRZey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudDtiYWNrZmFjZS12aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50Oy13ZWJraXQtYW5pbWF0aW9uLW5hbWU6ZmxpcE91dFk7YW5pbWF0aW9uLW5hbWU6ZmxpcE91dFk7LXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246Ljc1czthbmltYXRpb24tZHVyYXRpb246Ljc1c31ALXdlYmtpdC1rZXlmcmFtZXMgbGlnaHRTcGVlZEluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCkgc2tld1goLTMwZGVnKTtvcGFjaXR5OjB9NjAle3RyYW5zZm9ybTpza2V3WCgyMGRlZyk7b3BhY2l0eToxfTgwJXt0cmFuc2Zvcm06c2tld1goLTVkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbGlnaHRTcGVlZEluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCkgc2tld1goLTMwZGVnKTtvcGFjaXR5OjB9NjAle3RyYW5zZm9ybTpza2V3WCgyMGRlZyk7b3BhY2l0eToxfTgwJXt0cmFuc2Zvcm06c2tld1goLTVkZWcpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9fS5saWdodFNwZWVkSW57LXdlYmtpdC1hbmltYXRpb24tbmFtZTpsaWdodFNwZWVkSW47YW5pbWF0aW9uLW5hbWU6bGlnaHRTcGVlZEluOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0fUAtd2Via2l0LWtleWZyYW1lcyBsaWdodFNwZWVkT3V0ezAle29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMTAwJSwwLDApIHNrZXdYKDMwZGVnKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbGlnaHRTcGVlZE91dHswJXtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDEwMCUsMCwwKSBza2V3WCgzMGRlZyk7b3BhY2l0eTowfX0ubGlnaHRTcGVlZE91dHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmxpZ2h0U3BlZWRPdXQ7YW5pbWF0aW9uLW5hbWU6bGlnaHRTcGVlZE91dDstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW59QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZUluezAle3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zZm9ybTpyb3RhdGUoLTIwMGRlZyk7b3BhY2l0eTowfXRve3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zZm9ybTpub25lO29wYWNpdHk6MX19QGtleWZyYW1lcyByb3RhdGVJbnswJXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2Zvcm06cm90YXRlKC0yMDBkZWcpO29wYWNpdHk6MH10b3t0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9fS5yb3RhdGVJbnstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnJvdGF0ZUluO2FuaW1hdGlvbi1uYW1lOnJvdGF0ZUlufUAtd2Via2l0LWtleWZyYW1lcyByb3RhdGVJbkRvd25MZWZ0ezAle3RyYW5zZm9ybS1vcmlnaW46bGVmdCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MH10b3t0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO3RyYW5zZm9ybTpub25lO29wYWNpdHk6MX19QGtleWZyYW1lcyByb3RhdGVJbkRvd25MZWZ0ezAle3RyYW5zZm9ybS1vcmlnaW46bGVmdCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MH10b3t0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO3RyYW5zZm9ybTpub25lO29wYWNpdHk6MX19LnJvdGF0ZUluRG93bkxlZnR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpyb3RhdGVJbkRvd25MZWZ0O2FuaW1hdGlvbi1uYW1lOnJvdGF0ZUluRG93bkxlZnR9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZUluRG93blJpZ2h0ezAle3RyYW5zZm9ybS1vcmlnaW46cmlnaHQgYm90dG9tO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO29wYWNpdHk6MH10b3t0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGJvdHRvbTt0cmFuc2Zvcm06bm9uZTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgcm90YXRlSW5Eb3duUmlnaHR7MCV7dHJhbnNmb3JtLW9yaWdpbjpyaWdodCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7b3BhY2l0eTowfXRve3RyYW5zZm9ybS1vcmlnaW46cmlnaHQgYm90dG9tO3RyYW5zZm9ybTpub25lO29wYWNpdHk6MX19LnJvdGF0ZUluRG93blJpZ2h0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6cm90YXRlSW5Eb3duUmlnaHQ7YW5pbWF0aW9uLW5hbWU6cm90YXRlSW5Eb3duUmlnaHR9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZUluVXBMZWZ0ezAle3RyYW5zZm9ybS1vcmlnaW46bGVmdCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7b3BhY2l0eTowfXRve3RyYW5zZm9ybS1vcmlnaW46bGVmdCBib3R0b207dHJhbnNmb3JtOm5vbmU7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHJvdGF0ZUluVXBMZWZ0ezAle3RyYW5zZm9ybS1vcmlnaW46bGVmdCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7b3BhY2l0eTowfXRve3RyYW5zZm9ybS1vcmlnaW46bGVmdCBib3R0b207dHJhbnNmb3JtOm5vbmU7b3BhY2l0eToxfX0ucm90YXRlSW5VcExlZnR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpyb3RhdGVJblVwTGVmdDthbmltYXRpb24tbmFtZTpyb3RhdGVJblVwTGVmdH1ALXdlYmtpdC1rZXlmcmFtZXMgcm90YXRlSW5VcFJpZ2h0ezAle3RyYW5zZm9ybS1vcmlnaW46cmlnaHQgYm90dG9tO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtLW9yaWdpbjpyaWdodCBib3R0b207dHJhbnNmb3JtOm5vbmU7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHJvdGF0ZUluVXBSaWdodHswJXt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGJvdHRvbTt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7b3BhY2l0eTowfXRve3RyYW5zZm9ybS1vcmlnaW46cmlnaHQgYm90dG9tO3RyYW5zZm9ybTpub25lO29wYWNpdHk6MX19LnJvdGF0ZUluVXBSaWdodHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnJvdGF0ZUluVXBSaWdodDthbmltYXRpb24tbmFtZTpyb3RhdGVJblVwUmlnaHR9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZU91dHswJXt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvcGFjaXR5OjF9dG97dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNmb3JtOnJvdGF0ZSgyMDBkZWcpO29wYWNpdHk6MH19QGtleWZyYW1lcyByb3RhdGVPdXR7MCV7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3BhY2l0eToxfXRve3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zZm9ybTpyb3RhdGUoMjAwZGVnKTtvcGFjaXR5OjB9fS5yb3RhdGVPdXR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpyb3RhdGVPdXQ7YW5pbWF0aW9uLW5hbWU6cm90YXRlT3V0fUAtd2Via2l0LWtleWZyYW1lcyByb3RhdGVPdXREb3duTGVmdHswJXt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO29wYWNpdHk6MX10b3t0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO29wYWNpdHk6MH19QGtleWZyYW1lcyByb3RhdGVPdXREb3duTGVmdHswJXt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO29wYWNpdHk6MX10b3t0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO29wYWNpdHk6MH19LnJvdGF0ZU91dERvd25MZWZ0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6cm90YXRlT3V0RG93bkxlZnQ7YW5pbWF0aW9uLW5hbWU6cm90YXRlT3V0RG93bkxlZnR9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZU91dERvd25SaWdodHswJXt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGJvdHRvbTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtLW9yaWdpbjpyaWdodCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MH19QGtleWZyYW1lcyByb3RhdGVPdXREb3duUmlnaHR7MCV7dHJhbnNmb3JtLW9yaWdpbjpyaWdodCBib3R0b207b3BhY2l0eToxfXRve3RyYW5zZm9ybS1vcmlnaW46cmlnaHQgYm90dG9tO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjB9fS5yb3RhdGVPdXREb3duUmlnaHR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpyb3RhdGVPdXREb3duUmlnaHQ7YW5pbWF0aW9uLW5hbWU6cm90YXRlT3V0RG93blJpZ2h0fUAtd2Via2l0LWtleWZyYW1lcyByb3RhdGVPdXRVcExlZnR7MCV7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0IGJvdHRvbTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtLW9yaWdpbjpsZWZ0IGJvdHRvbTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHJvdGF0ZU91dFVwTGVmdHswJXt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO29wYWNpdHk6MX10b3t0cmFuc2Zvcm0tb3JpZ2luOmxlZnQgYm90dG9tO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTtvcGFjaXR5OjB9fS5yb3RhdGVPdXRVcExlZnR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpyb3RhdGVPdXRVcExlZnQ7YW5pbWF0aW9uLW5hbWU6cm90YXRlT3V0VXBMZWZ0fUAtd2Via2l0LWtleWZyYW1lcyByb3RhdGVPdXRVcFJpZ2h0ezAle3RyYW5zZm9ybS1vcmlnaW46cmlnaHQgYm90dG9tO29wYWNpdHk6MX10b3t0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGJvdHRvbTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgcm90YXRlT3V0VXBSaWdodHswJXt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGJvdHRvbTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtLW9yaWdpbjpyaWdodCBib3R0b207dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7b3BhY2l0eTowfX0ucm90YXRlT3V0VXBSaWdodHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnJvdGF0ZU91dFVwUmlnaHQ7YW5pbWF0aW9uLW5hbWU6cm90YXRlT3V0VXBSaWdodH1ALXdlYmtpdC1rZXlmcmFtZXMgaGluZ2V7MCV7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dH0yMCUsNjAle3RyYW5zZm9ybTpyb3RhdGUoODBkZWcpO3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXR9NDAlLDgwJXt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBsZWZ0Oy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0O29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCw3MDBweCwwKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgaGluZ2V7MCV7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXQ7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dH0yMCUsNjAle3RyYW5zZm9ybTpyb3RhdGUoODBkZWcpO3RyYW5zZm9ybS1vcmlnaW46dG9wIGxlZnQ7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbi1vdXR9NDAlLDgwJXt0cmFuc2Zvcm06cm90YXRlKDYwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBsZWZ0Oy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluLW91dDthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW4tb3V0O29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCw3MDBweCwwKTtvcGFjaXR5OjB9fS5oaW5nZXstd2Via2l0LWFuaW1hdGlvbi1uYW1lOmhpbmdlO2FuaW1hdGlvbi1uYW1lOmhpbmdlfUAtd2Via2l0LWtleWZyYW1lcyByb2xsSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTAwJSwwLDApIHJvdGF0ZSgtMTIwZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmV9fUBrZXlmcmFtZXMgcm9sbEluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTEwMCUsMCwwKSByb3RhdGUoLTEyMGRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpub25lfX0ucm9sbEluey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6cm9sbEluO2FuaW1hdGlvbi1uYW1lOnJvbGxJbn1ALXdlYmtpdC1rZXlmcmFtZXMgcm9sbE91dHswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCkgcm90YXRlKDEyMGRlZyl9fUBrZXlmcmFtZXMgcm9sbE91dHswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgxMDAlLDAsMCkgcm90YXRlKDEyMGRlZyl9fS5yb2xsT3V0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6cm9sbE91dDthbmltYXRpb24tbmFtZTpyb2xsT3V0fUAtd2Via2l0LWtleWZyYW1lcyB6b29tSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4zLC4zLC4zKX01MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIHpvb21JbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjMsLjMsLjMpfTUwJXtvcGFjaXR5OjF9fS56b29tSW57LXdlYmtpdC1hbmltYXRpb24tbmFtZTp6b29tSW47YW5pbWF0aW9uLW5hbWU6em9vbUlufUAtd2Via2l0LWtleWZyYW1lcyB6b29tSW5Eb3duezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUzZCguMSwuMSwuMSkgdHJhbnNsYXRlM2QoMCwtMTAwMHB4LDApOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KX02MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKC40NzUsLjQ3NSwuNDc1KSB0cmFuc2xhdGUzZCgwLDYwcHgsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMTc1LC44ODUsLjMyLDEpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSl9fUBrZXlmcmFtZXMgem9vbUluRG93bnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjEsLjEsLjEpIHRyYW5zbGF0ZTNkKDAsLTEwMDBweCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoMCw2MHB4LDApOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMTc1LC44ODUsLjMyLDEpfX0uem9vbUluRG93bnstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnpvb21JbkRvd247YW5pbWF0aW9uLW5hbWU6em9vbUluRG93bn1ALXdlYmtpdC1rZXlmcmFtZXMgem9vbUluTGVmdHswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjEsLjEsLjEpIHRyYW5zbGF0ZTNkKC0xMDAwcHgsMCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoMTBweCwwLDApOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMTc1LC44ODUsLjMyLDEpfX1Aa2V5ZnJhbWVzIHpvb21JbkxlZnR7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4xLC4xLC4xKSB0cmFuc2xhdGUzZCgtMTAwMHB4LDAsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlM2QoLjQ3NSwuNDc1LC40NzUpIHRyYW5zbGF0ZTNkKDEwcHgsMCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKX19Lnpvb21JbkxlZnR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTp6b29tSW5MZWZ0O2FuaW1hdGlvbi1uYW1lOnpvb21JbkxlZnR9QC13ZWJraXQta2V5ZnJhbWVzIHpvb21JblJpZ2h0ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUzZCguMSwuMSwuMSkgdHJhbnNsYXRlM2QoMTAwMHB4LDAsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlM2QoLjQ3NSwuNDc1LC40NzUpIHRyYW5zbGF0ZTNkKC0xMHB4LDAsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMTc1LC44ODUsLjMyLDEpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSl9fUBrZXlmcmFtZXMgem9vbUluUmlnaHR7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4xLC4xLC4xKSB0cmFuc2xhdGUzZCgxMDAwcHgsMCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoLTEwcHgsMCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKX19Lnpvb21JblJpZ2h0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6em9vbUluUmlnaHQ7YW5pbWF0aW9uLW5hbWU6em9vbUluUmlnaHR9QC13ZWJraXQta2V5ZnJhbWVzIHpvb21JblVwezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUzZCguMSwuMSwuMSkgdHJhbnNsYXRlM2QoMCwxMDAwcHgsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpfTYwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlM2QoLjQ3NSwuNDc1LC40NzUpIHRyYW5zbGF0ZTNkKDAsLTYwcHgsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMTc1LC44ODUsLjMyLDEpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSl9fUBrZXlmcmFtZXMgem9vbUluVXB7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4xLC4xLC4xKSB0cmFuc2xhdGUzZCgwLDEwMDBweCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSl9NjAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoMCwtNjBweCwwKTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKX19Lnpvb21JblVwey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6em9vbUluVXA7YW5pbWF0aW9uLW5hbWU6em9vbUluVXB9QC13ZWJraXQta2V5ZnJhbWVzIHpvb21PdXR7MCV7b3BhY2l0eToxfTUwJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjMsLjMsLjMpfXRve29wYWNpdHk6MH19QGtleWZyYW1lcyB6b29tT3V0ezAle29wYWNpdHk6MX01MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZTNkKC4zLC4zLC4zKX10b3tvcGFjaXR5OjB9fS56b29tT3V0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6em9vbU91dDthbmltYXRpb24tbmFtZTp6b29tT3V0fUAtd2Via2l0LWtleWZyYW1lcyB6b29tT3V0RG93bns0MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKC40NzUsLjQ3NSwuNDc1KSB0cmFuc2xhdGUzZCgwLC02MHB4LDApOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjEsLjEsLjEpIHRyYW5zbGF0ZTNkKDAsMjAwMHB4LDApO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKX19QGtleWZyYW1lcyB6b29tT3V0RG93bns0MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKC40NzUsLjQ3NSwuNDc1KSB0cmFuc2xhdGUzZCgwLC02MHB4LDApOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjEsLjEsLjEpIHRyYW5zbGF0ZTNkKDAsMjAwMHB4LDApO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKX19Lnpvb21PdXREb3duey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6em9vbU91dERvd247YW5pbWF0aW9uLW5hbWU6em9vbU91dERvd259QC13ZWJraXQta2V5ZnJhbWVzIHpvb21PdXRMZWZ0ezQwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlM2QoLjQ3NSwuNDc1LC40NzUpIHRyYW5zbGF0ZTNkKDQycHgsMCwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC4xKSB0cmFuc2xhdGUzZCgtMjAwMHB4LDAsMCk7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0IGNlbnRlcn19QGtleWZyYW1lcyB6b29tT3V0TGVmdHs0MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKC40NzUsLjQ3NSwuNDc1KSB0cmFuc2xhdGUzZCg0MnB4LDAsMCl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguMSkgdHJhbnNsYXRlM2QoLTIwMDBweCwwLDApO3RyYW5zZm9ybS1vcmlnaW46bGVmdCBjZW50ZXJ9fS56b29tT3V0TGVmdHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnpvb21PdXRMZWZ0O2FuaW1hdGlvbi1uYW1lOnpvb21PdXRMZWZ0fUAtd2Via2l0LWtleWZyYW1lcyB6b29tT3V0UmlnaHR7NDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoLTQycHgsMCwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC4xKSB0cmFuc2xhdGUzZCgyMDAwcHgsMCwwKTt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGNlbnRlcn19QGtleWZyYW1lcyB6b29tT3V0UmlnaHR7NDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoLTQycHgsMCwwKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC4xKSB0cmFuc2xhdGUzZCgyMDAwcHgsMCwwKTt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IGNlbnRlcn19Lnpvb21PdXRSaWdodHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnpvb21PdXRSaWdodDthbmltYXRpb24tbmFtZTp6b29tT3V0UmlnaHR9QC13ZWJraXQta2V5ZnJhbWVzIHpvb21PdXRVcHs0MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZTNkKC40NzUsLjQ3NSwuNDc1KSB0cmFuc2xhdGUzZCgwLDYwcHgsMCk7LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNTUsLjA1NSwuNjc1LC4xOSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUzZCguMSwuMSwuMSkgdHJhbnNsYXRlM2QoMCwtMjAwMHB4LDApO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbTstd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjE3NSwuODg1LC4zMiwxKX19QGtleWZyYW1lcyB6b29tT3V0VXB7NDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUzZCguNDc1LC40NzUsLjQ3NSkgdHJhbnNsYXRlM2QoMCw2MHB4LDApOy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjU1LC4wNTUsLjY3NSwuMTkpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC41NSwuMDU1LC42NzUsLjE5KX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlM2QoLjEsLjEsLjEpIHRyYW5zbGF0ZTNkKDAsLTIwMDBweCwwKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBib3R0b207LXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguMTc1LC44ODUsLjMyLDEpO2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKC4xNzUsLjg4NSwuMzIsMSl9fS56b29tT3V0VXB7LXdlYmtpdC1hbmltYXRpb24tbmFtZTp6b29tT3V0VXA7YW5pbWF0aW9uLW5hbWU6em9vbU91dFVwfUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluRG93bnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1Aa2V5ZnJhbWVzIHNsaWRlSW5Eb3duezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKTt2aXNpYmlsaXR5OnZpc2libGV9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fS5zbGlkZUluRG93bnstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnNsaWRlSW5Eb3duO2FuaW1hdGlvbi1uYW1lOnNsaWRlSW5Eb3dufUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluTGVmdHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHNsaWRlSW5MZWZ0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt2aXNpYmlsaXR5OnZpc2libGV9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fS5zbGlkZUluTGVmdHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnNsaWRlSW5MZWZ0O2FuaW1hdGlvbi1uYW1lOnNsaWRlSW5MZWZ0fUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluUmlnaHR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHNsaWRlSW5SaWdodHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTt2aXNpYmlsaXR5OnZpc2libGV9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fS5zbGlkZUluUmlnaHR7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpzbGlkZUluUmlnaHQ7YW5pbWF0aW9uLW5hbWU6c2xpZGVJblJpZ2h0fUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluVXB7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSk7dmlzaWJpbGl0eTp2aXNpYmxlfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfX1Aa2V5ZnJhbWVzIHNsaWRlSW5VcHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKTt2aXNpYmlsaXR5OnZpc2libGV9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9fS5zbGlkZUluVXB7LXdlYmtpdC1hbmltYXRpb24tbmFtZTpzbGlkZUluVXA7YW5pbWF0aW9uLW5hbWU6c2xpZGVJblVwfUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZU91dERvd257MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMCl9dG97dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMTAwJSl9fUBrZXlmcmFtZXMgc2xpZGVPdXREb3duezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfX0uc2xpZGVPdXREb3duey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6c2xpZGVPdXREb3duO2FuaW1hdGlvbi1uYW1lOnNsaWRlT3V0RG93bn1ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGVPdXRMZWZ0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX19QGtleWZyYW1lcyBzbGlkZU91dExlZnR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9dG97dmlzaWJpbGl0eTpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfX0uc2xpZGVPdXRMZWZ0ey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6c2xpZGVPdXRMZWZ0O2FuaW1hdGlvbi1uYW1lOnNsaWRlT3V0TGVmdH1ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGVPdXRSaWdodHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX10b3t2aXNpYmlsaXR5OmhpZGRlbjt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX19QGtleWZyYW1lcyBzbGlkZU91dFJpZ2h0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfXRve3Zpc2liaWxpdHk6aGlkZGVuO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfX0uc2xpZGVPdXRSaWdodHstd2Via2l0LWFuaW1hdGlvbi1uYW1lOnNsaWRlT3V0UmlnaHQ7YW5pbWF0aW9uLW5hbWU6c2xpZGVPdXRSaWdodH1ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGVPdXRVcHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX10b3t2aXNpYmlsaXR5OmhpZGRlbjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9fUBrZXlmcmFtZXMgc2xpZGVPdXRVcHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX10b3t2aXNpYmlsaXR5OmhpZGRlbjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9fS5zbGlkZU91dFVwey13ZWJraXQtYW5pbWF0aW9uLW5hbWU6c2xpZGVPdXRVcDthbmltYXRpb24tbmFtZTpzbGlkZU91dFVwfS5zZWFtbGVzcy13YXJwMltkYXRhLXYtZTRiNWQ1MmNde292ZXJmbG93OmhpZGRlbjtoZWlnaHQ6MTIwcHg7d2lkdGg6MTAwJX0uc2VhbWxlc3Mtd2FycDI+dWwgbGlbZGF0YS12LWU0YjVkNTJjXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxMHB4fS5ob21lY29udGVudC1jdXJyZW5jeS13cmFwW2RhdGEtdi1lNGI1ZDUyY117dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW47cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgI2Y1ZjVmNTtib3JkZXItcmFkaXVzOjNweDt3aWR0aDoyNDBweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpib3R0b207YmFja2dyb3VuZC1zaXplOmNvbnRhaW59LmhvbWVjb250ZW50LWN1cnJlbmN5LXdyYXBbZGF0YS12LWU0YjVkNTJjXTpob3Zlcntib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwxNjQsMjE2LC40KTtib3gtc2hhZG93OjAgMCAxMHB4IHJnYmEoMCwxNjQsMjE2LC4zKX0uaW5mby1saXN0W2RhdGEtdi1lNGI1ZDUyY117bWFyZ2luOjYwcHggYXV0b30uaW5mby1saXN0IGxpW2RhdGEtdi1lNGI1ZDUyY117d2lkdGg6MjUlO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmc6MCAxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uaW5mby1saXN0IGxpIC50aXRsZVtkYXRhLXYtZTRiNWQ1MmNde2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiMxODFkMjU7bGluZS1oZWlnaHQ6NDBweH0uaW5mby1saXN0IGxpIGltZ1tkYXRhLXYtZTRiNWQ1MmNde2hlaWdodDoxMjVweH0uY3VyUGVyLC5wb2ludGVye2N1cnNvcjpwb2ludGVyfS5ncmF5e2NvbG9yOiNkM2RmZTZ9Lmljb25mb250e2ZvbnQtZmFtaWx5Omljb25mb250IWltcG9ydGFudDtmb250LXNpemU6MTZweDtmb250LXN0eWxlOm5vcm1hbDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ubWw1e21hcmdpbi1sZWZ0OjVweH0uYmFubmVyX3dyYXB7YmFja2dyb3VuZDojMTExMDJjO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7d2lkdGg6MTAwJTtoZWlnaHQ6NDAwcHh9LnN3aXBlci1jb250YWluZXJ7d2lkdGg6MTAwJX0uc3dpcGVyLXNsaWRlPmltZ3t3aWR0aDoxMDAlO2hlaWdodDo0MDBweH0uc3dpcGVyLWNvbnRhaW5lciBhLC5zd2lwZXItY29udGFpbmVyIGltZ3tkaXNwbGF5OmJsb2NrfWRpdi5zd2lwZXItY29udGFpbmVyIC5zd2lwZXItcGFnaW5hdGlvbj5zcGFue2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjA7d2lkdGg6NTZweDtoZWlnaHQ6M3B4fS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7d2lkdGg6NTZweCFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjojMDBhNGQ4IWltcG9ydGFudH0ucHVyLWJhY2tbZGF0YS12LWJhYjMzYzcwXXt3aWR0aDoxMDAlO2hlaWdodDo2NHB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDkyM30ucHVyLWJhY2sgLnB1ci1jZW50ZXJbZGF0YS12LWJhYjMzYzcwXXt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6NjRweDtwYWRkaW5nOjE0cHggMDtwb3NpdGlvbjpyZWxhdGl2ZX0ucHVyLWJhY2sgLnB1ci1jZW50ZXIgLnB1ci1jb250ZW50W2RhdGEtdi1iYWIzM2M3MF17dGV4dC1hbGlnbjpjZW50ZXJ9LnB1ci1iYWNrIC5wdXItY2VudGVyIC5wdXItdGV4dFtkYXRhLXYtYmFiMzNjNzBde2hlaWdodDozOXB4O3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1yaWdodDoyN3B4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcDttaW4td2lkdGg6MjEwcHh9LnB1ci1iYWNrIC5wdXItY2VudGVyIC5wdXItdGV4dCAucHVyLXRpdGxlW2RhdGEtdi1iYWIzM2M3MF17Y29sb3I6I2ZmZjtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxfS5wdXItYmFjayAucHVyLWNlbnRlciAucHVyLXRleHQgLnB1ci1yZWZlcmVuY2UgLnJlZmVyZW5jZVtkYXRhLXYtYmFiMzNjNzBde3ZlcnRpY2FsLWFsaWduOnRvcH0ucHVyLWJhY2sgLnB1ci1jZW50ZXIgLnB1ci10ZXh0IC5wdXItcmVmZXJlbmNlIC5yZWZlcmVuY2UtaWNvbltkYXRhLXYtYmFiMzNjNzBde3ZlcnRpY2FsLWFsaWduOnRvcDtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MXB4IDAgMCAycHg7Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLXNpemU6MTJweCAxMnB4fS5wdXItYmFjayAucHVyLWNlbnRlciAucHVyLXRleHQgLnB1ci1yZWZlcmVuY2UgLnJlZmVyZW5jZS1pY29uIC5hcnJvd19ib3hbZGF0YS12LWJhYjMzYzcwXXt6LWluZGV4OjU7d2lkdGg6MTcycHg7aGVpZ2h0OjM2cHg7cGFkZGluZzoxMHB4IDEycHg7ZGlzcGxheTpub25lO2JhY2tncm91bmQ6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiM1OTZhN2E7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNoYWRvdzowIDJweCA2cHggMCByZ2JhKDAsMCwwLC4xMik7cG9zaXRpb246YWJzb2x1dGU7dG9wOi00NHB4O2xlZnQ6LTI4cHh9LnB1ci1iYWNrIC5wdXItY2VudGVyIC5wdXItdGV4dCAucHVyLXJlZmVyZW5jZVtkYXRhLXYtYmFiMzNjNzBde2NvbG9yOiM4NjllYzk7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTRweH0ucHVyLWJhY2sgLnB1ci1jZW50ZXIgLnB1ci1pbnB1dFtkYXRhLXYtYmFiMzNjNzBde2hlaWdodDozNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5wdXItYmFjayAucHVyLWNlbnRlciAucHVyLWlucHV0PmF7Y3Vyc29yOnBvaW50ZXJ9LnB1ci1iYWNrIC5wdXItY2VudGVyIC5wdXItaW5wdXQgLnNlbGVjdC1ib3hbZGF0YS12LWJhYjMzYzcwXXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjU7d2lkdGg6MTYwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MCAycHggNnB4IDAgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjJweH0ucHVyLWJhY2sgLnB1ci1jZW50ZXIgLnB1ci1pbnB1dCAuc2VsZWN0LWJveCBzcGFuLkJUQ1tkYXRhLXYtYmFiMzNjNzBde2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1qSWlJR2hsYVdkb2REMGlNaklpSUhodGJHNXpQU0pvZOKApmd1TkRVMGVpSWdabWxzYkQwaUkwWkJRVVF4TkNJZ1ptbHNiQzF5ZFd4bFBTSnViMjU2WlhKdklpOCtQQzluUGp3dmMzWm5QZz09KSBuby1yZXBlYXQgMTBweH0ucHVyLWJhY2sgLnB1ci1jZW50ZXIgLnB1ci1pbnB1dCAuc2VsZWN0LWJveCAuc2VsZWN0LWJ0biAuYnRuLWljb25bZGF0YS12LWJhYjMzYzcwXXt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O21hcmdpbjoxMXB4IDEwcHggMCAwO2Zsb2F0OnJpZ2h0O2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UQWlJR2hsYVdkb2REMGlOaUlnZUcxc2JuTTlJbWgwZOKAplFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlJR1E5SWswMklEaHNOQ0EwSURRdE5DSXZQand2Wno0OEwzTjJaejQ9KSBuby1yZXBlYXQgNXB4IDRweH0ucHVyLWJhY2sgLnB1ci1jZW50ZXIgLnB1ci1pbnB1dCAuc2VsZWN0LWJveCAuc2VsZWN0LWJ0bltkYXRhLXYtYmFiMzNjNzBde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjM2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpsZWZ0fS5wdXItYmFjayAucHVyLWNlbnRlciAucHVyLWlucHV0IC5zaG9ydGN1dFtkYXRhLXYtYmFiMzNjNzBde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1sZWZ0OjJweDt3aWR0aDoxMjJweDtoZWlnaHQ6MzZweDtib3JkZXItcmFkaXVzOjJweDtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjM2cHg7Ym94LXNoYWRvdzowIDJweCA2cHggMCByZ2JhKDAsMCwwLC4xMik7YmFja2dyb3VuZDojMDVjMTllfS5wdXItYmFjayAucHVyLWNlbnRlciAucHVyLWlucHV0IC5zaG9ydGN1dDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwZGE4OGJ9LmNvaW4tdGFie21heC13aWR0aDo3MCU7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjEwcHggMDttYXJnaW4tYm90dG9tOjEwcHg7ZGlzcGxheTpmbGV4fS5jb2luLXRhYj51bHttYXgtd2lkdGg6OTAlO2Rpc3BsYXk6ZmxleH0uY29pbi10YWI+dWwgbGl7cGFkZGluZzowIDE1cHg7Y29sb3I6IzlhOWViYTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uY29pbi10YWI+dWwgLmFjdGl2ZUNvaW57Y29sb3I6IzEzMDkyODtmb250LXdlaWdodDo5MDA7ei1pbmRleDoxfS5jb2lucy1saXN0e21hcmdpbjoxMHB4IGF1dG87bWF4LXdpZHRoOjcwJTtsaW5lLWhlaWdodDo1MXB4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6MH0uY29pbnMtbGlzdCAubGlzdC10aXRsZXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDMwcHg7YmFja2dyb3VuZDojZThlYmY2fS5jb2lucy1saXN0IC5saXN0LXRpdGxlPnNwYW57ZmxleDoxO2ZvbnQtZmFtaWx5OlJvYm90byBDb25kZW5zZWQsc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzlhOWU5YX0uY29pbnMtbGlzdCAubGlzdC10aXRsZT5zcGFuOmZpcnN0LWNoaWxke3RleHQtYWxpZ246bGVmdH0uY29pbnMtbGlzdCAubGlzdC10aXRsZT5zcGFuOmxhc3QtY2hpbGR7dGV4dC1hbGlnbjpyaWdodH0uY29pbnMtbGlzdCAubGlzdC1jb257b3ZlcmZsb3cteTpzY3JvbGw7Ym9yZGVyLXRvcDpub25lfS5jb2lucy1saXN0IC5saXN0LWNvbiBsaXtmb250LWZhbWlseTpSb2JvdG8gQ29uZGVuc2VkLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtc3RyZXRjaDpjb25kZW5zZWQ7Y29sb3I6IzEzMDkyODt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O3BhZGRpbmc6MCAzMHB4O2xpbmUtaGVpZ2h0OjQwcHh9LmNvaW5zLWxpc3QgLmxpc3QtY29uIGxpOmhvdmVye2JhY2tncm91bmQ6I2YxZjZmZn0uY29pbnMtbGlzdCAubGlzdC1jb24gbGkgLmhpZ2hfYmx1ZXtjb2xvcjojNTYzYmQxfS5jb2lucy1saXN0IC5saXN0LWNvbiBsaSAubG93X2JsdWV7Y29sb3I6IzhkNzVmN30uY29pbnMtbGlzdCAubGlzdC1jb24gbGkgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uY29pbnMtbGlzdCAubGlzdC1jb24gbGk+ZGl2e2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcn0uY29pbnMtbGlzdCAubGlzdC1jb24gbGk+ZGl2OmZpcnN0LWNoaWxke3RleHQtYWxpZ246bGVmdH0uY29pbnMtbGlzdCAubGlzdC1jb24gbGk+ZGl2Omxhc3QtY2hpbGR7dGV4dC1hbGlnbjpyaWdodH0uY2Fyb3VzZWwgLnN3aXBlci1zbGlkZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzMjdhZGR9LmNvbl9sZWZ0LC5uYXZfbGVmdHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LndpdGhkcmF3e21hcmdpbjowIDRweH0uY2Fyb3VzZWwgLmxhc3QgYTpob3ZlcntjdXJzb3I6cG9pbnRlcn0uc2xpZGVycywuc2xpZGVycyBpbWd7d2lkdGg6MTAwJX0ubm90aWNlX2JveHt6LWluZGV4OjQ7d2lkdGg6MTAwJTtoZWlnaHQ6NTJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgyOSw1MCw2NiwuNyk7bWFyZ2luLXRvcDotMXB4O2JhY2tncm91bmQtY29sb3I6I2Y2ZjlmYztwb3NpdGlvbjpyZWxhdGl2ZX0ubm90aWNlX2JveCAubm90aWNlX2xpc3R7d2lkdGg6MTAwJTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDo1MnB4O292ZXJmbG93OmhpZGRlbjt3b3JkLWJyZWFrOmtlZXAtYWxsO3RleHQtYWxpZ246Y2VudGVyfS5ub3RpY2VfYm94IC5ub3RpY2VfbGlzdCAubGlzdHtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIDJlbSAwIDEuNWVtO3RleHQtYWxpZ246Y2VudGVyfS5ub3RpY2VfYm94IC5ub3RpY2VfbGlzdCAubGlzdCA6aG92ZXJ7Y29sb3I6IzAwYTRkOH0ubm90aWNlX2JveCAubm90aWNlX2xpc3QgLmxpc3Q6bm90KDpmaXJzdC1jaGlsZCk6YmVmb3Jle2NvbnRlbnQ6Ii8iO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LS41ZW07Y29sb3I6IzFjMjQyY30ubm90aWNlX3Vse21hcmdpbi1ib3R0b206NXB4O2JhY2tncm91bmQtY29sb3I6I2Y2ZjlmYztmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDo1MnB4O3RleHQtYWxpZ246Y2VudGVyfS5ub3RpY2VfbGl7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O292ZXJmbG93OmhpZGRlbjt3b3JkLWJyZWFrOmtlZXAtYWxsO3RleHQtYWxpZ246Y2VudGVyfS5ub3RpY2VfbGkgYXtoZWlnaHQ6MzZweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjAgMjVweDtsZXR0ZXItc3BhY2luZzoxcHh9Lm5vdGljZV9saTphZnRlcntjb250ZW50OiIvIjtmbG9hdDpyaWdodH0ubm90aWNlX2xpOmxhc3QtY2hpbGQ6YWZ0ZXJ7Y29udGVudDoiIjtjb2xvcjojNmI4MGFlfS5ub3RpY2VfYTpob3Zlcntjb2xvcjojMTk0YjY0O2N1cnNvcjpwb2ludGVyfS5jb2lucyBsaXtwb3NpdGlvbjpyZWxhdGl2ZX0uYXJyb3d7Ym9yZGVyLXdpZHRoOjE2cHg7Ym9yZGVyLXJpZ2h0OjhweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDo4cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b206OHB4IGRhc2hlZDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNHB4fS5jb2lucyBsaTpob3ZlcntjdXJzb3I6cG9pbnRlcn0uY29udGVudDAxe3BhZGRpbmc6NDBweCAwO2JhY2tncm91bmQ6I2ZmZn0uY29udGVudDAxIC5pbWdzMDF7d2lkdGg6MzAwcHh9LmNvbnRlbnQwMSAuaW1nczAye3dpZHRoOjQwMHB4fS5jb250ZW50MDEgLmltZ3MwMywuY29udGVudDAxIC5pbWdzMDQsLmNvbnRlbnQwMSAuaW1nczA1e3dpZHRoOjQ1MHB4fS5iZzAxe2JhY2tncm91bmQ6dXJsKC4uL2ltZy9jb250ZW50X2JnMDEuODJiOWM3YTUucG5nKSA1MCUgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcn0uYmcwMSwuYmcwMnt3aWR0aDoxMDAlO3BhZGRpbmc6NTBweCAwfS5iZzAye2JhY2tncm91bmQ6dXJsKC4uL2ltZy9jb250ZW50X2JnMDIuODJiOWM3YTUucG5nKSA1MCUgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcn0ubG9naW5fYnRue2JvcmRlcjoxcHggc29saWQgIzAwMDtib3JkZXItcmFkaXVzOjVweH0ubG9naW5fYnRuLC5yZWdpc3Rlcl9idG57cGFkZGluZzoxNXB4IDgwcHg7Y3Vyc29yOnBvaW50ZXJ9LnJlZ2lzdGVyX2J0bntib3JkZXItcmFkaXVzOjVweH0uZm9vdCwuZ29fdHJhbnNmZXJ7cGFkZGluZzo1MHB4IDB9Lm1hcmtldF9saXN0e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci10b3A6MXB4IHNvbGlkIGhzbGEoMCwwJSwxMDAlLC4xNSk7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1O2NvbG9yOiM5ZWI1Y2E7aGVpZ2h0OjEyMHB4fS5tYXJrZXRfbGlzdCBsaXtwYWRkaW5nOjAgMTBweDtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjAgMDtwYWRkaW5nOjE1cHggMH0ubWFya2V0X2xpc3QgbGk+ZGl2e2JvcmRlci1yaWdodDoxcHggc29saWQgIzI0MjQyNH0ubWFya2V0X2xpc3QgbGk+ZGl2IC5mbGV4IHB7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NXB4O2ZvbnQtc2l6ZToxNHB4fS5tYXJrZXRfbGlzdCBsaT5kaXYgLnN5bWJvbHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjI1cHg7aGVpZ2h0OjI1cHg7Zm9udC1zaXplOjE0cHh9Lm1hcmtldF9saXN0IGxpPmRpdiAubm93X3ByaWNle2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDVweDtoZWlnaHQ6NDVweDtmb250LXNpemU6MjBweDttYXJnaW46MH0ubWFya2V0X2xpc3QgbGk+ZGl2PnB7Zm9udC1zaXplOjE0cHh9Lm1hcmtldF9saXN0IGxpPmRpdj5wIHNwYW46Zmlyc3QtY2hpbGR7Y29sb3I6IzQ3N2E5MH0ubWFya2V0X2xpc3QgbGk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMTMxMzEzfS5tYXJrZXRfbGlzdCBsaTpsYXN0LWNoaWxke2JvcmRlci13aWR0aDowfS5ibHVle2NvbG9yOiNhOGFkY2N9Lm5vd1ByaWNle2ZvbnQtc2l6ZToyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6I2QyZDZlYzttYXJnaW4tdG9wOjhweH0ubm93UHJpY2UgLmNueV9wcmljZXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxMnB4fS5zeW1ib2x7bWFyZ2luOjA7cGFkZGluZzowO2NvbG9yOiNiMGI4ZGI7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MTRweDtoZWlnaHQ6MTRweH0ucmF0ZXVwe2ZvbnQtc2l6ZToxNnB4O3RvcDowO3JpZ2h0OjA7Zm9udC13ZWlnaHQ6NTAwO21hcmdpbjowO3BhZGRpbmctcmlnaHQ6MTVweDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS52b2x1bWV7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTJweDtjb2xvcjojNjE2OThhO21hcmdpbi10b3A6MTZweH0uZ3JlZW5ze2NvbG9yOiMyN2IwNTR9LmZlYXR1cmVfd3JhcHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cGFkZGluZzo2MHB4IDA7bWluLXdpZHRoOjU1MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NDc0OGY7bGluZS1oZWlnaHQ6MmVtfS5mZWF0dXJlX3dyYXAgaDJ7Zm9udC1zaXplOjI4cHg7bWFyZ2luLWJvdHRvbToxMHB4O2NvbG9yOiMxOTI1NDR9LmZlYXR1cmVfd3JhcCAuZmVhdHVyZV9saXN0e3BhZGRpbmctdG9wOjgwcHg7d2lkdGg6NzAlO21hcmdpbjowIGF1dG99LmZlYXR1cmVfd3JhcCAuZmVhdHVyZV9saXN0IGxpe2Zsb2F0OmxlZnQ7d2lkdGg6MzMlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQgbm9uZSBuby1yZXBlYXQgdG9wfS5mZWF0dXJlX2xpc3QgbGkgZGl2OmZpcnN0LWNoaWxke2hlaWdodDo2MXB4fS5mZWF0dXJlX3dyYXAgaDN7Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206MTBweDtjb2xvcjojMTkyNTQ0fS5jbGllbnRfd3JhcHt3aWR0aDoxMDAlO2hlaWdodDo3MTBweDtjb2xvcjojOWViNWNhO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNsaWVudF93cmFwIC53cmFwX2lue2hlaWdodDo2MTBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOnRvcDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjojMGIwZjEwfS5jbGllbnRfd3JhcCAud3JhcF9pbiAvZGVlcC8gLmVsLWJ1dHRvbnt3aWR0aDoxMjBweDt0ZXh0LWFsaWduOmNlbnRlcn0uY2xpZW50X3dyYXAgLndyYXBfaW4gLmlubmVyLXdyYXB7bWF4LXdpZHRoOjE5MjBweDttaW4td2lkdGg6MTI4MHB4O3dpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvfS5jbGllbnRfd3JhcCAud3JhcF9pbiBoMnttYXJnaW4tYm90dG9tOjI0cHg7Y29sb3I6I2ZmZjtmb250LXdlaWdodDo0MDA7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjUwcHg7Zm9udC1zaXplOjM2cHh9LmNsaWVudF93cmFwIC53cmFwX2luIC5uZXh0cHtjb2xvcjojOWViNWNhO3RleHQtYWxpZ246cmlnaHQ7Zm9udC1zaXplOjE4cHg7cGFkZGluZy1yaWdodDo1MHB4fS5jbGllbnRfd3JhcCAud3JhcF9pbiB1bHt3aWR0aDo4MTBweDttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246bGVmdDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbGllbnRfd3JhcCAud3JhcF9pbiB1bCBsaXttYXJnaW46MCAxNXB4O2NvbG9yOiM5ZWI1Y2E7cGFkZGluZzo0MHB4IDA7bGluZS1oZWlnaHQ6NDhweDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcn0uY2xpZW50X3dyYXAgLndyYXBfaW4gdWwgbGkgcHtoZWlnaHQ6NDhweDt3aWR0aDo0OHB4O21hcmdpbjowIDEwcHggMCAwO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOnJnYmEoNTMsMTI0LDIyNSwuMSkgbm9uZSBuby1yZXBlYXQgNTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltZy9pb3MuOTA0NTM5N2Quc3ZnKX0uY2xpZW50X3dyYXAgLndyYXBfaW4gdWwgbGkgLnAxe2JhY2tncm91bmQtaW1hZ2U6dXJsKC4uL2ltZy9hbnpodW8uYWU5YWNiOTkuc3ZnKX0uY2xpZW50X3dyYXAgLndyYXBfaW4gdWwgbGkgLmNvZGVib3h7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoyNiU7dG9wOjA7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTIwcHg7Ym9yZGVyOjFweCBzb2xpZCAjMzU3Y2UxO2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQ6I2ZmZiBub25lIG5vLXJlcGVhdCAxMnB4IDEycHgvOTZweCA5NnB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiMzNTdjZTE7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweDt6LWluZGV4OjY7ZGlzcGxheTpub25lfS5jbGllbnRfd3JhcCAud3JhcF9pbiB1bCBsaSAuY29kZWJveCBpbWd7d2lkdGg6MTAwcHg7bWFyZ2luOjAgYXV0bztkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MTBweH0uY2xpZW50X3dyYXAgLndyYXBfaW4gdWwgbGk6aG92ZXIgLmNvZGVib3h7ZGlzcGxheTpibG9ja30uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5ke3dpZHRoOjgwMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowIGF1dG99LmNsaWVudF93cmFwIC53cmFwX2luIC5tb25fbWluZD5kaXZ7d2lkdGg6MTAwJX0uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5kPmRpdiAucGNpbWd7d2lkdGg6NTE4cHg7bWFyZ2luOjAgYXV0b30uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5kPmRpdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5jbGllbnRfd3JhcCAud3JhcF9pbiAubW9uX21pbmQ+ZGl2IC5lbC1idXR0b257Ym9yZGVyLXJhZGl1czoyNXB4O3BhZGRpbmc6MTJweCA0MHB4fS5jbGllbnRfd3JhcCAud3JhcF9pbiAubW9uX21pbmQ+ZGl2PmRpdnt3aWR0aDo0MDBweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MzBweH0uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5kPmRpdj5kaXYgZGl2Omxhc3QtY2hpbGR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnQ7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmctbGVmdDoyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5kPmRpdj5kaXYgZGl2Omxhc3QtY2hpbGQ+cHtmb250LXNpemU6MTRweH0uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5kPmRpdj5kaXYgZGl2Omxhc3QtY2hpbGQ+cDpmaXJzdC1jaGlsZHtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjcwMH0uY2xpZW50X3dyYXAgLndyYXBfaW4gLm1vbl9taW5kIC5tb2JpbWd7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTYwcHg7Ym90dG9tOi0yMHB4O3dpZHRoOjEyMnB4O2hlaWdodDoyNTNweDtiYWNrZ3JvdW5kOiMwYTE1MWUgbm9uZSBuby1yZXBlYXQgNTAlL2NvdmVyO2JveC1zaGFkb3c6LTlweCAxMnB4IDYycHggMCByZ2JhKDM2LDUyLDY5LC4zKTtib3JkZXItcmFkaXVzOjE2LjQ3cHh9LnJlZ2lzdGVyX3dyYXB7aGVpZ2h0OjI0MHB4O3dpZHRoOjEwMCU7Ym9yZGVyLXRvcDowIHNvbGlkICNjYWQ3ZTA7YmFja2dyb3VuZDojZmZmfS5yZWdpc3Rlcl93cmFwIGgye2NvbG9yOiMyMzJhNGE7Zm9udC1zaXplOjIycHg7bGluZS1oZWlnaHQ6MjRweH0ucmVnaXN0ZXJfd3JhcCAucmVib3h7bWFyZ2luOjMycHggYXV0byAwIGF1dG99LnJlZ2lzdGVyX3dyYXAgLmlucHV0LXJlZ2lzdGVye3dpZHRoOjQwMHB4O2hlaWdodDo0MHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwMDA7Ym9yZGVyOjFweCBzb2xpZCAjYmRjZWQ5O2JvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmctbGVmdDoxNnB4fS5yZWdpc3Rlcl93cmFwIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjQwcHg7cGFkZGluZzowIDQ0cHg7Zm9udC1zaXplOjE2cHg7bWluLXdpZHRoOjEyMHB4Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6IzAwYTRkODtjb2xvcjojZmZmO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtib3JkZXItcmFkaXVzOjJweDtjdXJzb3I6cG9pbnRlcn0ucmVnaXN0ZXJfd3JhcCBidXR0b246aG92ZXJ7b3BhY2l0eTouOH0uYmxvY2t7ZGlzcGxheTpibG9ja30ucXVvdGF0aW9uX2JveHtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzoxNXB4IDUwcHg7bWFyZ2luOjAgYXV0b30ucXVvdGF0aW9uX2JveCAuY29pbmJveHttaW4taGVpZ2h0OjcwMHB4O3dpZHRoOjEwMCU7bWFyZ2luOjAgYXV0bztib3JkZXI6MXB4IHNvbGlkICNmNWY1ZjU7cGFkZGluZzowIDEwcHg7Zm9udC1zaXplOjE2cHh9LnF1b3RhdGlvbl9ib3ggLmNvaW5ib3ggLmZsZXh7ZGlzcGxheTpmbGV4fS5xdW90YXRpb25fYm94IC5jb2luYm94IC5jbGFzc2ZpdHl7bGluZS1oZWlnaHQ6NDBweDtjb2xvcjojOWNhOWI1fS5xdW90YXRpb25fYm94IC5jb2luYm94IC5jbGFzc2ZpdHk+ZGl2e2ZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ucXVvdGF0aW9uX2JveCAuY29pbmJveCAuY29pbmxpc3R7Y29sb3I6IzE4MWQyNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfS5xdW90YXRpb25fYm94IC5jb2luYm94IC5jb2lubGlzdD5we2ZsZXg6MX0ucXVvdGF0aW9uX2JveCAuY29pbmJveCAuY29pbmxpc3QgLmljb24tc3Rhcntjb2xvcjojMDBhNGQ4fS5xdW90YXRpb25fYm94IC5jb2luYm94IC5jb2lubGlzdCBwe2xpbmUtaGVpZ2h0OjgwcHg7Zm9udC1zaXplOjE4cHg7Zm9udC1mYW1pbHk6QXJpYWw7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7Y29sb3I6IzMzM30ucXVvdGF0aW9uX2JveCAuY29pbmJveCAuY29pbmxpc3Q6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tLXdpZHRoOjB9LnF1b3RhdGlvbl9ib3ggLmNvaW5ib3ggLmhvdmU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmNmZhOy13ZWJraXQtYW5pbWF0aW9uOmFhYSAuMXMgZWFzZS1pbiAwcyAyLjggYWx0ZXJuYXRlO2FuaW1hdGlvbjphYWEgLjFzIGVhc2UtaW4gMHMgMi44IGFsdGVybmF0ZTstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc31ALXdlYmtpdC1rZXlmcmFtZXMgYWFhezAle3RyYW5zZm9ybTpzY2FsZSgxKX10b3t0cmFuc2Zvcm06c2NhbGUoMS4wMyl9fUBrZXlmcmFtZXMgYWFhezAle3RyYW5zZm9ybTpzY2FsZSgxKX10b3t0cmFuc2Zvcm06c2NhbGUoMS4wMyl9fS5xdW90YXRpb25fYm94IC5jaGFuZ2Ugc3Bhbnt3aWR0aDo5MHB4O2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMTBweDtib3JkZXItcmFkaXVzOjVweDtsaW5lLWhlaWdodDoyNXB4O3RleHQtYWxpZ246Y2VudGVyfS5xdW90YXRpb25fYm94IC5jaGFuZ2UucmVkIHNwYW57YmFja2dyb3VuZDpyZ2JhKDIzOSw4Niw4NiwuMSl9LnF1b3RhdGlvbl9ib3ggLmNoYW5nZS5ncmVlbiBzcGFue2JhY2tncm91bmQ6cmdiYSgxMywxNjgsMTM5LC4xKX0ucXVvdGF0aW9uX2JveCAubWFpbl9idG57d2lkdGg6MTAwJTttYXJnaW46MCBhdXRvO2xpbmUtaGVpZ2h0OjgwcHh9LnF1b3RhdGlvbl9ib3ggLm1haW5fYnRuIGJ1dHRvbntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzAwYTRkODtwYWRkaW5nOjVweCAxNXB4O2JvcmRlci1yYWRpdXM6NXB4O2xpbmUtaGVpZ2h0OjI1cHh9LmZlZHVpLWZvb3Rlcnt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzE4MWQyNTtjb2xvcjojNjk3MDgwO3BhZGRpbmctdG9wOjYwcHg7cGFkZGluZy1ib3R0b206MDttaW4td2lkdGg6MTI4MHB4fS5mZWR1aS1yb290LC5mZWR1aS1yb290ICosLmZlZHVpLXJvb3QgOmFmdGVyLC5mZWR1aS1yb290IDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fS5mZWR1aS1mb290ZXItaW5uZXJ7d2lkdGg6MTIwMHB4O21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmctdG9wOjIwcHh9LmZlZHVpLWZvb3Rlci1sb2dve2hlaWdodDoyM3B4fS5mZWR1aS1mb290ZXItY29weXJpZ2h0e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2YTcwN2Y7bGluZS1oZWlnaHQ6MTJweDtwYWRkaW5nLXRvcDoxNnB4fS5mZWR1aS1mb290ZXItbGlua3twYWRkaW5nLXRvcDo0MHB4fS5mZWR1aS1mb290ZXItbGluayBhOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LmZlZHVpLWZvb3Rlci1saW5rIGF7bWFyZ2luLWxlZnQ6OHB4O3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojYThiN2M4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yYWRpdXM6NTAlO3ZlcnRpY2FsLWFsaWduOnRvcH0uZmVkdWktZm9vdGVyLXJpZ2h0e3dpZHRoOjc5MnB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZmVkdWktZm9vdGVyLXJpZ2h0IGE6aG92ZXJ7Y29sb3I6I2ZmZn0uZmVkdWktZm9vdGVyLXJpZ2h0IGRse3dpZHRoOjE4MHB4fS5mZWR1aS1yb290IGRkLC5mZWR1aS1yb290IGRsLC5mZWR1aS1yb290IGR0LC5mZWR1aS1yb290IGxpLC5mZWR1aS1yb290IHVse3BhZGRpbmc6MDttYXJnaW46MH0uZmVkdWktZm9vdGVyLXJpZ2h0IGR0e2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC1zaXplOjE2cHg7cGFkZGluZy1ib3R0b206OHB4fS5mZWR1aS1mb290ZXJbZGF0YS1sb2NhbGU9a28ta3JdIC5mZWR1aS1mb290ZXItcmlnaHQgYSwuZmVkdWktZm9vdGVyW2RhdGEtbG9jYWxlPXpoLWNuXSAuZmVkdWktZm9vdGVyLXJpZ2h0IGEsLmZlZHVpLWZvb3RlcltkYXRhLWxvY2FsZT16aC1oa10gLmZlZHVpLWZvb3Rlci1yaWdodCBhLC5mZWR1aS1mb290ZXJbZGF0YS1sb2NhbGU9emgtdHddIC5mZWR1aS1mb290ZXItcmlnaHQgYXtsaW5lLWhlaWdodDoxOHB4fS5mZWR1aS1mb290ZXItcmlnaHQgYXtwYWRkaW5nLXRvcDo4cHg7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxNnB4O2NvbG9yOiNkNWRlZjI7d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5vdGljZSAuYWNjb3VudC13cmFwW2RhdGEtdi0wYzFmNjRiZV17YmFja2dyb3VuZDojMTgxZDI1fS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudFtkYXRhLXYtMGMxZjY0YmVde21hcmdpbjowIGF1dG87b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctdG9wOjNweDtjbGVhcjpib3RofS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYmFjay1uYXZbZGF0YS12LTBjMWY2NGJlXXtoZWlnaHQ6NDBweDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQ6IzE4MWQyNX0ubm90aWNlIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLm5hdi1hZnRlcltkYXRhLXYtMGMxZjY0YmVde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyfS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYWNjb3VudC1jb250ZW50W2RhdGEtdi0wYzFmNjRiZV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjEwNjBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7Ym9yZGVyLXJhZGl1czoxMHB4fS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYWNjb3VudC1jb250ZW50IHVsW2RhdGEtdi0wYzFmNjRiZV17cGFkZGluZzowIDIwcHg7Zm9udC1zaXplOjE0cHh9Lm5vdGljZSAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5hY2NvdW50LWNvbnRlbnQgdWwgbGlbZGF0YS12LTBjMWY2NGJlXXtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgIzMwM2I0YjtoZWlnaHQ6NzJweDtwYWRkaW5nOjEwcHggMCA3cHg7Y29sb3I6I2NkZDZlNDtmb250LXNpemU6MTJweH0ubm90aWNlIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLmFjY291bnQtY29udGVudCB1bCBsaT5kaXY+ZGl2W2RhdGEtdi0wYzFmNjRiZV17aGVpZ2h0OjUycHg7bGluZS1oZWlnaHQ6NTJweH0ubm90aWNlIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLmFjY291bnQtY29udGVudCB1bCBsaT5kaXYgc3BhbltkYXRhLXYtMGMxZjY0YmVde2NvbG9yOiM2MTY4OGF9LnRpdGxlW2RhdGEtdi1jYmFiNzBkMF17aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTBweCAwIDMwcHg7YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhfS5jb250YWluZXJbZGF0YS12LWNiYWI3MGQwXXtwYWRkaW5nOjEwcHggMjVweCAxMHB4IDIwcHg7aGVpZ2h0OjU4MHB4O292ZXJmbG93OmF1dG99LmRlYWwtdGl0bGVbZGF0YS12LWNiYWI3MGQwXXtjb2xvcjojNjM3MDg1O21hcmdpbi1ib3R0b206NXB4fS5saXN0LWl0ZW0gbGlbZGF0YS12LWNiYWI3MGQwXXtsaW5lLWhlaWdodDoyMHB4fS5kZWFsLXRpdGxlIHNwYW5bZGF0YS12LWNiYWI3MGQwXSwubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LWNiYWI3MGQwXXt3aWR0aDozMyU7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdH0ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LWNiYWI3MGQwXTpudGgtY2hpbGQoMyl7Y29sb3I6I2NjNDk1MX0ubGlzdC1pdGVtIGxpIHNwYW4uZ3JlZW5bZGF0YS12LWNiYWI3MGQwXXtjb2xvcjojNTVhMDY3fS5yZWRbZGF0YS12LWNiYWI3MGQwXXtjb2xvcjojY2M0OTUxfS5leGNoYW5nZVtkYXRhLXYtY2Q0YzEyYmVde2hlaWdodDoxMDAlfS50aXRsZVtkYXRhLXYtY2Q0YzEyYmVde2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7cGFkZGluZzowIDEwcHggMCAzMHB4O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0uY29udGVudFtkYXRhLXYtY2Q0YzEyYmVde3BhZGRpbmc6MCAxMHB4O2hlaWdodDoxMDAlfS5uZXdfcHJpY2VbZGF0YS12LWNkNGMxMmJlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzAzYjRiO3BhZGRpbmc6M3B4IDIwcHh9LmV4Y2hhbmdlX3RpdGxlW2RhdGEtdi1jZDRjMTJiZV17bGluZS1oZWlnaHQ6MjVweDtwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojNjM3MDg1fS5saXN0LWl0ZW0gbGlbZGF0YS12LWNkNGMxMmJlXXtsaW5lLWhlaWdodDoyNXB4O292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubGlzdC1pdGVtW2RhdGEtdi1jZDRjMTJiZV17aGVpZ2h0OmNhbGMoMTAwJSAtIDUwcHgpO292ZXJmbG93OmF1dG99LmV4Y2hhbmdlX3RpdGxlIHNwYW5bZGF0YS12LWNkNGMxMmJlXSwubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LWNkNGMxMmJlXXt3aWR0aDoyNSU7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0fS5ncmVlbltkYXRhLXYtY2Q0YzEyYmVde2NvbG9yOiM1NWEwNjd9LnJlZFtkYXRhLXYtY2Q0YzEyYmVde2NvbG9yOiNjYzQ5NTF9Lmxpc3QtaXRlbSBsaVtkYXRhLXYtY2Q0YzEyYmVdOmhvdmVye2JhY2tncm91bmQ6IzI2MmE0Mn0ubGluZVtkYXRhLXYtY2Q0YzEyYmVde2hlaWdodDo1cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0Yn0udHJhZGVbZGF0YS12LTU0NWZlZmI3XXt3aWR0aDozNTBweDtwYWRkaW5nLWJvdHRvbToxNXB4fS5zbGlkZXItaW5bZGF0YS12LTU0NWZlZmI3XSwuc2xpZGVyLW91dFtkYXRhLXYtNTQ1ZmVmYjdde21hcmdpbjoyMHB4IDEwcHh9LnRyYW5zYnRuW2RhdGEtdi01NDVmZWZiN106aG92ZXJ7Y29sb3I6IzAwYTRkODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBhNGQ4fS50aXRsZV9ib3hbZGF0YS12LTU0NWZlZmI3XXtwYWRkaW5nOjAgMjBweDtib3gtc2hhZG93OjAgMnB4IDZweCByZ2JhKDAsMCwwLC4xKTtsaW5lLWhlaWdodDo1MHB4fS5idG4td3JhcFtkYXRhLXYtNTQ1ZmVmYjdde3BhZGRpbmc6MjBweH0uZWwtYnV0dG9uW2RhdGEtdi01NDVmZWZiN106Zm9jdXMsLmVsLWJ1dHRvbltkYXRhLXYtNTQ1ZmVmYjddOmhvdmVyLFtkYXRhLXYtNTQ1ZmVmYjddIC5lbC1idXR0b257YmFja2dyb3VuZC1jb2xvcjojMmUyZTJlO2NvbG9yOiNjNGM0YzQ7Ym9yZGVyLWNvbG9yOiM4NDgzODM7d2lkdGg6NTAlfVtkYXRhLXYtNTQ1ZmVmYjddIC5lbC1idXR0b24tLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojMzViNjVhO3dpZHRoOjUwJX0uZWwtYnV0dG9uLS1hY3RpdmVzZWxsW2RhdGEtdi01NDVmZWZiN106aG92ZXIsW2RhdGEtdi01NDVmZWZiN10gLmVsLWJ1dHRvbi0tYWN0aXZlc2VsbDpmb2N1c3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2ZmNDk0YTtib3JkZXItY29sb3I6Izg0ODM4M30uZWwtYnV0dG9uLS1hY3RpdmVidXlbZGF0YS12LTU0NWZlZmI3XTpob3ZlcixbZGF0YS12LTU0NWZlZmI3XSAuZWwtYnV0dG9uLS1hY3RpdmVidXk6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzNWI2NWE7Ym9yZGVyLWNvbG9yOiM4NDgzODN9W2RhdGEtdi01NDVmZWZiN10gLmVsLWJ1dHRvbi0tYWN0aXZlc2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ5NGE7Y29sb3I6I2ZmZjt3aWR0aDo1MCV9W2RhdGEtdi01NDVmZWZiN10gLmVsLWJ1dHRvbi0tYWN0aXZlYnV5e2JhY2tncm91bmQtY29sb3I6IzM1YjY1YTtjb2xvcjojZmZmO3dpZHRoOjUwJX0udGFidGl0bGUgc3BhbltkYXRhLXYtNTQ1ZmVmYjdde2N1cnNvcjpwb2ludGVyfVtkYXRhLXYtNTQ1ZmVmYjddIC5lbC1zbGlkZXJfX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMGE0ZDh9W2RhdGEtdi01NDVmZWZiN10gLmVsLXNsaWRlcl9fYnV0dG9ue2JvcmRlci1jb2xvcjojMDBhNGQ4fS50YWJ0aXRsZSBzcGFuW2RhdGEtdi01NDVmZWZiN106bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6MzBweH0uY29udGVudCAuZmlyc3RbZGF0YS12LTU0NWZlZmI3XSwuY29udGVudCAuc2Vjb25kW2RhdGEtdi01NDVmZWZiN117cGFkZGluZzowIDIwcHh9LmF2YWlsYWJsZVtkYXRhLXYtNTQ1ZmVmYjdde2hlaWdodDozNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGI7bGluZS1oZWlnaHQ6MzZweH0uaW5wdXQtaXRlbVtkYXRhLXYtNTQ1ZmVmYjdde3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fS5pbnB1dC1pdGVtIGRpdltkYXRhLXYtNTQ1ZmVmYjdde2NvbG9yOiNjZGQ2ZTQ7dGV4dC1hbGlnbjpjZW50ZXJ9LmlucHV0LWl0ZW0gbGFiZWxbZGF0YS12LTU0NWZlZmI3XXt3aWR0aDoyMCU7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYzNzA4NTtkaXNwbGF5OmJsb2NrfS5pbnB1dC1pdGVtIGlucHV0W2RhdGEtdi01NDVmZWZiN117d2lkdGg6MTAwJTtmbG9hdDpsZWZ0O2JvcmRlcjoxcHggc29saWQgIzUyNjg4Yztib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDt0ZXh0LWluZGVudDoxNXB4O2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiNjZGQ2ZTQ7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1O2xpbmUtaGVpZ2h0OjMwcHh9LmlucHV0LWl0ZW0gc3BhbltkYXRhLXYtNTQ1ZmVmYjdde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1cHg7Y29sb3I6IzYzNzA4NTtmb250LXNpemU6MTRweH0uYXR0aW9uW2RhdGEtdi01NDVmZWZiN117aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MzBweDtmb250LXNpemU6MTJweH0uc2VsbF9idG5bZGF0YS12LTU0NWZlZmI3XXt3aWR0aDoxMDAlO2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNmNGY1Zjc7bGluZS1oZWlnaHQ6NDBweH0uZ3JlZW5CYWNrW2RhdGEtdi01NDVmZWZiN117YmFja2dyb3VuZC1jb2xvcjojMzViNjVhfS5yZWRCYWNrW2RhdGEtdi01NDVmZWZiN117YmFja2dyb3VuZC1jb2xvcjojZmY0OTRhfWlucHV0W2RhdGEtdi01NDVmZWZiN106ZGlzYWJsZWR7Y29sb3I6IzYyNzA4NTtjdXJzb3I6bm90LWFsbG93ZWR9LmFjdGl2ZVtkYXRhLXYtNTQ1ZmVmYjdde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9LnRhYnRpdGxlIHNwYW5bZGF0YS12LTU0NWZlZmI3XTpob3Zlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBhNGQ4O2NvbG9yOiMwMGE0ZDh9LmNoYXJ0W2RhdGEtdi05NDhhZjgyMF17d2lkdGg6MTAwJX0uY2hhcnQgLmxpbmVfdGl0bGVbZGF0YS12LTk0OGFmODIwXXt3aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjMwcHg7YmFja2dyb3VuZDojMTgxYjJhfS5jaGFydCAubGluZV90aXRsZSBzcGFuW2RhdGEtdi05NDhhZjgyMF17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MzBweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tbGVmdDoyMHB4O2N1cnNvcjpwb2ludGVyfS5jaGFydCAuaGlnaGNoYXJ0cy1heGlzLXJlc2l6ZXJbZGF0YS12LTk0OGFmODIwXXtzdHJva2U6I2VlZX0uY2hhcnQgLmhpZ2hjaGFydHMtYXhpcy1yZXNpemVyW2RhdGEtdi05NDhhZjgyMF06aG92ZXJ7c3Ryb2tlOiNjY2N9LnRpdGxlW2RhdGEtdi04MjZiMWE1Ml17aGVpZ2h0OjM2cHg7bGluZS1oZWlnaHQ6MzZweH0udGFiX3RpdGxlW2RhdGEtdi04MjZiMWE1Ml17ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6NDZweDtoZWlnaHQ6NDZweH0udGFiX3RpdGxlIHNwYW4uYWN0aXZlW2RhdGEtdi04MjZiMWE1Ml17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwYTRkOH0udGFiX3RpdGxlIHNwYW5bZGF0YS12LTgyNmIxYTUyXTpob3Zlcntjb2xvcjojMDBhNGQ4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi04MjZiMWE1Ml17Y3Vyc29yOnBvaW50ZXJ9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi04MjZiMWE1Ml06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6MjBweH0ubGlzdC10aXRsZVtkYXRhLXYtODI2YjFhNTJde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0YjtoZWlnaHQ6NDBweDt3aWR0aDoxMDAlfS5ub19kYXRhW2RhdGEtdi04MjZiMWE1Ml17cGFkZGluZzo1MHB4IDB9LmNvbnRhaW5lcnNbZGF0YS12LTgyNmIxYTUyXXtoZWlnaHQ6MjcwcHg7b3ZlcmZsb3c6YXV0b30ubGlzdC1pdGVtIGxpW2RhdGEtdi04MjZiMWE1Ml17bGluZS1oZWlnaHQ6MzBweH0ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTgyNmIxYTUyXXtkaXNwbGF5OmlubGluZS1ibG9ja30ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTgyNmIxYTUyXTpudGgtY2hpbGQoMyl7Y29sb3I6I2NjNDk1MX0ubGlzdC1pdGVtIGxpW2RhdGEtdi04MjZiMWE1Ml06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5saXN0LWl0ZW0gbGkgc3Bhbi5ncmVlbltkYXRhLXYtODI2YjFhNTJde2NvbG9yOiM1NWEwNjd9LnBkYjIwW2RhdGEtdi04MjZiMWE1Ml17cGFkZGluZy1ib3R0b206MjBweH0uY29udGFpbmVycyBzcGFuW2RhdGEtdi04MjZiMWE1Ml17bWFyZ2luLWxlZnQ6MH0udGl0bGVbZGF0YS12LTU1NTBkNjhiXXtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4fS50YWJfdGl0bGVbZGF0YS12LTU1NTBkNjhiXXtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDo0NnB4O2hlaWdodDo0NnB4fS50YWJfdGl0bGUgLmFjdGl2ZVtkYXRhLXYtNTU1MGQ2OGJde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi01NTUwZDY4Yl17Y3Vyc29yOnBvaW50ZXJ9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi01NTUwZDY4Yl06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6NDBweH0uY29udGVudFtkYXRhLXYtNTU1MGQ2OGJde2ZsZXg6MX0ubGlzdC10aXRsZVtkYXRhLXYtNTU1MGQ2OGJde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0YjtoZWlnaHQ6NDBweH0ubm9fZGF0YVtkYXRhLXYtNTU1MGQ2OGJde3BhZGRpbmc6NTBweCAwfS5zY3JvbGxbZGF0YS12LTU1NTBkNjhiXXtmbGV4OjF9LnNjcm9sbCAuaGlzdGVudHJ1c3QtYm94IC5lbnRydXN0IC5jb250ZW50W2RhdGEtdi01NTUwZDY4Yl0sLnNjcm9sbCAuaGlzdGVudHJ1c3QtYm94IC5lbnRydXN0W2RhdGEtdi01NTUwZDY4Yl0sLnNjcm9sbCAuaGlzdGVudHJ1c3QtYm94W2RhdGEtdi01NTUwZDY4Yl17aGVpZ2h0OjEwMCV9LmNvbnRhaW5lcnNbZGF0YS12LTU1NTBkNjhiXXtmbGV4OjE7b3ZlcmZsb3c6YXV0b30ubGlzdC1pdGVtIGxpW2RhdGEtdi01NTUwZDY4Yl17bGluZS1oZWlnaHQ6MzBweH0ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTU1NTBkNjhiXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbG9hdDpsZWZ0O2hlaWdodDozMHB4fS5saXN0LWl0ZW0gbGlbZGF0YS12LTU1NTBkNjhiXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYjM2NDh9Lmxpc3QtaXRlbSBsaSBzcGFuLmdyZWVuW2RhdGEtdi01NTUwZDY4Yl17Y29sb3I6IzU1YTA2N30ucGRiMjBbZGF0YS12LTU1NTBkNjhiXXtwYWRkaW5nLWJvdHRvbToyMHB4fS5jb250YWluZXJzIHNwYW5bZGF0YS12LTU1NTBkNjhiXXttYXJnaW4tbGVmdDowfS5jdXJyZW5jeVtkYXRhLXYtMzkyNWM1NWFdLC50aXRsZVtkYXRhLXYtMzkyNWM1NWFde2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0udGl0bGVbZGF0YS12LTM5MjVjNTVhXXtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0NnB4O3BhZGRpbmc6MCA0MHB4IDAgMzBweH0uY29udGVudFtkYXRhLXYtMzkyNWM1NWFde3BhZGRpbmc6MTVweCAzMHB4IDYwcHh9LmZ0MjRbZGF0YS12LTM5MjVjNTVhXXtmb250LXNpemU6MjRweH0uYWJzdHJhY3RbZGF0YS12LTM5MjVjNTVhXXtwYWRkaW5nOjE1cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzAzYjRifS50aXRsZS1oZWFkW2RhdGEtdi0zNzkyYTc3ZV17aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzAzYjRiO3BhZGRpbmc6MCAyMHB4O2NvbG9yOiMwMGE0ZDg7ZGlzcGxheTpibG9jazttYXJnaW46MCAwfS5kZXRhaWxbZGF0YS12LTM3OTJhNzdlXXt3aWR0aDoyNTBweDtoZWlnaHQ6MTAwJX0udGl0bGVbZGF0YS12LTM3OTJhNzdlXXtmb250LXNpemU6MTRweH0udGFiX3RpdGxlW2RhdGEtdi0zNzkyYTc3ZV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6NDZweDtoZWlnaHQ6NDZweH0udGFiX3RpdGxlIHNwYW5bZGF0YS12LTM3OTJhNzdlXXtjdXJzb3I6cG9pbnRlcn0udGFiX3RpdGxlIHNwYW5bZGF0YS12LTM3OTJhNzdlXTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDo0MHB4fS5jb250YWluZXJzW2RhdGEtdi0zNzkyYTc3ZV17aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubGlzdC10aXRsZVtkYXRhLXYtMzc5MmE3N2Vde2xpbmUtaGVpZ2h0OjI1cHh9Lmxpc3QtdGl0bGUgbGlbZGF0YS12LTM3OTJhNzdlXXt3aWR0aDozMy4zMyU7dGV4dC1hbGlnbjpjZW50ZXJ9Lm5vX2RhdGFbZGF0YS12LTM3OTJhNzdlXXtwYWRkaW5nOjUwcHggMH0uY29udGFpbmVyc1tkYXRhLXYtMzc5MmE3N2Vde292ZXJmbG93OmF1dG99Lmxpc3QtdGl0bGVbZGF0YS12LTM3OTJhNzdlXXtwYWRkaW5nOjAgMjBweH0ubGlzdC10aXRsZSBsaVtkYXRhLXYtMzc5MmE3N2VdOmxhc3QtY2hpbGR7dGV4dC1hbGlnbjpyaWdodH0ubGlzdC1pdGVtIGxpW2RhdGEtdi0zNzkyYTc3ZV17cGFkZGluZzowIDIwcHg7bGluZS1oZWlnaHQ6Mi4zO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcn0ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTM3OTJhNzdlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbG9hdDpsZWZ0O3dpZHRoOjMzLjMlO3RleHQtYWxpZ246Y2VudGVyfS5saXN0LWl0ZW0gbGkgc3BhbltkYXRhLXYtMzc5MmE3N2VdOmxhc3QtY2hpbGR7dGV4dC1hbGlnbjpyaWdodH0ubGlzdC1pdGVtIGxpIHNwYW4uZ3JlZW5bZGF0YS12LTM3OTJhNzdlXXtjb2xvcjojNTVhMDY3fS5saXN0LWl0ZW0gbGlbZGF0YS12LTM3OTJhNzdlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYjM2NDh9Lmxpc3QtaXRlbSBsaS5idXlbZGF0YS12LTM3OTJhNzdlXXtjb2xvcjojMzViNjVhfS5saXN0LWl0ZW0gbGkuc2VsbFtkYXRhLXYtMzc5MmE3N2Vde2NvbG9yOiNmZjQ5NGF9Lm1fdGl0bGVbZGF0YS12LTRiMmZhYmNmXXtoZWlnaHQ6NTVweDtwYWRkaW5nOjE1cHggMzBweDtsaW5lLWhlaWdodDoyNXB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tX3NlYXJjaCBpbnB1dFtkYXRhLXYtNGIyZmFiY2Zde2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjFweCBzb2xpZCAjNTI2ODhjO2xpbmUtaGVpZ2h0OjI1cHh9Lm1fc2VhcmNoIGltZ1tkYXRhLXYtNGIyZmFiY2Zde3dpZHRoOjE2cHg7aGVpZ2h0OjE1cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MzVweDt0b3A6MjBweDt6LWluZGV4OjEyM30ubV9maWx0ZXJbZGF0YS12LTRiMmZhYmNmXXtmb250LXNpemU6MTRweH0udGFidGl0bGVbZGF0YS12LTRiMmZhYmNmXXtwYWRkaW5nOjAgMjVweH0udGFidGl0bGUgc3BhbltkYXRhLXYtNGIyZmFiY2Zde3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1yaWdodDoyNXB4fS5jb2luLXRpdGxlIGRpdltkYXRhLXYtNGIyZmFiY2Zde3dpZHRoOjMzLjMlO2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZmxvYXQ6bGVmdDtjb2xvcjojNjM3MDg1O2ZvbnQtc2l6ZToxMnB4fS5jb2luLXRpdGxlIGltZ1tkYXRhLXYtNGIyZmFiY2Zde3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tdG9wOi0zcHh9LmxpbmVbZGF0YS12LTRiMmZhYmNmXXt3aWR0aDoxMDAlO21hcmdpbjowIGF1dG87Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0Yn0uY29pbi13cmFwW2RhdGEtdi00YjJmYWJjZl17aGVpZ2h0OmF1dG87b3ZlcmZsb3c6aGlkZGVufS5jb2luLXdyYXAgbGlbZGF0YS12LTRiMmZhYmNmXXtoZWlnaHQ6MzkuMnB4O2xpbmUtaGVpZ2h0OjM5LjJweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjojY2RkNmU0fS5jb2luLXdyYXAgbGkgc3BhbltkYXRhLXYtNGIyZmFiY2Zde2Rpc3BsYXk6YmxvY2s7d2lkdGg6MzMlO2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvaW4td3JhcCBsaSBzcGFuW2RhdGEtdi00YjJmYWJjZl06bGFzdC1jaGlsZHtjb2xvcjojY2M0OTUxfS5jb2luLXRpdGxlIGRpdltkYXRhLXYtNGIyZmFiY2ZdOmZpcnN0LWNoaWxkLC5jdXJyZW5jeV9wIHAgc3BhbltkYXRhLXYtNGIyZmFiY2ZdOmZpcnN0LWNoaWxke3RleHQtaW5kZW50OjIwcHg7dGV4dC1hbGlnbjpsZWZ0fS5jb2luLXdyYXAgbGkgc3Bhbi5ncmVlbltkYXRhLXYtNGIyZmFiY2Zde2NvbG9yOiM1NWEwNjd9LmNvaW4td3JhcCBsaSBwW2RhdGEtdi00YjJmYWJjZl17b3ZlcmZsb3c6aGlkZGVufS5hY3RpdmVfcFtkYXRhLXYtNGIyZmFiY2ZdLC5jb2luLXdyYXAgbGkgcFtkYXRhLXYtNGIyZmFiY2ZdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJiMzY0OH0ucmVke2NvbG9yOiNjYzQ5NTF9LmdyZWVue2NvbG9yOiM1NWEwNjd9LnNwaW5uZXItdGl0bGV7ZGlzcGxheTpibG9jazt3aWR0aDoyOTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzAwYTRkOH0jdHYtdG9we2ZvbnQtc2l6ZToxMnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6I2M3Y2NlNjtjdXJzb3I6cG9pbnRlcn0jdHYtdG9wPnNwYW46Zmlyc3QtY2hpbGR7Zm9udC13ZWlnaHQ6NjAwO3BhZGRpbmc6MCAxNXB4fSN0di10b3A+Lmxhc3RwcmljZXtjb2xvcjojN2E5OGY3O2ZvbnQtd2VpZ2h0OjYwMH0jdHYtdG9wPnNwYW57bGluZS1oZWlnaHQ6NDBweDttYXJnaW46MCAycHh9I3R2LXRvcD4ubWFya2V0LWJveHtoZWlnaHQ6YXV0bzt6LWluZGV4Ojk5OTtmbG9hdDpsZWZ0O2xlZnQ6NXB4O3dpZHRoOjEwMCU7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0udGl0bGVbZGF0YS12LTQ3Njk2YzUwXXtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O3BhZGRpbmc6MCAxMHB4IDAgMzBweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmF9LmNvbnRlbnRbZGF0YS12LTQ3Njk2YzUwXXtwYWRkaW5nOjB9LmV4Y2hhbmdlW2RhdGEtdi00NzY5NmM1MF17d2lkdGg6MjMwcHg7YmFja2dyb3VuZDojMTgxZDI1O2hlaWdodDoxMDAlfS5uZXdfcHJpY2VbZGF0YS12LTQ3Njk2YzUwXXtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGI7cGFkZGluZzowIDAgMCAyMHB4O2NvbG9yOiMwMGE0ZDh9LmV4Y2hhbmdlX3RpdGxlW2RhdGEtdi00NzY5NmM1MF17bGluZS1oZWlnaHQ6MjVweDtwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojNjM3MDg1fS5saXN0LWl0ZW0gbGlbZGF0YS12LTQ3Njk2YzUwXXtsaW5lLWhlaWdodDoyNXB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubGlzdC1pdGVtIGxpIC5pbmZvLXNoYWRvd1tkYXRhLXYtNDc2OTZjNTBde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSg1MywxODIsOTAsLjMpO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7ei1pbmRleDowO3RyYW5zaXRpb246LjJzfS5saXN0LWl0ZW0gbGkgLmluZm8tc2hhZG93LnNlbGxpW2RhdGEtdi00NzY5NmM1MF17aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDpyZ2JhKDI1NSw3Myw3NCwuMyk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDt6LWluZGV4OjB9LmV4Y2hhbmdlX3RpdGxlIHNwYW5bZGF0YS12LTQ3Njk2YzUwXSwubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTQ3Njk2YzUwXXt3aWR0aDozMy4zJTtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnR9LmdyZWVuW2RhdGEtdi00NzY5NmM1MF17Y29sb3I6IzU1YTA2N30ucmVkW2RhdGEtdi00NzY5NmM1MF17Y29sb3I6I2NjNDk1MX0ubGlzdC1pdGVtIGxpW2RhdGEtdi00NzY5NmM1MF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5saW5lW2RhdGEtdi00NzY5NmM1MF17bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjMwcHg7Zm9udC1zaXplOjE2cHh9LmluZm8td3JhcHtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmctbGVmdDoyMHB4O2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTJweDtjb2xvcjojYzdjY2U2fS5pbmZvLXdyYXAgZGl2OmZpcnN0LWNoaWxke2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMwMGE0ZDh9LmluZm8td3JhcCBkaXZ7cGFkZGluZzowIDE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5pbmZvLXdyYXAgZGl2IHNwYW57bGluZS1oZWlnaHQ6MjBweH0uaG9tZVtkYXRhLXYtY2Q5OWU5ZTJde21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjNweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6MTAwJX0uaG9tZT4uaG9tZS1sW2RhdGEtdi1jZDk5ZTllMl17d2lkdGg6Y2FsYygxMDAlIC0gNjgzcHgpO21hcmdpbi10b3A6M3B4fS5ob21lPi5ob21lLXJbZGF0YS12LWNkOTllOWUyXXt3aWR0aDo2ODBweDttYXJnaW4tdG9wOjNweH0uaG9tZT4uaG9tZS1yPi5ob21lLXItdFtkYXRhLXYtY2Q5OWU5ZTJde2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21pbi1oZWlnaHQ6MjIwcHg7bWF4LWhlaWdodDpjYWxjKDEwMCUgLSAzNjBweCl9LmhvbWU+LmhvbWUtcj4uaG9tZS1yLXQ+ZGl2W2RhdGEtdi1jZDk5ZTllMl17d2lkdGg6MzM4cHg7YmFja2dyb3VuZDojMTgxYjJhfS5ob21lPi5ob21lLXI+LmhvbWUtci1iW2RhdGEtdi1jZDk5ZTllMl17bWFyZ2luLXRvcDozcHg7YmFja2dyb3VuZDojMTgxYjJhO2hlaWdodDozNjBweH0uZW50cnVzdHNbZGF0YS12LWNkOTllOWUyXXtiYWNrZ3JvdW5kOiMxODFkMjU7cGFkZGluZzoxNXB4IDIwcHg7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZW50cnVzdHMgLnRhYi1lbnRydXN0W2RhdGEtdi1jZDk5ZTllMl17Y29sb3I6I2YxZjFmMX0uZW50cnVzdHMgLnRhYi1lbnRydXN0IHNwYW5bZGF0YS12LWNkOTllOWUyXXttYXJnaW4tcmlnaHQ6MTVweDtjdXJzb3I6cG9pbnRlcn0uZW50cnVzdHMgLnRhYi1lbnRydXN0IHNwYW5bZGF0YS12LWNkOTllOWUyXTpob3Zlcntjb2xvcjojMDBhNGQ4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9LmVudHJ1c3RzIC5lbnRydXN0LWJveFtkYXRhLXYtY2Q5OWU5ZTJdLC5lbnRydXN0cyAuaGlzdGVudHJ1c3QtYm94W2RhdGEtdi1jZDk5ZTllMl17ZmxleDoxfS5hY3RpdmVbZGF0YS12LWNkOTllOWUyXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBhNGQ4fS50cmFkZVtkYXRhLXYtY2Q5OWU5ZTJde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6IzE4MWQyNTttYXJnaW4tbGVmdDozcHh9LmFjY291bnQtbWFpbntwYWRkaW5nLWxlZnQ6MzRweDtwYWRkaW5nLXJpZ2h0OjM0cHg7cGFkZGluZy10b3A6MzRweH0jcGF5LW9wdHN7d2lkdGg6NjAwcHg7Y29sb3I6I2M3Y2NlNn0jcGF5LW9wdHM+LmlucC1pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MjBweDtiYWNrZ3JvdW5kOm5vbmU7cGFkZGluZy1sZWZ0OjEyMHB4O2hlaWdodDo0MnB4fSNwYXktb3B0cz4uaW5wLWl0ZW0+ZGl2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMjBweDtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4fSNwYXktb3B0cz4uaW5wLWl0ZW0+aW5wdXR7ZGlzcGxheTpibG9jaztwYWRkaW5nOjAgMjBweDt3aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O2NvbG9yOiNjN2NjZTY7YmFja2dyb3VuZDpub25lfSNwYXktb3B0cyAuYnRue21hcmdpbjozMHB4IDAgMCAxMjBweDt3aWR0aDo0ODBweDtsaW5lLWhlaWdodDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6IzRlNWI4NTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyfS53aGl0ZXNbZGF0YS12LWM2OWEzMTA0XXttYXJnaW4tdG9wOjY2cHg7bWluLWhlaWdodDo3MDBweDtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjMwcHg7dG9wOjE4cHh9LndoaXRlcz4uc2V0dGluZy1sW2RhdGEtdi1jNjlhMzEwNF17bWFyZ2luOjAgMTBweDtwYWRkaW5nOjAgMzBweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoyMyV9LndoaXRlcz4uc2V0dGluZy1sIC5yb3V0ZXItbGluay1hY3RpdmVbZGF0YS12LWM2OWEzMTA0XXtjb2xvcjojMDBhNGQ4fS53aGl0ZXMgLnNldHRpbmctcltkYXRhLXYtYzY5YTMxMDRde2JhY2tncm91bmQ6I2ZmZjt3aWR0aDo3MDBweDttYXJnaW46MCBhdXRvO21hcmdpbi1ib3R0b206NTBweDtib3gtc2hhZG93OjAgMCAxMHB4IHJnYmEoMCwwLDAsLjEpO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmctYm90dG9tOjEwcHh9LndoaXRlcyAuc2V0dGluZy1yIGgzW2RhdGEtdi1jNjlhMzEwNF17d2lkdGg6MTAwJTtsaW5lLWhlaWdodDo2MHB4O2JhY2tncm91bmQ6I2ZmZjtwYWRkaW5nLWxlZnQ6MjBweDtmb250LXNpemU6MThweDtmb250LXdlaWdodDo3MDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VmZWZlZn0uYmFsY2sgLnNldHRpbmctcltkYXRhLXYtYzY5YTMxMDRde2JhY2tncm91bmQtY29sb3I6IzFlMmIzNDstbW96LWNvbHVtbnM6I2ZmZjtjb2x1bW5zOiNmZmZ9LmJhbGNrIC5zZXR0aW5nLXIgaDNbZGF0YS12LWM2OWEzMTA0XXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTJiMzQ7Y29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDAwfSNjMmMtYm94e2ZvbnQtc2l6ZToxNHB4fSNjMmMtYm94IC5idG4tZ3JlZW57YmFja2dyb3VuZDojMjU3OTZhO2NvbG9yOiNmZmZ9I2MyYy1ib3ggLmJ1eS1zZWxsLWJveHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDo5OTk7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjgpfSNjMmMtYm94IC5idXktc2VsbC1ib3g+ZGl2e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjoyMDBweCBhdXRvO3dpZHRoOjMwMHB4O2hlaWdodDoyNTZweDt0b3A6NTBweDtwYWRkaW5nOjAgMzBweDtiYWNrZ3JvdW5kOiMyNjJhNDI7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItcmFkaXVzOjJweH0jYzJjLWJveCAuYnV5LXNlbGwtYm94PmRpdiAudGl0bGV7bGluZS1oZWlnaHQ6NTBweDtmb250LXNpemU6MjBweDtjb2xvcjojNmI4MGFlfSNjMmMtYm94IC5idXktc2VsbC1ib3g+ZGl2IC5jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O2ZvbnQtc2l6ZToyMHB4O2N1cnNvcjpwb2ludGVyfSNjMmMtYm94IC5idXktc2VsbC1ib3g+ZGl2IC50b3RhbHtsaW5lLWhlaWdodDozNXB4fSNjMmMtYm94IC5idXktc2VsbC1ib3g+ZGl2IC5pbnB7cGFkZGluZzo2cHggMDtsaW5lLWhlaWdodDozNXB4fSNjMmMtYm94IC5idXktc2VsbC1ib3g+ZGl2IC5pbnAgaW5wdXR7bGluZS1oZWlnaHQ6MzVweDt3aWR0aDoxOTBweDtwYWRkaW5nOjAgMTBweDttYXJnaW4tcmlnaHQ6NXB4fSNjMmMtYm94IC5idXktc2VsbC1ib3g+ZGl2IC5idG57bWFyZ2luOjIwcHggYXV0byAwO2JvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MCAyMHB4O2xpbmUtaGVpZ2h0OjM1cHg7YmFja2dyb3VuZDojN2E5OGY3O2N1cnNvcjpwb2ludGVyfSNjMmMtYm94IC5yZWRDb2xvcntjb2xvcjojN2E5OGY3fSNjMmMtYm94IC5tYXNre2NvbG9yOiMzMzN9I2MyYy1ib3ggLm1hc2s+Lm0tY29udGVudHtiYWNrZ3JvdW5kOiNmZmZ9I2MyYy1ib3ggLm1hc2s+Lm0tY29udGVudCBkaXYgc3BhbjpmaXJzdC1jaGlsZHt3aWR0aDo4OXB4O2NvbG9yOiM3YTk4Zjd9I2MyYy1ib3g+LmMyYy1yPi50b3A+LnRvcC10aXRsZSAubGluay1zcGFue2N1cnNvcjpwb2ludGVyfSNjMmMtYm94Pi5jMmMtcj4udG9wPi50b3AtdGl0bGUgLmxpbmstc3Bhbjpob3Zlcntjb2xvcjojN2E5OGY3fSNjMmMtYm94Pi5jMmMtcj4udG9wIC50b3AtcHJpY2U+ZGl2e21hcmdpbi1yaWdodDoyMHB4fSNjMmMtYm94Pi5jMmMtcj4udG9wIC50b3AtcHJpY2U+ZGl2PnNwYW46bGFzdC1jaGlsZHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjE2cHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz5kaXY6Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjMwcHg7Ym9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgIzRlNWI4NTtwYWRkaW5nLXJpZ2h0OjMwcHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW17ZmxleDoxfSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi5pbnAtdGl0bGV7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzRlNWI4NTtmb250LXNpemU6MTZweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsaW5lLWhlaWdodDozfSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi5ob3d7bGluZS1oZWlnaHQ6NDBweDtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbT4udGhyZWUtaW5wPi5pbnAtYm94e3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0MnB4O2xpbmUtaGVpZ2h0OjQwcHg7cGFkZGluZy1sZWZ0OjExMnB4O21hcmdpbi1ib3R0b206MTVweH0jYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbT4udGhyZWUtaW5wPi5pbnAtYm94PnNwYW57cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTEycHg7dG9wOjA7bGVmdDowfSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi50aHJlZS1pbnA+LmlucC1ib3g+ZGl2LCNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi50aHJlZS1pbnA+LmlucC1ib3g+aW5wdXR7Y29sb3I6I2M3Y2NlNjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bGluZS1oZWlnaHQ6NDBweDtwYWRkaW5nOjAgMjBweDtib3JkZXI6MXB4IHNvbGlkICM0ZTViODU7YmFja2dyb3VuZDpub25lfSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi50aHJlZS1pbnA+LmlucC1ib3g+ZGl2e2NvbG9yOiM3YTk4Zjd9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0gLnBheS1vcHRze2ZsZXgtd3JhcDp3cmFwfSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtIC5wYXktb3B0cz5kaXY6bnRoLWNoaWxkKG4rMil7bWFyZ2luLWxlZnQ6MTVweH0jYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbSAucGF5LW9wdHM+ZGl2e2xpbmUtaGVpZ2h0OjQwcHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0gLnBheS1vcHRzPmRpdj5pbnB1dHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0gLmJ0bi1vdXQsI2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0+LmJ0bi1pbnttYXJnaW4tdG9wOjIwcHg7bGluZS1oZWlnaHQ6NDJweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzRlNWI4NX0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxle21hcmdpbjozMHB4IDAgMDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDo0MHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcn0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxlPmRpdjpmaXJzdC1jaGlsZHtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxlPmRpdjpmaXJzdC1jaGlsZCBzcGFue2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDo0MHB4O21hcmdpbi1yaWdodDoyMHB4fSNjMmMtYm94Pi5jMmMtcj4uYm90Pi5ib3QtdGl0bGU+ZGl2OmZpcnN0LWNoaWxkIC5hY3RpdmV7Y29sb3I6IzdhOThmNztib3JkZXI6bm9uZX0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxlPi5mbGV4e2hlaWdodDoxN3B4O2xpbmUtaGVpZ2h0OjE1cHg7Y3Vyc29yOnBvaW50ZXJ9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT4uZmxleD5kaXZ7bWFyZ2luLXJpZ2h0OjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3RyYW5zaXRpb246YWxsIC4zczt3aWR0aDozMnB4O2JvcmRlci1yYWRpdXM6Ny41cHh9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT4uZmxleD5kaXYgZGl2e3dpZHRoOjE1cHg7aGVpZ2h0OjE1cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZmZmfSNjMmMtYm94Pi5jMmMtcj4uYm90Pi5ib3QtdGl0bGU+LmZsZXggLnN3aXRjaC1vbntwYWRkaW5nLWxlZnQ6MDtiYWNrZ3JvdW5kOiNjY2N9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT4uZmxleCAuc3dpdGNoe3RyYW5zaXRpb246YWxsIC4zcztiYWNrZ3JvdW5kOiM3YTk4Zjc7cGFkZGluZy1sZWZ0OjE1cHh9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+Lmxpc3QtdGl0bGV7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtmb250LXdlaWdodDo2MDB9I2MyYy1ib3g+LmMyYy1yPi5ib3QgLmxpc3QtdGl0bGUsI2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLmNvbnRlbnR7d2lkdGg6MTAwJTtjb2xvcjojYzdjY2U2O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6OHB4IDVweDtsaW5lLWhlaWdodDoyNHB4fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPmRpdjpmaXJzdC1jaGlsZCwjYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAuY29udGVudD5kaXY6Zmlyc3QtY2hpbGR7d2lkdGg6NiU7aGVpZ2h0OjI0cHg7dGV4dC1hbGlnbjpsZWZ0fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPmRpdjpudGgtY2hpbGQobisyKSwjYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAuY29udGVudD5kaXY6bnRoLWNoaWxkKG4rMil7d2lkdGg6MTIlfSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPmRpdjpsYXN0LWNoaWxkLCNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC5jb250ZW50PmRpdjpsYXN0LWNoaWxke3dpZHRoOjI0JX0jYzJjLWJveD4uYzJjLXI+LmJvdCAubGlzdC10aXRsZT4ubGFzdCwjYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAuY29udGVudD4ubGFzdHt0ZXh0LWFsaWduOnJpZ2h0O2hlaWdodDoyNHB4fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPi5sYXN0PmRpdiwjYzJjLWJveD4uYzJjLXI+LmJvdCAubGlzdC10aXRsZT4ubGFzdD5zcGFuLCNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC5jb250ZW50Pi5sYXN0PmRpdiwjYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAuY29udGVudD4ubGFzdD5zcGFue2Zsb2F0OnJpZ2h0O21hcmdpbjowIDVweH0jYzJjLWJveD4uYzJjLXI+LmJvdCAubGlzdC10aXRsZT4ubGFzdCAuYnRuLWxhc3QsI2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLmNvbnRlbnQ+Lmxhc3QgLmJ0bi1sYXN0e3BhZGRpbmc6MCAxMHB4O21pbi13aWR0aDo1NXB4O21heC13aWR0aDo4MHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50O2N1cnNvcjpwb2ludGVyfSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0e2JhY2tncm91bmQ6IzI2MmE0Mjt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4IDMwcHggMTBweDttYXJnaW46MCBhdXRvfSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0IHB7Zm9udC13ZWlnaHQ6NjAwO2xpbmUtaGVpZ2h0OjM2cHh9I2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLnRyYWRlLWxpc3QgcCBzcGFue2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcn0jYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAudHJhZGUtbGlzdCBwIHNwYW46Zmlyc3QtY2hpbGR7dGV4dC1hbGlnbjpsZWZ0fSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0IHAgc3BhbjpsYXN0LWNoaWxke3RleHQtYWxpZ246cmlnaHR9I2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLnRyYWRlLWxpc3QgdWwgbGl7cGFkZGluZzoxMnB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwMzk1Nn0jYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAudHJhZGUtbGlzdCB1bCBsaT5kaXZ7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MjUlfSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0IHVsIGxpPmRpdjpmaXJzdC1jaGlsZHt0ZXh0LWFsaWduOmxlZnR9I2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLnRyYWRlLWxpc3QgdWwgbGk+ZGl2Omxhc3QtY2hpbGR7dGV4dC1hbGlnbjpyaWdodH0jYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAudHJhZGUtbGlzdCB1bCBsaT5kaXY6bGFzdC1jaGlsZCBkaXZ7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDE0cHg7bWFyZ2luOjAgNnB4O2xpbmUtaGVpZ2h0OjEuNjtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveD4uYzJjLXI+LmJvdCAudWwtb3V0IGxpIC5jb250ZW50PmRpdjpmaXJzdC1jaGlsZHtjb2xvcjojMjU3OTZhfSNjMmMtYm94Pi5jMmMtcj4uYm90IC51bC1vdXQgbGkgLmNvbnRlbnQgLmJ0bi1sYXN0e2JhY2tncm91bmQ6IzI1Nzk2YX0jYzJjLWJveD4uYzJjLXI+LmJvdCAudWwtaW4gbGkgLmNvbnRlbnQ+ZGl2OmZpcnN0LWNoaWxke2NvbG9yOiM3YTk4Zjd9I2MyYy1ib3g+LmMyYy1yPi5ib3QgLnVsLWluIGxpIC5jb250ZW50IC5idG4tbGFzdHtiYWNrZ3JvdW5kOiM3YTk4Zjd9LmRldGFpbGl0LC5zaG93dHJhZGV7bWFyZ2luLXJpZ2h0OjIwcHg7cGFkZGluZzowIDEwcHg7bWluLXdpZHRoOjU1cHg7bWF4LXdpZHRoOjgwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnQ7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojN2E5OGY3fSNjMmMtYm94W2RhdGEtdi02Mzg0Mzg2Yl17bWFyZ2luOjEwcHggMCAxMHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE0cHh9I2MyYy1ib3ggLm1sNVtkYXRhLXYtNjM4NDM4NmJde21hcmdpbi1sZWZ0OjVweH0jYzJjLWJveCAuYzJjLXIgLnRpdGxlLXRvcCBwW2RhdGEtdi02Mzg0Mzg2Yl17bWFyZ2luLXJpZ2h0OjMwcHg7cGFkZGluZzo1cHggMDtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveCAuYzJjLXIgLmNvaW4tc2VsZWN0IHBbZGF0YS12LTYzODQzODZiXXttYXJnaW4tcmlnaHQ6MTBweDtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveCAuYzJjLXIgLmNvaW4tc2VsZWN0IC5zZWxlY3RbZGF0YS12LTYzODQzODZiXXtjb2xvcjojN2E5OGY3fSNjMmMtYm94IC5jMmMtciAubGlzdGJveCAuZmxleHRpdGxlW2RhdGEtdi02Mzg0Mzg2Yl17cGFkZGluZzoyMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzI0Mjg0MH0jYzJjLWJveCAuYzJjLXIgLmxpc3Rib3ggLmZsZXh0aXRsZSBzcGFuW2RhdGEtdi02Mzg0Mzg2Yl17ZmxleDoxfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaVtkYXRhLXYtNjM4NDM4NmJde3BhZGRpbmc6MTBweCAwfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaT5kaXZbZGF0YS12LTYzODQzODZiXXtmbGV4OjF9I2MyYy1ib3ggLmMyYy1yIC5saXN0Ym94IGxpIC5ibHVlW2RhdGEtdi02Mzg0Mzg2Yl17Y29sb3I6IzNiNjhiYjtmb250LXdlaWdodDpib2xkZXJ9I2MyYy1ib3ggLmMyYy1yIC5saXN0Ym94IGxpIC5saWdodF9ncmVlbltkYXRhLXYtNjM4NDM4NmJde2NvbG9yOiM0ODk5NzI7Zm9udC13ZWlnaHQ6NjAwfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaSAuaGVhZFtkYXRhLXYtNjM4NDM4NmJde3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjEwcHg7YmFja2dyb3VuZDojNWQ4Y2MyO2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHh9I2MyYy1ib3ggLmMyYy1yIC5saXN0Ym94IGxpIC5idG5bZGF0YS12LTYzODQzODZiXXtib3JkZXItcmFkaXVzOjNweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYzOGJkNDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OjMzcHg7bWluLXdpZHRoOjgwcHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2JvcmRlcjpub25lfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaVtkYXRhLXYtNjM4NDM4NmJdOm50aC1jaGlsZCgybil7YmFja2dyb3VuZDojMjQyODQwfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaVtkYXRhLXYtNjM4NDM4NmJdOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzI0Mjg0MH0jYzJjLWJveCAubWFza1tkYXRhLXYtNjM4NDM4NmJde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDo5OTk7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjcpfSNjMmMtYm94IC5tYXNrPi5tLWNvbnRlbnRbZGF0YS12LTYzODQzODZiXXtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7cGFkZGluZzo0MHB4IDIwcHggMzBweDttYXgtaGVpZ2h0OjU1MHB4O3dpZHRoOjQwMHB4fSNjMmMtYm94IC5tYXNrPi5tLWNvbnRlbnQ+LnRpdGxlW2RhdGEtdi02Mzg0Mzg2Yl17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtmb250LXNpemU6MThweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXdlaWdodDo2MDB9I2MyYy1ib3ggLm1hc2s+Lm0tY29udGVudD4udGl0bGU+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06bGFzdC1jaGlsZHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3BhZGRpbmc6MCAxNXB4O2N1cnNvcjpwb2ludGVyfSNjMmMtYm94IC5tYXNrPi5tLWNvbnRlbnQ+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06bm90KC50aXRsZSl7bGluZS1oZWlnaHQ6MzJweH0jYzJjLWJveCAubWFzaz4ubS1jb250ZW50IGRpdiBzcGFuW2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjVweDtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo4OXB4O2NvbG9yOiM3YTk4Zjd9I2MyYy1ib3ggLm1vcmVbZGF0YS12LTYzODQzODZiXXtjb2xvcjojN2E5OGY3O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfSNjMmMtYm94Pi5jMmMtbFtkYXRhLXYtNjM4NDM4NmJde21hcmdpbjowIDEwcHg7cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6IzE4MWIyYTt3aWR0aDoyMyV9I2MyYy1ib3g+LmMyYy1sIGxpW2RhdGEtdi02Mzg0Mzg2Yl17cGFkZGluZzowIDIwcHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6NDBweH0jYzJjLWJveD4uYzJjLWwgbGkgLnJlZENvbG9yW2RhdGEtdi02Mzg0Mzg2Yl17bWFyZ2luLWxlZnQ6MTBweH0jYzJjLWJveD4uYzJjLWwgbGlbZGF0YS12LTYzODQzODZiXTpob3ZlcntiYWNrZ3JvdW5kOiMyNjJhNDJ9I2MyYy1ib3g+LmMyYy1yW2RhdGEtdi02Mzg0Mzg2Yl17cGFkZGluZzoxMHB4IDMwcHg7YmFja2dyb3VuZDojMTgxYjJhO21hcmdpbi1yaWdodDoxMHB4O3dpZHRoOjc3JX0jYzJjLWJveD4uYzJjLXI+LnRvcD4udG9wLXRpdGxlW2RhdGEtdi02Mzg0Mzg2Yl17Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6Mn0jYzJjLWJveD4uYzJjLXI+LnRvcD4udG9wLXRpdGxlIC5saW5rLXNwYW5bZGF0YS12LTYzODQzODZiXXtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveD4uYzJjLXI+LnRvcD4udG9wLXRpdGxlIC5saW5rLXNwYW5bZGF0YS12LTYzODQzODZiXTpob3Zlcntjb2xvcjojN2E5OGY3fSNjMmMtYm94Pi5jMmMtcj4udG9wIC50b3AtcHJpY2U+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl17bWFyZ2luLXJpZ2h0OjIwcHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLnRvcC1wcmljZT5kaXY+c3BhbltkYXRhLXYtNjM4NDM4NmJdOmxhc3QtY2hpbGR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxNnB4fSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjMwcHg7Ym9yZGVyLXJpZ2h0OjFweCBkYXNoZWQgIzRlNWI4NTtwYWRkaW5nLXJpZ2h0OjMwcHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW1bZGF0YS12LTYzODQzODZiXXtmbGV4OjF9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0+LmlucC10aXRsZVtkYXRhLXYtNjM4NDM4NmJde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0ZTViODU7Zm9udC1zaXplOjE2cHg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGluZS1oZWlnaHQ6M30jYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbT4uaG93W2RhdGEtdi02Mzg0Mzg2Yl17bGluZS1oZWlnaHQ6NDBweDtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbT4udGhyZWUtaW5wPi5pbnAtYm94W2RhdGEtdi02Mzg0Mzg2Yl17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQycHg7bGluZS1oZWlnaHQ6NDBweDtwYWRkaW5nLWxlZnQ6MTEycHg7bWFyZ2luLWJvdHRvbToxNXB4fSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi50aHJlZS1pbnA+LmlucC1ib3g+c3BhbltkYXRhLXYtNjM4NDM4NmJde3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjExMnB4O3RvcDowO2xlZnQ6MH0jYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbT4udGhyZWUtaW5wPi5pbnAtYm94PmRpdltkYXRhLXYtNjM4NDM4NmJdLCNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtPi50aHJlZS1pbnA+LmlucC1ib3g+aW5wdXRbZGF0YS12LTYzODQzODZiXXtjb2xvcjojYzdjY2U2O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtsaW5lLWhlaWdodDo0MHB4O3BhZGRpbmc6MCAyMHB4O2JvcmRlcjoxcHggc29saWQgIzRlNWI4NTtiYWNrZ3JvdW5kOm5vbmV9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0+LnRocmVlLWlucD4uaW5wLWJveD5kaXZbZGF0YS12LTYzODQzODZiXXtjb2xvcjojN2E5OGY3fSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtIC5wYXktb3B0c1tkYXRhLXYtNjM4NDM4NmJde2ZsZXgtd3JhcDp3cmFwfSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtIC5wYXktb3B0cz5kaXZbZGF0YS12LTYzODQzODZiXTpudGgtY2hpbGQobisyKXttYXJnaW4tbGVmdDoxNXB4fSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtIC5wYXktb3B0cz5kaXZbZGF0YS12LTYzODQzODZiXXtsaW5lLWhlaWdodDo0MHB4fSNjMmMtYm94Pi5jMmMtcj4udG9wIC5pbnAtaXRlbXM+LmlucC1pdGVtIC5wYXktb3B0cz5kaXY+aW5wdXRbZGF0YS12LTYzODQzODZiXXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9I2MyYy1ib3g+LmMyYy1yPi50b3AgLmlucC1pdGVtcz4uaW5wLWl0ZW0gLmJ0bi1vdXRbZGF0YS12LTYzODQzODZiXSwjYzJjLWJveD4uYzJjLXI+LnRvcCAuaW5wLWl0ZW1zPi5pbnAtaXRlbT4uYnRuLWluW2RhdGEtdi02Mzg0Mzg2Yl17bWFyZ2luLXRvcDoyMHB4O2xpbmUtaGVpZ2h0OjQycHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0ZTViODV9I2MyYy1ib3g+LmMyYy1yPi5ib3RbZGF0YS12LTYzODQzODZiXXtjb2xvcjojNmI4MGFlfSNjMmMtYm94Pi5jMmMtcj4uYm90Pi5ib3QtdGl0bGVbZGF0YS12LTYzODQzODZiXXttYXJnaW46MzBweCAwIDA7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6NDBweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXJ9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT5kaXZbZGF0YS12LTYzODQzODZiXTpmaXJzdC1jaGlsZHtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxlPmRpdjpmaXJzdC1jaGlsZCBzcGFuW2RhdGEtdi02Mzg0Mzg2Yl17Zm9udC13ZWlnaHQ6NjAwO2xpbmUtaGVpZ2h0OjQwcHg7bWFyZ2luLXJpZ2h0OjIwcHh9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT5kaXY6Zmlyc3QtY2hpbGQgLmFjdGl2ZVtkYXRhLXYtNjM4NDM4NmJde2NvbG9yOiM3YTk4Zjc7Ym9yZGVyOm5vbmV9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT4uZmxleFtkYXRhLXYtNjM4NDM4NmJde2hlaWdodDoxN3B4O2xpbmUtaGVpZ2h0OjE1cHg7Y3Vyc29yOnBvaW50ZXJ9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT4uZmxleD5kaXZbZGF0YS12LTYzODQzODZiXXttYXJnaW4tcmlnaHQ6MTBweDtib3JkZXI6MXB4IHNvbGlkICNjY2M7dHJhbnNpdGlvbjphbGwgLjNzO3dpZHRoOjMycHg7Ym9yZGVyLXJhZGl1czo3LjVweH0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxlPi5mbGV4PmRpdiBkaXZbZGF0YS12LTYzODQzODZiXXt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2ZmZn0jYzJjLWJveD4uYzJjLXI+LmJvdD4uYm90LXRpdGxlPi5mbGV4IC5zd2l0Y2gtb25bZGF0YS12LTYzODQzODZiXXtwYWRkaW5nLWxlZnQ6MDtiYWNrZ3JvdW5kOiNjY2N9I2MyYy1ib3g+LmMyYy1yPi5ib3Q+LmJvdC10aXRsZT4uZmxleCAuc3dpdGNoW2RhdGEtdi02Mzg0Mzg2Yl17dHJhbnNpdGlvbjphbGwgLjNzO2JhY2tncm91bmQ6IzdhOThmNztwYWRkaW5nLWxlZnQ6MTVweH0jYzJjLWJveD4uYzJjLXI+LmJvdD4ubGlzdC10aXRsZVtkYXRhLXYtNjM4NDM4NmJde2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7Zm9udC13ZWlnaHQ6NjAwfSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlW2RhdGEtdi02Mzg0Mzg2Yl0sI2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLmNvbnRlbnRbZGF0YS12LTYzODQzODZiXXt3aWR0aDoxMDAlO2NvbG9yOiNjN2NjZTY7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo4cHggNXB4O2xpbmUtaGVpZ2h0OjI0cHh9I2MyYy1ib3g+LmMyYy1yPi5ib3QgLmxpc3QtdGl0bGU+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGQsI2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLmNvbnRlbnQ+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGR7d2lkdGg6NiU7aGVpZ2h0OjI0cHg7dGV4dC1hbGlnbjpsZWZ0fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPmRpdltkYXRhLXYtNjM4NDM4NmJdOm50aC1jaGlsZChuKzIpLCNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC5jb250ZW50PmRpdltkYXRhLXYtNjM4NDM4NmJdOm50aC1jaGlsZChuKzIpe3dpZHRoOjEyJX0jYzJjLWJveD4uYzJjLXI+LmJvdCAubGlzdC10aXRsZT5kaXZbZGF0YS12LTYzODQzODZiXTpsYXN0LWNoaWxkLCNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC5jb250ZW50PmRpdltkYXRhLXYtNjM4NDM4NmJdOmxhc3QtY2hpbGR7d2lkdGg6MjQlfSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPi5sYXN0W2RhdGEtdi02Mzg0Mzg2Yl0sI2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLmNvbnRlbnQ+Lmxhc3RbZGF0YS12LTYzODQzODZiXXt0ZXh0LWFsaWduOnJpZ2h0O2hlaWdodDoyNHB4fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPi5sYXN0PmRpdltkYXRhLXYtNjM4NDM4NmJdLCNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPi5sYXN0PnNwYW5bZGF0YS12LTYzODQzODZiXSwjYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAuY29udGVudD4ubGFzdD5kaXZbZGF0YS12LTYzODQzODZiXSwjYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAuY29udGVudD4ubGFzdD5zcGFuW2RhdGEtdi02Mzg0Mzg2Yl17ZmxvYXQ6cmlnaHQ7bWFyZ2luOjAgNXB4fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5saXN0LXRpdGxlPi5sYXN0IC5idG4tbGFzdFtkYXRhLXYtNjM4NDM4NmJdLCNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC5jb250ZW50Pi5sYXN0IC5idG4tbGFzdFtkYXRhLXYtNjM4NDM4NmJde3BhZGRpbmc6MCAxMHB4O21pbi13aWR0aDo1NXB4O21heC13aWR0aDo4MHB4O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50O2N1cnNvcjpwb2ludGVyfSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0W2RhdGEtdi02Mzg0Mzg2Yl17YmFja2dyb3VuZDojMjYyYTQyO3dpZHRoOjEwMCU7cGFkZGluZzo1cHggMzBweCAxMHB4O21hcmdpbjowIGF1dG99I2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLnRyYWRlLWxpc3QgcFtkYXRhLXYtNjM4NDM4NmJde2ZvbnQtd2VpZ2h0OjYwMDtsaW5lLWhlaWdodDozNnB4fSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0IHAgc3BhbltkYXRhLXYtNjM4NDM4NmJde2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcn0jYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAudHJhZGUtbGlzdCBwIHNwYW5bZGF0YS12LTYzODQzODZiXTpmaXJzdC1jaGlsZHt0ZXh0LWFsaWduOmxlZnR9I2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLnRyYWRlLWxpc3QgcCBzcGFuW2RhdGEtdi02Mzg0Mzg2Yl06bGFzdC1jaGlsZHt0ZXh0LWFsaWduOnJpZ2h0fSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0IHVsIGxpW2RhdGEtdi02Mzg0Mzg2Yl17cGFkZGluZzoxMnB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwMzk1Nn0jYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAudHJhZGUtbGlzdCB1bCBsaT5kaXZbZGF0YS12LTYzODQzODZiXXt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoyNSV9I2MyYy1ib3g+LmMyYy1yPi5ib3QgdWwgbGkgLnRyYWRlLWxpc3QgdWwgbGk+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGR7dGV4dC1hbGlnbjpsZWZ0fSNjMmMtYm94Pi5jMmMtcj4uYm90IHVsIGxpIC50cmFkZS1saXN0IHVsIGxpPmRpdltkYXRhLXYtNjM4NDM4NmJdOmxhc3QtY2hpbGR7dGV4dC1hbGlnbjpyaWdodH0jYzJjLWJveD4uYzJjLXI+LmJvdCB1bCBsaSAudHJhZGUtbGlzdCB1bCBsaT5kaXY6bGFzdC1jaGlsZCBkaXZbZGF0YS12LTYzODQzODZiXXtmbG9hdDpyaWdodDtwYWRkaW5nOjAgMTRweDttYXJnaW46MCA2cHg7bGluZS1oZWlnaHQ6MS42O2N1cnNvcjpwb2ludGVyfSNjMmMtYm94Pi5jMmMtcj4uYm90IC51bC1vdXQgbGkgLmNvbnRlbnQ+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGR7Y29sb3I6IzI1Nzk2YX0jYzJjLWJveD4uYzJjLXI+LmJvdCAudWwtb3V0IGxpIC5jb250ZW50IC5idG4tbGFzdFtkYXRhLXYtNjM4NDM4NmJde2JhY2tncm91bmQ6IzI1Nzk2YX0jYzJjLWJveD4uYzJjLXI+LmJvdCAudWwtaW4gbGkgLmNvbnRlbnQ+ZGl2W2RhdGEtdi02Mzg0Mzg2Yl06Zmlyc3QtY2hpbGR7Y29sb3I6IzdhOThmN30jYzJjLWJveD4uYzJjLXI+LmJvdCAudWwtaW4gbGkgLmNvbnRlbnQgLmJ0bi1sYXN0W2RhdGEtdi02Mzg0Mzg2Yl17YmFja2dyb3VuZDojN2E5OGY3fS5kZXRhaWxpdFtkYXRhLXYtNjM4NDM4NmJdLC5zaG93dHJhZGVbZGF0YS12LTYzODQzODZiXXttYXJnaW4tcmlnaHQ6MjBweDtwYWRkaW5nOjAgMTBweDttaW4td2lkdGg6NTVweDttYXgtd2lkdGg6ODBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiM3YTk4Zjd9I2MyYy1ib3ggLm1vcmV7Y29sb3I6IzdhOThmNztjdXJzb3I6cG9pbnRlcjt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlcjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9I2MyYy1ib3g+LmMyYy1yPi50b3A+LnRvcC10aXRsZXtmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDoyfSNjMmMtYm94Pi5jMmMtcj4udG9wIC50b3AtbGVmdHt3aWR0aDo0OS41NSU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I2M3Y2NlNjtmb250LXNpemU6MTVweH0jYzJjLWJveD4uYzJjLXI+LnRvcCAudG9wLWxlZnQgaDR7Zm9udC1zaXplOjE3cHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLnRvcC1sZWZ0IGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6MTBweDttYXJnaW4tcmlnaHQ6NXB4fSNjMmMtYm94Pi5jMmMtcj4udG9wIC50b3AtbGVmdCAuYmdfYWN0aXZle2NvbG9yOiM3YTk4Zjc7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzdhOThmN30jYzJjLWJveD4uYzJjLXI+LnRvcCAudG9wLXJpZ2h0e3dpZHRoOjQ5LjU1JTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojYzdjY2U2fSNjMmMtYm94Pi5jMmMtcj4udG9wIC50b3AtcmlnaHQgaDR7Zm9udC1zaXplOjE3cHh9I2MyYy1ib3g+LmMyYy1yPi50b3AgLnRvcC1yaWdodCBsaXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjEwcHg7bWFyZ2luLXJpZ2h0OjVweH0jYzJjLWJveD4uYzJjLXI+LnRvcCAudG9wLXJpZ2h0IC5iZ19hY3RpdmV7Y29sb3I6IzdhOThmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjN2E5OGY3fSNjMmMtYm94Pi5jMmMtcj4uYm90e2NvbG9yOiM2YjgwYWV9I2MyYy1ib3g+LmMyYy1yPi5ib3QgLmNvbnRlbnR7d2lkdGg6MTAwJX0jYzJjLWJveD4uYzJjLXI+LmJvdCAuY29udGVudCBsaXt3aWR0aDoxMDAlO2NvbG9yOiNjN2NjZTY7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo4cHggNXB4O2xpbmUtaGVpZ2h0OjI0cHh9I2MyYy1ib3g+LmMyYy1yPi5ib3QgLmNvbnRlbnQ+LmZsZXh7Y3Vyc29yOnBvaW50ZXJ9I2MyYy1ib3g+LmMyYy1yPi5ib3QgLmNvbnRlbnQ+LmZsZXg+ZGl2e2ZsZXg6MTtwYWRkaW5nOjEwcHggMH0jYzJjLWJveD4uYzJjLXI+LmJvdCAuY29udGVudCAudGx7dGV4dC1hbGlnbjpsZWZ0fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5jb250ZW50IC50cnt0ZXh0LWFsaWduOnJpZ2h0fSNjMmMtYm94Pi5jMmMtcj4uYm90IC5jb250ZW50IGJ1dHRvbntib3JkZXItcmFkaXVzOjNweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYzOGJkNDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OjMzcHg7bWluLXdpZHRoOjgwcHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2JvcmRlcjpub25lfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaXtwYWRkaW5nOjEwcHggMH0jYzJjLWJveCAuYzJjLXIgLmxpc3Rib3ggbGkgLmJsdWV7Y29sb3I6IzNiNjhiYjtmb250LXdlaWdodDpib2xkZXJ9I2MyYy1ib3ggLmMyYy1yIC5saXN0Ym94IGxpIC5saWdodF9ncmVlbntjb2xvcjojNDg5OTcyO2ZvbnQtd2VpZ2h0OjYwMH0jYzJjLWJveCAuYzJjLXIgLmxpc3Rib3ggbGkgLmhlYWR7bGluZS1oZWlnaHQ6MzZweH0jYzJjLWJveCAuYzJjLXIgLmxpc3Rib3ggbGkgLnNlbGx7YmFja2dyb3VuZDojZTM1NzQ0fSNjMmMtYm94IC5tYXNre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO3otaW5kZXg6OTk5O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNyl9I2MyYy1ib3ggLm1hc2s+Lm0tY29udGVudHtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOiMyNjJhNDI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7cGFkZGluZzo0MHB4IDIwcHggMzBweDttYXgtaGVpZ2h0OjU1MHB4O3dpZHRoOjQwMHB4fSNjMmMtYm94IC5tYXNrPi5tLWNvbnRlbnQ+LnRpdGxle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7Zm9udC1zaXplOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NjAwfSNjMmMtYm94IC5tYXNrPi5tLWNvbnRlbnQ+LnRpdGxlPmRpdjpsYXN0LWNoaWxke3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7cGFkZGluZzowIDE1cHg7Y3Vyc29yOnBvaW50ZXJ9I2MyYy1ib3ggLm1hc2s+Lm0tY29udGVudD5kaXY6bm90KC50aXRsZSl7bGluZS1oZWlnaHQ6MzJweH0jYzJjLWJveCAubWFzaz4ubS1jb250ZW50IGRpdiBzcGFuOmZpcnN0LWNoaWxke21hcmdpbi1yaWdodDo1cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6OTBweH0jYzJjLWJveCAubWFzaz4ubS1jb250ZW50IC5idG5ib3g+ZGl2e3BhZGRpbmc6M3B4IDE1cHg7YmFja2dyb3VuZDojNjg5Y2YxO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXJ9I2MyYy1ib3ggLm1hc2s+Lm0tY29udGVudCAuYnRuYm94IC5jZWlsb3JkZXJ7YmFja2dyb3VuZDojOWRiNWM3fSNjMmMtYm94e21hcmdpbjoxMHB4IDAgMTBweDtjb2xvcjojYzdjY2U2fSNjMmMtYm94IC5tbDV7bWFyZ2luLWxlZnQ6NXB4fSNjMmMtYm94IC5kZXRhaWwtYnRue2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjM4YmQ0O2N1cnNvcjpwb2ludGVyO21pbi1oZWlnaHQ6MzNweDttaW4td2lkdGg6ODBweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Ym9yZGVyOm5vbmV9I2MyYy1ib3ggLmMyYy1yIC50aXRsZS10b3AgcHttYXJnaW4tcmlnaHQ6MzBweDtwYWRkaW5nOjVweCAwO2N1cnNvcjpwb2ludGVyfSNjMmMtYm94IC5jMmMtciAuY29pbi1zZWxlY3QgcHttYXJnaW4tcmlnaHQ6MTBweDtjdXJzb3I6cG9pbnRlcn0jYzJjLWJveCAuYzJjLXIgLmNvaW4tc2VsZWN0IC5zZWxlY3R7Y29sb3I6IzdhOThmN30jYzJjLWJveCAuYzJjLXIgLmxpc3Rib3ggLmZsZXh0aXRsZXtwYWRkaW5nOjIwcHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMjQyODQwfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCAuZmxleHRpdGxlIHNwYW57ZmxleDoxfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaXtwYWRkaW5nOjE1cHggMH0jYzJjLWJveCAuYzJjLXIgLmxpc3Rib3ggbGk+ZGl2e2ZsZXg6MTtsaW5lLWhlaWdodDozNnB4fSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaSAuaGVhZHt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDoxMHB4O2JhY2tncm91bmQ6IzVkOGNjMjtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNHB4fSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaSAuYnRue2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjM4YmQ0O2N1cnNvcjpwb2ludGVyO21pbi1oZWlnaHQ6MzNweDttaW4td2lkdGg6ODBweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2MDA7Ym9yZGVyOm5vbmV9I2MyYy1ib3ggLmMyYy1yIC5saXN0Ym94IGxpOm50aC1jaGlsZCgybil7YmFja2dyb3VuZDojMjQyODQwfSNjMmMtYm94IC5jMmMtciAubGlzdGJveCBsaTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMyNDI4NDB9I2MyYy1ib3g+LmMyYy1se21hcmdpbjowIDEwcHg7cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6IzE4MWIyYTt3aWR0aDoyMyV9I2MyYy1ib3g+LmMyYy1sIGxpe3BhZGRpbmc6MCAyMHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2N1cnNvcjpwb2ludGVyfSNjMmMtYm94Pi5jMmMtbCBsaSAucmVkQ29sb3J7bWFyZ2luLWxlZnQ6MTBweH0jYzJjLWJveD4uYzJjLWwgbGk6aG92ZXJ7YmFja2dyb3VuZDojMjYyYTQyfSNjMmMtYm94Pi5jMmMtcntwYWRkaW5nOjEwcHggMzBweDtiYWNrZ3JvdW5kOiMxODFiMmE7bWFyZ2luLXJpZ2h0OjEwcHg7d2lkdGg6NzclfSNjMmMtYm94IC5tb2RhbHN7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjMpO292ZXJmbG93OmhpZGRlbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0jYzJjLWJveCAubW9kYWxzIC5tb2RhbHMtY29udGVudHt3aWR0aDo1MDBweDtiYWNrZ3JvdW5kLWNvbG9yOiMyNjJhNDI7bWFyZ2luOjAgYXV0bztib3JkZXItcmFkaXVzOjVweH0jYzJjLWJveCAubW9kYWxzIC5tb2RhbHMtY29udGVudCAubW9kYWwtaGVhZGVye2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9I2MyYy1ib3ggLm1vZGFscyAubW9kYWxzLWNvbnRlbnQgLm1vZGFsLWhlYWRlciBwe3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjB9I2MyYy1ib3ggLm1vZGFscyAubW9kYWxzLWNvbnRlbnQgLnBheS1jYW5uZWx7bWFyZ2luOjAgMTVweDtwYWRkaW5nLWJvdHRvbToxMHB4fSNjMmMtYm94IC5tb2RhbHMgLm1vZGFscy1jb250ZW50IC5wYXktY2FubmVsIGRpdntsaW5lLWhlaWdodDo0MHB4fSNjMmMtYm94IC5tb2RhbHMgLm1vZGFscy1jb250ZW50IC5wYXktY29tcGxldGV7bWFyZ2luOjAgMTVweDtwYWRkaW5nLWJvdHRvbToxMHB4fSNjMmMtYm94IC5tb2RhbHMgLm1vZGFscy1jb250ZW50IC5wYXktY29tcGxldGUgZGl2e2xpbmUtaGVpZ2h0OjQwcHh9I2MyYy1ib3ggLm1vZGFscyAubW9kYWxzLWNvbnRlbnQgLm1vZGFscy1sZWZ0e3dpZHRoOjEwMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfSNjMmMtYm94IC5tb2RhbHMgLm1vZGFscy1jb250ZW50IC5idG5ze2xpbmUtaGVpZ2h0OjQwcHg7bWFyZ2luOjAgMTVweDtwYWRkaW5nLWJvdHRvbToxMHB4fSNjMmMtYm94IC5tb2RhbHMgLm1vZGFscy1jb250ZW50IC5idG5zIGJ1dHRvbntib3JkZXItcmFkaXVzOjNweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYzOGJkNDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OjMzcHg7bWluLXdpZHRoOjgwcHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjAwO2JvcmRlcjpub25lO3BhZGRpbmc6MCAxMHB4fS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudFtkYXRhLXYtNGViNWE5NTBde21hcmdpbjowIGF1dG87b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctdG9wOjB9Lm5vdGljZSAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5iYWNrLW5hdltkYXRhLXYtNGViNWE5NTBde2hlaWdodDo0MHB4O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjQwcHh9Lm5vdGljZSAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5uYXYtYWZ0ZXJbZGF0YS12LTRlYjVhOTUwXXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMHB4O2JhY2tncm91bmQtY29sb3I6IzI2MmE0Mn0ubm90aWNlIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLmFjY291bnQtY29udGVudFtkYXRhLXYtNGViNWE5NTBde3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NTBweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmF9Lm5vdGljZSAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5hY2NvdW50LWNvbnRlbnQgdWxbZGF0YS12LTRlYjVhOTUwXXtwYWRkaW5nOjAgMjBweDtmb250LXNpemU6MTRweH0ubm90aWNlIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLmFjY291bnQtY29udGVudCB1bCBsaVtkYXRhLXYtNGViNWE5NTBde2JvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjMzAzYjRiO2hlaWdodDo3MnB4O3BhZGRpbmc6MTBweCAwIDdweDtjb2xvcjojY2RkNmU0O2ZvbnQtc2l6ZToxMnB4fS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYWNjb3VudC1jb250ZW50IHVsIGxpPmRpdj5kaXZbZGF0YS12LTRlYjVhOTUwXXtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoxOHB4fS5ub3RpY2UgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYWNjb3VudC1jb250ZW50IHVsIGxpPmRpdiBzcGFuW2RhdGEtdi00ZWI1YTk1MF17Y29sb3I6IzYxNjg4YX0ubV90aXRsZVtkYXRhLXYtNjg5MGVhYWVde2hlaWdodDo1NXB4O3BhZGRpbmc6MTVweCAzMHB4O2xpbmUtaGVpZ2h0OjI1cHh9Lm1fc2VhcmNoIGlucHV0W2RhdGEtdi02ODkwZWFhZV17Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MXB4IHNvbGlkICM1MjY4OGM7bGluZS1oZWlnaHQ6MjVweH0ubV9zZWFyY2ggaW1nW2RhdGEtdi02ODkwZWFhZV17d2lkdGg6MTZweDtoZWlnaHQ6MTVweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozNXB4O3RvcDoyMHB4O3otaW5kZXg6MTIzfS5tX2ZpbHRlcltkYXRhLXYtNjg5MGVhYWVde3BhZGRpbmc6MTBweCAwIDE1cHh9LnRhYnRpdGxlIHNwYW5bZGF0YS12LTY4OTBlYWFlXXt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjAgMTBweH0uY29pbi10aXRsZSBkaXZbZGF0YS12LTY4OTBlYWFlXXt3aWR0aDozMy4zJTtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYTt0ZXh0LWFsaWduOmNlbnRlcjtmbG9hdDpsZWZ0O2NvbG9yOiM2MzcwODU7Zm9udC1zaXplOjEycHh9LmNvaW4tdGl0bGUgaW1nW2RhdGEtdi02ODkwZWFhZV17dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi10b3A6LTNweH0ubGluZVtkYXRhLXYtNjg5MGVhYWVde3dpZHRoOjkwJTttYXJnaW46MCBhdXRvO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGJ9LmNvaW4td3JhcFtkYXRhLXYtNjg5MGVhYWVde2hlaWdodDozOTVweDtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0uY29pbi13cmFwIGxpW2RhdGEtdi02ODkwZWFhZV17aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjojY2RkNmU0fS5jb2luLXdyYXAgbGkgc3BhbltkYXRhLXYtNjg5MGVhYWVde2Rpc3BsYXk6YmxvY2s7d2lkdGg6MzMlO2Zsb2F0OmxlZnQ7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvaW4td3JhcCBsaSBzcGFuW2RhdGEtdi02ODkwZWFhZV06bGFzdC1jaGlsZHtjb2xvcjojY2M0OTUxfS5jb2luLXdyYXAgbGlbZGF0YS12LTY4OTBlYWFlXTpudGgtY2hpbGQob2RkKXtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmF9LmNvaW4td3JhcCBsaSBzcGFuLmdyZWVuW2RhdGEtdi02ODkwZWFhZV17Y29sb3I6IzU1YTA2N30uY29pbi13cmFwIGxpIHBbZGF0YS12LTY4OTBlYWFlXXtvdmVyZmxvdzpoaWRkZW59LmFjdGl2ZV9wW2RhdGEtdi02ODkwZWFhZV0sLmNvaW4td3JhcCBsaSBwW2RhdGEtdi02ODkwZWFhZV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS50cmFkZVtkYXRhLXYtMmU1YWIwZDhde3dpZHRoOjM1MHB4O3BhZGRpbmctYm90dG9tOjE1cHh9LmlucHV0LmRpc2FibGVkW2RhdGEtdi0yZTVhYjBkOF17Y29sb3I6IzYyNzA4NTtjdXJzb3I6bm90LWFsbG93ZWR9LmJ0bi13cmFwW2RhdGEtdi0yZTVhYjBkOF17cGFkZGluZzoxMHB4IDIwcHh9LmJ0bi13cmFwIC5lbC1idXR0b25bZGF0YS12LTJlNWFiMGQ4XTpmb2N1cywuYnRuLXdyYXAgLmVsLWJ1dHRvbltkYXRhLXYtMmU1YWIwZDhdOmhvdmVyLFtkYXRhLXYtMmU1YWIwZDhdIC5idG4td3JhcCAuZWwtYnV0dG9ue2JhY2tncm91bmQtY29sb3I6IzJlMmUyZTtjb2xvcjojYzRjNGM0O2JvcmRlci1jb2xvcjojODQ4MzgzO3dpZHRoOjUwJX1bZGF0YS12LTJlNWFiMGQ4XSAuYnRuLXdyYXAgLmVsLWJ1dHRvbi0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiMzNWI2NWE7d2lkdGg6NTAlfS5idG4td3JhcCAuZWwtYnV0dG9uLS1hY3RpdmVzZWxsW2RhdGEtdi0yZTVhYjBkOF06aG92ZXIsW2RhdGEtdi0yZTVhYjBkOF0gLmJ0bi13cmFwIC5lbC1idXR0b24tLWFjdGl2ZXNlbGw6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZjQ5NGE7Ym9yZGVyLWNvbG9yOiM4NDgzODN9LmJ0bi13cmFwIC5lbC1idXR0b24tLWFjdGl2ZWJ1eVtkYXRhLXYtMmU1YWIwZDhdOmhvdmVyLFtkYXRhLXYtMmU1YWIwZDhdIC5idG4td3JhcCAuZWwtYnV0dG9uLS1hY3RpdmVidXk6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzNWI2NWE7Ym9yZGVyLWNvbG9yOiM4NDgzODN9W2RhdGEtdi0yZTVhYjBkOF0gLmJ0bi13cmFwIC5lbC1idXR0b24tLWFjdGl2ZXNlbGx7YmFja2dyb3VuZC1jb2xvcjojZmY0OTRhO2NvbG9yOiNmZmY7d2lkdGg6NTAlfVtkYXRhLXYtMmU1YWIwZDhdIC5idG4td3JhcCAuZWwtYnV0dG9uLS1hY3RpdmVidXl7YmFja2dyb3VuZC1jb2xvcjojMzViNjVhO2NvbG9yOiNmZmY7d2lkdGg6NTAlfS5zaGFyZU51bVtkYXRhLXYtMmU1YWIwZDhde2NvbG9yOiM2MzcwODU7cG9zaXRpb246cmVsYXRpdmU7dG9wOjVweH0ubWIxMCBpbnB1dFtkYXRhLXYtMmU1YWIwZDhde21hcmdpbi1ib3R0b206MzBweH0ucGFkZHNbZGF0YS12LTJlNWFiMGQ4XXttYXJnaW46MCAxNXB4IDAgMjVweDtwYWRkaW5nOjAgMTBweH0uc2hhcmUtdG90YWxbZGF0YS12LTJlNWFiMGQ4XXtmbGV4LXdyYXA6d3JhcH0uY29udHJvbC1wcmljZVtkYXRhLXYtMmU1YWIwZDhde21hcmdpbjowIDAgMDtsaW5lLWhlaWdodDo0NnB4O2NvbG9yOiNmZmZ9LmNvbnRyb2wtcHJpY2Ugc3BhbltkYXRhLXYtMmU1YWIwZDhde21hcmdpbi1yaWdodDoxNXB4O2N1cnNvcjpwb2ludGVyfS5jb250cm9sLXByaWNlIC5hY3RpdmVbZGF0YS12LTJlNWFiMGQ4XSwuY29udHJvbC1wcmljZSBzcGFuW2RhdGEtdi0yZTVhYjBkOF06aG92ZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwYTRkODtjb2xvcjojMDBhNGQ4fS5jb250cm9sLXByaWNlIGRpdltkYXRhLXYtMmU1YWIwZDhde21hcmdpbi10b3A6MzBweH0uY29udHJvbC1wcmljZSBpbnB1dFtkYXRhLXYtMmU1YWIwZDhde3dpZHRoOjYwJTtsaW5lLWhlaWdodDozMHB4O3BhZGRpbmc6NXB4IDEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNTI2ODhjO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZmZn0udGl0bGVfYm94W2RhdGEtdi0yZTVhYjBkOF17aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtwYWRkaW5nOjAgMzBweDtib3gtc2hhZG93OjAgMnB4IDZweCByZ2JhKDAsMCwwLC4xKX0udGFidGl0bGUgc3BhbltkYXRhLXYtMmU1YWIwZDhde2N1cnNvcjpwb2ludGVyfS50YWJ0aXRsZSBzcGFuW2RhdGEtdi0yZTVhYjBkOF06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6NDBweH0uY29udGVudCAuZmlyc3RbZGF0YS12LTJlNWFiMGQ4XSwuY29udGVudCAuc2Vjb25kW2RhdGEtdi0yZTVhYjBkOF17cGFkZGluZzowIDIwcHh9LmF2YWlsYWJsZVtkYXRhLXYtMmU1YWIwZDhde2hlaWdodDo0OHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGI7bGluZS1oZWlnaHQ6NDhweH0uaW5wdXQtaXRlbTJbZGF0YS12LTJlNWFiMGQ4XSwuaW5wdXQtaXRlbVtkYXRhLXYtMmU1YWIwZDhde3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjQwcHh9LmlucHV0LWl0ZW0gbGFiZWxbZGF0YS12LTJlNWFiMGQ4XXt3aWR0aDoyMCU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MTRweDtjb2xvcjojNjM3MDg1fS5mYjEwW2RhdGEtdi0yZTVhYjBkOF17Zm9udC1zaXplOjEwcHh9LmlucHV0LWl0ZW0yIGxhYmVsW2RhdGEtdi0yZTVhYjBkOF17d2lkdGg6MjAlO2Zsb2F0OmxlZnQ7Zm9udC1zaXplOjEwcHg7Y29sb3I6IzYzNzA4NX0uaW5wdXQtaXRlbTIgaW5wdXRbZGF0YS12LTJlNWFiMGQ4XXtiYWNrZ3JvdW5kLWNvbG9yOiMyNjJhNDJ9LmlucHV0LWl0ZW0yIGlucHV0W2RhdGEtdi0yZTVhYjBkOF0sLmlucHV0LWl0ZW0gaW5wdXRbZGF0YS12LTJlNWFiMGQ4XXt3aWR0aDo4MCU7ZmxvYXQ6bGVmdDtib3JkZXI6MXB4IHNvbGlkICM1MjY4OGM7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjQwcHg7dGV4dC1pbmRlbnQ6MTVweDtmb250LXNpemU6MTZweDtjb2xvcjojY2RkNmU0O2xpbmUtaGVpZ2h0OjM4cHh9LmlucHV0LWl0ZW0gaW5wdXRbZGF0YS12LTJlNWFiMGQ4XXtiYWNrZ3JvdW5kLWNvbG9yOiMxODFkMjV9LmlucHV0LWl0ZW0gc3BhbltkYXRhLXYtMmU1YWIwZDhde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1cHg7Y29sb3I6IzYzNzA4NTtmb250LXNpemU6MTZweH0uaW5wdXQtaXRlbSBzZWxlY3RbZGF0YS12LTJlNWFiMGQ4XXt3aWR0aDo4MCU7YmFja2dyb3VuZDojMTgxZDI1O2NvbG9yOiNjZGQ2ZTQ7Ym9yZGVyOjFweCBzb2xpZCAjNTI2ODhjO2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDo0MHB4O3RleHQtaW5kZW50OjEwcHg7Zm9udC1zaXplOjE2cHh9LmF0dGlvbltkYXRhLXYtMmU1YWIwZDhde2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjMwcHg7Zm9udC1zaXplOjEycHh9LnNlbGxfYnRuW2RhdGEtdi0yZTVhYjBkOF17d2lkdGg6MTAwJTtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjNweDtjb2xvcjojZjVmNWY1O2xpbmUtaGVpZ2h0OjQwcHh9LmdyZWVuQmFja1tkYXRhLXYtMmU1YWIwZDhde21hcmdpbi10b3A6NDBweDtiYWNrZ3JvdW5kLWNvbG9yOiMzNWI2NWF9LnJlZEJhY2tbZGF0YS12LTJlNWFiMGQ4XXttYXJnaW4tdG9wOjQwcHg7YmFja2dyb3VuZC1jb2xvcjojZmY0OTRhfWlucHV0W2RhdGEtdi0yZTVhYjBkOF06ZGlzYWJsZWR7Y29sb3I6IzYyNzA4NTtjdXJzb3I6bm90LWFsbG93ZWR9LnNoYXJlW2RhdGEtdi0yZTVhYjBkOF17Ym9yZGVyOjFweCBzb2xpZCAjZWVlO2JvcmRlci1yYWRpdXM6MnB4O2ZvbnQtc2l6ZToxNHB4O3dpZHRoOjIyLjUlO21hcmdpbi1yaWdodDozLjE0cHh9LnNoYXJlMltkYXRhLXYtMmU1YWIwZDhdLC5zaGFyZVtkYXRhLXYtMmU1YWIwZDhde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojZmZmO2xpbmUtaGVpZ2h0OjEuMjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjVweCAwfS5zaGFyZTJbZGF0YS12LTJlNWFiMGQ4XXtib3JkZXI6MXB4IHNvbGlkICM1MjY4OGM7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjExcHg7d2lkdGg6MjMuNyU7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjJweH0udHJhbnNidG5bZGF0YS12LTJlNWFiMGQ4XTpob3Zlcntjb2xvcjojMDBhNGQ4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9LmZ0OVtkYXRhLXYtMmU1YWIwZDhde2ZvbnQtc2l6ZTo5cHh9Yi5hY3RpdmVbZGF0YS12LTJlNWFiMGQ4XXtiYWNrZ3JvdW5kLWNvbG9yOiMwMmMyODk7Ym9yZGVyOjFweCBzb2xpZCAjMDJjMjg5fWIuYWN0aXZlc1tkYXRhLXYtMmU1YWIwZDhde2JhY2tncm91bmQtY29sb3I6I2RlNTk1OTtib3JkZXI6MXB4IHNvbGlkICNkZTU5NTl9LmNvbWZpcm0tbW9kYWxbZGF0YS12LTJlNWFiMGQ4XXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNyk7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2M3Y2NlNn0uY29tZmlybS1tb2RhbC1jb250ZW50W2RhdGEtdi0yZTVhYjBkOF17d2lkdGg6NTAwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czo1cHg7Zm9udC1zaXplOjE0cHh9Lmxvc3MtbW9kYWwtaGVhZGVyW2RhdGEtdi0yZTVhYjBkOF17bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0ubG9zcy1tb2RhbC1oZWFkZXIgcFtkYXRhLXYtMmU1YWIwZDhde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjB9LmNvbWZpcm0tbW9kYWwtY29udGVudCBsaVtkYXRhLXYtMmU1YWIwZDhde2xpbmUtaGVpZ2h0OjQwcHg7bWFyZ2luOjAgMjBweH0ubW9kYWwtYnRuW2RhdGEtdi0yZTVhYjBkOF17Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NXB4O2ZvbnQtc2l6ZTowO3BhZGRpbmctdG9wOjMwcHh9Lm1vZGFsLWJ0biBidXR0b25bZGF0YS12LTJlNWFiMGQ4XXt3aWR0aDo1MCU7bGluZS1oZWlnaHQ6NTBweDtib3JkZXI6bm9uZTtmbG9hdDpsZWZ0O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNmZmZ9Lm1vZGFsLWJ0biBidXR0b25bZGF0YS12LTJlNWFiMGQ4XTpsYXN0LWNoaWxke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjMmUzMzNjO2JhY2tncm91bmQ6IzY4OWNmMX0uaW5wdXQtaXRlbSAuc2hhcmUtaW5wdXRbZGF0YS12LTJlNWFiMGQ4XXtib3JkZXI6MXB4IHNvbGlkICM1MjY4OGM7Ym9yZGVyLXJhZGl1czoycHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZjtsaW5lLWhlaWdodDoyNnB4O3dpZHRoOjEwMCU7cGFkZGluZzo1cHggMTBweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2hlaWdodDphdXRvO2Zsb2F0Om5vbmU7dGV4dC1pbmRlbnQ6MDttYXJnaW4tYm90dG9tOjEwcHh9I2FtdGxhYmVsW2RhdGEtdi0yZTVhYjBkOF17Zm9udC1zaXplOjEwcHh9LnRpdGxlW2RhdGEtdi02MDM3ZmMyY117aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDZweDtwYWRkaW5nOjAgNDBweCAwIDMwcHg7YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhfS50YWJfdGl0bGVbZGF0YS12LTYwMzdmYzJjXXtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDo0NnB4O2hlaWdodDo0NnB4fS50YWJfdGl0bGUgc3BhbltkYXRhLXYtNjAzN2ZjMmNde2N1cnNvcjpwb2ludGVyfS50YWJfdGl0bGUgc3BhbltkYXRhLXYtNjAzN2ZjMmNdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OjQwcHh9LmNvbnRlbnRbZGF0YS12LTYwMzdmYzJjXXtwYWRkaW5nOjAgNDBweCAwIDMwcHg7aGVpZ2h0OjMwMHB4fS5saXN0LXRpdGxlW2RhdGEtdi02MDM3ZmMyY117bGluZS1oZWlnaHQ6NDBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzAzYjRiO2hlaWdodDo0MHB4fS5ub19kYXRhW2RhdGEtdi02MDM3ZmMyY117cGFkZGluZzo1MHB4IDB9LmNvbnRhaW5lcnNbZGF0YS12LTYwMzdmYzJjXXtoZWlnaHQ6MjYwcHg7b3ZlcmZsb3c6YXV0b30ubGlzdC1pdGVtIGxpW2RhdGEtdi02MDM3ZmMyY117bGluZS1oZWlnaHQ6MzBweH0ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTYwMzdmYzJjXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbG9hdDpsZWZ0fS5saXN0LWl0ZW0gbGkgc3BhbltkYXRhLXYtNjAzN2ZjMmNdOm50aC1jaGlsZCgzKXtjb2xvcjojY2M0OTUxfS5saXN0LWl0ZW0gbGlbZGF0YS12LTYwMzdmYzJjXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYjM2NDh9Lmxpc3QtaXRlbSBsaSBzcGFuLmdyZWVuW2RhdGEtdi02MDM3ZmMyY117Y29sb3I6IzU1YTA2N30ucGRiMjBbZGF0YS12LTYwMzdmYzJjXXtwYWRkaW5nLWJvdHRvbToyMHB4fS5jb250YWluZXJzIHNwYW5bZGF0YS12LTYwMzdmYzJjXXttYXJnaW4tbGVmdDowfS50aXRsZVtkYXRhLXYtNDkxMzE3Mzhde2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ2cHg7cGFkZGluZzowIDQwcHggMCAzMHB4O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0udGFiX3RpdGxlW2RhdGEtdi00OTEzMTczOF17ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6NDZweDtoZWlnaHQ6NDZweH0udGFiX3RpdGxlIHNwYW5bZGF0YS12LTQ5MTMxNzM4XXtjdXJzb3I6cG9pbnRlcn0udGFiX3RpdGxlIHNwYW5bZGF0YS12LTQ5MTMxNzM4XTpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDo0MHB4fS5jb250ZW50W2RhdGEtdi00OTEzMTczOF17cGFkZGluZzowIDQwcHggMCAzMHB4O2hlaWdodDozMDBweH0ubGlzdC10aXRsZVtkYXRhLXYtNDkxMzE3Mzhde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0YjtoZWlnaHQ6NDBweH0ubm9fZGF0YVtkYXRhLXYtNDkxMzE3Mzhde3BhZGRpbmc6NTBweCAwfS5jb250YWluZXJzW2RhdGEtdi00OTEzMTczOF17aGVpZ2h0OjI2MHB4O292ZXJmbG93OmF1dG99Lmxpc3QtaXRlbSBsaVtkYXRhLXYtNDkxMzE3Mzhde2xpbmUtaGVpZ2h0OjMwcHh9Lmxpc3QtaXRlbSBsaSBzcGFuW2RhdGEtdi00OTEzMTczOF17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDtoZWlnaHQ6MzBweH0ubGlzdC1pdGVtIGxpW2RhdGEtdi00OTEzMTczOF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5saXN0LWl0ZW0gbGkgc3Bhbi5ncmVlbltkYXRhLXYtNDkxMzE3Mzhde2NvbG9yOiM1NWEwNjd9LnBkYjIwW2RhdGEtdi00OTEzMTczOF17cGFkZGluZy1ib3R0b206MjBweH0uY29udGFpbmVycyBzcGFuW2RhdGEtdi00OTEzMTczOF17bWFyZ2luLWxlZnQ6MH0udGl0bGVbZGF0YS12LTU5NTlkOTMwXXtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0NnB4O3BhZGRpbmc6MCA0MHB4IDAgMzBweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmF9LnRhYl90aXRsZVtkYXRhLXYtNTk1OWQ5MzBde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjQ2cHg7aGVpZ2h0OjQ2cHh9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi01OTU5ZDkzMF17Y3Vyc29yOnBvaW50ZXJ9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi01OTU5ZDkzMF06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6NDBweH0uY29udGVudFtkYXRhLXYtNTk1OWQ5MzBde3BhZGRpbmc6MCA0MHB4IDAgMzBweDtoZWlnaHQ6MzMwcHh9Lmxpc3QtdGl0bGVbZGF0YS12LTU5NTlkOTMwXXtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGI7aGVpZ2h0OjQwcHh9Lm5vX2RhdGFbZGF0YS12LTU5NTlkOTMwXXtwYWRkaW5nOjUwcHggMH0uY29udGFpbmVyW2RhdGEtdi01OTU5ZDkzMF17aGVpZ2h0OjI2MHB4O292ZXJmbG93OmF1dG99Lmxpc3QtaXRlbSBsaVtkYXRhLXYtNTk1OWQ5MzBde2xpbmUtaGVpZ2h0OjMwcHh9Lmxpc3QtaXRlbSBsaSBzcGFuW2RhdGEtdi01OTU5ZDkzMF17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdH0ubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTU5NTlkOTMwXTpudGgtY2hpbGQoMyl7Y29sb3I6I2NjNDk1MX0ubGlzdC1pdGVtIGxpW2RhdGEtdi01OTU5ZDkzMF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5saXN0LWl0ZW0gbGkgc3Bhbi5ncmVlbltkYXRhLXYtNTk1OWQ5MzBde2NvbG9yOiM1NWEwNjd9LndyYXBbZGF0YS12LTYzMGZlOTBmXXtiYWNrZ3JvdW5kOiMxODFkMjV9LmRldGFpbFtkYXRhLXYtNjMwZmU5MGZde21pbi1oZWlnaHQ6NTAwcHg7YmFja2dyb3VuZDojMDAwO3dpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvO3BhZGRpbmc6MH0ucmVkW2RhdGEtdi02MzBmZTkwZl17Y29sb3I6I2NjNDk1MTtjdXJzb3I6cG9pbnRlcn0udGl0bGVbZGF0YS12LTYzMGZlOTBmXXtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O3BhZGRpbmc6MDtmb250LXNpemU6MThweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmF9LnRhYl90aXRsZVtkYXRhLXYtNjMwZmU5MGZde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjQ2cHg7aGVpZ2h0OjQ2cHh9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi02MzBmZTkwZl17Y3Vyc29yOnBvaW50ZXJ9LnRhYl90aXRsZSBzcGFuW2RhdGEtdi02MzBmZTkwZl06bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6NDBweH0uY29udGVudFtkYXRhLXYtNjMwZmU5MGZde2hlaWdodDozMzBweH0ubGlzdC10aXRsZVtkYXRhLXYtNjMwZmU5MGZde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0YjtoZWlnaHQ6NDBweH0ubGlzdC10aXRsZSBsaVtkYXRhLXYtNjMwZmU5MGZde3dpZHRoOjMzLjMlO3RleHQtYWxpZ246Y2VudGVyfS5ub19kYXRhW2RhdGEtdi02MzBmZTkwZl17cGFkZGluZzo1MHB4IDB9LmNvbnRhaW5lcnNbZGF0YS12LTYzMGZlOTBmXXtoZWlnaHQ6MjYwcHg7b3ZlcmZsb3c6YXV0bztmbG9hdDpsZWZ0O3dpZHRoOjEwMCV9Lmxpc3QtaXRlbSBsaVtkYXRhLXYtNjMwZmU5MGZde2xpbmUtaGVpZ2h0OjQ1cHg7ZGlzcGxheTpmbGV4fS5saXN0LWl0ZW0gbGkgc3BhbltkYXRhLXYtNjMwZmU5MGZde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDozMy4zJTt0ZXh0LWFsaWduOmNlbnRlcn0ubGlzdC1pdGVtIGxpW2RhdGEtdi02MzBmZTkwZl06aG92ZXJ7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1fS5saXN0LWl0ZW0gbGkgc3Bhbi5ncmVlbltkYXRhLXYtNjMwZmU5MGZde2NvbG9yOiM1NWEwNjd9LmFsbFtkYXRhLXYtNjMwZmU5MGZde2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyO2NvbG9yOiMwMGE0ZDg7bWFyZ2luLWxlZnQ6MTBweH0udG90YWwtcHJvW2RhdGEtdi1hOGZiN2YxZV17bWFyZ2luLWJvdHRvbToyMHB4fVtkYXRhLXYtYThmYjdmMWVdIC5pbmJsb2NrIHNwYW4uYWN0aXZle2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9LnRpdGxlW2RhdGEtdi1hOGZiN2YxZV17aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDZweDtwYWRkaW5nOjAgNDBweCAwIDMwcHg7cGFkZGluZy1sZWZ0OjIwcHg7cGFkZGluZy1yaWdodDoyMHB4fS50aXRsZSBzcGFuW2RhdGEtdi1hOGZiN2YxZV17bWFyZ2luLXJpZ2h0OjIwcHg7Y3Vyc29yOnBvaW50ZXJ9LnRpdGxlIHNwYW5bZGF0YS12LWE4ZmI3ZjFlXTpob3Zlcntjb2xvcjojMDBhNGQ4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMwMGE0ZDh9W2RhdGEtdi1hOGZiN2YxZV0gLmVsLWxvYWRpbmctbWFza3tiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fVtkYXRhLXYtYThmYjdmMWVdIC5lbC1sb2FkaW5nLXNwaW5uZXIgLnBhdGh7c3Ryb2tlOiMwMGE0ZDh9W2RhdGEtdi1hOGZiN2YxZV0gLmVsLXBhZ2VyIGxpe2JhY2tncm91bmQtY29sb3I6IzE4MWQyNSFpbXBvcnRhbnQ7Y29sb3I6I2M3Y2NlNiFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NDAwfVtkYXRhLXYtYThmYjdmMWVdIC5lbC1wYWdlciBsaS5hY3RpdmUsW2RhdGEtdi1hOGZiN2YxZV0gLmVsLXBhZ2VyIGxpOmhvdmVye2NvbG9yOiMwMGE0ZDghaW1wb3J0YW50fVtkYXRhLXYtYThmYjdmMWVdIC5lbC1wYWdpbmF0aW9uIGJ1dHRvbixbZGF0YS12LWE4ZmI3ZjFlXSAuZWwtcGFnaW5hdGlvbiBidXR0b246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1IWltcG9ydGFudH1bZGF0YS12LWE4ZmI3ZjFlXSAuZWwtcGFnaW5hdGlvbiBidXR0b257Y29sb3I6I2M3Y2NlNiFpbXBvcnRhbnR9W2RhdGEtdi1hOGZiN2YxZV0gLmVsLXBhZ2luYXRpb24gYnV0dG9uOmhvdmVye2NvbG9yOiMwMGE0ZDghaW1wb3J0YW50fS53cmFwW2RhdGEtdi1hOGZiN2YxZV17bWluLWhlaWdodDo1MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59dWwgbGlbZGF0YS12LWE4ZmI3ZjFlXXtwYWRkaW5nOjhweCAwfXVsIGxpIGRpdltkYXRhLXYtYThmYjdmMWVdLHVsIGxpIHNwYW5bZGF0YS12LWE4ZmI3ZjFlXXtkaXNwbGF5OmlubGluZS1ibG9ja311bCBsaSBkaXYgc3BhbltkYXRhLXYtYThmYjdmMWVde2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDBhNGQ4O2N1cnNvcjpwb2ludGVyO21pbi1oZWlnaHQ6MzNweDttaW4td2lkdGg6NTBweDtmb250LXNpemU6MTRweDtib3JkZXI6bm9uZTtwYWRkaW5nOjAgNXB4O2xpbmUtaGVpZ2h0OjMzcHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lmxpc3RfaGVhZFtkYXRhLXYtYThmYjdmMWVde2NvbG9yOiM2MzcwODU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzJlMzMzY30ubGlzdF9oZWFkIGxpPnNwYW5bZGF0YS12LWE4ZmI3ZjFlXXtmbGV4LWJhc2lzOjAlfS5saXN0X2NvbnRlbnRbZGF0YS12LWE4ZmI3ZjFlXXtmbGV4OjF9Lmxpc3RfY29udGVudCBsaT5kaXZbZGF0YS12LWE4ZmI3ZjFlXSwubGlzdF9jb250ZW50IGxpPnNwYW5bZGF0YS12LWE4ZmI3ZjFlXXtmbGV4LWJhc2lzOjAlfS5saS10eXBlW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6MTMlO2ZsZXgtZ3JvdzoxMzt3aGl0ZS1zcGFjZTpub3dyYXB9LmxpLWJhaWxbZGF0YS12LWE4ZmI3ZjFlXXt3aWR0aDo4JTtmbGV4LWdyb3c6ODt0ZXh0LWFsaWduOmNlbnRlcn0ubGktbm93cHJpY2VbZGF0YS12LWE4ZmI3ZjFlXSwubGktb3BlbnByaWNlW2RhdGEtdi1hOGZiN2YxZV0sLmxpLXN0c3ByaWNlW2RhdGEtdi1hOGZiN2YxZV0sLmxpLXN0eXByaWNlW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6MTAlO2ZsZXgtZ3JvdzoxMDt0ZXh0LWFsaWduOmNlbnRlcn0ubGktbG9zc1tkYXRhLXYtYThmYjdmMWVdLC5saS1yYXRlW2RhdGEtdi1hOGZiN2YxZV17ZmxleC1ncm93Ojk7dGV4dC1hbGlnbjpjZW50ZXJ9LmxpLW9wZW50aW1lW2RhdGEtdi1hOGZiN2YxZV17ZmxleC1ncm93OjE1O3RleHQtYWxpZ246Y2VudGVyfS5saS10b2RvW2RhdGEtdi1hOGZiN2YxZV17ZmxleDoxO3RleHQtYWxpZ246Y2VudGVyO21pbi13aWR0aDoxNTBweH0ubGktc3RhdHVzW2RhdGEtdi1hOGZiN2YxZV17bWluLXdpZHRoOjYwcHg7dGV4dC1hbGlnbjpyaWdodH0ubGlzdF9jb250ZW50IC5saS10b2RvW2RhdGEtdi1hOGZiN2YxZV17dGV4dC1hbGlnbjpyaWdodH0ubGlzdF9jb250ZW50IC5saS1zdGF0dXNbZGF0YS12LWE4ZmI3ZjFlXXtjb2xvcjojMDBhNGQ4fS5yZWRbZGF0YS12LWE4ZmI3ZjFlXXtjb2xvcjojY2M0OTUxO2N1cnNvcjpwb2ludGVyfS5ncmVlbltkYXRhLXYtYThmYjdmMWVde2NvbG9yOiMwZDg1NTF9Lm5leHRsaW5rIHNwYW5bZGF0YS12LWE4ZmI3ZjFlXTpob3Zlcntjb2xvcjojMDBhNGQ4fS5tb3Jlc1tkYXRhLXYtYThmYjdmMWVde2NvbG9yOiM5OTk7Zm9udC1zaXplOjE0cHg7bWFyZ2luLXRvcDoxMHB4O2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246Y2VudGVyfS5tb3JlcyBpbWdbZGF0YS12LWE4ZmI3ZjFlXXt3aWR0aDoxMjBweDtoZWlnaHQ6MTIwcHg7bWFyZ2luOjMwcHggYXV0byAwfS5tb3JlcyBzcGFuW2RhdGEtdi1hOGZiN2YxZV17ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcn0ud2lkdGgxW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6OCU7dGV4dC1hbGlnbjpjZW50ZXJ9LndpZHRoMltkYXRhLXYtYThmYjdmMWVde3dpZHRoOjEzJTt0ZXh0LWFsaWduOmNlbnRlcn0ud2lkdGgzW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6MjElO3RleHQtYWxpZ246Y2VudGVyfS5sb3NzLW1vZGFsW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjE7bGVmdDowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC43KTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojYzdjY2U2fS5sb3NzLW1vZGFsIC5jb250ZW50W2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6NTAwcHg7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1O21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czo1cHh9Lmxvc3MtbW9kYWwtaGVhZGVyW2RhdGEtdi1hOGZiN2YxZV17bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0ubG9zcy1tb2RhbC1oZWFkZXIgcFtkYXRhLXYtYThmYjdmMWVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjB9Lmxvc3MtbWFkYWwtY29udGVudFtkYXRhLXYtYThmYjdmMWVde21hcmdpbjowIDE1cHg7cGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWJvdHRvbToxMHB4fS5sb3NzLW1hZGFsLWNvbnRlbnQgZGl2W2RhdGEtdi1hOGZiN2YxZV17bGluZS1oZWlnaHQ6NDBweDttYXJnaW4tYm90dG9tOjEwcHh9Lmxvc3MtbWFkYWwtY29udGVudCBkaXYgcFtkYXRhLXYtYThmYjdmMWVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjoxcHggc29saWQgIzJlMzMzYztib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubG9zcy1tYWRhbC1jb250ZW50IHAgc3BhbltkYXRhLXYtYThmYjdmMWVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjMwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0zcHg7Y3Vyc29yOnBvaW50ZXJ9Lmxvc3MtbWFkYWwtY29udGVudCBpbnB1dFtkYXRhLXYtYThmYjdmMWVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICMyZTMzM2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMmUzMzNjO2xpbmUtaGVpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi04cHg7Y29sb3I6I2M3Y2NlNjt0ZXh0LWFsaWduOmNlbnRlcn0ubW9kYWwtdGV4dFtkYXRhLXYtYThmYjdmMWVde3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6NjBweH0ubW9kYWwtYnRuW2RhdGEtdi1hOGZiN2YxZV17Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NXB4O2ZvbnQtc2l6ZTowfS5tb2RhbC1idG4gYnV0dG9uW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6NTAlO2xpbmUtaGVpZ2h0OjUwcHg7Ym9yZGVyOm5vbmU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MTRweDtjb2xvcjojZmZmfS5tb2RhbC1idG4gYnV0dG9uW2RhdGEtdi1hOGZiN2YxZV06bGFzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgIzJlMzMzYztiYWNrZ3JvdW5kOiMwMGE0ZDh9LnRvdGFsLXBybyBidXR0b25bZGF0YS12LWE4ZmI3ZjFlXXtib3JkZXItcmFkaXVzOjNweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYzOGJkNDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OjMzcHg7bWluLXdpZHRoOjgwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyOm5vbmU7cGFkZGluZzowIDVweDtsaW5lLWhlaWdodDozM3B4O3RleHQtYWxpZ246Y2VudGVyfS5zdG9wTW9kYWxbZGF0YS12LWE4ZmI3ZjFlXXttYXJnaW46MjBweCAxNXB4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctYm90dG9tOjIwcHh9LnN0b3BNb2RhbCBzcGFuW2RhdGEtdi1hOGZiN2YxZV17cGFkZGluZzo2cHggMTVweDtib3JkZXItcmFkaXVzOjRweH0uc3RvcGFsbFtkYXRhLXYtYThmYjdmMWVde2JvcmRlcjoxcHggc29saWQgIzYzOGJkNDtjb2xvcjojNjM4YmQ0O21hcmdpbi1yaWdodDoxMHB4fS5hbGxbZGF0YS12LWE4ZmI3ZjFlXXtib3JkZXItd2lkdGg6MH0uYWxsc1tkYXRhLXYtYThmYjdmMWVde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjM4YmQ0fS5zdG9wYnV5W2RhdGEtdi1hOGZiN2YxZV17Ym9yZGVyOjFweCBzb2xpZCAjMGQ4NTUxO2NvbG9yOiMwZDg1NTE7bWFyZ2luLXJpZ2h0OjEwcHh9LmJ1eXNbZGF0YS12LWE4ZmI3ZjFlXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzBkODU1MX0uc3RvcHNlbGxbZGF0YS12LWE4ZmI3ZjFlXXtib3JkZXI6MXB4IHNvbGlkICNjYzQ5NTE7Y29sb3I6I2NjNDk1MX0uc2VsbHNbZGF0YS12LWE4ZmI3ZjFlXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2NjNDk1MX0uc3RvcC1tb2RhbC1idG5zW2RhdGEtdi1hOGZiN2YxZV17d2lkdGg6MTAwJTtmb250LXNpemU6MH0uc3RvcC1tb2RhbC1idG5zIGJ1dHRvbltkYXRhLXYtYThmYjdmMWVde3dpZHRoOjUwJTtmbG9hdDpsZWZ0O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjQwcHg7YmFja2dyb3VuZC1jb2xvcjojOWRiNWM3O2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjb2xvcjojZmZmfS5zdG9wLW1vZGFsLWJ0bnMgYnV0dG9uW2RhdGEtdi1hOGZiN2YxZV06bGFzdC1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODljZjF9LmhvbWV7bWFyZ2luLWJvdHRvbTozcHh9LmhvbWUgLm1haW4+ZGl2e2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi10b3A6M3B4fS5ob21lIC5tYWluPmRpdiAudHYtYm94e3dpZHRoOjEwMCU7aGVpZ2h0OmF1dG99LmhvbWUgLm1haW4+ZGl2IC5leGNoYW5nZS1ib3h7d2lkdGg6NDAzcHg7aGVpZ2h0OmF1dG87cGFkZGluZy1ib3R0b206MTBweH0uaG9tZSAubWFpbj5kaXYgLnRyYW4tYm94e2JhY2tncm91bmQ6IzE4MWQyNTtmbGV4OjF9LmhvbWUgLm1haW4+ZGl2IC50cmFkZS1ib3h7d2lkdGg6MzUwcHg7bWFyZ2luLWxlZnQ6M3B4fS5lbC1jaGVja2JveF9faW5wdXQuaXMtY2hlY2tlZCAuZWwtY2hlY2tib3hfX2lubmVyLC5lbC1jaGVja2JveF9faW5wdXQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVye2JvcmRlci1jb2xvcjojMDBhNGQ4IWltcG9ydGFudDtiYWNrZ3JvdW5kOiMwMGE0ZDghaW1wb3J0YW50fS5lbC10YWJzX19pdGVte2NvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5lbC1jaGVja2JveF9faW5wdXQuaXMtY2hlY2tlZCsuZWwtY2hlY2tib3hfX2xhYmVse2NvbG9yOiMwMGE0ZDghaW1wb3J0YW50fS5hZ2dyZXt3aWR0aDoxNnB4IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6NXB4fS5pbnZpdGUtYm94e21hcmdpbi1ib3R0b206MjBweH0ubGlua190ZXh0e2NvbG9yOiNkNDU4NTh9LnBvaW50ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtvcGFjaXR5Oi42fS5jaG9vc2VDb3VudHJ5e3dpZHRoOjUyMHB4O21pbi1oZWlnaHQ6NDZweDtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjAgMTVweDtib3JkZXItY29sb3I6I2NjY30uY2hvb3NlVGVse2hlaWdodDo0NnB4O3dpZHRoOjE2MHB4O2JvcmRlci1jb2xvcjojY2NjO3BhZGRpbmc6MCAxMHB4O2ZvbnQtc2l6ZToxNHB4fS5waG9uZXt3aWR0aDozNjBweCFpbXBvcnRhbnQ7Ym9yZGVyLWxlZnQ6bm9uZX0uY29kZS1idG57Y3Vyc29yOnBvaW50ZXJ9I3JlZ2lzdGVyLWJveCAubWFpbi1yZWdpc3RlcntiYWNrZ3JvdW5kOnVybCguLi9pbWcvYmdfbG9naW4uM2NkMWExYzcucG5nKSB0b3AgcmVwZWF0LXgsLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMxODFkMjUsIzE4MWQyNSk7bWluLWhlaWdodDoxMDAlfSNyZWdpc3Rlci1ib3ggLnRpcHtjb2xvcjojNjE2ODhhO2ZvbnQtc2l6ZToxMnB4O21hcmdpbjoxNXB4IDAgMTBweH0jcmVnaXN0ZXItYm94IC5yZWctY29udGVudHtwYWRkaW5nOjQzcHggMDt3aWR0aDoxMjAwcHg7bWFyZ2luOjAgYXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6I2M3Y2NlNn0jcmVnaXN0ZXItYm94IC5yZWctY29udGVudCBpbnB1dHt3aWR0aDo1MjBweDttaW4taGVpZ2h0OjQ2cHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O3BhZGRpbmc6MCAyMHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1fSNyZWdpc3Rlci1ib3ggLnJlZy1jb250ZW50Pi50aXRsZXtmb250LXNpemU6MzZweH0jcmVnaXN0ZXItYm94IC5yZWctY29udGVudD4udGFie21hcmdpbjoxMHB4IDAgMjBweH0jcmVnaXN0ZXItYm94IC5yZWctY29udGVudD4udGFiIHNwYW57bWFyZ2luOjAgMjBweH0jcmVnaXN0ZXItYm94IC5yZWctY29udGVudCAuY29kZS1ib3h7d2lkdGg6NTIwcHg7aGVpZ2h0OjQ2cHg7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1O2JvcmRlcjoxcHggc29saWQgIzRlNWI4NX0jcmVnaXN0ZXItYm94IC5yZWctY29udGVudCAuY29kZS1ib3ggaW5wdXR7Ym9yZGVyOm5vbmU7aGVpZ2h0OjQ0cHg7bWluLWhlaWdodDo0NHB4O3dpZHRoOjMxOXB4fSNyZWdpc3Rlci1ib3ggLnJlZy1jb250ZW50IC5jb2RlLWJveCBidXR0b257Ym9yZGVyOm5vbmU7bGluZS1oZWlnaHQ6NDNweDt3aWR0aDoxOTNweDtjb2xvcjojYzdjY2U2O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjMmMzODQ2O2JhY2tncm91bmQ6IzE4MWQyNX0jcmVnaXN0ZXItYm94IC5jb25maXJtLWJ0biwjcmVnaXN0ZXItYm94IC5yZWctYnRue2xpbmUtaGVpZ2h0OjQ2cHg7d2lkdGg6MjAwcHg7bWFyZ2luOjIwcHggMCAwO2JvcmRlcjpub25lO2JhY2tncm91bmQ6IzAwYTRkODtjb2xvcjojZmZmfSNyZWdpc3Rlci1ib3ggLmFyZWEtYm94e3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjUyMHB4O2xpbmUtaGVpZ2h0OjQ0cHg7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjQ2cHh9I3JlZ2lzdGVyLWJveCAuYXJlYS1ib3ggLmxpZ2h0e2NvbG9yOiM3YTk4Zjd9I3JlZ2lzdGVyLWJveCAuYXJlYS1ib3ggLmFyZWF7ZGlzcGxheTpmbGV4O2JvcmRlcjoxcHggc29saWQgIzRlNWI4NX0jcmVnaXN0ZXItYm94IC5hcmVhLWJveCAuYXJlYT5kaXZ7ZmxleDoxfSNyZWdpc3Rlci1ib3ggLmFyZWEtYm94IC5hcmVhIC5jaXR5e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNGU1Yjg1O2JvcmRlci1yaWdodDoxcHggc29saWQgIzRlNWI4NX0jcmVnaXN0ZXItYm94IC5hcmVhLWJveCAuYXJlYS1saXN0e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUyMHB4O3RvcDo0NnB4O2xlZnQ6MDtkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTl9I3JlZ2lzdGVyLWJveCAuYXJlYS1ib3ggLmFyZWEtbGlzdD51bHtmbGV4OjE7YmFja2dyb3VuZC1jb2xvcjojMWUyMjM1O2hlaWdodDoyNjVweDtvdmVyZmxvdzpzY3JvbGx9I3JlZ2lzdGVyLWJveCAuYXJlYS1ib3ggLmFyZWEtbGlzdD51bDo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfS5kYXkgI3JlZ2lzdGVyLWJveCwuZGF5ICNyZWdpc3Rlci1ib3ggLnJlZy1jb250ZW50e2JhY2tncm91bmQ6I2ZmZn0uZGF5ICNyZWdpc3Rlci1ib3ggLnJlZy1jb250ZW50IGlucHV0e2NvbG9yOiM5OTl9LmRheSAjcmVnaXN0ZXItYm94IC5yZWctY29udGVudCAuY29kZS1ib3gsLmRheSAjcmVnaXN0ZXItYm94IC5yZWctY29udGVudCBpbnB1dHtib3JkZXI6MXB4IHNvbGlkICNkNGQ0ZDQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tcjEwW2RhdGEtdi01MmZjMzQzNF17bWFyZ2luLXJpZ2h0OjEwcHh9LmZsZXhbZGF0YS12LTUyZmMzNDM0XXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubGVmdE5hdltkYXRhLXYtNTJmYzM0MzRde21hcmdpbi1yaWdodDowO3BhZGRpbmc6NHB4O2JhY2tncm91bmQtY29sb3I6IzAwMDt3aWR0aDoyMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxvYXQ6bGVmdDtib3JkZXItcmFkaXVzOjEwcHh9LmxlZnROYXYgLmljb25mb250W2RhdGEtdi01MmZjMzQzNF17Zm9udC1zaXplOjIwcHh9LmxlZnROYXYgdWxbZGF0YS12LTUyZmMzNDM0XXttaW4taGVpZ2h0OjgwMHB4fS5sZWZ0TmF2IHVsIGxpW2RhdGEtdi01MmZjMzQzNF17aGVpZ2h0OjU0cHg7bGluZS1oZWlnaHQ6NTRweDtwYWRkaW5nLWxlZnQ6MzhweDttYXJnaW4tYm90dG9tOjRweDtjdXJzb3I6cG9pbnRlcn0ubGVmdE5hdiB1bCBsaSBpbWdbZGF0YS12LTUyZmMzNDM0XXttYXJnaW4tcmlnaHQ6MTJweDttYXJnaW4tdG9wOi00cHg7d2lkdGg6MjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmxlZnROYXYgdWwgLmFjdGl2ZVtkYXRhLXYtNTJmYzM0MzRde2NvbG9yOiMwMGE0ZDg7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1O2JvcmRlci1ib3R0b206bm9uZX0uYm94W2RhdGEtdi0zYjc3MmVmYV17YmFja2dyb3VuZC1jb2xvcjojMjczMDQxfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MTkyMHB4KXsubWluaGVpZ2h0W2RhdGEtdi0zYjc3MmVmYV17bWluLWhlaWdodDo4NTBweH19QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDoyNTAwcHgpey5taW5oZWlnaHRbZGF0YS12LTNiNzcyZWZhXXttaW4taGVpZ2h0OjExNTBweH19LmJveCAuYWNjb3VudFtkYXRhLXYtM2I3NzJlZmFde3dpZHRoOjEyMDBweDtwYWRkaW5nLXRvcDowO21hcmdpbjowIGF1dG87b3ZlcmZsb3c6aGlkZGVufS5hY2NvdW50LXRvcFtkYXRhLXYtMDViODRhOTJde2JhY2tncm91bmQtY29sb3I6IzFhMjMzMDtoZWlnaHQ6MTIwcHg7cGFkZGluZzoyNnB4IDUwcHh9LmFjY291bnQtdG9wIGltZ1tkYXRhLXYtMDViODRhOTJde3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDoxMnB4fS5hY2NvdW50LXRvcCAuYmFzZWJvcmRlckJ0bltkYXRhLXYtMDViODRhOTJdLC5hY2NvdW50LXRvcCAuYmFzZUJ0bltkYXRhLXYtMDViODRhOTJde3dpZHRoOjEyMHB4fS5saXN0LXdyYXBbZGF0YS12LTA1Yjg0YTkyXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTIzMzA7cGFkZGluZzowIDUwcHh9Lmxpc3Qtd3JhcCB0YWJsZSB0aFtkYXRhLXYtMDViODRhOTJde2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzYzNzA4NX0ubGlzdC13cmFwIHRhYmxlIHRkW2RhdGEtdi0wNWI4NGE5Ml17bGluZS1oZWlnaHQ6NDdweDtib3JkZXItYm90dG9tOjFweCAyNzMxNDIgc29saWR9Lmxpc3Qtd3JhcCB0YWJsZSB0ZCAuY2FzaENvaW5bZGF0YS12LTA1Yjg0YTkyXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo3MnB4O2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHg7Y29sb3I6I2ZmZjtib3JkZXI6MXB4IDI3MzE0MiBzb2xpZH0uYWNjb3VudEVudHJ1c3QgLnRpdGxlW2RhdGEtdi1hZWE1NjYwNF17aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtwYWRkaW5nOjAgMzBweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmE7Y29sb3I6I2NkZDZlNH0uYWNjb3VudEVudHJ1c3QgLnRpdGxlIHNwYW5bZGF0YS12LWFlYTU2NjA0XTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tbGVmdDo0MHB4fS5hY2NvdW50RW50cnVzdCAuY29udGVudFtkYXRhLXYtYWVhNTY2MDRde3BhZGRpbmc6MCAxMHB4fS5hY2NvdW50RW50cnVzdCAuY29udGVudCAubGlzdC10aXRsZVtkYXRhLXYtYWVhNTY2MDRde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0Yn0uYWNjb3VudEVudHJ1c3QgLmNvbnRlbnQgLmNvbnRhaW5lcltkYXRhLXYtYWVhNTY2MDRde2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99LmFjY291bnRFbnRydXN0IC5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaVtkYXRhLXYtYWVhNTY2MDRde2xpbmUtaGVpZ2h0OjMwcHh9LmFjY291bnRFbnRydXN0IC5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaSBzcGFuW2RhdGEtdi1hZWE1NjYwNF17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdH0uYWNjb3VudEVudHJ1c3QgLmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LWFlYTU2NjA0XTpudGgtY2hpbGQoMyl7Y29sb3I6I2NjNDk1MX0uYWNjb3VudEVudHJ1c3QgLmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpIHNwYW4uZ3JlZW5bZGF0YS12LWFlYTU2NjA0XXtjb2xvcjojNTVhMDY3fS5hY2NvdW50RW50cnVzdCAuY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGlbZGF0YS12LWFlYTU2NjA0XTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyYjM2NDh9LmFjY291bnRFbnRydXN0IC5jb250ZW50IC5ub19kYXRhW2RhdGEtdi1hZWE1NjYwNF17cGFkZGluZy10b3A6MTUwcHh9LmFjY291bnQtbWFpbltkYXRhLXYtYzQ2ZGM1ZjZde3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLXRvcDoyMHB4fS5hY2NvdW50LW1haW4gLmJhci1ib3R0b21bZGF0YS12LWM0NmRjNWY2XXt3aWR0aDozMjBweDtoZWlnaHQ6OHB4O2JvcmRlci1yYWRpdXM6NHB4O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYTttYXJnaW46MjJweCAwIDEycHggMDtvdmVyZmxvdzpoaWRkZW59LmFjY291bnQtbWFpbiAuYmFyLWJvdHRvbSAuYmFyLXRvcFtkYXRhLXYtYzQ2ZGM1ZjZde2JhY2tncm91bmQtY29sb3I6IzAwYTRkODtoZWlnaHQ6MTAwJX0uYWNjb3VudC1tYWluIHVsW2RhdGEtdi1jNDZkYzVmNl17Ym9yZGVyLXRvcDoxcHggc29saWQgIzMwM2I0Yjtjb2xvcjojNjM3MDg1O2ZvbnQtc2l6ZToxNHB4fS5hY2NvdW50LW1haW4gdWwgaW1nW2RhdGEtdi1jNDZkYzVmNl17d2lkdGg6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmFjY291bnQtbWFpbiB1bCBsaVtkYXRhLXYtYzQ2ZGM1ZjZde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGI7bGluZS1oZWlnaHQ6NzJweDtwb3NpdGlvbjpyZWxhdGl2ZX0uYWNjb3VudC1tYWluIHVsIGxpIHBbZGF0YS12LWM0NmRjNWY2XXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjMwMHB4O3RvcDowfS5sZWZ0TmF2W2RhdGEtdi0zMjU0ZTMwOF17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fS5hY2NvdW50LW1haW5bZGF0YS12LTMyNTRlMzA4XXtiYWNrZ3JvdW5kOiMyNzMwNDE7cGFkZGluZzoyMHB4O2JhY2tncm91bmQ6IzE4MWIyYX0uYWNjb3VudC1tYWluIC50aXRsZVtkYXRhLXYtMzI1NGUzMDhde3dpZHRoOjEwMCU7bGluZS1oZWlnaHQ6NjBweDtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6MjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMjczMDQxfS5hY2NvdW50LW1haW4gLm1haW4tY29udGVudFtkYXRhLXYtMzI1NGUzMDhde21pbi1oZWlnaHQ6NzAwcHg7Ym9yZGVyLXJhZGl1czoycHh9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5tYWluLWlucHV0W2RhdGEtdi0zMjU0ZTMwOF17bWFyZ2luOjAgYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDoxMDBweH0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLm1haW4taW5wdXQgc3BhbltkYXRhLXYtMzI1NGUzMDhde3dpZHRoOjEwMHB4fS5hY2NvdW50LW1haW4gLm1haW4tY29udGVudCAubWFpbi1pbnB1dCBpbnB1dFtkYXRhLXYtMzI1NGUzMDhde3dpZHRoOjMyMHB4O21pbi1oZWlnaHQ6NDZweDtib3JkZXI6MXB4IHNvbGlkICM0ZTViODU7cGFkZGluZzowIDIwcHg7Y29sb3I6I2M3Y2NlNjtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMxZTIyMzV9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5pZGltZyBkaXZbZGF0YS12LTMyNTRlMzA4XXt3aWR0aDoxNjBweDtoZWlnaHQ6MTYwcHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO21hcmdpbi1sZWZ0OjUwcHh9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5pZGltZyBkaXYgaW5wdXRbZGF0YS12LTMyNTRlMzA4XXtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjExMTEwO29wYWNpdHk6MDttYXJnaW4tbGVmdDotMTYwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTYwcHg7dG9wOjA7Y3Vyc29yOnBvaW50ZXJ9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5pZGltZyBkaXYgaW1nW2RhdGEtdi0zMjU0ZTMwOF17d2lkdGg6MTAwJX0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLnVwZGF0YSBpbnB1dFtkYXRhLXYtMzI1NGUzMDhde3dpZHRoOjMwMHB4O2hlaWdodDo0NXB4O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjAgYXV0bzttYXJnaW4tbGVmdDoxMDBweDttYXJnaW4tdG9wOjYwcHg7YmFja2dyb3VuZDojNTY5N2Y0fS5hY2NvdW50LW1haW4gLm1haW4tY29udGVudCAuYXUtc3RhdHVlW2RhdGEtdi0zMjU0ZTMwOF17cGFkZGluZy10b3A6MTAwcHg7Zm9udC1zaXplOjMwcHh9LmxlZnROYXZbZGF0YS12LTY1ZjIwMGM4XXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9LmFjY291bnQtbWFpbltkYXRhLXYtNjVmMjAwYzhde2JhY2tncm91bmQ6IzI3MzA0MTtwYWRkaW5nOjIwcHg7YmFja2dyb3VuZDojMTgxYjJhfS5hY2NvdW50LW1haW4gLnRpdGxlW2RhdGEtdi02NWYyMDBjOF17d2lkdGg6MTAwJTtsaW5lLWhlaWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmctbGVmdDoyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMyNzMwNDF9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50W2RhdGEtdi02NWYyMDBjOF17bWluLWhlaWdodDo3MDBweDtib3JkZXItcmFkaXVzOjJweH0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLm1haW4taW5wdXRbZGF0YS12LTY1ZjIwMGM4XXttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOjEwMHB4fS5hY2NvdW50LW1haW4gLm1haW4tY29udGVudCAubWFpbi1pbnB1dCBzcGFuW2RhdGEtdi02NWYyMDBjOF17d2lkdGg6MTAwcHh9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5tYWluLWlucHV0IGlucHV0W2RhdGEtdi02NWYyMDBjOF17d2lkdGg6MzIwcHg7bWluLWhlaWdodDo0NnB4O2JvcmRlcjoxcHggc29saWQgIzRlNWI4NTtwYWRkaW5nOjAgMjBweDtjb2xvcjojYzdjY2U2O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQtY29sb3I6IzFlMjIzNX0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLmlkaW1nIGRpdltkYXRhLXYtNjVmMjAwYzhde3dpZHRoOjE2MHB4O2hlaWdodDoxNjBweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXI6MXB4IHNvbGlkICNlMmUyZTI7bWFyZ2luLWxlZnQ6NTBweH0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLmlkaW1nIGRpdiBpbnB1dFtkYXRhLXYtNjVmMjAwYzhde3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTExMTA7b3BhY2l0eTowO21hcmdpbi1sZWZ0Oi0xNjBweDt3aWR0aDoxMDAlO2hlaWdodDoxNjBweDt0b3A6MDtjdXJzb3I6cG9pbnRlcn0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLmlkaW1nIGRpdiBpbWdbZGF0YS12LTY1ZjIwMGM4XXt3aWR0aDoxMDAlfS5hY2NvdW50LW1haW4gLm1haW4tY29udGVudCAudXBkYXRhIGlucHV0W2RhdGEtdi02NWYyMDBjOF17d2lkdGg6MzAwcHg7aGVpZ2h0OjQ1cHg7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6I2M3Y2NlNjtmb250LXNpemU6MTRweDttYXJnaW46MCBhdXRvO21hcmdpbi1sZWZ0OjEwMHB4O21hcmdpbi10b3A6NjBweDtiYWNrZ3JvdW5kOiM1Njk3ZjR9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5hdS1zdGF0dWVbZGF0YS12LTY1ZjIwMGM4XXtwYWRkaW5nLXRvcDoxMDBweDtmb250LXNpemU6MzBweH0uYWNjb3VudC1tYWluW2RhdGEtdi1lZThjYTIyOF17YmFja2dyb3VuZDojMjczMDQxfS5hY2NvdW50LW1haW4gLnRpdGxlW2RhdGEtdi1lZThjYTIyOF17d2lkdGg6MTAwJTtsaW5lLWhlaWdodDo2MHB4O2JhY2tncm91bmQ6IzE4MWIyYTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nLWxlZnQ6MjBweH0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnRbZGF0YS12LWVlOGNhMjI4XXtiYWNrZ3JvdW5kOiMxODFiMmE7bWluLWhlaWdodDo3MDBweDtib3JkZXItcmFkaXVzOjJweH0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLm1haW4taW5wdXRbZGF0YS12LWVlOGNhMjI4XXttYXJnaW46MCBhdXRvO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctdG9wOjEwMHB4fS5hY2NvdW50LW1haW4gLm1haW4tY29udGVudCAubWFpbi1pbnB1dCBzcGFuW2RhdGEtdi1lZThjYTIyOF17d2lkdGg6MTAwcHh9LmFjY291bnQtbWFpbiAubWFpbi1jb250ZW50IC5tYWluLWlucHV0IGlucHV0W2RhdGEtdi1lZThjYTIyOF17d2lkdGg6MzIwcHg7bWluLWhlaWdodDo0NnB4O2JvcmRlcjoxcHggc29saWQgIzRlNWI4NTtwYWRkaW5nOjAgMjBweDtjb2xvcjojYzdjY2U2O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQtY29sb3I6IzFlMjIzNX0uYWNjb3VudC1tYWluIC5tYWluLWNvbnRlbnQgLnVwZGF0YSBpbnB1dFtkYXRhLXYtZWU4Y2EyMjhde3dpZHRoOjMwMHB4O2hlaWdodDo0NXB4O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE0cHg7bWFyZ2luOjAgYXV0bzttYXJnaW4tbGVmdDoxMDBweDttYXJnaW4tdG9wOjYwcHg7YmFja2dyb3VuZDojNTY5N2Y0O2JvcmRlcjpub25lfS5hY2NvdW50LW1haW5bZGF0YS12LTFjYTg0NThmXXtwYWRkaW5nLWxlZnQ6MzRweDtwYWRkaW5nLXJpZ2h0OjM0cHg7cGFkZGluZy10b3A6MzRweH0uYWNjb3VudC1tYWluIC5iYXItYm90dG9tW2RhdGEtdi0xY2E4NDU4Zl17d2lkdGg6MzIwcHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmE7bWFyZ2luOjIycHggMCAxMnB4IDA7b3ZlcmZsb3c6aGlkZGVufS5hY2NvdW50LW1haW4gLmJhci1ib3R0b20gLmJhci10b3BbZGF0YS12LTFjYTg0NThmXXtiYWNrZ3JvdW5kLWNvbG9yOiM1Njk3ZjQ7aGVpZ2h0OjEwMCV9LmFjY291bnQtbWFpbiB1bFtkYXRhLXYtMWNhODQ1OGZde2JvcmRlci10b3A6MXB4IHNvbGlkICMzMDNiNGI7Y29sb3I6IzYzNzA4NTtmb250LXNpemU6MTRweH0uYWNjb3VudC1tYWluIHVsIGltZ1tkYXRhLXYtMWNhODQ1OGZde3dpZHRoOjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5hY2NvdW50LW1haW4gdWwgbGlbZGF0YS12LTFjYTg0NThmXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzAzYjRiO2xpbmUtaGVpZ2h0OjcycHg7cG9zaXRpb246cmVsYXRpdmV9LmFjY291bnQtbWFpbiB1bCBsaSBwW2RhdGEtdi0xY2E4NDU4Zl17cG9zaXRpb246YWJzb2x1dGU7bGVmdDozMDBweDt0b3A6MH0ubWFpbltkYXRhLXYtMWNhODQ1OGZde3BhZGRpbmc6MjA4cHggMCAwIDQwMHB4O2xpbmUtaGVpZ2h0OjQ4cHh9Lm1haW4gLmxlZnRbZGF0YS12LTFjYTg0NThmXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo4MHB4O3RleHQtYWxpZ246cmlnaHR9Lm1haW4gLm1haW4taW5wdXRbZGF0YS12LTFjYTg0NThmXXttYXJnaW4tbGVmdDoyMHB4O3dpZHRoOjQyOHB4fS5tYWluLWlucHV0W2RhdGEtdi0xY2E4NDU4Zl17d2lkdGg6MzYwcHg7aGVpZ2h0OjQ4cHg7Ym9yZGVyOjFweCBzb2xpZCAjNTI2ODhjO3BhZGRpbmc6MCAyMHB4O2NvbG9yOiNjZGQ2ZTQ7Zm9udC1zaXplOjE2cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyfS5ib3hbZGF0YS12LTMwZDg2MzNkXXtiYWNrZ3JvdW5kLWNvbG9yOiMyNzMwNDF9LmJveCAuYWNjb3VudFtkYXRhLXYtMzBkODYzM2Rde3dpZHRoOjE1MDBweDtwYWRkaW5nLXRvcDozMHB4O21pbi1oZWlnaHQ6ODgwcHg7bWFyZ2luOjAgYXV0bztvdmVyZmxvdzpoaWRkZW59LnJlY2hhcmdlLXdyYXBbZGF0YS12LTMwZDg2MzNkXXtwYWRkaW5nOjcwcHggMH0ucmVjaGFyZ2Utd3JhcCAubGVmdFtkYXRhLXYtMzBkODYzM2Rde3dpZHRoOjEwNHB4O21hcmdpbi1yaWdodDoyNnB4fS5yZWNoYXJnZS13cmFwIC5yaWdodCAucXJjb2RlW2RhdGEtdi0zMGQ4NjMzZF17d2lkdGg6MTQycHg7aGVpZ2h0OjE0MnB4fS5yZWNoYXJnZS13cmFwIC50aXBbZGF0YS12LTMwZDg2MzNkXXttYXJnaW4tdG9wOjEyMnB4O3BhZGRpbmctbGVmdDo1MHB4O2xpbmUtaGVpZ2h0OjI2cHh9LnNlbGVjdGVkW2RhdGEtdi0zMGQ4NjMzZF17aGVpZ2h0OjQ4cHg7Ym9yZGVyOjFweCBzb2xpZCAjNTI2ODhjO3BhZGRpbmc6MCA0MHB4IDAgMThweDtjb2xvcjojY2RkNmU0O2JvcmRlci1yYWRpdXM6M3B4O2xpbmUtaGVpZ2h0OjQ4cHg7d29yZC1icmVhazprZWVwLWFsbDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnBvc2l0aW9uUiBpbWdbZGF0YS12LTMwZDg2MzNkXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxNXB4O3RvcDoyMHB4fS5jb250ZW50IC50YWJCYXIgc3BhbltkYXRhLXYtYjYxNGVkYzJde2xpbmUtaGVpZ2h0OjQ4cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y3Vyc29yOnBvaW50ZXJ9LmNvbnRlbnQgLmNvbnRhaW5lcltkYXRhLXYtYjYxNGVkYzJde3BhZGRpbmc6MjBweH0uY29udGVudCAuY29udGFpbmVyIC5tYWluX3RpdGxlW2RhdGEtdi1iNjE0ZWRjMl17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTIwcHg7Y29sb3I6IzYzNzA4NX0uY29udGVudCAuY29udGFpbmVyIC5tYWluX2lucHV0W2RhdGEtdi1iNjE0ZWRjMl17d2lkdGg6MzYwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNTI2ODhjO3BhZGRpbmc6MCAyMHB4O2NvbG9yOiNjZGQ2ZTQ7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO21hcmdpbi1sZWZ0OjIwcHh9LmNvbnRlbnQgLmNvbnRhaW5lciAuYnRuW2RhdGEtdi1iNjE0ZWRjMl17d2lkdGg6MjAwcHg7bGluZS1oZWlnaHQ6NDhweDtiYWNrZ3JvdW5kLWNvbG9yOiM1Njk3ZjQ7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6I2ZmZn0uY29udGVudCAuY29udGFpbmVyIC5wYXljb250ZW50W2RhdGEtdi1iNjE0ZWRjMl17Y29sb3I6I2ZmZn0uY29udGVudCAuY29udGFpbmVyIC5wYXljb250ZW50IC5wYXlib3hbZGF0YS12LWI2MTRlZGMyXTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tbGVmdDoyNXB4fS5jb250ZW50IC5jb250YWluZXIgLnBheWNvbnRlbnQgLnBheWJveFtkYXRhLXYtYjYxNGVkYzJde2JhY2tncm91bmQ6dXJsKC4uL2ltZy93eC44MmI5YzdhNS5wbmcpIG5vLXJlcGVhdCAwIDAvMTAwJSAxMDAlO3dpZHRoOjI2MHB4O2hlaWdodDoxMTVweDtwYWRkaW5nOjVweCAwIDVweCAxNXB4O2ZvbnQtc2l6ZToxNHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5jb250ZW50IC5jb250YWluZXIgLnBheWNvbnRlbnQgLnBheWJveCAubXQ1W2RhdGEtdi1iNjE0ZWRjMl17bWFyZ2luLXRvcDo1cHh9LmNvbnRlbnQgLmNvbnRhaW5lciAucGF5Y29udGVudCAucGF5Ym94IGlucHV0W2RhdGEtdi1iNjE0ZWRjMl17cG9zaXRpb246cmVsYXRpdmU7dG9wOjJweDt3aWR0aDoxNXB4O2hlaWdodDoxNXB4fS5jb250ZW50IC5jb250YWluZXIgLnBheWNvbnRlbnQgLnBheWJveCBzcGFuW2RhdGEtdi1iNjE0ZWRjMl17ZGlzcGxheTpibG9jazttYXJnaW46NXB4IDB9LmNvbnRlbnQgLmNvbnRhaW5lciAucGF5Y29udGVudCAucGF5Ym94IC5jaG9vc2VbZGF0YS12LWI2MTRlZGMyXXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206NXB4O2xlZnQ6MTVweH0uY29udGVudCAuY29udGFpbmVyIC5wYXljb250ZW50IC5wYXlib3ggLmNob29zZSBzcGFuW2RhdGEtdi1iNjE0ZWRjMl17ZGlzcGxheTppbmxpbmV9LmNvbnRlbnQgLmNvbnRhaW5lciAucGF5Y29udGVudCAucGF5Ym94W2RhdGEtdi1iNjE0ZWRjMl06bnRoLWNoaWxkKDIpe2JhY2tncm91bmQ6dXJsKC4uL2ltZy96aGlmdWJhby44MmI5YzdhNS5wbmcpIG5vLXJlcGVhdCAwIDAvMTAwJSAxMDAlfS5jb250ZW50IC5jb250YWluZXIgLnBheWNvbnRlbnQgLnBheWJveFtkYXRhLXYtYjYxNGVkYzJdOm50aC1jaGlsZCgzKXtiYWNrZ3JvdW5kOnVybCguLi9pbWcvYmFuay44MmI5YzdhNS5wbmcpIG5vLXJlcGVhdCAwIDAvMTAwJSAxMDAlfS5jb250ZW50IC5jb250YWluZXIgLmF0dGVudGlvbltkYXRhLXYtYjYxNGVkYzJde21hcmdpbi1sZWZ0OjE0NXB4O2NvbG9yOiNlNDYyNGF9LmFjY291bnQtbWFpbiAuYWNjb3VudC10aXRsZSBzcGFuW2RhdGEtdi0xOWY3MWZmZV06bnRoLWNoaWxkKDIpe21hcmdpbi1sZWZ0OjQwcHh9LmFjY291bnQtbWFpbiAuY29udGVudFtkYXRhLXYtMTlmNzFmZmVde3BhZGRpbmc6MCAxMHB4fS5hY2NvdW50LW1haW4gLmNvbnRlbnQgLmxpc3QtdGl0bGVbZGF0YS12LTE5ZjcxZmZlXXtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGJ9LmFjY291bnQtbWFpbiAuY29udGVudCAuY29udGFpbmVyW2RhdGEtdi0xOWY3MWZmZV17aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30uYWNjb3VudC1tYWluIC5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaVtkYXRhLXYtMTlmNzFmZmVde2xpbmUtaGVpZ2h0OjMwcHh9LmFjY291bnQtbWFpbiAuY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGkgc3BhbltkYXRhLXYtMTlmNzFmZmVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5hY2NvdW50LW1haW4gLmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTE5ZjcxZmZlXTpudGgtY2hpbGQoMyl7Y29sb3I6I2NjNDk1MX0uYWNjb3VudC1tYWluIC5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaSBzcGFuLmdyZWVuW2RhdGEtdi0xOWY3MWZmZV17Y29sb3I6IzU1YTA2N30uYWNjb3VudC1tYWluIC5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaVtkYXRhLXYtMTlmNzFmZmVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJiMzY0OH0uYWNjb3VudC1tYWluIC5jb250ZW50IC5ub19kYXRhW2RhdGEtdi0xOWY3MWZmZV17cGFkZGluZy10b3A6MTUwcHh9Lm5vdGljZURldGFpbCAuYWNjb3VudC13cmFwW2RhdGEtdi0xYTY0MWE0NV17YmFja2dyb3VuZDojMTgxZDI1O2JhY2tncm91bmQtc2l6ZTpjb3Zlcn0ubm90aWNlRGV0YWlsIC5hY2NvdW50LXdyYXAgLmJhY2stbmF2W2RhdGEtdi0xYTY0MWE0NV17YmFja2dyb3VuZDojMTgxZDI1O2NvbG9yOiNmZmZ9Lm5vdGljZURldGFpbCAuYWNjb3VudC13cmFwIC5hY2NvdW50W2RhdGEtdi0xYTY0MWE0NV17Y2xlYXI6Ym90aDttaW4td2lkdGg6MTQwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZy10b3A6MDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDo4ODBweH0ubm90aWNlRGV0YWlsIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLm5hdi1hZnRlcltkYXRhLXYtMWE2NDFhNDVde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm5vdGljZURldGFpbCAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5hY2NvdW50LWNvbnRlbnRbZGF0YS12LTFhNjQxYTQ1XXt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAyMHB4O2JhY2tncm91bmQtY29sb3I6IzAwMDtib3JkZXItcmFkaXVzOjEwcHh9Lm5vdGljZURldGFpbCAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5hY2NvdW50LWNvbnRlbnQgLmRldGFpbEJpZ1tkYXRhLXYtMWE2NDFhNDVde3BhZGRpbmc6NDhweCA0NnB4IDIwcHh9Lm5vdGljZURldGFpbCAuYWNjb3VudC13cmFwIC5hY2NvdW50IC5hY2NvdW50LWNvbnRlbnQgLmRldGFpbEJpZyAubWIzMFtkYXRhLXYtMWE2NDFhNDVde21hcmdpbi1ib3R0b206MzBweH0ubm90aWNlRGV0YWlsIC5hY2NvdW50LXdyYXAgLmFjY291bnQgLmFjY291bnQtY29udGVudCAuZGV0YWlsQmlnIC5kZXRhaWxDb250ZW50W2RhdGEtdi0xYTY0MWE0NV17bGluZS1oZWlnaHQ6MjZweDttaW4taGVpZ2h0Ojg1MHB4fS5ub3RpY2VEZXRhaWwgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYWNjb3VudC1jb250ZW50IC5kZXRhaWxCaWcgLmRldGFpbENvbnRlbnQgcD5bZGF0YS12LTFhNjQxYTQ1XXtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmEhaW1wb3J0YW50fS5ub3RpY2VEZXRhaWwgLmFjY291bnQtd3JhcCAuYWNjb3VudCAuYWNjb3VudC1jb250ZW50IC5kZXRhaWxCaWcgLm10NVtkYXRhLXYtMWE2NDFhNDVde21hcmdpbi10b3A6NXB4fS50aXRsZVtkYXRhLXYtMmI5NTE5ODhde2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhO2NvbG9yOiNjZGQ2ZTR9LnRpdGxlIHNwYW5bZGF0YS12LTJiOTUxOTg4XTpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tbGVmdDo0MHB4fS5jb250ZW50W2RhdGEtdi0yYjk1MTk4OF17cGFkZGluZzowIDMwcHh9LmNvbnRlbnQgLmxpc3QtdGl0bGVbZGF0YS12LTJiOTUxOTg4XXtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMzMDNiNGJ9LmNvbnRlbnQgLmNvbnRhaW5lcltkYXRhLXYtMmI5NTE5ODhde2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99LmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpW2RhdGEtdi0yYjk1MTk4OF17bGluZS1oZWlnaHQ6MzBweH0uY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGkgc3BhbltkYXRhLXYtMmI5NTE5ODhde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0OmxlZnR9LmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpIHNwYW5bZGF0YS12LTJiOTUxOTg4XTpudGgtY2hpbGQoMyl7Y29sb3I6I2NjNDk1MX0uY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGkgc3Bhbi5ncmVlbltkYXRhLXYtMmI5NTE5ODhde2NvbG9yOiM1NWEwNjd9LmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpW2RhdGEtdi0yYjk1MTk4OF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5jb250ZW50IC5ub19kYXRhW2RhdGEtdi0yYjk1MTk4OF17cGFkZGluZy10b3A6MTUwcHh9LmFjY291bnQtdG9wW2RhdGEtdi0yYjk1MTk4OF17YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhO2hlaWdodDoxMjBweDtwYWRkaW5nOjI2cHggMzBweH0uYWNjb3VudC10b3AgLmJhc2VCdG5bZGF0YS12LTJiOTUxOTg4XXt3aWR0aDo5MHB4O2xpbmUtaGVpZ2h0OjMwcHg7Zm9udC1zaXplOjE0cHh9LnRpdGxlW2RhdGEtdi03ODBiNTJmMF17aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmE7Y29sb3I6I2NkZDZlNH0udGl0bGUgc3BhbltkYXRhLXYtNzgwYjUyZjBdOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi1sZWZ0OjQwcHh9LmNvbnRlbnRbZGF0YS12LTc4MGI1MmYwXXtwYWRkaW5nOjAgMzBweH0uY29udGVudCAubGlzdC10aXRsZVtkYXRhLXYtNzgwYjUyZjBde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0Yn0uY29udGVudCAuY29udGFpbmVyW2RhdGEtdi03ODBiNTJmMF17aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30uY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGlbZGF0YS12LTc4MGI1MmYwXXtsaW5lLWhlaWdodDozMHB4fS5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaSBzcGFuW2RhdGEtdi03ODBiNTJmMF17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bGVmdDtoZWlnaHQ6MzBweH0uY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGkgc3Bhbi5ncmVlbltkYXRhLXYtNzgwYjUyZjBde2NvbG9yOiM1NWEwNjd9LmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpW2RhdGEtdi03ODBiNTJmMF06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5jb250ZW50IC5ub19kYXRhW2RhdGEtdi03ODBiNTJmMF17cGFkZGluZy10b3A6MTUwcHh9LmFjY291bnQtdG9wW2RhdGEtdi03ODBiNTJmMF17YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhO2hlaWdodDoxMjBweDtwYWRkaW5nOjI2cHggMzBweH0uYWNjb3VudC10b3AgLmJhc2VCdG5bZGF0YS12LTc4MGI1MmYwXXt3aWR0aDo5MHB4O2xpbmUtaGVpZ2h0OjMwcHg7Zm9udC1zaXplOjE0cHh9Lm1vcmVbZGF0YS12LTc4MGI1MmYwXXtjb2xvcjojNmI4MGFlO3BhZGRpbmc6MzBweDtjdXJzb3I6cG9pbnRlcn0uYWNjb3VudC1tYWluIC5hY2NvdW50LXRpdGxlIHNwYW5bZGF0YS12LTZlNzFiNmRjXTpudGgtY2hpbGQoMil7bWFyZ2luLWxlZnQ6NDBweH0uYWNjb3VudC1tYWluIC5jb250ZW50W2RhdGEtdi02ZTcxYjZkY117cGFkZGluZzowIDEwcHh9LmFjY291bnQtbWFpbiAuY29udGVudCAubGlzdC10aXRsZVtkYXRhLXYtNmU3MWI2ZGNde2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0Yn0uYWNjb3VudC1tYWluIC5jb250ZW50IC5jb250YWluZXJbZGF0YS12LTZlNzFiNmRjXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MCAyMHB4fS5hY2NvdW50LW1haW4gLmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpW2RhdGEtdi02ZTcxYjZkY117bGluZS1oZWlnaHQ6MzBweH0uYWNjb3VudC1tYWluIC5jb250ZW50IC5jb250YWluZXIgLmxpc3QtaXRlbSBsaSBzcGFuW2RhdGEtdi02ZTcxYjZkY117ZGlzcGxheTppbmxpbmUtYmxvY2t9LmFjY291bnQtbWFpbiAuY29udGVudCAuY29udGFpbmVyIC5saXN0LWl0ZW0gbGkgc3Bhbi5yZWRbZGF0YS12LTZlNzFiNmRjXXtjb2xvcjojY2M0OTUxfS5hY2NvdW50LW1haW4gLmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpIHNwYW4uZ3JlZW5bZGF0YS12LTZlNzFiNmRjXXtjb2xvcjojNTVhMDY3fS5hY2NvdW50LW1haW4gLmNvbnRlbnQgLmNvbnRhaW5lciAubGlzdC1pdGVtIGxpW2RhdGEtdi02ZTcxYjZkY106aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmIzNjQ4fS5hY2NvdW50LW1haW4gLmNvbnRlbnQgLm5vX2RhdGFbZGF0YS12LTZlNzFiNmRjXXtwYWRkaW5nLXRvcDoxNTBweH0ubGVmdE5hdiAubXIxMFtkYXRhLXYtZDQyNDExNDZde21hcmdpbi1yaWdodDoxMHB4fS5sZWZ0TmF2IC5mbGV4W2RhdGEtdi1kNDI0MTE0Nl17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXJ9LmxlZnROYXYgdWxbZGF0YS12LWQ0MjQxMTQ2XXtoZWlnaHQ6ODIwcHh9LmxlZnROYXYgdWwgbGlbZGF0YS12LWQ0MjQxMTQ2XXtoZWlnaHQ6NTRweDtsaW5lLWhlaWdodDo1NHB4O3BhZGRpbmctbGVmdDozOHB4O21hcmdpbi1ib3R0b206NHB4O2N1cnNvcjpwb2ludGVyfS5sZWZ0TmF2IHVsIGxpIGltZ1tkYXRhLXYtZDQyNDExNDZde21hcmdpbi1yaWdodDoxMnB4O21hcmdpbi10b3A6LTRweDt3aWR0aDoyMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubGVmdE5hdiB1bCAuYWN0aXZlW2RhdGEtdi1kNDI0MTE0Nl17Y29sb3I6IzAwYTRkODtiYWNrZ3JvdW5kLWNvbG9yOiMxODFkMjU7Ym9yZGVyLWJvdHRvbTpub25lO2Rpc3BsYXk6YmxvY2t9LmJveCAuYWNjb3VudFtkYXRhLXYtMWJiMDc2Njdde3dpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZy10b3A6MDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFkMjV9LnRvcGNvbnRlbnRbZGF0YS12LTFiYjA3NjY3XXtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O3BhZGRpbmc6MCAzMHB4O21hcmdpbjowIDA7Zm9udC1zaXplOjE4cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1fS5sZWZ0Y29udGVudFtkYXRhLXYtMWJiMDc2Njdde3dpZHRoOjIyMHB4O21hcmdpbi1yaWdodDowO2hlaWdodDozNTBweDtib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzo0cHg7ZmxvYXQ6bGVmdH0ucmlnaHRjb250ZW50W2RhdGEtdi0xYmIwNzY2N117d2lkdGg6OTc3cHg7bWFyZ2luLWxlZnQ6MjIzcHg7bWluLWhlaWdodDoxMDAwcHg7Ym9yZGVyLXJhZGl1czoxMHB4fS5oZWFkZXJbZGF0YS12LTVhNzAxOGU1XXtwYWRkaW5nOjE1cHggMzBweDtvdmVyZmxvdzpoaWRkZW59Lm1pbl9sYWJbZGF0YS12LTVhNzAxOGU1XXttYXJnaW46MCAxMHB4fS5taW5fbGFiIGlucHV0W2RhdGEtdi01YTcwMThlNV17bWFyZ2luLXJpZ2h0OjNweH0uaW5wX2xhYltkYXRhLXYtNWE3MDE4ZTVde2JvcmRlcjoxcHggc29saWQgIzZiODBhZTtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjNweCA1cHh9LmlucF9sYWIgaW5wdXRbZGF0YS12LTVhNzAxOGU1XXtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7d2lkdGg6MTIwcHg7Y29sb3I6I2ZmZn0ucmlnaHRfdGV4dFtkYXRhLXYtNWE3MDE4ZTVde2NvbG9yOiM1Njk3ZjR9LnJpZ2h0X3RleHQgc3BhbltkYXRhLXYtNWE3MDE4ZTVde2N1cnNvcjpwb2ludGVyfS5yZWNvcmRbZGF0YS12LTVhNzAxOGU1XXttYXJnaW4tcmlnaHQ6MTBweH0uY29udGVudF91bFtkYXRhLXYtNWE3MDE4ZTVde3BhZGRpbmc6MCAyMHB4fS5jb250ZW50X3RvcFtkYXRhLXYtNWE3MDE4ZTVde3BhZGRpbmc6MTBweCAyMHB4fS5jb250ZW50X2xpW2RhdGEtdi01YTcwMThlNV17cGFkZGluZzoxNXB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzFlMmM0Mn0uY29weVtkYXRhLXYtNWE3MDE4ZTVdLC5ld21bZGF0YS12LTVhNzAxOGU1XSwub3BlcmF0aW9uW2RhdGEtdi01YTcwMThlNV17Y29sb3I6IzAwYTRkOH0uY29weVtkYXRhLXYtNWE3MDE4ZTVde21hcmdpbjowIDMwcHh9LmNvcHlbZGF0YS12LTVhNzAxOGU1XTpob3ZlciwuZXdtW2RhdGEtdi01YTcwMThlNV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9Lm9wZXJhdGlvbiBzcGFuW2RhdGEtdi01YTcwMThlNV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjAgNXB4fS5oaWRlX2RpdltkYXRhLXYtNWE3MDE4ZTVde2JvcmRlcjoxcHggc29saWQgIzFlMmM0MjtwYWRkaW5nOjIwcHh9LmV4Y2hhcmdlX3JlY29yZFtkYXRhLXYtNWE3MDE4ZTVde2NvbG9yOiM1Njk3ZjR9aW5wdXRbZGF0YS12LTVhNzAxOGU1XXtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmV9LmFkZHJlc3NbZGF0YS12LTVhNzAxOGU1XXtmb250LXNpemU6MTRweH0uYWRkcmVzc19pbnBbZGF0YS12LTVhNzAxOGU1XXt3aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWQgIzZiODBhZTtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjE1cHggMTVweH0ubnVtX2xhYltkYXRhLXYtNWE3MDE4ZTVde2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWQgIzZiODBhZTtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjE1cHh9Lm51bV9sYWIgaW5wdXRbZGF0YS12LTVhNzAxOGU1XXt3aWR0aDoxMDAlfS5nZXRfbGFiW2RhdGEtdi01YTcwMThlNV0sLnJhbmdlX2xhYltkYXRhLXYtNWE3MDE4ZTVde2JvcmRlcjoxcHggc29saWQgIzZiODBhZTtib3JkZXItcmFkaXVzOjNweDtwYWRkaW5nOjE1cHh9LmdldF9sYWJbZGF0YS12LTVhNzAxOGU1XXtiYWNrZ3JvdW5kOiMxZTJjNDJ9LnJpZ2h0X2lucF93cmFwW2RhdGEtdi01YTcwMThlNV17bWFyZ2luLWxlZnQ6MjBweH0uYWR2YW5jZVtkYXRhLXYtNWE3MDE4ZTVdLC51c2VfbnVtW2RhdGEtdi01YTcwMThlNV17Y29sb3I6IzU2OTdmNH0udXNlX251bVtkYXRhLXYtNWE3MDE4ZTVde21hcmdpbi1yaWdodDo1cHh9LmFkdmFuY2VbZGF0YS12LTVhNzAxOGU1XXttYXJnaW4tbGVmdDo1cHh9LndpdGhkcmF3X2J0bltkYXRhLXYtNWE3MDE4ZTVde2JhY2tncm91bmQtY29sb3I6IzdhOThmNztjb2xvcjojZmZmO3BhZGRpbmc6MTVweCA3MHB4O2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6NXB4fS53aXRoZHJhd19idG5bZGF0YS12LTVhNzAxOGU1XTpob3ZlcntjdXJzb3I6cG9pbnRlcn0uYmdbZGF0YS12LTVhNzAxOGU1XXtiYWNrZ3JvdW5kOiMyYjNjNzF9LmV3bV93cmFwW2RhdGEtdi01YTcwMThlNV17cG9zaXRpb246cmVsYXRpdmV9LmV3bV9pbWdbZGF0YS12LTVhNzAxOGU1XXt3aWR0aDoxMjBweDtoZWlnaHQ6MTIwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1cHg7bGVmdDotMzBweDtib3JkZXI6MTBweCBzb2xpZCAjMjYyYTQyfS5oaWRlW2RhdGEtdi01YTcwMThlNV17ZGlzcGxheTpub25lfS5yZWMtYm94IC5yZWMtY29uW2RhdGEtdi01YTcwMThlNV17bWFyZ2luOjEwcHg7cGFkZGluZzowIDIwcHg7YmFja2dyb3VuZDojMjYyYTQyfS5yZWMtYm94IC5yZWMtY29uIHNwYW5bZGF0YS12LTVhNzAxOGU1XXtmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6M30ucmVjLWJveCAucmVjLWNvbiAucmVjLXRpdGxlW2RhdGEtdi01YTcwMThlNV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNmZmY7bGluZS1oZWlnaHQ6MS41fS5yZWMtYm94IC5yZWMtY29uIGxpW2RhdGEtdi01YTcwMThlNV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM3MjhkYWY7Ym9yZGVyLXRvcDoxcHggc29saWQgIzJlMzk0Y30ubW9yZVtkYXRhLXYtNWE3MDE4ZTVde3dpZHRoOjEwMCU7bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0udHJhbnNmZXItbW9kYWxbZGF0YS12LTVhNzAxOGU1XXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMyk7b3ZlcmZsb3c6aGlkZGVuO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS50cmFuc2Zlci1tYXNrW2RhdGEtdi01YTcwMThlNV17d2lkdGg6NTAwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czo1cHh9LnRyYW5zZmVyLWhlYWRlcltkYXRhLXYtNWE3MDE4ZTVde2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LnRyYW5zZmVyLWhlYWRlciBwW2RhdGEtdi01YTcwMThlNV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0ubnVtX2xhYiBpbnB1dFtkYXRhLXYtNWE3MDE4ZTVdOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNhYWE7Zm9udC1zaXplOjEycHh9LnJlY29yZFtkYXRhLXYtMDU2MTY3OWNde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEwMHB4O2N1cnNvcjpwb2ludGVyfS5jb250ZW50W2RhdGEtdi0wNTYxNjc5Y117d2lkdGg6NjAwcHg7cGFkZGluZy10b3A6MTAwcHg7bGluZS1oZWlnaHQ6MzBweDttYXJnaW46MCBhdXRvO3Bvc2l0aW9uOnJlbGF0aXZlfS50cmFkZVtkYXRhLXYtMDU2MTY3OWNde3dpZHRoOjExMHB4O2xpbmUtaGVpZ2h0OjMwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHh9Lm51bVtkYXRhLXYtMDU2MTY3OWNde21hcmdpbi10b3A6MTVweH0ubnVtIGlucHV0W2RhdGEtdi0wNTYxNjc5Y117d2lkdGg6NDUwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICM0ZTViODU7Ym9yZGVyLXJhZGl1czo2cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtwYWRkaW5nOjAgMTBweDtjb2xvcjojZmZmO21hcmdpbi10b3A6MTVweDttYXJnaW4tYm90dG9tOjE1cHh9LmNvbWZpcm0tYnRuW2RhdGEtdi0wNTYxNjc5Y117d2lkdGg6NDUwcHg7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjZweDttYXJnaW4tdG9wOjQwcHg7YmFja2dyb3VuZC1jb2xvcjojNGU1Yjg1O2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7b3V0bGluZTpub25lfS5sZXZlciAubGV2ZXItaGVhZFtkYXRhLXYtOTViYTY0OGFde2JhY2tncm91bmQtY29sb3I6IzFiMWUyZTtwYWRkaW5nOjAgMzBweDtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiNjN2NjZTZ9LmxldmVyIC5sZXZlci1oZWFkIC5taW5jbnlbZGF0YS12LTk1YmE2NDhhXXtjb2xvcjojNjE2ODhhfS5sZXZlciAubGV2ZXItaGVhZCAuZmlsdGVyLWlucHV0W2RhdGEtdi05NWJhNjQ4YV17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTI1cHg7aGVpZ2h0OjI4cHg7cGFkZGluZzowIDMwcHggMCAxMHB4O2JhY2tncm91bmQ6bm9uZTtib3JkZXItcmFkaXVzOjNweDtib3JkZXI6MXB4IHNvbGlkICM0ZTViODV9LmxldmVyIC5sZXZlcmJvZHlbZGF0YS12LTk1YmE2NDhhXXtwYWRkaW5nOjAgMjBweH0ubGV2ZXIgLmxldmVyYm9keSAudGl0bGVib3hbZGF0YS12LTk1YmE2NDhhXXtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4fS5sZXZlciAubGV2ZXJib2R5IC50aXRsZWJveCBsaVtkYXRhLXYtOTViYTY0OGFde2Zsb2F0OmxlZnR9LmxldmVyIC5sZXZlcmJvZHkgLmNvbnRlbnRib3ggbGlbZGF0YS12LTk1YmE2NDhhXXtoZWlnaHQ6NjBweDtwYWRkaW5nOjEwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzFmMjk0M30ubGV2ZXIgLmxldmVyYm9keSAuY29udGVudGJveCBsaT5wW2RhdGEtdi05NWJhNjQ4YV17ZmxvYXQ6bGVmdDtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4fS5sZXZlciAubGV2ZXJib2R5IC5jb250ZW50Ym94IGxpIC5sNDBbZGF0YS12LTk1YmE2NDhhXXtsaW5lLWhlaWdodDo0MHB4fS5sZXZlciAubGV2ZXJib2R5IC5jb250ZW50Ym94IGxpIC5idG4gc3BhbltkYXRhLXYtOTViYTY0OGFde21hcmdpbi1sZWZ0OjIwcHg7Y3Vyc29yOnBvaW50ZXJ9LmxldmVyIC5sZXZlcmJvZHkgLmNvbnRlbnRib3ggbGkgLmJ0biBzcGFuW2RhdGEtdi05NWJhNjQ4YV06aG92ZXJ7Y29sb3I6IzYxNjg4YX0ubGV2ZXIgLmRpYWxvZ193cmFwW2RhdGEtdi05NWJhNjQ4YV17cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDo5O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNCl9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nW2RhdGEtdi05NWJhNjQ4YV17bWFyZ2luLXRvcDoyMjBweDtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo1NjBweDtwYWRkaW5nLXRvcDozMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjNweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQtY29sb3I6IzI2MmE0Mn0ubGV2ZXIgLmRpYWxvZ193cmFwIC5kaWFsb2cgLmRpYS10aXRbZGF0YS12LTk1YmE2NDhhXXtwYWRkaW5nOjAgNDBweCAzMHB4O2ZvbnQtc2l6ZToyNHB4O2xpbmUtaGVpZ2h0OjI0cHh9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtdGl0IC5jbG9zZVtkYXRhLXYtOTViYTY0OGFde2N1cnNvcjpwb2ludGVyfS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLXRpdCAuY2xvc2VbZGF0YS12LTk1YmE2NDhhXTpob3Zlcntjb2xvcjojZmZmfS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnRbZGF0YS12LTk1YmE2NDhhXXtwYWRkaW5nOjAgNDBweDttYXJnaW4tYm90dG9tOjIwcHh9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZnJvbWJveFtkYXRhLXYtOTViYTY0OGFde2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHh9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZnJvbWJveCBzcGFuW2RhdGEtdi05NWJhNjQ4YV17d2lkdGg6MTAlfS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmZyb21ib3ggcFtkYXRhLXYtOTViYTY0OGFde2hlaWdodDo0OHB4O3BhZGRpbmctbGVmdDoyMHB4O2xpbmUtaGVpZ2h0OjQ4cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMjAyNDM3fS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmZyb21ib3ggLmNvaW5pbWdbZGF0YS12LTk1YmE2NDhhXXt3aWR0aDoyOHB4O21hcmdpbjowIGF1dG99LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZGlhLWNvaW5bZGF0YS12LTk1YmE2NDhhXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMDI0Mzd9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZGlhLWNvaW4gcFtkYXRhLXYtOTViYTY0OGFde3dpZHRoOjUwJTtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmRpYS1jb2luIHAgaVtkYXRhLXYtOTViYTY0OGFde2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206NHB4O3JpZ2h0OjRweDt3aWR0aDowO2hlaWdodDowO2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206NnB4IHNvbGlkICNmZmZ9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZGlhLWNvaW4gLnNlbGVjdFtkYXRhLXYtOTViYTY0OGFde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojN2E5OGY3fS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmRpYS1jb2luIC5zZWxlY3QgaVtkYXRhLXYtOTViYTY0OGFde2Rpc3BsYXk6YmxvY2t9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZGlhLWNvaW4gcFtkYXRhLXYtOTViYTY0OGFdOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHh9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuZGlhLWNvaW4gcFtkYXRhLXYtOTViYTY0OGFdOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowIDAgM3B4IDB9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuaW5wdXRib3hzW2RhdGEtdi05NWJhNjQ4YV17d2lkdGg6MTAwJTtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMxZTIyMzU7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O3BhZGRpbmc6MCAyMHB4fS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmlucHV0Ym94cyBpbnB1dFtkYXRhLXYtOTViYTY0OGFde2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7aGVpZ2h0OjQ2cHg7Y29sb3I6I2ZmZn0ubGV2ZXIgLmRpYWxvZ193cmFwIC5kaWFsb2cgLmRpYS1jb250ZW50IC5pbnB1dGJveHMgc3BhbltkYXRhLXYtOTViYTY0OGFde21hcmdpbi1sZWZ0OjE1cHh9LmxldmVyIC5kaWFsb2dfd3JhcCAuZGlhbG9nIC5kaWEtY29udGVudCAuaW5wdXRib3hzIC5hbGxbZGF0YS12LTk1YmE2NDhhXXtjb2xvcjojZmY3NTE5O2N1cnNvcjpwb2ludGVyfS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmJ0bi1ib3hbZGF0YS12LTk1YmE2NDhhXXttYXJnaW46NTBweCAwfS5sZXZlciAuZGlhbG9nX3dyYXAgLmRpYWxvZyAuZGlhLWNvbnRlbnQgLmJ0bi1ib3ggZGl2W2RhdGEtdi05NWJhNjQ4YV17d2lkdGg6NTAlO2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7bWFyZ2luOjAgMTBweDtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcn0ubGV2ZXIgLmRpYWxvZ193cmFwIC5kaWFsb2cgLmRpYS1jb250ZW50IC5idG4tYm94IC5zdXJlW2RhdGEtdi05NWJhNjQ4YV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM3YTk4Zjd9LmJveCAuYWNjb3VudFtkYXRhLXYtMGJiNmI1MDBde3dpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvIDgycHg7bWFyZ2luLXRvcDozMHB4fS50b3Bjb250ZW50W2RhdGEtdi0wYmI2YjUwMF17cGFkZGluZzoyMnB4IDMwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6IzFhMjMzMDtib3JkZXItcmFkaXVzOjVweH0uYWNjb3VudF90aXRsZVtkYXRhLXYtMGJiNmI1MDBde3BhZGRpbmc6MTVweCAyMHB4fS5jb250ZW50W2RhdGEtdi0xZDQ1Njk4Zl17d2lkdGg6MTIwMHB4O21hcmdpbjowIGF1dG99LmNvbnRlbnQgLnRvcGNvbnRlbnRbZGF0YS12LTFkNDU2OThmXXtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O3BhZGRpbmc6MCAzMHB4O21hcmdpbjoyMHB4IDA7Zm9udC1zaXplOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhfS5jb250ZW50IC5tYWluYm94PmRpdltkYXRhLXYtMWQ0NTY5OGZde2JhY2tncm91bmQ6IzE4MWIyYX0uY29udGVudCAubWFpbmJveCAubWFpbi1sZWZ0W2RhdGEtdi0xZDQ1Njk4Zl17d2lkdGg6MjIwcHg7aGVpZ2h0OjUxMnB4O21hcmdpbi1yaWdodDoyMHB4O2JvcmRlci1yYWRpdXM6M3B4fS5jb250ZW50IC5tYWluYm94IC5tYWluLWxlZnQgLmJhci1oZFtkYXRhLXYtMWQ0NTY5OGZde3BhZGRpbmc6MCAwIDAgMjBweDtib3JkZXItcmFkaXVzOjNweCAzcHggMCAwO2JveC1zaGFkb3c6MCAzcHggNnB4IHJnYmEoMCwwLDAsLjEpfS5jb250ZW50IC5tYWluYm94IC5tYWluLWxlZnQgLmJhci1oZCAuYmFyLXRpdGxlW2RhdGEtdi0xZDQ1Njk4Zl17aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtmb250LXdlaWdodDo0MDB9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tbGVmdCAuYmFyLWhkIGxpW2RhdGEtdi0xZDQ1Njk4Zl17bWFyZ2luLXJpZ2h0OjMwcHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6NDBweH0uY29udGVudCAubWFpbmJveCAubWFpbi1sZWZ0IC5iYXItdGIgLnRiLXRpdGxlW2RhdGEtdi0xZDQ1Njk4Zl17aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDttYXJnaW46MCAyMHB4O2NvbG9yOiM0ZTViODV9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tbGVmdCAuYmFyLXRiIC50Yi10aXRsZSBwW2RhdGEtdi0xZDQ1Njk4Zl17d2lkdGg6NTAlfS5jb250ZW50IC5tYWluYm94IC5tYWluLWxlZnQgLmJhci10YiAudGItdWxbZGF0YS12LTFkNDU2OThmXXtoZWlnaHQ6MzE4cHg7b3ZlcmZsb3c6YXV0b30uY29udGVudCAubWFpbmJveCAubWFpbi1sZWZ0IC5iYXItdGIgLnRiLXVsIGxpW2RhdGEtdi0xZDQ1Njk4Zl17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjAgNHB4O3BhZGRpbmc6MCAxNnB4O21hcmdpbi10b3A6LTFweDtsaW5lLWhlaWdodDozMXB4O2hlaWdodDozMXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxZjI5NDN9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tbGVmdCAuYmFyLXRiIC50Yi11bCBsaSBzcGFuW2RhdGEtdi0xZDQ1Njk4Zl17d2lkdGg6NTAlfS5jb250ZW50IC5tYWluYm94IC5tYWluLWxlZnQgLmJhci10YiAudGItdWwgbGlbZGF0YS12LTFkNDU2OThmXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyNjJhNDJ9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tbGVmdCAuYmFyLXRiIC50Yi11bCAuc2VsZWN0W2RhdGEtdi0xZDQ1Njk4Zl17YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO2JvcmRlci1yYWRpdXM6M3B4fS5jb250ZW50IC5tYWluYm94IC5tYWluLXJpZ2h0W2RhdGEtdi0xZDQ1Njk4Zl17bWluLWhlaWdodDo1MTJweDttYXJnaW4tbGVmdDoyNDBweDtib3JkZXItcmFkaXVzOjNweDttYXJnaW4tYm90dG9tOjEwcHg7dHJhbnNpdGlvbjpoZWlnaHQgLjE1cyBlYXNlLWluLW91dH0uY29udGVudCAubWFpbmJveCAubWFpbi1yaWdodCAubXItdGl0bGVbZGF0YS12LTFkNDU2OThmXXtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O3BhZGRpbmctbGVmdDozMHB4fS5jb250ZW50IC5tYWluYm94IC5tYWluLXJpZ2h0IC5tb2QtYmRbZGF0YS12LTFkNDU2OThmXXtwYWRkaW5nOjAgMzBweH0uY29udGVudCAubWFpbmJveCAubWFpbi1yaWdodCAubW9kLWJkIC5iYWxhbmNlX2JhcltkYXRhLXYtMWQ0NTY5OGZde2hlaWdodDo4MXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxZjI5NDN9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tcmlnaHQgLm1vZC1iZCAuYmFsYW5jZV9iYXIgbGlbZGF0YS12LTFkNDU2OThmXXt3aWR0aDoyNSV9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tcmlnaHQgLm1vZC1iZCAuYmFsYW5jZV9iYXIgbGkgLmNhbnVzZVtkYXRhLXYtMWQ0NTY5OGZde3BhZGRpbmc6MTNweCAwIDIzcHh9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tcmlnaHQgLnBhbm5lbD5kaXZbZGF0YS12LTFkNDU2OThmXXt3aWR0aDo0MzBweDtwYWRkaW5nLXRvcDozMHB4O21pbi1oZWlnaHQ6MzAwcHh9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tcmlnaHQgLnBhbm5lbD5kaXYgLnBhbi10aXRsZVtkYXRhLXYtMWQ0NTY5OGZde2ZvbnQtc2l6ZToyNHB4O2hlaWdodDo1MHB4O2ZvbnQtd2VpZ2h0OjQwMH0uY29udGVudCAubWFpbmJveCAubWFpbi1yaWdodCAucGFubmVsPmRpdiAucGFubmVsLXVsW2RhdGEtdi0xZDQ1Njk4Zl17aGVpZ2h0OjQ5cHg7cGFkZGluZy1ib3R0b206MjlweH0uY29udGVudCAubWFpbmJveCAubWFpbi1yaWdodCAucGFubmVsPmRpdiAucGFubmVsLXVsIGxpW2RhdGEtdi0xZDQ1Njk4Zl17d2lkdGg6MzMuMyV9LmNvbnRlbnQgLm1haW5ib3ggLm1haW4tcmlnaHQgLnBhbm5lbD5kaXYgLnBhbm5lbC11bCBsaSAuYnJvd1tkYXRhLXYtMWQ0NTY5OGZde2hlaWdodDozMHB4fS5jb250ZW50IC5hcHBseWJveCAuYXAtaGVhZGVyW2RhdGEtdi0xZDQ1Njk4Zl17YmFja2dyb3VuZDojMWIxZTJlO2JveC1zaGFkb3c6MCAzcHggNnB4IHJnYmEoMCwwLDAsLjEpO2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czozcHggM3B4IDAgMDtwYWRkaW5nOjAgMzBweH0uY29udGVudCAuYXBwbHlib3ggLmFwLWxpc3RbZGF0YS12LTFkNDU2OThmXXtwYWRkaW5nOjAgMTBweDttaW4taGVpZ2h0OjE1MHB4fS5jb250ZW50IC5hcHBseWJveCAuYXAtbGlzdCAudWwtdGl0bGVbZGF0YS12LTFkNDU2OThmXXtwYWRkaW5nOjAgMjBweH0uY29udGVudCAuYXBwbHlib3ggLmFwLWxpc3QgLnVsLXRpdGxlIGxpW2RhdGEtdi0xZDQ1Njk4Zl17aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweH0uZWwtbWVzc2FnZS1ib3ggLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6I2YxZjFmMSFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjojZmZmIWltcG9ydGFudDtjb2xvcjojMTgxYjJhIWltcG9ydGFudH0uaGVhZGVyW2RhdGEtdi0wNTFiZDcyM117cGFkZGluZzoxNXB4IDMwcHg7b3ZlcmZsb3c6aGlkZGVufS5taW5fbGFiW2RhdGEtdi0wNTFiZDcyM117bWFyZ2luOjAgMTBweH0ubWluX2xhYiBpbnB1dFtkYXRhLXYtMDUxYmQ3MjNde21hcmdpbi1yaWdodDozcHh9LmlucF9sYWJbZGF0YS12LTA1MWJkNzIzXXtib3JkZXI6MXB4IHNvbGlkICM2YjgwYWU7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzozcHggNXB4fS5pbnBfbGFiIGlucHV0W2RhdGEtdi0wNTFiZDcyM117YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3dpZHRoOjEyMHB4O2NvbG9yOiNmZmZ9LnJpZ2h0X3RleHRbZGF0YS12LTA1MWJkNzIzXXtjb2xvcjojNTY5N2Y0fS5yaWdodF90ZXh0IHNwYW5bZGF0YS12LTA1MWJkNzIzXXtjdXJzb3I6cG9pbnRlcn0ucmVjb3JkW2RhdGEtdi0wNTFiZDcyM117bWFyZ2luLXJpZ2h0OjEwcHh9LmNvbnRlbnRfdWxbZGF0YS12LTA1MWJkNzIzXXtwYWRkaW5nOjAgMjBweH0uY29udGVudF90b3BbZGF0YS12LTA1MWJkNzIzXXtwYWRkaW5nOjEwcHggMjBweH0uY29udGVudF9saVtkYXRhLXYtMDUxYmQ3MjNde3BhZGRpbmc6MTVweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxZTJjNDJ9LmNvcHlbZGF0YS12LTA1MWJkNzIzXSwuZXdtW2RhdGEtdi0wNTFiZDcyM10sLm9wZXJhdGlvbltkYXRhLXYtMDUxYmQ3MjNde2NvbG9yOiMwMGE0ZDh9LmNvcHlbZGF0YS12LTA1MWJkNzIzXXttYXJnaW46MCAzMHB4fS5jb3B5W2RhdGEtdi0wNTFiZDcyM106aG92ZXIsLmV3bVtkYXRhLXYtMDUxYmQ3MjNdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5vcGVyYXRpb24gc3BhbltkYXRhLXYtMDUxYmQ3MjNde2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweH0uaGlkZV9kaXZbZGF0YS12LTA1MWJkNzIzXXtib3JkZXI6MXB4IHNvbGlkICMxZTJjNDI7cGFkZGluZzoyMHB4fS5leGNoYXJnZV9yZWNvcmRbZGF0YS12LTA1MWJkNzIzXXtjb2xvcjojNTY5N2Y0fWlucHV0W2RhdGEtdi0wNTFiZDcyM117YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lfS5hZGRyZXNzX2lucFtkYXRhLXYtMDUxYmQ3MjNde3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweCAxNXB4fS5udW1fbGFiW2RhdGEtdi0wNTFiZDcyM117ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweH0ubnVtX2xhYiBpbnB1dFtkYXRhLXYtMDUxYmQ3MjNde3dpZHRoOjEwMCV9LmdldF9sYWJbZGF0YS12LTA1MWJkNzIzXSwucmFuZ2VfbGFiW2RhdGEtdi0wNTFiZDcyM117Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweH0uZ2V0X2xhYltkYXRhLXYtMDUxYmQ3MjNde2JhY2tncm91bmQ6IzFlMmM0Mn0ucmlnaHRfaW5wX3dyYXBbZGF0YS12LTA1MWJkNzIzXXttYXJnaW4tbGVmdDoyMHB4fS5hZHZhbmNlW2RhdGEtdi0wNTFiZDcyM10sLnVzZV9udW1bZGF0YS12LTA1MWJkNzIzXXtjb2xvcjojNTY5N2Y0fS51c2VfbnVtW2RhdGEtdi0wNTFiZDcyM117bWFyZ2luLXJpZ2h0OjVweH0uYWR2YW5jZVtkYXRhLXYtMDUxYmQ3MjNde21hcmdpbi1sZWZ0OjVweH0ud2l0aGRyYXdfYnRuW2RhdGEtdi0wNTFiZDcyM117YmFja2dyb3VuZC1jb2xvcjojN2E5OGY3O2NvbG9yOiNmZmY7cGFkZGluZzoxNXB4IDcwcHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo1cHh9LndpdGhkcmF3X2J0bltkYXRhLXYtMDUxYmQ3MjNdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5iZ1tkYXRhLXYtMDUxYmQ3MjNde2JhY2tncm91bmQ6IzJiM2M3MX0uZXdtX3dyYXBbZGF0YS12LTA1MWJkNzIzXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXdtX2ltZ1tkYXRhLXYtMDUxYmQ3MjNde3dpZHRoOjE1MHB4O2hlaWdodDoxNTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjVweDtsZWZ0Oi00NXB4O2JvcmRlcjoxMHB4IHNvbGlkICNmZmY7ei1pbmRleDoxfS5oaWRlW2RhdGEtdi0wNTFiZDcyM117ZGlzcGxheTpub25lfS5yZWMtYm94IC5yZWMtY29uW2RhdGEtdi0wNTFiZDcyM117bWFyZ2luOjEwcHg7cGFkZGluZzowIDIwcHg7YmFja2dyb3VuZDojMTgxZDI1fS5yZWMtYm94IC5yZWMtY29uIHNwYW5bZGF0YS12LTA1MWJkNzIzXXtmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6M30ucmVjLWJveCAucmVjLWNvbiAucmVjLXRpdGxlW2RhdGEtdi0wNTFiZDcyM117ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNmZmY7bGluZS1oZWlnaHQ6MS41fS5yZWMtYm94IC5yZWMtY29uIGxpW2RhdGEtdi0wNTFiZDcyM117ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM3MjhkYWY7Ym9yZGVyLXRvcDoxcHggc29saWQgIzJlMzk0Y30ubW9yZVtkYXRhLXYtMDUxYmQ3MjNde3dpZHRoOjEwMCU7bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0udHJhbnNmZXItbW9kYWxbZGF0YS12LTA1MWJkNzIzXXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMyk7b3ZlcmZsb3c6aGlkZGVuO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS50cmFuc2Zlci1tYXNrW2RhdGEtdi0wNTFiZDcyM117d2lkdGg6NTAwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czo1cHh9LnRyYW5zZmVyLWhlYWRlcltkYXRhLXYtMDUxYmQ3MjNde2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LnRyYW5zZmVyLWhlYWRlciBwW2RhdGEtdi0wNTFiZDcyM117cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0ubnVtX2xhYiBpbnB1dFtkYXRhLXYtMDUxYmQ3MjNdOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNhYWE7Zm9udC1zaXplOjEycHh9LmVsLWZvcm0taXRlbV9fbGFiZWx7Y29sb3I6IzYzNzA4NSFpbXBvcnRhbnR9LmVsLXRhYnMtLWJvcmRlci1jYXJkLC5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyLC5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudH0uZWwtdGFicy0tYm9yZGVyLWNhcmQsLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXJ7Ym9yZGVyLWNvbG9yOiMxNzFlMjUhaW1wb3J0YW50fS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZXtib3JkZXItbGVmdC1jb2xvcjojMTcxZTI1IWltcG9ydGFudDtib3JkZXItcmlnaHQtY29sb3I6IzE3MWUyNSFpbXBvcnRhbnQ7Y29sb3I6IzAwYTRkOCFpbXBvcnRhbnR9LmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6IzRkNTM3MyFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjojMTgxZDI1IWltcG9ydGFudDtjb2xvcjojY2VjZmQwIWltcG9ydGFudH0uaGVhZGVyW2RhdGEtdi0xMTEwZmQ1OF17cGFkZGluZzoxNXB4IDMwcHg7b3ZlcmZsb3c6aGlkZGVufS5taW5fbGFiW2RhdGEtdi0xMTEwZmQ1OF17bWFyZ2luOjAgMTBweH0ubWluX2xhYiBpbnB1dFtkYXRhLXYtMTExMGZkNThde21hcmdpbi1yaWdodDozcHh9LmlucF9sYWJbZGF0YS12LTExMTBmZDU4XXtib3JkZXI6MXB4IHNvbGlkICM2YjgwYWU7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzozcHggNXB4fS5pbnBfbGFiIGlucHV0W2RhdGEtdi0xMTEwZmQ1OF17YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3dpZHRoOjEyMHB4O2NvbG9yOiNmZmZ9LnJpZ2h0X3RleHRbZGF0YS12LTExMTBmZDU4XXtjb2xvcjojNTY5N2Y0fS5yaWdodF90ZXh0IHNwYW5bZGF0YS12LTExMTBmZDU4XXtjdXJzb3I6cG9pbnRlcn0ucmVjb3JkW2RhdGEtdi0xMTEwZmQ1OF17bWFyZ2luLXJpZ2h0OjEwcHh9LmNvbnRlbnRfdWxbZGF0YS12LTExMTBmZDU4XXtwYWRkaW5nOjAgMjBweH0uY29udGVudF90b3BbZGF0YS12LTExMTBmZDU4XXtwYWRkaW5nOjEwcHggMjBweH0uY29udGVudF9saVtkYXRhLXYtMTExMGZkNThde3BhZGRpbmc6MTVweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxZTJjNDJ9LmNvcHlbZGF0YS12LTExMTBmZDU4XSwuZXdtW2RhdGEtdi0xMTEwZmQ1OF0sLm9wZXJhdGlvbltkYXRhLXYtMTExMGZkNThde2NvbG9yOiMwMGE0ZDh9LmNvcHlbZGF0YS12LTExMTBmZDU4XXttYXJnaW46MCAzMHB4fS5jb3B5W2RhdGEtdi0xMTEwZmQ1OF06aG92ZXIsLmV3bVtkYXRhLXYtMTExMGZkNThdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5vcGVyYXRpb24gc3BhbltkYXRhLXYtMTExMGZkNThde2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweH0uaGlkZV9kaXZbZGF0YS12LTExMTBmZDU4XXtib3JkZXI6MXB4IHNvbGlkICMxZTJjNDI7cGFkZGluZzoyMHB4fS5leGNoYXJnZV9yZWNvcmRbZGF0YS12LTExMTBmZDU4XXtjb2xvcjojNTY5N2Y0fWlucHV0W2RhdGEtdi0xMTEwZmQ1OF17YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lfS5hZGRyZXNzX2lucFtkYXRhLXYtMTExMGZkNThde3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweCAxNXB4fS5udW1fbGFiW2RhdGEtdi0xMTEwZmQ1OF17ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweH0ubnVtX2xhYiBpbnB1dFtkYXRhLXYtMTExMGZkNThde3dpZHRoOjEwMCV9LmdldF9sYWJbZGF0YS12LTExMTBmZDU4XSwucmFuZ2VfbGFiW2RhdGEtdi0xMTEwZmQ1OF17Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweH0uZ2V0X2xhYltkYXRhLXYtMTExMGZkNThde2JhY2tncm91bmQ6IzFlMmM0Mn0ucmlnaHRfaW5wX3dyYXBbZGF0YS12LTExMTBmZDU4XXttYXJnaW4tbGVmdDoyMHB4fS5hZHZhbmNlW2RhdGEtdi0xMTEwZmQ1OF0sLnVzZV9udW1bZGF0YS12LTExMTBmZDU4XXtjb2xvcjojNTY5N2Y0fS51c2VfbnVtW2RhdGEtdi0xMTEwZmQ1OF17bWFyZ2luLXJpZ2h0OjVweH0uYWR2YW5jZVtkYXRhLXYtMTExMGZkNThde21hcmdpbi1sZWZ0OjVweH0ud2l0aGRyYXdfYnRuW2RhdGEtdi0xMTEwZmQ1OF17YmFja2dyb3VuZC1jb2xvcjojN2E5OGY3O2NvbG9yOiNmZmY7cGFkZGluZzoxNXB4IDE1cHg7bWluLXdpZHRoOjEyMHB4O3dpZHRoOjEwMCU7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo1cHh9LndpdGhkcmF3X2J0bltkYXRhLXYtMTExMGZkNThdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5iZ1tkYXRhLXYtMTExMGZkNThde2JhY2tncm91bmQ6IzJiM2M3MX0uZXdtX3dyYXBbZGF0YS12LTExMTBmZDU4XXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXdtX2ltZ1tkYXRhLXYtMTExMGZkNThde3dpZHRoOjE1MHB4O2hlaWdodDoxNTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjVweDtsZWZ0Oi00NXB4O2JvcmRlcjoxMHB4IHNvbGlkICNmZmY7ei1pbmRleDoxfS5oaWRlW2RhdGEtdi0xMTEwZmQ1OF17ZGlzcGxheTpub25lfS5yZWMtYm94IC5yZWMtY29uW2RhdGEtdi0xMTEwZmQ1OF17bWFyZ2luOjEwcHg7cGFkZGluZzowIDIwcHg7YmFja2dyb3VuZDojMjYyYTQyfS5yZWMtYm94IC5yZWMtY29uIHNwYW5bZGF0YS12LTExMTBmZDU4XXtmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6M30ucmVjLWJveCAucmVjLWNvbiAucmVjLXRpdGxlW2RhdGEtdi0xMTEwZmQ1OF17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNmZmY7bGluZS1oZWlnaHQ6MS41fS5yZWMtYm94IC5yZWMtY29uIGxpW2RhdGEtdi0xMTEwZmQ1OF17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM3MjhkYWY7Ym9yZGVyLXRvcDoxcHggc29saWQgIzJlMzk0Y30ubW9yZVtkYXRhLXYtMTExMGZkNThde3dpZHRoOjEwMCU7bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0udHJhbnNmZXItbW9kYWxbZGF0YS12LTExMTBmZDU4XXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMyk7b3ZlcmZsb3c6aGlkZGVuO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS50cmFuc2Zlci1tYXNrW2RhdGEtdi0xMTEwZmQ1OF17d2lkdGg6NTAwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyO21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czo1cHh9LnRyYW5zZmVyLWhlYWRlcltkYXRhLXYtMTExMGZkNThde2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LnRyYW5zZmVyLWhlYWRlciBwW2RhdGEtdi0xMTEwZmQ1OF17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0ubnVtX2xhYiBpbnB1dFtkYXRhLXYtMTExMGZkNThdOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNhYWE7Zm9udC1zaXplOjEycHh9LmxlZ2FsX25hbWVbZGF0YS12LTVjYmUzMTQxXXtiYWNrZ3JvdW5kOiMxYjFlMmU7cGFkZGluZzo1cHggMTBweH0ubXNnX3RpdGxlW2RhdGEtdi01Y2JlMzE0MV17Y29sb3I6IzYxNjg4YX0ubWFpbltkYXRhLXYtNWNiZTMxNDFde2NvbG9yOiNmZmY7cGFkZGluZzozMHB4fS5sZWdhbEFjY291bnRfbXNnW2RhdGEtdi01Y2JlMzE0MV17YmFja2dyb3VuZDojMWIxZTJlO3BhZGRpbmc6NnB4IDEwcHh9LmxlZ2FsQWNjb3VudF9tc2cgZGl2IHBbZGF0YS12LTVjYmUzMTQxXTpmaXJzdC1jaGlsZHttYXJnaW4tYm90dG9tOjEwcHh9LnJlY193cmFwW2RhdGEtdi01Y2JlMzE0MV17bWFyZ2luLXRvcDozMHB4O21hcmdpbi1ib3R0b206MzBweH0ucmVjX3RpdGxlW2RhdGEtdi01Y2JlMzE0MV17bWFyZ2luLWJvdHRvbToxMHB4fS5hbGxbZGF0YS12LTVjYmUzMTQxXXtjb2xvcjojNjE2ODhhfS5saXN0X3RpdGxlW2RhdGEtdi01Y2JlMzE0MV17cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6IzFiMWUyZX0ubGlzdF90aXRsZSBzcGFuW2RhdGEtdi01Y2JlMzE0MV17ZmxleDoxfS5odWF6aHVhbltkYXRhLXYtNWNiZTMxNDFde3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6NjBweDtiYWNrZ3JvdW5kOiM3YTk4Zjc7cGFkZGluZzo4cHh9Lmh1YXpodWFuW2RhdGEtdi01Y2JlMzE0MV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmxvZ19saXN0IGxpW2RhdGEtdi01Y2JlMzE0MV17cGFkZGluZzoxMHB4fS5sb2dfbGlzdCBsaSBzcGFuW2RhdGEtdi01Y2JlMzE0MV17ZmxleDoxfS5sZWdhbF9uYW1lW2RhdGEtdi0wODU0ZjM1Nl17YmFja2dyb3VuZDojMWIxZTJlO3BhZGRpbmc6NXB4IDEwcHh9Lm1zZ190aXRsZVtkYXRhLXYtMDg1NGYzNTZde2NvbG9yOiM2MTY4OGF9Lm1haW5bZGF0YS12LTA4NTRmMzU2XXtjb2xvcjojZmZmO3BhZGRpbmc6MzBweH0ubGVnYWxBY2NvdW50X21zZ1tkYXRhLXYtMDg1NGYzNTZde2JhY2tncm91bmQ6IzFiMWUyZTtwYWRkaW5nOjZweCAxMHB4fS5sZWdhbEFjY291bnRfbXNnIGRpdiBwW2RhdGEtdi0wODU0ZjM1Nl06Zmlyc3QtY2hpbGR7bWFyZ2luLWJvdHRvbToxMHB4fS5yZWNfd3JhcFtkYXRhLXYtMDg1NGYzNTZde21hcmdpbi10b3A6MzBweDttYXJnaW4tYm90dG9tOjMwcHh9LnJlY190aXRsZVtkYXRhLXYtMDg1NGYzNTZde21hcmdpbi1ib3R0b206MTBweH0uYWxsW2RhdGEtdi0wODU0ZjM1Nl17Y29sb3I6IzYxNjg4YX0ubGlzdF90aXRsZVtkYXRhLXYtMDg1NGYzNTZde3BhZGRpbmc6MTBweDtiYWNrZ3JvdW5kOiMxYjFlMmV9Lmxpc3RfdGl0bGUgc3BhbltkYXRhLXYtMDg1NGYzNTZde2ZsZXg6MX0uaHVhemh1YW5bZGF0YS12LTA4NTRmMzU2XXt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjYwcHg7YmFja2dyb3VuZDojN2E5OGY3O3BhZGRpbmc6OHB4fS5odWF6aHVhbltkYXRhLXYtMDg1NGYzNTZdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5sb2dfbGlzdCBsaVtkYXRhLXYtMDg1NGYzNTZde3BhZGRpbmc6MTBweH0ubG9nX2xpc3QgbGkgc3BhbltkYXRhLXYtMDg1NGYzNTZde2ZsZXg6MX0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVke2NvbG9yOiMwMGE0ZDghaW1wb3J0YW50O2ZvbnQtd2VpZ2h0OjQwMCFpbXBvcnRhbnR9LmVsLWxvYWRpbmctc3Bpbm5lciAuZWwtbG9hZGluZy10ZXh0LC5lbC1sb2FkaW5nLXNwaW5uZXIgaXtjb2xvcjojMDBhNGQ4IWltcG9ydGFudH0uY2hvb3NlLXdyYXBbZGF0YS12LWJjNjU5NmY4XXtwYWRkaW5nLXRvcDo1MHB4O3dpZHRoOjcwJTttYXJnaW46MCBhdXRvfS5jaG9vc2Utd3JhcFtkYXRhLXYtYmM2NTk2ZjhdIC5lbC1pbnB1dF9faW5uZXJ7YmFja2dyb3VuZDojMDAwIWltcG9ydGFudH0uY2hvb3NlLXdyYXBbZGF0YS12LWJjNjU5NmY4XSAuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtiYWNrZ3JvdW5kOiMwMDA7Ym9yZGVyLWNvbG9yOiM0ZDUzNzN9LmNob29zZS13cmFwPmRpdltkYXRhLXYtYmM2NTk2Zjhde21hcmdpbi1ib3R0b206NDBweH0uY2hvb3NlLXdyYXA+ZGl2IFtkYXRhLXYtYmM2NTk2ZjhdOmZpcnN0LWNoaWxke3dpZHRoOjMwJX0uY2hvb3NlLXdyYXA+ZGl2IFtkYXRhLXYtYmM2NTk2ZjhdOmxhc3QtY2hpbGR7ZmxleDoxfS5lbC1kcm9wZG93bltkYXRhLXYtYmM2NTk2Zjhde2N1cnNvcjpwb2ludGVyfSN0cmFuc2Zlci1sZWdhbFtkYXRhLXYtYmM2NTk2Zjhde3BhZGRpbmc6MCAzMHB4O2NvbG9yOiNjN2NjZTZ9I3RyYW5zZmVyLWxlZ2FsPi50aXRsZVtkYXRhLXYtYmM2NTk2Zjhde3BhZGRpbmc6MjBweCAwO2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM2MTY4OGF9I3RyYW5zZmVyLWxlZ2FsPi5jb2luc1tkYXRhLXYtYmM2NTk2Zjhde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSN0cmFuc2Zlci1sZWdhbD4uY29pbnMgbGlbZGF0YS12LWJjNjU5NmY4XXttYXJnaW4tcmlnaHQ6MjBweDtwYWRkaW5nOjVweCAyMHB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMjM0MTY1fSN0cmFuc2Zlci1sZWdhbD4uY29pbnMgLmFjdGl2ZVtkYXRhLXYtYmM2NTk2Zjhde2JhY2tncm91bmQ6IzAwYTRkOH0jdHJhbnNmZXItbGVnYWw+LnR5cGVzW2RhdGEtdi1iYzY1OTZmOF17bWFyZ2luOjMwcHggMDtoZWlnaHQ6ODBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGluZS1oZWlnaHQ6NDBweH0jdHJhbnNmZXItbGVnYWw+LnR5cGVzIC50eXBlcy1yW2RhdGEtdi1iYzY1OTZmOF17ZGlzcGxheTpmbGV4fSN0cmFuc2Zlci1sZWdhbD4udHlwZXMgaW1nW2RhdGEtdi1iYzY1OTZmOF17bWFyZ2luOjI1cHg7d2lkdGg6MzBweDtoZWlnaHQ6MzBweH0jdHJhbnNmZXItbGVnYWwgLm51bWJlcltkYXRhLXYtYmM2NTk2Zjhde21hcmdpbjozMHB4IDAgMDtsaW5lLWhlaWdodDo0MHB4fSN0cmFuc2Zlci1sZWdhbCAubnVtYmVyIGlucHV0W2RhdGEtdi1iYzY1OTZmOF17Ym9yZGVyOm5vbmU7Y29sb3I6I2YyZjVmZjtiYWNrZ3JvdW5kOm5vbmU7bGluZS1oZWlnaHQ6NDBweDt3aWR0aDo4MDBweDtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjY2NjfSN0cmFuc2Zlci1sZWdhbCAubnVtYmVyIC5hbGxbZGF0YS12LWJjNjU5NmY4XXttYXJnaW4tbGVmdDoxMHB4O3BhZGRpbmctbGVmdDoxMHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfSN0cmFuc2Zlci1sZWdhbCAudHJhbnNmZXJbZGF0YS12LWJjNjU5NmY4XXtkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG87bGluZS1oZWlnaHQ6NDBweDt3aWR0aDo1MCU7YmFja2dyb3VuZDojMDBhNGQ4O2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo1cHh9LndyYXBbZGF0YS12LTQxNTQzNDAxXXtvdmVyZmxvdzphdXRvfS5saV93cmFwW2RhdGEtdi00MTU0MzQwMV17bWF4LWhlaWdodDo2MDBweDtvdmVyZmxvdy15OmF1dG99LmxvZ191bCBsaVtkYXRhLXYtNDE1NDM0MDFde3BhZGRpbmc6MTVweCAwfS5sb2dfdWw+bGlbZGF0YS12LTQxNTQzNDAxXTpmaXJzdC1jaGlsZHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMzAzYjRifS5sb2dfdWw+bGlbZGF0YS12LTQxNTQzNDAxXTpmaXJzdC1jaGlsZDpob3ZlcntiYWNrZ3JvdW5kOiMxODFiMmF9LmxvZ191bCBsaVtkYXRhLXYtNDE1NDM0MDFdOmhvdmVye2JhY2tncm91bmQ6IzYxNjg4YX0ubW9yZVtkYXRhLXYtNDE1NDM0MDFde2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMHB4O2N1cnNvcjpwb2ludGVyfVtkYXRhLXYtNDE1NDM0MDFdOjotd2Via2l0LXNjcm9sbGJhcntiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmF9LndyYXBbZGF0YS12LWY5NzQyMmFhXXttaW4taGVpZ2h0OjcwMHB4O3dpZHRoOjEwMCU7bWFyZ2luOmF1dG87YmFja2dyb3VuZDojMTgxZDI1fS5kZXRhaWxbZGF0YS12LWY5NzQyMmFhXXttaW4taGVpZ2h0OjUwMHB4O2JhY2tncm91bmQ6IzAwMDt3aWR0aDoxMjAwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjB9dWwgbGlbZGF0YS12LWY5NzQyMmFhXXtwYWRkaW5nOjhweCAwfXVsIGxpIHNwYW5bZGF0YS12LWY5NzQyMmFhXXt3aWR0aDoyNCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpjZW50ZXJ9Lmxpc3RfaGVhZFtkYXRhLXYtZjk3NDIyYWFde2NvbG9yOiM2MzcwODU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzJlMzMzY30ucmVkW2RhdGEtdi1mOTc0MjJhYV17Y29sb3I6I2NjNDk1MTtjdXJzb3I6cG9pbnRlcn0ubW9yZVtkYXRhLXYtZjk3NDIyYWFde3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM5OTk7Zm9udC1zaXplOjE0cHg7bWFyZ2luLXRvcDoxMHB4O2N1cnNvcjpwb2ludGVyfS5hbGxbZGF0YS12LWY5NzQyMmFhXXtmb250LXNpemU6MTRweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojMDBhNGQ4O21hcmdpbi1sZWZ0OjEwcHh9LndyYXBbZGF0YS12LTZkNDVlN2MwXXttaW4taGVpZ2h0OjUwMHB4O2JhY2tncm91bmQ6IzE4MWIyYTt3aWR0aDoxMDAlO21hcmdpbjphdXRvO3BhZGRpbmc6OTBweCA1MHB4IDMwcHggNTBweH0udGFiLWhlYWRlcltkYXRhLXYtNmQ0NWU3YzBde21hcmdpbi1ib3R0b206MzBweDtjb2xvcjojYzdjY2U2fS50YWItaGVhZGVyIHNwYW5bZGF0YS12LTZkNDVlN2MwXXtwYWRkaW5nLWJvdHRvbToxMHB4O21hcmdpbi1yaWdodDoyMHB4O2N1cnNvcjpwb2ludGVyfXVsIGxpW2RhdGEtdi02ZDQ1ZTdjMF17cGFkZGluZzo4cHggMDtsaW5lLWhlaWdodDozM3B4fXVsIGxpIGRpdltkYXRhLXYtNmQ0NWU3YzBdLHVsIGxpIHNwYW5bZGF0YS12LTZkNDVlN2MwXXtkaXNwbGF5OmlubGluZS1ibG9ja311bCBsaSBkaXYgc3BhbltkYXRhLXYtNmQ0NWU3YzBde2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjM4YmQ0O2N1cnNvcjpwb2ludGVyO21pbi1oZWlnaHQ6MzNweDttaW4td2lkdGg6ODBweDtmb250LXNpemU6MTRweDtib3JkZXI6bm9uZTtwYWRkaW5nOjAgNXB4O2xpbmUtaGVpZ2h0OjMzcHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lmxpc3RfaGVhZFtkYXRhLXYtNmQ0NWU3YzBde2NvbG9yOiM2MzcwODU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzJlMzMzY30ucmVkW2RhdGEtdi02ZDQ1ZTdjMF17Y29sb3I6I2NjNDk1MTtjdXJzb3I6cG9pbnRlcn0uZ3JlZW5bZGF0YS12LTZkNDVlN2MwXXtjb2xvcjojMGQ4NTUxfS5zdG9wLWJ0bltkYXRhLXYtNmQ0NWU3YzBde21hcmdpbi1yaWdodDoxMHB4fS5tb3Jlc1tkYXRhLXYtNmQ0NWU3YzBde2NvbG9yOiM5OTk7Zm9udC1zaXplOjE0cHg7bWFyZ2luLXRvcDoxMHB4O2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246Y2VudGVyfS5tb3JlcyBpbWdbZGF0YS12LTZkNDVlN2MwXXt3aWR0aDoxMjBweDtoZWlnaHQ6MTIwcHg7bWFyZ2luOjMwcHggYXV0byAwfS5tb3JlcyBzcGFuW2RhdGEtdi02ZDQ1ZTdjMF17ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOmNlbnRlcn0ud2lkdGgxW2RhdGEtdi02ZDQ1ZTdjMF17d2lkdGg6OSU7dGV4dC1hbGlnbjpjZW50ZXJ9LndpZHRoMltkYXRhLXYtNmQ0NWU3YzBde3dpZHRoOjEzJTt0ZXh0LWFsaWduOmNlbnRlcn0ud2lkdGgzW2RhdGEtdi02ZDQ1ZTdjMF17d2lkdGg6MjAlO3RleHQtYWxpZ246Y2VudGVyfS5sb3NzLW1vZGFsW2RhdGEtdi02ZDQ1ZTdjMF17d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjcpO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNjN2NjZTZ9LmNvbnRlbnRbZGF0YS12LTZkNDVlN2MwXXt3aWR0aDo1MDBweDtiYWNrZ3JvdW5kLWNvbG9yOiMyNjJhNDI7bWFyZ2luOjAgYXV0bztib3JkZXItcmFkaXVzOjVweH0ubG9zcy1tb2RhbC1oZWFkZXJbZGF0YS12LTZkNDVlN2MwXXtsaW5lLWhlaWdodDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5sb3NzLW1vZGFsLWhlYWRlciBwW2RhdGEtdi02ZDQ1ZTdjMF17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0ubG9zcy1tYWRhbC1jb250ZW50W2RhdGEtdi02ZDQ1ZTdjMF17bWFyZ2luOjAgMTVweDtwYWRkaW5nLWJvdHRvbToxMHB4fS5sb3NzLW1hZGFsLWNvbnRlbnQgZGl2W2RhdGEtdi02ZDQ1ZTdjMF17bGluZS1oZWlnaHQ6NDBweDttYXJnaW4tYm90dG9tOjEwcHh9Lmxvc3MtbWFkYWwtY29udGVudCBkaXYgcFtkYXRhLXYtNmQ0NWU3YzBde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjoxcHggc29saWQgIzJlMzMzYztib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubG9zcy1tYWRhbC1jb250ZW50IHAgc3BhbltkYXRhLXYtNmQ0NWU3YzBde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjMwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0zcHh9Lmxvc3MtbWFkYWwtY29udGVudCBpbnB1dFtkYXRhLXYtNmQ0NWU3YzBde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICMyZTMzM2M7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMmUzMzNjO2xpbmUtaGVpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi04cHg7Y29sb3I6I2M3Y2NlNjt0ZXh0LWFsaWduOmNlbnRlcn0ubW9kYWwtdGV4dFtkYXRhLXYtNmQ0NWU3YzBde3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6NjBweH0ubW9kYWwtYnRuW2RhdGEtdi02ZDQ1ZTdjMF17Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NXB4O2ZvbnQtc2l6ZTowfS5tb2RhbC1idG4gYnV0dG9uW2RhdGEtdi02ZDQ1ZTdjMF17d2lkdGg6NTAlO2xpbmUtaGVpZ2h0OjUwcHg7Ym9yZGVyOm5vbmU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MTRweDtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzlkYjVjN30ubW9kYWwtYnRuIGJ1dHRvbltkYXRhLXYtNmQ0NWU3YzBdOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICMyZTMzM2M7YmFja2dyb3VuZDojNjg5Y2YxfS50b3RhbC1wcm8gYnV0dG9uW2RhdGEtdi02ZDQ1ZTdjMF17Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2MzhiZDQ7Y3Vyc29yOnBvaW50ZXI7bWluLWhlaWdodDozM3B4O21pbi13aWR0aDo4MHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlcjpub25lO3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6MzNweDt0ZXh0LWFsaWduOmNlbnRlcn0uc3RvcE1vZGFsW2RhdGEtdi02ZDQ1ZTdjMF17bWFyZ2luOjIwcHggMTVweDt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLWJvdHRvbToyMHB4fS5zdG9wTW9kYWwgc3BhbltkYXRhLXYtNmQ0NWU3YzBde3BhZGRpbmc6NnB4IDE1cHg7Ym9yZGVyLXJhZGl1czo0cHh9LnN0b3BhbGxbZGF0YS12LTZkNDVlN2MwXXtib3JkZXI6MXB4IHNvbGlkICM2MzhiZDQ7Y29sb3I6IzYzOGJkNDttYXJnaW4tcmlnaHQ6MTBweH0uYWxsc1tkYXRhLXYtNmQ0NWU3YzBde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjM4YmQ0fS5zdG9wYnV5W2RhdGEtdi02ZDQ1ZTdjMF17Ym9yZGVyOjFweCBzb2xpZCAjMGQ4NTUxO2NvbG9yOiMwZDg1NTE7bWFyZ2luLXJpZ2h0OjEwcHh9LmJ1eXNbZGF0YS12LTZkNDVlN2MwXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzBkODU1MX0uc3RvcHNlbGxbZGF0YS12LTZkNDVlN2MwXXtib3JkZXI6MXB4IHNvbGlkICNjYzQ5NTE7Y29sb3I6I2NjNDk1MX0uc2VsbHNbZGF0YS12LTZkNDVlN2MwXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2NjNDk1MX0uc3RvcC1tb2RhbC1idG5zW2RhdGEtdi02ZDQ1ZTdjMF17d2lkdGg6MTAwJTtmb250LXNpemU6MH0uc3RvcC1tb2RhbC1idG5zIGJ1dHRvbltkYXRhLXYtNmQ0NWU3YzBde3dpZHRoOjUwJTtmbG9hdDpsZWZ0O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjQwcHg7YmFja2dyb3VuZC1jb2xvcjojOWRiNWM3O2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtjb2xvcjojZmZmfS5zdG9wLW1vZGFsLWJ0bnMgYnV0dG9uW2RhdGEtdi02ZDQ1ZTdjMF06bGFzdC1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODljZjF9LmJ0bnMgYnV0dG9uW2RhdGEtdi02ZDQ1ZTdjMF17Ym9yZGVyLXJhZGl1czozcHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2MzhiZDQ7Y3Vyc29yOnBvaW50ZXI7bWluLWhlaWdodDozM3B4O21pbi13aWR0aDo4MHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlcjpub25lO3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6MzNweDt0ZXh0LWFsaWduOmNlbnRlcn0uYWxjZW50ZXIgc3BhbltkYXRhLXYtNmQ0NWU3YzBde2NvbG9yOiNjN2NjZTZ9aHRtbFtkYXRhLXYtYTVlYzVkY2Fde2JhY2tncm91bmQ6IzI2MmE0Mn0uaG9tZVtkYXRhLXYtYTVlYzVkY2Fde21hcmdpbi1ib3R0b206M3B4fS5oYW5ncWlhbmdbZGF0YS12LWE1ZWM1ZGNhXXt3aWR0aDoxMDAlO2hlaWdodDo2MHB4O2xpbmUtaGVpZ2h0OjYwcHg7Y29sb3I6I2M3Y2NlNjttYXJnaW4tdG9wOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmE7dGV4dC1pbmRlbnQ6MmVtfS5tYWluX3NodWp1W2RhdGEtdi1hNWVjNWRjYV17d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmE7Y29sb3I6I2M3Y2NlNn0ubWFpbl9xdWFuYnVbZGF0YS12LWE1ZWM1ZGNhXXt3aWR0aDoxMDAlO2hlaWdodDo2MHB4O2xpbmUtaGVpZ2h0OjYwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzE5MjYzOH0uYnRuW2RhdGEtdi1hNWVjNWRjYV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMzNTdjZTE7bWFyZ2luOjAgMTBweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O3BhZGRpbmc6MCAxMHB4O2JvcmRlci1yYWRpdXM6MnB4O2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyO2JvcmRlcjpub25lO21hcmdpbi10b3A6MTVweDttYXJnaW4tbGVmdDozNXB4fS5jb2luYm94W2RhdGEtdi1hNWVjNWRjYV17cGFkZGluZzowIDQwcHg7Ym94LXNoYWRvdzowIDJweCA0cHggcmdiYSgyOCwzNiw0NCwuMDUpfS5mdDEyW2RhdGEtdi1hNWVjNWRjYV17Zm9udC1zaXplOjEycHh9LmNsYXNzZml0eVtkYXRhLXYtYTVlYzVkY2Fde3BhZGRpbmc6MCAxMHB4O2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzljYTliNX0uZmxleFtkYXRhLXYtYTVlYzVkY2Fde2Rpc3BsYXk6ZmxleDstd2Via2l0LWRpc3BsYXk6ZmxleDstbW96LWRpc3BsYXk6ZmxleDstbXMtZGlzcGxheTpmbGV4Oy1vLWRpc3BsYXk6ZmxleH0uY29pbmJveCAuY2xhc3NmaXR5PmRpdltkYXRhLXYtYTVlYzVkY2FdOmZpcnN0LWNoaWxkLC5jb2luYm94IC5jbGFzc2ZpdHkgZGl2W2RhdGEtdi1hNWVjNWRjYV06bnRoLWNoaWxkKDQpe3dpZHRoOjE4JTtmbGV4Om5vbmV9LmNvaW5ib3ggLmNsYXNzZml0eT5kaXZbZGF0YS12LWE1ZWM1ZGNhXTpmaXJzdC1jaGlsZCwuY29pbmJveCAuY2xhc3NmaXR5IGRpdltkYXRhLXYtYTVlYzVkY2FdOmZpcnN0LWNoaWxke3dpZHRoOjEwJTtmbGV4Om5vbmV9LmlubmVyYm94IC5jb2luYm94IC5jbGFzc2ZpdHk+ZGl2W2RhdGEtdi1hNWVjNWRjYV17ZmxleDoxO2N1cnNvcjpwb2ludGVyfS5jb2luYm94IHVsIGxpIGRpdltkYXRhLXYtYTVlYzVkY2Fde2hlaWdodDo1NnB4O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjU2cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwMDtjb2xvcjojYzdjY2U2fS5jdXJQZXJbZGF0YS12LWE1ZWM1ZGNhXSwucG9pbnRlcltkYXRhLXYtYTVlYzVkY2Fde2N1cnNvcjpwb2ludGVyfS5hbGNlbnRlcltkYXRhLXYtYTVlYzVkY2Fde2FsaWduLWl0ZW1zOmNlbnRlcn0uY29pbmJveCB1bCBsaSBkaXY+cFtkYXRhLXYtYTVlYzVkY2FdOmZpcnN0LWNoaWxkLC5pbm5lcmJveCAuY29pbmJveCB1bCBsaSBkaXYgcFtkYXRhLXYtYTVlYzVkY2FdOm50aC1jaGlsZCg0KXt3aWR0aDoxMCU7ZmxleDpub25lfS5jb2luYm94IHVsIGxpIGRpdiBwW2RhdGEtdi1hNWVjNWRjYV17ZmxleDoxfS5ncmF5W2RhdGEtdi1hNWVjNWRjYV17Y29sb3I6I2QzZGZlNn0uZnQxNFtkYXRhLXYtYTVlYzVkY2Fde2ZvbnQtc2l6ZToxNHB4fS5pY29uZm9udFtkYXRhLXYtYTVlYzVkY2Fde2ZvbnQtZmFtaWx5Omljb25mb250IWltcG9ydGFudDtmb250LXNpemU6MTZweDtmb250LXN0eWxlOm5vcm1hbDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ubWw1W2RhdGEtdi1hNWVjNWRjYV17bWFyZ2luLWxlZnQ6MTVweH0uY29pbmJveCB1bCBsaSBkaXYgLmdyZWVuIHNwYW5bZGF0YS12LWE1ZWM1ZGNhXXtjb2xvcjojMGRhODhiO2JhY2tncm91bmQtY29sb3I6cmdiYSgxMywxNjgsMTM5LC4xKX0uY29pbmJveCB1bCBsaSBkaXYgLnJlZCBzcGFuW2RhdGEtdi1hNWVjNWRjYV17Y29sb3I6I2VmNTY1NjtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDg2LDg2LC4xKX0uY29pbmJveCB1bCBsaSBkaXYgLmNoYW5nZSBzcGFuW2RhdGEtdi1hNWVjNWRjYV17d2lkdGg6ODBweDtkaXNwbGF5OmJsb2NrO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvaW5ib3ggLmNsYXNzZml0eT5kaXYgcFtkYXRhLXYtYTVlYzVkY2Fde2hlaWdodDoyNXB4fS5iZXR3ZWVuW2RhdGEtdi1hNWVjNWRjYV17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbHVtbltkYXRhLXYtYTVlYzVkY2Fde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29pbmJveCAuY2xhc3NmaXR5PmRpdiBwIC51cC5zb3J0W2RhdGEtdi1hNWVjNWRjYV17Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICM0ZTViODV9LmNvaW5ib3ggLmNsYXNzZml0eT5kaXYgcCAudXBbZGF0YS12LWE1ZWM1ZGNhXXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzljYTliNX0uY29pbmJveCAuY2xhc3NmaXR5PmRpdiBwIC5kb3duW2RhdGEtdi1hNWVjNWRjYV17Ym9yZGVyLWNvbG9yOiM5Y2E5YjUgdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnR9LmNvaW5ib3ggLmNsYXNzZml0eT5kaXYgcCBzcGFuW2RhdGEtdi1hNWVjNWRjYV17d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItd2lkdGg6NXB4O2JvcmRlci1zdHlsZTpzb2xpZDttYXJnaW4tbGVmdDoxMHB4fS5jbGFzc2ZpdHk+ZGl2W2RhdGEtdi1hNWVjNWRjYV17ZmxleDoxfS5ob3ZlW2RhdGEtdi1hNWVjNWRjYV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMTkwMzAzfS5jb250ZW50LXdyYXBbZGF0YS12LTI0ZmY2MjY5XXtiYWNrZ3JvdW5kOnVybCguLi9pbWcvYmdfbG9naW4uM2NkMWExYzcucG5nKSBjZW50ZXIgYm90dG9tIDMxNnB4IHJlcGVhdC14LC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMjEyNjNmLCMyNjJhNDIpfS5hY2NvdW50W2RhdGEtdi0yNGZmNjI2OV17d2lkdGg6MTIwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZy10b3A6OTNweDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDo4ODBweH0ubWFpbltkYXRhLXYtMjRmZjYyNjlde3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MCAwIDYwcHggMzBweH0ubWFpbl90aXRsZVtkYXRhLXYtMjRmZjYyNjlde2ZvbnQtc2l6ZTozNnB4O2NvbG9yOiNjN2NjZTZ9LnJlZ2lzdGVyLWl0ZW1bZGF0YS12LTI0ZmY2MjY5XXtkaXNwbGF5OmJsb2NrO2hlaWdodDoyMnB4O2NvbG9yOiM2MTY4OGE7Zm9udC1zaXplOjEycHh9LnJlZ2lzdGVyLWlucHV0W2RhdGEtdi0yNGZmNjI2OV17cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDoyMHB4fS5pbnB1dC1ib3hbZGF0YS12LTI0ZmY2MjY5XXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjQwcHh9LmlucHV0LW1haW5bZGF0YS12LTI0ZmY2MjY5XXt3aWR0aDo1MjBweDttaW4taGVpZ2h0OjQ2cHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O3BhZGRpbmc6MCAyMHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMWUyMjM1fS5pY29uW2RhdGEtdi0yNGZmNjI2OV17d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgIzUyNjg4Yztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0ubG9naW4tYnRuW2RhdGEtdi0yNGZmNjI2OV17d2lkdGg6NDIwcHg7bWFyZ2luLXRvcDo0MHB4O2JhY2tncm91bmQ6IzU2OTdmNDtmb250LXNpemU6MTZweDtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2xpbmUtaGVpZ2h0OjQ4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm5vYWNjb3VudFtkYXRhLXYtMjRmZjYyNjlde2NvbG9yOiNmZmZ9LnJlZ2lzdGVyLWJ1dHRvbltkYXRhLXYtMjRmZjYyNjlde3dpZHRoOjIwMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjQ2cHg7YmFja2dyb3VuZC1jb2xvcjojN2E5OGY3O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmV9LmhhdmUtYWNjb3VudFtkYXRhLXYtMjRmZjYyNjlde2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjMwcHh9LnJpZ2h0LXRpcFtkYXRhLXYtMjRmZjYyNjlde3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NjIwcHg7dG9wOjcwcHg7bGluZS1oZWlnaHQ6MjRweDtwYWRkaW5nLXJpZ2h0OjUwcHg7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MTY4OGF9LmNvZGUtYm94W2RhdGEtdi0yNGZmNjI2OV17d2lkdGg6NTIwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O2JhY2tncm91bmQ6IzFlMjIzNX0uY29kZS1ib3ggLmlucHV0LW1haW5bZGF0YS12LTI0ZmY2MjY5XXt3aWR0aDo0MTlweDtib3JkZXI6bm9uZX0uY29kZS1ib3ggYnV0dG9uW2RhdGEtdi0yNGZmNjI2OV17Ym9yZGVyOm5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM0ZTViODU7bGluZS1oZWlnaHQ6NDRweDtjb2xvcjojN2E5OGY3O2JhY2tncm91bmQ6IzFlMjIzNTt3aWR0aDo5NHB4fS5jb250ZW50LXdyYXBbZGF0YS12LTNlZDM4ZGNkXXtiYWNrZ3JvdW5kOnVybCguLi9pbWcvYmdfbG9naW4uM2NkMWExYzcucG5nKSBjZW50ZXIgYm90dG9tIDMxNnB4IHJlcGVhdC14LC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMjEyNjNmLCMyNjJhNDIpfS5hY2NvdW50W2RhdGEtdi0zZWQzOGRjZF17d2lkdGg6MTIwMHB4O21hcmdpbjowIGF1dG87cGFkZGluZy10b3A6OTNweDtvdmVyZmxvdzpoaWRkZW47bWluLWhlaWdodDo4ODBweH0ubWFpbltkYXRhLXYtM2VkMzhkY2Rde3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MCAwIDYwcHggMzBweH0ubWFpbl90aXRsZVtkYXRhLXYtM2VkMzhkY2Rde2ZvbnQtc2l6ZTozNnB4O2NvbG9yOiNjN2NjZTZ9LnJlZ2lzdGVyLWl0ZW1bZGF0YS12LTNlZDM4ZGNkXXtkaXNwbGF5OmJsb2NrO2hlaWdodDoyMnB4O2NvbG9yOiM2MTY4OGE7Zm9udC1zaXplOjEycHh9LnJlZ2lzdGVyLWlucHV0W2RhdGEtdi0zZWQzOGRjZF17cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDoyMHB4fS5pbnB1dC1ib3hbZGF0YS12LTNlZDM4ZGNkXXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjQwcHh9LmlucHV0LW1haW5bZGF0YS12LTNlZDM4ZGNkXXt3aWR0aDo1MjBweDttaW4taGVpZ2h0OjQ2cHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O3BhZGRpbmc6MCAyMHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojMWUyMjM1fS5pY29uW2RhdGEtdi0zZWQzOGRjZF17d2lkdGg6NDhweDtoZWlnaHQ6NDhweDtsaW5lLWhlaWdodDo0OHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgIzUyNjg4Yztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0ubG9naW4tYnRuW2RhdGEtdi0zZWQzOGRjZF17d2lkdGg6NDIwcHg7bWFyZ2luLXRvcDo0MHB4O2JhY2tncm91bmQ6IzU2OTdmNDtmb250LXNpemU6MTZweDtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2xpbmUtaGVpZ2h0OjQ4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm5vYWNjb3VudFtkYXRhLXYtM2VkMzhkY2Rde2NvbG9yOiNmZmZ9LnJlZ2lzdGVyLWJ1dHRvbltkYXRhLXYtM2VkMzhkY2Rde3dpZHRoOjIwMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjQ2cHg7YmFja2dyb3VuZC1jb2xvcjojN2E5OGY3O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmV9LmhhdmUtYWNjb3VudFtkYXRhLXYtM2VkMzhkY2Rde2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjMwcHh9LnJpZ2h0LXRpcFtkYXRhLXYtM2VkMzhkY2Rde3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NjIwcHg7dG9wOjcwcHg7bGluZS1oZWlnaHQ6MjRweDtwYWRkaW5nLXJpZ2h0OjUwcHg7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MTY4OGF9LmJveCAuYWNjb3VudFtkYXRhLXYtZmEyNzFhZGVde3dpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvIDgycHg7bWFyZ2luLXRvcDozMHB4fS50b3Bjb250ZW50W2RhdGEtdi1mYTI3MWFkZV17cGFkZGluZzoyMnB4IDMwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6IzFhMjMzMDtib3JkZXItcmFkaXVzOjVweH0uYWNjb3VudF90aXRsZVtkYXRhLXYtZmEyNzFhZGVde3BhZGRpbmc6MTVweCAyMHB4fXNlbGVjdFtkYXRhLXYtZmEyNzFhZGVde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7cGFkZGluZzoxMHB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjE4cHg7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1fXNlbGVjdC5mdDE0W2RhdGEtdi1mYTI3MWFkZV17Zm9udC1zaXplOjE0cHh9c2VsZWN0Pm9wdGlvbltkYXRhLXYtZmEyNzFhZGVde3BhZGRpbmc6MTBweCAwO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9aW5wdXRbZGF0YS12LWZhMjcxYWRlXXtwYWRkaW5nOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjNGU1Yjg1O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiNjN2NjZTY7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdXRsaW5lOm5vbmV9LmFkZFtkYXRhLXYtZmEyNzFhZGVde3RleHQtYWxpZ246cmlnaHQ7bWFyZ2luLXRvcDoyMHB4fS5hZGQgLmJhc2VCdG5bZGF0YS12LWZhMjcxYWRlXXt3aWR0aDoyMDBweH0uaGVhZGVyW2RhdGEtdi00ODJiODBkZl17cGFkZGluZzoxNXB4IDMwcHg7b3ZlcmZsb3c6aGlkZGVufS5taW5fbGFiW2RhdGEtdi00ODJiODBkZl17bWFyZ2luOjAgMTBweH0ubWluX2xhYiBpbnB1dFtkYXRhLXYtNDgyYjgwZGZde21hcmdpbi1yaWdodDozcHh9LmlucF9sYWJbZGF0YS12LTQ4MmI4MGRmXXtib3JkZXI6MXB4IHNvbGlkICM2YjgwYWU7Ym9yZGVyLXJhZGl1czoycHg7cGFkZGluZzozcHggNXB4fS5pbnBfbGFiIGlucHV0W2RhdGEtdi00ODJiODBkZl17YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3dpZHRoOjEyMHB4O2NvbG9yOiNmZmZ9LnJpZ2h0X3RleHRbZGF0YS12LTQ4MmI4MGRmXXtjb2xvcjojNTY5N2Y0fS5yaWdodF90ZXh0IHNwYW5bZGF0YS12LTQ4MmI4MGRmXXtjdXJzb3I6cG9pbnRlcn0ucmVjb3JkW2RhdGEtdi00ODJiODBkZl17bWFyZ2luLXJpZ2h0OjEwcHh9LmNvbnRlbnRfdWxbZGF0YS12LTQ4MmI4MGRmXXtwYWRkaW5nOjAgMjBweH0uY29udGVudF90b3BbZGF0YS12LTQ4MmI4MGRmXXtwYWRkaW5nOjEwcHggMjBweH0uY29udGVudF9saVtkYXRhLXYtNDgyYjgwZGZde3BhZGRpbmc6MTVweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICMxZTJjNDJ9LmNvcHlbZGF0YS12LTQ4MmI4MGRmXSwuZXdtW2RhdGEtdi00ODJiODBkZl0sLm9wZXJhdGlvbltkYXRhLXYtNDgyYjgwZGZde2NvbG9yOiMwMGE0ZDh9LmNvcHlbZGF0YS12LTQ4MmI4MGRmXXttYXJnaW46MCAzMHB4fS5jb3B5W2RhdGEtdi00ODJiODBkZl06aG92ZXIsLmV3bVtkYXRhLXYtNDgyYjgwZGZdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5vcGVyYXRpb24gc3BhbltkYXRhLXYtNDgyYjgwZGZde2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweH0uaGlkZV9kaXZbZGF0YS12LTQ4MmI4MGRmXXtib3JkZXI6MXB4IHNvbGlkICMxZTJjNDI7cGFkZGluZzoyMHB4fS5leGNoYXJnZV9yZWNvcmRbZGF0YS12LTQ4MmI4MGRmXXtjb2xvcjojNTY5N2Y0fWlucHV0W2RhdGEtdi00ODJiODBkZl17YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lfS5hZGRyZXNzX2lucFtkYXRhLXYtNDgyYjgwZGZde3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweCAxNXB4fS5udW1fbGFiW2RhdGEtdi00ODJiODBkZl17ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweH0ubnVtX2xhYiBpbnB1dFtkYXRhLXYtNDgyYjgwZGZde3dpZHRoOjEwMCV9LmdldF9sYWJbZGF0YS12LTQ4MmI4MGRmXSwucmFuZ2VfbGFiW2RhdGEtdi00ODJiODBkZl17Ym9yZGVyOjFweCBzb2xpZCAjNmI4MGFlO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MTVweH0uZ2V0X2xhYltkYXRhLXYtNDgyYjgwZGZde2JhY2tncm91bmQ6IzFlMmM0Mn0ucmlnaHRfaW5wX3dyYXBbZGF0YS12LTQ4MmI4MGRmXXttYXJnaW4tbGVmdDoyMHB4fS5hZHZhbmNlW2RhdGEtdi00ODJiODBkZl0sLnVzZV9udW1bZGF0YS12LTQ4MmI4MGRmXXtjb2xvcjojNTY5N2Y0fS51c2VfbnVtW2RhdGEtdi00ODJiODBkZl17bWFyZ2luLXJpZ2h0OjVweH0uYWR2YW5jZVtkYXRhLXYtNDgyYjgwZGZde21hcmdpbi1sZWZ0OjVweH0ud2l0aGRyYXdfYnRuW2RhdGEtdi00ODJiODBkZl17YmFja2dyb3VuZC1jb2xvcjojN2E5OGY3O2NvbG9yOiNmZmY7cGFkZGluZzoxNXB4IDcwcHg7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo1cHh9LndpdGhkcmF3X2J0bltkYXRhLXYtNDgyYjgwZGZdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5iZ1tkYXRhLXYtNDgyYjgwZGZde2JhY2tncm91bmQ6IzJiM2M3MX0uZXdtX3dyYXBbZGF0YS12LTQ4MmI4MGRmXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXdtX2ltZ1tkYXRhLXYtNDgyYjgwZGZde3dpZHRoOjEyMHB4O2hlaWdodDoxMjBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjVweDtsZWZ0Oi0zMHB4O2JvcmRlcjoxMHB4IHNvbGlkICMyNjJhNDJ9LmhpZGVbZGF0YS12LTQ4MmI4MGRmXXtkaXNwbGF5Om5vbmV9LnJlYy1ib3ggLnJlYy1jb25bZGF0YS12LTQ4MmI4MGRmXXttYXJnaW46MTBweDtwYWRkaW5nOjAgMjBweDtiYWNrZ3JvdW5kOiMyNjJhNDJ9LnJlYy1ib3ggLnJlYy1jb24gc3BhbltkYXRhLXYtNDgyYjgwZGZde2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDozfS5yZWMtYm94IC5yZWMtY29uIC5yZWMtdGl0bGVbZGF0YS12LTQ4MmI4MGRmXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZjtsaW5lLWhlaWdodDoxLjV9LnJlYy1ib3ggLnJlYy1jb24gbGlbZGF0YS12LTQ4MmI4MGRmXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Zm9udC1zaXplOjEycHg7Y29sb3I6IzcyOGRhZjtib3JkZXItdG9wOjFweCBzb2xpZCAjMmUzOTRjfS5tb3JlW2RhdGEtdi00ODJiODBkZl17d2lkdGg6MTAwJTtsaW5lLWhlaWdodDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfS50cmFuc2Zlci1tb2RhbFtkYXRhLXYtNDgyYjgwZGZde3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO2JvdHRvbTowO3JpZ2h0OjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zKTtvdmVyZmxvdzpoaWRkZW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnRyYW5zZmVyLW1hc2tbZGF0YS12LTQ4MmI4MGRmXXt3aWR0aDo1MDBweDtiYWNrZ3JvdW5kLWNvbG9yOiMyNjJhNDI7bWFyZ2luOjAgYXV0bztib3JkZXItcmFkaXVzOjVweH0udHJhbnNmZXItaGVhZGVyW2RhdGEtdi00ODJiODBkZl17bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0udHJhbnNmZXItaGVhZGVyIHBbZGF0YS12LTQ4MmI4MGRmXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDowfS5udW1fbGFiIGlucHV0W2RhdGEtdi00ODJiODBkZl06Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2FhYTtmb250LXNpemU6MTJweH0jbGV2ZXItcmVjb3Jke3dpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvO2NvbG9yOiNjN2NjZTZ9I2xldmVyLXJlY29yZCAudGl0bGV7aGVpZ2h0OjYwcHg7bGluZS1oZWlnaHQ6NjBweDtwYWRkaW5nOjAgMzBweDttYXJnaW46MjBweCAwO2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0jbGV2ZXItcmVjb3JkIC50aXRsZSBzcGFue2N1cnNvcjpwb2ludGVyfSNsZXZlci1yZWNvcmQgLmxpc3R7bWluLWhlaWdodDo5MDBweDtwYWRkaW5nOjAgMzBweDtiYWNrZ3JvdW5kOiMxODFiMmF9I2xldmVyLXJlY29yZCAubGlzdC10aXRsZSwjbGV2ZXItcmVjb3JkIGxpe2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDo0MHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufSNsZXZlci1yZWNvcmQgLmxpc3QtdGl0bGUgc3BhbiwjbGV2ZXItcmVjb3JkIGxpIHNwYW57ZmxleDoxO3RleHQtYWxpZ246Y2VudGVyfSNsZXZlci1yZWNvcmQgbGl7Ym9yZGVyLXRvcDoxcHggc29saWQgIzIwMmE0YX0jbGV2ZXItcmVjb3JkIC5sb2FkbW9yZXt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjIwcHg7Y3Vyc29yOnBvaW50ZXJ9LmNvbnRlbnQtd3JhcFtkYXRhLXYtMzg1NjRhYjZde2JhY2tncm91bmQ6dXJsKC4uL2ltZy9iZ19sb2dpbi4zY2QxYTFjNy5wbmcpIGNlbnRlciBib3R0b20gMzE2cHggcmVwZWF0LXgsLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMyMTI2M2YsIzI2MmE0Mil9LmFjY291bnRbZGF0YS12LTM4NTY0YWI2XXt3aWR0aDoxMjAwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nLXRvcDo5M3B4O292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0Ojg4MHB4fS5tYWluW2RhdGEtdi0zODU2NGFiNl17cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIDAgNjBweCAzMHB4fS5tYWluX3RpdGxlW2RhdGEtdi0zODU2NGFiNl17Zm9udC1zaXplOjM2cHg7Y29sb3I6I2M3Y2NlNn0ucmVnaXN0ZXItaXRlbVtkYXRhLXYtMzg1NjRhYjZde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjIycHg7Y29sb3I6IzYxNjg4YTtmb250LXNpemU6MTJweH0ucmVnaXN0ZXItaW5wdXRbZGF0YS12LTM4NTY0YWI2XXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjIwcHh9LmlucHV0LWJveFtkYXRhLXYtMzg1NjRhYjZde3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6NDBweH0uaW5wdXQtbWFpbltkYXRhLXYtMzg1NjRhYjZde3dpZHRoOjUyMHB4O21pbi1oZWlnaHQ6NDZweDtib3JkZXI6MXB4IHNvbGlkICM0ZTViODU7cGFkZGluZzowIDIwcHg7Y29sb3I6I2M3Y2NlNjtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMxZTIyMzV9Lmljb25bZGF0YS12LTM4NTY0YWI2XXt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTI2ODhjO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5sb2dpbi1idG5bZGF0YS12LTM4NTY0YWI2XXt3aWR0aDo0MjBweDttYXJnaW4tdG9wOjQwcHg7YmFja2dyb3VuZDojNTY5N2Y0O2ZvbnQtc2l6ZToxNnB4O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7bGluZS1oZWlnaHQ6NDhweDtjdXJzb3I6cG9pbnRlcn0ubm9hY2NvdW50W2RhdGEtdi0zODU2NGFiNl17Y29sb3I6I2ZmZn0ucmVnaXN0ZXItYnV0dG9uW2RhdGEtdi0zODU2NGFiNl17d2lkdGg6MjAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6NDZweDtiYWNrZ3JvdW5kLWNvbG9yOiM3YTk4Zjc7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0uaGF2ZS1hY2NvdW50W2RhdGEtdi0zODU2NGFiNl17Zm9udC1zaXplOjE0cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6MzBweH0ucmlnaHQtdGlwW2RhdGEtdi0zODU2NGFiNl17cG9zaXRpb246YWJzb2x1dGU7bGVmdDo2MjBweDt0b3A6NzBweDtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmctcmlnaHQ6NTBweDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYxNjg4YX0uY29kZS1ib3hbZGF0YS12LTM4NTY0YWI2XXt3aWR0aDo1MjBweDtib3JkZXI6MXB4IHNvbGlkICM0ZTViODU7YmFja2dyb3VuZDojMWUyMjM1fS5jb2RlLWJveCAuaW5wdXQtbWFpbltkYXRhLXYtMzg1NjRhYjZde3dpZHRoOjQxOXB4O2JvcmRlcjpub25lfS5jb2RlLWJveCBidXR0b25bZGF0YS12LTM4NTY0YWI2XXtib3JkZXI6bm9uZTtib3JkZXItbGVmdDoxcHggc29saWQgIzRlNWI4NTtsaW5lLWhlaWdodDo0NHB4O2NvbG9yOiM3YTk4Zjc7YmFja2dyb3VuZDojMWUyMjM1O3dpZHRoOjk0cHh9LnRhYnNbZGF0YS12LTI2MGRjMjk4XXtiYWNrZ3JvdW5kLWNvbG9yOiMyZjNkNDU7bGluZS1oZWlnaHQ6MzJweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMmYzZDQ1fS50cmFuc2J0bltkYXRhLXYtMjYwZGMyOThdOmhvdmVye2NvbG9yOiMwMGE0ZDg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwYTRkOH0udGFicyBzcGFuW2RhdGEtdi0yNjBkYzI5OF17ZGlzcGxheTpibG9jazt3aWR0aDo1MCU7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2JhYmJiYjtmb250LXNpemU6MTJweH0udGFicyAuYWN0aXZlW2RhdGEtdi0yNjBkYzI5OF17YmFja2dyb3VuZC1jb2xvcjojMWUyYjM0fS5jb250ZW50c1tkYXRhLXYtMjYwZGMyOThde3BhZGRpbmc6N3B4IDA7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tdG9wOjEwcHh9LmNvbnRlbnRzIC5pY29uZm9udFtkYXRhLXYtMjYwZGMyOThdLC5pY29uZm9udFtkYXRhLXYtMjYwZGMyOThde21hcmdpbi1yaWdodDoxMHB4O2NvbG9yOiMwMGE0ZDh9Lm10NVtkYXRhLXYtMjYwZGMyOThde21hcmdpbi10b3A6MTBweH0udHJhZGVbZGF0YS12LTI2MGRjMjk4XSAuZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1mb2N1cyAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjojMzA0MDQ5fS5sZWZ0c1tkYXRhLXYtMjYwZGMyOThde3dpZHRoOjgwcHg7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojMDAwfS5jdXJlbmN5LWxpc3QgLm1iMTBbZGF0YS12LTI2MGRjMjk4XXtmbGV4OjF9LmN1cmVuY3ktbGlzdCAubWIxMFtkYXRhLXYtMjYwZGMyOThdOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmN1cmVuY3ktbGlzdCBzcGFuW2RhdGEtdi0yNjBkYzI5OF17YmFja2dyb3VuZC1jb2xvcjojZmZmfS5jb250ZW50c1tkYXRhLXYtMjYwZGMyOThdIC5lbC1zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjojMWUyYjM0fS5jb250ZW50c1tkYXRhLXYtMjYwZGMyOThdIC5lbC1pbnB1dF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojMWUyYjM0O2JvcmRlcjoxcHggc29saWQgIzMwNDA0OTtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O2ZvbnQtc2l6ZToxMnB4fS5jb250ZW50c1tkYXRhLXYtMjYwZGMyOThdIC5lbC1pbnB1dF9faWNvbntsaW5lLWhlaWdodDozMHB4fS5jb250ZW50c1tkYXRhLXYtMjYwZGMyOThdIC5wb3BwZXJfX2Fycm93e2xlZnQ6NTAlIWltcG9ydGFudH0ucmlnaHRzW2RhdGEtdi0yNjBkYzI5OF17d2lkdGg6Y2FsYygxMDAlIC0gODBweCk7bGluZS1oZWlnaHQ6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MXB4IHNvbGlkICMzMDQwNDk7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojMWUyYjM0fS5yaWdodHMgLmljb25mb250W2RhdGEtdi0yNjBkYzI5OF17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5yaWdodHMgaW5wdXRbZGF0YS12LTI2MGRjMjk4XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3BhZGRpbmc6MCAxNXB4O2NvbG9yOiNmZmZ9LnNoYXJlTnVtYmVyW2RhdGEtdi0yNjBkYzI5OF17bWFyZ2luLXRvcDoxMHB4O3dpZHRoOjEwMCV9aW5wdXRbZGF0YS12LTI2MGRjMjk4XXtwYWRkaW5nOjAgMTVweDtjb2xvcjojZmZmfS5zaGFyZS1yaWdodHNbZGF0YS12LTI2MGRjMjk4XXtwb3NpdGlvbjpyZWxhdGl2ZX0uc2hhcmUtcmlnaHRzIGlucHV0W2RhdGEtdi0yNjBkYzI5OF17bGluZS1oZWlnaHQ6NDBweDtoZWlnaHQ6NDBweDt3aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjFweCBzb2xpZCAjMzA0MDQ5O3BhZGRpbmc6MCAxNXB4O2NvbG9yOiNjN2NjZTY7Zm9udC1zaXplOjEycHh9LnNoYXJlLXJpZ2h0cyBwW2RhdGEtdi0yNjBkYzI5OF17bGluZS1oZWlnaHQ6MzBweDtib3JkZXI6MXB4IHNvbGlkICMzMDQwNDk7d2lkdGg6Y2FsYygyNC43MyUgLSA4cHgpO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbi1yaWdodDoxMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWJvdHRvbToxMHB4fS5zaGFyZS1yaWdodHMgcFtkYXRhLXYtMjYwZGMyOThdOm50aC1jaGlsZCg0bil7bWFyZ2luLXJpZ2h0OjB9Lm11bHRzW2RhdGEtdi0yNjBkYzI5OF17Ym9yZGVyOm5vbmV9Lm11bHQtY29udGVudHMgcFtkYXRhLXYtMjYwZGMyOThde2xpbmUtaGVpZ2h0OjMwcHg7Ym9yZGVyOjFweCBzb2xpZCAjMzA0MDQ5O3dpZHRoOmNhbGMoMjQuNzMlIC0gOHB4KTt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItcmFkaXVzOjRweDttYXJnaW4tcmlnaHQ6MTJweDttYXJnaW4tYm90dG9tOjEwcHg7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5tdWx0LWNvbnRlbnRzIHBbZGF0YS12LTI2MGRjMjk4XTpudGgtY2hpbGQoNG4pe21hcmdpbi1yaWdodDowfS5zZWxsX2J0bltkYXRhLXYtMjYwZGMyOThde21hcmdpbjowIWltcG9ydGFudDtib3JkZXItcmFkaXVzOjEwcHghaW1wb3J0YW50fS5zZWxsX2J0bltkYXRhLXYtMjYwZGMyOThdOmZpcnN0LWNoaWxke21hcmdpbi1yaWdodDo1cHghaW1wb3J0YW50fS5zZWxsX2J0bltkYXRhLXYtMjYwZGMyOThdOmxhc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NXB4IWltcG9ydGFudH0uZ3JlZW5Db2xvcltkYXRhLXYtMjYwZGMyOThde2JvcmRlci1jb2xvcjojMDBjMDg3fS5yZWRDb2xvcltkYXRhLXYtMjYwZGMyOThde2JvcmRlci1jb2xvcjojZTMwNDZmfS50cmFuc2Zlci1jb250ZW50cyBoM1tkYXRhLXYtMjYwZGMyOThde3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiMwMGE0ZDg7Zm9udC1zaXplOjE4cHh9LnRyYW5zZmVyLWxpc3QgcFtkYXRhLXYtMjYwZGMyOThde2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6IzYwNjI2NjtsaW5lLWhlaWdodDo0MHB4fS50cmFkZVtkYXRhLXYtMjYwZGMyOThdIC5lbC1idXR0b24tLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojMDBhNGQ4O3dpZHRoOjE0MHB4O2JvcmRlcjpub25lfS50cmFkZVtkYXRhLXYtMjYwZGMyOThdIC5lbC1kaWFsb2ctLWNlbnRlciAuZWwtZGlhbG9nX19ib2R5e3BhZGRpbmc6MjVweCAyNXB4IDEwcHh9LmFjdGl2ZVtkYXRhLXYtMjYwZGMyOThde2JhY2tncm91bmQ6dXJsKC4uL2ltZy9zZWxlY3RzLmM5MmNjNmQ3LnBuZykgbm8tcmVwZWF0IDEwMCUgMTAwJTtib3JkZXI6MXB4IHNvbGlkICM1ZTk0ZWF9LnRyYWRlW2RhdGEtdi0yNjBkYzI5OF17bWFyZ2luLXRvcDoxMHB4O3BhZGRpbmc6MCAyMHB4fS50cmFkZS1jdXJyZW5jeVtkYXRhLXYtMjYwZGMyOThde2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4IDA7cGFkZGluZy1ib3R0b206MH0udHJhZGUtY3VycmVuY3kgbGlbZGF0YS12LTI2MGRjMjk4XXt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjE0cHh9LnRyYWRlLWJnW2RhdGEtdi0yNjBkYzI5OF17Y29sb3I6I2ZmZjtsaW5lLWhlaWdodDo0MHB4O3BhZGRpbmc6MDtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9LnRyYWRlLWJnIGltZ1tkYXRhLXYtMjYwZGMyOThde21hcmdpbi10b3A6MTVweDttYXJnaW4tcmlnaHQ6NXB4O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHh9LmJhbGNrIC50cmFkZS1iZ1tkYXRhLXYtMjYwZGMyOThdLC5iYWxjayAudHJhZGUtY3VycmVuY3lbZGF0YS12LTI2MGRjMjk4XXtiYWNrZ3JvdW5kLWNvbG9yOiMxZTJiMzR9LmJhbGNrIC5jdXJlbmN5LWxpc3Qgc3BhbltkYXRhLXYtMjYwZGMyOThdLC5iYWxjayAubXVsdC1jb250ZW50cyBwW2RhdGEtdi0yNjBkYzI5OF0sLmJhbGNrIC5zaGFyZS1yaWdodHMgaW5wdXRbZGF0YS12LTI2MGRjMjk4XSwuYmFsY2sgLnNoYXJlLXJpZ2h0cyBwW2RhdGEtdi0yNjBkYzI5OF17YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhO2NvbG9yOiNmZmZ9LmJhbGFuY2VbZGF0YS12LTI2MGRjMjk4XXt3aWR0aDoxMDAlfS5iYWxhbmNlIHVsW2RhdGEtdi0yNjBkYzI5OF17bWFyZ2luLXRvcDoyMHB4fS5pbnN1cmFuY1tkYXRhLXYtMjYwZGMyOThde3dpZHRoOjUwJX0uaW5zdXJhbmMtbGlzdCBzcGFuW2RhdGEtdi0yNjBkYzI5OF17ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo1cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiM5OTl9Lmluc3VyYW5jLWxpc3Qgc3BhbltkYXRhLXYtMjYwZGMyOThdOmZpcnN0LWNoaWxke21hcmdpbi1yaWdodDoxNXB4fS5pbnN1cmFuYy1saXN0IC5hY3RpdmVbZGF0YS12LTI2MGRjMjk4XXtjb2xvcjojMDBhNGQ4O2JvcmRlcjoxcHggc29saWQgIzAwYTRkODtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5sb3NzLW1hZGFsLWNvbnRlbnRzIHNwYW5bZGF0YS12LTI2MGRjMjk4XXtkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi10b3A6NXB4fS5mbGV4W2RhdGEtdi0yNjBkYzI5OF17ZGlzcGxheTpmbGV4Oy13ZWJraXQtZGlzcGxheTpmbGV4Oy1tb3otZGlzcGxheTpmbGV4Oy1tcy1kaXNwbGF5OmZsZXg7LW8tZGlzcGxheTpmbGV4fS5zZWxsX2J0bltkYXRhLXYtMjYwZGMyOThde2xpbmUtaGVpZ2h0OjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjQwcHg7Y29sb3I6I2ZmZjttYXJnaW46MTBweCAxNXB4O2N1cnNvcjpwb2ludGVyO3dpZHRoOmNhbGMoMTAwJSAtIDIwcHgpO2JvcmRlci1yYWRpdXM6NDBweH0uZ3JlZW5CZ1tkYXRhLXYtMjYwZGMyOThde2JhY2tncm91bmQtY29sb3I6IzM1YjY1YSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiMzNWI2NWEhaW1wb3J0YW50fS5yZWRCZ1tkYXRhLXYtMjYwZGMyOThde2JhY2tncm91bmQtY29sb3I6I2ZmNDk0YSFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOiNmZjQ5NGEhaW1wb3J0YW50fS53aGl0ZUJnIC5jdXJlbmN5LWxpc3Qgc3BhbltkYXRhLXYtMjYwZGMyOThdLC53aGl0ZUJnIC5tdWx0LWNvbnRlbnQgcFtkYXRhLXYtMjYwZGMyOThdLC53aGl0ZUJnIC5zaGFyZS1yaWdodHMgcFtkYXRhLXYtMjYwZGMyOThde2NvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZTllOWU5fS53aGl0ZUJnIC5jdXJlbmN5LWxpc3Qgc3BhbltkYXRhLXYtMjYwZGMyOThde2NvbG9yOiNmZmZ9LmN1cmVuY3ktbGlzdCBzcGFuW2RhdGEtdi0yNjBkYzI5OF17ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwcHg7bGluZS1oZWlnaHQ6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MXB4IHNvbGlkICMzMDQwNDk7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luLXJpZ2h0OjEycHg7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtmb250LXNpemU6MTJweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtjb2xvcjojZmZmfS5tYjEwW2RhdGEtdi0yNjBkYzI5OF17bWFyZ2luLWJvdHRvbToxMHB4fS5hY3RpdmVbZGF0YS12LTI2MGRjMjk4XXtiYWNrZ3JvdW5kLXNpemU6MzVweCAzMHB4O2JvcmRlcjoxcHggc29saWQgIzY5NTMwZCFpbXBvcnRhbnQ7YmFja2dyb3VuZDpub25lfS50YWItaGVhZGVyW2RhdGEtdi0xYzk3ZjZkY117cGFkZGluZzo1cHggMH0uZ3JlZW5Db2xvcltkYXRhLXYtMWM5N2Y2ZGNde2NvbG9yOmdyZWVufS50YWItaGVhZGVyIHBbZGF0YS12LTFjOTdmNmRjXXttYXJnaW4tcmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcn0udGFiLWhlYWRlciBwW2RhdGEtdi0xYzk3ZjZkY106aG92ZXJ7Y29sb3I6IzAwYTRkODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMDBhNGQ4fS50YWItaGVhZGVyW2RhdGEtdi0xYzk3ZjZkY117Y29sb3I6I2ZmZn0udGFiLWhlYWRlciAuYWN0aXZlW2RhdGEtdi0xYzk3ZjZkY117Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwYTRkOH0uZmxleFtkYXRhLXYtMWM5N2Y2ZGNde2Rpc3BsYXk6ZmxleH0udG90YWwtcHJvW2RhdGEtdi0xYzk3ZjZkY117bWFyZ2luLWJvdHRvbToyMHB4O21hcmdpbi1sZWZ0OjMwcHh9LndyYXBbZGF0YS12LTFjOTdmNmRjXXt3aWR0aDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4fXVsIGxpW2RhdGEtdi0xYzk3ZjZkY117bGluZS1oZWlnaHQ6MzNweH11bCBsaSBkaXZbZGF0YS12LTFjOTdmNmRjXSx1bCBsaSBzcGFuW2RhdGEtdi0xYzk3ZjZkY117ZGlzcGxheTppbmxpbmUtYmxvY2t9dWwgbGkgZGl2IHNwYW5bZGF0YS12LTFjOTdmNmRjXXtib3JkZXItcmFkaXVzOjNweDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OjMzcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyOm5vbmU7bGluZS1oZWlnaHQ6MzNweDt0ZXh0LWFsaWduOmNlbnRlcn0ubGlzdF9oZWFkW2RhdGEtdi0xYzk3ZjZkY117Y29sb3I6I2JlY2JjNjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjMmYzZDQ1fS5yZWRbZGF0YS12LTFjOTdmNmRjXXtjb2xvcjojY2M0OTUxO2N1cnNvcjpwb2ludGVyfS5ncmVlbltkYXRhLXYtMWM5N2Y2ZGNde2NvbG9yOiMwZDg1NTF9LnN0b3AtYnRuW2RhdGEtdi0xYzk3ZjZkY117bWFyZ2luLXJpZ2h0OjEwcHh9Lm1vcmVzW2RhdGEtdi0xYzk3ZjZkY117Y29sb3I6Izk5OTtmb250LXNpemU6MTRweDttYXJnaW4tdG9wOjEwcHg7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1vcmVzIGltZ1tkYXRhLXYtMWM5N2Y2ZGNde3dpZHRoOjEyMHB4O2hlaWdodDoxMjBweDttYXJnaW46MzBweCBhdXRvIDB9Lm1vcmVzIHNwYW5bZGF0YS12LTFjOTdmNmRjXXtkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyfS53aWR0aDFbZGF0YS12LTFjOTdmNmRjXXt3aWR0aDo5JTt0ZXh0LWFsaWduOmNlbnRlcn0ud2lkdGgyW2RhdGEtdi0xYzk3ZjZkY117d2lkdGg6MTUlO3RleHQtYWxpZ246Y2VudGVyfS53aWR0aDNbZGF0YS12LTFjOTdmNmRjXXt3aWR0aDozMCU7dGV4dC1hbGlnbjpjZW50ZXJ9Lmxvc3MtbW9kYWxbZGF0YS12LTFjOTdmNmRjXXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNyk7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmNvbnRlbnRbZGF0YS12LTFjOTdmNmRjXXt3aWR0aDo1MDBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7bWFyZ2luOjAgYXV0bztib3JkZXItcmFkaXVzOjVweH0ubG9zcy1tb2RhbC1oZWFkZXJbZGF0YS12LTFjOTdmNmRjXXtsaW5lLWhlaWdodDo0MHB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5sb3NzLW1vZGFsLWhlYWRlciBwW2RhdGEtdi0xYzk3ZjZkY117cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MH0ubG9zcy1tYWRhbC1jb250ZW50W2RhdGEtdi0xYzk3ZjZkY117bWFyZ2luOjE1cHggMTVweCAwfS5sb3NzLW1hZGFsLWNvbnRlbnQgZGl2W2RhdGEtdi0xYzk3ZjZkY117bGluZS1oZWlnaHQ6NDBweDttYXJnaW4tYm90dG9tOjEwcHh9Lmxvc3MtbWFkYWwtY29udGVudCBkaXYgcFtkYXRhLXYtMWM5N2Y2ZGNde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjoxcHggc29saWQgI2QxZDNkZjtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubG9zcy1tYWRhbC1jb250ZW50IHAgc3BhbltkYXRhLXYtMWM5N2Y2ZGNde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjMwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0zcHg7Y3Vyc29yOnBvaW50ZXJ9Lmxvc3MtbWFkYWwtY29udGVudCBwIC5hZGRzW2RhdGEtdi0xYzk3ZjZkY117dG9wOi0xcHh9LndyYXBbZGF0YS12LTFjOTdmNmRjXSAuZWwtZGlhbG9nLS1jZW50ZXIgLmVsLWRpYWxvZ19fYm9keXtwYWRkaW5nOjI1cHggMjVweCAyMHB4fS53cmFwW2RhdGEtdi0xYzk3ZjZkY10gLmVsLWJ1dHRvbi0tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMwMGE0ZDg7d2lkdGg6MTQwcHg7Ym9yZGVyOm5vbmV9Lmxvc3MtbWFkYWwtY29udGVudCBpbnB1dFtkYXRhLXYtMWM5N2Y2ZGNde2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkMWQzZGY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZDFkM2RmO2xpbmUtaGVpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOi02cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Lm1vZGFsLXRleHRbZGF0YS12LTFjOTdmNmRjXXt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjQwcHh9Lm1vZGFsLWJ0bltkYXRhLXYtMWM5N2Y2ZGNde2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjVweDtmb250LXNpemU6MH0ubW9kYWwtYnRuIGJ1dHRvbltkYXRhLXYtMWM5N2Y2ZGNde3dpZHRoOjUwJTtsaW5lLWhlaWdodDo1MHB4O2JvcmRlcjpub25lO2Zsb2F0OmxlZnQ7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM5ZGI1Yzd9Lm1vZGFsLWJ0biBidXR0b25bZGF0YS12LTFjOTdmNmRjXTpsYXN0LWNoaWxke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjMmYzZDQ1O2JhY2tncm91bmQ6IzY4OWNmMX0udG90YWwtcHJvIGJ1dHRvbltkYXRhLXYtMWM5N2Y2ZGNde2JvcmRlci1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDBhNGQ4O2N1cnNvcjpwb2ludGVyO21pbi1oZWlnaHQ6MzNweDttaW4td2lkdGg6ODBweDtmb250LXNpemU6MTRweDtib3JkZXI6bm9uZTtwYWRkaW5nOjAgNXB4O2xpbmUtaGVpZ2h0OjMzcHg7dGV4dC1hbGlnbjpjZW50ZXJ9LnN0b3BNb2RhbFtkYXRhLXYtMWM5N2Y2ZGNde21hcmdpbjoyMHB4IDE1cHg7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy1ib3R0b206MjBweH0uc3RvcE1vZGFsIHNwYW5bZGF0YS12LTFjOTdmNmRjXXtwYWRkaW5nOjZweCAxNXB4O2JvcmRlci1yYWRpdXM6NHB4fS5zdG9wYWxsW2RhdGEtdi0xYzk3ZjZkY117Ym9yZGVyOjFweCBzb2xpZCAjMDBhNGQ4O2NvbG9yOiMwMGE0ZDg7bWFyZ2luLXJpZ2h0OjEwcHh9LmFsbHNbZGF0YS12LTFjOTdmNmRjXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzAwYTRkOH0uc3RvcGJ1eVtkYXRhLXYtMWM5N2Y2ZGNde2JvcmRlcjoxcHggc29saWQgIzBkODU1MTtjb2xvcjojMGQ4NTUxO21hcmdpbi1yaWdodDoxMHB4fS5idXlzW2RhdGEtdi0xYzk3ZjZkY117Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwZDg1NTF9LnN0b3BzZWxsW2RhdGEtdi0xYzk3ZjZkY117Ym9yZGVyOjFweCBzb2xpZCAjY2M0OTUxO2NvbG9yOiNjYzQ5NTF9LnNlbGxzW2RhdGEtdi0xYzk3ZjZkY117Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNjYzQ5NTF9LnN0b3AtbW9kYWwtYnRuc1tkYXRhLXYtMWM5N2Y2ZGNde3dpZHRoOjEwMCU7Zm9udC1zaXplOjB9LnN0b3AtbW9kYWwtYnRucyBidXR0b25bZGF0YS12LTFjOTdmNmRjXXt3aWR0aDo1MCU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQtY29sb3I6IzlkYjVjNztib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7Y29sb3I6I2ZmZn0uc3RvcC1tb2RhbC1idG5zIGJ1dHRvbltkYXRhLXYtMWM5N2Y2ZGNdOmxhc3QtY2hpbGR7YmFja2dyb3VuZC1jb2xvcjojNjg5Y2YxfS5tb3Jlc1tkYXRhLXYtMWM5N2Y2ZGNdIC5lbC1wYWdlciBsaXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5tb3Jlc1tkYXRhLXYtMWM5N2Y2ZGNdIC5idG4tbmV4dCwubW9yZXNbZGF0YS12LTFjOTdmNmRjXSAuYnRuLXByZXZ7ZGlzcGxheTpub25lfS50cmFuc2Zlci1jb250ZW50IGgzW2RhdGEtdi0xYzk3ZjZkY117dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAwYTRkODtmb250LXNpemU6MThweH0udGxzW2RhdGEtdi0xYzk3ZjZkY117dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udHJzW2RhdGEtdi0xYzk3ZjZkY117dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDoxMnB4fS5ob21lW2RhdGEtdi02ZWNjNzk2NF17bWFyZ2luLWJvdHRvbTozcHh9LmhvbWUgLm1haW4+ZGl2W2RhdGEtdi02ZWNjNzk2NF17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDozcHh9LmhvbWUgLm1haW4+ZGl2IC50di1ib3hbZGF0YS12LTZlY2M3OTY0XXt3aWR0aDpjYWxjKDEwMCUgLSA0MDZweCk7aGVpZ2h0OmF1dG87YmFja2dyb3VuZDojMTgxZDI1fS5ob21lIC5tYWluPmRpdiAuZXhjaGFuZ2UtYm94W2RhdGEtdi02ZWNjNzk2NF17d2lkdGg6NDAzcHg7aGVpZ2h0OjczNXB4O2JhY2tncm91bmQ6IzE4MWQyNX0uaG9tZSAubWFpbj5kaXYgLnRyYW4tYm94W2RhdGEtdi02ZWNjNzk2NF17d2lkdGg6MTAwJTtoZWlnaHQ6NjUwcHg7YmFja2dyb3VuZDojMTgxZDI1fS5ob21lIC5tYWluPmRpdiAudHJhZGUtYm94W2RhdGEtdi02ZWNjNzk2NF17d2lkdGg6NDg1cHg7aGVpZ2h0OjY1MHB4fWJvZHksaHRtbHttaW4taGVpZ2h0OjEwMCV9LmdyZWVuMXtjb2xvcjojMDM4YzBlfS53aGl0ZWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7YmFja2dyb3VuZDojZmZmIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkICNkY2RmZTYhaW1wb3J0YW50O2NvbG9yOiM2NjYhaW1wb3J0YW50fS5jb250ZW50LXdyYXB7YmFja2dyb3VuZDp1cmwoLi4vaW1nL2JnX2xvZ2luLjNjZDFhMWM3LnBuZykgY2VudGVyIGJvdHRvbSAzMTZweCByZXBlYXQteCwtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzE4MWQyNSwjMTgxZDI1KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOnRvcH0uZGF5IC5jb250ZW50LXdyYXB7YmFja2dyb3VuZDp1cmwoLi4vaW1nL2JnX2xvZ2luLjNjZDFhMWM3LnBuZykgY2VudGVyIGJvdHRvbSAzMTZweCByZXBlYXQteCwtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZmZmKX0uYWNjb3VudHt3aWR0aDoxMjAwcHg7bWFyZ2luOjAgYXV0bztwYWRkaW5nLXRvcDo0M3B4O21pbi1oZWlnaHQ6ODgwcHh9Lm1haW57cG9zaXRpb246cmVsYXRpdmV9Lm1haW5fdGl0bGV7Zm9udC1zaXplOjM2cHg7Y29sb3I6I2M3Y2NlNn0uZGF5IC5tYWluX3RpdGxle2NvbG9yOiM0ODRmNzN9LnJlZ2lzdGVyLWl0ZW17ZGlzcGxheTpibG9jaztoZWlnaHQ6MjJweDtjb2xvcjojNjE2ODhhO2ZvbnQtc2l6ZToxMnB4fS5yZWdpc3Rlci1pbnB1dHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjIwcHh9LmlucHV0LWJveHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOjQwcHh9LmlucHV0LW1haW57d2lkdGg6NTIwcHg7bWluLWhlaWdodDo0NnB4O2JvcmRlcjoxcHggc29saWQgIzRlNWI4NTtwYWRkaW5nOjAgMjBweDtjb2xvcjojYzdjY2U2O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQtY29sb3I6IzE4MWQyNX0uZGF5IC5pbnB1dC1tYWlue2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6Izk5OX0uaWNvbnt3aWR0aDo0OHB4O2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTI2ODhjO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS5sb2dpbi1idG57d2lkdGg6NDIwcHg7bWFyZ2luLXRvcDo0MHB4O2JhY2tncm91bmQ6IzU2OTdmNDtmb250LXNpemU6MTZweDtib3JkZXItcmFkaXVzOjRweDtjb2xvcjojZmZmO2xpbmUtaGVpZ2h0OjQ4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm5vYWNjb3VudHtjb2xvcjojZmZmfS5yZWdpc3Rlci1idXR0b257d2lkdGg6MjAwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6NDZweDtiYWNrZ3JvdW5kLWNvbG9yOiMwMGE0ZDg7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZX0uaGF2ZS1hY2NvdW50e2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjMwcHh9LnJpZ2h0LXRpcHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjYyMHB4O3RvcDo3MHB4O2xpbmUtaGVpZ2h0OjI0cHg7cGFkZGluZy1yaWdodDo1MHB4O21hcmdpbi10b3A6MTBweDtmb250LXNpemU6MTRweDtjb2xvcjojNjE2ODhhfS5Nb2R1bGVUaXRsZS13cmFwW2RhdGEtdi1iNDlkYzI4Ml17cGFkZGluZy10b3A6MzBweDtwYWRkaW5nLWJvdHRvbTozMHB4O3BhZGRpbmctbGVmdDo0N3B4O3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtZmFtaWx5OlBpbmdGYW5nIFNDO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMTIxNjFjfS5pbnB1dC13aGl0ZVtkYXRhLXYtYjQ5ZGMyODJdIC5lbC1pbnB1dF9faW5uZXJ7YmFja2dyb3VuZDppbmhlcml0IWltcG9ydGFudDtjb2xvcjojODg4YTg1IWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkICNkY2RmZTYhaW1wb3J0YW50fS5pbnB1dC13aGl0ZVtkYXRhLXYtYjQ5ZGMyODJdIC5lbC1pbnB1dF9faW5uZXI6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM0MDllZmYhaW1wb3J0YW50O291dGxpbmU6MH0uTW9kdWxlVGl0bGUtd3JhcFtkYXRhLXYtYjQ5ZGMyODJdOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7d2lkdGg6NHB4O2hlaWdodDoyM3B4O2JhY2tncm91bmQ6IzAwYTRkODtib3JkZXItcmFkaXVzOjJweDtsZWZ0OjI2cHg7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uU2VsbEluZm8td3JhcCAudGl0bGVbZGF0YS12LWI0OWRjMjgyXXt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTZweDtmb250LWZhbWlseTpQaW5nRmFuZyBTQztmb250LXdlaWdodDo0MDA7Y29sb3I6IzE2MTUxNX0uU2VsbEluZm8td3JhcCAucGxhbi1hbW91bnRbZGF0YS12LWI0OWRjMjgyXXt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDozMHB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OlBpbmdGYW5nIFNDO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNTdiYzdkfS5ob3Qtd3JhcFtkYXRhLXYtYjQ5ZGMyODJde3dpZHRoOjEyMDBweDttYXJnaW46MCBhdXRvO21hcmdpbi10b3A6MTdweH0ubW9yZS1idG5bZGF0YS12LWI0OWRjMjgyXXtib3JkZXI6MDtwYWRkaW5nOjEycHggNDRweDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpQaW5nRmFuZyBTQztmb250LXdlaWdodDo1MDA7Y29sb3I6IzE0MTQxNDtmb250LXdlaWdodDo3MDB9LkhvdFJlY29tbWVuZC13cmFwW2RhdGEtdi1iNDlkYzI4Ml17YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6OHB4O3BhZGRpbmctYm90dG9tOjM4cHh9LkhvdFJlY29tbWVuZC13cmFwIC5ib2R5W2RhdGEtdi1iNDlkYzI4Ml17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aWR0aDoxMDAlfS5Ib3RSZWNvbW1lbmQtd3JhcCAuYm9keSAuaW1nLXdyYXBbZGF0YS12LWI0OWRjMjgyXXtmbGV4OjE7cGFkZGluZy1sZWZ0OjI2cHh9LkhvdFJlY29tbWVuZC13cmFwIC5ib2R5IC5iYW5uZXItaW1nW2RhdGEtdi1iNDlkYzI4Ml17d2lkdGg6MTAwJX0uSG90UmVjb21tZW5kLXdyYXAgLmJvZHkgLmJvZHktcmlnaHRbZGF0YS12LWI0OWRjMjgyXXt3aWR0aDo1MDBweDtwYWRkaW5nLWxlZnQ6NjVweDtwYWRkaW5nLXJpZ2h0Ojg1cHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpjb250ZW50LWJveH0uSG90UmVjb21tZW5kLXdyYXAgLmJvZHkgLmJvZHktcmlnaHQgLnRpdGxlLXRleHRbZGF0YS12LWI0OWRjMjgyXXtmb250LXNpemU6MTRweDtmb250LWZhbWlseTpBZG9iZSBIZWl0aSBTdGQ7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMxMjE2MWM7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS5Ib3RSZWNvbW1lbmQtd3JhcCAuYm9keSAuYm9keS1yaWdodCAuY29udGVudC10ZXh0W2RhdGEtdi1iNDlkYzI4Ml17cGFkZGluZy10b3A6MzVweDtwYWRkaW5nLWJvdHRvbTo1MHB4O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlNpbUhlaTtmb250LXdlaWdodDo0MDA7Y29sb3I6IzEyMTYxYztsaW5lLWhlaWdodDoyNHB4O3RleHQtYWxpZ246bGVmdH0uSG90UmVjb21tZW5kLXdyYXAgLmJvZHkgLmJvZHktcmlnaHQgLm1vcmUtYnRuW2RhdGEtdi1iNDlkYzI4Ml17Ym9yZGVyOjA7cGFkZGluZzoxMnB4IDQ0cHg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6UGluZ0ZhbmcgU0M7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMxNDE0MTQ7Zm9udC13ZWlnaHQ6NzAwfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojNjA2NjdmIWltcG9ydGFudH06LW1vei1wbGFjZWhvbGRlciw6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6IzYwNjY3ZiFpbXBvcnRhbnR9Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojNjA2NjdmIWltcG9ydGFudH0jbGVnYWwtc2VsbGVye21hcmdpbjozMHB4IGF1dG8gMDt3aWR0aDoxMjAwcHg7bGluZS1oZWlnaHQ6MzBweH0jbGVnYWwtc2VsbGVyPi50b3B7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjE2cHggMzBweH0jbGVnYWwtc2VsbGVyPi50b3A+LnRvcC10e2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLXJpZ2h0OjMwcHg7bWFyZ2luLXJpZ2h0OjMwcHh9I2xlZ2FsLXNlbGxlcj4udG9wPi50b3AtdD4ubG9nb3ttYXJnaW4tcmlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O2xpbmUtaGVpZ2h0OjUwcHg7YmFja2dyb3VuZDojN2E5OGY3O3RleHQtYWxpZ246Y2VudGVyfSNsZWdhbC1zZWxsZXI+LnRvcD4udG9wLWI+ZGl2e3dpZHRoOjEwMHB4O3RleHQtYWxpZ246Y2VudGVyfSNsZWdhbC1zZWxsZXI+Lm1ke3BhZGRpbmc6MTZweCAzMHB4fSNsZWdhbC1zZWxsZXI+Lm1kPmRpdnttYXJnaW4tcmlnaHQ6NTBweH0jbGVnYWwtc2VsbGVyPi5tZD5kaXYgaW1ne3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOjNweH0jbGVnYWwtc2VsbGVyPi5saXN0e21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjE2cHggMzBweH0jbGVnYWwtc2VsbGVyPi5saXN0Pi50YWJ7bWFyZ2luOjE2cHggMH0jbGVnYWwtc2VsbGVyPi5saXN0Pi50YWIgc3BhbnttYXJnaW4tcmlnaHQ6MjBweDtjdXJzb3I6cG9pbnRlcn0jbGVnYWwtc2VsbGVyPi5saXN0Pi50YWI+Lm5vd3tjb2xvcjojN2E5OGY3O2ZvbnQtd2VpZ2h0OjYwMH0jbGVnYWwtc2VsbGVyPi5saXN0Pi51bC1oZWFke2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufSNsZWdhbC1zZWxsZXI+Lmxpc3Q+LnVsLWhlYWQ+ZGl2e2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcn0jbGVnYWwtc2VsbGVyPi5saXN0Pi51bC1oZWFkPmRpdjpudGgtY2hpbGQoMyl7ZmxleDoyfSNsZWdhbC1zZWxsZXI+Lmxpc3Q+LnVsLWhlYWQ+ZGl2OmZpcnN0LWNoaWxke3RleHQtYWxpZ246bGVmdH0jbGVnYWwtc2VsbGVyPi5saXN0Pi51bC1oZWFkPmRpdjpsYXN0LWNoaWxke3RleHQtYWxpZ246cmlnaHR9I2xlZ2FsLXNlbGxlcj4ubGlzdD51bCBsaXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoxNnB4IDB9I2xlZ2FsLXNlbGxlcj4ubGlzdD51bCBsaT5kaXZ7ZmxleDoxO3RleHQtYWxpZ246Y2VudGVyfSNsZWdhbC1zZWxsZXI+Lmxpc3Q+dWwgbGk+ZGl2Om50aC1jaGlsZCgzKXtmbGV4OjJ9I2xlZ2FsLXNlbGxlcj4ubGlzdD51bCBsaT5kaXY6Zmlyc3QtY2hpbGR7dGV4dC1hbGlnbjpsZWZ0fSNsZWdhbC1zZWxsZXI+Lmxpc3Q+dWwgbGk+ZGl2Omxhc3QtY2hpbGR7aGVpZ2h0OjMwcHh9I2xlZ2FsLXNlbGxlcj4ubGlzdD51bCBsaT5kaXY6bGFzdC1jaGlsZCBzcGFue2Zsb2F0OnJpZ2h0O2JhY2tncm91bmQ6IzdhOThmNztwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjJweDtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyfSNsZWdhbC1zZWxsZXI+Lmxpc3QgLnNlbGwtYm94Pi5idXktaXRlbSwjbGVnYWwtc2VsbGVyPi5saXN0Pi5idXktYm94Pi5zZWxsLWl0ZW17ZGlzcGxheTpub25lfSNsZWdhbC1zZWxsZXI+Lmxpc3QgLm1vcmV7cGFkZGluZzowIDIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC41KTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDt0b3A6MDtib3R0b206MDt6LWluZGV4OjEwMDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVufSNsZWdhbC1zZWxsZXI+LmJ1eS1zZWxsLWJveD4uY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjJweDt3aWR0aDo0NDBweDtwYWRkaW5nOjIwcHggMzBweCAyNnB4IDMwcHg7YmFja2dyb3VuZDojMTgxZDI1O2xpbmUtaGVpZ2h0OjMwcHh9I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94Pi5jb250ZW50IC5jbG9zZXtoZWlnaHQ6MjVweDtsaW5lLWhlaWdodDoyNXB4O2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1cHg7cmlnaHQ6MTBweH0jbGVnYWwtc2VsbGVyPi5idXktc2VsbC1ib3g+LmNvbnRlbnQ+ZGl2OmZpcnN0LWNoaWxke2ZvbnQtd2VpZ2h0OjYwMH0jbGVnYWwtc2VsbGVyPi5idXktc2VsbC1ib3g+LmNvbnRlbnQ+LmZsZXggc3BhbjpmaXJzdC1jaGlsZHt3aWR0aDo4MHB4fSNsZWdhbC1zZWxsZXI+LmJ1eS1zZWxsLWJveD4uY29udGVudD4udGFie21hcmdpbjo1cHggMCAyMHB4O2N1cnNvcjpwb2ludGVyfSNsZWdhbC1zZWxsZXI+LmJ1eS1zZWxsLWJveD4uY29udGVudD4udGFiIHNwYW57bWFyZ2luLXJpZ2h0OjIwcHh9I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94Pi5jb250ZW50Pi50YWI+LnNlbGVjdGVke2NvbG9yOiM2MzhiZDQ7cGFkZGluZzo1cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNjM4YmQ0fSNsZWdhbC1zZWxsZXI+LmJ1eS1zZWxsLWJveD4uY29udGVudD4uaW5we2Rpc3BsYXk6ZmxleDtib3JkZXItcmFkaXVzOjJweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtib3JkZXI6MXB4IHNvbGlkICM1NTU4Njk7cGFkZGluZzozcHggMTZweH0jbGVnYWwtc2VsbGVyPi5idXktc2VsbC1ib3g+LmNvbnRlbnQ+LmlucCBpbnB1dHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiNmZmZ9I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94Pi5jb250ZW50Pi5pbnAgc3BhbntwYWRkaW5nLWxlZnQ6MTBweDttYXJnaW4tbGVmdDoxMHB4fSNsZWdhbC1zZWxsZXI+LmJ1eS1zZWxsLWJveD4uY29udGVudD4uaW5wIC5hbGx7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTU4Njk7Y3Vyc29yOnBvaW50ZXJ9I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94Pi5jb250ZW50Pi50aXB7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMHB4IDE2cHg7Y29sb3I6IzdhOThmN30jbGVnYWwtc2VsbGVyPi5idXktc2VsbC1ib3g+LmNvbnRlbnQ+LmJ0bnN7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94Pi5jb250ZW50Pi5idG5zPmRpdnt3aWR0aDo0NiU7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyLXJhZGl1czoycHg7bGluZS1oZWlnaHQ6NDBweDtjdXJzb3I6cG9pbnRlcn0jbGVnYWwtc2VsbGVyPi5idXktc2VsbC1ib3g+LmNvbnRlbnQ+LmJ0bnM+LmNhbmNlbHtiYWNrZ3JvdW5kOiNjY2N9I2xlZ2FsLXNlbGxlcj4uYnV5LXNlbGwtYm94Pi5jb250ZW50Pi5idG5zPi5va3tiYWNrZ3JvdW5kOiM3YTk4Zjc7Y29sb3I6I2ZmZn0jbXlzaG9wc3t3aWR0aDoxMjAwcHg7bWFyZ2luOjMwcHggYXV0byAwfSNteXNob3BzPi50aXRsZXttYXJnaW4tYm90dG9tOjIwcHg7cGFkZGluZzowIDMwcHg7bGluZS1oZWlnaHQ6NTBweH0jbXlzaG9wcz4ubGlzdC1ib3h7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgMzBweH0jbXlzaG9wcz4ubGlzdC1ib3ggLmxpc3QtaGVhZGVyPmRpdiwjbXlzaG9wcz4ubGlzdC1ib3ggbGk+ZGl2e3dpZHRoOjE5LjklO2hlaWdodDozMHB4fSNteXNob3BzPi5saXN0LWJveCAubGlzdC1oZWFkZXI+ZGl2Omxhc3QtY2hpbGQsI215c2hvcHM+Lmxpc3QtYm94IGxpPmRpdjpsYXN0LWNoaWxke3RleHQtYWxpZ246cmlnaHR9I215c2hvcHM+Lmxpc3QtYm94IGxpe3BhZGRpbmc6MTRweCAwfSNteXNob3BzPi5saXN0LWJveCBsaT5kaXY6Zmlyc3QtY2hpbGQ+c3BhbjpmaXJzdC1jaGlsZHt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6IzdhOThmNztjb2xvcjojZmZmO21hcmdpbi1yaWdodDo1cHg7bGluZS1oZWlnaHQ6MzBweH0jbXlzaG9wcz4ubGlzdC1ib3ggbGk+ZGl2Omxhc3QtY2hpbGQgYXtmbG9hdDpyaWdodDtwYWRkaW5nOjAgMTRweDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kOiM3YTk4Zjc7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTRweH0jbXlzaG9wcz4ubGlzdC1ib3ggbGk6bnRoLWNoaWxkKG4rMil7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0jbGVnYWwtc2hvcC1kZXRhaWx7bWFyZ2luOjMwcHggYXV0byAwO3dpZHRoOjEyMDBweDtsaW5lLWhlaWdodDozMHB4fSNsZWdhbC1zaG9wLWRldGFpbD4udG9we2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzoxNnB4IDMwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi50b3A+LnRvcC10e2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLXJpZ2h0OjMwcHg7bWFyZ2luLXJpZ2h0OjMwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi50b3A+LnRvcC10Pi5sb2dve21hcmdpbi1yaWdodDoyMHB4O2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7bGluZS1oZWlnaHQ6NTBweDtiYWNrZ3JvdW5kOiM3YTk4Zjc7dGV4dC1hbGlnbjpjZW50ZXJ9I2xlZ2FsLXNob3AtZGV0YWlsPi50b3A+LnRvcC1iPmRpdnt3aWR0aDoxMDBweDt0ZXh0LWFsaWduOmNlbnRlcn0jbGVnYWwtc2hvcC1kZXRhaWw+LnRvcD4uc3VibWl0e2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9I2xlZ2FsLXNob3AtZGV0YWlsPi50b3A+LnN1Ym1pdD5kaXZ7Ym9yZGVyLXJhZGl1czoycHg7bWFyZ2luLWxlZnQ6MzBweDtjb2xvcjojZmZmO3BhZGRpbmc6MCAxNnB4O2ZvbnQtc2l6ZToxNHB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7YmFja2dyb3VuZDojN2E5OGY3O2N1cnNvcjpwb2ludGVyfSNsZWdhbC1zaG9wLWRldGFpbD4ubWR7cGFkZGluZzoxNnB4IDMwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5tZD5kaXZ7bWFyZ2luLXJpZ2h0OjUwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5tZD5kaXYgaW1ne3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7cG9zaXRpb246cmVsYXRpdmU7dG9wOjNweH0jbGVnYWwtc2hvcC1kZXRhaWw+Lmxpc3R7bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6NXB4IDMwcHggMTZweH0jbGVnYWwtc2hvcC1kZXRhaWw+Lmxpc3Q+LnRhYnttYXJnaW46MTZweCAwfSNsZWdhbC1zaG9wLWRldGFpbD4ubGlzdD4udGFiPi5mbGV4PmRpdjpmaXJzdC1jaGlsZHt3aWR0aDo4MHB4fSNsZWdhbC1zaG9wLWRldGFpbD4ubGlzdD4udGFiIHNwYW57bWFyZ2luLXJpZ2h0OjIwcHg7Y3Vyc29yOnBvaW50ZXJ9I2xlZ2FsLXNob3AtZGV0YWlsPi5saXN0Pi50YWIgLm5vd3tjb2xvcjojN2E5OGY3O2ZvbnQtd2VpZ2h0OjYwMH0jbGVnYWwtc2hvcC1kZXRhaWw+Lmxpc3Q+LnVsLWhlYWR7aGVpZ2h0OjUwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5saXN0Pi51bC1oZWFkPmRpdntmbG9hdDpsZWZ0fSNsZWdhbC1zaG9wLWRldGFpbD4ubGlzdD4udWwtaGVhZD5kaXY6bGFzdC1jaGlsZHtmbG9hdDpyaWdodH0jbGVnYWwtc2hvcC1kZXRhaWw+Lmxpc3Q+dWwgbGl7cGFkZGluZzoxNnB4IDA7aGVpZ2h0OjYycHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5saXN0PnVsIGxpPmRpdntmbG9hdDpsZWZ0fSNsZWdhbC1zaG9wLWRldGFpbD4ubGlzdD51bCBsaT5kaXY6bGFzdC1jaGlsZHtmbG9hdDpyaWdodDtoZWlnaHQ6MzBweH0jbGVnYWwtc2hvcC1kZXRhaWw+Lmxpc3Q+dWwgbGk+ZGl2Omxhc3QtY2hpbGQgc3BhbntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kOiM3YTk4Zjc7cGFkZGluZzowIDEycHg7Ym9yZGVyLXJhZGl1czoycHg7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDttYXJnaW4tcmlnaHQ6NXB4fSNsZWdhbC1zaG9wLWRldGFpbD4ubGlzdCAuc2VsbC1ib3g+LmJ1eS1pdGVtLCNsZWdhbC1zaG9wLWRldGFpbD4ubGlzdD4uYnV5LWJveD4uc2VsbC1pdGVte2Rpc3BsYXk6bm9uZX0jbGVnYWwtc2hvcC1kZXRhaWw+Lmxpc3QgLm1vcmV7cGFkZGluZzoyMHB4IDIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuOCl9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94Pi5jb250ZW50e21hcmdpbjoxMDBweCBhdXRvIDA7Ym9yZGVyLXJhZGl1czo0cHg7d2lkdGg6NDQwcHg7cGFkZGluZzoyMHB4IDMwcHggMjZweCAzMHB4O2JhY2tncm91bmQ6IzE4MWQyNTtsaW5lLWhlaWdodDozMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfSNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudCAuY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDtyaWdodDoxMHB4O2N1cnNvcjpwb2ludGVyfSNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudD4udGFie2Rpc3BsYXk6ZmxleH0jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LnRhYj5kaXZ7bWFyZ2luLXJpZ2h0OjUwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94Pi5jb250ZW50Pi50YWIgLm5vd3tmb250LXdlaWdodDo2MDA7cGFkZGluZy1ib3R0b206M3B4O2NvbG9yOiM3YTk4Zjc7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzdhOThmN30jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LmJ0bntiYWNrZ3JvdW5kOiM3YTk4Zjc7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjJweDt0ZXh0LWFsaWduOmNlbnRlcjtsaW5lLWhlaWdodDo0MHB4fSNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudD4uZmxleHttYXJnaW4tYm90dG9tOjIwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94Pi5jb250ZW50Pi5mbGV4IHNwYW57d2lkdGg6MTMwcHh9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94Pi5jb250ZW50Pi5mbGV4IGlucHV0LCNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudD4uZmxleCBzZWxlY3R7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjMWIyYTNlO3BhZGRpbmc6MCAxNnB4O2ZsZXg6MTtiYWNrZ3JvdW5kOiMxODFiMmE7Y29sb3I6I2ZmZn0jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LnRhYnttYXJnaW46MTBweCAwIDIwcHg7Y3Vyc29yOnBvaW50ZXJ9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94Pi5jb250ZW50Pi50YWIgc3BhbnttYXJnaW4tcmlnaHQ6MjBweH0jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LnRhYj4uc2VsZWN0ZWR7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiM3YTk4Zjd9I2xlZ2FsLXNob3AtZGV0YWlsPi5zdWJtaXQtYm94Pi5jb250ZW50Pi5pbnB7ZGlzcGxheTpmbGV4O2JvcmRlci1yYWRpdXM6MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JvcmRlcjoxcHggc29saWQgIzFiMmEzZTtwYWRkaW5nOjNweCAxNnB4fSNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudD4uaW5wIHNwYW57cGFkZGluZy1sZWZ0OjEwcHg7bWFyZ2luLWxlZnQ6MTBweH0jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LmlucCAuYWxse2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjMWIyYTNlO2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LnRpcHtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjEwcHggMTZweDtjb2xvcjojN2E5OGY3fSNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudD4uYnRuc3tqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LmJ0bnM+ZGl2e3dpZHRoOjQ2JTt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItcmFkaXVzOjJweDtsaW5lLWhlaWdodDo0MHB4O2N1cnNvcjpwb2ludGVyfSNsZWdhbC1zaG9wLWRldGFpbD4uc3VibWl0LWJveD4uY29udGVudD4uYnRucz4uY2FuY2Vse2JhY2tncm91bmQ6I2NjY30jbGVnYWwtc2hvcC1kZXRhaWw+LnN1Ym1pdC1ib3g+LmNvbnRlbnQ+LmJ0bnM+Lm9re2JhY2tncm91bmQ6IzdhOThmNztjb2xvcjojZmZmfSNsZWdhbC1yZWNvcmR7d2lkdGg6MTIwMHB4O21hcmdpbjozMHB4IGF1dG99I2xlZ2FsLXJlY29yZD4udGl0bGV7bWFyZ2luLWJvdHRvbTozMHB4O3BhZGRpbmc6MCAzMHB4O2xpbmUtaGVpZ2h0OjUwcHg7Zm9udC1zaXplOjIwcHh9I2xlZ2FsLXJlY29yZD4uZmlsdGVyLWJveHtsaW5lLWhlaWdodDozMHB4fSNsZWdhbC1yZWNvcmQ+LmZpbHRlci1ib3ggc3BhbnttYXJnaW4tbGVmdDoxNnB4O2N1cnNvcjpwb2ludGVyfSNsZWdhbC1yZWNvcmQ+LmZpbHRlci1ib3ggc3BhbjpudGgtY2hpbGQobisyKXtmb250LXdlaWdodDo2MDB9I2xlZ2FsLXJlY29yZD4uZmlsdGVyLWJveCAuc2VsZWN0e2NvbG9yOiM1NjNiZDF9I2xlZ2FsLXJlY29yZD51bHtwYWRkaW5nOjEwcHggMzBweH0jbGVnYWwtcmVjb3JkPnVsIGxpPmRpdntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsaW5lLWhlaWdodDozMHB4fSNsZWdhbC1yZWNvcmQ+Lm1vcmV7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4O2N1cnNvcjpwb2ludGVyfSNsZWdhbC1yZWNvcmQ+Lm5vbW9yZXtwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmxvZ193cmFwe292ZXJmbG93OmF1dG99aHRtbHt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MTAwJTtjb2xvcjojMDAwO2JhY2tncm91bmQtY29sb3I6IzAwMDtvdmVyZmxvdy15OnNjcm9sbDtvdmVyZmxvdy14OmhpZGRlbjstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlO2ZvbnQtZmFtaWx5OlBpbmdGYW5nU0MtUmVndWxhciwiXDVGQUVcOEY2Rlw5NkM1XDlFRDEiLHNhbnMtc2VyaWY7cGFkZGluZzowO21hcmdpbjowfWJvZHl7aGVpZ2h0OjEwMCV9aHRtbCAqe291dGxpbmU6MDstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3gtc2l6aW5nOmJvcmRlci1ib3h9YXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGJvZHksYnV0dG9uLGNvZGUsZGQsZGV0YWlscyxkaXYsZGwsZHQsZmllbGRzZXQsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGZvcm0saDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixpbnB1dCxsZWdlbmQsbGksbWVudSxuYXYsb2wscCxwcmUsc2VjdGlvbix0ZCx0ZXh0YXJlYSx0aCx1bHttYXJnaW46MDtwYWRkaW5nOjB9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2ZvbnQtc2l6ZToxMDAlfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfWZpZWxkc2V0LGltZ3tib3JkZXI6MH1hYmJyLGFjcm9ueW17Ym9yZGVyOjA7Zm9udC12YXJpYW50Om5vcm1hbH1kZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaH1hZGRyZXNzLGNhcHRpb24sY2l0ZSxjb2RlLGRmbixlbSx0aCx2YXJ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6NTAwfW9sLHVse2xpc3Qtc3R5bGU6bm9uZX1jYXB0aW9uLHRoe3RleHQtYWxpZ246bGVmdH1oMSxoMixoMyxoNCxoNSxoNntmb250LXNpemU6MTAwJTtmb250LXdlaWdodDo1MDB9cTphZnRlcixxOmJlZm9yZXtjb250ZW50OiIifXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LS41ZW19c3Vie2JvdHRvbTotLjI1ZW19YSxpbnN7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YXtjb2xvcjppbmhlcml0fSNhcHAsYm9keSxodG1se21pbi13aWR0aDoxMjAwcHg7aGVpZ2h0OjEwMCV9aW5wdXR7Ym9yZGVyOjA7b3V0bGluZTowO2JvcmRlci1yYWRpdXM6MnB4fWJ1dHRvbntib3JkZXI6MDtvdXRsaW5lOjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfWlucHV0W3R5cGU9bnVtYmVyXXstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkfS5jbGVhcjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7Y2xlYXI6Ym90aH0uY2xlYXJ7em9vbToxfS5oaWRle2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmZse2Zsb2F0OmxlZnR9LmZye2Zsb2F0OnJpZ2h0fS5mbGV4e2Rpc3BsYXk6ZmxleDstd2Via2l0LWRpc3BsYXk6ZmxleDstbW96LWRpc3BsYXk6ZmxleDstbXMtZGlzcGxheTpmbGV4Oy1vLWRpc3BsYXk6ZmxleH0uY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZmxleDF7ZmxleDoxfS5hbGNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9LmJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0udGx7dGV4dC1hbGlnbjpsZWZ0fS50Y3t0ZXh0LWFsaWduOmNlbnRlcn0udHJ7dGV4dC1hbGlnbjpyaWdodH0uaW5ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30udGhlbWVfY29sb3J7Y29sb3I6I2YxNmI3ZiFpbXBvcnRhbnR9LnNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6NnB4O2JhY2tncm91bmQtY29sb3I6IzAwMH0uc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMyZTMzM2N9LndoaXRle2NvbG9yOiNmZmZ9Lnc1MHt3aWR0aDo1MCV9LmZ0MTJ7Zm9udC1zaXplOjEycHh9LmZ0MTR7Zm9udC1zaXplOjE0cHh9LmZ0MTZ7Zm9udC1zaXplOjE2cHh9LmZ0MTh7Zm9udC1zaXplOjE4cHh9LmZ0MjB7Zm9udC1zaXplOjIwcHh9LmZ0MjR7Zm9udC1zaXplOjI0cHh9Lm1sM3ttYXJnaW4tbGVmdDozcHh9Lm1sNDB7bWFyZ2luLWxlZnQ6NDBweH0ubXQyMHttYXJnaW4tdG9wOjIwcHh9Lm10MzB7bWFyZ2luLXRvcDozMHB4fS5tdDQwe21hcmdpbi10b3A6NDBweH0ubXQ2MHttYXJnaW4tdG9wOjYwcHh9Lm10NTB7bWFyZ2luLXRvcDo1MHB4fS5tcjIwe21hcmdpbi1yaWdodDoyMHB4fS5tcjYwe21hcmdpbi1yaWdodDo2MHB4fS5tdDN7bWFyZ2luLXRvcDozcHh9Lm10MTB7bWFyZ2luLXRvcDoxMHB4fS5tdDE1e21hcmdpbi10b3A6MTVweH0ubWwxMHttYXJnaW4tbGVmdDoxMHB4fS5tbDI1e21hcmdpbi1sZWZ0OjI1cHh9Lm1iNTB7bWFyZ2luLWJvdHRvbTo1MHB4fS5tYjQwe21hcmdpbi1ib3R0b206NDBweH0ubWIzMHttYXJnaW4tYm90dG9tOjMwcHh9Lm1iMTV7bWFyZ2luLWJvdHRvbToxNXB4fS5tbDMwe21hcmdpbi1sZWZ0OjMwcHh9Lm1sMjB7bWFyZ2luLWxlZnQ6MjBweH0ucGR0YjV7cGFkZGluZy10b3A6NXB4O3BhZGRpbmctYm90dG9tOjVweH0ucGRscjIwe3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweH0ucGR0YjIwe3BhZGRpbmctYm90dG9tOjIwcHh9LnBkdDIwLC5wZHRiMjB7cGFkZGluZy10b3A6MjBweH0ucGRiMjB7cGFkZGluZy1ib3R0b206MjBweH0ucGI1MHtwYWRkaW5nLWJvdHRvbTo1MHB4fS53NXt3aWR0aDo1JX0udzZ7d2lkdGg6NiV9Lnc4e3dpZHRoOjglfS53MTB7d2lkdGg6MTAlfS53MTF7d2lkdGg6MTElfS53MTR7d2lkdGg6MTQlfS53MTV7d2lkdGg6MTUlfS53MTZ7d2lkdGg6MTYlfS53MjB7d2lkdGg6MjAlfS53MjV7d2lkdGg6MjUlfS53MzB7d2lkdGg6MzAlfS53MTJ7d2lkdGg6MTIlfS53MTh7d2lkdGg6MTglfS53OTB7d2lkdGg6OTAlfS53MTAwe3dpZHRoOjEwMCV9LmxvZHcyMHt3aWR0aDoyMHB4fS5ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZkNvbG9yMXtjb2xvcjojYzdjY2U2fS5mQ29sb3Iye2NvbG9yOiM2MzcwODV9LmZDb2xvcjN7Y29sb3I6IzYxNjg4YX0uZkNvbG9yNHtjb2xvcjojNGU1NDZmfS5iYXNlQ29sb3J7Y29sb3I6IzAwYTRkOH0uY2VpbENvbG9ye2NvbG9yOiMwMDk2ODh9LnJlZENvbG9ye2NvbG9yOiNjYzQ5NTF9LnJlZHtjb2xvcjojZmY0OTRhIWltcG9ydGFudH0uZ3JlZW57Y29sb3I6IzM1YjY1YSFpbXBvcnRhbnR9LmN1clBlcntjdXJzb3I6cG9pbnRlcn0uY29udGVudEJLe2JhY2tncm91bmQtY29sb3I6IzAwMH0udG9wc2hhZG93e2JveC1zaGFkb3c6MCAzcHggNnB4IHJnYmEoMCwwLDAsLjEpfS50dEJre2JhY2tncm91bmQtY29sb3I6IzFiMWUyZX0uYWN0aXZle2NvbG9yOiMwMGE0ZDh9LmJnLXBhcnR7YmFja2dyb3VuZC1jb2xvcjojMTgxYjJhfS5yYWRpdXM0e2JvcmRlci1yYWRpdXM6NHB4fS5iZGJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzMwM2I0Yn0uYmFzZUJ0bntiYWNrZ3JvdW5kLWNvbG9yOiM1Njk3ZjQ7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweH0ubWFpbiAuYmFzZUJ0bnt3aWR0aDo0MjhweH0uYmFzZXtjb2xvcjojMDBhNGQ4fS5tb3VzZURlZmF1bHR7Y3Vyc29yOnBvaW50ZXJ9LmJhc2Vib3JkZXJCdG4sLmJhc2VCdG57ZGlzcGxheTppbmxpbmUtYmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6NDhweDtmb250LXNpemU6MTZweDtjdXJzb3I6ZGVmYXVsdH06cm9vdHstLXN3aXBlci10aGVtZS1jb2xvcjojZmY0OTRhfS5iYWNrLW5hdntoZWlnaHQ6NzJweDtiYWNrZ3JvdW5kLWNvbG9yOiMxODFiMmE7bGluZS1oZWlnaHQ6NzJweDtib3JkZXItcmFkaXVzOjNweH0ubmF2LWFmdGVye2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwcHg7YmFja2dyb3VuZC1jb2xvcjojMjYyYTQyfS5hY2NvdW50LWNvbnRlbnR7d2lkdGg6MTAwJTttaW4taGVpZ2h0Ojc1MHB4O2JhY2tncm91bmQtY29sb3I6IzE4MWIyYX0ucG9zaXRpb25Se3Bvc2l0aW9uOnJlbGF0aXZlfS5wYWdlQmFja3tiYWNrZ3JvdW5kLWNvbG9yOiMyNjJhNDJ9LmJiX3NoYWRvd3tib3gtc2hhZG93OjAgNXB4IDVweCAjMWIxZTJlfS5lbC1idXR0b24tLWRvd25sb2FkLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1kb3dubG9hZDphY3RpdmUsLmVsLWJ1dHRvbi0tZG93bmxvYWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tZG93bmxvYWQ6aG92ZXJ7YmFja2dyb3VuZDojMDBhNGQ4IWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwYTRkOCFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmVsLWJ1dHRvbi0tZG93bmxvYWR7Y29sb3I6I2ZmZiFpbXBvcnRhbnQ7YmFja2dyb3VuZC1jb2xvcjojMDBhNGQ4IWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwYTRkOCFpbXBvcnRhbnR9LmVsLWJ1dHRvbi0tZGVmYXVsdDpob3Zlcntjb2xvcjojMDBhNGQ4IWltcG9ydGFudDtib3JkZXItY29sb3I6IzAwYTRkOCFpbXBvcnRhbnR9LmVsLWJ1dHRvbi0tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiMwMGE0ZDghaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDBhNGQ4IWltcG9ydGFudH0uZWwtYnV0dG9uLS1wcmltYXJ5OmhvdmVye2NvbG9yOiNmZmYhaW1wb3J0YW50fS5lbC1idXR0b246YWN0aXZle2NvbG9yOiMwMGE0ZDghaW1wb3J0YW50O2JvcmRlci1jb2xvcjojMDBhNGQ4IWltcG9ydGFudH0="}},"time_used":485,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":485,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T10:53:08.995Z","timestamp":1785149588995,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET / HTTP/1.1\r\nHost: global-cryptocurrencies.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\nUpgrade-Insecure-Requests: 1\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/2 302 \r\nserver: nginx\r\ncontent-type: text/html; charset=UTF-8\r\nlocation: https://global-cryptocurrencies.com/app\r\ncache-control: no-cache, private\r\ndate: Mon, 27 Jul 2026 10:53:09 GMT\r\nset-cookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9; expires=Mon, 27-Jul-2026 12:53:09 GMT; Max-Age=7200; path=/; httponly\r\nstrict-transport-security: max-age=31536000\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"302","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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/html","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-08-07T09:07:10.188554Z","times_seen":17758850,"resource_available":true,"data":null}},"time_used":807,"timings":{"blocked":-1,"dns":47,"connect":165,"send":0,"wait":247,"receive":0,"ssl":348},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T10:53:09.862Z","timestamp":1785149589862,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app HTTP/1.1\r\nHost: global-cryptocurrencies.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\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nUpgrade-Insecure-Requests: 1\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/2 301 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:09 GMT\r\ncontent-type: text/html\r\ncontent-length: 162\r\nlocation: https://global-cryptocurrencies.com/app/\r\nstrict-transport-security: max-age=31536000\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"301","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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":0,"size_decoded":0,"mime_type":"text/html","magic":"","md5":"d41d8cd98f00b204e9800998ecf8427e","sha1":"da39a3ee5e6b4b0d3255bfef95601890afd80709","sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","sha512":"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e","ssdeep":"","tlshash":"","first_seen":"0001-01-01T00:00:00Z","last_seen":"2026-08-07T09:07:10.188554Z","times_seen":17758850,"resource_available":true,"data":null}},"time_used":165,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":165,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":true,"resource_type":"document","requested_by":"","date":"2026-07-27T10:53:10.085Z","timestamp":1785149590085,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/ HTTP/1.1\r\nHost: global-cryptocurrencies.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\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nUpgrade-Insecure-Requests: 1\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: text/html\r\nlast-modified: Wed, 22 Jul 2026 15:27:09 GMT\r\nvary: Accept-Encoding\r\netag: W/\"6a60e14d-880\"\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"jQuery","description":"jQuery is a JavaScript library which is a free, open-source software designed to simplify HTML DOM tree traversal and manipulation, as well as event handling, CSS animation, and Ajax.","website":"https://jquery.com","common_platform_enumeration":"cpe:2.3:a:jquery:jquery:*:*:*:*:*:*:*:*","icon":"jQuery.svg","categories":["JavaScript libraries"]},{"name":"Clipboard.js","description":"","website":"https://clipboardjs.com/","common_platform_enumeration":"","icon":"Clipboard.js.svg","categories":["JavaScript libraries"]},{"name":"Alibaba Cloud CDN","description":"Alibaba Cloud CDN is a global network of servers designed to deliver high-performance, low-latency content to users around the world. It is a cloud-based service provided by Alibaba Cloud, a subsidiary of the Alibaba Group, that enables businesses to accelerate the delivery of their web content, including images, videos, and static files, to end-users.","website":"https://www.alibabacloud.com/product/content-delivery-network","common_platform_enumeration":"","icon":"Alibaba Cloud.svg","categories":["CDN"]},{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":2176,"size_decoded":1163,"mime_type":"text/html","magic":"HTML document, ASCII text, with very long lines (924)","md5":"d05cce86e8805c974bdb1650a4840a9f","sha1":"cb1e5a96298724863609ecffeac3738911fb111e","sha256":"05fa8dc8f0cd231a7e1c624684f871ee87e5afcbb1fba0accabca7e83ab1ced3","sha512":"c3b1f3b770b16148e5fe03e92166084ab414d07c39d4b06c081904fe1673c6a31b2f5fa6f30aadbeb4a29becfb1aa4b23f56642e67964364b7fc1a35e73a0744","ssdeep":"","tlshash":"0c412359ad08d1ac59307e6add35f21e80db6e5f6c20f8a070fc062c4fa9bcc0656d52","first_seen":"2026-07-27T08:49:19.832144Z","last_seen":"2026-07-27T10:54:16.515781Z","times_seen":3,"resource_available":false,"data":"PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj48bGluayByZWw9Imljb24iIGhyZWY9ImZhdmljb24uaWNvIj48dGl0bGU+R2xvYmFsQ3J5cHRvY3VycmVuY2llczwvdGl0bGU+CjxzY3JpcHQgc3JjPSJqcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJjbGlwYm9hcmQubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibGF5ZXIvbGF5ZXIuanMiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzdGF0aWMvdHJhZGV2aWV3L2RhdGFmZWVkcy91ZGYvZGlzdC9idW5kbGUuanMiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzdGF0aWMvdHJhZGV2aWV3L2NoYXJ0aW5nX2xpYnJhcnkvY2hhcnRpbmdfbGlicmFyeS5taW4uanMiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzdGF0aWMvdHJhZGV2aWV3L2RhdGFmZWVkcy91ZGYvZGlzdC9wb2x5ZmlsbHMuanMiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvL2F0LmFsaWNkbi5jb20vdC9mb250XzIzMDI1MDZfdzA1ejNlbXVucC5qcyI+PC9zY3JpcHQ+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2F0LmFsaWNkbi5jb20vdC9mb250XzIzMDI1MDZfdzA1ejNlbXVucC5jc3MiPjxzY3JpcHQ+d2luZG93LmNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgfQogICAgICAgIC8vIHdpbmRvdy5jb25zb2xlLmxvZz0oKT0+e30KICAgICAgICBsZXQgcGxhdF9mb3JtX2N1cnJlbmN5ID0gJ0VNRScsCiAgICAgICAgICAgIHNob3dEb3dubG9hZCA9IGZhbHNlLAogICAgICAgICAgICBzaG93Q3VzdG9tZXIgPSBmYWxzZSwKICAgICAgICAgICAgc2hvd0ludml0ZSA9IHRydWUsCiAgICAgICAgICAgIHNob3dNb2JpbGVSZWdpc3RlciA9IGZhbHNlLAogICAgICAgICAgICBzaG93VmVyaWZ5Q29kZSA9IHRydWUsCiAgICAgICAgICAgIHNob3dQb3N0VmVyaWZ5ID0gdHJ1ZSwKICAgICAgICAgICAgZGVmYXVsdEludml0ZSA9ICdoa3JnJywKICAgICAgICAgICAgZGVmYXVsdENvZGUgPSAnOTE4OCcsCiAgICAgICAgICAgIGllb1N0YXJ0ID0gIjIwMjEtMDgtMTYiLAogICAgICAgICAgICBpZW9FbmQgPSAiMjAyMS0xMS0xNiIsCiAgICAgICAgICAgIGllb1N0YXJ0UHJpY2UgPSAiMTIgVVNEVCIsCiAgICAgICAgICAgIHNob3dJRU8gPSB0cnVlOzwvc2NyaXB0PjxsaW5rIGhyZWY9ImNzcy9jaHVuay0yNzVhYmJjNy5kY2Q5YzEyMi5jc3MiIHJlbD0icHJlZmV0Y2giPjxsaW5rIGhyZWY9ImpzL2NodW5rLTI3NWFiYmM3LmZkYzUxZGM2LmpzIiByZWw9InByZWZldGNoIj48bGluayBocmVmPSJjc3MvYXBwLjIyMWE4ZWExLmNzcyIgcmVsPSJwcmVsb2FkIiBhcz0ic3R5bGUiPjxsaW5rIGhyZWY9ImNzcy9jaHVuay12ZW5kb3JzLjAyYzdjMDM5LmNzcyIgcmVsPSJwcmVsb2FkIiBhcz0ic3R5bGUiPjxsaW5rIGhyZWY9ImpzL2FwcC5lZDdiMGEwMy5qcz92PTIiIHJlbD0icHJlbG9hZCIgYXM9InNjcmlwdCI+PGxpbmsgaHJlZj0ianMvY2h1bmstdmVuZG9ycy5mNDAwNTI3Zi5qcyIgcmVsPSJwcmVsb2FkIiBhcz0ic2NyaXB0Ij48bGluayBocmVmPSJjc3MvY2h1bmstdmVuZG9ycy4wMmM3YzAzOS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+PGxpbmsgaHJlZj0iY3NzL2FwcC4yMjFhOGVhMS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+PC9oZWFkPjxib2R5IGNsYXNzPSJzY3JvbGwiPjxub3NjcmlwdD48c3Ryb25nPldlJ3JlIHNvcnJ5IGJ1dCBmcm9udHdlYiBkb2Vzbid0IHdvcmsgcHJvcGVybHkgd2l0aG91dCBKYXZhU2NyaXB0IGVuYWJsZWQuIFBsZWFzZSBlbmFibGUgaXQgdG8gY29udGludWUuPC9zdHJvbmc+PC9ub3NjcmlwdD48ZGl2IGlkPSJhcHAiPjwvZGl2PjxzY3JpcHQgc3JjPSJqcy9jaHVuay12ZW5kb3JzLmY0MDA1MjdmLmpzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ianMvYXBwLmVkN2IwYTAzLmpzP3Y9MiI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Imh0dHBzOi8vcGx1Z2luLWNvZGUuc2FsZXNtYXJ0bHkuY29tL2pzL3Byb2plY3RfNDMxMzUwXzQ0MzkxMV8xNzU1Nzc2NDk3LmpzIj48L3NjcmlwdD48L2JvZHk+PC9odG1sPg=="}},"time_used":165,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":165,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/clipboard.min.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.539Z","timestamp":1785149590539,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/clipboard.min.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:52 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9864-2b10\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":11024,"size_decoded":3807,"mime_type":"application/javascript","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (10808)","md5":"1e3e33c5ac117cd77c61dd7f3c8e8a69","sha1":"1f8030e484c4630bdd20017c8a646e138aa24980","sha256":"03a7ffe45e4bea53a73bb08b4ffe77f612aef32fdc0bb44d73f0e94195ce20e2","sha512":"79ca0f59bf25ebceecf25d6d2318c8998392405eb83aab615b1a381a6c7c687214ad995fe43b6e1921dce509ad6454d5a9d707a963bb5b4b7ed27bc3eb9cfed6","ssdeep":"192:80i1RWTek1XVTkAkI/qHnHZ4Ly98Dom53C5GU7oKZoQhoslw/3JAQZu5CpVHa4L1:NivWTeBI/vCc3kHiQ7l83JJu54z9f","tlshash":"d532a64cb28071b196db60ae802f424fb270942570ae90d4b63ae8f16d7ceed5567f3c","first_seen":"2023-04-05T13:46:29Z","last_seen":"2026-07-29T21:55:32.198434Z","times_seen":141,"resource_available":true,"data":"LyohCiAqIGNsaXBib2FyZC5qcyB2MS43LjEKICogaHR0cHM6Ly96ZW5vcm9jaGEuZ2l0aHViLmlvL2NsaXBib2FyZC5qcwogKgogKiBMaWNlbnNlZCBNSVQgwqkgWmVubyBSb2NoYQogKi8KIWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dCgpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXt2YXIgZTtlPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcyxlLkNsaXBib2FyZD10KCl9fShmdW5jdGlvbigpe3ZhciB0LGUsbjtyZXR1cm4gZnVuY3Rpb24gdChlLG4sbyl7ZnVuY3Rpb24gaShhLGMpe2lmKCFuW2FdKXtpZighZVthXSl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWMmJmwpcmV0dXJuIGwoYSwhMCk7aWYocilyZXR1cm4gcihhLCEwKTt2YXIgcz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIithKyInIik7dGhyb3cgcy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixzfXZhciB1PW5bYV09e2V4cG9ydHM6e319O2VbYV1bMF0uY2FsbCh1LmV4cG9ydHMsZnVuY3Rpb24odCl7dmFyIG49ZVthXVsxXVt0XTtyZXR1cm4gaShufHx0KX0sdSx1LmV4cG9ydHMsdCxlLG4sbyl9cmV0dXJuIG5bYV0uZXhwb3J0c31mb3IodmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsYT0wO2E8by5sZW5ndGg7YSsrKWkob1thXSk7cmV0dXJuIGl9KHsxOltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gbyh0LGUpe2Zvcig7dCYmdC5ub2RlVHlwZSE9PWk7KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5tYXRjaGVzJiZ0Lm1hdGNoZXMoZSkpcmV0dXJuIHQ7dD10LnBhcmVudE5vZGV9fXZhciBpPTk7aWYoInVuZGVpbmVkIiE9dHlwZW9mIEVsZW1lbnQmJiFFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzKXt2YXIgcj1FbGVtZW50LnByb3RvdHlwZTtyLm1hdGNoZXM9ci5tYXRjaGVzU2VsZWN0b3J8fHIubW96TWF0Y2hlc1NlbGVjdG9yfHxyLm1zTWF0Y2hlc1NlbGVjdG9yfHxyLm9NYXRjaGVzU2VsZWN0b3J8fHIud2Via2l0TWF0Y2hlc1NlbGVjdG9yfWUuZXhwb3J0cz1vfSx7fV0sMjpbZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIG8odCxlLG4sbyxyKXt2YXIgYT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKG4sYSxyKSx7ZGVzdHJveTpmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGEscil9fX1mdW5jdGlvbiBpKHQsZSxuLG8pe3JldHVybiBmdW5jdGlvbihuKXtuLmRlbGVnYXRlVGFyZ2V0PXIobi50YXJnZXQsZSksbi5kZWxlZ2F0ZVRhcmdldCYmby5jYWxsKHQsbil9fXZhciByPXQoIi4vY2xvc2VzdCIpO2UuZXhwb3J0cz1vfSx7Ii4vY2xvc2VzdCI6MX1dLDM6W2Z1bmN0aW9uKHQsZSxuKXtuLm5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmMT09PXQubm9kZVR5cGV9LG4ubm9kZUxpc3Q9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpO3JldHVybiB2b2lkIDAhPT10JiYoIltvYmplY3QgTm9kZUxpc3RdIj09PWV8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1lKSYmImxlbmd0aCJpbiB0JiYoMD09PXQubGVuZ3RofHxuLm5vZGUodFswXSkpfSxuLnN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBTdHJpbmd9LG4uZm49ZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX19LHt9XSw0OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gbyh0LGUsbil7aWYoIXQmJiFlJiYhbil0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnRzIik7aWYoIWMuc3RyaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgU3RyaW5nIik7aWYoIWMuZm4obikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhpcmQgYXJndW1lbnQgbXVzdCBiZSBhIEZ1bmN0aW9uIik7aWYoYy5ub2RlKHQpKXJldHVybiBpKHQsZSxuKTtpZihjLm5vZGVMaXN0KHQpKXJldHVybiByKHQsZSxuKTtpZihjLnN0cmluZyh0KSlyZXR1cm4gYSh0LGUsbik7dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIFN0cmluZywgSFRNTEVsZW1lbnQsIEhUTUxDb2xsZWN0aW9uLCBvciBOb2RlTGlzdCIpfWZ1bmN0aW9uIGkodCxlLG4pe3JldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoZSxuKSx7ZGVzdHJveTpmdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfX19ZnVuY3Rpb24gcih0LGUsbil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodCxmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoZSxuKX0pLHtkZXN0cm95OmZ1bmN0aW9uKCl7QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0LGZ1bmN0aW9uKHQpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4pfSl9fX1mdW5jdGlvbiBhKHQsZSxuKXtyZXR1cm4gbChkb2N1bWVudC5ib2R5LHQsZSxuKX12YXIgYz10KCIuL2lzIiksbD10KCJkZWxlZ2F0ZSIpO2UuZXhwb3J0cz1vfSx7Ii4vaXMiOjMsZGVsZWdhdGU6Mn1dLDU6W2Z1bmN0aW9uKHQsZSxuKXtmdW5jdGlvbiBvKHQpe3ZhciBlO2lmKCJTRUxFQ1QiPT09dC5ub2RlTmFtZSl0LmZvY3VzKCksZT10LnZhbHVlO2Vsc2UgaWYoIklOUFVUIj09PXQubm9kZU5hbWV8fCJURVhUQVJFQSI9PT10Lm5vZGVOYW1lKXt2YXIgbj10Lmhhc0F0dHJpYnV0ZSgicmVhZG9ubHkiKTtufHx0LnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSx0LnNlbGVjdCgpLHQuc2V0U2VsZWN0aW9uUmFuZ2UoMCx0LnZhbHVlLmxlbmd0aCksbnx8dC5yZW1vdmVBdHRyaWJ1dGUoInJlYWRvbmx5IiksZT10LnZhbHVlfWVsc2V7dC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpJiZ0LmZvY3VzKCk7dmFyIG89d2luZG93LmdldFNlbGVjdGlvbigpLGk9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtpLnNlbGVjdE5vZGVDb250ZW50cyh0KSxvLnJlbW92ZUFsbFJhbmdlcygpLG8uYWRkUmFuZ2UoaSksZT1vLnRvU3RyaW5nKCl9cmV0dXJuIGV9ZS5leHBvcnRzPW99LHt9XSw2OltmdW5jdGlvbih0LGUsbil7ZnVuY3Rpb24gbygpe31vLnByb3RvdHlwZT17b246ZnVuY3Rpb24odCxlLG4pe3ZhciBvPXRoaXMuZXx8KHRoaXMuZT17fSk7cmV0dXJuKG9bdF18fChvW3RdPVtdKSkucHVzaCh7Zm46ZSxjdHg6bn0pLHRoaXN9LG9uY2U6ZnVuY3Rpb24odCxlLG4pe2Z1bmN0aW9uIG8oKXtpLm9mZih0LG8pLGUuYXBwbHkobixhcmd1bWVudHMpfXZhciBpPXRoaXM7cmV0dXJuIG8uXz1lLHRoaXMub24odCxvLG4pfSxlbWl0OmZ1bmN0aW9uKHQpe3ZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG49KCh0aGlzLmV8fCh0aGlzLmU9e30pKVt0XXx8W10pLnNsaWNlKCksbz0wLGk9bi5sZW5ndGg7Zm9yKG87bzxpO28rKyluW29dLmZuLmFwcGx5KG5bb10uY3R4LGUpO3JldHVybiB0aGlzfSxvZmY6ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLmV8fCh0aGlzLmU9e30pLG89blt0XSxpPVtdO2lmKG8mJmUpZm9yKHZhciByPTAsYT1vLmxlbmd0aDtyPGE7cisrKW9bcl0uZm4hPT1lJiZvW3JdLmZuLl8hPT1lJiZpLnB1c2gob1tyXSk7cmV0dXJuIGkubGVuZ3RoP25bdF09aTpkZWxldGUgblt0XSx0aGlzfX0sZS5leHBvcnRzPW99LHt9XSw3OltmdW5jdGlvbihlLG4sbyl7IWZ1bmN0aW9uKGkscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kKXQoWyJtb2R1bGUiLCJzZWxlY3QiXSxyKTtlbHNlIGlmKHZvaWQgMCE9PW8pcihuLGUoInNlbGVjdCIpKTtlbHNle3ZhciBhPXtleHBvcnRzOnt9fTtyKGEsaS5zZWxlY3QpLGkuY2xpcGJvYXJkQWN0aW9uPWEuZXhwb3J0c319KHRoaXMsZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19ZnVuY3Rpb24gbyh0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBpPW4oZSkscj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0sYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIG89ZVtuXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3JldHVybiBuJiZ0KGUucHJvdG90eXBlLG4pLG8mJnQoZSxvKSxlfX0oKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtvKHRoaXMsdCksdGhpcy5yZXNvbHZlT3B0aW9ucyhlKSx0aGlzLmluaXRTZWxlY3Rpb24oKX1yZXR1cm4gYSh0LFt7a2V5OiJyZXNvbHZlT3B0aW9ucyIsdmFsdWU6ZnVuY3Rpb24gdCgpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLmFjdGlvbj1lLmFjdGlvbix0aGlzLmNvbnRhaW5lcj1lLmNvbnRhaW5lcix0aGlzLmVtaXR0ZXI9ZS5lbWl0dGVyLHRoaXMudGFyZ2V0PWUudGFyZ2V0LHRoaXMudGV4dD1lLnRleHQsdGhpcy50cmlnZ2VyPWUudHJpZ2dlcix0aGlzLnNlbGVjdGVkVGV4dD0iIn19LHtrZXk6ImluaXRTZWxlY3Rpb24iLHZhbHVlOmZ1bmN0aW9uIHQoKXt0aGlzLnRleHQ/dGhpcy5zZWxlY3RGYWtlKCk6dGhpcy50YXJnZXQmJnRoaXMuc2VsZWN0VGFyZ2V0KCl9fSx7a2V5OiJzZWxlY3RGYWtlIix2YWx1ZTpmdW5jdGlvbiB0KCl7dmFyIGU9dGhpcyxuPSJydGwiPT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKTt0aGlzLnJlbW92ZUZha2UoKSx0aGlzLmZha2VIYW5kbGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZW1vdmVGYWtlKCl9LHRoaXMuZmFrZUhhbmRsZXI9dGhpcy5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuZmFrZUhhbmRsZXJDYWxsYmFjayl8fCEwLHRoaXMuZmFrZUVsZW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSx0aGlzLmZha2VFbGVtLnN0eWxlLmZvbnRTaXplPSIxMnB0Iix0aGlzLmZha2VFbGVtLnN0eWxlLmJvcmRlcj0iMCIsdGhpcy5mYWtlRWxlbS5zdHlsZS5wYWRkaW5nPSIwIix0aGlzLmZha2VFbGVtLnN0eWxlLm1hcmdpbj0iMCIsdGhpcy5mYWtlRWxlbS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZmFrZUVsZW0uc3R5bGVbbj8icmlnaHQiOiJsZWZ0Il09Ii05OTk5cHgiO3ZhciBvPXdpbmRvdy5wYWdlWU9mZnNldHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDt0aGlzLmZha2VFbGVtLnN0eWxlLnRvcD1vKyJweCIsdGhpcy5mYWtlRWxlbS5zZXRBdHRyaWJ1dGUoInJlYWRvbmx5IiwiIiksdGhpcy5mYWtlRWxlbS52YWx1ZT10aGlzLnRleHQsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5mYWtlRWxlbSksdGhpcy5zZWxlY3RlZFRleHQ9KDAsaS5kZWZhdWx0KSh0aGlzLmZha2VFbGVtKSx0aGlzLmNvcHlUZXh0KCl9fSx7a2V5OiJyZW1vdmVGYWtlIix2YWx1ZTpmdW5jdGlvbiB0KCl7dGhpcy5mYWtlSGFuZGxlciYmKHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmZha2VIYW5kbGVyQ2FsbGJhY2spLHRoaXMuZmFrZUhhbmRsZXI9bnVsbCx0aGlzLmZha2VIYW5kbGVyQ2FsbGJhY2s9bnVsbCksdGhpcy5mYWtlRWxlbSYmKHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuZmFrZUVsZW0pLHRoaXMuZmFrZUVsZW09bnVsbCl9fSx7a2V5OiJzZWxlY3RUYXJnZXQiLHZhbHVlOmZ1bmN0aW9uIHQoKXt0aGlzLnNlbGVjdGVkVGV4dD0oMCxpLmRlZmF1bHQpKHRoaXMudGFyZ2V0KSx0aGlzLmNvcHlUZXh0KCl9fSx7a2V5OiJjb3B5VGV4dCIsdmFsdWU6ZnVuY3Rpb24gdCgpe3ZhciBlPXZvaWQgMDt0cnl7ZT1kb2N1bWVudC5leGVjQ29tbWFuZCh0aGlzLmFjdGlvbil9Y2F0Y2godCl7ZT0hMX10aGlzLmhhbmRsZVJlc3VsdChlKX19LHtrZXk6ImhhbmRsZVJlc3VsdCIsdmFsdWU6ZnVuY3Rpb24gdChlKXt0aGlzLmVtaXR0ZXIuZW1pdChlPyJzdWNjZXNzIjoiZXJyb3IiLHthY3Rpb246dGhpcy5hY3Rpb24sdGV4dDp0aGlzLnNlbGVjdGVkVGV4dCx0cmlnZ2VyOnRoaXMudHJpZ2dlcixjbGVhclNlbGVjdGlvbjp0aGlzLmNsZWFyU2VsZWN0aW9uLmJpbmQodGhpcyl9KX19LHtrZXk6ImNsZWFyU2VsZWN0aW9uIix2YWx1ZTpmdW5jdGlvbiB0KCl7dGhpcy50cmlnZ2VyJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKSx3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbiB0KCl7dGhpcy5yZW1vdmVGYWtlKCl9fSx7a2V5OiJhY3Rpb24iLHNldDpmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjb3B5IjtpZih0aGlzLl9hY3Rpb249ZSwiY29weSIhPT10aGlzLl9hY3Rpb24mJiJjdXQiIT09dGhpcy5fYWN0aW9uKXRocm93IG5ldyBFcnJvcignSW52YWxpZCAiYWN0aW9uIiB2YWx1ZSwgdXNlIGVpdGhlciAiY29weSIgb3IgImN1dCInKX0sZ2V0OmZ1bmN0aW9uIHQoKXtyZXR1cm4gdGhpcy5fYWN0aW9ufX0se2tleToidGFyZ2V0IixzZXQ6ZnVuY3Rpb24gdChlKXtpZih2b2lkIDAhPT1lKXtpZighZXx8Im9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpyKGUpKXx8MSE9PWUubm9kZVR5cGUpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIHZhbHVlLCB1c2UgYSB2YWxpZCBFbGVtZW50Jyk7aWYoImNvcHkiPT09dGhpcy5hY3Rpb24mJmUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCAidGFyZ2V0IiBhdHRyaWJ1dGUuIFBsZWFzZSB1c2UgInJlYWRvbmx5IiBpbnN0ZWFkIG9mICJkaXNhYmxlZCIgYXR0cmlidXRlJyk7aWYoImN1dCI9PT10aGlzLmFjdGlvbiYmKGUuaGFzQXR0cmlidXRlKCJyZWFkb25seSIpfHxlLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSkpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gWW91IGNhblwndCBjdXQgdGV4dCBmcm9tIGVsZW1lbnRzIHdpdGggInJlYWRvbmx5IiBvciAiZGlzYWJsZWQiIGF0dHJpYnV0ZXMnKTt0aGlzLl90YXJnZXQ9ZX19LGdldDpmdW5jdGlvbiB0KCl7cmV0dXJuIHRoaXMuX3RhcmdldH19XSksdH0oKTt0LmV4cG9ydHM9Y30pfSx7c2VsZWN0OjV9XSw4OltmdW5jdGlvbihlLG4sbyl7IWZ1bmN0aW9uKGkscil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQuYW1kKXQoWyJtb2R1bGUiLCIuL2NsaXBib2FyZC1hY3Rpb24iLCJ0aW55LWVtaXR0ZXIiLCJnb29kLWxpc3RlbmVyIl0scik7ZWxzZSBpZih2b2lkIDAhPT1vKXIobixlKCIuL2NsaXBib2FyZC1hY3Rpb24iKSxlKCJ0aW55LWVtaXR0ZXIiKSxlKCJnb29kLWxpc3RlbmVyIikpO2Vsc2V7dmFyIGE9e2V4cG9ydHM6e319O3IoYSxpLmNsaXBib2FyZEFjdGlvbixpLnRpbnlFbWl0dGVyLGkuZ29vZExpc3RlbmVyKSxpLmNsaXBib2FyZD1hLmV4cG9ydHN9fSh0aGlzLGZ1bmN0aW9uKHQsZSxuLG8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fX1mdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIWV8fCJvYmplY3QiIT10eXBlb2YgZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIGModCxlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbj0iZGF0YS1jbGlwYm9hcmQtIit0O2lmKGUuaGFzQXR0cmlidXRlKG4pKXJldHVybiBlLmdldEF0dHJpYnV0ZShuKX12YXIgcz1pKGUpLHU9aShuKSxmPWkobyksZD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0saD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIG89ZVtuXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbyYmKG8ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8ua2V5LG8pfX1yZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3JldHVybiBuJiZ0KGUucHJvdG90eXBlLG4pLG8mJnQoZSxvKSxlfX0oKSxwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxuKXtyKHRoaXMsZSk7dmFyIG89YSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5jYWxsKHRoaXMpKTtyZXR1cm4gby5yZXNvbHZlT3B0aW9ucyhuKSxvLmxpc3RlbkNsaWNrKHQpLG99cmV0dXJuIGMoZSx0KSxoKGUsW3trZXk6InJlc29sdmVPcHRpb25zIix2YWx1ZTpmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMuYWN0aW9uPSJmdW5jdGlvbiI9PXR5cGVvZiBlLmFjdGlvbj9lLmFjdGlvbjp0aGlzLmRlZmF1bHRBY3Rpb24sdGhpcy50YXJnZXQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUudGFyZ2V0P2UudGFyZ2V0OnRoaXMuZGVmYXVsdFRhcmdldCx0aGlzLnRleHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUudGV4dD9lLnRleHQ6dGhpcy5kZWZhdWx0VGV4dCx0aGlzLmNvbnRhaW5lcj0ib2JqZWN0Ij09PWQoZS5jb250YWluZXIpP2UuY29udGFpbmVyOmRvY3VtZW50LmJvZHl9fSx7a2V5OiJsaXN0ZW5DbGljayIsdmFsdWU6ZnVuY3Rpb24gdChlKXt2YXIgbj10aGlzO3RoaXMubGlzdGVuZXI9KDAsZi5kZWZhdWx0KShlLCJjbGljayIsZnVuY3Rpb24odCl7cmV0dXJuIG4ub25DbGljayh0KX0pfX0se2tleToib25DbGljayIsdmFsdWU6ZnVuY3Rpb24gdChlKXt2YXIgbj1lLmRlbGVnYXRlVGFyZ2V0fHxlLmN1cnJlbnRUYXJnZXQ7dGhpcy5jbGlwYm9hcmRBY3Rpb24mJih0aGlzLmNsaXBib2FyZEFjdGlvbj1udWxsKSx0aGlzLmNsaXBib2FyZEFjdGlvbj1uZXcgcy5kZWZhdWx0KHthY3Rpb246dGhpcy5hY3Rpb24obiksdGFyZ2V0OnRoaXMudGFyZ2V0KG4pLHRleHQ6dGhpcy50ZXh0KG4pLGNvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOm4sZW1pdHRlcjp0aGlzfSl9fSx7a2V5OiJkZWZhdWx0QWN0aW9uIix2YWx1ZTpmdW5jdGlvbiB0KGUpe3JldHVybiBsKCJhY3Rpb24iLGUpfX0se2tleToiZGVmYXVsdFRhcmdldCIsdmFsdWU6ZnVuY3Rpb24gdChlKXt2YXIgbj1sKCJ0YXJnZXQiLGUpO2lmKG4pcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobil9fSx7a2V5OiJkZWZhdWx0VGV4dCIsdmFsdWU6ZnVuY3Rpb24gdChlKXtyZXR1cm4gbCgidGV4dCIsZSl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbiB0KCl7dGhpcy5saXN0ZW5lci5kZXN0cm95KCksdGhpcy5jbGlwYm9hcmRBY3Rpb24mJih0aGlzLmNsaXBib2FyZEFjdGlvbi5kZXN0cm95KCksdGhpcy5jbGlwYm9hcmRBY3Rpb249bnVsbCl9fV0sW3trZXk6ImlzU3VwcG9ydGVkIix2YWx1ZTpmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsiY29weSIsImN1dCJdLG49InN0cmluZyI9PXR5cGVvZiBlP1tlXTplLG89ISFkb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQ7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbih0KXtvPW8mJiEhZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkKHQpfSksb319XSksZX0odS5kZWZhdWx0KTt0LmV4cG9ydHM9cH0pfSx7Ii4vY2xpcGJvYXJkLWFjdGlvbiI6NywiZ29vZC1saXN0ZW5lciI6NCwidGlueS1lbWl0dGVyIjo2fV19LHt9LFs4XSkoOCl9KTsKCgovLyBXRUJQQUNLIEZPT1RFUiAvLwovLyAuL3NyYy91dGlsL2NsaXBib2FyZC5taW4uanMKCgovLyBXRUJQQUNLIEZPT1RFUiAvLwovLyAuL3NyYy9saWIvY2xpcGJvYXJkLm1pbi5qcw=="}},"time_used":334,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":334,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/favicon.ico","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"img","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:13.508Z","timestamp":1785149593508,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/favicon.ico HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:13 GMT\r\ncontent-type: image/x-icon\r\ncontent-length: 4286\r\nlast-modified: Mon, 01 Sep 2025 15:15:59 GMT\r\netag: \"68b5b8af-10be\"\r\nstrict-transport-security: max-age=31536000\r\naccept-ranges: bytes\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":4286,"size_decoded":4559,"mime_type":"image/x-icon","magic":"MS Windows icon resource - 1 icon, 32x32, 32 bits/pixel","md5":"4dcb24359adffe3746503b523a8d81df","sha1":"64e41f1079c6aa7e6b327a2ae499fd68f7b725c9","sha256":"4caaffa3b16a1c0e42b2602d9986470d8a4778dda99744a517ab3c7ae926b9f5","sha512":"9c0aee235a2d3897f2818b80bd8ea9d071f3865f7e73f27d0e18515208e061ca04aeff455cb799ce6015977d7168226512eb7f5805d07236bccdc7170731011c","ssdeep":"96:wgZXFbO8bj/QNooeLUqdy7DE7HTzg7Ahi:wiXFbnb7QNHVqZ7zBi","tlshash":"18913bc0ef5b654dc429ae7f580ad4e30c7c193261938ad7efa2ed521024e488c76648","first_seen":"2026-07-27T08:49:19.839646Z","last_seen":"2026-07-27T10:54:16.513284Z","times_seen":3,"resource_available":false,"data":"AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjXVsAYVtZAF1YVwBTUVEAU1FSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGBYALJIGgCmTCYAsEYhAJtIMwCgSDAARISBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSTUcA34IzAIxoTgB+ZFIAsGg4AMNgGgCvYjEAe19QAJNmTAAAAPAAeVtFAI5dQQAA//8AsUsdAJxNLQqsRiQme05QA61IIgDQOwMAgVhCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXlNIALBvMQCeazoAu2wlAPFtAACnaFID1l0OBKZlOwP6WwAAvV0hAJ9eOwCsWzEAhlc/AMlHCgCkTight0YXmrxDEt+3QxqApkwnErtEFgAAX7gAgUc0AG5hVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHhjSADmdxoAw3AqAGplVgO3aycxv2gedsFkIJ2/YByevF4hnbtcInu4XCU7j15MBrRbJgD+WQAAtFQhPL5MFsnBSBH/wEQQ/8BCEv24RBavqUoiKMZKDwBnXVwAiF5KAG9jWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzX4jAMR2KQC5bTEYxnAhjsRtH8jAah+It2UkT6pgJ0C0XiZMvF4hgcNeH8TCXR2dqlwsKrRZIVLDUhfexk4T/8RMEv/BSRL+wEcR/8BFEP+8RBTMskkfOdk1AAB5YlUAhFlBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2eTEAsHk2E8x2I6vOcx/HvW8pOf+oAAC9ZSAArWEnALheIwD/WQAAs2EoLMBgHLW/XRrewloW7MZXF/3BVBu7ulAcdb9OGF+4Sxl3uEoWr71JEu67RxPVp0wkO9ZAAgBXZmkAh2BTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPyHAADHfCRtz30d8bx4KUXbfBYAvnktAABB4wCObkoAl18+AH1hWAC7YCAAp2UyH8NhGcXHXhb9vlwfiqhaNRDMVBQAvlAZANtFAACKWUAHrlAfPLtJFLK6SBXOr0sgMLxIEgD/QAAALTQ3AAAAAAAAAAAAAAAAAAAAAAAAAAAApnlFC86AI7jTgBz6zH4ko857JHa+ei4p/44AACNeigCqaj4AjW5UAP//AADHYhsAt2ElTLxhIpuiYjcLmmI+CLhgKiWkXjIPxWEcAJNWOQC4TRcAo1ItErlLGZy7TBi6pFMqG6xRIgCoUiQAfmRVAAAAAAAAAAAAAAAAAAAAAAC7gDcU0oUjzNaFHv/VhBz/1oAc/899Isq7eTMjwXovAK11OAC0djIAmm03AJViPwCTY0IJlmNAF65oMBfDYiGhyF8b5cNgHLWxYSkx01sQAP9CAACwTyUAp1ItGbxPFsi5URiVilVCB6BULQCPVzYAAAAAAAAAAAAAAAAAAAAAAKJ6RAvQiSS32Yof/9eIHv/XhR7/1YEd/8p9JGbagx4ApnM+BbB2Nh5jYEkBBVFvAKtlNADAayIAvG0oV8xmG/7NYRn/y2EY/8NgH8WxYCwdtmEpAACO/wDcTwAAuFQabcFSEvS5Ux5e308JAFVXUABzXkoAAAAAAAAAAAAAAAAA/6ADAMiJKXLZjiD/2Ywg/9eKHv/Xhx7+yoAmYNWDIQDBeyo+ynskvr15LynCeywAr3k3ALtsJwCzayw1y2wc59FoGf/NZRj/yWMX/7xkH33/QQAAmGg9ALNWIgCxVyQqwlUV58NUF9SwWCshtlcnAKBfOwACAgIAAAAAAAAAAAC8hjIAs4M2HNKQJ77ZkCL/2Y4h/9GIKL66gDUcln89Bs6CIqfWgCD/zHwolXBoVwScckAAmGg7AG9gUwK7biZizG8c5c9qGf/NaBb/xmcazbBnKxSxZyoAqV4wAKlfMQzEWhfByFcU/75ZHn//AAAAk2FLAP95AAAAAAAAAAAAAP+fAADRih0Av4s4IM6PKmzOjypquIQ5INmNHADHiCRE14ce8teFIP/PgiDwwXsrRs1/JADEfikAnmo6AAA2/wC4bys4xWshkMpsGubJbBnutmspM7lrJgC2bDcAsm49B8RfGrjIWhT/xVsX3bBdKCi2XCQAn2IzAAAAAAAAAAAAqYZPAP/PAADJjjQA3pQdAN6THQC7hDgAiHBeBc+NJaTVjCDryYUojcSCJ4LIgCaPq3wvD658MQBtX0wAXF9VArRzNzi+ci83yHIfsMlxGvS2big5um4lAKhlMQCmZTMLxWQawMlgF//JXBX/vl4de/9SAACDYkEAWVVMAAAAAAAAAAAAi3NIAIdxTQC2iDwAooFCAMmOMADFjDIw1pIm4MeLLWn/qAAAAAD/Ac2HJZfHhiph7Y8PAEtbdwDwfxAAyXkrZdJ5IOvQeB/4yHUfx6ltLRatbiwAvWkiALprJTnJZxjpymQX/8phGP/GYBrKqWAtFaxhLABVXlwAAAAAAAAAAAAAAAAAAAAAAAEBAQB5c1UA/6YLANSYKXralyXNsoU5EsCNMyjTkimb2I8h7tKMI8m0gTUZvYUzALt4LwC6eC8kyHgnp854JWPAdy0uAAD/AJdpRACNaUoMwW8hqc1sGP/NaRf/zWcY/8plHPa2ZiZOwGUfALtxNwAAAAAAAAAAAAAAAAAAAAAAhXhUAK6JRACohk0K254pvdmcJ7KAdFQJ1ZUqoN+XJf/clCH/3JEg/s+KKnz//wAAlG9JAJxvPwajdTxAlHdJDh5UeAP/uQAAvHsuAIBlTgW3bidVyXAd1tBuGf/Oaxn/y2oa/8FoH4//dQAAj2ZDAAAAAAAAAAAAAAAAAAAAAACEemYAypw0AMibNifhpCfn2qArt6WGQRDbmyW74Joi/92XIf/elSH/2ZIl48OJLTXSkScA0IMnAMCBL0fOhCa+y4Ils8l/KYa7ezEjwHsuAN90EAC5ci88znMf3c9xGP/Pbxf/ymwbxaloMRCqaTEAXFdPAAAAAAAAAAAAAAAAAI2AWwDgqykA1aUuT+SrJvzfpijRtJM6FtmeKZTkoCL/4J0i/+CbIf/emCL/1ZImq62DPQ3BhjIAxYMvHdmJIdnZiB7/14Ue/9CBJKuncD4LqXQ8APF3AADEdyN5znYa/9BzGP/NcRnpv28lLcBwJAAAPnkAAAAAAAAAAAAAAAAAcGtaAP/HFQDYqTB65q8n/+WrKfDOoDQ4zJkxQuCjKPLfoiX/4KAk/9+cJP/dmiX5zZUuaf/EAAAAAP8A0IoqkNiMIP/aih//14cg8caCLUDMgikAw3kkALx3KEDOehz00Xka/892GvjAcCRNzHMcAHtfQgAAAAAAAAAAAAAAAACjjEQA//8AAN+vMJnpsyn/6LAp/9upL5SNfU4L1qEyjOGlKv3goyf/4aAm/+CfJf/anCffw5QyNdKVKwDEizA+2ZEh7tyNIf/bjCD/04sjYtiLIADCfCcAvnwpNtJ+HfDUfRz/1Hkb/8p3InLZeBcA7J9KAAAAAAAAAAAAAAAAAKiSSQCbik8F5LUxsOq4LP/rtSr/5bAq8tCmNWSdg0wP1qEyhN+lK+/jpSb/4qMl/+GgJP/YnCu8uJA7GWhmTwPPkCiS2ZEj/9iQJfTIiSxGzowpANSIJQDEgi1W1YMi+taBHv/Zfhz/1Hwchv+NCABFSk0AAAAAAAAAAAAAAAAAx65SAMOsWgnjuTW06rwr/+y7Kv/ruCn/5rMr7tSqMmubh0wLz6E4RdqlL7Hgpibv46Um/+OiJf/Zniqgw5I9EK6FOBjOkiqjzY8ufaZ9QAnAiTQAtIE4FNaKI7TciR//14Ug/9aCIf/NfiWH/6cAAGlkWgAAAAAAAAAAAAAAAAC6pVYAmpR4AdCvPy/fuDaN6Lkv1+u7K/3ruij/6rYt996vMZfEozwli39bCcqfMTvZoi172KArrdaeMre+kT5E2qAwAJmDRwl1dlYD7p8kALmIOBrSkieg2ZEh/9eMIPnRhyXJyoIpdbZ8MR/fixAAbmZWAAAAAAAAAAAAAAAAALulVgCjl2gA2LQ8AAAA/wDJqEAe2bY0a+K4McHquS737bkr/+W1Lt3brzCGzqc3OK6YTBSell0OjoFXCol7UAaljEQHm4hPCdykLACzjDse0JUrtdiXI+/QkSiyxoosWLWANBX/jQYAu34uAP+XAABsZVYAAAAAAAAAAAAAAAAACgoJAAAAcQCrlk4AnI1ZAM2rPgD/0CIAtaFIEdavN1DltTGp6Lor7um6Kf/mtSvx4LEw1eCyL7jeriqg3asqodypKbbXpS+5zJ01XayLQhLIkzFGxpIvP6SDPwrbkCAAuYEzAF5jXwCNc0YAnnAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlIdOAAAAhwC7pEQA6bwxAJiJVAfMsDc527Qxjue2MNvquCr/6LYn/+azJ//lsSf/5K4o/92pLtbQnzR1p4pED8uWMADPlSkArYU7AP+7EACIcksARUdHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY15JAIF1UADwxD8AsZZIANi3NAAAAP8Ay6c+ItuzM3Tkti3K5rUs7OCwL7vVqDJiwZw/HP/9AACxkEMAupU/AIN4VgCGelcAWVVKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMQA+P0AA0KpDAJF/UADRqjwA/+IJAMSkQxbOqjowtZ9ED/G4IwDGnj0Ah35YAKiPSwC4k0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGpOAJqMTQBpcFMAyKZAANKtOQC6oUEAAAD/AI17UABgXUoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFBPQBGRkEAS0tGAFFPSwBMS0cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//4P///8B//AAAP/gAAA/wAAAH8AAAB/AAAAPwAAAB8AAAAPAAAADwAAAAcAAAADAAAAAwAAAAMAAAABgAAAAeAAAAHgAAAB4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAB/AAAB/8AAB//wAD///gD///+D/8="}},"time_used":165,"timings":{"blocked":0,"dns":0,"connect":0,"send":0,"wait":165,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/jquery.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.534Z","timestamp":1785149590534,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/jquery.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\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/2 200 \r\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:52 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9864-14972\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":84338,"size_decoded":30138,"mime_type":"application/javascript","magic":"JavaScript source, ASCII text, with very long lines (32025)","md5":"3b01a0f793e8811780858bb6919154ee","sha1":"65b42f5118627b51ea31bf2df017d443315b30f7","sha256":"94fb7ad5f871626cf431588ccda297d2d6cb9aca466de0bd902d4d15a120d100","sha512":"ded23391216b2cb519656e436a4f6b09393a83dde75453a02c6cc221f92363ca1d256482458049b24ac193d971452655d2c8581c61ddf57b18f2e70473272b22","ssdeep":"1536:NP10iSi65U/dXXeyhzeBuG+HYE0mdkuJO1z6Oy4sh3J1A72BjmN7TwpDKba98HrJ:o+414Jiz6fh6lTqya98HrJ","tlshash":"4d83d6d9b2c67062977734b851bf510bb17a98dab40c8c60f0a4d8e47eb4a8d517bf2c","first_seen":"2023-03-07T14:46:31Z","last_seen":"2026-07-29T21:55:32.217172Z","times_seen":242,"resource_available":true,"data":"LyohIGpRdWVyeSB2eHh4IHwgKGMpIDIwMDUsIDIwMTUgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KIWZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiBiKGEpfTpiKGEpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ9Yy5zbGljZSxlPWMuY29uY2F0LGY9Yy5wdXNoLGc9Yy5pbmRleE9mLGg9e30saT1oLnRvU3RyaW5nLGo9aC5oYXNPd25Qcm9wZXJ0eSxrPXt9LGw9YS5kb2N1bWVudCxtPSIiLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IG4uZm4uaW5pdChhLGIpfSxvPS9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZyxwPS9eLW1zLS8scT0vLShbXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3RydWN0b3I6bixzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPzA+YT90aGlzW2ErdGhpcy5sZW5ndGhdOnRoaXNbYV06ZC5jYWxsKHRoaXMpfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSl7dmFyIGI9bi5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksYSk7cmV0dXJuIGIucHJldk9iamVjdD10aGlzLGIuY29udGV4dD10aGlzLmNvbnRleHQsYn0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmVhY2godGhpcyxhLGIpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Zixzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4uZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGcmJihqPWcsZz1hcmd1bWVudHNbaF18fHt9LGgrKyksIm9iamVjdCI9PXR5cGVvZiBnfHxuLmlzRnVuY3Rpb24oZyl8fChnPXt9KSxoPT09aSYmKGc9dGhpcyxoLS0pO2k+aDtoKyspaWYobnVsbCE9KGE9YXJndW1lbnRzW2hdKSlmb3IoYiBpbiBhKWM9Z1tiXSxkPWFbYl0sZyE9PWQmJihqJiZkJiYobi5pc1BsYWluT2JqZWN0KGQpfHwoZT1uLmlzQXJyYXkoZCkpKT8oZT8oZT0hMSxmPWMmJm4uaXNBcnJheShjKT9jOltdKTpmPWMmJm4uaXNQbGFpbk9iamVjdChjKT9jOnt9LGdbYl09bi5leHRlbmQoaixmLGQpKTp2b2lkIDAhPT1kJiYoZ1tiXT1kKSk7cmV0dXJuIGd9LG4uZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhtK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiJmdW5jdGlvbiI9PT1uLnR5cGUoYSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09PWEud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oYSl7cmV0dXJuIW4uaXNBcnJheShhKSYmYS1wYXJzZUZsb2F0KGEpKzE+PTB9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIm9iamVjdCIhPT1uLnR5cGUoYSl8fGEubm9kZVR5cGV8fG4uaXNXaW5kb3coYSk/ITE6YS5jb25zdHJ1Y3RvciYmIWouY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpPyExOiEwfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGEpe3ZhciBiO2ZvcihiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/YSsiIjoib2JqZWN0Ij09dHlwZW9mIGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBhP2hbaS5jYWxsKGEpXXx8Im9iamVjdCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYz1ldmFsO2E9bi50cmltKGEpLGEmJigxPT09YS5pbmRleE9mKCJ1c2Ugc3RyaWN0Iik/KGI9bC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxiLnRleHQ9YSxsLmhlYWQuYXBwZW5kQ2hpbGQoYikucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSk6YyhhKSl9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHAsIm1zLSIpLnJlcGxhY2UocSxyKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPTAsZj1hLmxlbmd0aCxnPXMoYSk7aWYoYyl7aWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGZvcihlIGluIGEpaWYoZD1iLmFwcGx5KGFbZV0sYyksZD09PSExKWJyZWFrfWVsc2UgaWYoZyl7Zm9yKDtmPmU7ZSsrKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5jYWxsKGFbZV0sZSxhW2VdKSxkPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6KGErIiIpLnJlcGxhY2UobywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocyhPYmplY3QoYSkpP24ubWVyZ2UoYywic3RyaW5nIj09dHlwZW9mIGE/W2FdOmEpOmYuY2FsbChjLGEpKSxjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbD09Yj8tMTpnLmNhbGwoYixhLGMpfSxtZXJnZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7Yz5kO2QrKylhW2UrK109YltkXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQsZT1bXSxmPTAsZz1hLmxlbmd0aCxoPSFjO2c+ZjtmKyspZD0hYihhW2ZdLGYpLGQhPT1oJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj0wLGc9YS5sZW5ndGgsaD1zKGEpLGk9W107aWYoaClmb3IoO2c+ZjtmKyspZD1iKGFbZl0sZixjKSxudWxsIT1kJiZpLnB1c2goZCk7ZWxzZSBmb3IoZiBpbiBhKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO3JldHVybiBlLmFwcGx5KFtdLGkpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGY7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBiJiYoYz1hW2JdLGI9YSxhPWMpLG4uaXNGdW5jdGlvbihhKT8oZT1kLmNhbGwoYXJndW1lbnRzLDIpLGY9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShifHx0aGlzLGUuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGYuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxuLmd1aWQrKyxmKTp2b2lkIDB9LG5vdzpEYXRlLm5vdyxzdXBwb3J0Omt9KSxuLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtoWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHMoYSl7dmFyIGI9Imxlbmd0aCJpbiBhJiZhLmxlbmd0aCxjPW4udHlwZShhKTtyZXR1cm4iZnVuY3Rpb24iPT09Y3x8bi5pc1dpbmRvdyhhKT8hMToxPT09YS5ub2RlVHlwZSYmYj8hMDoiYXJyYXkiPT09Y3x8MD09PWJ8fCJudW1iZXIiPT10eXBlb2YgYiYmYj4wJiZiLTEgaW4gYX12YXIgdD1mdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpLGosayxsLG0sbixvLHAscSxyLHMsdCx1PSJzaXp6bGUiKzEqbmV3IERhdGUsdj1hLmRvY3VtZW50LHc9MCx4PTAseT1oYSgpLHo9aGEoKSxBPWhhKCksQj1mdW5jdGlvbihhLGIpe3JldHVybiBhPT09YiYmKGw9ITApLDB9LEM9MTw8MzEsRD17fS5oYXNPd25Qcm9wZXJ0eSxFPVtdLEY9RS5wb3AsRz1FLnB1c2gsSD1FLnB1c2gsST1FLnNsaWNlLEo9ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9LEs9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixMPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixNPSIoPzpcXFxcLnxbXFx3LV18W15cXHgwMC1cXHhhMF0pKyIsTj1NLnJlcGxhY2UoInciLCJ3IyIpLE89IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitOKyIpKXwpIitMKyIqXFxdIixQPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTysiKSopfC4qKVxcKXwpIixRPW5ldyBSZWdFeHAoTCsiKyIsImciKSxSPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUz1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFQ9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxVPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFY9bmV3IFJlZ0V4cChQKSxXPW5ldyBSZWdFeHAoIl4iK04rIiQiKSxYPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrTyksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1ApLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTCsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTCsiKig/OihbKy1dfCkiK0wrIiooXFxkKyl8KSkiK0wrIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK0srIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitMKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0wrIiooKD86LVxcZCk/XFxkKikiK0wrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxaPS9eaFxkJC9pLCQ9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLF89L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxhYT0vWyt+XS8sYmE9Lyd8XFwvZyxjYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksZGE9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGVhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChmYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZ2EoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3LHg7aWYoKGI/Yi5vd25lckRvY3VtZW50fHxiOnYpIT09biYmbShiKSxiPWJ8fG4sZD1kfHxbXSxrPWIubm9kZVR5cGUsInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PWsmJjkhPT1rJiYxMSE9PWspcmV0dXJuIGQ7aWYoIWUmJnApe2lmKDExIT09ayYmKGY9Xy5leGVjKGEpKSlpZihqPWZbMV0pe2lmKDk9PT1rKXtpZihoPWIuZ2V0RWxlbWVudEJ5SWQoaiksIWh8fCFoLnBhcmVudE5vZGUpcmV0dXJuIGQ7aWYoaC5pZD09PWopcmV0dXJuIGQucHVzaChoKSxkfWVsc2UgaWYoYi5vd25lckRvY3VtZW50JiYoaD1iLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaikpJiZ0KGIsaCkmJmguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNle2lmKGZbMl0pcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChqPWZbM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaikpLGR9aWYoYy5xc2EmJighcXx8IXEudGVzdChhKSkpe2lmKHM9cj11LHc9Yix4PTEhPT1rJiZhLDE9PT1rJiYib2JqZWN0IiE9PWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7bz1nKGEpLChyPWIuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXIucmVwbGFjZShiYSwiXFwkJiIpOmIuc2V0QXR0cmlidXRlKCJpZCIscykscz0iW2lkPSciK3MrIiddICIsbD1vLmxlbmd0aDt3aGlsZShsLS0pb1tsXT1zK3JhKG9bbF0pO3c9YWEudGVzdChhKSYmcGEoYi5wYXJlbnROb2RlKXx8Yix4PW8uam9pbigiLCIpfWlmKHgpdHJ5e3JldHVybiBILmFwcGx5KGQsdy5xdWVyeVNlbGVjdG9yQWxsKHgpKSxkfWNhdGNoKHkpe31maW5hbGx5e3J8fGIucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGkoYS5yZXBsYWNlKFIsIiQxIiksYixkLGUpfWZ1bmN0aW9uIGhhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYysiICIpPmQuY2FjaGVMZW5ndGgmJmRlbGV0ZSBiW2Euc2hpZnQoKV0sYltjKyIgIl09ZX1yZXR1cm4gYn1mdW5jdGlvbiBpYShhKXtyZXR1cm4gYVt1XT0hMCxhfWZ1bmN0aW9uIGphKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24ga2EoYSxiKXt2YXIgYz1hLnNwbGl0KCJ8IiksZT1hLmxlbmd0aDt3aGlsZShlLS0pZC5hdHRySGFuZGxlW2NbZV1dPWJ9ZnVuY3Rpb24gbGEoYSxiKXt2YXIgYz1iJiZhLGQ9YyYmMT09PWEubm9kZVR5cGUmJjE9PT1iLm5vZGVUeXBlJiYofmIuc291cmNlSW5kZXh8fEMpLSh+YS5zb3VyY2VJbmRleHx8Qyk7aWYoZClyZXR1cm4gZDtpZihjKXdoaWxlKGM9Yy5uZXh0U2libGluZylpZihjPT09YilyZXR1cm4tMTtyZXR1cm4gYT8xOi0xfWZ1bmN0aW9uIG1hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWMmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBmdW5jdGlvbihiKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1jfHwiYnV0dG9uIj09PWMpJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBvYShhKXtyZXR1cm4gaWEoZnVuY3Rpb24oYil7cmV0dXJuIGI9K2IsaWEoZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBwYShhKXtyZXR1cm4gYSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZhfWM9Z2Euc3VwcG9ydD17fSxmPWdhLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj8iSFRNTCIhPT1iLm5vZGVOYW1lOiExfSxtPWdhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1nLmRvY3VtZW50RWxlbWVudCxlPWcuZGVmYXVsdFZpZXcsZSYmZSE9PWUudG9wJiYoZS5hZGRFdmVudExpc3RlbmVyP2UuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIixlYSwhMSk6ZS5hdHRhY2hFdmVudCYmZS5hdHRhY2hFdmVudCgib251bmxvYWQiLGVhKSkscD0hZihnKSxjLmF0dHJpYnV0ZXM9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2xhc3NOYW1lPSJpIiwhYS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksYy5nZXRFbGVtZW50c0J5VGFnTmFtZT1qYShmdW5jdGlvbihhKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChnLmNyZWF0ZUNvbW1lbnQoIiIpKSwhYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT0kLnRlc3QoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhZy5nZXRFbGVtZW50c0J5TmFtZXx8IWcuZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQmJnApe3ZhciBjPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGMmJmMucGFyZW50Tm9kZT9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuIHA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT0kLnRlc3QoZy5xdWVyeVNlbGVjdG9yQWxsKSkmJihqYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXGZdJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmcS5wdXNoKCJbKl4kXT0iK0wrIiooPzonJ3xcIlwiKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8cS5wdXNoKCJcXFsiK0wrIiooPzp2YWx1ZXwiK0srIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit1KyItXSIpLmxlbmd0aHx8cS5wdXNoKCJ+PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHEucHVzaCgiOmNoZWNrZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIit1KyIrKiIpLmxlbmd0aHx8cS5wdXNoKCIuIy4rWyt+XSIpfSksamEoZnVuY3Rpb24oYSl7dmFyIGI9Zy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2Iuc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksYS5hcHBlbmRDaGlsZChiKS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmcS5wdXNoKCJuYW1lIitMKyIqWypeJHwhfl0/PSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fHEucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxxLnB1c2goIiwuKjoiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9JC50ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2VsZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZqYShmdW5jdGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLCJkaXYiKSxzLmNhbGwoYSwiW3MhPScnXTp4Iiksci5wdXNoKCIhPSIsUCl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbigifCIpKSxyPXIubGVuZ3RoJiZuZXcgUmVnRXhwKHIuam9pbigifCIpKSxiPSQudGVzdChvLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx0PWJ8fCQudGVzdChvLmNvbnRhaW5zKT9mdW5jdGlvbihhLGIpe3ZhciBjPTk9PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRFbGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PT1kfHwhKCFkfHwxIT09ZC5ub2RlVHlwZXx8IShjLmNvbnRhaW5zP2MuY29udGFpbnMoZCk6YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkKSkpfTpmdW5jdGlvbihhLGIpe2lmKGIpd2hpbGUoYj1iLnBhcmVudE5vZGUpaWYoYj09PWEpcmV0dXJuITA7cmV0dXJuITF9LEI9Yj9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGQ9IWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIGQ/ZDooZD0oYS5vd25lckRvY3VtZW50fHxhKT09PShiLm93bmVyRG9jdW1lbnR8fGIpP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYik6MSwxJmR8fCFjLnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWQ/YT09PWd8fGEub3duZXJEb2N1bWVudD09PXYmJnQodixhKT8tMTpiPT09Z3x8Yi5vd25lckRvY3VtZW50PT09diYmdCh2LGIpPzE6az9KKGssYSktSihrLGIpOjA6NCZkPy0xOjEpfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBsPSEwLDA7dmFyIGMsZD0wLGU9YS5wYXJlbnROb2RlLGY9Yi5wYXJlbnROb2RlLGg9W2FdLGk9W2JdO2lmKCFlfHwhZilyZXR1cm4gYT09PWc/LTE6Yj09PWc/MTplPy0xOmY/MTprP0ooayxhKS1KKGssYik6MDtpZihlPT09ZilyZXR1cm4gbGEoYSxiKTtjPWE7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO2M9Yjt3aGlsZShjPWMucGFyZW50Tm9kZSlpLnVuc2hpZnQoYyk7d2hpbGUoaFtkXT09PWlbZF0pZCsrO3JldHVybiBkP2xhKGhbZF0saVtkXSk6aFtkXT09PXY/LTE6aVtkXT09PXY/MTowfSxnKTpufSxnYS5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGdhKGEsbnVsbCxudWxsLGIpfSxnYS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtpZigoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSksYj1iLnJlcGxhY2UoVSwiPSckMSddIiksISghYy5tYXRjaGVzU2VsZWN0b3J8fCFwfHxyJiZyLnRlc3QoYil8fHEmJnEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGdhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGdhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZ2EuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGdhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZ2EudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWdhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1nYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzppYSxtYXRjaDpYLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoY2EsZGEpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGNhLGRhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8Z2EuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZ2EuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFguQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVi50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShjYSxkYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9Z2EuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShRLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoO2lmKHEpe2lmKGYpe3doaWxlKHApe2w9Yjt3aGlsZShsPWxbcF0paWYoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKXJldHVybiExO289cD0ib25seSI9PT1hJiYhbyYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7az1xW3VdfHwocVt1XT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLG09alswXT09PXcmJmpbMl0sbD1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobD0rK24mJmwmJmxbcF18fChtPW49MCl8fG8ucG9wKCkpaWYoMT09PWwubm9kZVR5cGUmJisrbSYmbD09PWIpe2tbYV09W3csbixtXTticmVha319ZWxzZSBpZihzJiYoaj0oYlt1XXx8KGJbdV09e30pKVthXSkmJmpbMF09PT13KW09alsxXTtlbHNlIHdoaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKChoP2wubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PWwubm9kZVR5cGUpJiYrK20mJihzJiYoKGxbdV18fChsW3VdPXt9KSlbYV09W3csbV0pLGw9PT1iKSlicmVhaztyZXR1cm4gbS09ZSxtPT09ZHx8bSVkPT09MCYmbS9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIithKTtyZXR1cm4gZVt1XT9lKGIpOmUubGVuZ3RoPjE/KGM9W2EsYSwiIixiXSxkLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT9pYShmdW5jdGlvbihhLGMpe3ZhciBkLGY9ZShhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWQ9SihhLGZbZ10pLGFbZF09IShjW2RdPWZbZ10pfSk6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSwwLGMpfSk6ZX19LHBzZXVkb3M6e25vdDppYShmdW5jdGlvbihhKXt2YXIgYj1bXSxjPVtdLGQ9aChhLnJlcGxhY2UoUiwiJDEiKSk7cmV0dXJuIGRbdV0/aWEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczppYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGdhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGNhLGRhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzppYShmdW5jdGlvbihhKXtyZXR1cm4gVy50ZXN0KGF8fCIiKXx8Z2EuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrYSksYT1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7dmFyIGM7ZG8gaWYoYz1wP2IubGFuZzpiLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8Yi5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gYz1jLnRvTG93ZXJDYXNlKCksYz09PWF8fDA9PT1jLmluZGV4T2YoYSsiLSIpO3doaWxlKChiPWIucGFyZW50Tm9kZSkmJjE9PT1iLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oYil7dmFyIGM9YS5sb2NhdGlvbiYmYS5sb2NhdGlvbi5oYXNoO3JldHVybiBjJiZjLnNsaWNlKDEpPT09Yi5pZH0scm9vdDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW99LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09bi5hY3RpdmVFbGVtZW50JiYoIW4uaGFzRm9jdXN8fG4uaGFzRm9jdXMoKSkmJiEhKGEudHlwZXx8YS5ocmVmfHx+YS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiEhYS5jaGVja2VkfHwib3B0aW9uIj09PWImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihhKXtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpaWYoYS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWQucHNldWRvcy5lbXB0eShhKX0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybiBaLnRlc3QoYS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybiBZLnRlc3QoYS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWImJiJidXR0b24iPT09YS50eXBlfHwiYnV0dG9uIj09PWJ9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuImlucHV0Ij09PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PWIudG9Mb3dlckNhc2UoKSl9LGZpcnN0Om9hKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpvYShmdW5jdGlvbihhLGIpe3JldHVybltiLTFdfSksZXE6b2EoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswPmM/YytiOmNdfSksZXZlbjpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLG9kZDpvYShmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0xO2I+YztjKz0yKWEucHVzaChjKTtyZXR1cm4gYX0pLGx0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOy0tZD49MDspYS5wdXNoKGQpO3JldHVybiBhfSksZ3Q6b2EoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7KytkPGI7KWEucHVzaChkKTtyZXR1cm4gYX0pfX0sZC5wc2V1ZG9zLm50aD1kLnBzZXVkb3MuZXE7Zm9yKGIgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pZC5wc2V1ZG9zW2JdPW1hKGIpO2ZvcihiIGlue3N1Ym1pdDohMCxyZXNldDohMH0pZC5wc2V1ZG9zW2JdPW5hKGIpO2Z1bmN0aW9uIHFhKCl7fXFhLnByb3RvdHlwZT1kLmZpbHRlcnM9ZC5wc2V1ZG9zLGQuc2V0RmlsdGVycz1uZXcgcWEsZz1nYS50b2tlbml6ZT1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGgsaSxqLGs9elthKyIgIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXsoIWN8fChlPVMuZXhlYyhoKSkpJiYoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1ULmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFIsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1YW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/Z2EuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiByYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHNhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGo9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihpPWJbdV18fChiW3VdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBqWzJdPWhbMl07aWYoaVtkXT1qLGpbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiB0YShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB1YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWdhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB2YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoIWN8fGMoZixkLGUpKSYmKGcucHVzaChmKSxqJiZiLnB1c2goaCkpO3JldHVybiBnfWZ1bmN0aW9uIHdhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXdhKGQpKSxlJiYhZVt1XSYmKGU9d2EoZSxmKSksaWEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dWEoYnx8IioiLGgubm9kZVR5cGU/W2hdOmgsW10pLHE9IWF8fCFmJiZiP3A6dmEocCxtLGEsaCxpKSxyPWM/ZXx8KGY/YTpvfHxkKT9bXTpnOnE7aWYoYyYmYyhxLHIsaCxpKSxkKXtqPXZhKHIsbiksZChqLFtdLGgsaSksaz1qLmxlbmd0aDt3aGlsZShrLS0pKGw9altrXSkmJihyW25ba11dPSEocVtuW2tdXT1sKSl9aWYoZil7aWYoZXx8YSl7aWYoZSl7aj1bXSxrPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmai5wdXNoKHFba109bCk7ZShudWxsLHI9W10saixpKX1rPXIubGVuZ3RoO3doaWxlKGstLSkobD1yW2tdKSYmKGo9ZT9KKGYsbCk6bVtrXSk+LTEmJihmW2pdPSEoZ1tqXT1sKSl9fWVsc2Ugcj12YShyPT09Zz9yLnNwbGljZShvLHIubGVuZ3RoKTpyKSxlP2UobnVsbCxnLHIsaSk6SC5hcHBseShnLHIpfSl9ZnVuY3Rpb24geGEoYSl7Zm9yKHZhciBiLGMsZSxmPWEubGVuZ3RoLGc9ZC5yZWxhdGl2ZVthWzBdLnR5cGVdLGg9Z3x8ZC5yZWxhdGl2ZVsiICJdLGk9Zz8xOjAsaz1zYShmdW5jdGlvbihhKXtyZXR1cm4gYT09PWJ9LGgsITApLGw9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIEooYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3ZhciBlPSFnJiYoZHx8YyE9PWopfHwoKGI9Yykubm9kZVR5cGU/ayhhLGMsZCk6bChhLGMsZCkpO3JldHVybiBiPW51bGwsZX1dO2Y+aTtpKyspaWYoYz1kLnJlbGF0aXZlW2FbaV0udHlwZV0pbT1bc2EodGEobSksYyldO2Vsc2V7aWYoYz1kLmZpbHRlclthW2ldLnR5cGVdLmFwcGx5KG51bGwsYVtpXS5tYXRjaGVzKSxjW3VdKXtmb3IoZT0rK2k7Zj5lO2UrKylpZihkLnJlbGF0aXZlW2FbZV0udHlwZV0pYnJlYWs7cmV0dXJuIHdhKGk+MSYmdGEobSksaT4xJiZyYShhLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWFbaS0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKFIsIiQxIiksYyxlPmkmJnhhKGEuc2xpY2UoaSxlKSksZj5lJiZ4YShhPWEuc2xpY2UoZSkpLGY+ZSYmcmEoYSkpfW0ucHVzaChjKX1yZXR1cm4gdGEobSl9ZnVuY3Rpb24geWEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbSxvLHA9MCxxPSIwIixyPWYmJltdLHM9W10sdD1qLHU9Znx8ZSYmZC5maW5kLlRBRygiKiIsayksdj13Kz1udWxsPT10PzE6TWF0aC5yYW5kb20oKXx8LjEseD11Lmxlbmd0aDtmb3IoayYmKGo9ZyE9PW4mJmcpO3EhPT14JiZudWxsIT0obD11W3FdKTtxKyspe2lmKGUmJmwpe209MDt3aGlsZShvPWFbbSsrXSlpZihvKGwsZyxoKSl7aS5wdXNoKGwpO2JyZWFrfWsmJih3PXYpfWMmJigobD0hbyYmbCkmJnAtLSxmJiZyLnB1c2gobCkpfWlmKHArPXEsYyYmcSE9PXApe209MDt3aGlsZShvPWJbbSsrXSlvKHIscyxnLGgpO2lmKGYpe2lmKHA+MCl3aGlsZShxLS0pcltxXXx8c1txXXx8KHNbcV09Ri5jYWxsKGkpKTtzPXZhKHMpfUguYXBwbHkoaSxzKSxrJiYhZiYmcy5sZW5ndGg+MCYmcCtiLmxlbmd0aD4xJiZnYS51bmlxdWVTb3J0KGkpfXJldHVybiBrJiYodz12LGo9dCkscn07cmV0dXJuIGM/aWEoZik6Zn1yZXR1cm4gaD1nYS5jb21waWxlPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPVtdLGY9QVthKyIgIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9eGEoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHlhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1nYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPSJmdW5jdGlvbiI9PXR5cGVvZiBhJiZhLG89IWYmJmcoYT1uLnNlbGVjdG9yfHxhKTtpZihlPWV8fFtdLDE9PT1vLmxlbmd0aCl7aWYoaj1vWzBdPW9bMF0uc2xpY2UoMCksai5sZW5ndGg+MiYmIklEIj09PShrPWpbMF0pLnR5cGUmJmMuZ2V0QnlJZCYmOT09PWIubm9kZVR5cGUmJnAmJmQucmVsYXRpdmVbalsxXS50eXBlXSl7aWYoYj0oZC5maW5kLklEKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxiKXx8W10pWzBdLCFiKXJldHVybiBlO24mJihiPWIucGFyZW50Tm9kZSksYT1hLnNsaWNlKGouc2hpZnQoKS52YWx1ZS5sZW5ndGgpfWk9WC5uZWVkc0NvbnRleHQudGVzdChhKT8wOmoubGVuZ3RoO3doaWxlKGktLSl7aWYoaz1qW2ldLGQucmVsYXRpdmVbbD1rLnR5cGVdKWJyZWFrO2lmKChtPWQuZmluZFtsXSkmJihmPW0oay5tYXRjaGVzWzBdLnJlcGxhY2UoY2EsZGEpLGFhLnRlc3QoalswXS50eXBlKSYmcGEoYi5wYXJlbnROb2RlKXx8YikpKXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnJhKGopLCFhKXJldHVybiBILmFwcGx5KGUsZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLGFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KCIiKS5zb3J0KEIpLmpvaW4oIiIpPT09dSxjLmRldGVjdER1cGxpY2F0ZXM9ISFsLG0oKSxjLnNvcnREZXRhY2hlZD1qYShmdW5jdGlvbihhKXtyZXR1cm4gMSZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4uY3JlYXRlRWxlbWVudCgiZGl2IikpfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8a2EoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYz92b2lkIDA6YS5nZXRBdHRyaWJ1dGUoYiwidHlwZSI9PT1iLnRvTG93ZXJDYXNlKCk/MToyKX0pLGMuYXR0cmlidXRlcyYmamEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPSI8aW5wdXQvPiIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8a2EoInZhbHVlIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGN8fCJpbnB1dCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSksamEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGthKEssZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBjP3ZvaWQgMDphW2JdPT09ITA/Yi50b0xvd2VyQ2FzZSgpOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJmQuc3BlY2lmaWVkP2QudmFsdWU6bnVsbH0pLGdhfShhKTtuLmZpbmQ9dCxuLmV4cHI9dC5zZWxlY3RvcnMsbi5leHByWyI6Il09bi5leHByLnBzZXVkb3Msbi51bmlxdWU9dC51bmlxdWVTb3J0LG4udGV4dD10LmdldFRleHQsbi5pc1hNTERvYz10LmlzWE1MLG4uY29udGFpbnM9dC5jb250YWluczt2YXIgdT1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHY9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx3PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24geChhLGIsYyl7aWYobi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih3LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBnLmNhbGwoYixhKT49MCE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm4uZmluZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPXRoaXMubGVuZ3RoLGQ9W10sZT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2M+YjtiKyspaWYobi5jb250YWlucyhlW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7Yz5iO2IrKyluLmZpbmQoYSxlW2JdLGQpO3JldHVybiBkPXRoaXMucHVzaFN0YWNrKGM+MT9uLnVuaXF1ZShkKTpkKSxkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGR9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeCh0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeCh0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEheCh0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdS50ZXN0KGEpP24oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgeSx6PS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQT1uLmZuLmluaXQ9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKCFhKXJldHVybiB0aGlzO2lmKCJzdHJpbmciPT10eXBlb2YgYSl7aWYoYz0iPCI9PT1hWzBdJiYiPiI9PT1hW2EubGVuZ3RoLTFdJiZhLmxlbmd0aD49Mz9bbnVsbCxhLG51bGxdOnouZXhlYyhhKSwhY3x8IWNbMV0mJmIpcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHx5KS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoYikuZmluZChhKTtpZihjWzFdKXtpZihiPWIgaW5zdGFuY2VvZiBuP2JbMF06YixuLm1lcmdlKHRoaXMsbi5wYXJzZUhUTUwoY1sxXSxiJiZiLm5vZGVUeXBlP2Iub3duZXJEb2N1bWVudHx8YjpsLCEwKSksdi50ZXN0KGNbMV0pJiZuLmlzUGxhaW5PYmplY3QoYikpZm9yKGMgaW4gYiluLmlzRnVuY3Rpb24odGhpc1tjXSk/dGhpc1tjXShiW2NdKTp0aGlzLmF0dHIoYyxiW2NdKTtyZXR1cm4gdGhpc31yZXR1cm4gZD1sLmdldEVsZW1lbnRCeUlkKGNbMl0pLGQmJmQucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1kKSx0aGlzLmNvbnRleHQ9bCx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4gYS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXMpOm4uaXNGdW5jdGlvbihhKT8idW5kZWZpbmVkIiE9dHlwZW9mIHkucmVhZHk/eS5yZWFkeShhKTphKG4pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG4ubWFrZUFycmF5KGEsdGhpcykpfTtBLnByb3RvdHlwZT1uLmZuLHk9bihsKTt2YXIgQj0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxDPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O24uZXh0ZW5kKHtkaXI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU9dm9pZCAwIT09Yzt3aGlsZSgoYT1hW2JdKSYmOSE9PWEubm9kZVR5cGUpaWYoMT09PWEubm9kZVR5cGUpe2lmKGUmJm4oYSkuaXMoYykpYnJlYWs7ZC5wdXNoKGEpfXJldHVybiBkfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPVtdO2E7YT1hLm5leHRTaWJsaW5nKTE9PT1hLm5vZGVUeXBlJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pLG4uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9bihhLHRoaXMpLGM9Yi5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7Yz5hO2ErKylpZihuLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dS50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bihhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbi5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP24udW5pcXVlKGYpOmYpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/Zy5jYWxsKG4oYSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsYS5qcXVlcnk/YVswXTphKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhuLnVuaXF1ZShuLm1lcmdlKHRoaXMuZ2V0KCksbihhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBEKGEsYil7d2hpbGUoKGE9YVtiXSkmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1uLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbi5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gbi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIG4uc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYS5jb250ZW50RG9jdW1lbnR8fG4ubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPW4ubWFwKHRoaXMsYixjKTtyZXR1cm4iVW50aWwiIT09YS5zbGljZSgtNSkmJihkPWMpLGQmJiJzdHJpbmciPT10eXBlb2YgZCYmKGU9bi5maWx0ZXIoZCxlKSksdGhpcy5sZW5ndGg+MSYmKENbYV18fG4udW5pcXVlKGUpLEIudGVzdChhKSYmZS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGUpfX0pO3ZhciBFPS9cUysvZyxGPXt9O2Z1bmN0aW9uIEcoYSl7dmFyIGI9RlthXT17fTtyZXR1cm4gbi5lYWNoKGEubWF0Y2goRSl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/RlthXXx8RyhhKTpuLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmLGcsaD1bXSxpPSFhLm9uY2UmJltdLGo9ZnVuY3Rpb24obCl7Zm9yKGI9YS5tZW1vcnkmJmwsYz0hMCxnPWV8fDAsZT0wLGY9aC5sZW5ndGgsZD0hMDtoJiZmPmc7ZysrKWlmKGhbZ10uYXBwbHkobFswXSxsWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlKXtiPSExO2JyZWFrfWQ9ITEsaCYmKGk/aS5sZW5ndGgmJmooaS5zaGlmdCgpKTpiP2g9W106ay5kaXNhYmxlKCkpfSxrPXthZGQ6ZnVuY3Rpb24oKXtpZihoKXt2YXIgYz1oLmxlbmd0aDshZnVuY3Rpb24gZyhiKXtuLmVhY2goYixmdW5jdGlvbihiLGMpe3ZhciBkPW4udHlwZShjKTsiZnVuY3Rpb24iPT09ZD9hLnVuaXF1ZSYmay5oYXMoYyl8fGgucHVzaChjKTpjJiZjLmxlbmd0aCYmInN0cmluZyIhPT1kJiZnKGMpfSl9KGFyZ3VtZW50cyksZD9mPWgubGVuZ3RoOmImJihlPWMsaihiKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBoJiZuLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGEsYil7dmFyIGM7d2hpbGUoKGM9bi5pbkFycmF5KGIsaCxjKSk+LTEpaC5zcGxpY2UoYywxKSxkJiYoZj49YyYmZi0tLGc+PWMmJmctLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/bi5pbkFycmF5KGEsaCk+LTE6ISghaHx8IWgubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaD1bXSxmPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBoPWk9Yj12b2lkIDAsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haH0sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPXZvaWQgMCxifHxrLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxiKXtyZXR1cm4haHx8YyYmIWl8fChiPWJ8fFtdLGI9W2EsYi5zbGljZT9iLnNsaWNlKCk6Yl0sZD9pLnB1c2goYik6aihiKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBrLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhY319O3JldHVybiBrfSxuLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRlZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1kLmNhbGwoYXJndW1lbnRzKSxlPWMubGVuZ3RoLGY9MSE9PWV8fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2U6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihlKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6ZSxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGU+MSlmb3IoaT1uZXcgQXJyYXkoZSksaj1uZXcgQXJyYXkoZSksaz1uZXcgQXJyYXkoZSk7ZT5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5kb25lKGgoYixrLGMpKS5mYWlsKGcucmVqZWN0KS5wcm9ncmVzcyhoKGIsaixpKSk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEg7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXsoYT09PSEwPy0tbi5yZWFkeVdhaXQ6bi5pc1JlYWR5KXx8KG4uaXNSZWFkeT0hMCxhIT09ITAmJi0tbi5yZWFkeVdhaXQ+MHx8KEgucmVzb2x2ZVdpdGgobCxbbl0pLG4uZm4udHJpZ2dlckhhbmRsZXImJihuKGwpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG4obCkub2ZmKCJyZWFkeSIpKSkpfX0pO2Z1bmN0aW9uIEkoKXtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEksITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsSSwhMSksbi5yZWFkeSgpfW4ucmVhZHkucHJvbWlzZT1mdW5jdGlvbihiKXtyZXR1cm4gSHx8KEg9bi5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1sLnJlYWR5U3RhdGU/c2V0VGltZW91dChuLnJlYWR5KToobC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixJLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLEksITEpKSksSC5wcm9taXNlKGIpfSxuLnJlYWR5LnByb21pc2UoKTt2YXIgSj1uLmFjY2Vzcz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKCJvYmplY3QiPT09bi50eXBlKGMpKXtlPSEwO2ZvcihoIGluIGMpbi5hY2Nlc3MoYSxiLGgsY1toXSwhMCxmLGcpfWVsc2UgaWYodm9pZCAwIT09ZCYmKGU9ITAsbi5pc0Z1bmN0aW9uKGQpfHwoZz0hMCksaiYmKGc/KGIuY2FsbChhLGQpLGI9bnVsbCk6KGo9YixiPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gai5jYWxsKG4oYSksYyl9KSksYikpZm9yKDtpPmg7aCsrKWIoYVtoXSxjLGc/ZDpkLmNhbGwoYVtoXSxoLGIoYVtoXSxjKSkpO3JldHVybiBlP2E6aj9iLmNhbGwoYSk6aT9iKGFbMF0sYyk6Zn07bi5hY2NlcHREYXRhPWZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZXx8OT09PWEubm9kZVR5cGV8fCErYS5ub2RlVHlwZX07ZnVuY3Rpb24gSygpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz1uLmV4cGFuZG8rSy51aWQrK31LLnVpZD0xLEsuYWNjZXB0cz1uLmFjY2VwdERhdGEsSy5wcm90b3R5cGU9e2tleTpmdW5jdGlvbihhKXtpZighSy5hY2NlcHRzKGEpKXJldHVybiAwO3ZhciBiPXt9LGM9YVt0aGlzLmV4cGFuZG9dO2lmKCFjKXtjPUsudWlkKys7dHJ5e2JbdGhpcy5leHBhbmRvXT17dmFsdWU6Y30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYSxiKX1jYXRjaChkKXtiW3RoaXMuZXhwYW5kb109YyxuLmV4dGVuZChhLGIpfX1yZXR1cm4gdGhpcy5jYWNoZVtjXXx8KHRoaXMuY2FjaGVbY109e30pLGN9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT10aGlzLmtleShhKSxmPXRoaXMuY2FjaGVbZV07aWYoInN0cmluZyI9PXR5cGVvZiBiKWZbYl09YztlbHNlIGlmKG4uaXNFbXB0eU9iamVjdChmKSluLmV4dGVuZCh0aGlzLmNhY2hlW2VdLGIpO2Vsc2UgZm9yKGQgaW4gYilmW2RdPWJbZF07cmV0dXJuIGZ9LGdldDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY2FjaGVbdGhpcy5rZXkoYSldO3JldHVybiB2b2lkIDA9PT1iP2M6Y1tiXX0sYWNjZXNzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmInN0cmluZyI9PXR5cGVvZiBiJiZ2b2lkIDA9PT1jPyhkPXRoaXMuZ2V0KGEsYiksdm9pZCAwIT09ZD9kOnRoaXMuZ2V0KGEsbi5jYW1lbENhc2UoYikpKToodGhpcy5zZXQoYSxiLGMpLHZvaWQgMCE9PWM/YzpiKX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpcy5rZXkoYSksZz10aGlzLmNhY2hlW2ZdO2lmKHZvaWQgMD09PWIpdGhpcy5jYWNoZVtmXT17fTtlbHNle24uaXNBcnJheShiKT9kPWIuY29uY2F0KGIubWFwKG4uY2FtZWxDYXNlKSk6KGU9bi5jYW1lbENhc2UoYiksYiBpbiBnP2Q9W2IsZV06KGQ9ZSxkPWQgaW4gZz9bZF06ZC5tYXRjaChFKXx8W10pKSxjPWQubGVuZ3RoO3doaWxlKGMtLSlkZWxldGUgZ1tkW2NdXX19LGhhc0RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIW4uaXNFbXB0eU9iamVjdCh0aGlzLmNhY2hlW2FbdGhpcy5leHBhbmRvXV18fHt9KX0sZGlzY2FyZDpmdW5jdGlvbihhKXthW3RoaXMuZXhwYW5kb10mJmRlbGV0ZSB0aGlzLmNhY2hlW2FbdGhpcy5leHBhbmRvXV19fTt2YXIgTD1uZXcgSyxNPW5ldyBLLE49L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUChhLGIsYyl7dmFyIGQ7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpaWYoZD0iZGF0YS0iK2IucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpLGM9YS5nZXRBdHRyaWJ1dGUoZCksInN0cmluZyI9PXR5cGVvZiBjKXt0cnl7Yz0idHJ1ZSI9PT1jPyEwOiJmYWxzZSI9PT1jPyExOiJudWxsIj09PWM/bnVsbDorYysiIj09PWM/K2M6Ti50ZXN0KGMpP24ucGFyc2VKU09OKGMpOmN9Y2F0Y2goZSl7fU0uc2V0KGEsYixjKX1lbHNlIGM9dm9pZCAwO3JldHVybiBjfW4uZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiBNLmhhc0RhdGEoYSl8fEwuaGFzRGF0YShhKX0sZGF0YTpmdW5jdGlvbihhLGIsYyl7CnJldHVybiBNLmFjY2VzcyhhLGIsYyl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtNLnJlbW92ZShhLGIpfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEwuYWNjZXNzKGEsYixjKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtMLnJlbW92ZShhLGIpfX0pLG4uZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9dGhpc1swXSxnPWYmJmYuYXR0cmlidXRlcztpZih2b2lkIDA9PT1hKXtpZih0aGlzLmxlbmd0aCYmKGU9TS5nZXQoZiksMT09PWYubm9kZVR5cGUmJiFMLmdldChmLCJoYXNEYXRhQXR0cnMiKSkpe2M9Zy5sZW5ndGg7d2hpbGUoYy0tKWdbY10mJihkPWdbY10ubmFtZSwwPT09ZC5pbmRleE9mKCJkYXRhLSIpJiYoZD1uLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSxQKGYsZCxlW2RdKSkpO0wuc2V0KGYsImhhc0RhdGFBdHRycyIsITApfXJldHVybiBlfXJldHVybiJvYmplY3QiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtNLnNldCh0aGlzLGEpfSk6Sih0aGlzLGZ1bmN0aW9uKGIpe3ZhciBjLGQ9bi5jYW1lbENhc2UoYSk7aWYoZiYmdm9pZCAwPT09Yil7aWYoYz1NLmdldChmLGEpLHZvaWQgMCE9PWMpcmV0dXJuIGM7aWYoYz1NLmdldChmLGQpLHZvaWQgMCE9PWMpcmV0dXJuIGM7aWYoYz1QKGYsZCx2b2lkIDApLHZvaWQgMCE9PWMpcmV0dXJuIGN9ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1NLmdldCh0aGlzLGQpO00uc2V0KHRoaXMsZCxiKSwtMSE9PWEuaW5kZXhPZigiLSIpJiZ2b2lkIDAhPT1jJiZNLnNldCh0aGlzLGEsYil9KX0sbnVsbCxiLGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TS5yZW1vdmUodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGE/KGI9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1MLmdldChhLGIpLGMmJighZHx8bi5pc0FycmF5KGMpP2Q9TC5hY2Nlc3MoYSxiLG4ubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdKTp2b2lkIDB9LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9bi5xdWV1ZShhLGIpLGQ9Yy5sZW5ndGgsZT1jLnNoaWZ0KCksZj1uLl9xdWV1ZUhvb2tzKGEsYiksZz1mdW5jdGlvbigpe24uZGVxdWV1ZShhLGIpfTsiaW5wcm9ncmVzcyI9PT1lJiYoZT1jLnNoaWZ0KCksZC0tKSxlJiYoImZ4Ij09PWImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBmLnN0b3AsZS5jYWxsKGEsZyxmKSksIWQmJmYmJmYuZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihhLGIpe3ZhciBjPWIrInF1ZXVlSG9va3MiO3JldHVybiBMLmdldChhLGMpfHxMLmFjY2VzcyhhLGMse2VtcHR5Om4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe0wucmVtb3ZlKGEsW2IrInF1ZXVlIixjXSl9KX0pfX0pLG4uZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe3ZhciBjPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9ImZ4IixjLS0pLGFyZ3VtZW50cy5sZW5ndGg8Yz9uLnF1ZXVlKHRoaXNbMF0sYSk6dm9pZCAwPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPW4ucXVldWUodGhpcyxhLGIpO24uX3F1ZXVlSG9va3ModGhpcyxhKSwiZngiPT09YSYmImlucHJvZ3Jlc3MiIT09Y1swXSYmbi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kZXF1ZXVlKHRoaXMsYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MSxlPW4uRGVmZXJyZWQoKSxmPXRoaXMsZz10aGlzLmxlbmd0aCxoPWZ1bmN0aW9uKCl7LS1kfHxlLnJlc29sdmVXaXRoKGYsW2ZdKX07InN0cmluZyIhPXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxhPWF8fCJmeCI7d2hpbGUoZy0tKWM9TC5nZXQoZltnXSxhKyJxdWV1ZUhvb2tzIiksYyYmYy5lbXB0eSYmKGQrKyxjLmVtcHR5LmFkZChoKSk7cmV0dXJuIGgoKSxlLnByb21pc2UoYil9fSk7dmFyIFE9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsUj1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLFM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1ifHxhLCJub25lIj09PW4uY3NzKGEsImRpc3BsYXkiKXx8IW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfSxUPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pOyFmdW5jdGlvbigpe3ZhciBhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGI9YS5hcHBlbmRDaGlsZChsLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxjPWwuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtjLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYy5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksYy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IiksYi5hcHBlbmRDaGlsZChjKSxrLmNoZWNrQ2xvbmU9Yi5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYi5pbm5lckhUTUw9Ijx0ZXh0YXJlYT54PC90ZXh0YXJlYT4iLGsubm9DbG9uZUNoZWNrZWQ9ISFiLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0oKTt2YXIgVT0idW5kZWZpbmVkIjtrLmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gYTt2YXIgVj0vXmtleS8sVz0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLyxYPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxZPS9eKFteLl0qKSg/OlwuKC4rKXwpJC87ZnVuY3Rpb24gWigpe3JldHVybiEwfWZ1bmN0aW9uICQoKXtyZXR1cm4hMX1mdW5jdGlvbiBfKCl7dHJ5e3JldHVybiBsLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goYSl7fX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuZ2V0KGEpO2lmKHIpe2MuaGFuZGxlciYmKGY9YyxjPWYuaGFuZGxlcixlPWYuc2VsZWN0b3IpLGMuZ3VpZHx8KGMuZ3VpZD1uLmd1aWQrKyksKGk9ci5ldmVudHMpfHwoaT1yLmV2ZW50cz17fSksKGc9ci5oYW5kbGUpfHwoZz1yLmhhbmRsZT1mdW5jdGlvbihiKXtyZXR1cm4gdHlwZW9mIG4hPT1VJiZuLmV2ZW50LnRyaWdnZXJlZCE9PWIudHlwZT9uLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEsYXJndW1lbnRzKTp2b2lkIDB9KSxiPShifHwiIikubWF0Y2goRSl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvJiYobD1uLmV2ZW50LnNwZWNpYWxbb118fHt9LG89KGU/bC5kZWxlZ2F0ZVR5cGU6bC5iaW5kVHlwZSl8fG8sbD1uLmV2ZW50LnNwZWNpYWxbb118fHt9LGs9bi5leHRlbmQoe3R5cGU6byxvcmlnVHlwZTpxLGRhdGE6ZCxoYW5kbGVyOmMsZ3VpZDpjLmd1aWQsc2VsZWN0b3I6ZSxuZWVkc0NvbnRleHQ6ZSYmbi5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGUpLG5hbWVzcGFjZTpwLmpvaW4oIi4iKX0sZiksKG09aVtvXSl8fChtPWlbb109W10sbS5kZWxlZ2F0ZUNvdW50PTAsbC5zZXR1cCYmbC5zZXR1cC5jYWxsKGEsZCxwLGcpIT09ITF8fGEuYWRkRXZlbnRMaXN0ZW5lciYmYS5hZGRFdmVudExpc3RlbmVyKG8sZywhMSkpLGwuYWRkJiYobC5hZGQuY2FsbChhLGspLGsuaGFuZGxlci5ndWlkfHwoay5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGspOm0ucHVzaChrKSxuLmV2ZW50Lmdsb2JhbFtvXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG8scCxxLHI9TC5oYXNEYXRhKGEpJiZMLmdldChhKTtpZihyJiYoaT1yLmV2ZW50cykpe2I9KGJ8fCIiKS5tYXRjaChFKXx8WyIiXSxqPWIubGVuZ3RoO3doaWxlKGotLSlpZihoPVkuZXhlYyhiW2pdKXx8W10sbz1xPWhbMV0scD0oaFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8pe2w9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLG09aVtvXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGc9Zj1tLmxlbmd0aDt3aGlsZShmLS0paz1tW2ZdLCFlJiZxIT09ay5vcmlnVHlwZXx8YyYmYy5ndWlkIT09ay5ndWlkfHxoJiYhaC50ZXN0KGsubmFtZXNwYWNlKXx8ZCYmZCE9PWsuc2VsZWN0b3ImJigiKioiIT09ZHx8IWsuc2VsZWN0b3IpfHwobS5zcGxpY2UoZiwxKSxrLnNlbGVjdG9yJiZtLmRlbGVnYXRlQ291bnQtLSxsLnJlbW92ZSYmbC5yZW1vdmUuY2FsbChhLGspKTtnJiYhbS5sZW5ndGgmJihsLnRlYXJkb3duJiZsLnRlYXJkb3duLmNhbGwoYSxwLHIuaGFuZGxlKSE9PSExfHxuLnJlbW92ZUV2ZW50KGEsbyxyLmhhbmRsZSksZGVsZXRlIGlbb10pfWVsc2UgZm9yKG8gaW4gaSluLmV2ZW50LnJlbW92ZShhLG8rYltqXSxjLGQsITApO24uaXNFbXB0eU9iamVjdChpKSYmKGRlbGV0ZSByLmhhbmRsZSxMLnJlbW92ZShhLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKGIsYyxkLGUpe3ZhciBmLGcsaCxpLGssbSxvLHA9W2R8fGxdLHE9ai5jYWxsKGIsInR5cGUiKT9iLnR5cGU6YixyPWouY2FsbChiLCJuYW1lc3BhY2UiKT9iLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGc9aD1kPWR8fGwsMyE9PWQubm9kZVR5cGUmJjghPT1kLm5vZGVUeXBlJiYhWC50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYocS5pbmRleE9mKCIuIik+PTAmJihyPXEuc3BsaXQoIi4iKSxxPXIuc2hpZnQoKSxyLnNvcnQoKSksaz1xLmluZGV4T2YoIjoiKTwwJiYib24iK3EsYj1iW24uZXhwYW5kb10/YjpuZXcgbi5FdmVudChxLCJvYmplY3QiPT10eXBlb2YgYiYmYiksYi5pc1RyaWdnZXI9ZT8yOjMsYi5uYW1lc3BhY2U9ci5qb2luKCIuIiksYi5uYW1lc3BhY2VfcmU9Yi5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrci5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWQpLGM9bnVsbD09Yz9bYl06bi5tYWtlQXJyYXkoYyxbYl0pLG89bi5ldmVudC5zcGVjaWFsW3FdfHx7fSxlfHwhby50cmlnZ2VyfHxvLnRyaWdnZXIuYXBwbHkoZCxjKSE9PSExKSl7aWYoIWUmJiFvLm5vQnViYmxlJiYhbi5pc1dpbmRvdyhkKSl7Zm9yKGk9by5kZWxlZ2F0ZVR5cGV8fHEsWC50ZXN0KGkrcSl8fChnPWcucGFyZW50Tm9kZSk7ZztnPWcucGFyZW50Tm9kZSlwLnB1c2goZyksaD1nO2g9PT0oZC5vd25lckRvY3VtZW50fHxsKSYmcC5wdXNoKGguZGVmYXVsdFZpZXd8fGgucGFyZW50V2luZG93fHxhKX1mPTA7d2hpbGUoKGc9cFtmKytdKSYmIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSliLnR5cGU9Zj4xP2k6by5iaW5kVHlwZXx8cSxtPShMLmdldChnLCJldmVudHMiKXx8e30pW2IudHlwZV0mJkwuZ2V0KGcsImhhbmRsZSIpLG0mJm0uYXBwbHkoZyxjKSxtPWsmJmdba10sbSYmbS5hcHBseSYmbi5hY2NlcHREYXRhKGcpJiYoYi5yZXN1bHQ9bS5hcHBseShnLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGIudHlwZT1xLGV8fGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fG8uX2RlZmF1bHQmJm8uX2RlZmF1bHQuYXBwbHkocC5wb3AoKSxjKSE9PSExfHwhbi5hY2NlcHREYXRhKGQpfHxrJiZuLmlzRnVuY3Rpb24oZFtxXSkmJiFuLmlzV2luZG93KGQpJiYoaD1kW2tdLGgmJihkW2tdPW51bGwpLG4uZXZlbnQudHJpZ2dlcmVkPXEsZFtxXSgpLG4uZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxoJiYoZFtrXT1oKSksYi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihhKXthPW4uZXZlbnQuZml4KGEpO3ZhciBiLGMsZSxmLGcsaD1bXSxpPWQuY2FsbChhcmd1bWVudHMpLGo9KEwuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbYS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghYS5uYW1lc3BhY2VfcmV8fGEubmFtZXNwYWNlX3JlLnRlc3QoZy5uYW1lc3BhY2UpKSYmKGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxlPSgobi5ldmVudC5zcGVjaWFsW2cub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1lJiYoYS5yZXN1bHQ9ZSk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoIWEuYnV0dG9ufHwiY2xpY2siIT09YS50eXBlKSlmb3IoO2khPT10aGlzO2k9aS5wYXJlbnROb2RlfHx0aGlzKWlmKGkuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWEudHlwZSl7Zm9yKGQ9W10sYz0wO2g+YztjKyspZj1iW2NdLGU9Zi5zZWxlY3RvcisiICIsdm9pZCAwPT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/bihlLHRoaXMpLmluZGV4KGkpPj0wOm4uZmluZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5wdXNoKGYpO2QubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9Yi5idXR0b247cmV0dXJuIG51bGw9PWEucGFnZVgmJm51bGwhPWIuY2xpZW50WCYmKGM9YS50YXJnZXQub3duZXJEb2N1bWVudHx8bCxkPWMuZG9jdW1lbnRFbGVtZW50LGU9Yy5ib2R5LGEucGFnZVg9Yi5jbGllbnRYKyhkJiZkLnNjcm9sbExlZnR8fGUmJmUuc2Nyb2xsTGVmdHx8MCktKGQmJmQuY2xpZW50TGVmdHx8ZSYmZS5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWIuY2xpZW50WSsoZCYmZC5zY3JvbGxUb3B8fGUmJmUuc2Nyb2xsVG9wfHwwKS0oZCYmZC5jbGllbnRUb3B8fGUmJmUuY2xpZW50VG9wfHwwKSksYS53aGljaHx8dm9pZCAwPT09Znx8KGEud2hpY2g9MSZmPzE6MiZmPzM6NCZmPzI6MCksYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW24uZXhwYW5kb10pcmV0dXJuIGE7dmFyIGIsYyxkLGU9YS50eXBlLGY9YSxnPXRoaXMuZml4SG9va3NbZV07Z3x8KHRoaXMuZml4SG9va3NbZV09Zz1XLnRlc3QoZSk/dGhpcy5tb3VzZUhvb2tzOlYudGVzdChlKT90aGlzLmtleUhvb2tzOnt9KSxkPWcucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZy5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBuLkV2ZW50KGYpLGI9ZC5sZW5ndGg7d2hpbGUoYi0tKWM9ZFtiXSxhW2NdPWZbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9bCksMz09PWEudGFyZ2V0Lm5vZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksZy5maWx0ZXI/Zy5maWx0ZXIoYSxmKTphfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PV8oKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp2b2lkIDB9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PV8oKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZuLm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMuY2xpY2soKSwhMSk6dm9pZCAwfSxfZGVmYXVsdDpmdW5jdGlvbihhKXtyZXR1cm4gbi5ub2RlTmFtZShhLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bi5leHRlbmQobmV3IG4uRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP24uZXZlbnQudHJpZ2dlcihlLG51bGwsYik6bi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sbi5yZW1vdmVFdmVudD1mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX0sbi5FdmVudD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbi5FdmVudD8oYSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09YS5kZWZhdWx0UHJldmVudGVkJiZhLnJldHVyblZhbHVlPT09ITE/WjokKTp0aGlzLnR5cGU9YSxiJiZuLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxuLm5vdygpLHZvaWQodGhpc1tuLmV4cGFuZG9dPSEwKSk6bmV3IG4uRXZlbnQoYSxiKX0sbi5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDokLGlzUHJvcGFnYXRpb25TdG9wcGVkOiQsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6JCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1aLGEmJmEucHJldmVudERlZmF1bHQmJmEucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9WixhJiZhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9WixhJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sbi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihhLGIpe24uZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGMsZD10aGlzLGU9YS5yZWxhdGVkVGFyZ2V0LGY9YS5oYW5kbGVPYmo7cmV0dXJuKCFlfHxlIT09ZCYmIW4uY29udGFpbnMoZCxlKSkmJihhLnR5cGU9Zi5vcmlnVHlwZSxjPWYuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWIpLGN9fX0pLGsuZm9jdXNpbkJ1YmJsZXN8fG4uZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbihhKXtuLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsbi5ldmVudC5maXgoYSksITApfTtuLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9TC5hY2Nlc3MoZCxiKTtlfHxkLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKSxMLmFjY2VzcyhkLGIsKGV8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNjZXNzKGQsYiktMTtlP0wuYWNjZXNzKGQsYixlKTooZC5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCksTC5yZW1vdmUoZCxiKSl9fX0pLG4uZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWN8fGIsYj12b2lkIDApO2ZvcihnIGluIGEpdGhpcy5vbihnLGIsYyxhW2ddLGUpO3JldHVybiB0aGlzfWlmKG51bGw9PWMmJm51bGw9PWQ/KGQ9YixjPWI9dm9pZCAwKTpudWxsPT1kJiYoInN0cmluZyI9PXR5cGVvZiBiPyhkPWMsYz12b2lkIDApOihkPWMsYz1iLGI9dm9pZCAwKSksZD09PSExKWQ9JDtlbHNlIGlmKCFkKXJldHVybiB0aGlzO3JldHVybiAxPT09ZSYmKGY9ZCxkPWZ1bmN0aW9uKGEpe3JldHVybiBuKCkub2ZmKGEpLGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxkLmd1aWQ9Zi5ndWlkfHwoZi5ndWlkPW4uZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC5hZGQodGhpcyxhLGQsYyxiKX0pfSxvbmU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYSxiLGMsZCwxKX0sb2ZmOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlO2lmKGEmJmEucHJldmVudERlZmF1bHQmJmEuaGFuZGxlT2JqKXJldHVybiBkPWEuaGFuZGxlT2JqLG4oYS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGQubmFtZXNwYWNlP2Qub3JpZ1R5cGUrIi4iK2QubmFtZXNwYWNlOmQub3JpZ1R5cGUsZC5zZWxlY3RvcixkLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBhKXtmb3IoZSBpbiBhKXRoaXMub2ZmKGUsYixhW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4oYj09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgYikmJihjPWIsYj12b2lkIDApLGM9PT0hMSYmKGM9JCksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC5yZW1vdmUodGhpcyxhLGMsYil9KX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpc1swXTtyZXR1cm4gYz9uLmV2ZW50LnRyaWdnZXIoYSxiLGMsITApOnZvaWQgMH19KTt2YXIgYWE9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxiYT0vPChbXHc6XSspLyxjYT0vPHwmIz9cdys7LyxkYT0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLGVhPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGZhPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxnYT0vXnRydWVcLyguKikvLGhhPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxpYT17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2lhLm9wdGdyb3VwPWlhLm9wdGlvbixpYS50Ym9keT1pYS50Zm9vdD1pYS5jb2xncm91cD1pYS5jYXB0aW9uPWlhLnRoZWFkLGlhLnRoPWlhLnRkO2Z1bmN0aW9uIGphKGEsYil7cmV0dXJuIG4ubm9kZU5hbWUoYSwidGFibGUiKSYmbi5ub2RlTmFtZSgxMSE9PWIubm9kZVR5cGU/YjpiLmZpcnN0Q2hpbGQsInRyIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBrYShhKXtyZXR1cm4gYS50eXBlPShudWxsIT09YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2EudHlwZSxhfWZ1bmN0aW9uIGxhKGEpe3ZhciBiPWdhLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGF9ZnVuY3Rpb24gbWEoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspTC5zZXQoYVtjXSwiZ2xvYmFsRXZhbCIsIWJ8fEwuZ2V0KGJbY10sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gbmEoYSxiKXt2YXIgYyxkLGUsZixnLGgsaSxqO2lmKDE9PT1iLm5vZGVUeXBlKXtpZihMLmhhc0RhdGEoYSkmJihmPUwuYWNjZXNzKGEpLGc9TC5zZXQoYixmKSxqPWYuZXZlbnRzKSl7ZGVsZXRlIGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihlIGluIGopZm9yKGM9MCxkPWpbZV0ubGVuZ3RoO2Q+YztjKyspbi5ldmVudC5hZGQoYixlLGpbZV1bY10pfU0uaGFzRGF0YShhKSYmKGg9TS5hY2Nlc3MoYSksaT1uLmV4dGVuZCh7fSxoKSxNLnNldChiLGkpKX19ZnVuY3Rpb24gb2EoYSxiKXt2YXIgYz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYnx8IioiKTphLnF1ZXJ5U2VsZWN0b3JBbGw/YS5xdWVyeVNlbGVjdG9yQWxsKGJ8fCIqIik6W107cmV0dXJuIHZvaWQgMD09PWJ8fGImJm4ubm9kZU5hbWUoYSxiKT9uLm1lcmdlKFthXSxjKTpjfWZ1bmN0aW9uIHBhKGEsYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1jJiZULnRlc3QoYS50eXBlKT9iLmNoZWNrZWQ9YS5jaGVja2VkOigiaW5wdXQiPT09Y3x8InRleHRhcmVhIj09PWMpJiYoYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWUpfW4uZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNsb25lTm9kZSghMCksaT1uLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKTtpZighKGsubm9DbG9uZUNoZWNrZWR8fDEhPT1hLm5vZGVUeXBlJiYxMSE9PWEubm9kZVR5cGV8fG4uaXNYTUxEb2MoYSkpKWZvcihnPW9hKGgpLGY9b2EoYSksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKylwYShmW2RdLGdbZF0pO2lmKGIpaWYoYylmb3IoZj1mfHxvYShhKSxnPWd8fG9hKGgpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspbmEoZltkXSxnW2RdKTtlbHNlIG5hKGEsaCk7cmV0dXJuIGc9b2EoaCwic2NyaXB0IiksZy5sZW5ndGg+MCYmbWEoZywhaSYmb2EoYSwic2NyaXB0IikpLGh9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oYSxiLGMsZCl7Zm9yKHZhciBlLGYsZyxoLGksaixrPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGw9W10sbT0wLG89YS5sZW5ndGg7bz5tO20rKylpZihlPWFbbV0sZXx8MD09PWUpaWYoIm9iamVjdCI9PT1uLnR5cGUoZSkpbi5tZXJnZShsLGUubm9kZVR5cGU/W2VdOmUpO2Vsc2UgaWYoY2EudGVzdChlKSl7Zj1mfHxrLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGc9KGJhLmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksaD1pYVtnXXx8aWEuX2RlZmF1bHQsZi5pbm5lckhUTUw9aFsxXStlLnJlcGxhY2UoYWEsIjwkMT48LyQyPiIpK2hbMl0saj1oWzBdO3doaWxlKGotLSlmPWYubGFzdENoaWxkO24ubWVyZ2UobCxmLmNoaWxkTm9kZXMpLGY9ay5maXJzdENoaWxkLGYudGV4dENvbnRlbnQ9IiJ9ZWxzZSBsLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShlKSk7ay50ZXh0Q29udGVudD0iIixtPTA7d2hpbGUoZT1sW20rK10paWYoKCFkfHwtMT09PW4uaW5BcnJheShlLGQpKSYmKGk9bi5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSksZj1vYShrLmFwcGVuZENoaWxkKGUpLCJzY3JpcHQiKSxpJiZtYShmKSxjKSl7aj0wO3doaWxlKGU9ZltqKytdKWZhLnRlc3QoZS50eXBlfHwiIikmJmMucHVzaChlKX1yZXR1cm4ga30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQsZSxmPW4uZXZlbnQuc3BlY2lhbCxnPTA7dm9pZCAwIT09KGM9YVtnXSk7ZysrKXtpZihuLmFjY2VwdERhdGEoYykmJihlPWNbTC5leHBhbmRvXSxlJiYoYj1MLmNhY2hlW2VdKSkpe2lmKGIuZXZlbnRzKWZvcihkIGluIGIuZXZlbnRzKWZbZF0/bi5ldmVudC5yZW1vdmUoYyxkKTpuLnJlbW92ZUV2ZW50KGMsZCxiLmhhbmRsZSk7TC5jYWNoZVtlXSYmZGVsZXRlIEwuY2FjaGVbZV19ZGVsZXRlIE0uY2FjaGVbY1tNLmV4cGFuZG9dXX19fSksbi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwPT09YT9uLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpJiYodGhpcy50ZXh0Q29udGVudD1hKX0pfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amEodGhpcyxhKTtiLmFwcGVuZENoaWxkKGEpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1qYSh0aGlzLGEpO2IuaW5zZXJ0QmVmb3JlKGEsYi5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPWE/bi5maWx0ZXIoYSx0aGlzKTp0aGlzLGU9MDtudWxsIT0oYz1kW2VdKTtlKyspYnx8MSE9PWMubm9kZVR5cGV8fG4uY2xlYW5EYXRhKG9hKGMpKSxjLnBhcmVudE5vZGUmJihiJiZuLmNvbnRhaW5zKGMub3duZXJEb2N1bWVudCxjKSYmbWEob2EoYywic2NyaXB0IikpLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9MDtudWxsIT0oYT10aGlzW2JdKTtiKyspMT09PWEubm9kZVR5cGUmJihuLmNsZWFuRGF0YShvYShhLCExKSksYS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEmJjE9PT1iLm5vZGVUeXBlKXJldHVybiBiLmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGEmJiFkYS50ZXN0KGEpJiYhaWFbKGJhLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXthPWEucmVwbGFjZShhYSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEob2EoYiwhMSkpLGIuaW5uZXJIVE1MPWEpO2I9MH1jYXRjaChlKXt9fWImJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGIpe2E9dGhpcy5wYXJlbnROb2RlLG4uY2xlYW5EYXRhKG9hKHRoaXMpKSxhJiZhLnJlcGxhY2VDaGlsZChiLHRoaXMpfSksYSYmKGEubGVuZ3RofHxhLm5vZGVUeXBlKT90aGlzOnRoaXMucmVtb3ZlKCl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYil7YT1lLmFwcGx5KFtdLGEpO3ZhciBjLGQsZixnLGgsaSxqPTAsbD10aGlzLmxlbmd0aCxtPXRoaXMsbz1sLTEscD1hWzBdLHE9bi5pc0Z1bmN0aW9uKHApO2lmKHF8fGw+MSYmInN0cmluZyI9PXR5cGVvZiBwJiYhay5jaGVja0Nsb25lJiZlYS50ZXN0KHApKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9bS5lcShjKTtxJiYoYVswXT1wLmNhbGwodGhpcyxjLGQuaHRtbCgpKSksZC5kb21NYW5pcChhLGIpfSk7aWYobCYmKGM9bi5idWlsZEZyYWdtZW50KGEsdGhpc1swXS5vd25lckRvY3VtZW50LCExLHRoaXMpLGQ9Yy5maXJzdENoaWxkLDE9PT1jLmNoaWxkTm9kZXMubGVuZ3RoJiYoYz1kKSxkKSl7Zm9yKGY9bi5tYXAob2EoYywic2NyaXB0Iiksa2EpLGc9Zi5sZW5ndGg7bD5qO2orKyloPWMsaiE9PW8mJihoPW4uY2xvbmUoaCwhMCwhMCksZyYmbi5tZXJnZShmLG9hKGgsInNjcmlwdCIpKSksYi5jYWxsKHRoaXNbal0saCxqKTtpZihnKWZvcihpPWZbZi5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxuLm1hcChmLGxhKSxqPTA7Zz5qO2orKyloPWZbal0sZmEudGVzdChoLnR5cGV8fCIiKSYmIUwuYWNjZXNzKGgsImdsb2JhbEV2YWwiKSYmbi5jb250YWlucyhpLGgpJiYoaC5zcmM/bi5fZXZhbFVybCYmbi5fZXZhbFVybChoLnNyYyk6bi5nbG9iYWxFdmFsKGgudGV4dENvbnRlbnQucmVwbGFjZShoYSwiIikpKX1yZXR1cm4gdGhpc319KSxuLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9W10sZT1uKGEpLGc9ZS5sZW5ndGgtMSxoPTA7Zz49aDtoKyspYz1oPT09Zz90aGlzOnRoaXMuY2xvbmUoITApLG4oZVtoXSlbYl0oYyksZi5hcHBseShkLGMuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhkKX19KTt2YXIgcWEscmE9e307ZnVuY3Rpb24gc2EoYixjKXt2YXIgZCxlPW4oYy5jcmVhdGVFbGVtZW50KGIpKS5hcHBlbmRUbyhjLmJvZHkpLGY9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSYmKGQ9YS5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZShlWzBdKSk/ZC5kaXNwbGF5Om4uY3NzKGVbMF0sImRpc3BsYXkiKTtyZXR1cm4gZS5kZXRhY2goKSxmfWZ1bmN0aW9uIHRhKGEpe3ZhciBiPWwsYz1yYVthXTtyZXR1cm4gY3x8KGM9c2EoYSxiKSwibm9uZSIhPT1jJiZjfHwocWE9KHFhfHxuKCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPXFhWzBdLmNvbnRlbnREb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9c2EoYSxiKSxxYS5kZXRhY2goKSkscmFbYV09YyksY312YXIgdWE9L15tYXJnaW4vLHZhPW5ldyBSZWdFeHAoIl4oIitRKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksd2E9ZnVuY3Rpb24oYil7cmV0dXJuIGIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5vcGVuZXI/Yi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYixudWxsKTphLmdldENvbXB1dGVkU3R5bGUoYixudWxsKX07ZnVuY3Rpb24geGEoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5zdHlsZTtyZXR1cm4gYz1jfHx3YShhKSxjJiYoZz1jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl0pLGMmJigiIiE9PWd8fG4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1uLnN0eWxlKGEsYikpLHZhLnRlc3QoZykmJnVhLnRlc3QoYikmJihkPWgud2lkdGgsZT1oLm1pbldpZHRoLGY9aC5tYXhXaWR0aCxoLm1pbldpZHRoPWgubWF4V2lkdGg9aC53aWR0aD1nLGc9Yy53aWR0aCxoLndpZHRoPWQsaC5taW5XaWR0aD1lLGgubWF4V2lkdGg9ZikpLHZvaWQgMCE9PWc/ZysiIjpnfWZ1bmN0aW9uIHlhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3JldHVybiBhKCk/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSFmdW5jdGlvbigpe3ZhciBiLGMsZD1sLmRvY3VtZW50RWxlbWVudCxlPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZj1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGYuc3R5bGUpe2Yuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixmLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsay5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWYuc3R5bGUuYmFja2dyb3VuZENsaXAsZS5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSIsZS5hcHBlbmRDaGlsZChmKTtmdW5jdGlvbiBnKCl7Zi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjElO3RvcDoxJTtib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjRweDtwb3NpdGlvbjphYnNvbHV0ZSIsZi5pbm5lckhUTUw9IiIsZC5hcHBlbmRDaGlsZChlKTt2YXIgZz1hLmdldENvbXB1dGVkU3R5bGUoZixudWxsKTtiPSIxJSIhPT1nLnRvcCxjPSI0cHgiPT09Zy53aWR0aCxkLnJlbW92ZUNoaWxkKGUpfWEuZ2V0Q29tcHV0ZWRTdHlsZSYmbi5leHRlbmQoayx7cGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBnKCksYn0sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YyYmZygpLGN9LHJlbGlhYmxlTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXt2YXIgYixjPWYuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7cmV0dXJuIGMuc3R5bGUuY3NzVGV4dD1mLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCIsYy5zdHlsZS5tYXJnaW5SaWdodD1jLnN0eWxlLndpZHRoPSIwIixmLnN0eWxlLndpZHRoPSIxcHgiLGQuYXBwZW5kQ2hpbGQoZSksYj0hcGFyc2VGbG9hdChhLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5tYXJnaW5SaWdodCksZC5yZW1vdmVDaGlsZChlKSxmLnJlbW92ZUNoaWxkKGMpLGJ9fSl9fSgpLG4uc3dhcD1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX07dmFyIHphPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxBYT1uZXcgUmVnRXhwKCJeKCIrUSsiKSguKikkIiwiaSIpLEJhPW5ldyBSZWdFeHAoIl4oWystXSk9KCIrUSsiKSIsImkiKSxDYT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sRGE9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LEVhPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl07ZnVuY3Rpb24gRmEoYSxiKXtpZihiIGluIGEpcmV0dXJuIGI7dmFyIGM9YlswXS50b1VwcGVyQ2FzZSgpK2Iuc2xpY2UoMSksZD1iLGU9RWEubGVuZ3RoO3doaWxlKGUtLSlpZihiPUVhW2VdK2MsYiBpbiBhKXJldHVybiBiO3JldHVybiBkfWZ1bmN0aW9uIEdhKGEsYixjKXt2YXIgZD1BYS5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsxXS0oY3x8MCkpKyhkWzJdfHwicHgiKTpifWZ1bmN0aW9uIEhhKGEsYixjLGQsZSl7Zm9yKHZhciBmPWM9PT0oZD8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PWI/MTowLGc9MDs0PmY7Zis9MikibWFyZ2luIj09PWMmJihnKz1uLmNzcyhhLGMrUltmXSwhMCxlKSksZD8oImNvbnRlbnQiPT09YyYmKGctPW4uY3NzKGEsInBhZGRpbmciK1JbZl0sITAsZSkpLCJtYXJnaW4iIT09YyYmKGctPW4uY3NzKGEsImJvcmRlciIrUltmXSsiV2lkdGgiLCEwLGUpKSk6KGcrPW4uY3NzKGEsInBhZGRpbmciK1JbZl0sITAsZSksInBhZGRpbmciIT09YyYmKGcrPW4uY3NzKGEsImJvcmRlciIrUltmXSsiV2lkdGgiLCEwLGUpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gSWEoYSxiLGMpe3ZhciBkPSEwLGU9IndpZHRoIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPXdhKGEpLGc9ImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxmKTtpZigwPj1lfHxudWxsPT1lKXtpZihlPXhhKGEsYixmKSwoMD5lfHxudWxsPT1lKSYmKGU9YS5zdHlsZVtiXSksdmEudGVzdChlKSlyZXR1cm4gZTtkPWcmJihrLmJveFNpemluZ1JlbGlhYmxlKCl8fGU9PT1hLnN0eWxlW2JdKSxlPXBhcnNlRmxvYXQoZSl8fDB9cmV0dXJuIGUrSGEoYSxiLGN8fChnPyJib3JkZXIiOiJjb250ZW50IiksZCxmKSsicHgifWZ1bmN0aW9uIEphKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxoPWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPUwuZ2V0KGQsIm9sZGRpc3BsYXkiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHwibm9uZSIhPT1jfHwoZC5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PWQuc3R5bGUuZGlzcGxheSYmUyhkKSYmKGZbZ109TC5hY2Nlc3MoZCwib2xkZGlzcGxheSIsdGEoZC5ub2RlTmFtZSkpKSk6KGU9UyhkKSwibm9uZSI9PT1jJiZlfHxMLnNldChkLCJvbGRkaXNwbGF5IixlP2M6bi5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9uZSIpKTtyZXR1cm4gYX1uLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPXhhKGEsIm9wYWNpdHkiKTtyZXR1cm4iIj09PWM/IjEiOmN9fX19LGNzc051bWJlcjp7Y29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoYSYmMyE9PWEubm9kZVR5cGUmJjghPT1hLm5vZGVUeXBlJiZhLnN0eWxlKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKSxpPWEuc3R5bGU7cmV0dXJuIGI9bi5jc3NQcm9wc1toXXx8KG4uY3NzUHJvcHNbaF09RmEoaSxoKSksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLHZvaWQgMD09PWM/ZyYmImdldCJpbiBnJiZ2b2lkIDAhPT0oZT1nLmdldChhLCExLGQpKT9lOmlbYl06KGY9dHlwZW9mIGMsInN0cmluZyI9PT1mJiYoZT1CYS5leGVjKGMpKSYmKGM9KGVbMV0rMSkqZVsyXStwYXJzZUZsb2F0KG4uY3NzKGEsYikpLGY9Im51bWJlciIpLG51bGwhPWMmJmM9PT1jJiYoIm51bWJlciIhPT1mfHxuLmNzc051bWJlcltoXXx8KGMrPSJweCIpLGsuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8fDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSxnJiYic2V0ImluIGcmJnZvaWQgMD09PShjPWcuc2V0KGEsYyxkKSl8fChpW2JdPWMpKSx2b2lkIDApfX0sY3NzOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPUZhKGEuc3R5bGUsaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1toXSxnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsITAsYykpLHZvaWQgMD09PWUmJihlPXhhKGEsYixkKSksIm5vcm1hbCI9PT1lJiZiIGluIERhJiYoZT1EYVtiXSksIiI9PT1jfHxjPyhmPXBhcnNlRmxvYXQoZSksYz09PSEwfHxuLmlzTnVtZXJpYyhmKT9mfHwwOmUpOmV9fSksbi5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/emEudGVzdChuLmNzcyhhLCJkaXNwbGF5IikpJiYwPT09YS5vZmZzZXRXaWR0aD9uLnN3YXAoYSxDYSxmdW5jdGlvbigpe3JldHVybiBJYShhLGIsZCl9KTpJYShhLGIsZCk6dm9pZCAwfSxzZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQmJndhKGEpO3JldHVybiBHYShhLGMsZD9IYShhLGIsZCwiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJib3hTaXppbmciLCExLGUpLGUpOjApfX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXlhKGsucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBiP24uc3dhcChhLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSx4YSxbYSwibWFyZ2luUmlnaHQiXSk6dm9pZCAwfSksbi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXtmb3IodmFyIGQ9MCxlPXt9LGY9InN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoIiAiKTpbY107ND5kO2QrKyllW2ErUltkXStiXT1mW2RdfHxmW2QtMl18fGZbMF07cmV0dXJuIGV9fSx1YS50ZXN0KGEpfHwobi5jc3NIb29rc1thK2JdLnNldD1HYSl9KSxuLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPXt9LGc9MDtpZihuLmlzQXJyYXkoYikpe2ZvcihkPXdhKGEpLGU9Yi5sZW5ndGg7ZT5nO2crKylmW2JbZ11dPW4uY3NzKGEsYltnXSwhMSxkKTtyZXR1cm4gZn1yZXR1cm4gdm9pZCAwIT09Yz9uLnN0eWxlKGEsYixjKTpuLmNzcyhhLGIpfSxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBKYSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGE/YT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpP24odGhpcykuc2hvdygpOm4odGhpcykuaGlkZSgpfSl9fSk7ZnVuY3Rpb24gS2EoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IEthLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9bi5Ud2Vlbj1LYSxLYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkthLGluaXQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3RoaXMuZWxlbT1hLHRoaXMucHJvcD1jLHRoaXMuZWFzaW5nPWV8fCJzd2luZyIsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChuLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9S2EucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOkthLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPUthLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6S2EucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sS2EucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUthLnByb3RvdHlwZSxLYS5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG51bGw9PWEuZWxlbVthLnByb3BdfHxhLmVsZW0uc3R5bGUmJm51bGwhPWEuZWxlbS5zdHlsZVthLnByb3BdPyhiPW4uY3NzKGEuZWxlbSxhLnByb3AsIiIpLGImJiJhdXRvIiE9PWI/YjowKTphLmVsZW1bYS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGEpe24uZnguc3RlcFthLnByb3BdP24uZnguc3RlcFthLnByb3BdKGEpOmEuZWxlbS5zdHlsZSYmKG51bGwhPWEuZWxlbS5zdHlsZVtuLmNzc1Byb3BzW2EucHJvcF1dfHxuLmNzc0hvb2tzW2EucHJvcF0pP24uc3R5bGUoYS5lbGVtLGEucHJvcCxhLm5vdythLnVuaXQpOmEuZWxlbVthLnByb3BdPWEubm93fX19LEthLnByb3BIb29rcy5zY3JvbGxUb3A9S2EucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihhKXthLmVsZW0ubm9kZVR5cGUmJmEuZWxlbS5wYXJlbnROb2RlJiYoYS5lbGVtW2EucHJvcF09YS5ub3cpfX0sbi5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0sbi5meD1LYS5wcm90b3R5cGUuaW5pdCxuLmZ4LnN0ZXA9e307dmFyIExhLE1hLE5hPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxPYT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUSsiKShbYS16JV0qKSQiLCJpIiksUGE9L3F1ZXVlSG9va3MkLyxRYT1bVmFdLFJhPXsiKiI6W2Z1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGQ9Yy5jdXIoKSxlPU9hLmV4ZWMoYiksZj1lJiZlWzNdfHwobi5jc3NOdW1iZXJbYV0/IiI6InB4IiksZz0obi5jc3NOdW1iZXJbYV18fCJweCIhPT1mJiYrZCkmJk9hLmV4ZWMobi5jc3MoYy5lbGVtLGEpKSxoPTEsaT0yMDtpZihnJiZnWzNdIT09Zil7Zj1mfHxnWzNdLGU9ZXx8W10sZz0rZHx8MTtkbyBoPWh8fCIuNSIsZy89aCxuLnN0eWxlKGMuZWxlbSxhLGcrZik7d2hpbGUoaCE9PShoPWMuY3VyKCkvZCkmJjEhPT1oJiYtLWkpfXJldHVybiBlJiYoZz1jLnN0YXJ0PStnfHwrZHx8MCxjLnVuaXQ9ZixjLmVuZD1lWzFdP2crKGVbMV0rMSkqZVsyXTorZVsyXSksY31dfTtmdW5jdGlvbiBTYSgpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TGE9dm9pZCAwfSksTGE9bi5ub3coKX1mdW5jdGlvbiBUYShhLGIpe3ZhciBjLGQ9MCxlPXtoZWlnaHQ6YX07Zm9yKGI9Yj8xOjA7ND5kO2QrPTItYiljPVJbZF0sZVsibWFyZ2luIitjXT1lWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZS5vcGFjaXR5PWUud2lkdGg9YSksZX1mdW5jdGlvbiBVYShhLGIsYyl7Zm9yKHZhciBkLGU9KFJhW2JdfHxbXSkuY29uY2F0KFJhWyIqIl0pLGY9MCxnPWUubGVuZ3RoO2c+ZjtmKyspaWYoZD1lW2ZdLmNhbGwoYyxiLGEpKXJldHVybiBkfWZ1bmN0aW9uIFZhKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrLGw9dGhpcyxtPXt9LG89YS5zdHlsZSxwPWEubm9kZVR5cGUmJlMoYSkscT1MLmdldChhLCJmeHNob3ciKTtjLnF1ZXVlfHwoaD1uLl9xdWV1ZUhvb2tzKGEsImZ4IiksbnVsbD09aC51bnF1ZXVlZCYmKGgudW5xdWV1ZWQ9MCxpPWguZW1wdHkuZmlyZSxoLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtoLnVucXVldWVkfHxpKCl9KSxoLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2gudW5xdWV1ZWQtLSxuLnF1ZXVlKGEsImZ4IikubGVuZ3RofHxoLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1hLm5vZGVUeXBlJiYoImhlaWdodCJpbiBifHwid2lkdGgiaW4gYikmJihjLm92ZXJmbG93PVtvLm92ZXJmbG93LG8ub3ZlcmZsb3dYLG8ub3ZlcmZsb3dZXSxqPW4uY3NzKGEsImRpc3BsYXkiKSxrPSJub25lIj09PWo/TC5nZXQoYSwib2xkZGlzcGxheSIpfHx0YShhLm5vZGVOYW1lKTpqLCJpbmxpbmUiPT09ayYmIm5vbmUiPT09bi5jc3MoYSwiZmxvYXQiKSYmKG8uZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLGMub3ZlcmZsb3cmJihvLm92ZXJmbG93PSJoaWRkZW4iLGwuYWx3YXlzKGZ1bmN0aW9uKCl7by5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG8ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sby5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxOYS5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fCJ0b2dnbGUiPT09ZSxlPT09KHA/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWV8fCFxfHx2b2lkIDA9PT1xW2RdKWNvbnRpbnVlO3A9ITB9bVtkXT1xJiZxW2RdfHxuLnN0eWxlKGEsZCl9ZWxzZSBqPXZvaWQgMDtpZihuLmlzRW1wdHlPYmplY3QobSkpImlubGluZSI9PT0oIm5vbmUiPT09aj90YShhLm5vZGVOYW1lKTpqKSYmKG8uZGlzcGxheT1qKTtlbHNle3E/ImhpZGRlbiJpbiBxJiYocD1xLmhpZGRlbik6cT1MLmFjY2VzcyhhLCJmeHNob3ciLHt9KSxmJiYocS5oaWRkZW49IXApLHA/bihhKS5zaG93KCk6bC5kb25lKGZ1bmN0aW9uKCl7bihhKS5oaWRlKCl9KSxsLmRvbmUoZnVuY3Rpb24oKXt2YXIgYjtMLnJlbW92ZShhLCJmeHNob3ciKTtmb3IoYiBpbiBtKW4uc3R5bGUoYSxiLG1bYl0pfSk7Zm9yKGQgaW4gbSlnPVVhKHA/cVtkXTowLGQsbCksZCBpbiBxfHwocVtkXT1nLnN0YXJ0LHAmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9IndpZHRoIj09PWR8fCJoZWlnaHQiPT09ZD8xOjApKX19ZnVuY3Rpb24gV2EoYSxiKXt2YXIgYyxkLGUsZixnO2ZvcihjIGluIGEpaWYoZD1uLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLG4uaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9bi5jc3NIb29rc1tkXSxnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBYYShhLGIsYyl7dmFyIGQsZSxmPTAsZz1RYS5sZW5ndGgsaD1uLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGkuZWxlbX0pLGk9ZnVuY3Rpb24oKXtpZihlKXJldHVybiExO2Zvcih2YXIgYj1MYXx8U2EoKSxjPU1hdGgubWF4KDAsai5zdGFydFRpbWUrai5kdXJhdGlvbi1iKSxkPWMvai5kdXJhdGlvbnx8MCxmPTEtZCxnPTAsaT1qLnR3ZWVucy5sZW5ndGg7aT5nO2crKylqLnR3ZWVuc1tnXS5ydW4oZik7cmV0dXJuIGgubm90aWZ5V2l0aChhLFtqLGYsY10pLDE+ZiYmaT9jOihoLnJlc29sdmVXaXRoKGEsW2pdKSwhMSl9LGo9aC5wcm9taXNlKHtlbGVtOmEscHJvcHM6bi5leHRlbmQoe30sYiksb3B0czpuLmV4dGVuZCghMCx7c3BlY2lhbEVhc2luZzp7fX0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOkxhfHxTYSgpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bi5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj9oLnJlc29sdmVXaXRoKGEsW2osYl0pOmgucmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztmb3IoV2EoayxqLm9wdHMuc3BlY2lhbEVhc2luZyk7Zz5mO2YrKylpZihkPVFhW2ZdLmNhbGwoaixhLGssai5vcHRzKSlyZXR1cm4gZDtyZXR1cm4gbi5tYXAoayxVYSxqKSxuLmlzRnVuY3Rpb24oai5vcHRzLnN0YXJ0KSYmai5vcHRzLnN0YXJ0LmNhbGwoYSxqKSxuLmZ4LnRpbWVyKG4uZXh0ZW5kKGkse2VsZW06YSxhbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlfSkpLGoucHJvZ3Jlc3Moai5vcHRzLnByb2dyZXNzKS5kb25lKGoub3B0cy5kb25lLGoub3B0cy5jb21wbGV0ZSkuZmFpbChqLm9wdHMuZmFpbCkuYWx3YXlzKGoub3B0cy5hbHdheXMpfW4uQW5pbWF0aW9uPW4uZXh0ZW5kKFhhLHt0d2VlbmVyOmZ1bmN0aW9uKGEsYil7bi5pc0Z1bmN0aW9uKGEpPyhiPWEsYT1bIioiXSk6YT1hLnNwbGl0KCIgIik7Zm9yKHZhciBjLGQ9MCxlPWEubGVuZ3RoO2U+ZDtkKyspYz1hW2RdLFJhW2NdPVJhW2NdfHxbXSxSYVtjXS51bnNoaWZ0KGIpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtiP1FhLnVuc2hpZnQoYSk6UWEucHVzaChhKX19KSxuLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiYib2JqZWN0Ij09dHlwZW9mIGE/bi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxuLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIW4uaXNGdW5jdGlvbihiKSYmYn07cmV0dXJuIGQuZHVyYXRpb249bi5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIGQuZHVyYXRpb24/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIG4uZnguc3BlZWRzP24uZnguc3BlZWRzW2QuZHVyYXRpb25dOm4uZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1kLnF1ZXVlfHxkLnF1ZXVlPT09ITApJiYoZC5xdWV1ZT0iZngiKSxkLm9sZD1kLmNvbXBsZXRlLGQuY29tcGxldGU9ZnVuY3Rpb24oKXtuLmlzRnVuY3Rpb24oZC5vbGQpJiZkLm9sZC5jYWxsKHRoaXMpLGQucXVldWUmJm4uZGVxdWV1ZSh0aGlzLGQucXVldWUpfSxkfSxuLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihTKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uLmlzRW1wdHlPYmplY3QoYSksZj1uLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9WGEodGhpcyxuLmV4dGVuZCh7fSxhKSxmKTsoZXx8TC5nZXQodGhpcywiZmluaXNoIikpJiZiLnN0b3AoITApfTtyZXR1cm4gZy5maW5pc2g9ZyxlfHxmLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZi5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5zdG9wO2RlbGV0ZSBhLnN0b3AsYihjKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYz1iLGI9YSxhPXZvaWQgMCksYiYmYSE9PSExJiZ0aGlzLnF1ZXVlKGF8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYSsicXVldWVIb29rcyIsZj1uLnRpbWVycyxnPUwuZ2V0KHRoaXMpO2lmKGUpZ1tlXSYmZ1tlXS5zdG9wJiZkKGdbZV0pO2Vsc2UgZm9yKGUgaW4gZylnW2VdJiZnW2VdLnN0b3AmJlBhLnRlc3QoZSkmJmQoZ1tlXSk7Zm9yKGU9Zi5sZW5ndGg7ZS0tOylmW2VdLmVsZW0hPT10aGlzfHxudWxsIT1hJiZmW2VdLnF1ZXVlIT09YXx8KGZbZV0uYW5pbS5zdG9wKGMpLGI9ITEsZi5zcGxpY2UoZSwxKSk7KGJ8fCFjKSYmbi5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiBhIT09ITEmJihhPWF8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGM9TC5nZXQodGhpcyksZD1jW2ErInF1ZXVlIl0sZT1jW2ErInF1ZXVlSG9va3MiXSxmPW4udGltZXJzLGc9ZD9kLmxlbmd0aDowO2ZvcihjLmZpbmlzaD0hMCxuLnF1ZXVlKHRoaXMsYSxbXSksZSYmZS5zdG9wJiZlLnN0b3AuY2FsbCh0aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09dGhpcyYmZltiXS5xdWV1ZT09PWEmJihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7Zm9yKGI9MDtnPmI7YisrKWRbYl0mJmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBjLmZpbmlzaH0pfX0pLG4uZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmZuW2JdO24uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBudWxsPT1hfHwiYm9vbGVhbiI9PXR5cGVvZiBhP2MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShUYShiLCEwKSxhLGQsZSl9fSksbi5lYWNoKHtzbGlkZURvd246VGEoInNob3ciKSxzbGlkZVVwOlRhKCJoaWRlIiksc2xpZGVUb2dnbGU6VGEoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLG4udGltZXJzPVtdLG4uZngudGljaz1mdW5jdGlvbigpe3ZhciBhLGI9MCxjPW4udGltZXJzO2ZvcihMYT1uLm5vdygpO2I8Yy5sZW5ndGg7YisrKWE9Y1tiXSxhKCl8fGNbYl0hPT1hfHxjLnNwbGljZShiLS0sMSk7Yy5sZW5ndGh8fG4uZnguc3RvcCgpLExhPXZvaWQgMH0sbi5meC50aW1lcj1mdW5jdGlvbihhKXtuLnRpbWVycy5wdXNoKGEpLGEoKT9uLmZ4LnN0YXJ0KCk6bi50aW1lcnMucG9wKCl9LG4uZnguaW50ZXJ2YWw9MTMsbi5meC5zdGFydD1mdW5jdGlvbigpe01hfHwoTWE9c2V0SW50ZXJ2YWwobi5meC50aWNrLG4uZnguaW50ZXJ2YWwpKX0sbi5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChNYSksTWE9bnVsbH0sbi5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sbi5mbi5kZWxheT1mdW5jdGlvbihhLGIpe3JldHVybiBhPW4uZng/bi5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fCJmeCIsdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYj1sLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGM9Yi5hcHBlbmRDaGlsZChsLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTthLnR5cGU9ImNoZWNrYm94IixrLmNoZWNrT249IiIhPT1hLnZhbHVlLGsub3B0U2VsZWN0ZWQ9Yy5zZWxlY3RlZCxiLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWMuZGlzYWJsZWQsYT1sLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYS52YWx1ZT0idCIsYS50eXBlPSJyYWRpbyIsay5yYWRpb1ZhbHVlPSJ0Ij09PWEudmFsdWV9KCk7dmFyIFlhLFphLCRhPW4uZXhwci5hdHRySGFuZGxlO24uZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEoodGhpcyxuLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24ucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKGEmJjMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuIHR5cGVvZiBhLmdldEF0dHJpYnV0ZT09PVU/bi5wcm9wKGEsYixjKTooMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPWIudG9Mb3dlckNhc2UoKSxkPW4uYXR0ckhvb2tzW2JdfHwobi5leHByLm1hdGNoLmJvb2wudGVzdChiKT9aYTpZYSkpLAp2b2lkIDA9PT1jP2QmJiJnZXQiaW4gZCYmbnVsbCE9PShlPWQuZ2V0KGEsYikpP2U6KGU9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1lP3ZvaWQgMDplKTpudWxsIT09Yz9kJiYic2V0ImluIGQmJnZvaWQgMCE9PShlPWQuc2V0KGEsYyxiKSk/ZTooYS5zZXRBdHRyaWJ1dGUoYixjKyIiKSxjKTp2b2lkIG4ucmVtb3ZlQXR0cihhLGIpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT0wLGY9YiYmYi5tYXRjaChFKTtpZihmJiYxPT09YS5ub2RlVHlwZSl3aGlsZShjPWZbZSsrXSlkPW4ucHJvcEZpeFtjXXx8YyxuLmV4cHIubWF0Y2guYm9vbC50ZXN0KGMpJiYoYVtkXT0hMSksYS5yZW1vdmVBdHRyaWJ1dGUoYyl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWsucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm4ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19fSksWmE9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9uLnJlbW92ZUF0dHIoYSxjKTphLnNldEF0dHJpYnV0ZShjLGMpLGN9fSxuLmVhY2gobi5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oYSxiKXt2YXIgYz0kYVtiXXx8bi5maW5kLmF0dHI7JGFbYl09ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPSRhW2JdLCRhW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCwkYVtiXT1mKSxlfX0pO3ZhciBfYT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pO24uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEoodGhpcyxuLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW24ucHJvcEZpeFthXXx8YV19KX19KSxuLmV4dGVuZCh7cHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnPWEubm9kZVR5cGU7aWYoYSYmMyE9PWcmJjghPT1nJiYyIT09ZylyZXR1cm4gZj0xIT09Z3x8IW4uaXNYTUxEb2MoYSksZiYmKGI9bi5wcm9wRml4W2JdfHxiLGU9bi5wcm9wSG9va3NbYl0pLHZvaWQgMCE9PWM/ZSYmInNldCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6YVtiXT1jOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6YVtiXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8X2EudGVzdChhLm5vZGVOYW1lKXx8YS5ocmVmP2EudGFiSW5kZXg6LTF9fX19KSxrLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSxuLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe24ucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTt2YXIgYWI9L1tcdFxyXG5cZl0vZztuLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9InN0cmluZyI9PXR5cGVvZiBhJiZhLGk9MCxqPXRoaXMubGVuZ3RoO2lmKG4uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoaClmb3IoYj0oYXx8IiIpLm1hdGNoKEUpfHxbXTtqPmk7aSsrKWlmKGM9dGhpc1tpXSxkPTE9PT1jLm5vZGVUeXBlJiYoYy5jbGFzc05hbWU/KCIgIitjLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWIsIiAiKToiICIpKXtmPTA7d2hpbGUoZT1iW2YrK10pZC5pbmRleE9mKCIgIitlKyIgIik8MCYmKGQrPWUrIiAiKTtnPW4udHJpbShkKSxjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGg9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGFiLCIgIik6IiIpKXtmPTA7d2hpbGUoZT1iW2YrK10pd2hpbGUoZC5pbmRleE9mKCIgIitlKyIgIik+PTApZD1kLnJlcGxhY2UoIiAiK2UrIiAiLCIgIik7Zz1hP24udHJpbShkKToiIixjLmNsYXNzTmFtZSE9PWcmJihjLmNsYXNzTmFtZT1nKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBiJiYic3RyaW5nIj09PWM/Yj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3ZlQ2xhc3MoYSk6dGhpcy5lYWNoKG4uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihjKXtuKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9OmZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1jKXt2YXIgYixkPTAsZT1uKHRoaXMpLGY9YS5tYXRjaChFKXx8W107d2hpbGUoYj1mW2QrK10pZS5oYXNDbGFzcyhiKT9lLnJlbW92ZUNsYXNzKGIpOmUuYWRkQ2xhc3MoYil9ZWxzZShjPT09VXx8ImJvb2xlYW4iPT09YykmJih0aGlzLmNsYXNzTmFtZSYmTC5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxhPT09ITE/IiI6TC5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIgIithKyIgIixjPTAsZD10aGlzLmxlbmd0aDtkPmM7YysrKWlmKDE9PT10aGlzW2NdLm5vZGVUeXBlJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShhYiwiICIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGJiPS9cci9nO24uZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZD1uLmlzRnVuY3Rpb24oYSksdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBlOzE9PT10aGlzLm5vZGVUeXBlJiYoZT1kP2EuY2FsbCh0aGlzLGMsbih0aGlzKS52YWwoKSk6YSxudWxsPT1lP2U9IiI6Im51bWJlciI9PXR5cGVvZiBlP2UrPSIiOm4uaXNBcnJheShlKSYmKGU9bi5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjphKyIifSkpLGI9bi52YWxIb29rc1t0aGlzLnR5cGVdfHxuLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmInNldCJpbiBiJiZ2b2lkIDAhPT1iLnNldCh0aGlzLGUsInZhbHVlIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9bi52YWxIb29rc1tlLnR5cGVdfHxuLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmImdldCJpbiBiJiZ2b2lkIDAhPT0oYz1iLmdldChlLCJ2YWx1ZSIpKT9jOihjPWUudmFsdWUsInN0cmluZyI9PXR5cGVvZiBjP2MucmVwbGFjZShiYiwiIik6bnVsbD09Yz8iIjpjKX19fSksbi5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1uLmZpbmQuYXR0cihhLCJ2YWx1ZSIpO3JldHVybiBudWxsIT1iP2I6bi50cmltKG4udGV4dChhKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPSJzZWxlY3Qtb25lIj09PWEudHlwZXx8MD5lLGc9Zj9udWxsOltdLGg9Zj9lKzE6ZC5sZW5ndGgsaT0wPmU/aDpmP2U6MDtoPmk7aSsrKWlmKGM9ZFtpXSwhKCFjLnNlbGVjdGVkJiZpIT09ZXx8KGsub3B0RGlzYWJsZWQ/Yy5kaXNhYmxlZDpudWxsIT09Yy5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpfHxjLnBhcmVudE5vZGUuZGlzYWJsZWQmJm4ubm9kZU5hbWUoYy5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYoYj1uKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bi5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0pZD1lW2ddLChkLnNlbGVjdGVkPW4uaW5BcnJheShkLnZhbHVlLGYpPj0wKSYmKGM9ITApO3JldHVybiBjfHwoYS5zZWxlY3RlZEluZGV4PS0xKSxmfX19fSksbi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7bi52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uaXNBcnJheShiKT9hLmNoZWNrZWQ9bi5pbkFycmF5KG4oYSkudmFsKCksYik+PTA6dm9pZCAwfX0say5jaGVja09ufHwobi52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmEudmFsdWV9KX0pLG4uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG4uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGF8fCIqKiIsYyl9fSk7dmFyIGNiPW4ubm93KCksZGI9L1w/LztuLnBhcnNlSlNPTj1mdW5jdGlvbihhKXtyZXR1cm4gSlNPTi5wYXJzZShhKyIiKX0sbi5wYXJzZVhNTD1mdW5jdGlvbihhKXt2YXIgYixjO2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7dHJ5e2M9bmV3IERPTVBhcnNlcixiPWMucGFyc2VGcm9tU3RyaW5nKGEsInRleHQveG1sIil9Y2F0Y2goZCl7Yj12b2lkIDB9cmV0dXJuKCFifHxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCkmJm4uZXJyb3IoIkludmFsaWQgWE1MOiAiK2EpLGJ9O3ZhciBlYj0vIy4qJC8sZmI9LyhbPyZdKV89W14mXSovLGdiPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20saGI9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8saWI9L14oPzpHRVR8SEVBRCkkLyxqYj0vXlwvXC8vLGtiPS9eKFtcdy4rLV0rOikoPzpcL1wvKD86W15cLz8jXSpAfCkoW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLGxiPXt9LG1iPXt9LG5iPSIqLyIuY29uY2F0KCIqIiksb2I9YS5sb2NhdGlvbi5ocmVmLHBiPWtiLmV4ZWMob2IudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIHFiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpeyJzdHJpbmciIT10eXBlb2YgYiYmKGM9YixiPSIqIik7dmFyIGQsZT0wLGY9Yi50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbXTtpZihuLmlzRnVuY3Rpb24oYykpd2hpbGUoZD1mW2UrK10pIisiPT09ZFswXT8oZD1kLnNsaWNlKDEpfHwiKiIsKGFbZF09YVtkXXx8W10pLnVuc2hpZnQoYykpOihhW2RdPWFbZF18fFtdKS5wdXNoKGMpfX1mdW5jdGlvbiByYihhLGIsYyxkKXt2YXIgZT17fSxmPWE9PT1tYjtmdW5jdGlvbiBnKGgpe3ZhciBpO3JldHVybiBlW2hdPSEwLG4uZWFjaChhW2hdfHxbXSxmdW5jdGlvbihhLGgpe3ZhciBqPWgoYixjLGQpO3JldHVybiJzdHJpbmciIT10eXBlb2Yganx8Znx8ZVtqXT9mPyEoaT1qKTp2b2lkIDA6KGIuZGF0YVR5cGVzLnVuc2hpZnQoaiksZyhqKSwhMSl9KSxpfXJldHVybiBnKGIuZGF0YVR5cGVzWzBdKXx8IWVbIioiXSYmZygiKiIpfWZ1bmN0aW9uIHNiKGEsYil7dmFyIGMsZCxlPW4uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoYyBpbiBiKXZvaWQgMCE9PWJbY10mJigoZVtjXT9hOmR8fChkPXt9KSlbY109YltjXSk7cmV0dXJuIGQmJm4uZXh0ZW5kKCEwLGEsZCksYX1mdW5jdGlvbiB0YihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNvbnRlbnRzLGk9YS5kYXRhVHlwZXM7d2hpbGUoIioiPT09aVswXSlpLnNoaWZ0KCksdm9pZCAwPT09ZCYmKGQ9YS5taW1lVHlwZXx8Yi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKGQpZm9yKGUgaW4gaClpZihoW2VdJiZoW2VdLnRlc3QoZCkpe2kudW5zaGlmdChlKTticmVha31pZihpWzBdaW4gYylmPWlbMF07ZWxzZXtmb3IoZSBpbiBjKXtpZighaVswXXx8YS5jb252ZXJ0ZXJzW2UrIiAiK2lbMF1dKXtmPWU7YnJlYWt9Z3x8KGc9ZSl9Zj1mfHxnfXJldHVybiBmPyhmIT09aVswXSYmaS51bnNoaWZ0KGYpLGNbZl0pOnZvaWQgMH1mdW5jdGlvbiB1YihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9e30saz1hLmRhdGFUeXBlcy5zbGljZSgpO2lmKGtbMV0pZm9yKGcgaW4gYS5jb252ZXJ0ZXJzKWpbZy50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbZ107Zj1rLnNoaWZ0KCk7d2hpbGUoZilpZihhLnJlc3BvbnNlRmllbGRzW2ZdJiYoY1thLnJlc3BvbnNlRmllbGRzW2ZdXT1iKSwhaSYmZCYmYS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSksaT1mLGY9ay5zaGlmdCgpKWlmKCIqIj09PWYpZj1pO2Vsc2UgaWYoIioiIT09aSYmaSE9PWYpe2lmKGc9altpKyIgIitmXXx8alsiKiAiK2ZdLCFnKWZvcihlIGluIGopaWYoaD1lLnNwbGl0KCIgIiksaFsxXT09PWYmJihnPWpbaSsiICIraFswXV18fGpbIiogIitoWzBdXSkpe2c9PT0hMD9nPWpbZV06altlXSE9PSEwJiYoZj1oWzBdLGsudW5zaGlmdChoWzFdKSk7YnJlYWt9aWYoZyE9PSEwKWlmKGcmJmFbInRocm93cyJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6Zz9sOiJObyBjb252ZXJzaW9uIGZyb20gIitpKyIgdG8gIitmfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOmJ9fW4uZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpvYix0eXBlOiJHRVQiLGlzTG9jYWw6aGIudGVzdChwYlsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpuYix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOm4ucGFyc2VKU09OLCJ0ZXh0IHhtbCI6bi5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI/c2Ioc2IoYSxuLmFqYXhTZXR0aW5ncyksYik6c2Iobi5hamF4U2V0dGluZ3MsYSl9LGFqYXhQcmVmaWx0ZXI6cWIobGIpLGFqYXhUcmFuc3BvcnQ6cWIobWIpLGFqYXg6ZnVuY3Rpb24oYSxiKXsib2JqZWN0Ij09dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGI9Ynx8e307dmFyIGMsZCxlLGYsZyxoLGksaixrPW4uYWpheFNldHVwKHt9LGIpLGw9ay5jb250ZXh0fHxrLG09ay5jb250ZXh0JiYobC5ub2RlVHlwZXx8bC5qcXVlcnkpP24obCk6bi5ldmVudCxvPW4uRGVmZXJyZWQoKSxwPW4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHE9ay5zdGF0dXNDb2RlfHx7fSxyPXt9LHM9e30sdD0wLHU9ImNhbmNlbGVkIix2PXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoMj09PXQpe2lmKCFmKXtmPXt9O3doaWxlKGI9Z2IuZXhlYyhlKSlmW2JbMV0udG9Mb3dlckNhc2UoKV09YlsyXX1iPWZbYS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09Yj9udWxsOmJ9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dD9lOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHR8fChhPXNbY109c1tjXXx8YSxyW2FdPWIpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHR8fChrLm1pbWVUeXBlPWEpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoYSlpZigyPnQpZm9yKGIgaW4gYSlxW2JdPVtxW2JdLGFbYl1dO2Vsc2Ugdi5hbHdheXMoYVt2LnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXt2YXIgYj1hfHx1O3JldHVybiBjJiZjLmFib3J0KGIpLHgoMCxiKSx0aGlzfX07aWYoby5wcm9taXNlKHYpLmNvbXBsZXRlPXAuYWRkLHYuc3VjY2Vzcz12LmRvbmUsdi5lcnJvcj12LmZhaWwsay51cmw9KChhfHxrLnVybHx8b2IpKyIiKS5yZXBsYWNlKGViLCIiKS5yZXBsYWNlKGpiLHBiWzFdKyIvLyIpLGsudHlwZT1iLm1ldGhvZHx8Yi50eXBlfHxrLm1ldGhvZHx8ay50eXBlLGsuZGF0YVR5cGVzPW4udHJpbShrLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2goRSl8fFsiIl0sbnVsbD09ay5jcm9zc0RvbWFpbiYmKGg9a2IuZXhlYyhrLnVybC50b0xvd2VyQ2FzZSgpKSxrLmNyb3NzRG9tYWluPSEoIWh8fGhbMV09PT1wYlsxXSYmaFsyXT09PXBiWzJdJiYoaFszXXx8KCJodHRwOiI9PT1oWzFdPyI4MCI6IjQ0MyIpKT09PShwYlszXXx8KCJodHRwOiI9PT1wYlsxXT8iODAiOiI0NDMiKSkpKSxrLmRhdGEmJmsucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygay5kYXRhJiYoay5kYXRhPW4ucGFyYW0oay5kYXRhLGsudHJhZGl0aW9uYWwpKSxyYihsYixrLGIsdiksMj09PXQpcmV0dXJuIHY7aT1uLmV2ZW50JiZrLmdsb2JhbCxpJiYwPT09bi5hY3RpdmUrKyYmbi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxrLnR5cGU9ay50eXBlLnRvVXBwZXJDYXNlKCksay5oYXNDb250ZW50PSFpYi50ZXN0KGsudHlwZSksZD1rLnVybCxrLmhhc0NvbnRlbnR8fChrLmRhdGEmJihkPWsudXJsKz0oZGIudGVzdChkKT8iJiI6Ij8iKStrLmRhdGEsZGVsZXRlIGsuZGF0YSksay5jYWNoZT09PSExJiYoay51cmw9ZmIudGVzdChkKT9kLnJlcGxhY2UoZmIsIiQxXz0iK2NiKyspOmQrKGRiLnRlc3QoZCk/IiYiOiI/IikrIl89IitjYisrKSksay5pZk1vZGlmaWVkJiYobi5sYXN0TW9kaWZpZWRbZF0mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLG4ubGFzdE1vZGlmaWVkW2RdKSxuLmV0YWdbZF0mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsbi5ldGFnW2RdKSksKGsuZGF0YSYmay5oYXNDb250ZW50JiZrLmNvbnRlbnRUeXBlIT09ITF8fGIuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsay5jb250ZW50VHlwZSksdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGsuZGF0YVR5cGVzWzBdJiZrLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dP2suYWNjZXB0c1trLmRhdGFUeXBlc1swXV0rKCIqIiE9PWsuZGF0YVR5cGVzWzBdPyIsICIrbmIrIjsgcT0wLjAxIjoiIik6ay5hY2NlcHRzWyIqIl0pO2ZvcihqIGluIGsuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIoaixrLmhlYWRlcnNbal0pO2lmKGsuYmVmb3JlU2VuZCYmKGsuYmVmb3JlU2VuZC5jYWxsKGwsdixrKT09PSExfHwyPT09dCkpcmV0dXJuIHYuYWJvcnQoKTt1PSJhYm9ydCI7Zm9yKGogaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pdltqXShrW2pdKTtpZihjPXJiKG1iLGssYix2KSl7di5yZWFkeVN0YXRlPTEsaSYmbS50cmlnZ2VyKCJhamF4U2VuZCIsW3Ysa10pLGsuYXN5bmMmJmsudGltZW91dD4wJiYoZz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydCgidGltZW91dCIpfSxrLnRpbWVvdXQpKTt0cnl7dD0xLGMuc2VuZChyLHgpfWNhdGNoKHcpe2lmKCEoMj50KSl0aHJvdyB3O3goLTEsdyl9fWVsc2UgeCgtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24geChhLGIsZixoKXt2YXIgaixyLHMsdSx3LHg9YjsyIT09dCYmKHQ9MixnJiZjbGVhclRpbWVvdXQoZyksYz12b2lkIDAsZT1ofHwiIix2LnJlYWR5U3RhdGU9YT4wPzQ6MCxqPWE+PTIwMCYmMzAwPmF8fDMwND09PWEsZiYmKHU9dGIoayx2LGYpKSx1PXViKGssdSx2LGopLGo/KGsuaWZNb2RpZmllZCYmKHc9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJihuLmxhc3RNb2RpZmllZFtkXT13KSx3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx3JiYobi5ldGFnW2RdPXcpKSwyMDQ9PT1hfHwiSEVBRCI9PT1rLnR5cGU/eD0ibm9jb250ZW50IjozMDQ9PT1hP3g9Im5vdG1vZGlmaWVkIjooeD11LnN0YXRlLHI9dS5kYXRhLHM9dS5lcnJvcixqPSFzKSk6KHM9eCwoYXx8IXgpJiYoeD0iZXJyb3IiLDA+YSYmKGE9MCkpKSx2LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0oYnx8eCkrIiIsaj9vLnJlc29sdmVXaXRoKGwsW3IseCx2XSk6by5yZWplY3RXaXRoKGwsW3YseCxzXSksdi5zdGF0dXNDb2RlKHEpLHE9dm9pZCAwLGkmJm0udHJpZ2dlcihqPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3YsayxqP3I6c10pLHAuZmlyZVdpdGgobCxbdix4XSksaSYmKG0udHJpZ2dlcigiYWpheENvbXBsZXRlIixbdixrXSksLS1uLmFjdGl2ZXx8bi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIHZ9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLmdldChhLGIsYywianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5nZXQoYSx2b2lkIDAsYiwic2NyaXB0Iil9fSksbi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYil7bltiXT1mdW5jdGlvbihhLGMsZCxlKXtyZXR1cm4gbi5pc0Z1bmN0aW9uKGMpJiYoZT1lfHxkLGQ9YyxjPXZvaWQgMCksbi5hamF4KHt1cmw6YSx0eXBlOmIsZGF0YVR5cGU6ZSxkYXRhOmMsc3VjY2VzczpkfSl9fSksbi5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbi5hamF4KHt1cmw6YSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfSxuLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gbi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk6KHRoaXNbMF0mJihiPW4oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0RWxlbWVudENoaWxkKWE9YS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKG4uaXNGdW5jdGlvbihhKT9mdW5jdGlvbihiKXtuKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9OmZ1bmN0aW9uKCl7dmFyIGI9bih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1uLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG4odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pLG4uZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTB9LG4uZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIW4uZXhwci5maWx0ZXJzLmhpZGRlbihhKX07dmFyIHZiPS8lMjAvZyx3Yj0vXFtcXSQvLHhiPS9ccj9cbi9nLHliPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSx6Yj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24gQWIoYSxiLGMsZCl7dmFyIGU7aWYobi5pc0FycmF5KGIpKW4uZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8d2IudGVzdChhKT9kKGEsZSk6QWIoYSsiWyIrKCJvYmplY3QiPT10eXBlb2YgZT9iOiIiKSsiXSIsZSxjLGQpfSk7ZWxzZSBpZihjfHwib2JqZWN0IiE9PW4udHlwZShiKSlkKGEsYik7ZWxzZSBmb3IoZSBpbiBiKUFiKGErIlsiK2UrIl0iLGJbZV0sYyxkKX1uLnBhcmFtPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPWZ1bmN0aW9uKGEsYil7Yj1uLmlzRnVuY3Rpb24oYik/YigpOm51bGw9PWI/IiI6YixkW2QubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiKX07aWYodm9pZCAwPT09YiYmKGI9bi5hamF4U2V0dGluZ3MmJm4uYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxuLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhbi5pc1BsYWluT2JqZWN0KGEpKW4uZWFjaChhLGZ1bmN0aW9uKCl7ZSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihjIGluIGEpQWIoYyxhW2NdLGIsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UodmIsIisiKX0sbi5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBuLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9bi5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGE/bi5tYWtlQXJyYXkoYSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhbih0aGlzKS5pcygiOmRpc2FibGVkIikmJnpiLnRlc3QodGhpcy5ub2RlTmFtZSkmJiF5Yi50ZXN0KGEpJiYodGhpcy5jaGVja2VkfHwhVC50ZXN0KGEpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPW4odGhpcykudmFsKCk7cmV0dXJuIG51bGw9PWM/bnVsbDpuLmlzQXJyYXkoYyk/bi5tYXAoYyxmdW5jdGlvbihhKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKHhiLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZSh4YiwiXHJcbiIpfX0pLmdldCgpfX0pLG4uYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGEpe319O3ZhciBCYj0wLENiPXt9LERiPXswOjIwMCwxMjIzOjIwNH0sRWI9bi5hamF4U2V0dGluZ3MueGhyKCk7YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIENiKUNiW2FdKCl9KSxrLmNvcnM9ISFFYiYmIndpdGhDcmVkZW50aWFscyJpbiBFYixrLmFqYXg9RWI9ISFFYixuLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGsuY29yc3x8RWImJiFhLmNyb3NzRG9tYWluP3tzZW5kOmZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hLnhocigpLGc9KytCYjtpZihmLm9wZW4oYS50eXBlLGEudXJsLGEuYXN5bmMsYS51c2VybmFtZSxhLnBhc3N3b3JkKSxhLnhockZpZWxkcylmb3IoZSBpbiBhLnhockZpZWxkcylmW2VdPWEueGhyRmllbGRzW2VdO2EubWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZSYmZi5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLGEuY3Jvc3NEb21haW58fGNbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoZSBpbiBjKWYuc2V0UmVxdWVzdEhlYWRlcihlLGNbZV0pO2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7YiYmKGRlbGV0ZSBDYltnXSxiPWYub25sb2FkPWYub25lcnJvcj1udWxsLCJhYm9ydCI9PT1hP2YuYWJvcnQoKToiZXJyb3IiPT09YT9kKGYuc3RhdHVzLGYuc3RhdHVzVGV4dCk6ZChEYltmLnN0YXR1c118fGYuc3RhdHVzLGYuc3RhdHVzVGV4dCwic3RyaW5nIj09dHlwZW9mIGYucmVzcG9uc2VUZXh0P3t0ZXh0OmYucmVzcG9uc2VUZXh0fTp2b2lkIDAsZi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sZi5vbmxvYWQ9YigpLGYub25lcnJvcj1iKCJlcnJvciIpLGI9Q2JbZ109YigiYWJvcnQiKTt0cnl7Zi5zZW5kKGEuaGFzQ29udGVudCYmYS5kYXRhfHxudWxsKX1jYXRjaChoKXtpZihiKXRocm93IGh9fSxhYm9ydDpmdW5jdGlvbigpe2ImJmIoKX19OnZvaWQgMH0pLG4uYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovKD86amF2YXxlY21hKXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ2xvYmFsRXZhbChhKSxhfX19KSxuLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oYSl7dm9pZCAwPT09YS5jYWNoZSYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIpfSksbi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBiLGM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZCxlKXtiPW4oIjxzY3JpcHQ+IikucHJvcCh7YXN5bmM6ITAsY2hhcnNldDphLnNjcmlwdENoYXJzZXQsc3JjOmEudXJsfSkub24oImxvYWQgZXJyb3IiLGM9ZnVuY3Rpb24oYSl7Yi5yZW1vdmUoKSxjPW51bGwsYSYmZSgiZXJyb3IiPT09YS50eXBlPzQwNDoyMDAsYS50eXBlKX0pLGwuaGVhZC5hcHBlbmRDaGlsZChiWzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKCl9fX19KTt2YXIgRmI9W10sR2I9Lyg9KVw/KD89JnwkKXxcP1w/LztuLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGE9RmIucG9wKCl8fG4uZXhwYW5kbysiXyIrY2IrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlLGYsZyxoPWIuanNvbnAhPT0hMSYmKEdiLnRlc3QoYi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgYi5kYXRhJiYhKGIuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmR2IudGVzdChiLmRhdGEpJiYiZGF0YSIpO3JldHVybiBofHwianNvbnAiPT09Yi5kYXRhVHlwZXNbMF0/KGU9Yi5qc29ucENhbGxiYWNrPW4uaXNGdW5jdGlvbihiLmpzb25wQ2FsbGJhY2spP2IuanNvbnBDYWxsYmFjaygpOmIuanNvbnBDYWxsYmFjayxoP2JbaF09YltoXS5yZXBsYWNlKEdiLCIkMSIrZSk6Yi5qc29ucCE9PSExJiYoYi51cmwrPShkYi50ZXN0KGIudXJsKT8iJiI6Ij8iKStiLmpzb25wKyI9IitlKSxiLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlKyIgd2FzIG5vdCBjYWxsZWQiKSxnWzBdfSxiLmRhdGFUeXBlc1swXT0ianNvbiIsZj1hW2VdLGFbZV09ZnVuY3Rpb24oKXtnPWFyZ3VtZW50c30sZC5hbHdheXMoZnVuY3Rpb24oKXthW2VdPWYsYltlXSYmKGIuanNvbnBDYWxsYmFjaz1jLmpzb25wQ2FsbGJhY2ssRmIucHVzaChlKSksZyYmbi5pc0Z1bmN0aW9uKGYpJiZmKGdbMF0pLGc9Zj12b2lkIDB9KSwic2NyaXB0Iik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHwic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgYiYmKGM9YixiPSExKSxiPWJ8fGw7dmFyIGQ9di5leGVjKGEpLGU9IWMmJltdO3JldHVybiBkP1tiLmNyZWF0ZUVsZW1lbnQoZFsxXSldOihkPW4uYnVpbGRGcmFnbWVudChbYV0sYixlKSxlJiZlLmxlbmd0aCYmbihlKS5yZW1vdmUoKSxuLm1lcmdlKFtdLGQuY2hpbGROb2RlcykpfTt2YXIgSGI9bi5mbi5sb2FkO24uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoInN0cmluZyIhPXR5cGVvZiBhJiZIYilyZXR1cm4gSGIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkLGUsZixnPXRoaXMsaD1hLmluZGV4T2YoIiAiKTtyZXR1cm4gaD49MCYmKGQ9bi50cmltKGEuc2xpY2UoaCkpLGE9YS5zbGljZSgwLGgpKSxuLmlzRnVuY3Rpb24oYik/KGM9YixiPXZvaWQgMCk6YiYmIm9iamVjdCI9PXR5cGVvZiBiJiYoZT0iUE9TVCIpLGcubGVuZ3RoPjAmJm4uYWpheCh7dXJsOmEsdHlwZTplLGRhdGFUeXBlOiJodG1sIixkYXRhOmJ9KS5kb25lKGZ1bmN0aW9uKGEpe2Y9YXJndW1lbnRzLGcuaHRtbChkP24oIjxkaXY+IikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuY29tcGxldGUoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goYyxmfHxbYS5yZXNwb25zZVRleHQsYixhXSl9KSx0aGlzfSxuLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxuLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbi5ncmVwKG4udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTt2YXIgSWI9YS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gSmIoYSl7cmV0dXJuIG4uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZSYmYS5kZWZhdWx0Vmlld31uLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsInBvc2l0aW9uIiksbD1uKGEpLG09e307InN0YXRpYyI9PT1rJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLCJ0b3AiKSxpPW4uY3NzKGEsImxlZnQiKSxqPSgiYWJzb2x1dGUiPT09a3x8ImZpeGVkIj09PWspJiYoZitpKS5pbmRleE9mKCJhdXRvIik+LTEsaj8oZD1sLnBvc2l0aW9uKCksZz1kLnRvcCxlPWQubGVmdCk6KGc9cGFyc2VGbG9hdChmKXx8MCxlPXBhcnNlRmxvYXQoaSl8fDApLG4uaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxoKSksbnVsbCE9Yi50b3AmJihtLnRvcD1iLnRvcC1oLnRvcCtnKSxudWxsIT1iLmxlZnQmJihtLmxlZnQ9Yi5sZWZ0LWgubGVmdCtlKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxtKTpsLmNzcyhtKX19LG4uZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oYSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09YT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtuLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGIsYyxkPXRoaXNbMF0sZT17dG9wOjAsbGVmdDowfSxmPWQmJmQub3duZXJEb2N1bWVudDtpZihmKXJldHVybiBiPWYuZG9jdW1lbnRFbGVtZW50LG4uY29udGFpbnMoYixkKT8odHlwZW9mIGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09VSYmKGU9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksYz1KYihmKSx7dG9wOmUudG9wK2MucGFnZVlPZmZzZXQtYi5jbGllbnRUb3AsbGVmdDplLmxlZnQrYy5wYWdlWE9mZnNldC1iLmNsaWVudExlZnR9KTplfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBhLGIsYz10aGlzWzBdLGQ9e3RvcDowLGxlZnQ6MH07cmV0dXJuImZpeGVkIj09PW4uY3NzKGMsInBvc2l0aW9uIik/Yj1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihhPXRoaXMub2Zmc2V0UGFyZW50KCksYj10aGlzLm9mZnNldCgpLG4ubm9kZU5hbWUoYVswXSwiaHRtbCIpfHwoZD1hLm9mZnNldCgpKSxkLnRvcCs9bi5jc3MoYVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxkLmxlZnQrPW4uY3NzKGFbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOmIudG9wLWQudG9wLW4uY3NzKGMsIm1hcmdpblRvcCIsITApLGxlZnQ6Yi5sZWZ0LWQubGVmdC1uLmNzcyhjLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fEliO3doaWxlKGEmJiFuLm5vZGVOYW1lKGEsImh0bWwiKSYmInN0YXRpYyI9PT1uLmNzcyhhLCJwb3NpdGlvbiIpKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF8fElifSl9fSksbi5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGIsYyl7dmFyIGQ9InBhZ2VZT2Zmc2V0Ij09PWM7bi5mbltiXT1mdW5jdGlvbihlKXtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKGIsZSxmKXt2YXIgZz1KYihiKTtyZXR1cm4gdm9pZCAwPT09Zj9nP2dbY106YltlXTp2b2lkKGc/Zy5zY3JvbGxUbyhkP2EucGFnZVhPZmZzZXQ6ZixkP2Y6YS5wYWdlWU9mZnNldCk6YltlXT1mKX0sYixlLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksbi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT15YShrLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz8oYz14YShhLGIpLHZhLnRlc3QoYyk/bihhKS5wb3NpdGlvbigpW2JdKyJweCI6Yyk6dm9pZCAwfSl9KSxuLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLGIpe24uZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpiLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24oYyxkKXtuLmZuW2RdPWZ1bmN0aW9uKGQsZSl7dmFyIGY9YXJndW1lbnRzLmxlbmd0aCYmKGN8fCJib29sZWFuIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gSih0aGlzLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZTtyZXR1cm4gbi5pc1dpbmRvdyhiKT9iLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbInNjcm9sbCIrYV0sZVsic2Nyb2xsIithXSxiLmJvZHlbIm9mZnNldCIrYV0sZVsib2Zmc2V0IithXSxlWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09ZD9uLmNzcyhiLGMsZyk6bi5zdHlsZShiLGMsZCxnKX0sYixmP2Q6dm9pZCAwLGYsbnVsbCl9fSl9KSxuLmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LG4uZm4uYW5kU2VsZj1uLmZuLmFkZEJhY2ssImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgS2I9YS5qUXVlcnksTGI9YS4kO3JldHVybiBuLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oYil7cmV0dXJuIGEuJD09PW4mJihhLiQ9TGIpLGImJmEualF1ZXJ5PT09biYmKGEualF1ZXJ5PUtiKSxufSx0eXBlb2YgYj09PVUmJihhLmpRdWVyeT1hLiQ9biksbn0pOwo="}},"time_used":338,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":338,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"at.alicdn.com/t/font_2302506_w05z3emunp.css","fqdn":"at.alicdn.com","domain":"alicdn.com","tld":"com"},"ip":{"addr":"","port":0,"asn":0,"as":"","country":"","country_code":"zz"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.551Z","timestamp":1785149590551,"http_version":"","security_state":"","security_info":null,"request":{"raw":"GET /t/font_2302506_w05z3emunp.css HTTP/1.1\r\nHost: at.alicdn.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-Fetch-Storage-Access: none\r\nSec-GPC: 1\r\nConnection: keep-alive\r\nReferer: https://global-cryptocurrencies.com/\r\nSec-Fetch-Dest: style\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":"","headers":null,"cookies":null,"status_code":"","status_text":"","fingerprints":null,"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-08-07T09:07:10.188554Z","times_seen":17758850,"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":null,"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/css/chunk-vendors.02c7c039.css","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"stylesheet","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.555Z","timestamp":1785149590555,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/css/chunk-vendors.02c7c039.css HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: style\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=0\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\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: text/css\r\nlast-modified: Fri, 14 Jan 2022 14:20:42 GMT\r\nvary: Accept-Encoding\r\netag: W/\"61e186ba-36e29\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\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":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]}],"data":{"size":224809,"size_decoded":38945,"mime_type":"text/css","magic":"ASCII text, with very long lines (65536), with no line terminators","md5":"b47fe3afc9eb7dfbcb84a95a7a02d4bd","sha1":"058757d4e170924e2edf9f00581b4d65ec2222b6","sha256":"19a99de6d66a6d5a9e2eab3c12b12e307a9faaaf492e4704bfc4a40373025b7f","sha512":"d589a648e5876880af64982e7cb48e720b63986416a72ce88716dcc21d51b83cf25fdc977ebc95f84fbd1ad15318ea1e766d61846ae9bae4b87d53a1e1da6168","ssdeep":"1536:R6vASf65WCXkM28Y7SrW3YeWXA1u9w4HCe/l4mAgW9tME+64A8O6iZkJgYu8e2sr:R6v7f65WCXkVyX6qkwmXtQVTS/","tlshash":"9024b5109b172437622bdbad74c0ba896f24c363d8735b2bfd95780cc6e64991227e1f","first_seen":"2023-11-15T15:08:39Z","last_seen":"2026-07-27T10:54:16.508742Z","times_seen":8,"resource_available":false,"data":"QGZvbnQtZmFjZXtmb250LWZhbWlseTpzd2lwZXItaWNvbnM7c3JjOnVybCgiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUFaZ0FCQUFBQUFBREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUdSQUFBQUJvQUFBQWNpNnFIa1VkRVJVWUFBQVdnQUFBQUl3QUFBQ1FBWUFCWFIxQlBVd0FBQmhRQUFBQXVBQUFBTnVBWTcreEhVMVZDQUFBRnhBQUFBRkFBQUFCbTJmUGN6VTlUTHpJQUFBSGNBQUFBU2dBQUFHQlA5VjVSWTIxaGNBQUFBa1FBQUFDSUFBQUJZdDZGMGNCamRuUWdBQUFDekFBQUFBUUFBQUFFQUJFQlJHZGhjM0FBQUFXWUFBQUFDQUFBQUFqLy93QURaMng1WmdBQUF5d0FBQURNQUFBRDJNSHRyeVZvWldGa0FBQUJiQUFBQURBQUFBQTJFMitlb1dob1pXRUFBQUdjQUFBQUh3QUFBQ1FDOWdEemFHMTBlQUFBQWlnQUFBQVpBQUFBcmdKa0FCRnNiMk5oQUFBQzBBQUFBRm9BQUFCYUZRQVVHRzFoZUhBQUFBRzhBQUFBSHdBQUFDQUFjQUJBYm1GdFpRQUFBL2dBQUFFNUFBQUNYdkZkQndsd2IzTjBBQUFGTkFBQUFHSUFBQUNFNXM3NGhYamFZMkJrWUdBQVlwZjVIdS9qK1cyK01uQXpNWURBemFYNlFqRDYvNC8vQnhqNUdBOEF1UndNWUdrQVB5d0wxM2phWTJCa1lHQTg4UDhBZ3g0aisvOGZRRFlmQTFBRUJXZ0RBSUIyQk9vQWVOcGpZR1JnWU5CaDRHZGdZZ0FCRU1uSUFCSnpZTkFEQ1FBQUNXZ0FzUUI0Mm1OZ1lmekNPSUdCbFlHQjBZY3hqWUdCd1IxS2YyV1FaR2hoWUdCaVlHVm1nQUZHQmlRUWtPYWF3dERBb01CUXhYamcvd0VHUGNZRERBNHdOVUEyQ0Nnd3NBQUFPNEVMNmdBQWVOcGoyTTBneUFBQ3F4Z0dOV0JrWjJENC93TUEreGtEZGdBQUFIamFZMkJnWUdhQVlCa0dSZ1lRaUFIeUdNRjhGZ1lISU0zRHdNSEFCR1FyTU9neVdETEVNMVQ5L3c4VUJmRU1nTHpFLy8vL1AvNS8vZi9WL3h2K3I0ZWFBQWVNYkF4d0lVWW1JTUhFZ0tZQVlqVWNzREF3c0xLeGMzQnljZlB3OGpFUUEvZ1pCQVNGaEVWRXhjUWxKS1drWldUbDVCVVVsWlJWVk5YVU5UUVpCZ01BQU1SK0UrZ0FFUUZFQUFBQUtnQXFBQ29BTkFBK0FFZ0FVZ0JjQUdZQWNBQjZBSVFBamdDWUFLSUFyQUMyQU1BQXlnRFVBTjRBNkFEeUFQd0JCZ0VRQVJvQkpBRXVBVGdCUWdGTUFWWUJZQUZxQVhRQmZnR0lBWklCbkFHbUFiSUJ6Z0hzQUFCNDJ1Mk5NUTZDVUF5R1c1Njh4OUFuZVlZZ200TUpiaEtGYUV4SU9BVlg4QXBld1N0NEJpYzRBZmVBaWQzVk9CaXhEeGZQWUV6YTVPK1hmaTA0WUFEZ2dpVUlVTEN1RUpLOFZoTzRiU3ZwZG5rdEhJNVFDWXRkaTJzbDhablhhSGxxVXJOS3pkS2NUOGNqbHErcndaU3ZJVmN6TmllenNmblAvdXpubWZQRkJOT0RNMks3TVRRNDVZRUFacUdQODFBbUdHY0YzaVBxT29wMHIxU1BUYVRiVmtmVWU0SFhqOTd3WUUreU53V1l4d1d1NHYxdWdXSGdvM1MxWGRaRVZxV003RVQwY2ZuTEd4V2ZrZ1I0Mm8yUHZXckRNQlNGai9JSExhRjB6S2pSZ2RpVk13U2NOUkFvV1VvSDc4WTJpY0IveUlZMDlBbjZBSDJCZHUvVUIreXhvcFlzaFFpRXZudnUwZFVSZ0R0OFFlQzhQRHc3RnBqaTNmRUE0ei9QRUo2WU9CNWhLaDRkajNFdlhoeFBxSC9TS1VZM3JKN3NyWjRGWm5oMVBNQXRQaHdQNmZsMlBNSk1QRGdlUTRyWThZVDZHemFvMGVBRUE0MDlEdWdnbVRuRm5PY1NDaUVpTE1neENpVEk2Q3E1RFpVZDNRbXAxMHZPMExhTFRkMmNqTjRmT3VtbGM3bFVZYlNRY1pGa3V0Ukc3ZzZKS1pLeTBSbWRMWTY4MENEbkVKK1VNa3BGRmUxUk43bnhkVnBYckM0YVR0bmF1ck9uWWVyY1pnMllWbUxOL2QvZ2N6ZkVpbXJFL2ZzL2JPdXEyOVptbjh0bG9PUmFYZ1pnR2E3OHlPOS9jblhtMkJwYUd2cTI1RHY5UzRFOSs1U0ljOVBxdXBKS2hZRlNTbDQ3K1FjcjFtWU5BQUFBZU5wdHcwY0t3a0FBQU1EWkpBOFE3T1VKdmtMc1BmWjZ6RlZFUlB5OHFIaDJZRVIrM2kvQlA4M3ZJQkxMeVNzb0tpbXJxS3FwYTJocDYranE2UnNZR2htYm1KcVpTeTBzcmF4dGJPM3NIUnlkbkVNVTR1UjZ5eDdKSlh2ZVA3V3JEeWNBQUFBQUFBSC8vd0FDZU5wallHUmdZT0FCWWhrZ1pnSkNaZ1pOQmtZR0xRWnRJSnNGTE1ZQUFBdzNBTGdBZU5vbGl6RUtnREFRQkNjaFJiQzJzRkVSMFlENnFWUWlCQ3YvSDllekdJNlo1WEJBdzhDQksvbTVpUVFWYXVWYlhMbk9yTVp2Mm9MZEtGYThQanVydTJoSnpHYWJtT1NMek5NenZ1dHBCM040Mm1OZ1pHQmc0R0tRWXpCaFlNeEpMTWxqNEdCZ0FZb3cvUC9QQUpKaExNNnNTb1dLZldDQUF3REFqZ2JSQUFCNDJtTmdZR0JrQUlJYkNabzVJUHJtVW4waEdBMEFPOEVGVFFBQSIpIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbH06cm9vdHstLXN3aXBlci10aGVtZS1jb2xvcjojMDA3YWZmfS5zd2lwZXItY29udGFpbmVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO2xpc3Qtc3R5bGU6bm9uZTtwYWRkaW5nOjA7ei1pbmRleDoxfS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsPi5zd2lwZXItd3JhcHBlcntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnN3aXBlci13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoxO2Rpc3BsYXk6ZmxleDt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5zd2lwZXItY29udGFpbmVyLWFuZHJvaWQgLnN3aXBlci1zbGlkZSwuc3dpcGVyLXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LnN3aXBlci1jb250YWluZXItbXVsdGlyb3c+LnN3aXBlci13cmFwcGVye2ZsZXgtd3JhcDp3cmFwfS5zd2lwZXItY29udGFpbmVyLW11bHRpcm93LWNvbHVtbj4uc3dpcGVyLXdyYXBwZXJ7ZmxleC13cmFwOndyYXA7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5zd2lwZXItY29udGFpbmVyLWZyZWUtbW9kZT4uc3dpcGVyLXdyYXBwZXJ7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1vdXQ7bWFyZ2luOjAgYXV0b30uc3dpcGVyLXNsaWRle2ZsZXgtc2hyaW5rOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uLXByb3BlcnR5OnRyYW5zZm9ybX0uc3dpcGVyLXNsaWRlLWludmlzaWJsZS1ibGFua3t2aXNpYmlsaXR5OmhpZGRlbn0uc3dpcGVyLWNvbnRhaW5lci1hdXRvaGVpZ2h0LC5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQgLnN3aXBlci1zbGlkZXtoZWlnaHQ6YXV0b30uc3dpcGVyLWNvbnRhaW5lci1hdXRvaGVpZ2h0IC5zd2lwZXItd3JhcHBlcnthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtLGhlaWdodH0uc3dpcGVyLWNvbnRhaW5lci0zZHtwZXJzcGVjdGl2ZToxMjAwcHh9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1jdWJlLXNoYWRvdywuc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwuc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwuc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXdyYXBwZXJ7dHJhbnNmb3JtLXN0eWxlOnByZXNlcnZlLTNkfS5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwuc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LC5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LXRvcHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTB9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdHtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgyNzBkZWcscmdiYSgwLDAsMCwuNSksdHJhbnNwYXJlbnQpfS5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0e2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDkwZGVnLHJnYmEoMCwwLDAsLjUpLHRyYW5zcGFyZW50KX0uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3B7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZyxyZ2JhKDAsMCwwLC41KSx0cmFuc3BhcmVudCl9LnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9te2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDE4MGRlZyxyZ2JhKDAsMCwwLC41KSx0cmFuc3BhcmVudCl9LnN3aXBlci1jb250YWluZXItY3NzLW1vZGU+LnN3aXBlci13cmFwcGVye292ZXJmbG93OmF1dG87c2Nyb2xsYmFyLXdpZHRoOm5vbmU7LW1zLW92ZXJmbG93LXN0eWxlOm5vbmV9LnN3aXBlci1jb250YWluZXItY3NzLW1vZGU+LnN3aXBlci13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9LnN3aXBlci1jb250YWluZXItY3NzLW1vZGU+LnN3aXBlci13cmFwcGVyPi5zd2lwZXItc2xpZGV7c2Nyb2xsLXNuYXAtYWxpZ246c3RhcnQgc3RhcnR9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbC5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlPi5zd2lwZXItd3JhcHBlcntzY3JvbGwtc25hcC10eXBlOnggbWFuZGF0b3J5fS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsLnN3aXBlci1jb250YWluZXItY3NzLW1vZGU+LnN3aXBlci13cmFwcGVye3Njcm9sbC1zbmFwLXR5cGU6eSBtYW5kYXRvcnl9OnJvb3R7LS1zd2lwZXItbmF2aWdhdGlvbi1zaXplOjQ0cHh9LnN3aXBlci1idXR0b24tbmV4dCwuc3dpcGVyLWJ1dHRvbi1wcmV2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6Y2FsYyh2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1zaXplKS80NCoyNyk7aGVpZ2h0OnZhcigtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemUpO21hcmdpbi10b3A6Y2FsYyh2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1zaXplKSotMS8yKTt6LWluZGV4OjEwO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtjb2xvcjp2YXIoLS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcix2YXIoLS1zd2lwZXItdGhlbWUtY29sb3IpKX0uc3dpcGVyLWJ1dHRvbi1uZXh0LnN3aXBlci1idXR0b24tZGlzYWJsZWQsLnN3aXBlci1idXR0b24tcHJldi5zd2lwZXItYnV0dG9uLWRpc2FibGVke29wYWNpdHk6LjM1O2N1cnNvcjphdXRvO3BvaW50ZXItZXZlbnRzOm5vbmV9LnN3aXBlci1idXR0b24tbmV4dDphZnRlciwuc3dpcGVyLWJ1dHRvbi1wcmV2OmFmdGVye2ZvbnQtZmFtaWx5OnN3aXBlci1pY29ucztmb250LXNpemU6dmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tc2l6ZSk7dGV4dC10cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7bGV0dGVyLXNwYWNpbmc6MDt0ZXh0LXRyYW5zZm9ybTpub25lO2ZvbnQtdmFyaWFudDpub3JtYWw7bGluZS1oZWlnaHQ6MX0uc3dpcGVyLWJ1dHRvbi1wcmV2LC5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1uZXh0e2xlZnQ6MTBweDtyaWdodDphdXRvfS5zd2lwZXItYnV0dG9uLXByZXY6YWZ0ZXIsLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLW5leHQ6YWZ0ZXJ7Y29udGVudDoicHJldiJ9LnN3aXBlci1idXR0b24tbmV4dCwuc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tcHJldntyaWdodDoxMHB4O2xlZnQ6YXV0b30uc3dpcGVyLWJ1dHRvbi1uZXh0OmFmdGVyLC5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1wcmV2OmFmdGVye2NvbnRlbnQ6Im5leHQifS5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi13aGl0ZSwuc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24td2hpdGV7LS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcjojZmZmfS5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi1ibGFjaywuc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24tYmxhY2t7LS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcjojMDAwfS5zd2lwZXItYnV0dG9uLWxvY2t7ZGlzcGxheTpub25lfS5zd2lwZXItcGFnaW5hdGlvbntwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO3otaW5kZXg6MTB9LnN3aXBlci1wYWdpbmF0aW9uLnN3aXBlci1wYWdpbmF0aW9uLWhpZGRlbntvcGFjaXR5OjB9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cywuc3dpcGVyLXBhZ2luYXRpb24tY3VzdG9tLC5zd2lwZXItcGFnaW5hdGlvbi1mcmFjdGlvbntib3R0b206MTBweDtsZWZ0OjA7d2lkdGg6MTAwJX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWlje292ZXJmbG93OmhpZGRlbjtmb250LXNpemU6MH0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7dHJhbnNmb3JtOnNjYWxlKC4zMyk7cG9zaXRpb246cmVsYXRpdmV9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSwuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW1haW57dHJhbnNmb3JtOnNjYWxlKDEpfS5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtcHJldnt0cmFuc2Zvcm06c2NhbGUoLjY2KX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLXByZXYtcHJldnt0cmFuc2Zvcm06c2NhbGUoLjMzKX0uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLW5leHR7dHJhbnNmb3JtOnNjYWxlKC42Nil9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1uZXh0LW5leHR7dHJhbnNmb3JtOnNjYWxlKC4zMyl9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHt3aWR0aDo4cHg7aGVpZ2h0OjhweDtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjEwMCU7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6LjJ9YnV0dG9uLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHtib3JkZXI6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym94LXNoYWRvdzpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZX0uc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7Y3Vyc29yOnBvaW50ZXJ9LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmV7b3BhY2l0eToxO2JhY2tncm91bmQ6dmFyKC0tc3dpcGVyLXBhZ2luYXRpb24tY29sb3IsdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSl9LnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHN7cmlnaHQ6MTBweDt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC01MCUsMCl9LnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHttYXJnaW46NnB4IDA7ZGlzcGxheTpibG9ja30uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWN7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDo4cHh9LnN3aXBlci1jb250YWluZXItdmVydGljYWw+LnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzLHRvcCAuMnN9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0e21hcmdpbjowIDRweH0uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsPi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pY3tsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt3aGl0ZS1zcGFjZTpub3dyYXB9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMsbGVmdCAuMnN9LnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbC5zd2lwZXItY29udGFpbmVyLXJ0bD4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXR7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzLHJpZ2h0IC4yc30uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNSk7cG9zaXRpb246YWJzb2x1dGV9LnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyIC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1maWxse2JhY2tncm91bmQ6dmFyKC0tc3dpcGVyLXBhZ2luYXRpb24tY29sb3IsdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dHJhbnNmb3JtOnNjYWxlKDApO3RyYW5zZm9ybS1vcmlnaW46bGVmdCB0b3B9LnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhciAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0IHRvcH0uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsPi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhciwuc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItb3Bwb3NpdGV7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4O2xlZnQ6MDt0b3A6MH0uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsPi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2Jhci1vcHBvc2l0ZSwuc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbD4uc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXJ7d2lkdGg6NHB4O2hlaWdodDoxMDAlO2xlZnQ6MDt0b3A6MH0uc3dpcGVyLXBhZ2luYXRpb24td2hpdGV7LS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvcjojZmZmfS5zd2lwZXItcGFnaW5hdGlvbi1ibGFja3stLXN3aXBlci1wYWdpbmF0aW9uLWNvbG9yOiMwMDB9LnN3aXBlci1wYWdpbmF0aW9uLWxvY2t7ZGlzcGxheTpub25lfS5zd2lwZXItc2Nyb2xsYmFye2JvcmRlci1yYWRpdXM6MTBweDtwb3NpdGlvbjpyZWxhdGl2ZTstbXMtdG91Y2gtYWN0aW9uOm5vbmU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xKX0uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsPi5zd2lwZXItc2Nyb2xsYmFye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MSU7Ym90dG9tOjNweDt6LWluZGV4OjUwO2hlaWdodDo1cHg7d2lkdGg6OTglfS5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsPi5zd2lwZXItc2Nyb2xsYmFye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjNweDt0b3A6MSU7ei1pbmRleDo1MDt3aWR0aDo1cHg7aGVpZ2h0Ojk4JX0uc3dpcGVyLXNjcm9sbGJhci1kcmFne2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC41KTtib3JkZXItcmFkaXVzOjEwcHg7bGVmdDowO3RvcDowfS5zd2lwZXItc2Nyb2xsYmFyLWN1cnNvci1kcmFne2N1cnNvcjptb3ZlfS5zd2lwZXItc2Nyb2xsYmFyLWxvY2t7ZGlzcGxheTpub25lfS5zd2lwZXItem9vbS1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXJ9LnN3aXBlci16b29tLWNvbnRhaW5lcj5jYW52YXMsLnN3aXBlci16b29tLWNvbnRhaW5lcj5pbWcsLnN3aXBlci16b29tLWNvbnRhaW5lcj5zdmd7bWF4LXdpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlO29iamVjdC1maXQ6Y29udGFpbn0uc3dpcGVyLXNsaWRlLXpvb21lZHtjdXJzb3I6bW92ZX0uc3dpcGVyLWxhenktcHJlbG9hZGVye3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTttYXJnaW4tbGVmdDotMjFweDttYXJnaW4tdG9wOi0yMXB4O3otaW5kZXg6MTA7dHJhbnNmb3JtLW9yaWdpbjo1MCU7YW5pbWF0aW9uOnN3aXBlci1wcmVsb2FkZXItc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjo0cHggc29saWQgdmFyKC0tc3dpcGVyLXByZWxvYWRlci1jb2xvcix2YXIoLS1zd2lwZXItdGhlbWUtY29sb3IpKTtib3JkZXItcmFkaXVzOjUwJTtib3JkZXItdG9wLWNvbG9yOnRyYW5zcGFyZW50fS5zd2lwZXItbGF6eS1wcmVsb2FkZXItd2hpdGV7LS1zd2lwZXItcHJlbG9hZGVyLWNvbG9yOiNmZmZ9LnN3aXBlci1sYXp5LXByZWxvYWRlci1ibGFja3stLXN3aXBlci1wcmVsb2FkZXItY29sb3I6IzAwMH1Aa2V5ZnJhbWVzIHN3aXBlci1wcmVsb2FkZXItc3Bpbnt0b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LnN3aXBlci1jb250YWluZXIgLnN3aXBlci1ub3RpZmljYXRpb257cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowO3otaW5kZXg6LTEwMDB9LnN3aXBlci1jb250YWluZXItZmFkZS5zd2lwZXItY29udGFpbmVyLWZyZWUtbW9kZSAuc3dpcGVyLXNsaWRle3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0fS5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eX0uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGUgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lfS5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZS1hY3RpdmUsLnN3aXBlci1jb250YWluZXItZmFkZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZXtwb2ludGVyLWV2ZW50czphdXRvfS5zd2lwZXItY29udGFpbmVyLWN1YmV7b3ZlcmZsb3c6dmlzaWJsZX0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGV7cG9pbnRlci1ldmVudHM6bm9uZTstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTt2aXNpYmlsaXR5OmhpZGRlbjt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRle3BvaW50ZXItZXZlbnRzOm5vbmV9LnN3aXBlci1jb250YWluZXItY3ViZS5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLXNsaWRle3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfS5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1hY3RpdmUsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZXtwb2ludGVyLWV2ZW50czphdXRvfS5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1hY3RpdmUsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLW5leHQsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLW5leHQrLnN3aXBlci1zbGlkZSwuc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtcHJldntwb2ludGVyLWV2ZW50czphdXRvO3Zpc2liaWxpdHk6dmlzaWJsZX0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwuc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCwuc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtc2hhZG93LXRvcHt6LWluZGV4OjA7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItY3ViZS1zaGFkb3d7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMDAwO29wYWNpdHk6LjY7LXdlYmtpdC1maWx0ZXI6Ymx1cig1MHB4KTtmaWx0ZXI6Ymx1cig1MHB4KTt6LWluZGV4OjB9LnN3aXBlci1jb250YWluZXItZmxpcHtvdmVyZmxvdzp2aXNpYmxlfS5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZXtwb2ludGVyLWV2ZW50czpub25lOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxfS5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRle3BvaW50ZXItZXZlbnRzOm5vbmV9LnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLWFjdGl2ZSwuc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUtYWN0aXZlIC5zd2lwZXItc2xpZGUtYWN0aXZle3BvaW50ZXItZXZlbnRzOmF1dG99LnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LC5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3B7ei1pbmRleDowOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LmVjaGFydHN7d2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4fS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuYXJyb3cuZGlzYWJsZWQsLmVsLXRhYmxlLS1oaWRkZW4sLmVsLXRhYmxlIC5oaWRkZW4tY29sdW1ucywuZWwtdGFibGUgdGQuaXMtaGlkZGVuPiosLmVsLXRhYmxlIHRoLmlzLWhpZGRlbj4qe3Zpc2liaWxpdHk6aGlkZGVufS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd24tc2VsZmRlZmluZTpmb2N1czphY3RpdmUsLmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bi1zZWxmZGVmaW5lOmZvY3VzOm5vdCguZm9jdXNpbmcpLC5lbC1tZXNzYWdlX19jbG9zZUJ0bjpmb2N1cywuZWwtbWVzc2FnZV9fY29udGVudDpmb2N1cywuZWwtcG9wb3Zlcjpmb2N1cywuZWwtcG9wb3Zlcjpmb2N1czphY3RpdmUsLmVsLXBvcG92ZXJfX3JlZmVyZW5jZTpmb2N1czpob3ZlciwuZWwtcG9wb3Zlcl9fcmVmZXJlbmNlOmZvY3VzOm5vdCguZm9jdXNpbmcpLC5lbC1yYXRlOmFjdGl2ZSwuZWwtcmF0ZTpmb2N1cywuZWwtdG9vbHRpcDpmb2N1czpob3ZlciwuZWwtdG9vbHRpcDpmb2N1czpub3QoLmZvY3VzaW5nKSwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzczphY3RpdmUsLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6bm90KC5mb2N1c2luZyk6Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC1pbnB1dF9fc3VmZml4LC5lbC10cmVlLmlzLWRyYWdnaW5nIC5lbC10cmVlLW5vZGVfX2NvbnRlbnQgKntwb2ludGVyLWV2ZW50czpub25lfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6ZWxlbWVudC1pY29ucztzcmM6dXJsKC4uL2ZvbnRzL2VsZW1lbnQtaWNvbnMuNTM1ODc3ZjUud29mZikgZm9ybWF0KCJ3b2ZmIiksdXJsKC4uL2ZvbnRzL2VsZW1lbnQtaWNvbnMuNzMyMzg5ZGUudHRmKSBmb3JtYXQoInRydWV0eXBlIik7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtZGlzcGxheToiYXV0byI7Zm9udC1zdHlsZTpub3JtYWx9W2NsYXNzKj0iIGVsLWljb24tIl0sW2NsYXNzXj1lbC1pY29uLV17Zm9udC1mYW1pbHk6ZWxlbWVudC1pY29ucyFpbXBvcnRhbnQ7c3BlYWs6bm9uZTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7Zm9udC12YXJpYW50Om5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmVsLWljb24taWNlLWNyZWFtLXJvdW5kOmJlZm9yZXtjb250ZW50OiJcZTZhMCJ9LmVsLWljb24taWNlLWNyZWFtLXNxdWFyZTpiZWZvcmV7Y29udGVudDoiXGU2YTMifS5lbC1pY29uLWxvbGxpcG9wOmJlZm9yZXtjb250ZW50OiJcZTZhNCJ9LmVsLWljb24tcG90YXRvLXN0cmlwczpiZWZvcmV7Y29udGVudDoiXGU2YTUifS5lbC1pY29uLW1pbGstdGVhOmJlZm9yZXtjb250ZW50OiJcZTZhNiJ9LmVsLWljb24taWNlLWRyaW5rOmJlZm9yZXtjb250ZW50OiJcZTZhNyJ9LmVsLWljb24taWNlLXRlYTpiZWZvcmV7Y29udGVudDoiXGU2YTkifS5lbC1pY29uLWNvZmZlZTpiZWZvcmV7Y29udGVudDoiXGU2YWEifS5lbC1pY29uLW9yYW5nZTpiZWZvcmV7Y29udGVudDoiXGU2YWIifS5lbC1pY29uLXBlYXI6YmVmb3Jle2NvbnRlbnQ6IlxlNmFjIn0uZWwtaWNvbi1hcHBsZTpiZWZvcmV7Y29udGVudDoiXGU2YWQifS5lbC1pY29uLWNoZXJyeTpiZWZvcmV7Y29udGVudDoiXGU2YWUifS5lbC1pY29uLXdhdGVybWVsb246YmVmb3Jle2NvbnRlbnQ6IlxlNmFmIn0uZWwtaWNvbi1ncmFwZTpiZWZvcmV7Y29udGVudDoiXGU2YjAifS5lbC1pY29uLXJlZnJpZ2VyYXRvcjpiZWZvcmV7Y29udGVudDoiXGU2YjEifS5lbC1pY29uLWdvYmxldC1zcXVhcmUtZnVsbDpiZWZvcmV7Y29udGVudDoiXGU2YjIifS5lbC1pY29uLWdvYmxldC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxlNmIzIn0uZWwtaWNvbi1nb2JsZXQtZnVsbDpiZWZvcmV7Y29udGVudDoiXGU2YjQifS5lbC1pY29uLWdvYmxldDpiZWZvcmV7Y29udGVudDoiXGU2YjUifS5lbC1pY29uLWNvbGQtZHJpbms6YmVmb3Jle2NvbnRlbnQ6IlxlNmI2In0uZWwtaWNvbi1jb2ZmZWUtY3VwOmJlZm9yZXtjb250ZW50OiJcZTZiOCJ9LmVsLWljb24td2F0ZXItY3VwOmJlZm9yZXtjb250ZW50OiJcZTZiOSJ9LmVsLWljb24taG90LXdhdGVyOmJlZm9yZXtjb250ZW50OiJcZTZiYSJ9LmVsLWljb24taWNlLWNyZWFtOmJlZm9yZXtjb250ZW50OiJcZTZiYiJ9LmVsLWljb24tZGVzc2VydDpiZWZvcmV7Y29udGVudDoiXGU2YmMifS5lbC1pY29uLXN1Z2FyOmJlZm9yZXtjb250ZW50OiJcZTZiZCJ9LmVsLWljb24tdGFibGV3YXJlOmJlZm9yZXtjb250ZW50OiJcZTZiZSJ9LmVsLWljb24tYnVyZ2VyOmJlZm9yZXtjb250ZW50OiJcZTZiZiJ9LmVsLWljb24ta25pZmUtZm9yazpiZWZvcmV7Y29udGVudDoiXGU2YzEifS5lbC1pY29uLWZvcmstc3Bvb246YmVmb3Jle2NvbnRlbnQ6IlxlNmMyIn0uZWwtaWNvbi1jaGlja2VuOmJlZm9yZXtjb250ZW50OiJcZTZjMyJ9LmVsLWljb24tZm9vZDpiZWZvcmV7Y29udGVudDoiXGU2YzQifS5lbC1pY29uLWRpc2gtMTpiZWZvcmV7Y29udGVudDoiXGU2YzUifS5lbC1pY29uLWRpc2g6YmVmb3Jle2NvbnRlbnQ6IlxlNmM2In0uZWwtaWNvbi1tb29uLW5pZ2h0OmJlZm9yZXtjb250ZW50OiJcZTZlZSJ9LmVsLWljb24tbW9vbjpiZWZvcmV7Y29udGVudDoiXGU2ZjAifS5lbC1pY29uLWNsb3VkeS1hbmQtc3Vubnk6YmVmb3Jle2NvbnRlbnQ6IlxlNmYxIn0uZWwtaWNvbi1wYXJ0bHktY2xvdWR5OmJlZm9yZXtjb250ZW50OiJcZTZmMiJ9LmVsLWljb24tY2xvdWR5OmJlZm9yZXtjb250ZW50OiJcZTZmMyJ9LmVsLWljb24tc3Vubnk6YmVmb3Jle2NvbnRlbnQ6IlxlNmY2In0uZWwtaWNvbi1zdW5zZXQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmY3In0uZWwtaWNvbi1zdW5yaXNlLTE6YmVmb3Jle2NvbnRlbnQ6IlxlNmY4In0uZWwtaWNvbi1zdW5yaXNlOmJlZm9yZXtjb250ZW50OiJcZTZmOSJ9LmVsLWljb24taGVhdnktcmFpbjpiZWZvcmV7Y29udGVudDoiXGU2ZmEifS5lbC1pY29uLWxpZ2h0bmluZzpiZWZvcmV7Y29udGVudDoiXGU2ZmIifS5lbC1pY29uLWxpZ2h0LXJhaW46YmVmb3Jle2NvbnRlbnQ6IlxlNmZjIn0uZWwtaWNvbi13aW5kLXBvd2VyOmJlZm9yZXtjb250ZW50OiJcZTZmZCJ9LmVsLWljb24tYmFzZWJhbGw6YmVmb3Jle2NvbnRlbnQ6IlxlNzEyIn0uZWwtaWNvbi1zb2NjZXI6YmVmb3Jle2NvbnRlbnQ6IlxlNzEzIn0uZWwtaWNvbi1mb290YmFsbDpiZWZvcmV7Y29udGVudDoiXGU3MTUifS5lbC1pY29uLWJhc2tldGJhbGw6YmVmb3Jle2NvbnRlbnQ6IlxlNzE2In0uZWwtaWNvbi1zaGlwOmJlZm9yZXtjb250ZW50OiJcZTczZiJ9LmVsLWljb24tdHJ1Y2s6YmVmb3Jle2NvbnRlbnQ6IlxlNzQwIn0uZWwtaWNvbi1iaWN5Y2xlOmJlZm9yZXtjb250ZW50OiJcZTc0MSJ9LmVsLWljb24tbW9iaWxlLXBob25lOmJlZm9yZXtjb250ZW50OiJcZTZkMyJ9LmVsLWljb24tc2VydmljZTpiZWZvcmV7Y29udGVudDoiXGU2ZDQifS5lbC1pY29uLWtleTpiZWZvcmV7Y29udGVudDoiXGU2ZTIifS5lbC1pY29uLXVubG9jazpiZWZvcmV7Y29udGVudDoiXGU2ZTQifS5lbC1pY29uLWxvY2s6YmVmb3Jle2NvbnRlbnQ6IlxlNmU1In0uZWwtaWNvbi13YXRjaDpiZWZvcmV7Y29udGVudDoiXGU2ZmUifS5lbC1pY29uLXdhdGNoLTE6YmVmb3Jle2NvbnRlbnQ6IlxlNmZmIn0uZWwtaWNvbi10aW1lcjpiZWZvcmV7Y29udGVudDoiXGU3MDIifS5lbC1pY29uLWFsYXJtLWNsb2NrOmJlZm9yZXtjb250ZW50OiJcZTcwMyJ9LmVsLWljb24tbWFwLWxvY2F0aW9uOmJlZm9yZXtjb250ZW50OiJcZTcwNCJ9LmVsLWljb24tZGVsZXRlLWxvY2F0aW9uOmJlZm9yZXtjb250ZW50OiJcZTcwNSJ9LmVsLWljb24tYWRkLWxvY2F0aW9uOmJlZm9yZXtjb250ZW50OiJcZTcwNiJ9LmVsLWljb24tbG9jYXRpb24taW5mb3JtYXRpb246YmVmb3Jle2NvbnRlbnQ6IlxlNzA3In0uZWwtaWNvbi1sb2NhdGlvbi1vdXRsaW5lOmJlZm9yZXtjb250ZW50OiJcZTcwOCJ9LmVsLWljb24tbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6IlxlNzllIn0uZWwtaWNvbi1wbGFjZTpiZWZvcmV7Y29udGVudDoiXGU3MDkifS5lbC1pY29uLWRpc2NvdmVyOmJlZm9yZXtjb250ZW50OiJcZTcwYSJ9LmVsLWljb24tZmlyc3QtYWlkLWtpdDpiZWZvcmV7Y29udGVudDoiXGU3MGIifS5lbC1pY29uLXRyb3BoeS0xOmJlZm9yZXtjb250ZW50OiJcZTcwYyJ9LmVsLWljb24tdHJvcGh5OmJlZm9yZXtjb250ZW50OiJcZTcwZCJ9LmVsLWljb24tbWVkYWw6YmVmb3Jle2NvbnRlbnQ6IlxlNzBlIn0uZWwtaWNvbi1tZWRhbC0xOmJlZm9yZXtjb250ZW50OiJcZTcwZiJ9LmVsLWljb24tc3RvcHdhdGNoOmJlZm9yZXtjb250ZW50OiJcZTcxMCJ9LmVsLWljb24tbWljOmJlZm9yZXtjb250ZW50OiJcZTcxMSJ9LmVsLWljb24tY29weS1kb2N1bWVudDpiZWZvcmV7Y29udGVudDoiXGU3MTgifS5lbC1pY29uLWZ1bGwtc2NyZWVuOmJlZm9yZXtjb250ZW50OiJcZTcxOSJ9LmVsLWljb24tc3dpdGNoLWJ1dHRvbjpiZWZvcmV7Y29udGVudDoiXGU3MWIifS5lbC1pY29uLWFpbTpiZWZvcmV7Y29udGVudDoiXGU3MWMifS5lbC1pY29uLWNyb3A6YmVmb3Jle2NvbnRlbnQ6IlxlNzFkIn0uZWwtaWNvbi1vZG9tZXRlcjpiZWZvcmV7Y29udGVudDoiXGU3MWUifS5lbC1pY29uLXRpbWU6YmVmb3Jle2NvbnRlbnQ6IlxlNzFmIn0uZWwtaWNvbi1iYW5nemh1OmJlZm9yZXtjb250ZW50OiJcZTcyNCJ9LmVsLWljb24tY2xvc2Utbm90aWZpY2F0aW9uOmJlZm9yZXtjb250ZW50OiJcZTcyNiJ9LmVsLWljb24tbWljcm9waG9uZTpiZWZvcmV7Y29udGVudDoiXGU3MjcifS5lbC1pY29uLXR1cm4tb2ZmLW1pY3JvcGhvbmU6YmVmb3Jle2NvbnRlbnQ6IlxlNzI4In0uZWwtaWNvbi1wb3NpdGlvbjpiZWZvcmV7Y29udGVudDoiXGU3MjkifS5lbC1pY29uLXBvc3RjYXJkOmJlZm9yZXtjb250ZW50OiJcZTcyYSJ9LmVsLWljb24tbWVzc2FnZTpiZWZvcmV7Y29udGVudDoiXGU3MmIifS5lbC1pY29uLWNoYXQtbGluZS1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxlNzJkIn0uZWwtaWNvbi1jaGF0LWRvdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6IlxlNzJlIn0uZWwtaWNvbi1jaGF0LWRvdC1yb3VuZDpiZWZvcmV7Y29udGVudDoiXGU3MmYifS5lbC1pY29uLWNoYXQtc3F1YXJlOmJlZm9yZXtjb250ZW50OiJcZTczMCJ9LmVsLWljb24tY2hhdC1saW5lLXJvdW5kOmJlZm9yZXtjb250ZW50OiJcZTczMSJ9LmVsLWljb24tY2hhdC1yb3VuZDpiZWZvcmV7Y29udGVudDoiXGU3MzIifS5lbC1pY29uLXNldC11cDpiZWZvcmV7Y29udGVudDoiXGU3MzMifS5lbC1pY29uLXR1cm4tb2ZmOmJlZm9yZXtjb250ZW50OiJcZTczNCJ9LmVsLWljb24tb3BlbjpiZWZvcmV7Y29udGVudDoiXGU3MzUifS5lbC1pY29uLWNvbm5lY3Rpb246YmVmb3Jle2NvbnRlbnQ6IlxlNzM2In0uZWwtaWNvbi1saW5rOmJlZm9yZXtjb250ZW50OiJcZTczNyJ9LmVsLWljb24tY3B1OmJlZm9yZXtjb250ZW50OiJcZTczOCJ9LmVsLWljb24tdGh1bWI6YmVmb3Jle2NvbnRlbnQ6IlxlNzM5In0uZWwtaWNvbi1mZW1hbGU6YmVmb3Jle2NvbnRlbnQ6IlxlNzNhIn0uZWwtaWNvbi1tYWxlOmJlZm9yZXtjb250ZW50OiJcZTczYiJ9LmVsLWljb24tZ3VpZGU6YmVmb3Jle2NvbnRlbnQ6IlxlNzNjIn0uZWwtaWNvbi1uZXdzOmJlZm9yZXtjb250ZW50OiJcZTczZSJ9LmVsLWljb24tcHJpY2UtdGFnOmJlZm9yZXtjb250ZW50OiJcZTc0NCJ9LmVsLWljb24tZGlzY291bnQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzQ1In0uZWwtaWNvbi13YWxsZXQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzQ3In0uZWwtaWNvbi1jb2luOmJlZm9yZXtjb250ZW50OiJcZTc0OCJ9LmVsLWljb24tbW9uZXk6YmVmb3Jle2NvbnRlbnQ6IlxlNzQ5In0uZWwtaWNvbi1iYW5rLWNhcmQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzRhIn0uZWwtaWNvbi1ib3g6YmVmb3Jle2NvbnRlbnQ6IlxlNzRiIn0uZWwtaWNvbi1wcmVzZW50OmJlZm9yZXtjb250ZW50OiJcZTc0YyJ9LmVsLWljb24tc2VsbDpiZWZvcmV7Y29udGVudDoiXGU2ZDUifS5lbC1pY29uLXNvbGQtb3V0OmJlZm9yZXtjb250ZW50OiJcZTZkNiJ9LmVsLWljb24tc2hvcHBpbmctYmFnLTI6YmVmb3Jle2NvbnRlbnQ6IlxlNzRkIn0uZWwtaWNvbi1zaG9wcGluZy1iYWctMTpiZWZvcmV7Y29udGVudDoiXGU3NGUifS5lbC1pY29uLXNob3BwaW5nLWNhcnQtMjpiZWZvcmV7Y29udGVudDoiXGU3NGYifS5lbC1pY29uLXNob3BwaW5nLWNhcnQtMTpiZWZvcmV7Y29udGVudDoiXGU3NTAifS5lbC1pY29uLXNob3BwaW5nLWNhcnQtZnVsbDpiZWZvcmV7Y29udGVudDoiXGU3NTEifS5lbC1pY29uLXNtb2tpbmc6YmVmb3Jle2NvbnRlbnQ6IlxlNzUyIn0uZWwtaWNvbi1uby1zbW9raW5nOmJlZm9yZXtjb250ZW50OiJcZTc1MyJ9LmVsLWljb24taG91c2U6YmVmb3Jle2NvbnRlbnQ6IlxlNzU0In0uZWwtaWNvbi10YWJsZS1sYW1wOmJlZm9yZXtjb250ZW50OiJcZTc1NSJ9LmVsLWljb24tc2Nob29sOmJlZm9yZXtjb250ZW50OiJcZTc1NiJ9LmVsLWljb24tb2ZmaWNlLWJ1aWxkaW5nOmJlZm9yZXtjb250ZW50OiJcZTc1NyJ9LmVsLWljb24tdG9pbGV0LXBhcGVyOmJlZm9yZXtjb250ZW50OiJcZTc1OCJ9LmVsLWljb24tbm90ZWJvb2stMjpiZWZvcmV7Y29udGVudDoiXGU3NTkifS5lbC1pY29uLW5vdGVib29rLTE6YmVmb3Jle2NvbnRlbnQ6IlxlNzVhIn0uZWwtaWNvbi1maWxlczpiZWZvcmV7Y29udGVudDoiXGU3NWIifS5lbC1pY29uLWNvbGxlY3Rpb246YmVmb3Jle2NvbnRlbnQ6IlxlNzVjIn0uZWwtaWNvbi1yZWNlaXZpbmc6YmVmb3Jle2NvbnRlbnQ6IlxlNzVkIn0uZWwtaWNvbi1zdWl0Y2FzZS0xOmJlZm9yZXtjb250ZW50OiJcZTc2MCJ9LmVsLWljb24tc3VpdGNhc2U6YmVmb3Jle2NvbnRlbnQ6IlxlNzYxIn0uZWwtaWNvbi1maWxtOmJlZm9yZXtjb250ZW50OiJcZTc2MyJ9LmVsLWljb24tY29sbGVjdGlvbi10YWc6YmVmb3Jle2NvbnRlbnQ6IlxlNzY1In0uZWwtaWNvbi1kYXRhLWFuYWx5c2lzOmJlZm9yZXtjb250ZW50OiJcZTc2NiJ9LmVsLWljb24tcGllLWNoYXJ0OmJlZm9yZXtjb250ZW50OiJcZTc2NyJ9LmVsLWljb24tZGF0YS1ib2FyZDpiZWZvcmV7Y29udGVudDoiXGU3NjgifS5lbC1pY29uLWRhdGEtbGluZTpiZWZvcmV7Y29udGVudDoiXGU3NmQifS5lbC1pY29uLXJlYWRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxlNzY5In0uZWwtaWNvbi1tYWdpYy1zdGljazpiZWZvcmV7Y29udGVudDoiXGU3NmEifS5lbC1pY29uLWNvb3JkaW5hdGU6YmVmb3Jle2NvbnRlbnQ6IlxlNzZiIn0uZWwtaWNvbi1tb3VzZTpiZWZvcmV7Y29udGVudDoiXGU3NmMifS5lbC1pY29uLWJydXNoOmJlZm9yZXtjb250ZW50OiJcZTc2ZSJ9LmVsLWljb24taGVhZHNldDpiZWZvcmV7Y29udGVudDoiXGU3NmYifS5lbC1pY29uLXVtYnJlbGxhOmJlZm9yZXtjb250ZW50OiJcZTc3MCJ9LmVsLWljb24tc2Npc3NvcnM6YmVmb3Jle2NvbnRlbnQ6IlxlNzcxIn0uZWwtaWNvbi1tb2JpbGU6YmVmb3Jle2NvbnRlbnQ6IlxlNzczIn0uZWwtaWNvbi1hdHRyYWN0OmJlZm9yZXtjb250ZW50OiJcZTc3NCJ9LmVsLWljb24tbW9uaXRvcjpiZWZvcmV7Y29udGVudDoiXGU3NzUifS5lbC1pY29uLXNlYXJjaDpiZWZvcmV7Y29udGVudDoiXGU3NzgifS5lbC1pY29uLXRha2Vhd2F5LWJveDpiZWZvcmV7Y29udGVudDoiXGU3N2EifS5lbC1pY29uLXBhcGVyY2xpcDpiZWZvcmV7Y29udGVudDoiXGU3N2QifS5lbC1pY29uLXByaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IlxlNzdlIn0uZWwtaWNvbi1kb2N1bWVudC1hZGQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzgyIn0uZWwtaWNvbi1kb2N1bWVudDpiZWZvcmV7Y29udGVudDoiXGU3ODUifS5lbC1pY29uLWRvY3VtZW50LWNoZWNrZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzg2In0uZWwtaWNvbi1kb2N1bWVudC1jb3B5OmJlZm9yZXtjb250ZW50OiJcZTc4NyJ9LmVsLWljb24tZG9jdW1lbnQtZGVsZXRlOmJlZm9yZXtjb250ZW50OiJcZTc4OCJ9LmVsLWljb24tZG9jdW1lbnQtcmVtb3ZlOmJlZm9yZXtjb250ZW50OiJcZTc4OSJ9LmVsLWljb24tdGlja2V0czpiZWZvcmV7Y29udGVudDoiXGU3OGIifS5lbC1pY29uLWZvbGRlci1jaGVja2VkOmJlZm9yZXtjb250ZW50OiJcZTc3ZiJ9LmVsLWljb24tZm9sZGVyLWRlbGV0ZTpiZWZvcmV7Y29udGVudDoiXGU3ODAifS5lbC1pY29uLWZvbGRlci1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxlNzgxIn0uZWwtaWNvbi1mb2xkZXItYWRkOmJlZm9yZXtjb250ZW50OiJcZTc4MyJ9LmVsLWljb24tZm9sZGVyLW9wZW5lZDpiZWZvcmV7Y29udGVudDoiXGU3ODQifS5lbC1pY29uLWZvbGRlcjpiZWZvcmV7Y29udGVudDoiXGU3OGEifS5lbC1pY29uLWVkaXQtb3V0bGluZTpiZWZvcmV7Y29udGVudDoiXGU3NjQifS5lbC1pY29uLWVkaXQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzhjIn0uZWwtaWNvbi1kYXRlOmJlZm9yZXtjb250ZW50OiJcZTc4ZSJ9LmVsLWljb24tYy1zY2FsZS10by1vcmlnaW5hbDpiZWZvcmV7Y29udGVudDoiXGU3YzYifS5lbC1pY29uLXZpZXc6YmVmb3Jle2NvbnRlbnQ6IlxlNmNlIn0uZWwtaWNvbi1sb2FkaW5nOmJlZm9yZXtjb250ZW50OiJcZTZjZiJ9LmVsLWljb24tcmFuazpiZWZvcmV7Y29udGVudDoiXGU2ZDEifS5lbC1pY29uLXNvcnQtZG93bjpiZWZvcmV7Y29udGVudDoiXGU3YzQifS5lbC1pY29uLXNvcnQtdXA6YmVmb3Jle2NvbnRlbnQ6IlxlN2M1In0uZWwtaWNvbi1zb3J0OmJlZm9yZXtjb250ZW50OiJcZTZkMiJ9LmVsLWljb24tZmluaXNoZWQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmNkIn0uZWwtaWNvbi1yZWZyZXNoLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmM3In0uZWwtaWNvbi1yZWZyZXNoLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTZjOCJ9LmVsLWljb24tcmVmcmVzaDpiZWZvcmV7Y29udGVudDoiXGU2ZDAifS5lbC1pY29uLXZpZGVvLXBsYXk6YmVmb3Jle2NvbnRlbnQ6IlxlN2MwIn0uZWwtaWNvbi12aWRlby1wYXVzZTpiZWZvcmV7Y29udGVudDoiXGU3YzEifS5lbC1pY29uLWQtYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmRjIn0uZWwtaWNvbi1kLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmRkIn0uZWwtaWNvbi1hcnJvdy11cDpiZWZvcmV7Y29udGVudDoiXGU2ZTEifS5lbC1pY29uLWFycm93LWRvd246YmVmb3Jle2NvbnRlbnQ6IlxlNmRmIn0uZWwtaWNvbi1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDoiXGU2ZTAifS5lbC1pY29uLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmRlIn0uZWwtaWNvbi10b3AtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlNmU3In0uZWwtaWNvbi10b3AtbGVmdDpiZWZvcmV7Y29udGVudDoiXGU2ZTgifS5lbC1pY29uLXRvcDpiZWZvcmV7Y29udGVudDoiXGU2ZTYifS5lbC1pY29uLWJvdHRvbTpiZWZvcmV7Y29udGVudDoiXGU2ZWIifS5lbC1pY29uLXJpZ2h0OmJlZm9yZXtjb250ZW50OiJcZTZlOSJ9LmVsLWljb24tYmFjazpiZWZvcmV7Y29udGVudDoiXGU2ZWEifS5lbC1pY29uLWJvdHRvbS1yaWdodDpiZWZvcmV7Y29udGVudDoiXGU2ZWMifS5lbC1pY29uLWJvdHRvbS1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTZlZCJ9LmVsLWljb24tY2FyZXQtdG9wOmJlZm9yZXtjb250ZW50OiJcZTc4ZiJ9LmVsLWljb24tY2FyZXQtYm90dG9tOmJlZm9yZXtjb250ZW50OiJcZTc5MCJ9LmVsLWljb24tY2FyZXQtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzkxIn0uZWwtaWNvbi1jYXJldC1sZWZ0OmJlZm9yZXtjb250ZW50OiJcZTc5MiJ9LmVsLWljb24tZC1jYXJldDpiZWZvcmV7Y29udGVudDoiXGU3OWEifS5lbC1pY29uLXNoYXJlOmJlZm9yZXtjb250ZW50OiJcZTc5MyJ9LmVsLWljb24tbWVudTpiZWZvcmV7Y29udGVudDoiXGU3OTgifS5lbC1pY29uLXMtZ3JpZDpiZWZvcmV7Y29udGVudDoiXGU3YTYifS5lbC1pY29uLXMtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxlN2E3In0uZWwtaWNvbi1zLWRhdGE6YmVmb3Jle2NvbnRlbnQ6IlxlN2E4In0uZWwtaWNvbi1zLW9wcG9ydHVuaXR5OmJlZm9yZXtjb250ZW50OiJcZTdhYSJ9LmVsLWljb24tcy1jdXN0b206YmVmb3Jle2NvbnRlbnQ6IlxlN2FiIn0uZWwtaWNvbi1zLWNsYWltOmJlZm9yZXtjb250ZW50OiJcZTdhZCJ9LmVsLWljb24tcy1maW5hbmNlOmJlZm9yZXtjb250ZW50OiJcZTdhZSJ9LmVsLWljb24tcy1jb21tZW50OmJlZm9yZXtjb250ZW50OiJcZTdhZiJ9LmVsLWljb24tcy1mbGFnOmJlZm9yZXtjb250ZW50OiJcZTdiMCJ9LmVsLWljb24tcy1tYXJrZXRpbmc6YmVmb3Jle2NvbnRlbnQ6IlxlN2IxIn0uZWwtaWNvbi1zLXNob3A6YmVmb3Jle2NvbnRlbnQ6IlxlN2I0In0uZWwtaWNvbi1zLW9wZW46YmVmb3Jle2NvbnRlbnQ6IlxlN2I1In0uZWwtaWNvbi1zLW1hbmFnZW1lbnQ6YmVmb3Jle2NvbnRlbnQ6IlxlN2I2In0uZWwtaWNvbi1zLXRpY2tldDpiZWZvcmV7Y29udGVudDoiXGU3YjcifS5lbC1pY29uLXMtcmVsZWFzZTpiZWZvcmV7Y29udGVudDoiXGU3YjgifS5lbC1pY29uLXMtaG9tZTpiZWZvcmV7Y29udGVudDoiXGU3YjkifS5lbC1pY29uLXMtcHJvbW90aW9uOmJlZm9yZXtjb250ZW50OiJcZTdiYSJ9LmVsLWljb24tcy1vcGVyYXRpb246YmVmb3Jle2NvbnRlbnQ6IlxlN2JiIn0uZWwtaWNvbi1zLXVuZm9sZDpiZWZvcmV7Y29udGVudDoiXGU3YmMifS5lbC1pY29uLXMtZm9sZDpiZWZvcmV7Y29udGVudDoiXGU3YTkifS5lbC1pY29uLXMtcGxhdGZvcm06YmVmb3Jle2NvbnRlbnQ6IlxlN2JkIn0uZWwtaWNvbi1zLW9yZGVyOmJlZm9yZXtjb250ZW50OiJcZTdiZSJ9LmVsLWljb24tcy1jb29wZXJhdGlvbjpiZWZvcmV7Y29udGVudDoiXGU3YmYifS5lbC1pY29uLWJlbGw6YmVmb3Jle2NvbnRlbnQ6IlxlNzI1In0uZWwtaWNvbi1tZXNzYWdlLXNvbGlkOmJlZm9yZXtjb250ZW50OiJcZTc5OSJ9LmVsLWljb24tdmlkZW8tY2FtZXJhOmJlZm9yZXtjb250ZW50OiJcZTc3MiJ9LmVsLWljb24tdmlkZW8tY2FtZXJhLXNvbGlkOmJlZm9yZXtjb250ZW50OiJcZTc5NiJ9LmVsLWljb24tY2FtZXJhOmJlZm9yZXtjb250ZW50OiJcZTc3OSJ9LmVsLWljb24tY2FtZXJhLXNvbGlkOmJlZm9yZXtjb250ZW50OiJcZTc5YiJ9LmVsLWljb24tZG93bmxvYWQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzdjIn0uZWwtaWNvbi11cGxvYWQyOmJlZm9yZXtjb250ZW50OiJcZTc3YiJ9LmVsLWljb24tdXBsb2FkOmJlZm9yZXtjb250ZW50OiJcZTdjMyJ9LmVsLWljb24tcGljdHVyZS1vdXRsaW5lLXJvdW5kOmJlZm9yZXtjb250ZW50OiJcZTc1ZiJ9LmVsLWljb24tcGljdHVyZS1vdXRsaW5lOmJlZm9yZXtjb250ZW50OiJcZTc1ZSJ9LmVsLWljb24tcGljdHVyZTpiZWZvcmV7Y29udGVudDoiXGU3OWYifS5lbC1pY29uLWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZTZkYiJ9LmVsLWljb24tY2hlY2s6YmVmb3Jle2NvbnRlbnQ6IlxlNmRhIn0uZWwtaWNvbi1wbHVzOmJlZm9yZXtjb250ZW50OiJcZTZkOSJ9LmVsLWljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6IlxlNmQ4In0uZWwtaWNvbi1oZWxwOmJlZm9yZXtjb250ZW50OiJcZTczZCJ9LmVsLWljb24tcy1oZWxwOmJlZm9yZXtjb250ZW50OiJcZTdiMyJ9LmVsLWljb24tY2lyY2xlLWNsb3NlOmJlZm9yZXtjb250ZW50OiJcZTc4ZCJ9LmVsLWljb24tY2lyY2xlLWNoZWNrOmJlZm9yZXtjb250ZW50OiJcZTcyMCJ9LmVsLWljb24tY2lyY2xlLXBsdXMtb3V0bGluZTpiZWZvcmV7Y29udGVudDoiXGU3MjMifS5lbC1pY29uLXJlbW92ZS1vdXRsaW5lOmJlZm9yZXtjb250ZW50OiJcZTcyMiJ9LmVsLWljb24tem9vbS1vdXQ6YmVmb3Jle2NvbnRlbnQ6IlxlNzc2In0uZWwtaWNvbi16b29tLWluOmJlZm9yZXtjb250ZW50OiJcZTc3NyJ9LmVsLWljb24tZXJyb3I6YmVmb3Jle2NvbnRlbnQ6IlxlNzlkIn0uZWwtaWNvbi1zdWNjZXNzOmJlZm9yZXtjb250ZW50OiJcZTc5YyJ9LmVsLWljb24tY2lyY2xlLXBsdXM6YmVmb3Jle2NvbnRlbnQ6IlxlN2EwIn0uZWwtaWNvbi1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6IlxlN2EyIn0uZWwtaWNvbi1pbmZvOmJlZm9yZXtjb250ZW50OiJcZTdhMSJ9LmVsLWljb24tcXVlc3Rpb246YmVmb3Jle2NvbnRlbnQ6IlxlN2E0In0uZWwtaWNvbi13YXJuaW5nLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6IlxlNmM5In0uZWwtaWNvbi13YXJuaW5nOmJlZm9yZXtjb250ZW50OiJcZTdhMyJ9LmVsLWljb24tZ29vZHM6YmVmb3Jle2NvbnRlbnQ6IlxlN2MyIn0uZWwtaWNvbi1zLWdvb2RzOmJlZm9yZXtjb250ZW50OiJcZTdiMiJ9LmVsLWljb24tc3Rhci1vZmY6YmVmb3Jle2NvbnRlbnQ6IlxlNzE3In0uZWwtaWNvbi1zdGFyLW9uOmJlZm9yZXtjb250ZW50OiJcZTc5NyJ9LmVsLWljb24tbW9yZS1vdXRsaW5lOmJlZm9yZXtjb250ZW50OiJcZTZjYyJ9LmVsLWljb24tbW9yZTpiZWZvcmV7Y29udGVudDoiXGU3OTQifS5lbC1pY29uLXBob25lLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6IlxlNmNiIn0uZWwtaWNvbi1waG9uZTpiZWZvcmV7Y29udGVudDoiXGU3OTUifS5lbC1pY29uLXVzZXI6YmVmb3Jle2NvbnRlbnQ6IlxlNmUzIn0uZWwtaWNvbi11c2VyLXNvbGlkOmJlZm9yZXtjb250ZW50OiJcZTdhNSJ9LmVsLWljb24tc2V0dGluZzpiZWZvcmV7Y29udGVudDoiXGU2Y2EifS5lbC1pY29uLXMtdG9vbHM6YmVmb3Jle2NvbnRlbnQ6IlxlN2FjIn0uZWwtaWNvbi1kZWxldGU6YmVmb3Jle2NvbnRlbnQ6IlxlNmQ3In0uZWwtaWNvbi1kZWxldGUtc29saWQ6YmVmb3Jle2NvbnRlbnQ6IlxlN2M5In0uZWwtaWNvbi1lbGVtZTpiZWZvcmV7Y29udGVudDoiXGU3YzcifS5lbC1pY29uLXBsYXRmb3JtLWVsZW1lOmJlZm9yZXtjb250ZW50OiJcZTdjYSJ9LmVsLWljb24tbG9hZGluZ3std2Via2l0LWFuaW1hdGlvbjpyb3RhdGluZyAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnJvdGF0aW5nIDJzIGxpbmVhciBpbmZpbml0ZX0uZWwtaWNvbi0tcmlnaHR7bWFyZ2luLWxlZnQ6NXB4fS5lbC1pY29uLS1sZWZ0e21hcmdpbi1yaWdodDo1cHh9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0aW5nezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgxdHVybil9fUBrZXlmcmFtZXMgcm90YXRpbmd7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LmVsLXBhZ2luYXRpb257d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6MnB4IDVweDtjb2xvcjojMzAzMTMzO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtcGFnaW5hdGlvbjphZnRlciwuZWwtcGFnaW5hdGlvbjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OiIifS5lbC1wYWdpbmF0aW9uOmFmdGVye2NsZWFyOmJvdGh9LmVsLXBhZ2luYXRpb24gYnV0dG9uLC5lbC1wYWdpbmF0aW9uIHNwYW46bm90KFtjbGFzcyo9c3VmZml4XSl7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjM1LjVweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O3ZlcnRpY2FsLWFsaWduOnRvcDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXBhZ2luYXRpb24gLmVsLWlucHV0X19pbm5lcnt0ZXh0LWFsaWduOmNlbnRlcjstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZWwtcGFnaW5hdGlvbiAuZWwtaW5wdXRfX3N1ZmZpeHtyaWdodDowO3RyYW5zZm9ybTpzY2FsZSguOCl9LmVsLXBhZ2luYXRpb24gLmVsLXNlbGVjdCAuZWwtaW5wdXR7d2lkdGg6MTAwcHg7bWFyZ2luOjAgNXB4fS5lbC1wYWdpbmF0aW9uIC5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1yaWdodDoyNXB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1wYWdpbmF0aW9uIGJ1dHRvbntib3JkZXI6bm9uZTtwYWRkaW5nOjAgNnB4O2JhY2tncm91bmQ6MCAwfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOjB9LmVsLXBhZ2luYXRpb24gYnV0dG9uOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXBhZ2luYXRpb24gYnV0dG9uOmRpc2FibGVke2NvbG9yOiNjMGM0Y2M7YmFja2dyb3VuZC1jb2xvcjojZmZmO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGFnaW5hdGlvbiAuYnRuLW5leHQsLmVsLXBhZ2luYXRpb24gLmJ0bi1wcmV2e2JhY2tncm91bmQ6NTAlIG5vLXJlcGVhdCAjZmZmO2JhY2tncm91bmQtc2l6ZToxNnB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjowO2NvbG9yOiMzMDMxMzN9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0IC5lbC1pY29uLC5lbC1wYWdpbmF0aW9uIC5idG4tcHJldiAuZWwtaWNvbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMH0uZWwtcGFnaW5hdGlvbiAuYnRuLXByZXZ7cGFkZGluZy1yaWdodDoxMnB4fS5lbC1wYWdpbmF0aW9uIC5idG4tbmV4dHtwYWRkaW5nLWxlZnQ6MTJweH0uZWwtcGFnaW5hdGlvbiAuZWwtcGFnZXIgbGkuZGlzYWJsZWR7Y29sb3I6I2MwYzRjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBhZ2VyIGxpLC5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0OmhvdmVyLC5lbC1wYWdlciBsaS5idG4tcXVpY2twcmV2OmhvdmVye2N1cnNvcjpwb2ludGVyfS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuYnRuLW5leHQsLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tcHJldiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpLC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGkuYnRuLXF1aWNrbmV4dCwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja3ByZXYsLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5lbC1wYWdlciBsaTpsYXN0LWNoaWxke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMnB4O2hlaWdodDoyMnB4O21pbi13aWR0aDoyMnB4fS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAubW9yZTpiZWZvcmUsLmVsLXBhZ2luYXRpb24tLXNtYWxsIGxpLm1vcmU6YmVmb3Jle2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIGJ1dHRvbiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgc3Bhbjpub3QoW2NsYXNzKj1zdWZmaXhdKXtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjIycHh9LmVsLXBhZ2luYXRpb25fX3NpemVze21hcmdpbjowIDEwcHggMCAwO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjA2MjY2fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntmb250LXNpemU6MTNweDtwYWRkaW5nLWxlZnQ6OHB4fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtcGFnaW5hdGlvbl9fdG90YWx7bWFyZ2luLXJpZ2h0OjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MDYyNjZ9LmVsLXBhZ2luYXRpb25fX2p1bXB7bWFyZ2luLWxlZnQ6MjRweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYwNjI2Nn0uZWwtcGFnaW5hdGlvbl9fanVtcCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmc6MCAzcHh9LmVsLXBhZ2luYXRpb25fX3JpZ2h0d3JhcHBlcntmbG9hdDpyaWdodH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9ye2xpbmUtaGVpZ2h0OjE4cHg7cGFkZGluZzowIDJweDtoZWlnaHQ6MjhweDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1wYWdlciwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldntwYWRkaW5nOjB9LmVsLXBhZ2luYXRpb25fX2VkaXRvci5lbC1pbnB1dHt3aWR0aDo1MHB4fS5lbC1wYWdpbmF0aW9uX19lZGl0b3IuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MjhweH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9yIC5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmVsLXBhZ2luYXRpb25fX2VkaXRvciAuZWwtaW5wdXRfX2lubmVyOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzYwNjI2NjttaW4td2lkdGg6MzBweDtib3JkZXItcmFkaXVzOjJweH0uZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dC5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dDpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldi5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldjpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojYzBjNGNjfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpOm5vdCguZGlzYWJsZWQpOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXBhZ2luYXRpb24uaXMtYmFja2dyb3VuZCAuZWwtcGFnZXIgbGk6bm90KC5kaXNhYmxlZCkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjtjb2xvcjojZmZmfS5lbC1kaWFsb2csLmVsLXBhZ2VyIGxpe2JhY2tncm91bmQ6I2ZmZjstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tcHJldiwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5lbC1wYWdlciBsaXttYXJnaW46MCAzcHg7bWluLXdpZHRoOjIycHh9LmVsLXBhZ2VyLC5lbC1wYWdlciBsaXt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWFyZ2luOjA7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXBhZ2Vyey1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7bGlzdC1zdHlsZTpub25lO2ZvbnQtc2l6ZTowfS5lbC1kYXRlLXRhYmxlLC5lbC1wYWdlciwuZWwtdGFibGUgdGh7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZX0uZWwtcGFnZXIgLm1vcmU6YmVmb3Jle2xpbmUtaGVpZ2h0OjMwcHh9LmVsLXBhZ2VyIGxpe3BhZGRpbmc6MCA0cHg7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjM1LjVweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVudS0tY29sbGFwc2UgLmVsLW1lbnUgLmVsLXN1Ym1lbnUsLmVsLW1lbnUtLXBvcHVwe21pbi13aWR0aDoyMDBweH0uZWwtcGFnZXIgbGkuYnRuLXF1aWNrbmV4dCwuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldntsaW5lLWhlaWdodDoyOHB4O2NvbG9yOiMzMDMxMzN9LmVsLXBhZ2VyIGxpLmJ0bi1xdWlja25leHQuZGlzYWJsZWQsLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja3ByZXYuZGlzYWJsZWR7Y29sb3I6I2MwYzRjY30uZWwtcGFnZXIgbGkuYWN0aXZlK2xpe2JvcmRlci1sZWZ0OjB9LmVsLXBhZ2VyIGxpOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXBhZ2VyIGxpLmFjdGl2ZXtjb2xvcjojNDA5ZWZmO2N1cnNvcjpkZWZhdWx0fUAtd2Via2l0LWtleWZyYW1lcyB2LW1vZGFsLWluezAle29wYWNpdHk6MH19QC13ZWJraXQta2V5ZnJhbWVzIHYtbW9kYWwtb3V0e3Rve29wYWNpdHk6MH19LmVsLWRpYWxvZ3twb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MCBhdXRvIDUwcHg7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMyk7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjUwJX0uZWwtZGlhbG9nLmlzLWZ1bGxzY3JlZW57d2lkdGg6MTAwJTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99LmVsLWRpYWxvZ19fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtvdmVyZmxvdzphdXRvO21hcmdpbjowfS5lbC1kaWFsb2dfX2hlYWRlcntwYWRkaW5nOjIwcHggMjBweCAxMHB4fS5lbC1kaWFsb2dfX2hlYWRlcmJ0bntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjBweDtyaWdodDoyMHB4O3BhZGRpbmc6MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6bm9uZTtvdXRsaW5lOjA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE2cHh9LmVsLWRpYWxvZ19faGVhZGVyYnRuIC5lbC1kaWFsb2dfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLWRpYWxvZ19faGVhZGVyYnRuOmZvY3VzIC5lbC1kaWFsb2dfX2Nsb3NlLC5lbC1kaWFsb2dfX2hlYWRlcmJ0bjpob3ZlciAuZWwtZGlhbG9nX19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC1kaWFsb2dfX3RpdGxle2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE4cHg7Y29sb3I6IzMwMzEzM30uZWwtZGlhbG9nX19ib2R5e3BhZGRpbmc6MzBweCAyMHB4O2NvbG9yOiM2MDYyNjY7Zm9udC1zaXplOjE0cHg7d29yZC1icmVhazpicmVhay1hbGx9LmVsLWRpYWxvZ19fZm9vdGVye3BhZGRpbmc6MTBweCAyMHB4IDIwcHg7dGV4dC1hbGlnbjpyaWdodDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRpYWxvZy0tY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5lbC1kaWFsb2ctLWNlbnRlciAuZWwtZGlhbG9nX19ib2R5e3RleHQtYWxpZ246aW5pdGlhbDtwYWRkaW5nOjI1cHggMjVweCAzMHB4fS5lbC1kaWFsb2ctLWNlbnRlciAuZWwtZGlhbG9nX19mb290ZXJ7dGV4dC1hbGlnbjppbmhlcml0fS5kaWFsb2ctZmFkZS1lbnRlci1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246ZGlhbG9nLWZhZGUtaW4gLjNzO2FuaW1hdGlvbjpkaWFsb2ctZmFkZS1pbiAuM3N9LmRpYWxvZy1mYWRlLWxlYXZlLWFjdGl2ZXstd2Via2l0LWFuaW1hdGlvbjpkaWFsb2ctZmFkZS1vdXQgLjNzO2FuaW1hdGlvbjpkaWFsb2ctZmFkZS1vdXQgLjNzfUAtd2Via2l0LWtleWZyYW1lcyBkaWFsb2ctZmFkZS1pbnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIGRpYWxvZy1mYWRlLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWigwKTtvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyBkaWFsb2ctZmFkZS1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19QGtleWZyYW1lcyBkaWFsb2ctZmFkZS1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19LmVsLWF1dG9jb21wbGV0ZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb257bWFyZ2luOjVweCAwO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI2U0ZTdlZDtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC1kcm9wZG93bi1tZW51LC5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudSAuZWwtbWVudXt6LWluZGV4OjEwOy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwe21heC1oZWlnaHQ6MjgwcHg7cGFkZGluZzoxMHB4IDA7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdHttYXJnaW46MDtwYWRkaW5nOjB9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpe3BhZGRpbmc6MCAyMHB4O21hcmdpbjowO2xpbmUtaGVpZ2h0OjM0cHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweDtsaXN0LXN0eWxlOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaS5oaWdobGlnaHRlZCwuZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaS5kaXZpZGVye21hcmdpbi10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICMwMDB9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpLmRpdmlkZXI6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOi02cHh9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgbGl7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjEwMHB4O2xpbmUtaGVpZ2h0OjEwMHB4O2ZvbnQtc2l6ZToyMHB4O2NvbG9yOiM5OTl9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgbGk6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgbGk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIC5lbC1pY29uLWxvYWRpbmd7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1kcm9wZG93bntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxNHB4fS5lbC1kcm9wZG93biAuZWwtYnV0dG9uLWdyb3Vwe2Rpc3BsYXk6YmxvY2t9LmVsLWRyb3Bkb3duIC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbntmbG9hdDpub25lfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbntwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1sZWZ0Om5vbmV9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9uOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MXB4O3RvcDo1cHg7Ym90dG9tOjVweDtsZWZ0OjA7YmFja2dyb3VuZDpoc2xhKDAsMCUsMTAwJSwuNSl9LmVsLWRyb3Bkb3duIC5lbC1kcm9wZG93bl9fY2FyZXQtYnV0dG9uLmVsLWJ1dHRvbi0tZGVmYXVsdDpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIyMCwyMjMsMjMwLC41KX0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b246aG92ZXI6YmVmb3Jle3RvcDowO2JvdHRvbTowfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbiAuZWwtZHJvcGRvd25fX2ljb257cGFkZGluZy1sZWZ0OjB9LmVsLWRyb3Bkb3duX19pY29ue2ZvbnQtc2l6ZToxMnB4O21hcmdpbjowIDNweH0uZWwtZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cGFkZGluZzoxMHB4IDA7bWFyZ2luOjVweCAwO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlYmVlZjU7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGlzdC1zdHlsZTpub25lO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDIwcHg7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06Zm9jdXMsLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmO2NvbG9yOiM2NmIxZmZ9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0gaXttYXJnaW4tcmlnaHQ6NXB4fS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmVlZjV9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OjZweDtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtZHJvcGRvd24tbWVudV9faXRlbS5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjojYmJiO3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bXtwYWRkaW5nOjZweCAwfS5lbC1kcm9wZG93bi1tZW51LS1tZWRpdW0gLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgMTdweDtmb250LXNpemU6MTRweH0uZWwtZHJvcGRvd24tbWVudS0tbWVkaXVtIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWR7bWFyZ2luLXRvcDo2cHh9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bSAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkOmJlZm9yZXtoZWlnaHQ6NnB4O21hcmdpbjowIC0xN3B4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbHtwYWRkaW5nOjZweCAwfS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbXtsaW5lLWhlaWdodDoyN3B4O3BhZGRpbmc6MCAxNXB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke21hcmdpbi10b3A6NHB4fS5lbC1kcm9wZG93bi1tZW51LS1zbWFsbCAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkOmJlZm9yZXtoZWlnaHQ6NHB4O21hcmdpbjowIC0xNXB4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pe3BhZGRpbmc6M3B4IDB9LmVsLWRyb3Bkb3duLW1lbnUtLW1pbmkgLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGluZS1oZWlnaHQ6MjRweDtwYWRkaW5nOjAgMTBweDtmb250LXNpemU6MTJweH0uZWwtZHJvcGRvd24tbWVudS0tbWluaSAuZWwtZHJvcGRvd24tbWVudV9faXRlbS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke21hcmdpbi10b3A6M3B4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2hlaWdodDozcHg7bWFyZ2luOjAgLTEwcHh9LmVsLW1lbnV7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTZlNmU2O2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MH0uZWwtbWVudSwuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtOm5vdCguaXMtZGlzYWJsZWQpOmZvY3VzLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXIsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnUgLmVsLXN1Ym1lbnVfX3RpdGxlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtbWVudTphZnRlciwuZWwtbWVudTpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OiIifS5lbC1tZW51OmFmdGVye2NsZWFyOmJvdGh9LmVsLW1lbnUuZWwtbWVudS0taG9yaXpvbnRhbHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTZlNmU2fS5lbC1tZW51LS1ob3Jpem9udGFse2JvcmRlci1yaWdodDpub25lfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW17ZmxvYXQ6bGVmdDtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O21hcmdpbjowO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbSBhLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW0gYTpob3Zlcntjb2xvcjppbmhlcml0fS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51e2Zsb2F0OmxlZnR9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6Zm9jdXMsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6aG92ZXJ7b3V0bGluZTowfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51OmZvY3VzIC5lbC1zdWJtZW51X190aXRsZSwuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudTpob3ZlciAuZWwtc3VibWVudV9fdGl0bGV7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudS5pcy1hY3RpdmUgLmVsLXN1Ym1lbnVfX3RpdGxle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICM0MDllZmY7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudSAuZWwtc3VibWVudV9fdGl0bGV7aGVpZ2h0OjYwcHg7bGluZS1oZWlnaHQ6NjBweDtib3JkZXItYm90dG9tOjJweCBzb2xpZCB0cmFuc3BhcmVudDtjb2xvcjojOTA5Mzk5fS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51IC5lbC1zdWJtZW51X19pY29uLWFycm93e3Bvc2l0aW9uOnN0YXRpYzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi10b3A6LTNweH0uZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudSAuZWwtbWVudS1pdGVtLC5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51IC5lbC1zdWJtZW51X190aXRsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZmxvYXQ6bm9uZTtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxMHB4O2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUgLmVsLW1lbnUtaXRlbS5pcy1hY3RpdmUsLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUgLmVsLXN1Ym1lbnUuaXMtYWN0aXZlPi5lbC1zdWJtZW51X190aXRsZXtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51LWl0ZW06bm90KC5pcy1kaXNhYmxlZCk6Zm9jdXMsLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUtaXRlbTpub3QoLmlzLWRpc2FibGVkKTpob3ZlcntvdXRsaW5lOjA7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNDA5ZWZmO2NvbG9yOiMzMDMxMzN9LmVsLW1lbnUtLWNvbGxhcHNle3dpZHRoOjY0cHh9LmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1tZW51LWl0ZW0gW2NsYXNzXj1lbC1pY29uLV0sLmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1zdWJtZW51Pi5lbC1zdWJtZW51X190aXRsZSBbY2xhc3NePWVsLWljb24tXXttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSAuZWwtc3VibWVudV9faWNvbi1hcnJvdywuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e2Rpc3BsYXk6bm9uZX0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSBzcGFuLC5lbC1tZW51LS1jb2xsYXBzZT4uZWwtc3VibWVudT4uZWwtc3VibWVudV9fdGl0bGUgc3BhbntoZWlnaHQ6MDt3aWR0aDowO292ZXJmbG93OmhpZGRlbjt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbS5pcy1hY3RpdmUgaXtjb2xvcjppbmhlcml0fS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudXtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtbWVudS0tY29sbGFwc2UgLmVsLXN1Ym1lbnUgLmVsLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6NXB4O3RvcDowO2xlZnQ6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlNGU3ZWQ7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLW1lbnUtaXRlbSwuZWwtc3VibWVudV9fdGl0bGV7aGVpZ2h0OjU2cHg7bGluZS1oZWlnaHQ6NTZweDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDt3aGl0ZS1zcGFjZTpub3dyYXA7bGlzdC1zdHlsZTpub25lfS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudS5pcy1vcGVuZWQ+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e3RyYW5zZm9ybTpub25lfS5lbC1tZW51LS1wb3B1cHt6LWluZGV4OjEwMDtib3JkZXI6bm9uZTtwYWRkaW5nOjVweCAwO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1tZW51LS1wb3B1cC1ib3R0b20tc3RhcnR7bWFyZ2luLXRvcDo1cHh9LmVsLW1lbnUtLXBvcHVwLXJpZ2h0LXN0YXJ0e21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6NXB4fS5lbC1tZW51LWl0ZW17Zm9udC1zaXplOjE0cHg7Y29sb3I6IzMwMzEzMztwYWRkaW5nOjAgMjBweDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3MsY29sb3IgLjNzO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtbWVudS1pdGVtICp7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1tZW51LWl0ZW0gaXtjb2xvcjojOTA5Mzk5fS5lbC1tZW51LWl0ZW06Zm9jdXMsLmVsLW1lbnUtaXRlbTpob3ZlcntvdXRsaW5lOjA7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1tZW51LWl0ZW0uaXMtZGlzYWJsZWR7b3BhY2l0eTouMjU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uZWwtbWVudS1pdGVtIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbi1yaWdodDo1cHg7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MThweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLW1lbnUtaXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOWVmZn0uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSBpe2NvbG9yOmluaGVyaXR9LmVsLXN1Ym1lbnV7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmctbGVmdDowfS5lbC1zdWJtZW51X190aXRsZXtmb250LXNpemU6MTRweDtjb2xvcjojMzAzMTMzO3BhZGRpbmc6MCAyMHB4O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyxiYWNrZ3JvdW5kLWNvbG9yIC4zcyxjb2xvciAuM3M7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1zdWJtZW51X190aXRsZSAqe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3VibWVudV9fdGl0bGUgaXtjb2xvcjojOTA5Mzk5fS5lbC1zdWJtZW51X190aXRsZTpmb2N1cywuZWwtc3VibWVudV9fdGl0bGU6aG92ZXJ7b3V0bGluZTowO2JhY2tncm91bmQtY29sb3I6I2VjZjVmZn0uZWwtc3VibWVudV9fdGl0bGUuaXMtZGlzYWJsZWR7b3BhY2l0eTouMjU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uZWwtc3VibWVudV9fdGl0bGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1zdWJtZW51IC5lbC1tZW51e2JvcmRlcjpub25lfS5lbC1zdWJtZW51IC5lbC1tZW51LWl0ZW17aGVpZ2h0OjUwcHg7bGluZS1oZWlnaHQ6NTBweDtwYWRkaW5nOjAgNDVweDttaW4td2lkdGg6MjAwcHh9LmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoyMHB4O21hcmdpbi10b3A6LTdweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7Zm9udC1zaXplOjEycHh9LmVsLXN1Ym1lbnUuaXMtYWN0aXZlIC5lbC1zdWJtZW51X190aXRsZXtib3JkZXItYm90dG9tLWNvbG9yOiM0MDllZmZ9LmVsLXN1Ym1lbnUuaXMtb3BlbmVkPi5lbC1zdWJtZW51X190aXRsZSAuZWwtc3VibWVudV9faWNvbi1hcnJvd3t0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmVsLXN1Ym1lbnUuaXMtZGlzYWJsZWQgLmVsLW1lbnUtaXRlbSwuZWwtc3VibWVudS5pcy1kaXNhYmxlZCAuZWwtc3VibWVudV9fdGl0bGV7b3BhY2l0eTouMjU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uZWwtc3VibWVudSBbY2xhc3NePWVsLWljb24tXXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLXJpZ2h0OjVweDt3aWR0aDoyNHB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxOHB4fS5lbC1tZW51LWl0ZW0tZ3JvdXA+dWx7cGFkZGluZzowfS5lbC1tZW51LWl0ZW0tZ3JvdXBfX3RpdGxle3BhZGRpbmc6N3B4IDAgN3B4IDIwcHg7bGluZS1oZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTl9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIsLmVsLXJhZGlvLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246bWlkZGxlfS5ob3Jpem9udGFsLWNvbGxhcHNlLXRyYW5zaXRpb24gLmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e3RyYW5zaXRpb246LjJzO29wYWNpdHk6MH0uZWwtcmFkaW8tZ3JvdXB7Zm9udC1zaXplOjB9LmVsLXJhZGlvLWJ1dHRvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztvdXRsaW5lOjB9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkY2RmZTY7Zm9udC13ZWlnaHQ6NTAwO2JvcmRlci1sZWZ0OjA7Y29sb3I6IzYwNjI2Njstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7cGFkZGluZzoxMnB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTJweCAyMHB4fS5lbC1yYWRpby1idXR0b25fX2lubmVyOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV17bGluZS1oZWlnaHQ6Ljl9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDo1cHh9LmVsLXJhZGlvLWJ1dHRvbjpmaXJzdC1jaGlsZCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntib3JkZXItbGVmdDoxcHggc29saWQgI2RjZGZlNjtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LmVsLXJhZGlvLWJ1dHRvbl9fb3JpZy1yYWRpb3tvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmVsLXJhZGlvLWJ1dHRvbl9fb3JpZy1yYWRpbzpjaGVja2VkKy5lbC1yYWRpby1idXR0b25fX2lubmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmO2JvcmRlci1jb2xvcjojNDA5ZWZmO2JveC1zaGFkb3c6LTFweCAwIDAgMCAjNDA5ZWZmfS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW86ZGlzYWJsZWQrLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Y29sb3I6I2MwYzRjYztjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1pbWFnZTpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ViZWVmNTtib3gtc2hhZG93Om5vbmV9LmVsLXJhZGlvLWJ1dHRvbl9fb3JpZy1yYWRpbzpkaXNhYmxlZDpjaGVja2VkKy5lbC1yYWRpby1idXR0b25fX2lubmVye2JhY2tncm91bmQtY29sb3I6I2YyZjZmY30uZWwtcmFkaW8tYnV0dG9uOmxhc3QtY2hpbGQgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0uZWwtcG9wb3ZlciwuZWwtcmFkaW8tYnV0dG9uOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXJhZGlvLWJ1dHRvbi0tbWVkaXVtIC5lbC1yYWRpby1idXR0b25fX2lubmVye3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6MH0uZWwtcmFkaW8tYnV0dG9uLS1tZWRpdW0gLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzoxMHB4IDIwcHh9LmVsLXJhZGlvLWJ1dHRvbi0tc21hbGwgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo5cHggMTVweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjB9LmVsLXJhZGlvLWJ1dHRvbi0tc21hbGwgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzo5cHggMTVweH0uZWwtcmFkaW8tYnV0dG9uLS1taW5pIC5lbC1yYWRpby1idXR0b25fX2lubmVye3BhZGRpbmc6N3B4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b24tLW1pbmkgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzo3cHggMTVweH0uZWwtcmFkaW8tYnV0dG9uOmZvY3VzOm5vdCguaXMtZm9jdXMpOm5vdCg6YWN0aXZlKTpub3QoLmlzLWRpc2FibGVkKXtib3gtc2hhZG93OjAgMCAycHggMnB4ICM0MDllZmZ9LmVsLXN3aXRjaHtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2hlaWdodDoyMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3dpdGNoX19jb3JlLC5lbC1zd2l0Y2hfX2xhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2N1cnNvcjpwb2ludGVyfS5lbC1zd2l0Y2guaXMtZGlzYWJsZWQgLmVsLXN3aXRjaF9fY29yZSwuZWwtc3dpdGNoLmlzLWRpc2FibGVkIC5lbC1zd2l0Y2hfX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc3dpdGNoX19sYWJlbHt0cmFuc2l0aW9uOi4ycztoZWlnaHQ6MjBweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOiMzMDMxMzN9LmVsLXN3aXRjaF9fbGFiZWwuaXMtYWN0aXZle2NvbG9yOiM0MDllZmZ9LmVsLXN3aXRjaF9fbGFiZWwtLWxlZnR7bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0e21hcmdpbi1sZWZ0OjEwcHh9LmVsLXN3aXRjaF9fbGFiZWwgKntsaW5lLWhlaWdodDoxO2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1zd2l0Y2hfX2lucHV0e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7b3BhY2l0eTowO21hcmdpbjowfS5lbC1zd2l0Y2hfX2NvcmV7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6NDBweDtoZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkICNkY2RmZTY7b3V0bGluZTowO2JvcmRlci1yYWRpdXM6MTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7YmFja2dyb3VuZDojZGNkZmU2O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyxiYWNrZ3JvdW5kLWNvbG9yIC4zczt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXN3aXRjaF9fY29yZTphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7bGVmdDoxcHg7Ym9yZGVyLXJhZGl1czoxMDAlO3RyYW5zaXRpb246YWxsIC4zczt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtc3dpdGNoLmlzLWNoZWNrZWQgLmVsLXN3aXRjaF9fY29yZXtib3JkZXItY29sb3I6IzQwOWVmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXN3aXRjaC5pcy1jaGVja2VkIC5lbC1zd2l0Y2hfX2NvcmU6YWZ0ZXJ7bGVmdDoxMDAlO21hcmdpbi1sZWZ0Oi0xN3B4fS5lbC1zd2l0Y2guaXMtZGlzYWJsZWR7b3BhY2l0eTouNn0uZWwtc3dpdGNoLS13aWRlIC5lbC1zd2l0Y2hfX2xhYmVsLmVsLXN3aXRjaF9fbGFiZWwtLWxlZnQgc3BhbntsZWZ0OjEwcHh9LmVsLXN3aXRjaC0td2lkZSAuZWwtc3dpdGNoX19sYWJlbC5lbC1zd2l0Y2hfX2xhYmVsLS1yaWdodCBzcGFue3JpZ2h0OjEwcHh9LmVsLXN3aXRjaCAubGFiZWwtZmFkZS1lbnRlciwuZWwtc3dpdGNoIC5sYWJlbC1mYWRlLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLXNlbGVjdC1kcm9wZG93bntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDE7Ym9yZGVyOjFweCBzb2xpZCAjZTRlN2VkO2JvcmRlci1yYWRpdXM6NHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjVweCAwfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZHtjb2xvcjojNDA5ZWZmO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtc2VsZWN0LWRyb3Bkb3duLmlzLW11bHRpcGxlIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uc2VsZWN0ZWQuaG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O2ZvbnQtZmFtaWx5OmVsZW1lbnQtaWNvbnM7Y29udGVudDoiXGU2ZGEiO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZWwtc2VsZWN0LWRyb3Bkb3duIC5lbC1zY3JvbGxiYXIuaXMtZW1wdHkgLmVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdHtwYWRkaW5nOjB9LmVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHl7cGFkZGluZzoxMHB4IDA7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izk5OTtmb250LXNpemU6MTRweH0uZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwe21heC1oZWlnaHQ6Mjc0cHh9LmVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzo2cHggMDttYXJnaW46MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbXtmb250LXNpemU6MTRweDtwYWRkaW5nOjAgMjBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y29sb3I6IzYwNjI2NjtoZWlnaHQ6MzRweDtsaW5lLWhlaWdodDozNHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcn0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaG92ZXIsLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmF9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZHtjb2xvcjojNDA5ZWZmO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtc2VsZWN0LWdyb3Vwe21hcmdpbjowO3BhZGRpbmc6MH0uZWwtc2VsZWN0LWdyb3VwX193cmFwe3Bvc2l0aW9uOnJlbGF0aXZlO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9LmVsLXNlbGVjdC1ncm91cF9fd3JhcDpub3QoOmxhc3Qtb2YtdHlwZSl7cGFkZGluZy1ib3R0b206MjRweH0uZWwtc2VsZWN0LWdyb3VwX193cmFwOm5vdCg6bGFzdC1vZi10eXBlKTphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7bGVmdDoyMHB4O3JpZ2h0OjIwcHg7Ym90dG9tOjEycHg7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kOiNlNGU3ZWR9LmVsLXNlbGVjdC1ncm91cF9fdGl0bGV7cGFkZGluZy1sZWZ0OjIwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzkwOTM5OTtsaW5lLWhlaWdodDozMHB4fS5lbC1zZWxlY3QtZ3JvdXAgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbXtwYWRkaW5nLWxlZnQ6MjBweH0uZWwtc2VsZWN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zZWxlY3QgLmVsLXNlbGVjdF9fdGFncz5zcGFue2Rpc3BsYXk6Y29udGVudHN9LmVsLXNlbGVjdDpob3ZlciAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjojYzBjNGNjfS5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lcntjdXJzb3I6cG9pbnRlcjtwYWRkaW5nLXJpZ2h0OjM1cHh9LmVsLXNlbGVjdCAuZWwtaW5wdXRfX2lubmVyOmZvY3Vze2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0e2NvbG9yOiNjMGM0Y2M7Zm9udC1zaXplOjE0cHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKTtjdXJzb3I6cG9pbnRlcn0uZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtc2VsZWN0X19jYXJldC5pcy1yZXZlcnNle3RyYW5zZm9ybTpyb3RhdGUoMCl9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLXNlbGVjdF9fY2FyZXQuaXMtc2hvdy1jbG9zZXtmb250LXNpemU6MTRweDt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyk7Ym9yZGVyLXJhZGl1czoxMDAlO2NvbG9yOiNjMGM0Y2M7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0LmlzLXNob3ctY2xvc2U6aG92ZXJ7Y29sb3I6IzkwOTM5OX0uZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojZTRlN2VkfS5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDllZmZ9LmVsLXNlbGVjdD4uZWwtaW5wdXR7ZGlzcGxheTpibG9ja30uZWwtc2VsZWN0X19pbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzY2Njtmb250LXNpemU6MTRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7aGVpZ2h0OjI4cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtc2VsZWN0X19pbnB1dC5pcy1taW5pe2hlaWdodDoxNHB4fS5lbC1zZWxlY3RfX2Nsb3Nle2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7ei1pbmRleDoxMDAwO3JpZ2h0OjI1cHg7Y29sb3I6I2MwYzRjYztsaW5lLWhlaWdodDoxOHB4O2ZvbnQtc2l6ZToxNHB4fS5lbC1zZWxlY3RfX2Nsb3NlOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLXNlbGVjdF9fdGFnc3twb3NpdGlvbjphYnNvbHV0ZTtsaW5lLWhlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO3otaW5kZXg6MTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXB9LmVsLXNlbGVjdCAuZWwtdGFnX19jbG9zZXttYXJnaW4tdG9wOi0ycHh9LmVsLXNlbGVjdCAuZWwtdGFne2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7bWFyZ2luOjJweCAwIDJweCA2cHg7YmFja2dyb3VuZC1jb2xvcjojZjBmMmY1fS5lbC1zZWxlY3QgLmVsLXRhZ19fY2xvc2UuZWwtaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLWNvbG9yOiNjMGM0Y2M7cmlnaHQ6LTdweDt0b3A6MDtjb2xvcjojZmZmfS5lbC1zZWxlY3QgLmVsLXRhZ19fY2xvc2UuZWwtaWNvbi1jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLXRhYmxlLC5lbC10YWJsZV9fZXhwYW5kZWQtY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLXNlbGVjdCAuZWwtdGFnX19jbG9zZS5lbC1pY29uLWNsb3NlOmJlZm9yZXtkaXNwbGF5OmJsb2NrO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC41cHgpfS5lbC10YWJsZXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXg6MTt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjZ9LmVsLXRhYmxlLS1taW5pLC5lbC10YWJsZS0tc21hbGwsLmVsLXRhYmxlX19leHBhbmQtaWNvbntmb250LXNpemU6MTJweH0uZWwtdGFibGVfX2VtcHR5LWJsb2Nre21pbi1oZWlnaHQ6NjBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtdGFibGVfX2VtcHR5LXRleHR7bGluZS1oZWlnaHQ6NjBweDt3aWR0aDo1MCU7Y29sb3I6IzkwOTM5OX0uZWwtdGFibGVfX2V4cGFuZC1jb2x1bW4gLmNlbGx7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5lbC10YWJsZV9fZXhwYW5kLWljb257cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzY2Njt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7aGVpZ2h0OjIwcHh9LmVsLXRhYmxlX19leHBhbmQtaWNvbi0tZXhwYW5kZWR7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LmVsLXRhYmxlX19leHBhbmQtaWNvbj4uZWwtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlO21hcmdpbi1sZWZ0Oi01cHg7bWFyZ2luLXRvcDotNXB4fS5lbC10YWJsZV9fZXhwYW5kZWQtY2VsbFtjbGFzcyo9Y2VsbF17cGFkZGluZzoyMHB4IDUwcHh9LmVsLXRhYmxlX19leHBhbmRlZC1jZWxsOmhvdmVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5lbC10YWJsZV9fcGxhY2Vob2xkZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjBweH0uZWwtdGFibGVfX2FwcGVuZC13cmFwcGVye292ZXJmbG93OmhpZGRlbn0uZWwtdGFibGUtLWZpdHtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOjB9LmVsLXRhYmxlLS1maXQgdGQuZ3V0dGVyLC5lbC10YWJsZS0tZml0IHRoLmd1dHRlcntib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5lbC10YWJsZS0tc2Nyb2xsYWJsZS14IC5lbC10YWJsZV9fYm9keS13cmFwcGVye292ZXJmbG93LXg6YXV0b30uZWwtdGFibGUtLXNjcm9sbGFibGUteSAuZWwtdGFibGVfX2JvZHktd3JhcHBlcntvdmVyZmxvdy15OmF1dG99LmVsLXRhYmxlIHRoZWFke2NvbG9yOiM5MDkzOTk7Zm9udC13ZWlnaHQ6NTAwfS5lbC10YWJsZSB0aGVhZC5pcy1ncm91cCB0aHtiYWNrZ3JvdW5kOiNmNWY3ZmF9LmVsLXRhYmxlIHRoLC5lbC10YWJsZSB0cntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLXRhYmxlIHRkLC5lbC10YWJsZSB0aHtwYWRkaW5nOjEycHggMDttaW4td2lkdGg6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0fS5lbC10YWJsZSB0ZC5pcy1jZW50ZXIsLmVsLXRhYmxlIHRoLmlzLWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdGFibGUgdGQuaXMtcmlnaHQsLmVsLXRhYmxlIHRoLmlzLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmVsLXRhYmxlIHRkLmd1dHRlciwuZWwtdGFibGUgdGguZ3V0dGVye3dpZHRoOjE1cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO3BhZGRpbmc6MH0uZWwtdGFibGUtLW1lZGl1bSB0ZCwuZWwtdGFibGUtLW1lZGl1bSB0aHtwYWRkaW5nOjEwcHggMH0uZWwtdGFibGUtLXNtYWxsIHRkLC5lbC10YWJsZS0tc21hbGwgdGh7cGFkZGluZzo4cHggMH0uZWwtdGFibGUtLW1pbmkgdGQsLmVsLXRhYmxlLS1taW5pIHRoe3BhZGRpbmc6NnB4IDB9LmVsLXRhYmxlLS1ib3JkZXIgdGQ6Zmlyc3QtY2hpbGQgLmNlbGwsLmVsLXRhYmxlLS1ib3JkZXIgdGg6Zmlyc3QtY2hpbGQgLmNlbGwsLmVsLXRhYmxlIC5jZWxse3BhZGRpbmctbGVmdDoxMHB4fS5lbC10YWJsZSB0ciBpbnB1dFt0eXBlPWNoZWNrYm94XXttYXJnaW46MH0uZWwtdGFibGUgdGQsLmVsLXRhYmxlIHRoLmlzLWxlYWZ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNX0uZWwtdGFibGUgdGguaXMtc29ydGFibGV7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYmxlIHRoe292ZXJmbG93OmhpZGRlbjstbXMtdXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmVsLXRhYmxlIHRoPi5jZWxse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4O3dpZHRoOjEwMCV9LmVsLXRhYmxlIHRoPi5jZWxsLmhpZ2hsaWdodHtjb2xvcjojNDA5ZWZmfS5lbC10YWJsZSB0aC5yZXF1aXJlZD5kaXY6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7d2lkdGg6OHB4O2hlaWdodDo4cHg7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZmY0ZDUxO21hcmdpbi1yaWdodDo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC10YWJsZSB0ZCBkaXZ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10YWJsZSB0ZC5ndXR0ZXJ7d2lkdGg6MH0uZWwtdGFibGUgLmNlbGx7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLWFsbDtsaW5lLWhlaWdodDoyM3B4O3BhZGRpbmctcmlnaHQ6MTBweH0uZWwtdGFibGUgLmNlbGwuZWwtdG9vbHRpcHt3aGl0ZS1zcGFjZTpub3dyYXA7bWluLXdpZHRoOjUwcHh9LmVsLXRhYmxlLS1ib3JkZXIsLmVsLXRhYmxlLS1ncm91cHtib3JkZXI6MXB4IHNvbGlkICNlYmVlZjV9LmVsLXRhYmxlLS1ib3JkZXI6YWZ0ZXIsLmVsLXRhYmxlLS1ncm91cDphZnRlciwuZWwtdGFibGU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjojZWJlZWY1O3otaW5kZXg6MX0uZWwtdGFibGUtLWJvcmRlcjphZnRlciwuZWwtdGFibGUtLWdyb3VwOmFmdGVye3RvcDowO3JpZ2h0OjA7d2lkdGg6MXB4O2hlaWdodDoxMDAlfS5lbC10YWJsZTpiZWZvcmV7bGVmdDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjFweH0uZWwtdGFibGUtLWJvcmRlcntib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYmxlLS1ib3JkZXIuZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZle2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uZWwtdGFibGUtLWJvcmRlciB0ZCwuZWwtdGFibGUtLWJvcmRlciB0aCwuZWwtdGFibGVfX2JvZHktd3JhcHBlciAuZWwtdGFibGUtLWJvcmRlci5pcy1zY3JvbGxpbmctbGVmdH4uZWwtdGFibGVfX2ZpeGVke2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWVmNX0uZWwtdGFibGUtLWJvcmRlciB0aC5ndXR0ZXI6bGFzdC1vZi10eXBle2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmVlZjU7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LmVsLXRhYmxlLS1ib3JkZXIgdGgsLmVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlZWY1fS5lbC10YWJsZV9fZml4ZWQsLmVsLXRhYmxlX19maXhlZC1yaWdodHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTpoaWRkZW47Ym94LXNoYWRvdzowIDAgMTBweCByZ2JhKDAsMCwwLC4xMil9LmVsLXRhYmxlX19maXhlZC1yaWdodDpiZWZvcmUsLmVsLXRhYmxlX19maXhlZDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2ViZWVmNTt6LWluZGV4OjR9LmVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTFweDtyaWdodDowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e3RvcDowO2xlZnQ6YXV0bztyaWdodDowfS5lbC10YWJsZV9fZml4ZWQtcmlnaHQgLmVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXIsLmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9fZml4ZWQtcmlnaHQgLmVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0uZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt6LWluZGV4OjN9LmVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7ei1pbmRleDozfS5lbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXIgdGJvZHkgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWVmNTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmE7Y29sb3I6IzYwNjI2Nn0uZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjM3cHg7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6M30uZWwtdGFibGVfX2JvZHktd3JhcHBlciwuZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVye21hcmdpbi10b3A6LTFweH0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmVlZjV9LmVsLXRhYmxlX19ib2R5LC5lbC10YWJsZV9fZm9vdGVyLC5lbC10YWJsZV9faGVhZGVye3RhYmxlLWxheW91dDpmaXhlZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmVsLXRhYmxlX19mb290ZXItd3JhcHBlciwuZWwtdGFibGVfX2hlYWRlci13cmFwcGVye292ZXJmbG93OmhpZGRlbn0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRib2R5IHRkLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXIgdGJvZHkgdGR7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2NvbG9yOiM2MDYyNjZ9LmVsLXRhYmxlX19ib2R5LXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJsZV9fYm9keS13cmFwcGVyLmlzLXNjcm9sbGluZy1sZWZ0fi5lbC10YWJsZV9fZml4ZWQsLmVsLXRhYmxlX19ib2R5LXdyYXBwZXIuaXMtc2Nyb2xsaW5nLW5vbmV+LmVsLXRhYmxlX19maXhlZCwuZWwtdGFibGVfX2JvZHktd3JhcHBlci5pcy1zY3JvbGxpbmctbm9uZX4uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0LC5lbC10YWJsZV9fYm9keS13cmFwcGVyLmlzLXNjcm9sbGluZy1yaWdodH4uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e2JveC1zaGFkb3c6bm9uZX0uZWwtcGlja2VyLXBhbmVsLC5lbC10YWJsZS1maWx0ZXJ7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtdGFibGVfX2JvZHktd3JhcHBlciAuZWwtdGFibGUtLWJvcmRlci5pcy1zY3JvbGxpbmctcmlnaHR+LmVsLXRhYmxlX19maXhlZC1yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWVmNX0uZWwtdGFibGUgLmNhcmV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDozNHB4O3dpZHRoOjI0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmluaXRpYWw7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYmxlIC5zb3J0LWNhcmV0e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjdweH0uZWwtdGFibGUgLnNvcnQtY2FyZXQuYXNjZW5kaW5ne2JvcmRlci1ib3R0b20tY29sb3I6I2MwYzRjYzt0b3A6NXB4fS5lbC10YWJsZSAuc29ydC1jYXJldC5kZXNjZW5kaW5ne2JvcmRlci10b3AtY29sb3I6I2MwYzRjYztib3R0b206N3B4fS5lbC10YWJsZSAuYXNjZW5kaW5nIC5zb3J0LWNhcmV0LmFzY2VuZGluZ3tib3JkZXItYm90dG9tLWNvbG9yOiM0MDllZmZ9LmVsLXRhYmxlIC5kZXNjZW5kaW5nIC5zb3J0LWNhcmV0LmRlc2NlbmRpbmd7Ym9yZGVyLXRvcC1jb2xvcjojNDA5ZWZmfS5lbC10YWJsZSAuaGlkZGVuLWNvbHVtbnN7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQgdGR7YmFja2dyb3VuZDojZmFmYWZhfS5lbC10YWJsZS0tc3RyaXBlZCAuZWwtdGFibGVfX2JvZHkgdHIuZWwtdGFibGVfX3Jvdy0tc3RyaXBlZC5jdXJyZW50LXJvdyB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5jdXJyZW50LXJvdz50ZCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93LmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuY3VycmVudC1yb3c+dGQsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkPnRkLC5lbC10YWJsZV9fYm9keSB0ci5ob3Zlci1yb3c+dGR7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhfS5lbC10YWJsZV9fYm9keSB0ci5jdXJyZW50LXJvdz50ZHtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXRhYmxlX19jb2x1bW4tcmVzaXplLXByb3h5e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MjAwcHg7dG9wOjA7Ym90dG9tOjA7d2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWVmNTt6LWluZGV4OjEwfS5lbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM0cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYmxlX19jb2x1bW4tZmlsdGVyLXRyaWdnZXIgaXtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4O3RyYW5zZm9ybTpzY2FsZSguNzUpfS5lbC10YWJsZS0tZW5hYmxlLXJvdy10cmFuc2l0aW9uIC5lbC10YWJsZV9fYm9keSB0ZHt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjI1cyBlYXNlfS5lbC10YWJsZS0tZW5hYmxlLXJvdy1ob3ZlciAuZWwtdGFibGVfX2JvZHkgdHI6aG92ZXI+dGR7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhfS5lbC10YWJsZS0tZmx1aWQtaGVpZ2h0IC5lbC10YWJsZV9fZml4ZWQsLmVsLXRhYmxlLS1mbHVpZC1oZWlnaHQgLmVsLXRhYmxlX19maXhlZC1yaWdodHtib3R0b206MDtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYmxlIFtjbGFzcyo9ZWwtdGFibGVfX3Jvdy0tbGV2ZWxdIC5lbC10YWJsZV9fZXhwYW5kLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjBweDtsaW5lLWhlaWdodDoyMHB4O2hlaWdodDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1yaWdodDozcHh9LmVsLXRhYmxlLWNvbHVtbi0tc2VsZWN0aW9uIC5jZWxse3BhZGRpbmctbGVmdDoxNHB4O3BhZGRpbmctcmlnaHQ6MTRweH0uZWwtdGFibGUtZmlsdGVye2JvcmRlcjoxcHggc29saWQgI2ViZWVmNTtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjoycHggMH0uZWwtZGF0ZS10YWJsZSB0ZCwuZWwtZGF0ZS10YWJsZSB0ZCBkaXZ7aGVpZ2h0OjMwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdHtwYWRkaW5nOjVweCAwO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTttaW4td2lkdGg6MTAwcHh9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVte2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDEwcHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHh9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VjZjVmZjtjb2xvcjojNjZiMWZmfS5lbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbS5pcy1hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmO2NvbG9yOiNmZmZ9LmVsLXRhYmxlLWZpbHRlcl9fY29udGVudHttaW4td2lkdGg6MTAwcHh9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9te2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmVlZjU7cGFkZGluZzo4cHh9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbntiYWNrZ3JvdW5kOjAgMDtib3JkZXI6bm9uZTtjb2xvcjojNjA2MjY2O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6MCAzcHh9LmVsLWRhdGUtdGFibGUuaXMtd2Vlay1tb2RlIC5lbC1kYXRlLXRhYmxlX19yb3cuY3VycmVudCBkaXYsLmVsLWRhdGUtdGFibGUuaXMtd2Vlay1tb2RlIC5lbC1kYXRlLXRhYmxlX19yb3c6aG92ZXIgZGl2LC5lbC1kYXRlLXRhYmxlIHRkLmluLXJhbmdlIGRpdiwuZWwtZGF0ZS10YWJsZSB0ZC5pbi1yYW5nZSBkaXY6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmNmZjfS5lbC10YWJsZS1maWx0ZXJfX2JvdHRvbSBidXR0b246aG92ZXJ7Y29sb3I6IzQwOWVmZn0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uOmZvY3Vze291dGxpbmU6MH0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uLmlzLWRpc2FibGVke2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC10YWJsZS1maWx0ZXJfX3dyYXB7bWF4LWhlaWdodDoyODBweH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cHtwYWRkaW5nOjEwcHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAgbGFiZWwuZWwtY2hlY2tib3h7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1ib3R0b206OHB4O21hcmdpbi1sZWZ0OjVweH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cCAuZWwtY2hlY2tib3g6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmVsLWRhdGUtdGFibGV7Zm9udC1zaXplOjEycHg7LW1zLXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVyIHRkLmF2YWlsYWJsZTpob3Zlcntjb2xvcjojNjA2MjY2fS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVyIHRkOmZpcnN0LWNoaWxkIGRpdnttYXJnaW4tbGVmdDo1cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoxNXB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciB0ZDpsYXN0LWNoaWxkIGRpdnttYXJnaW4tcmlnaHQ6NXB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjE1cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MTVweH0uZWwtZGF0ZS10YWJsZSB0ZHt3aWR0aDozMnB4O3BhZGRpbmc6NHB4IDA7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1kYXRlLXRhYmxlIHRkIGRpdntwYWRkaW5nOjNweCAwO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS10YWJsZSB0ZCBzcGFue3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7ZGlzcGxheTpibG9jazttYXJnaW46MCBhdXRvO2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWRhdGUtdGFibGUgdGQubmV4dC1tb250aCwuZWwtZGF0ZS10YWJsZSB0ZC5wcmV2LW1vbnRoe2NvbG9yOiNjMGM0Y2N9LmVsLWRhdGUtdGFibGUgdGQudG9kYXl7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtdGFibGUgdGQudG9kYXkgc3Bhbntjb2xvcjojNDA5ZWZmO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtZGF0ZS10YWJsZSB0ZC50b2RheS5lbmQtZGF0ZSBzcGFuLC5lbC1kYXRlLXRhYmxlIHRkLnRvZGF5LnN0YXJ0LWRhdGUgc3Bhbntjb2xvcjojZmZmfS5lbC1kYXRlLXRhYmxlIHRkLmF2YWlsYWJsZTpob3Zlcntjb2xvcjojNDA5ZWZmfS5lbC1kYXRlLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgc3Bhbntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQwOWVmZn0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBkaXYsLmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Y29sb3I6I2ZmZn0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBzcGFuLC5lbC1kYXRlLXRhYmxlIHRkLnN0YXJ0LWRhdGUgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7bWFyZ2luLWxlZnQ6NXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQuZW5kLWRhdGUgZGl2e21hcmdpbi1yaWdodDo1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoxNXB4fS5lbC1kYXRlLXRhYmxlIHRkLmRpc2FibGVkIGRpdntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmE7b3BhY2l0eToxO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojYzBjNGNjfS5lbC1kYXRlLXRhYmxlIHRkLnNlbGVjdGVkIGRpdnttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmMmY2ZmM7Ym9yZGVyLXJhZGl1czoxNXB4fS5lbC1kYXRlLXRhYmxlIHRkLnNlbGVjdGVkIGRpdjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmY2ZmN9LmVsLWRhdGUtdGFibGUgdGQuc2VsZWN0ZWQgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmY7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQud2Vla3tmb250LXNpemU6ODAlO2NvbG9yOiM2MDYyNjZ9LmVsLW1vbnRoLXRhYmxlLC5lbC15ZWFyLXRhYmxle2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uZWwtZGF0ZS10YWJsZSB0aHtwYWRkaW5nOjVweDtjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjQwMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlZWY1fS5lbC1tb250aC10YWJsZXttYXJnaW46LTFweH0uZWwtbW9udGgtdGFibGUgdGR7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzo4cHggMDtjdXJzb3I6cG9pbnRlcn0uZWwtbW9udGgtdGFibGUgdGQgZGl2e2hlaWdodDo0OHB4O3BhZGRpbmc6NnB4IDA7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1tb250aC10YWJsZSB0ZC50b2RheSAuY2VsbHtjb2xvcjojNDA5ZWZmO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtbW9udGgtdGFibGUgdGQudG9kYXkuZW5kLWRhdGUgLmNlbGwsLmVsLW1vbnRoLXRhYmxlIHRkLnRvZGF5LnN0YXJ0LWRhdGUgLmNlbGx7Y29sb3I6I2ZmZn0uZWwtbW9udGgtdGFibGUgdGQuZGlzYWJsZWQgLmNlbGx7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojYzBjNGNjfS5lbC1tb250aC10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbDpob3Zlcntjb2xvcjojYzBjNGNjfS5lbC1tb250aC10YWJsZSB0ZCAuY2VsbHt3aWR0aDo2MHB4O2hlaWdodDozNnB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MzZweDtjb2xvcjojNjA2MjY2O21hcmdpbjowIGF1dG87Ym9yZGVyLXJhZGl1czoxOHB4fS5lbC1tb250aC10YWJsZSB0ZCAuY2VsbDpob3Zlcntjb2xvcjojNDA5ZWZmfS5lbC1tb250aC10YWJsZSB0ZC5pbi1yYW5nZSBkaXYsLmVsLW1vbnRoLXRhYmxlIHRkLmluLXJhbmdlIGRpdjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmY2ZmN9LmVsLW1vbnRoLXRhYmxlIHRkLmVuZC1kYXRlIGRpdiwuZWwtbW9udGgtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Y29sb3I6I2ZmZn0uZWwtbW9udGgtdGFibGUgdGQuZW5kLWRhdGUgLmNlbGwsLmVsLW1vbnRoLXRhYmxlIHRkLnN0YXJ0LWRhdGUgLmNlbGx7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLW1vbnRoLXRhYmxlIHRkLnN0YXJ0LWRhdGUgZGl2e2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjI0cHh9LmVsLW1vbnRoLXRhYmxlIHRkLmVuZC1kYXRlIGRpdntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoyNHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjI0cHh9LmVsLW1vbnRoLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgLmNlbGx7Y29sb3I6IzQwOWVmZn0uZWwteWVhci10YWJsZXttYXJnaW46LTFweH0uZWwteWVhci10YWJsZSAuZWwtaWNvbntjb2xvcjojMzAzMTMzfS5lbC15ZWFyLXRhYmxlIHRke3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjBweCAzcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXllYXItdGFibGUgdGQudG9kYXkgLmNlbGx7Y29sb3I6IzQwOWVmZjtmb250LXdlaWdodDo3MDB9LmVsLXllYXItdGFibGUgdGQuZGlzYWJsZWQgLmNlbGx7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojYzBjNGNjfS5lbC15ZWFyLXRhYmxlIHRkLmRpc2FibGVkIC5jZWxsOmhvdmVye2NvbG9yOiNjMGM0Y2N9LmVsLXllYXItdGFibGUgdGQgLmNlbGx7d2lkdGg6NDhweDtoZWlnaHQ6MzJweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjMycHg7Y29sb3I6IzYwNjI2NjttYXJnaW46MCBhdXRvfS5lbC15ZWFyLXRhYmxlIHRkIC5jZWxsOmhvdmVyLC5lbC15ZWFyLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgLmNlbGx7Y29sb3I6IzQwOWVmZn0uZWwtZGF0ZS1yYW5nZS1waWNrZXJ7d2lkdGg6NjQ2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyLmhhcy1zaWRlYmFye3dpZHRoOjc1NnB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlciB0YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uZWwtZGF0ZS1yYW5nZS1waWNrZXIgLmVsLXBpY2tlci1wYW5lbF9fYm9keXttaW4td2lkdGg6NTEzcHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7bWFyZ2luOjB9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjI4cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIgW2NsYXNzKj1hcnJvdy1sZWZ0XXtmbG9hdDpsZWZ0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIFtjbGFzcyo9YXJyb3ctcmlnaHRde2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIGRpdntmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7bWFyZ2luLXJpZ2h0OjUwcHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50e2Zsb2F0OmxlZnQ7d2lkdGg6NTAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjE2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50LmlzLWxlZnR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTRlNGU0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCAuZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciBkaXZ7bWFyZ2luLWxlZnQ6NTBweDttYXJnaW4tcmlnaHQ6NTBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTp0YWJsZS1jZWxsfS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwLmlzLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OHB4IDVweCA1cHg7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtaGVhZGVyPi5lbC1pY29uLWFycm93LXJpZ2h0e2ZvbnQtc2l6ZToyMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGw7Y29sb3I6IzMwMzEzM30uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA1cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIC5lbC1waWNrZXItcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEzcHg7cmlnaHQ6MDt6LWluZGV4OjE7YmFja2dyb3VuZDojZmZmfS5lbC1kYXRlLXBpY2tlcnt3aWR0aDozMjJweH0uZWwtZGF0ZS1waWNrZXIuaGFzLXNpZGViYXIuaGFzLXRpbWV7d2lkdGg6NDM0cHh9LmVsLWRhdGUtcGlja2VyLmhhcy1zaWRlYmFye3dpZHRoOjQzOHB4fS5lbC1kYXRlLXBpY2tlci5oYXMtdGltZSAuZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7d2lkdGg6MjkycHh9LmVsLWRhdGUtcGlja2VyIHRhYmxle3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5lbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA1cHh9LmVsLWRhdGUtcGlja2VyX190aW1lLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OHB4IDVweCA1cHg7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlcnttYXJnaW46MTJweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWR7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNX0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWQrLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXJnaW4tdG9wOjB9LmVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWx7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6MjJweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjA2MjY2fS5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsLmFjdGl2ZSwuZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbDpob3Zlcntjb2xvcjojNDA5ZWZmfS5lbC1kYXRlLXBpY2tlcl9fcHJldi1idG57ZmxvYXQ6bGVmdH0uZWwtZGF0ZS1waWNrZXJfX25leHQtYnRue2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXBpY2tlcl9fdGltZS13cmFwe3BhZGRpbmc6MTBweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX3RpbWUtbGFiZWx7ZmxvYXQ6bGVmdDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjEwcHh9LnRpbWUtc2VsZWN0e21hcmdpbjo1cHggMDttaW4td2lkdGg6MH0udGltZS1zZWxlY3QgLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXgtaGVpZ2h0OjIwMHB4O21hcmdpbjowfS50aW1lLXNlbGVjdC1pdGVte3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweH0udGltZS1zZWxlY3QtaXRlbS5zZWxlY3RlZDpub3QoLmRpc2FibGVkKXtjb2xvcjojNDA5ZWZmO2ZvbnQtd2VpZ2h0OjcwMH0udGltZS1zZWxlY3QtaXRlbS5kaXNhYmxlZHtjb2xvcjojZTRlN2VkO2N1cnNvcjpub3QtYWxsb3dlZH0udGltZS1zZWxlY3QtaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmE7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS5lbC1kYXRlLWVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmxlZnR9LmVsLWRhdGUtZWRpdG9yLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci5lbC1pbnB1dF9faW5uZXJ7d2lkdGg6MjIwcHh9LmVsLWRhdGUtZWRpdG9yLS1tb250aHJhbmdlLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci0tbW9udGhyYW5nZS5lbC1pbnB1dF9faW5uZXJ7d2lkdGg6MzAwcHh9LmVsLWRhdGUtZWRpdG9yLS1kYXRlcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1kYXRlcmFuZ2UuZWwtaW5wdXRfX2lubmVyLC5lbC1kYXRlLWVkaXRvci0tdGltZXJhbmdlLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci0tdGltZXJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDozNTBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGV0aW1lcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1kYXRldGltZXJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDo0MDBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGVzIC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLWRhdGUtZWRpdG9yIC5lbC1pY29uLWNpcmNsZS1jbG9zZXtjdXJzb3I6cG9pbnRlcn0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlX19pY29ue2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1sZWZ0Oi01cHg7Y29sb3I6I2MwYzRjYztmbG9hdDpsZWZ0O2xpbmUtaGVpZ2h0OjMycHh9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dCwuZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLXNlcGFyYXRvcntoZWlnaHQ6MTAwJTttYXJnaW46MDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTRweH0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO3dpZHRoOjM5JTtjb2xvcjojNjA2MjY2fS5lbC1kYXRlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojYzBjNGNjfS5lbC1kYXRlLWVkaXRvciAuZWwtcmFuZ2UtaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1zZXBhcmF0b3J7cGFkZGluZzowIDVweDtsaW5lLWhlaWdodDozMnB4O3dpZHRoOjUlO2NvbG9yOiMzMDMxMzN9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZV9fY2xvc2UtaWNvbntmb250LXNpemU6MTRweDtjb2xvcjojYzBjNGNjO3dpZHRoOjI1cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6cmlnaHQ7bGluZS1oZWlnaHQ6MzJweH0uZWwtcmFuZ2UtZWRpdG9yLmVsLWlucHV0X19pbm5lcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjNweCAxMHB4fS5lbC1yYW5nZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0e2xpbmUtaGVpZ2h0OjF9LmVsLXJhbmdlLWVkaXRvci5pcy1hY3RpdmUsLmVsLXJhbmdlLWVkaXRvci5pcy1hY3RpdmU6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM0MDllZmZ9LmVsLXJhbmdlLWVkaXRvci0tbWVkaXVtLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzZweH0uZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0gLmVsLXJhbmdlLXNlcGFyYXRvcntsaW5lLWhlaWdodDoyOHB4O2ZvbnQtc2l6ZToxNHB4fS5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bSAuZWwtcmFuZ2UtaW5wdXR7Zm9udC1zaXplOjE0cHh9LmVsLXJhbmdlLWVkaXRvci0tbWVkaXVtIC5lbC1yYW5nZV9fY2xvc2UtaWNvbiwuZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0gLmVsLXJhbmdlX19pY29ue2xpbmUtaGVpZ2h0OjI4cHh9LmVsLXJhbmdlLWVkaXRvci0tc21hbGwuZWwtaW5wdXRfX2lubmVye2hlaWdodDozMnB4fS5lbC1yYW5nZS1lZGl0b3ItLXNtYWxsIC5lbC1yYW5nZS1zZXBhcmF0b3J7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MTNweH0uZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbCAuZWwtcmFuZ2UtaW5wdXR7Zm9udC1zaXplOjEzcHh9LmVsLXJhbmdlLWVkaXRvci0tc21hbGwgLmVsLXJhbmdlX19jbG9zZS1pY29uLC5lbC1yYW5nZS1lZGl0b3ItLXNtYWxsIC5lbC1yYW5nZV9faWNvbntsaW5lLWhlaWdodDoyNHB4fS5lbC1yYW5nZS1lZGl0b3ItLW1pbmkuZWwtaW5wdXRfX2lubmVye2hlaWdodDoyOHB4fS5lbC1yYW5nZS1lZGl0b3ItLW1pbmkgLmVsLXJhbmdlLXNlcGFyYXRvcntsaW5lLWhlaWdodDoyMHB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1yYW5nZS1lZGl0b3ItLW1pbmkgLmVsLXJhbmdlLWlucHV0e2ZvbnQtc2l6ZToxMnB4fS5lbC1yYW5nZS1lZGl0b3ItLW1pbmkgLmVsLXJhbmdlX19jbG9zZS1pY29uLC5lbC1yYW5nZS1lZGl0b3ItLW1pbmkgLmVsLXJhbmdlX19pY29ue2xpbmUtaGVpZ2h0OjIwcHh9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmE7Ym9yZGVyLWNvbG9yOiNlNGU3ZWQ7Y29sb3I6I2MwYzRjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZDpmb2N1cywuZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkOmhvdmVye2JvcmRlci1jb2xvcjojZTRlN2VkfS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQgaW5wdXR7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojYzBjNGNjfS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQgaW5wdXQ6OnBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCAuZWwtcmFuZ2Utc2VwYXJhdG9ye2NvbG9yOiNjMGM0Y2N9LmVsLXBpY2tlci1wYW5lbHtjb2xvcjojNjA2MjY2O2JvcmRlcjoxcHggc29saWQgI2U0ZTdlZDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo0cHg7bGluZS1oZWlnaHQ6MzBweDttYXJnaW46NXB4IDB9LmVsLXBvcG92ZXIsLmVsLXRpbWUtcGFuZWx7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXI6YWZ0ZXIsLmVsLXBpY2tlci1wYW5lbF9fYm9keTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Y2xlYXI6Ym90aH0uZWwtcGlja2VyLXBhbmVsX19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjoxNXB4fS5lbC1waWNrZXItcGFuZWxfX2Zvb3Rlcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6NHB4O3RleHQtYWxpZ246cmlnaHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZTowfS5lbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2xpbmUtaGVpZ2h0OjI4cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtwYWRkaW5nLWxlZnQ6MTJweDt0ZXh0LWFsaWduOmxlZnQ7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyfS5lbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0OmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXQuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2U2ZjFmZTtjb2xvcjojNDA5ZWZmfS5lbC1waWNrZXItcGFuZWxfX2J0bntib3JkZXI6MXB4IHNvbGlkICNkY2RjZGM7Y29sb3I6IzMzMztsaW5lLWhlaWdodDoyNHB4O2JvcmRlci1yYWRpdXM6MnB4O3BhZGRpbmc6MCAyMHB4O2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3V0bGluZTowO2ZvbnQtc2l6ZToxMnB4fS5lbC1waWNrZXItcGFuZWxfX2J0bltkaXNhYmxlZF17Y29sb3I6I2NjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBpY2tlci1wYW5lbF9faWNvbi1idG57Zm9udC1zaXplOjEycHg7Y29sb3I6IzMwMzEzMztib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7bWFyZ2luLXRvcDo4cHh9LmVsLXBpY2tlci1wYW5lbF9faWNvbi1idG46aG92ZXJ7Y29sb3I6IzQwOWVmZn0uZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0bi5pcy1kaXNhYmxlZHtjb2xvcjojYmJifS5lbC1waWNrZXItcGFuZWxfX2ljb24tYnRuLmlzLWRpc2FibGVkOmhvdmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0bnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXBpY2tlci1wYW5lbCBbc2xvdD1zaWRlYmFyXSwuZWwtcGlja2VyLXBhbmVsX19zaWRlYmFye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3dpZHRoOjExMHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2U0ZTRlNDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6NnB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdzphdXRvfS5lbC1waWNrZXItcGFuZWwgW3Nsb3Q9c2lkZWJhcl0rLmVsLXBpY2tlci1wYW5lbF9fYm9keSwuZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyKy5lbC1waWNrZXItcGFuZWxfX2JvZHl7bWFyZ2luLWxlZnQ6MTEwcHh9LmVsLXRpbWUtc3Bpbm5lci5oYXMtc2Vjb25kcyAuZWwtdGltZS1zcGlubmVyX193cmFwcGVye3dpZHRoOjMzLjMlfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJ7bWF4LWhlaWdodDoxOTBweDtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjUwJTt2ZXJ0aWNhbC1hbGlnbjp0b3A7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciAuZWwtc2Nyb2xsYmFyX193cmFwOm5vdCguZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCl7cGFkZGluZy1ib3R0b206MTVweH0uZWwtdGltZS1zcGlubmVyX19pbnB1dC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyLC5lbC10aW1lLXNwaW5uZXJfX2xpc3R7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIuaXMtYXJyb3d7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OmhpZGRlbn0uZWwtdGltZS1zcGlubmVyX193cmFwcGVyLmlzLWFycm93IC5lbC10aW1lLXNwaW5uZXJfX2xpc3R7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTMycHgpfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIuaXMtYXJyb3cgLmVsLXRpbWUtc3Bpbm5lcl9faXRlbTpob3Zlcjpub3QoLmRpc2FibGVkKTpub3QoLmFjdGl2ZSl7YmFja2dyb3VuZDojZmZmO2N1cnNvcjpkZWZhdWx0fS5lbC10aW1lLXNwaW5uZXJfX2Fycm93e2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTk7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3dpZHRoOjEwMCU7ei1pbmRleDoxO3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9fYXJyb3c6aG92ZXJ7Y29sb3I6IzQwOWVmZn0uZWwtdGltZS1zcGlubmVyX19hcnJvdy5lbC1pY29uLWFycm93LXVwe3RvcDoxMHB4fS5lbC10aW1lLXNwaW5uZXJfX2Fycm93LmVsLWljb24tYXJyb3ctZG93bntib3R0b206MTBweH0uZWwtdGltZS1zcGlubmVyX19pbnB1dC5lbC1pbnB1dHt3aWR0aDo3MCV9LmVsLXRpbWUtc3Bpbm5lcl9fbGlzdHttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmV9LmVsLXRpbWUtc3Bpbm5lcl9fbGlzdDphZnRlciwuZWwtdGltZS1zcGlubmVyX19saXN0OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6ODBweH0uZWwtdGltZS1zcGlubmVyX19pdGVte2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzYwNjI2Nn0uZWwtdGltZS1zcGlubmVyX19pdGVtOmhvdmVyOm5vdCguZGlzYWJsZWQpOm5vdCguYWN0aXZlKXtiYWNrZ3JvdW5kOiNmNWY3ZmE7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbS5hY3RpdmU6bm90KC5kaXNhYmxlZCl7Y29sb3I6IzMwMzEzMztmb250LXdlaWdodDo3MDB9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbS5kaXNhYmxlZHtjb2xvcjojYzBjNGNjO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdGltZS1wYW5lbHttYXJnaW46NXB4IDA7Ym9yZGVyOjFweCBzb2xpZCAjZTRlN2VkO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3JkZXItcmFkaXVzOjJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxODBweDtsZWZ0OjA7ei1pbmRleDoxMDAwO3VzZXItc2VsZWN0Om5vbmU7Ym94LXNpemluZzpjb250ZW50LWJveH0uZWwtc2xpZGVyX19idXR0b24sLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIsLmVsLXRpbWUtcGFuZWx7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uZWwtdGltZS1wYW5lbF9fY29udGVudHtmb250LXNpemU6MDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQ6YWZ0ZXIsLmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQ6YmVmb3Jle2NvbnRlbnQ6IiI7dG9wOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tdG9wOi0xNXB4O2hlaWdodDozMnB4O3otaW5kZXg6LTE7bGVmdDowO3JpZ2h0OjA7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjZweDt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTdlZDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlN2VkfS5lbC10aW1lLXBhbmVsX19jb250ZW50OmFmdGVye2xlZnQ6NTAlO21hcmdpbi1sZWZ0OjEyJTttYXJnaW4tcmlnaHQ6MTIlfS5lbC10aW1lLXBhbmVsX19jb250ZW50OmJlZm9yZXtwYWRkaW5nLWxlZnQ6NTAlO21hcmdpbi1yaWdodDoxMiU7bWFyZ2luLWxlZnQ6MTIlfS5lbC10aW1lLXBhbmVsX19jb250ZW50Lmhhcy1zZWNvbmRzOmFmdGVye2xlZnQ6NjYuNjY2NjclfS5lbC10aW1lLXBhbmVsX19jb250ZW50Lmhhcy1zZWNvbmRzOmJlZm9yZXtwYWRkaW5nLWxlZnQ6MzMuMzMzMzMlfS5lbC10aW1lLXBhbmVsX19mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTRlNDtwYWRkaW5nOjRweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoyNXB4O3RleHQtYWxpZ246cmlnaHQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10aW1lLXBhbmVsX19idG57Ym9yZGVyOm5vbmU7bGluZS1oZWlnaHQ6MjhweDtwYWRkaW5nOjAgNXB4O21hcmdpbjowIDVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweDtjb2xvcjojMzAzMTMzfS5lbC10aW1lLXBhbmVsX19idG4uY29uZmlybXtmb250LXdlaWdodDo4MDA7Y29sb3I6IzQwOWVmZn0uZWwtdGltZS1yYW5nZS1waWNrZXJ7d2lkdGg6MzU0cHg7b3ZlcmZsb3c6dmlzaWJsZX0uZWwtdGltZS1yYW5nZS1waWNrZXJfX2NvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoxMHB4fS5lbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbHtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzo0cHggN3B4IDdweDt3aWR0aDo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXJ7bWFyZ2luLWJvdHRvbTo1cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHh9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2U0ZTdlZH0uZWwtcG9wb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNmZmY7bWluLXdpZHRoOjE1MHB4O2JvcmRlcjoxcHggc29saWQgI2ViZWVmNTtwYWRkaW5nOjEycHg7ei1pbmRleDoyMDAwO2NvbG9yOiM2MDYyNjY7bGluZS1oZWlnaHQ6MS40O3RleHQtYWxpZ246anVzdGlmeTtmb250LXNpemU6MTRweDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uZWwtcG9wb3Zlci0tcGxhaW57cGFkZGluZzoxOHB4IDIwcHh9LmVsLXBvcG92ZXJfX3RpdGxle2NvbG9yOiMzMDMxMzM7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTttYXJnaW4tYm90dG9tOjEycHh9LnYtbW9kYWwtZW50ZXJ7LXdlYmtpdC1hbmltYXRpb246di1tb2RhbC1pbiAuMnMgZWFzZTthbmltYXRpb246di1tb2RhbC1pbiAuMnMgZWFzZX0udi1tb2RhbC1sZWF2ZXstd2Via2l0LWFuaW1hdGlvbjp2LW1vZGFsLW91dCAuMnMgZWFzZSBmb3J3YXJkczthbmltYXRpb246di1tb2RhbC1vdXQgLjJzIGVhc2UgZm9yd2FyZHN9QGtleWZyYW1lcyB2LW1vZGFsLWluezAle29wYWNpdHk6MH19QGtleWZyYW1lcyB2LW1vZGFsLW91dHt0b3tvcGFjaXR5OjB9fS52LW1vZGFse3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO29wYWNpdHk6LjU7YmFja2dyb3VuZDojMDAwfS5lbC1wb3B1cC1wYXJlbnQtLWhpZGRlbntvdmVyZmxvdzpoaWRkZW59LmVsLW1lc3NhZ2UtYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjQyMHB4O3BhZGRpbmctYm90dG9tOjEwcHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNlYmVlZjU7Zm9udC1zaXplOjE4cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OmhpZGRlbjstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS5lbC1tZXNzYWdlLWJveF9fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXI6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE1cHggMTVweCAxMHB4fS5lbC1tZXNzYWdlLWJveF9fdGl0bGV7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjE7Y29sb3I6IzMwMzEzM30uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0bntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTVweDtyaWdodDoxNXB4O3BhZGRpbmc6MDtib3JkZXI6bm9uZTtvdXRsaW5lOjA7YmFja2dyb3VuZDowIDA7Zm9udC1zaXplOjE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtaW5wdXRfX2lubmVyLC5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0X19pbm5lcjpmb2N1cywuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC10ZXh0YXJlYV9faW5uZXIsLmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtdGV4dGFyZWFfX2lubmVyOmZvY3VzLC5lbC1tZXNzYWdlLWJveF9faW5wdXQgaW5wdXQuaW52YWxpZCwuZWwtbWVzc2FnZS1ib3hfX2lucHV0IGlucHV0LmludmFsaWQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmNTZjNmN9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG4gLmVsLW1lc3NhZ2UtYm94X19jbG9zZXtjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuOmZvY3VzIC5lbC1tZXNzYWdlLWJveF9fY2xvc2UsLmVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG46aG92ZXIgLmVsLW1lc3NhZ2UtYm94X19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC1tZXNzYWdlLWJveF9fY29udGVudHtwYWRkaW5nOjEwcHggMTVweDtjb2xvcjojNjA2MjY2O2ZvbnQtc2l6ZToxNHB4fS5lbC1tZXNzYWdlLWJveF9fY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1tZXNzYWdlLWJveF9faW5wdXR7cGFkZGluZy10b3A6MTVweH0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1c3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2ZvbnQtc2l6ZToyNHB4IWltcG9ydGFudH0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1czpiZWZvcmV7cGFkZGluZy1sZWZ0OjFweH0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1cysuZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2V7cGFkZGluZy1sZWZ0OjM2cHg7cGFkZGluZy1yaWdodDoxMnB4fS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24tc3VjY2Vzc3tjb2xvcjojNjdjMjNhfS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24taW5mb3tjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24td2FybmluZ3tjb2xvcjojZTZhMjNjfS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24tZXJyb3J7Y29sb3I6I2Y1NmM2Y30uZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2V7bWFyZ2luOjB9LmVsLW1lc3NhZ2UtYm94X19tZXNzYWdlIHB7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MjRweH0uZWwtbWVzc2FnZS1ib3hfX2Vycm9ybXNne2NvbG9yOiNmNTZjNmM7Zm9udC1zaXplOjEycHg7bWluLWhlaWdodDoxOHB4O21hcmdpbi10b3A6MnB4fS5lbC1tZXNzYWdlLWJveF9fYnRuc3twYWRkaW5nOjVweCAxNXB4IDA7dGV4dC1hbGlnbjpyaWdodH0uZWwtbWVzc2FnZS1ib3hfX2J0bnMgYnV0dG9uOm50aC1jaGlsZCgyKXttYXJnaW4tbGVmdDoxMHB4fS5lbC1tZXNzYWdlLWJveF9fYnRucy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5lbC1tZXNzYWdlLWJveC0tY2VudGVye3BhZGRpbmctYm90dG9tOjMwcHh9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19oZWFkZXJ7cGFkZGluZy10b3A6MzBweH0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX3RpdGxle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX3N0YXR1c3twb3NpdGlvbjpyZWxhdGl2ZTt0b3A6YXV0bztwYWRkaW5nLXJpZ2h0OjVweDt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMXB4KX0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2V7bWFyZ2luLWxlZnQ6MH0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX2J0bnMsLmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19jb250ZW50e3RleHQtYWxpZ246Y2VudGVyfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fY29udGVudHtwYWRkaW5nLWxlZnQ6MjdweDtwYWRkaW5nLXJpZ2h0OjI3cHh9Lm1zZ2JveC1mYWRlLWVudGVyLWFjdGl2ZXstd2Via2l0LWFuaW1hdGlvbjptc2dib3gtZmFkZS1pbiAuM3M7YW5pbWF0aW9uOm1zZ2JveC1mYWRlLWluIC4zc30ubXNnYm94LWZhZGUtbGVhdmUtYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOm1zZ2JveC1mYWRlLW91dCAuM3M7YW5pbWF0aW9uOm1zZ2JveC1mYWRlLW91dCAuM3N9QC13ZWJraXQta2V5ZnJhbWVzIG1zZ2JveC1mYWRlLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWigwKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgbXNnYm94LWZhZGUtaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO29wYWNpdHk6MX19QC13ZWJraXQta2V5ZnJhbWVzIG1zZ2JveC1mYWRlLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1zZ2JveC1mYWRlLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX0uZWwtYnJlYWRjcnVtYntmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxfS5lbC1icmVhZGNydW1iOmFmdGVyLC5lbC1icmVhZGNydW1iOmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6IiJ9LmVsLWJyZWFkY3J1bWI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9ye21hcmdpbjowIDlweDtmb250LXdlaWdodDo3MDA7Y29sb3I6I2MwYzRjY30uZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9yW2NsYXNzKj1pY29uXXttYXJnaW46MCA2cHg7Zm9udC13ZWlnaHQ6NDAwfS5lbC1icmVhZGNydW1iX19pdGVte2Zsb2F0OmxlZnR9LmVsLWJyZWFkY3J1bWJfX2lubmVye2NvbG9yOiM2MDYyNjZ9LmVsLWJyZWFkY3J1bWJfX2lubmVyLmlzLWxpbmssLmVsLWJyZWFkY3J1bWJfX2lubmVyIGF7Zm9udC13ZWlnaHQ6NzAwO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zaXRpb246Y29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtjb2xvcjojMzAzMTMzfS5lbC1icmVhZGNydW1iX19pbm5lci5pcy1saW5rOmhvdmVyLC5lbC1icmVhZGNydW1iX19pbm5lciBhOmhvdmVye2NvbG9yOiM0MDllZmY7Y3Vyc29yOnBvaW50ZXJ9LmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXIsLmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXI6aG92ZXIsLmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXIgYSwuZWwtYnJlYWRjcnVtYl9faXRlbTpsYXN0LWNoaWxkIC5lbC1icmVhZGNydW1iX19pbm5lciBhOmhvdmVye2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjA2MjY2O2N1cnNvcjp0ZXh0fS5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvcntkaXNwbGF5Om5vbmV9LmVsLWZvcm0tLWxhYmVsLWxlZnQgLmVsLWZvcm0taXRlbV9fbGFiZWx7dGV4dC1hbGlnbjpsZWZ0fS5lbC1mb3JtLS1sYWJlbC10b3AgLmVsLWZvcm0taXRlbV9fbGFiZWx7ZmxvYXQ6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzowIDAgMTBweH0uZWwtZm9ybS0taW5saW5lIC5lbC1mb3JtLWl0ZW17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEwcHg7dmVydGljYWwtYWxpZ246dG9wfS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbV9fbGFiZWx7ZmxvYXQ6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtZm9ybS0taW5saW5lIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnR7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wfS5lbC1mb3JtLS1pbmxpbmUuZWwtZm9ybS0tbGFiZWwtdG9wIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnR7ZGlzcGxheTpibG9ja30uZWwtZm9ybS1pdGVte21hcmdpbi1ib3R0b206MjJweH0uZWwtZm9ybS1pdGVtOmFmdGVyLC5lbC1mb3JtLWl0ZW06YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDoiIn0uZWwtZm9ybS1pdGVtOmFmdGVye2NsZWFyOmJvdGh9LmVsLWZvcm0taXRlbSAuZWwtZm9ybS1pdGVte21hcmdpbi1ib3R0b206MH0uZWwtZm9ybS1pdGVtLS1taW5pLmVsLWZvcm0taXRlbSwuZWwtZm9ybS1pdGVtLS1zbWFsbC5lbC1mb3JtLWl0ZW17bWFyZ2luLWJvdHRvbToxOHB4fS5lbC1mb3JtLWl0ZW0gLmVsLWlucHV0X192YWxpZGF0ZUljb257ZGlzcGxheTpub25lfS5lbC1mb3JtLWl0ZW0tLW1lZGl1bSAuZWwtZm9ybS1pdGVtX19jb250ZW50LC5lbC1mb3JtLWl0ZW0tLW1lZGl1bSAuZWwtZm9ybS1pdGVtX19sYWJlbHtsaW5lLWhlaWdodDozNnB4fS5lbC1mb3JtLWl0ZW0tLXNtYWxsIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQsLmVsLWZvcm0taXRlbS0tc21hbGwgLmVsLWZvcm0taXRlbV9fbGFiZWx7bGluZS1oZWlnaHQ6MzJweH0uZWwtZm9ybS1pdGVtLS1zbWFsbCAuZWwtZm9ybS1pdGVtX19lcnJvcntwYWRkaW5nLXRvcDoycHh9LmVsLWZvcm0taXRlbS0tbWluaSAuZWwtZm9ybS1pdGVtX19jb250ZW50LC5lbC1mb3JtLWl0ZW0tLW1pbmkgLmVsLWZvcm0taXRlbV9fbGFiZWx7bGluZS1oZWlnaHQ6MjhweH0uZWwtZm9ybS1pdGVtLS1taW5pIC5lbC1mb3JtLWl0ZW1fX2Vycm9ye3BhZGRpbmctdG9wOjFweH0uZWwtZm9ybS1pdGVtX19sYWJlbC13cmFwe2Zsb2F0OmxlZnR9LmVsLWZvcm0taXRlbV9fbGFiZWwtd3JhcCAuZWwtZm9ybS1pdGVtX19sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztmbG9hdDpub25lfS5lbC1mb3JtLWl0ZW1fX2xhYmVse3RleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2Zsb2F0OmxlZnQ7Zm9udC1zaXplOjFweDtjb2xvcjojNjA2MjY2O2xpbmUtaGVpZ2h0OjIwcHg7cGFkZGluZzowIDIwcHggMCAwO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZm9ybS1pdGVtX19jb250ZW50e2xpbmUtaGVpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHh9LmVsLWZvcm0taXRlbV9fY29udGVudDphZnRlciwuZWwtZm9ybS1pdGVtX19jb250ZW50OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6IiJ9LmVsLWZvcm0taXRlbV9fY29udGVudDphZnRlcntjbGVhcjpib3RofS5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQgLmVsLWlucHV0LWdyb3Vwe3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtZm9ybS1pdGVtX19lcnJvcntjb2xvcjojZjU2YzZjO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE7cGFkZGluZy10b3A6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MH0uZWwtZm9ybS1pdGVtX19lcnJvci0taW5saW5le3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDphdXRvO2xlZnQ6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5lbC1mb3JtLWl0ZW0uaXMtcmVxdWlyZWQ6bm90KC5pcy1uby1hc3RlcmlzaykgLmVsLWZvcm0taXRlbV9fbGFiZWwtd3JhcD4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmUsLmVsLWZvcm0taXRlbS5pcy1yZXF1aXJlZDpub3QoLmlzLW5vLWFzdGVyaXNrKT4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmV7Y29udGVudDoiKiI7Y29sb3I6I2Y1NmM2YzttYXJnaW4tcmlnaHQ6NHB4fS5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWlucHV0X19pbm5lciwuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9fdmFsaWRhdGVJY29ue2NvbG9yOiNmNTZjNmN9LmVsLWZvcm0taXRlbS0tZmVlZGJhY2sgLmVsLWlucHV0X192YWxpZGF0ZUljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRhYnNfX2hlYWRlcntwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjAgMCAxNXB4fS5lbC10YWJzX19hY3RpdmUtYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtoZWlnaHQ6MnB4O2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtsaXN0LXN0eWxlOm5vbmV9LmVsLXRhYnNfX25ldy10YWJ7ZmxvYXQ6cmlnaHQ7Ym9yZGVyOjFweCBzb2xpZCAjZDNkY2U2O2hlaWdodDoxOHB4O3dpZHRoOjE4cHg7bGluZS1oZWlnaHQ6MThweDttYXJnaW46MTJweCAwIDlweCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNkM2RjZTY7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjE1c30uZWwtY29sbGFwc2UtaXRlbV9fYXJyb3csLmVsLXRhYnNfX25hdnstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzfS5lbC10YWJzX19uZXctdGFiIC5lbC1pY29uLXBsdXN7dHJhbnNmb3JtOnNjYWxlKC44KX0uZWwtdGFic19fbmV3LXRhYjpob3Zlcntjb2xvcjojNDA5ZWZmfS5lbC10YWJzX19uYXYtd3JhcHtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbTotMXB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJzX19uYXYtd3JhcDphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt3aWR0aDoxMDAlO2hlaWdodDoycHg7YmFja2dyb3VuZC1jb2xvcjojZTRlN2VkO3otaW5kZXg6MX0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fbmF2LXdyYXA6YWZ0ZXIsLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fbmF2LXdyYXA6YWZ0ZXJ7Y29udGVudDpub25lfS5lbC10YWJzX19uYXYtd3JhcC5pcy1zY3JvbGxhYmxle3BhZGRpbmc6MCAyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGFic19fbmF2LXNjcm9sbHtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzX19uYXYtcHJldntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTl9LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OjB9LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6MH0uZWwtdGFic19fbmF2e3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7ZmxvYXQ6bGVmdDt6LWluZGV4OjJ9LmVsLXRhYnNfX25hdi5pcy1zdHJldGNoe21pbi13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleH0uZWwtdGFic19fbmF2LmlzLXN0cmV0Y2g+KntmbGV4OjE7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYnNfX2l0ZW17cGFkZGluZzowIDIwcHg7aGVpZ2h0OjQwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2xpbmUtaGVpZ2h0OjQwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGlzdC1zdHlsZTpub25lO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtjb2xvcjojMzAzMTMzO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJzX19pdGVtOmZvY3VzLC5lbC10YWJzX19pdGVtOmZvY3VzOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLXRhYnNfX2l0ZW06Zm9jdXMuaXMtYWN0aXZlLmlzLWZvY3VzOm5vdCg6YWN0aXZlKXtib3gtc2hhZG93Omluc2V0IDAgMCAycHggMnB4ICM0MDllZmY7Ym9yZGVyLXJhZGl1czozcHh9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2V7Ym9yZGVyLXJhZGl1czo1MCU7dGV4dC1hbGlnbjpjZW50ZXI7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTttYXJnaW4tbGVmdDo1cHh9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2U6YmVmb3Jle3RyYW5zZm9ybTpzY2FsZSguOSk7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2U6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzBjNGNjO2NvbG9yOiNmZmZ9LmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZle2NvbG9yOiM0MDllZmZ9LmVsLXRhYnNfX2l0ZW06aG92ZXJ7Y29sb3I6IzQwOWVmZjtjdXJzb3I6cG9pbnRlcn0uZWwtdGFic19faXRlbS5pcy1kaXNhYmxlZHtjb2xvcjojYzBjNGNjO2N1cnNvcjpkZWZhdWx0fS5lbC10YWJzX19jb250ZW50e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU3ZWR9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fbmF2e2JvcmRlcjoxcHggc29saWQgI2U0ZTdlZDtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19fYWN0aXZlLWJhcntkaXNwbGF5Om5vbmV9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZXtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTJweDt3aWR0aDowO2hlaWdodDoxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtsaW5lLWhlaWdodDoxNXB4O292ZXJmbG93OmhpZGRlbjt0b3A6LTFweDtyaWdodDotMnB4O3RyYW5zZm9ybS1vcmlnaW46MTAwJSA1MCV9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmUuaXMtY2xvc2FibGUgLmVsLWljb24tY2xvc2UsLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1jbG9zYWJsZTpob3ZlciAuZWwtaWNvbi1jbG9zZXt3aWR0aDoxNHB4fS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlNGU3ZWQ7dHJhbnNpdGlvbjpjb2xvciAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpLHBhZGRpbmcgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0Om5vbmV9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1jbG9zYWJsZTpob3ZlcntwYWRkaW5nLWxlZnQ6MTNweDtwYWRkaW5nLXJpZ2h0OjEzcHh9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZlLmlzLWNsb3NhYmxle3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweH0uZWwtdGFicy0tYm9yZGVyLWNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RjZGZlNjtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IDAgcmdiYSgwLDAsMCwuMDQpfS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19fY29udGVudHtwYWRkaW5nOjE1cHh9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNGU3ZWQ7bWFyZ2luOjB9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW17dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbi10b3A6LTFweDtjb2xvcjojOTA5Mzk5fS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtKy5lbC10YWJzX19pdGVtLC5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Oi0xcHh9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZle2NvbG9yOiM0MDllZmY7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yaWdodC1jb2xvcjojZGNkZmU2O2JvcmRlci1sZWZ0LWNvbG9yOiNkY2RmZTZ9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7Y29sb3I6IzQwOWVmZn0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1kaXNhYmxlZHtjb2xvcjojYzBjNGNjfS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5pcy1zY3JvbGxhYmxlIC5lbC10YWJzX19pdGVtOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bnRoLWNoaWxkKDIpLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFic19faXRlbS5pcy10b3A6bnRoLWNoaWxkKDIpe3BhZGRpbmctbGVmdDowfS5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtYm90dG9tOmxhc3QtY2hpbGQsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faXRlbS5pcy10b3A6bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcC5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wIC5lbC10YWJzLS1yaWdodD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKXtwYWRkaW5nLWxlZnQ6MjBweH0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLXJpZ2h0Pi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnMtLXJpZ2h0Pi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjIwcHh9LmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faGVhZGVyLmlzLWJvdHRvbXttYXJnaW4tYm90dG9tOjA7bWFyZ2luLXRvcDoxMHB4fS5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1ib3R0b217Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkY2RmZTZ9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19fbmF2LXdyYXAuaXMtYm90dG9te21hcmdpbi10b3A6LTFweDttYXJnaW4tYm90dG9tOjB9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bm90KC5pcy1hY3RpdmUpe2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1ib3R0b217bWFyZ2luOjAgLTFweCAtMXB4fS5lbC10YWJzLS1sZWZ0LC5lbC10YWJzLS1yaWdodHtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi1zY3JvbGwsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faGVhZGVyLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtc2Nyb2xsLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0e2hlaWdodDoxMDAlfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLXJpZ2h0e3RvcDowO2JvdHRvbTphdXRvO3dpZHRoOjJweDtoZWlnaHQ6YXV0b30uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHR7bWFyZ2luLWJvdHRvbTowfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldntoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2IGksLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCBpLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYgaSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiBpLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYgaXt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6YXV0bzt0b3A6MH0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OmF1dG87Ym90dG9tOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdDphZnRlcntyaWdodDowO2xlZnQ6YXV0b30uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdC5pcy1zY3JvbGxhYmxlLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodC5pcy1zY3JvbGxhYmxlLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdC5pcy1zY3JvbGxhYmxlLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQuaXMtc2Nyb2xsYWJsZXtwYWRkaW5nOjMwcHggMH0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdDphZnRlciwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ6YWZ0ZXIsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0OmFmdGVyLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ6YWZ0ZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O2JvdHRvbTphdXRvO3RvcDowfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LmlzLXJpZ2h0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYuaXMtcmlnaHR7ZmxvYXQ6bm9uZX0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19faXRlbS5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faXRlbS5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19faXRlbS5pcy1yaWdodHtkaXNwbGF5OmJsb2NrfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1yaWdodHtkaXNwbGF5Om5vbmV9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0e2Zsb2F0OmxlZnQ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1yaWdodDoxMHB4fS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0e21hcmdpbi1yaWdodDotMXB4fS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLWxlZnR7dGV4dC1hbGlnbjpyaWdodH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlNGU3ZWQ7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNlNGU3ZWQ7dGV4dC1hbGlnbjpsZWZ0fS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlNGU3ZWQ7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjZTRlN2VkO2JvcmRlci1yaWdodC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmU6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmU6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fbmF2e2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U0ZTdlZDtib3JkZXItcmlnaHQ6bm9uZX0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19uZXctdGFie2Zsb2F0Om5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0e2JvcmRlci1yaWdodDoxcHggc29saWQgI2RmZTRlZH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1sZWZ0e2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOi0xcHggMCAtMXB4IC0xcHh9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmV7Ym9yZGVyLWNvbG9yOiNkMWRiZTUgdHJhbnNwYXJlbnR9LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjEwcHh9LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodHttYXJnaW4tbGVmdDotMXB4fS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLXJpZ2h0e2xlZnQ6MH0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodHtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTdlZH0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI2U0ZTdlZDtib3JkZXItdG9wOm5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQuaXMtYWN0aXZle2JvcmRlcjoxcHggc29saWQgI2U0ZTdlZDtib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodC5pcy1hY3RpdmU6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LmlzLWFjdGl2ZTpsYXN0LWNoaWxke2JvcmRlci1ib3R0b206bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fbmF2e2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U0ZTdlZDtib3JkZXItbGVmdDpub25lfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faGVhZGVyLmlzLXJpZ2h0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGZlNGVkfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodHtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O21hcmdpbjotMXB4IC0xcHggLTFweCAwfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodC5pcy1hY3RpdmV7Ym9yZGVyLWNvbG9yOiNkMWRiZTUgdHJhbnNwYXJlbnR9LnNsaWRlSW5MZWZ0LXRyYW5zaXRpb24sLnNsaWRlSW5SaWdodC10cmFuc2l0aW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zbGlkZUluUmlnaHQtZW50ZXJ7LXdlYmtpdC1hbmltYXRpb246c2xpZGVJblJpZ2h0LWVudGVyIC4zczthbmltYXRpb246c2xpZGVJblJpZ2h0LWVudGVyIC4zc30uc2xpZGVJblJpZ2h0LWxlYXZle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowOy13ZWJraXQtYW5pbWF0aW9uOnNsaWRlSW5SaWdodC1sZWF2ZSAuM3M7YW5pbWF0aW9uOnNsaWRlSW5SaWdodC1sZWF2ZSAuM3N9LnNsaWRlSW5MZWZ0LWVudGVyey13ZWJraXQtYW5pbWF0aW9uOnNsaWRlSW5MZWZ0LWVudGVyIC4zczthbmltYXRpb246c2xpZGVJbkxlZnQtZW50ZXIgLjNzfS5zbGlkZUluTGVmdC1sZWF2ZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDstd2Via2l0LWFuaW1hdGlvbjpzbGlkZUluTGVmdC1sZWF2ZSAuM3M7YW5pbWF0aW9uOnNsaWRlSW5MZWZ0LWxlYXZlIC4zc31ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGVJblJpZ2h0LWVudGVyezAle29wYWNpdHk6MDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0LWVudGVyezAle29wYWNpdHk6MDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluUmlnaHQtbGVhdmV7MCV7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfXRve3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzbGlkZUluUmlnaHQtbGVhdmV7MCV7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfXRve3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO29wYWNpdHk6MH19QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5MZWZ0LWVudGVyezAle29wYWNpdHk6MDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHNsaWRlSW5MZWZ0LWVudGVyezAle29wYWNpdHk6MDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGVJbkxlZnQtbGVhdmV7MCV7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfXRve3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc2xpZGVJbkxlZnQtbGVhdmV7MCV7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfXRve3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTtvcGFjaXR5OjB9fS5lbC10cmVle3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojNjA2MjY2fS5lbC10cmVlX19lbXB0eS1ibG9ja3twb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtdHJlZV9fZW1wdHktdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxNHB4fS5lbC10cmVlX19kcm9wLWluZGljYXRvcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtoZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6IzQwOWVmZn0uZWwtdHJlZS1ub2Rle3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjB9LmVsLXRyZWUtbm9kZTpmb2N1cz4uZWwtdHJlZS1ub2RlX19jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2Y1ZjdmYX0uZWwtdHJlZS1ub2RlLmlzLWRyb3AtaW5uZXI+LmVsLXRyZWUtbm9kZV9fY29udGVudCAuZWwtdHJlZS1ub2RlX19sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmY7Y29sb3I6I2ZmZn0uZWwtdHJlZS1ub2RlX19jb250ZW50e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI2cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRyZWUtbm9kZV9fY29udGVudD4uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntwYWRkaW5nOjZweH0uZWwtdHJlZS1ub2RlX19jb250ZW50PmxhYmVsLmVsLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9LmVsLXRyZWUtbm9kZV9fY29udGVudDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmF9LmVsLXRyZWUuaXMtZHJhZ2dpbmcgLmVsLXRyZWUtbm9kZV9fY29udGVudHtjdXJzb3I6bW92ZX0uZWwtdHJlZS5pcy1kcmFnZ2luZy5pcy1kcm9wLW5vdC1hbGxvdyAuZWwtdHJlZS1ub2RlX19jb250ZW50e2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntjdXJzb3I6cG9pbnRlcjtjb2xvcjojYzBjNGNjO2ZvbnQtc2l6ZToxMnB4O3RyYW5zZm9ybTpyb3RhdGUoMCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0fS5lbC10cmVlLW5vZGVfX2V4cGFuZC1pY29uLmV4cGFuZGVke3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5lbC10cmVlLW5vZGVfX2V4cGFuZC1pY29uLmlzLWxlYWZ7Y29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29yOmRlZmF1bHR9LmVsLXRyZWUtbm9kZV9fbGFiZWx7Zm9udC1zaXplOjE0cHh9LmVsLXRyZWUtbm9kZV9fbG9hZGluZy1pY29ue21hcmdpbi1yaWdodDo4cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2MwYzRjY30uZWwtdHJlZS1ub2RlPi5lbC10cmVlLW5vZGVfX2NoaWxkcmVue292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC10cmVlLW5vZGUuaXMtZXhwYW5kZWQ+LmVsLXRyZWUtbm9kZV9fY2hpbGRyZW57ZGlzcGxheTpibG9ja30uZWwtdHJlZS0taGlnaGxpZ2h0LWN1cnJlbnQgLmVsLXRyZWUtbm9kZS5pcy1jdXJyZW50Pi5lbC10cmVlLW5vZGVfX2NvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZjBmN2ZmfS5lbC1hbGVydHt3aWR0aDoxMDAlO3BhZGRpbmc6OHB4IDE2cHg7bWFyZ2luOjA7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdzpoaWRkZW47b3BhY2l0eToxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4yc30uZWwtYWxlcnQuaXMtbGlnaHQgLmVsLWFsZXJ0X19jbG9zZWJ0bntjb2xvcjojYzBjNGNjfS5lbC1hbGVydC5pcy1kYXJrIC5lbC1hbGVydF9fY2xvc2VidG4sLmVsLWFsZXJ0LmlzLWRhcmsgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojZmZmfS5lbC1hbGVydC5pcy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZWwtYWxlcnQtLXN1Y2Nlc3MuaXMtbGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2NvbG9yOiM2N2MyM2F9LmVsLWFsZXJ0LS1zdWNjZXNzLmlzLWxpZ2h0IC5lbC1hbGVydF9fZGVzY3JpcHRpb257Y29sb3I6IzY3YzIzYX0uZWwtYWxlcnQtLXN1Y2Nlc3MuaXMtZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2E7Y29sb3I6I2ZmZn0uZWwtYWxlcnQtLWluZm8uaXMtbGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZjRmNGY1O2NvbG9yOiM5MDkzOTl9LmVsLWFsZXJ0LS1pbmZvLmlzLWRhcmt7YmFja2dyb3VuZC1jb2xvcjojOTA5Mzk5O2NvbG9yOiNmZmZ9LmVsLWFsZXJ0LS1pbmZvIC5lbC1hbGVydF9fZGVzY3JpcHRpb257Y29sb3I6IzkwOTM5OX0uZWwtYWxlcnQtLXdhcm5pbmcuaXMtbGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2NvbG9yOiNlNmEyM2N9LmVsLWFsZXJ0LS13YXJuaW5nLmlzLWxpZ2h0IC5lbC1hbGVydF9fZGVzY3JpcHRpb257Y29sb3I6I2U2YTIzY30uZWwtYWxlcnQtLXdhcm5pbmcuaXMtZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2M7Y29sb3I6I2ZmZn0uZWwtYWxlcnQtLWVycm9yLmlzLWxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2ZlZjBmMDtjb2xvcjojZjU2YzZjfS5lbC1hbGVydC0tZXJyb3IuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojZjU2YzZjfS5lbC1hbGVydC0tZXJyb3IuaXMtZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmM7Y29sb3I6I2ZmZn0uZWwtYWxlcnRfX2NvbnRlbnR7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA4cHh9LmVsLWFsZXJ0X19pY29ue2ZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHh9LmVsLWFsZXJ0X19pY29uLmlzLWJpZ3tmb250LXNpemU6MjhweDt3aWR0aDoyOHB4fS5lbC1hbGVydF9fdGl0bGV7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MThweH0uZWwtYWxlcnRfX3RpdGxlLmlzLWJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5lbC1hbGVydCAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2ZvbnQtc2l6ZToxMnB4O21hcmdpbjo1cHggMCAwfS5lbC1hbGVydF9fY2xvc2VidG57Zm9udC1zaXplOjEycHg7b3BhY2l0eToxO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMnB4O3JpZ2h0OjE1cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLWFsZXJ0LWZhZGUtZW50ZXIsLmVsLWFsZXJ0LWZhZGUtbGVhdmUtYWN0aXZlLC5lbC1sb2FkaW5nLWZhZGUtZW50ZXIsLmVsLWxvYWRpbmctZmFkZS1sZWF2ZS1hY3RpdmUsLmVsLW5vdGlmaWNhdGlvbi1mYWRlLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLWFsZXJ0X19jbG9zZWJ0bi5pcy1jdXN0b21lZHtmb250LXN0eWxlOm5vcm1hbDtmb250LXNpemU6MTNweDt0b3A6OXB4fS5lbC1ub3RpZmljYXRpb257ZGlzcGxheTpmbGV4O3dpZHRoOjMzMHB4O3BhZGRpbmc6MTRweCAyNnB4IDE0cHggMTNweDtib3JkZXItcmFkaXVzOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjZWJlZWY1O3Bvc2l0aW9uOmZpeGVkO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzLHRyYW5zZm9ybSAuM3MsbGVmdCAuM3MscmlnaHQgLjNzLHRvcCAuNHMsYm90dG9tIC4zcztvdmVyZmxvdzpoaWRkZW59LmVsLW5vdGlmaWNhdGlvbi5yaWdodHtyaWdodDoxNnB4fS5lbC1ub3RpZmljYXRpb24ubGVmdHtsZWZ0OjE2cHh9LmVsLW5vdGlmaWNhdGlvbl9fZ3JvdXB7bWFyZ2luLWxlZnQ6MTNweDttYXJnaW4tcmlnaHQ6OHB4fS5lbC1ub3RpZmljYXRpb25fX3RpdGxle2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MTZweDtjb2xvcjojMzAzMTMzO21hcmdpbjowfS5lbC1ub3RpZmljYXRpb25fX2NvbnRlbnR7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjFweDttYXJnaW46NnB4IDAgMDtjb2xvcjojNjA2MjY2O3RleHQtYWxpZ246anVzdGlmeX0uZWwtbm90aWZpY2F0aW9uX19jb250ZW50IHB7bWFyZ2luOjB9LmVsLW5vdGlmaWNhdGlvbl9faWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4fS5lbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxOHB4O3JpZ2h0OjE1cHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTZweH0uZWwtbm90aWZpY2F0aW9uX19jbG9zZUJ0bjpob3Zlcntjb2xvcjojNjA2MjY2fS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24tc3VjY2Vzc3tjb2xvcjojNjdjMjNhfS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24tZXJyb3J7Y29sb3I6I2Y1NmM2Y30uZWwtbm90aWZpY2F0aW9uIC5lbC1pY29uLWluZm97Y29sb3I6IzkwOTM5OX0uZWwtbm90aWZpY2F0aW9uIC5lbC1pY29uLXdhcm5pbmd7Y29sb3I6I2U2YTIzY30uZWwtbm90aWZpY2F0aW9uLWZhZGUtZW50ZXIucmlnaHR7cmlnaHQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKX0uZWwtbm90aWZpY2F0aW9uLWZhZGUtZW50ZXIubGVmdHtsZWZ0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpfS5lbC1pbnB1dC1udW1iZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTgwcHg7bGluZS1oZWlnaHQ6MzhweH0uZWwtaW5wdXQtbnVtYmVyIC5lbC1pbnB1dHtkaXNwbGF5OmJsb2NrfS5lbC1pbnB1dC1udW1iZXIgLmVsLWlucHV0X19pbm5lcnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwYWRkaW5nLWxlZnQ6NTBweDtwYWRkaW5nLXJpZ2h0OjUwcHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RvcDoxcHg7d2lkdGg6NDBweDtoZWlnaHQ6YXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY3ZmE7Y29sb3I6IzYwNjI2NjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweH0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZTpob3ZlciwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZTpob3Zlcntjb2xvcjojNDA5ZWZmfS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlOmhvdmVyOm5vdCguaXMtZGlzYWJsZWQpfi5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOm5vdCguaXMtZGlzYWJsZWQpLC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlOmhvdmVyOm5vdCguaXMtZGlzYWJsZWQpfi5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOm5vdCguaXMtZGlzYWJsZWQpe2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLmlzLWRpc2FibGVkLC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlLmlzLWRpc2FibGVke2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3JpZ2h0OjFweDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGNkZmU2fS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle2xlZnQ6MXB4O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGNkZmU2fS5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci5pcy1kaXNhYmxlZCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtib3JkZXItY29sb3I6I2U0ZTdlZDtjb2xvcjojZTRlN2VkfS5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2U6aG92ZXIsLmVsLWlucHV0LW51bWJlci5pcy1kaXNhYmxlZCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZTpob3Zlcntjb2xvcjojZTRlN2VkO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW17d2lkdGg6MjAwcHg7bGluZS1oZWlnaHQ6MzRweH0uZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW0gLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tbWVkaXVtIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3dpZHRoOjM2cHg7Zm9udC1zaXplOjE0cHh9LmVsLWlucHV0LW51bWJlci0tbWVkaXVtIC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjQzcHg7cGFkZGluZy1yaWdodDo0M3B4fS5lbC1pbnB1dC1udW1iZXItLXNtYWxse3dpZHRoOjEzMHB4O2xpbmUtaGVpZ2h0OjMwcHh9LmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7d2lkdGg6MzJweDtmb250LXNpemU6MTNweH0uZWwtaW5wdXQtbnVtYmVyLS1zbWFsbCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSBbY2xhc3MqPWVsLWljb25dLC5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl17dHJhbnNmb3JtOnNjYWxlKC45KX0uZWwtaW5wdXQtbnVtYmVyLS1zbWFsbCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDozOXB4O3BhZGRpbmctcmlnaHQ6MzlweH0uZWwtaW5wdXQtbnVtYmVyLS1taW5pe3dpZHRoOjEzMHB4O2xpbmUtaGVpZ2h0OjI2cHh9LmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyLS1taW5pIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3dpZHRoOjI4cHg7Zm9udC1zaXplOjEycHh9LmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSBbY2xhc3MqPWVsLWljb25dLC5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2UgW2NsYXNzKj1lbC1pY29uXXt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MzVweDtwYWRkaW5nLXJpZ2h0OjM1cHh9LmVsLWlucHV0LW51bWJlci5pcy13aXRob3V0LWNvbnRyb2xzIC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjE1cHg7cGFkZGluZy1yaWdodDoxNXB4fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjUwcHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2hlaWdodDphdXRvO2xpbmUtaGVpZ2h0OjE5cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSBbY2xhc3MqPWVsLWljb25dLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2UgW2NsYXNzKj1lbC1pY29uXXt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLXJhZGl1czowIDRweCAwIDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RjZGZlNn0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3JpZ2h0OjFweDtib3R0b206MXB4O3RvcDphdXRvO2xlZnQ6YXV0bztib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItbGVmdDoxcHggc29saWQgI2RjZGZlNjtib3JkZXItcmFkaXVzOjAgMCA0cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9bWVkaXVtXSBbY2xhc3MqPWRlY3JlYXNlXSwuZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1tZWRpdW1dIFtjbGFzcyo9aW5jcmVhc2Vde2xpbmUtaGVpZ2h0OjE3cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9c21hbGxdIFtjbGFzcyo9ZGVjcmVhc2VdLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPXNtYWxsXSBbY2xhc3MqPWluY3JlYXNlXXtsaW5lLWhlaWdodDoxNXB4fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPW1pbmldIFtjbGFzcyo9ZGVjcmVhc2VdLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPW1pbmldIFtjbGFzcyo9aW5jcmVhc2Vde2xpbmUtaGVpZ2h0OjEzcHh9LmVsLXRvb2x0aXBfX3BvcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjEwcHg7ei1pbmRleDoyMDAwO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuMjttaW4td2lkdGg6MTBweDt3b3JkLXdyYXA6YnJlYWstd29yZH0uZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93LC5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LmVsLXRvb2x0aXBfX3BvcHBlciAucG9wcGVyX19hcnJvd3tib3JkZXItd2lkdGg6NnB4fS5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7Y29udGVudDoiICI7Ym9yZGVyLXdpZHRoOjVweH0uZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcjphZnRlciwuZWwtcm93OmFmdGVyLC5lbC1yb3c6YmVmb3JlLC5lbC1zbGlkZXI6YWZ0ZXIsLmVsLXNsaWRlcjpiZWZvcmUsLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6YWZ0ZXIsLmVsLXVwbG9hZC1jb3ZlcjphZnRlcntjb250ZW50OiIifS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF17bWFyZ2luLWJvdHRvbToxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3d7Ym90dG9tOi02cHg7Ym9yZGVyLXRvcC1jb2xvcjojMzAzMTMzO2JvcmRlci1ib3R0b20td2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93OmFmdGVye2JvdHRvbToxcHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV17bWFyZ2luLXRvcDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7dG9wOi02cHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XXttYXJnaW4tbGVmdDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvd3tsZWZ0Oi02cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7Ym90dG9tOi01cHg7bGVmdDoxcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XXttYXJnaW4tcmlnaHQ6MTJweH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvd3tyaWdodDotNnB4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotNXB4O21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWRhcmt7YmFja2dyb3VuZDojMzAzMTMzO2NvbG9yOiNmZmZ9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXRvcC1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojZmZmfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e2JvcmRlci1sZWZ0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3c6YWZ0ZXJ7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZn0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93OmFmdGVye2JvcmRlci1yaWdodC1jb2xvcjojZmZmfS5lbC1zbGlkZXI6YWZ0ZXIsLmVsLXNsaWRlcjpiZWZvcmV7ZGlzcGxheTp0YWJsZX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlciAuZWwtdG9vbHRpcCwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjphZnRlcnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXNsaWRlcjphZnRlcntjbGVhcjpib3RofS5lbC1zbGlkZXJfX3J1bndheXt3aWR0aDoxMDAlO2hlaWdodDo2cHg7bWFyZ2luOjE2cHggMDtiYWNrZ3JvdW5kLWNvbG9yOiNlNGU3ZWQ7Ym9yZGVyLXJhZGl1czozcHg7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1zbGlkZXJfX3J1bndheS5zaG93LWlucHV0e21hcmdpbi1yaWdodDoxNjBweDt3aWR0aDphdXRvfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYmFye2JhY2tncm91bmQtY29sb3I6I2MwYzRjY30uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9ue2JvcmRlci1jb2xvcjojYzBjNGNjfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5kcmFnZ2luZywuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIuaG92ZXIsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOmhvdmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5nLC5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24uaG92ZXIsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbjpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMSk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLC5lbC1zbGlkZXJfX3N0b3B7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtc2xpZGVyX19pbnB1dHtmbG9hdDpyaWdodDttYXJnaW4tdG9wOjNweDt3aWR0aDoxMzBweH0uZWwtc2xpZGVyX19pbnB1dC5lbC1pbnB1dC1udW1iZXItLW1pbml7bWFyZ2luLXRvcDo1cHh9LmVsLXNsaWRlcl9faW5wdXQuZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW17bWFyZ2luLXRvcDowfS5lbC1zbGlkZXJfX2lucHV0LmVsLWlucHV0LW51bWJlci0tbGFyZ2V7bWFyZ2luLXRvcDotMnB4fS5lbC1zbGlkZXJfX2JhcntoZWlnaHQ6NnB4O2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlcntoZWlnaHQ6MzZweDt3aWR0aDozNnB4O3otaW5kZXg6MTAwMTt0b3A6LTE1cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOmFmdGVye2hlaWdodDoxMDAlfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmhvdmVyLC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOmhvdmVye2N1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWJ9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIuZHJhZ2dpbmd7Y3Vyc29yOi13ZWJraXQtZ3JhYmJpbmc7Y3Vyc29yOmdyYWJiaW5nfS5lbC1zbGlkZXJfX2J1dHRvbnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JvcmRlcjoycHggc29saWQgIzQwOWVmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjouMnM7dXNlci1zZWxlY3Q6bm9uZX0uZWwtaW1hZ2Utdmlld2VyX19idG4sLmVsLXNsaWRlcl9fYnV0dG9uLC5lbC1zdGVwX19pY29uLWlubmVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmV9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5nLC5lbC1zbGlkZXJfX2J1dHRvbi5ob3ZlciwuZWwtc2xpZGVyX19idXR0b246aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMil9LmVsLXNsaWRlcl9fYnV0dG9uLmhvdmVyLC5lbC1zbGlkZXJfX2J1dHRvbjpob3ZlcntjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFifS5lbC1zbGlkZXJfX2J1dHRvbi5kcmFnZ2luZ3tjdXJzb3I6LXdlYmtpdC1ncmFiYmluZztjdXJzb3I6Z3JhYmJpbmd9LmVsLXNsaWRlcl9fc3RvcHtoZWlnaHQ6NnB4O3dpZHRoOjZweDtib3JkZXItcmFkaXVzOjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5lbC1zbGlkZXJfX21hcmtze3RvcDowO2xlZnQ6MTJweDt3aWR0aDoxOHB4O2hlaWdodDoxMDAlfS5lbC1zbGlkZXJfX21hcmtzLXRleHR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzkwOTM5OTttYXJnaW4tdG9wOjE1cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbHtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX3J1bndheXt3aWR0aDo2cHg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAgMTZweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX2Jhcnt3aWR0aDo2cHg7aGVpZ2h0OmF1dG87Ym9yZGVyLXJhZGl1czowIDAgM3B4IDNweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVye3RvcDphdXRvO2xlZnQ6LTE1cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX3N0b3B7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dHtwYWRkaW5nLWJvdHRvbTo1OHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0e292ZXJmbG93OnZpc2libGU7ZmxvYXQ6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MjJweDt3aWR0aDozNnB4O21hcmdpbi10b3A6MTVweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXRfX2lubmVye3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7dG9wOjMycHg7bWFyZ2luLXRvcDotMXB4O2JvcmRlcjoxcHggc29saWQgI2RjZGZlNjtsaW5lLWhlaWdodDoyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3dpZHRoOjE4cHg7cmlnaHQ6MThweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXt3aWR0aDoxOXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZX4uZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDpob3ZlciAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDpob3ZlciAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtib3JkZXItY29sb3I6I2MwYzRjY30uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDphY3RpdmUgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQ6YWN0aXZlIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fbWFya3MtdGV4dHttYXJnaW4tdG9wOjA7bGVmdDoxNXB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSl9LmVsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnR9LmVsLWxvYWRpbmctcGFyZW50LS1oaWRkZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0uZWwtbG9hZGluZy1tYXNre3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjAwMDtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC45KTttYXJnaW46MDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzfS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbntwb3NpdGlvbjpmaXhlZH0uZWwtbG9hZGluZy1tYXNrLmlzLWZ1bGxzY3JlZW4gLmVsLWxvYWRpbmctc3Bpbm5lcnttYXJnaW4tdG9wOi0yNXB4fS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbiAuZWwtbG9hZGluZy1zcGlubmVyIC5jaXJjdWxhcntoZWlnaHQ6NTBweDt3aWR0aDo1MHB4fS5lbC1sb2FkaW5nLXNwaW5uZXJ7dG9wOjUwJTttYXJnaW4tdG9wOi0yMXB4O3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGV9LmVsLWNvbC1wdWxsLTAsLmVsLWNvbC1wdWxsLTEsLmVsLWNvbC1wdWxsLTIsLmVsLWNvbC1wdWxsLTMsLmVsLWNvbC1wdWxsLTQsLmVsLWNvbC1wdWxsLTUsLmVsLWNvbC1wdWxsLTYsLmVsLWNvbC1wdWxsLTcsLmVsLWNvbC1wdWxsLTgsLmVsLWNvbC1wdWxsLTksLmVsLWNvbC1wdWxsLTEwLC5lbC1jb2wtcHVsbC0xMSwuZWwtY29sLXB1bGwtMTMsLmVsLWNvbC1wdWxsLTE0LC5lbC1jb2wtcHVsbC0xNSwuZWwtY29sLXB1bGwtMTYsLmVsLWNvbC1wdWxsLTE3LC5lbC1jb2wtcHVsbC0xOCwuZWwtY29sLXB1bGwtMTksLmVsLWNvbC1wdWxsLTIwLC5lbC1jb2wtcHVsbC0yMSwuZWwtY29sLXB1bGwtMjIsLmVsLWNvbC1wdWxsLTIzLC5lbC1jb2wtcHVsbC0yNCwuZWwtY29sLXB1c2gtMCwuZWwtY29sLXB1c2gtMSwuZWwtY29sLXB1c2gtMiwuZWwtY29sLXB1c2gtMywuZWwtY29sLXB1c2gtNCwuZWwtY29sLXB1c2gtNSwuZWwtY29sLXB1c2gtNiwuZWwtY29sLXB1c2gtNywuZWwtY29sLXB1c2gtOCwuZWwtY29sLXB1c2gtOSwuZWwtY29sLXB1c2gtMTAsLmVsLWNvbC1wdXNoLTExLC5lbC1jb2wtcHVzaC0xMiwuZWwtY29sLXB1c2gtMTMsLmVsLWNvbC1wdXNoLTE0LC5lbC1jb2wtcHVzaC0xNSwuZWwtY29sLXB1c2gtMTYsLmVsLWNvbC1wdXNoLTE3LC5lbC1jb2wtcHVzaC0xOCwuZWwtY29sLXB1c2gtMTksLmVsLWNvbC1wdXNoLTIwLC5lbC1jb2wtcHVzaC0yMSwuZWwtY29sLXB1c2gtMjIsLmVsLWNvbC1wdXNoLTIzLC5lbC1jb2wtcHVzaC0yNCwuZWwtcm93e3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1sb2FkaW5nLXNwaW5uZXIgLmVsLWxvYWRpbmctdGV4dHtjb2xvcjojNDA5ZWZmO21hcmdpbjozcHggMDtmb250LXNpemU6MTRweH0uZWwtbG9hZGluZy1zcGlubmVyIC5jaXJjdWxhcntoZWlnaHQ6NDJweDt3aWR0aDo0MnB4Oy13ZWJraXQtYW5pbWF0aW9uOmxvYWRpbmctcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246bG9hZGluZy1yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlfS5lbC1sb2FkaW5nLXNwaW5uZXIgLnBhdGh7LXdlYmtpdC1hbmltYXRpb246bG9hZGluZy1kYXNoIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7YW5pbWF0aW9uOmxvYWRpbmctZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlOiM0MDllZmY7c3Ryb2tlLWxpbmVjYXA6cm91bmR9LmVsLWxvYWRpbmctc3Bpbm5lciBpe2NvbG9yOiM0MDllZmZ9QC13ZWJraXQta2V5ZnJhbWVzIGxvYWRpbmctcm90YXRle3Rve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIGxvYWRpbmctcm90YXRle3Rve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1kYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTQwcHh9dG97c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyMHB4fX1Aa2V5ZnJhbWVzIGxvYWRpbmctZGFzaHswJXtzdHJva2UtZGFzaGFycmF5OjEsMjAwO3N0cm9rZS1kYXNob2Zmc2V0OjB9NTAle3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi00MHB4fXRve3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjBweH19LmVsLXJvd3tib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXJvdzphZnRlciwuZWwtcm93OmJlZm9yZXtkaXNwbGF5OnRhYmxlfS5lbC1yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtcm93LS1mbGV4e2Rpc3BsYXk6ZmxleH0uZWwtY29sLTAsLmVsLXJvdy0tZmxleDphZnRlciwuZWwtcm93LS1mbGV4OmJlZm9yZXtkaXNwbGF5Om5vbmV9LmVsLXJvdy0tZmxleC5pcy1qdXN0aWZ5LWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1zcGFjZS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1zcGFjZS1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZWwtcm93LS1mbGV4LmlzLWFsaWduLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5lbC1yb3ctLWZsZXguaXMtYWxpZ24tbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtcm93LS1mbGV4LmlzLWFsaWduLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2xhc3MqPWVsLWNvbC1de2Zsb2F0OmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC11cGxvYWQtLXBpY3R1cmUtY2FyZCwuZWwtdXBsb2FkLWRyYWdnZXJ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNvbC0we3dpZHRoOjB9LmVsLWNvbC1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wtcHVsbC0we3JpZ2h0OjB9LmVsLWNvbC1wdXNoLTB7bGVmdDowfS5lbC1jb2wtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtcHVsbC0xe3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtcHVzaC0xe2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1wdWxsLTJ7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1wdXNoLTJ7bGVmdDo4LjMzMzMzJX0uZWwtY29sLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXB1bGwtM3tyaWdodDoxMi41JX0uZWwtY29sLXB1c2gtM3tsZWZ0OjEyLjUlfS5lbC1jb2wtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1wdWxsLTR7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtcHVzaC00e2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1wdWxsLTV7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtcHVzaC01e2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtNnt3aWR0aDoyNSV9LmVsLWNvbC1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1wdWxsLTZ7cmlnaHQ6MjUlfS5lbC1jb2wtcHVzaC02e2xlZnQ6MjUlfS5lbC1jb2wtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1wdWxsLTd7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtcHVzaC03e2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1wdWxsLTh7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtcHVzaC04e2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtOXt3aWR0aDozNy41JX0uZWwtY29sLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtcHVsbC05e3JpZ2h0OjM3LjUlfS5lbC1jb2wtcHVzaC05e2xlZnQ6MzcuNSV9LmVsLWNvbC0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtcHVsbC0xMHtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1wdXNoLTEwe2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXB1bGwtMTF7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtcHVzaC0xMXtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLTEye3dpZHRoOjUwJX0uZWwtY29sLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLXB1c2gtMTJ7bGVmdDo1MCV9LmVsLWNvbC0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtcHVsbC0xM3tyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1wdXNoLTEze2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXB1bGwtMTR7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtcHVzaC0xNHtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtcHVsbC0xNXtyaWdodDo2Mi41JX0uZWwtY29sLXB1c2gtMTV7bGVmdDo2Mi41JX0uZWwtY29sLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1wdWxsLTE2e3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXB1c2gtMTZ7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtcHVsbC0xN3tyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1wdXNoLTE3e2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtMTh7d2lkdGg6NzUlfS5lbC1jb2wtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXB1bGwtMTh7cmlnaHQ6NzUlfS5lbC1jb2wtcHVzaC0xOHtsZWZ0Ojc1JX0uZWwtY29sLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1wdWxsLTE5e3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXB1c2gtMTl7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtcHVsbC0yMHtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1wdXNoLTIwe2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1wdWxsLTIxe3JpZ2h0Ojg3LjUlfS5lbC1jb2wtcHVzaC0yMXtsZWZ0Ojg3LjUlfS5lbC1jb2wtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXB1bGwtMjJ7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtcHVzaC0yMntsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1wdWxsLTIze3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXB1c2gtMjN7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1wdWxsLTI0e3JpZ2h0OjEwMCV9LmVsLWNvbC1wdXNoLTI0e2xlZnQ6MTAwJX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY3cHgpey5lbC1jb2wteHMtMHtkaXNwbGF5Om5vbmU7d2lkdGg6MH0uZWwtY29sLXhzLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC14cy1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLXhzLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC14cy0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLXhzLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLXhzLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wteHMtM3t3aWR0aDoxMi41JX0uZWwtY29sLXhzLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wteHMtcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wteHMtcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC14cy00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC14cy01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC14cy02e3dpZHRoOjI1JX0uZWwtY29sLXhzLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLXhzLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC14cy1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC14cy03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXhzLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC14cy04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLXhzLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC14cy05e3dpZHRoOjM3LjUlfS5lbC1jb2wteHMtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC14cy1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC14cy1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLXhzLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC14cy0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wteHMtcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wteHMtMTJ7d2lkdGg6NTAlfS5lbC1jb2wteHMtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLXhzLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wteHMtcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLXhzLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC14cy0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wteHMtcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wteHMtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC14cy1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC14cy1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wteHMtcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wteHMtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wteHMtcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXhzLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLXhzLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC14cy0xOHt3aWR0aDo3NSV9LmVsLWNvbC14cy1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wteHMtcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC14cy1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wteHMtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXhzLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wteHMtcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXhzLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLXhzLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC14cy0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLXhzLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLXhzLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC14cy1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC14cy0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wteHMtcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wteHMtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wteHMtcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXhzLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC14cy1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLXhzLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLXhzLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NzY4cHgpey5lbC1jb2wtc20tMHtkaXNwbGF5Om5vbmU7d2lkdGg6MH0uZWwtY29sLXNtLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC1zbS1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLXNtLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC1zbS0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1zbS1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLXNtLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wtc20tM3t3aWR0aDoxMi41JX0uZWwtY29sLXNtLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtc20tcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wtc20tcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC1zbS00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC1zbS01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC1zbS02e3dpZHRoOjI1JX0uZWwtY29sLXNtLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLXNtLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC1zbS1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC1zbS03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLXNtLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1zbS04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1zbS1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC1zbS05e3dpZHRoOjM3LjUlfS5lbC1jb2wtc20tb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1zbS1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC1zbS1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLXNtLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1zbS1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC1zbS0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtc20tcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtc20tMTJ7d2lkdGg6NTAlfS5lbC1jb2wtc20tb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLXNtLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wtc20tcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLXNtLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1zbS1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1zbS0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtc20tcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1zbS1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtc20tMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1zbS1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1zbS1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wtc20tcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wtc20tMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtc20tcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXNtLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1zbS1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC1zbS0xOHt3aWR0aDo3NSV9LmVsLWNvbC1zbS1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtc20tcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC1zbS1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wtc20tMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtc20tcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXNtLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1zbS1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC1zbS0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLXNtLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLXNtLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC1zbS1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC1zbS0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtc20tcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtc20tMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtc20tcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXNtLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1zbS1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLXNtLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLXNtLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6OTkycHgpey5lbC1jb2wtbWQtMHtkaXNwbGF5Om5vbmU7d2lkdGg6MH0uZWwtY29sLW1kLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC1tZC1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLW1kLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC1tZC0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLW1kLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wtbWQtM3t3aWR0aDoxMi41JX0uZWwtY29sLW1kLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtbWQtcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wtbWQtcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC1tZC00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC1tZC01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC1tZC02e3dpZHRoOjI1JX0uZWwtY29sLW1kLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLW1kLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC1tZC1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC1tZC03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1tZC04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC1tZC05e3dpZHRoOjM3LjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1tZC1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC1tZC1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLW1kLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1tZC1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC1tZC0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtMTJ7d2lkdGg6NTAlfS5lbC1jb2wtbWQtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLW1kLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wtbWQtcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLW1kLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1tZC0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1tZC1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1tZC1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wtbWQtcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wtbWQtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtbWQtcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLW1kLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1tZC1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLW1kLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC1tZC0xOHt3aWR0aDo3NSV9LmVsLWNvbC1tZC1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtbWQtcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC1tZC1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wtbWQtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtbWQtcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1tZC1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC1tZC0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLW1kLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLW1kLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC1tZC1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC1tZC0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtbWQtcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1tZC1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLW1kLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLW1kLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6MTIwMHB4KXsuZWwtY29sLWxnLTB7ZGlzcGxheTpub25lO3dpZHRoOjB9LmVsLWNvbC1sZy1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wtbGctcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC1sZy1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wtbGctMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtbGctcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtbGctcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC1sZy0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1sZy1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLWxnLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1sZy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLWxnLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLWxnLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wtbGctNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtbGctcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtbGctNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtbGctcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtbGctNnt3aWR0aDoyNSV9LmVsLWNvbC1sZy1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1sZy1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wtbGctcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wtbGctN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1sZy1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtbGctcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtbGctOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtbGctcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtbGctOXt3aWR0aDozNy41JX0uZWwtY29sLWxnLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtbGctcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wtbGctcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC1sZy0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtbGctcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1sZy1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtbGctMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLWxnLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtbGctcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLWxnLTEye3dpZHRoOjUwJX0uZWwtY29sLWxnLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1sZy1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLWxnLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC1sZy0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtbGctcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1sZy1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtbGctMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLWxnLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtbGctcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLWxnLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtbGctb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtbGctcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLWxnLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLWxnLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1sZy0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtbGctcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1sZy1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtbGctMTh7d2lkdGg6NzUlfS5lbC1jb2wtbGctb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLWxnLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wtbGctcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLWxnLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1sZy1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1sZy0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtbGctcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1sZy1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtbGctMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1sZy1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1sZy1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wtbGctcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wtbGctMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLWxnLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtbGctcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLWxnLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC1sZy0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtbGctb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1sZy1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC1sZy1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjE5MjBweCl7LmVsLWNvbC14bC0we2Rpc3BsYXk6bm9uZTt3aWR0aDowfS5lbC1jb2wteGwtb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLXhsLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wteGwtcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLXhsLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLXhsLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLXhsLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wteGwtMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wteGwtcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wteGwtcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC14bC0ze3dpZHRoOjEyLjUlfS5lbC1jb2wteGwtb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC14bC1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC14bC1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLXhsLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wteGwtcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLXhsLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXhsLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wteGwtcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLXhsLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXhsLTZ7d2lkdGg6MjUlfS5lbC1jb2wteGwtb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wteGwtcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLXhsLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLXhsLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wteGwtcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLXhsLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXhsLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wteGwtcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLXhsLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXhsLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC14bC1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLXhsLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLXhsLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wteGwtMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXhsLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wteGwtcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXhsLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC14bC1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLXhsLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC14bC0xMnt3aWR0aDo1MCV9LmVsLWNvbC14bC1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wteGwtcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC14bC1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wteGwtMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXhsLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wteGwtcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXhsLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC14bC1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLXhsLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC14bC0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLXhsLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLXhsLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC14bC1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC14bC0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wteGwtcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC14bC1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wteGwtMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXhsLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wteGwtcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXhsLTE4e3dpZHRoOjc1JX0uZWwtY29sLXhsLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC14bC1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLXhsLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC14bC0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wteGwtcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC14bC1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wteGwtMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXhsLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wteGwtcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXhsLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wteGwtb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wteGwtcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLXhsLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLXhsLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC14bC1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLXhsLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC14bC0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wteGwtcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC14bC1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wteGwtMjR7d2lkdGg6MTAwJX0uZWwtY29sLXhsLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wteGwtcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wteGwtcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzc3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjMycHggMH19LmVsLXVwbG9hZHtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9LmVsLXVwbG9hZF9faW5wdXR7ZGlzcGxheTpub25lfS5lbC11cGxvYWRfX3RpcHtmb250LXNpemU6MTJweDtjb2xvcjojNjA2MjY2O21hcmdpbi10b3A6N3B4fS5lbC11cGxvYWQgaWZyYW1le3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7dG9wOjA7bGVmdDowO29wYWNpdHk6MDtmaWx0ZXI6YWxwaGEob3BhY2l0eT0wKX0uZWwtdXBsb2FkLS1waWN0dXJlLWNhcmR7YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmO2JvcmRlcjoxcHggZGFzaGVkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjE0OHB4O2hlaWdodDoxNDhweDtsaW5lLWhlaWdodDoxNDZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJkIGl7Zm9udC1zaXplOjI4cHg7Y29sb3I6IzhjOTM5ZH0uZWwtdXBsb2FkLS1waWN0dXJlLWNhcmQ6aG92ZXIsLmVsLXVwbG9hZDpmb2N1c3tib3JkZXItY29sb3I6IzQwOWVmZjtjb2xvcjojNDA5ZWZmfS5lbC11cGxvYWQ6Zm9jdXMgLmVsLXVwbG9hZC1kcmFnZ2Vye2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC11cGxvYWQtZHJhZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBkYXNoZWQgI2Q5ZDlkOTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MzYwcHg7aGVpZ2h0OjE4MHB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uZWwtdXBsb2FkLWRyYWdnZXIgLmVsLWljb24tdXBsb2Fke2ZvbnQtc2l6ZTo2N3B4O2NvbG9yOiNjMGM0Y2M7bWFyZ2luOjQwcHggMCAxNnB4O2xpbmUtaGVpZ2h0OjUwcHh9LmVsLXVwbG9hZC1kcmFnZ2VyKy5lbC11cGxvYWRfX3RpcHt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdXBsb2FkLWRyYWdnZXJ+LmVsLXVwbG9hZF9fZmlsZXN7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGZlNjttYXJnaW4tdG9wOjdweDtwYWRkaW5nLXRvcDo1cHh9LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC11cGxvYWRfX3RleHR7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdXBsb2FkLWRyYWdnZXIgLmVsLXVwbG9hZF9fdGV4dCBlbXtjb2xvcjojNDA5ZWZmO2ZvbnQtc3R5bGU6bm9ybWFsfS5lbC11cGxvYWQtZHJhZ2dlcjpob3Zlcntib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtdXBsb2FkLWRyYWdnZXIuaXMtZHJhZ292ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMyLDE1OSwyNTUsLjA2KTtib3JkZXI6MnB4IGRhc2hlZCAjNDA5ZWZmfS5lbC11cGxvYWQtbGlzdHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS5lbC11cGxvYWQtbGlzdF9faXRlbXt0cmFuc2l0aW9uOmFsbCAuNXMgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7bGluZS1oZWlnaHQ6MS44O21hcmdpbi10b3A6NXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDt3aWR0aDoxMDAlfS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtcHJvZ3Jlc3N7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIwcHg7d2lkdGg6MTAwJX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLXByb2dyZXNzX190ZXh0e3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOi0xM3B4fS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtcHJvZ3Jlc3MtYmFye21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDoxMHB4fS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi11cGxvYWQtc3VjY2Vzc3tjb2xvcjojNjdjMjNhfS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDtyaWdodDo1cHg7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNzU7Y29sb3I6IzYwNjI2Nn0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2U6aG92ZXJ7b3BhY2l0eToxfS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZS10aXB7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1cHg7cmlnaHQ6NXB4O2ZvbnQtc2l6ZToxMnB4O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6MTtjb2xvcjojNDA5ZWZmfS5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmF9LmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1pY29uLWNsb3Nle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzcyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZTpmb2N1cywuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzcyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZTpob3Zlcntjb2xvcjojNDA5ZWZmO2N1cnNvcjpwb2ludGVyfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmZvY3VzOm5vdCg6aG92ZXIpIC5lbC1pY29uLWNsb3NlLXRpcHtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzczphY3RpdmUgLmVsLWljb24tY2xvc2UtdGlwLC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmZvY3VzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWwsLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbCwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2Vzczpub3QoLmZvY3VzaW5nKTpmb2N1cyAuZWwtaWNvbi1jbG9zZS10aXB7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC5pcy1kaXNhYmxlZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1le2NvbG9yOiM2MDYyNjY7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6NDBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OjRweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3RyYW5zaXRpb246Y29sb3IgLjNzO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZSBbY2xhc3NePWVsLWljb25de2hlaWdodDoxMDAlO21hcmdpbi1yaWdodDo3cHg7Y29sb3I6IzkwOTM5OTtsaW5lLWhlaWdodDppbmhlcml0fS5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDowO2xpbmUtaGVpZ2h0OmluaGVyaXQ7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdF9faXRlbS1kZWxldGV7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MDtmb250LXNpemU6MTJweDtjb2xvcjojNjA2MjY2O2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRlOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmR7bWFyZ2luOjA7ZGlzcGxheTppbmxpbmU7dmVydGljYWwtYWxpZ246dG9wfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbXtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2MwY2NkYTtib3JkZXItcmFkaXVzOjZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTQ4cHg7aGVpZ2h0OjE0OHB4O21hcmdpbjowIDhweCA4cHggMDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2hlY2ssLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojZmZmfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZSwuZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1wcm9ncmVzc19fdGV4dHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1le2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlse3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTVweDt0b3A6LTZweDt3aWR0aDo0MHB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3gtc2hhZG93OjAgMCAxcGMgMXB4IHJnYmEoMCwwLDAsLjIpfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWwgaXtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjExcHg7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25ze3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO2N1cnNvcjpkZWZhdWx0O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmY7b3BhY2l0eTowO2ZvbnQtc2l6ZToyMHB4O2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zc30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFue2Rpc3BsYXk6bm9uZTtjdXJzb3I6cG9pbnRlcn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFuK3NwYW57bWFyZ2luLWxlZnQ6MTVweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOnN0YXRpYztmb250LXNpemU6aW5oZXJpdDtjb2xvcjppbmhlcml0fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zOmhvdmVye29wYWNpdHk6MX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczpob3ZlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC1wcm9ncmVzc3t0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtib3R0b206YXV0bzt3aWR0aDoxMjZweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtcHJvZ3Jlc3MgLmVsLXByb2dyZXNzX190ZXh0e3RvcDo1MCV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbXtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDowO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi10b3A6MTBweDtwYWRkaW5nOjEwcHggMTBweCAxMHB4IDkwcHg7aGVpZ2h0OjkycHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaGVjaywuZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojZmZmfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtiYWNrZ3JvdW5kOjAgMDtib3gtc2hhZG93Om5vbmU7dG9wOi0ycHg7cmlnaHQ6LTEycHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3MgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7bGluZS1oZWlnaHQ6NzBweDttYXJnaW4tdG9wOjB9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlse3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo3MHB4O2hlaWdodDo3MHB4O2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO21hcmdpbi1sZWZ0Oi04MHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjIwcHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7Zm9udC1zaXplOjcwcHg7bGluZS1oZWlnaHQ6MTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjlweDt0b3A6MTBweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTdweDt0b3A6LTdweDt3aWR0aDo0NnB4O2hlaWdodDoyNnB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3gtc2hhZG93OjAgMXB4IDFweCAjY2NjfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMnB4O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXByb2dyZXNze3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotN3B4fS5lbC11cGxvYWQtY292ZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MTA7Y3Vyc29yOmRlZmF1bHR9LmVsLXVwbG9hZC1jb3ZlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXVwbG9hZC1jb3ZlciBpbWd7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC11cGxvYWQtY292ZXJfX2xhYmVse3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O3RvcDotNnB4O3dpZHRoOjQwcHg7aGVpZ2h0OjI0cHg7YmFja2dyb3VuZDojMTNjZTY2O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO2JveC1zaGFkb3c6MCAwIDFwYyAxcHggcmdiYSgwLDAsMCwuMil9LmVsLXVwbG9hZC1jb3Zlcl9fbGFiZWwgaXtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjExcHg7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO2NvbG9yOiNmZmZ9LmVsLXVwbG9hZC1jb3Zlcl9fcHJvZ3Jlc3N7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnN0YXRpYzt3aWR0aDoyNDNweH0uZWwtdXBsb2FkLWNvdmVyX19wcm9ncmVzcysuZWwtdXBsb2FkX19pbm5lcntvcGFjaXR5OjB9LmVsLXVwbG9hZC1jb3Zlcl9fY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdHtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjcyKTt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiNmZmY7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7bWFyZ2luLXRvcDo2MHB4fS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG4gc3BhbntvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG46bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLWxlZnQ6MzVweH0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuOmhvdmVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xM3B4KX0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuOmhvdmVyIHNwYW57b3BhY2l0eToxfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG4gaXtjb2xvcjojZmZmO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6aW5oZXJpdDttYXJnaW46MCBhdXRvIDVweH0uZWwtdXBsb2FkLWNvdmVyX190aXRsZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzowIDEwcHg7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzZweDtmb250LXNpemU6MTRweDtjb2xvcjojMzAzMTMzfS5lbC11cGxvYWQtY292ZXIrLmVsLXVwbG9hZF9faW5uZXJ7b3BhY2l0eTowO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MX0uZWwtcHJvZ3Jlc3N7cG9zaXRpb246cmVsYXRpdmU7bGluZS1oZWlnaHQ6MX0uZWwtcHJvZ3Jlc3NfX3RleHR7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxfS5lbC1wcm9ncmVzc19fdGV4dCBpe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmJsb2NrfS5lbC1wcm9ncmVzcy0tY2lyY2xlLC5lbC1wcm9ncmVzcy0tZGFzaGJvYXJke2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1wcm9ncmVzcy0tY2lyY2xlIC5lbC1wcm9ncmVzc19fdGV4dCwuZWwtcHJvZ3Jlc3MtLWRhc2hib2FyZCAuZWwtcHJvZ3Jlc3NfX3RleHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjA7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uZWwtcHJvZ3Jlc3MtLWNpcmNsZSAuZWwtcHJvZ3Jlc3NfX3RleHQgaSwuZWwtcHJvZ3Jlc3MtLWRhc2hib2FyZCAuZWwtcHJvZ3Jlc3NfX3RleHQgaXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXByb2dyZXNzLS13aXRob3V0LXRleHQgLmVsLXByb2dyZXNzX190ZXh0e2Rpc3BsYXk6bm9uZX0uZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dCAuZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tcmlnaHQ6MDtkaXNwbGF5OmJsb2NrfS5lbC1wcm9ncmVzcy1iYXIsLmVsLXByb2dyZXNzLWJhcl9faW5uZXI6YWZ0ZXIsLmVsLXByb2dyZXNzLWJhcl9faW5uZXJUZXh0LC5lbC1zcGlubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcHJvZ3Jlc3MtLXRleHQtaW5zaWRlIC5lbC1wcm9ncmVzcy1iYXJ7cGFkZGluZy1yaWdodDowO21hcmdpbi1yaWdodDowfS5lbC1wcm9ncmVzcy5pcy1zdWNjZXNzIC5lbC1wcm9ncmVzcy1iYXJfX2lubmVye2JhY2tncm91bmQtY29sb3I6IzY3YzIzYX0uZWwtcHJvZ3Jlc3MuaXMtc3VjY2VzcyAuZWwtcHJvZ3Jlc3NfX3RleHR7Y29sb3I6IzY3YzIzYX0uZWwtcHJvZ3Jlc3MuaXMtd2FybmluZyAuZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLXByb2dyZXNzLmlzLXdhcm5pbmcgLmVsLXByb2dyZXNzX190ZXh0e2NvbG9yOiNlNmEyM2N9LmVsLXByb2dyZXNzLmlzLWV4Y2VwdGlvbiAuZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmN9LmVsLXByb2dyZXNzLmlzLWV4Y2VwdGlvbiAuZWwtcHJvZ3Jlc3NfX3RleHR7Y29sb3I6I2Y1NmM2Y30uZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6NTBweDt3aWR0aDoxMDAlO21hcmdpbi1yaWdodDotNTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXByb2dyZXNzLWJhcl9fb3V0ZXJ7aGVpZ2h0OjZweDtib3JkZXItcmFkaXVzOjEwMHB4O2JhY2tncm91bmQtY29sb3I6I2ViZWVmNTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1wcm9ncmVzcy1iYXJfX2lubmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmY7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItcmFkaXVzOjEwMHB4O2xpbmUtaGVpZ2h0OjE7d2hpdGUtc3BhY2U6bm93cmFwO3RyYW5zaXRpb246d2lkdGggLjZzIGVhc2V9LmVsLWNhcmQsLmVsLW1lc3NhZ2V7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVufS5lbC1wcm9ncmVzcy1iYXJfX2lubmVyOmFmdGVye2hlaWdodDoxMDAlfS5lbC1wcm9ncmVzcy1iYXJfX2lubmVyVGV4dHtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxMnB4O21hcmdpbjowIDVweH1Aa2V5ZnJhbWVzIHByb2dyZXNzezAle2JhY2tncm91bmQtcG9zaXRpb246MCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MzJweCAwfX0uZWwtdGltZS1zcGlubmVye3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1zcGlubmVyLWlubmVyey13ZWJraXQtYW5pbWF0aW9uOnJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7d2lkdGg6NTBweDtoZWlnaHQ6NTBweH0uZWwtc3Bpbm5lci1pbm5lciAucGF0aHtzdHJva2U6I2VjZWNlYztzdHJva2UtbGluZWNhcDpyb3VuZDstd2Via2l0LWFuaW1hdGlvbjpkYXNoIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7YW5pbWF0aW9uOmRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZX1ALXdlYmtpdC1rZXlmcmFtZXMgcm90YXRle3Rve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX1Aa2V5ZnJhbWVzIHJvdGF0ZXt0b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19QC13ZWJraXQta2V5ZnJhbWVzIGRhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDE1MDtzdHJva2UtZGFzaG9mZnNldDowfTUwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotMzV9dG97c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNH19QGtleWZyYW1lcyBkYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1fXRve3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0Oi0xMjR9fS5lbC1tZXNzYWdle21pbi13aWR0aDozODBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNlYmVlZjU7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7dG9wOjIwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7YmFja2dyb3VuZC1jb2xvcjojZWRmMmZjO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsdHJhbnNmb3JtIC40cyx0b3AgLjRzO3BhZGRpbmc6MTVweCAxNXB4IDE1cHggMjBweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1tZXNzYWdlLmlzLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1tZXNzYWdlLmlzLWNsb3NhYmxlIC5lbC1tZXNzYWdlX19jb250ZW50e3BhZGRpbmctcmlnaHQ6MTZweH0uZWwtbWVzc2FnZSBwe21hcmdpbjowfS5lbC1tZXNzYWdlLS1pbmZvIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4fS5lbC1tZXNzYWdlLS1zdWNjZXNzIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiM2N2MyM2F9LmVsLW1lc3NhZ2UtLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2JvcmRlci1jb2xvcjojZmFlY2Q4fS5lbC1tZXNzYWdlLS13YXJuaW5nIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiNlNmEyM2N9LmVsLW1lc3NhZ2UtLWVycm9ye2JhY2tncm91bmQtY29sb3I6I2ZlZjBmMDtib3JkZXItY29sb3I6I2ZkZTJlMn0uZWwtbWVzc2FnZS0tZXJyb3IgLmVsLW1lc3NhZ2VfX2NvbnRlbnR7Y29sb3I6I2Y1NmM2Y30uZWwtbWVzc2FnZV9faWNvbnttYXJnaW4tcmlnaHQ6MTBweH0uZWwtbWVzc2FnZV9fY29udGVudHtwYWRkaW5nOjA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MX0uZWwtbWVzc2FnZV9fY2xvc2VCdG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxNXB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2N1cnNvcjpwb2ludGVyO2NvbG9yOiNjMGM0Y2M7Zm9udC1zaXplOjE2cHh9LmVsLW1lc3NhZ2VfX2Nsb3NlQnRuOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UgLmVsLWljb24tc3VjY2Vzc3tjb2xvcjojNjdjMjNhfS5lbC1tZXNzYWdlIC5lbC1pY29uLWVycm9ye2NvbG9yOiNmNTZjNmN9LmVsLW1lc3NhZ2UgLmVsLWljb24taW5mb3tjb2xvcjojOTA5Mzk5fS5lbC1tZXNzYWdlIC5lbC1pY29uLXdhcm5pbmd7Y29sb3I6I2U2YTIzY30uZWwtbWVzc2FnZS1mYWRlLWVudGVyLC5lbC1tZXNzYWdlLWZhZGUtbGVhdmUtYWN0aXZle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTEwMCUpfS5lbC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLWJhZGdlX19jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Yztib3JkZXItcmFkaXVzOjEwcHg7Y29sb3I6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTJweDtoZWlnaHQ6MThweDtsaW5lLWhlaWdodDoxOHB4O3BhZGRpbmc6MCA2cHg7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjoxcHggc29saWQgI2ZmZn0uZWwtYmFkZ2VfX2NvbnRlbnQuaXMtZml4ZWR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKDEwMCUpfS5lbC1yYXRlX19pY29uLC5lbC1yYXRlX19pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1iYWRnZV9fY29udGVudC5pcy1maXhlZC5pcy1kb3R7cmlnaHQ6NXB4fS5lbC1iYWRnZV9fY29udGVudC5pcy1kb3R7aGVpZ2h0OjhweDt3aWR0aDo4cHg7cGFkZGluZzowO3JpZ2h0OjA7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWJhZGdlX19jb250ZW50LS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzQwOWVmZn0uZWwtYmFkZ2VfX2NvbnRlbnQtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjdjMjNhfS5lbC1iYWRnZV9fY29udGVudC0td2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLWJhZGdlX19jb250ZW50LS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtYmFkZ2VfX2NvbnRlbnQtLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmN9LmVsLWNhcmR7Ym9yZGVyOjFweCBzb2xpZCAjZWJlZWY1O2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMzAzMTMzO3RyYW5zaXRpb246LjNzfS5lbC1jYXJkLmlzLWFsd2F5cy1zaGFkb3csLmVsLWNhcmQuaXMtaG92ZXItc2hhZG93OmZvY3VzLC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpob3Zlcntib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtY2FyZF9faGVhZGVye3BhZGRpbmc6MThweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmVlZjU7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1jYXJkX19ib2R5e3BhZGRpbmc6MjBweH0uZWwtcmF0ZXtoZWlnaHQ6MjBweDtsaW5lLWhlaWdodDoxfS5lbC1yYXRlX19pdGVte2ZvbnQtc2l6ZTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcmF0ZV9faWNvbntmb250LXNpemU6MThweDttYXJnaW4tcmlnaHQ6NnB4O2NvbG9yOiNjMGM0Y2M7dHJhbnNpdGlvbjouM3N9LmVsLXJhdGVfX2RlY2ltYWwsLmVsLXJhdGVfX2ljb24gLnBhdGgye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0uZWwtcmF0ZV9faWNvbi5ob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4xNSl9LmVsLXJhdGVfX2RlY2ltYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5lbC1zdGVwLmlzLXZlcnRpY2FsLC5lbC1zdGVwc3tkaXNwbGF5Oi1tcy1mbGV4Ym94fS5lbC1yYXRlX190ZXh0e2ZvbnQtc2l6ZToxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3RlcHN7ZGlzcGxheTpmbGV4fS5lbC1zdGVwcy0tc2ltcGxle3BhZGRpbmc6MTNweCA4JTtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kOiNmNWY3ZmF9LmVsLXN0ZXBzLS1ob3Jpem9udGFse3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtc3RlcHMtLXZlcnRpY2Fse2hlaWdodDoxMDAlO2ZsZXgtZmxvdzpjb2x1bW59LmVsLXN0ZXB7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MX0uZWwtc3RlcDpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2xpbmV7ZGlzcGxheTpub25lfS5lbC1zdGVwOmxhc3Qtb2YtdHlwZS5pcy1mbGV4e2ZsZXgtYmFzaXM6YXV0byFpbXBvcnRhbnQ7ZmxleC1zaHJpbms6MDtmbGV4LWdyb3c6MH0uZWwtc3RlcDpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLC5lbC1zdGVwOmxhc3Qtb2YtdHlwZSAuZWwtc3RlcF9fbWFpbntwYWRkaW5nLXJpZ2h0OjB9LmVsLXN0ZXBfX2hlYWR7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0uZWwtc3RlcF9faGVhZC5pcy1wcm9jZXNze2NvbG9yOiMzMDMxMzM7Ym9yZGVyLWNvbG9yOiMzMDMxMzN9LmVsLXN0ZXBfX2hlYWQuaXMtd2FpdHtjb2xvcjojYzBjNGNjO2JvcmRlci1jb2xvcjojYzBjNGNjfS5lbC1zdGVwX19oZWFkLmlzLXN1Y2Nlc3N7Y29sb3I6IzY3YzIzYTtib3JkZXItY29sb3I6IzY3YzIzYX0uZWwtc3RlcF9faGVhZC5pcy1lcnJvcntjb2xvcjojZjU2YzZjO2JvcmRlci1jb2xvcjojZjU2YzZjfS5lbC1zdGVwX19oZWFkLmlzLWZpbmlzaHtjb2xvcjojNDA5ZWZmO2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1zdGVwX19pY29ue3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjI0cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjE0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQ6I2ZmZjt0cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXR9LmVsLXN0ZXBfX2ljb24uaXMtdGV4dHtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1jb2xvcjppbmhlcml0fS5lbC1zdGVwX19pY29uLmlzLWljb257d2lkdGg6NDBweH0uZWwtc3RlcF9faWNvbi1pbm5lcntkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7Y29sb3I6aW5oZXJpdH0uZWwtc3RlcF9faWNvbi1pbm5lcltjbGFzcyo9ZWwtaWNvbl06bm90KC5pcy1zdGF0dXMpe2ZvbnQtc2l6ZToyNXB4O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtc3RlcF9faWNvbi1pbm5lci5pcy1zdGF0dXN7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMXB4KX0uZWwtc3RlcF9fbGluZXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItY29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNjMGM0Y2N9LmVsLXN0ZXBfX2xpbmUtaW5uZXJ7ZGlzcGxheTpibG9jaztib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6aW5oZXJpdDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXQ7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjA7aGVpZ2h0OjB9LmVsLXN0ZXBfX21haW57d2hpdGUtc3BhY2U6bm9ybWFsO3RleHQtYWxpZ246bGVmdH0uZWwtc3RlcF9fdGl0bGV7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MzhweH0uZWwtc3RlcF9fdGl0bGUuaXMtcHJvY2Vzc3tmb250LXdlaWdodDo3MDA7Y29sb3I6IzMwMzEzM30uZWwtc3RlcF9fdGl0bGUuaXMtd2FpdHtjb2xvcjojYzBjNGNjfS5lbC1zdGVwX190aXRsZS5pcy1zdWNjZXNze2NvbG9yOiM2N2MyM2F9LmVsLXN0ZXBfX3RpdGxlLmlzLWVycm9ye2NvbG9yOiNmNTZjNmN9LmVsLXN0ZXBfX3RpdGxlLmlzLWZpbmlzaHtjb2xvcjojNDA5ZWZmfS5lbC1zdGVwX19kZXNjcmlwdGlvbntwYWRkaW5nLXJpZ2h0OjEwJTttYXJnaW4tdG9wOi01cHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweDtmb250LXdlaWdodDo0MDB9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLXByb2Nlc3N7Y29sb3I6IzMwMzEzM30uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtd2FpdHtjb2xvcjojYzBjNGNjfS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy1zdWNjZXNze2NvbG9yOiM2N2MyM2F9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLWVycm9ye2NvbG9yOiNmNTZjNmN9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLWZpbmlzaHtjb2xvcjojNDA5ZWZmfS5lbC1zdGVwLmlzLWhvcml6b250YWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXN0ZXAuaXMtaG9yaXpvbnRhbCAuZWwtc3RlcF9fbGluZXtoZWlnaHQ6MnB4O3RvcDoxMXB4O2xlZnQ6MDtyaWdodDowfS5lbC1zdGVwLmlzLXZlcnRpY2Fse2Rpc3BsYXk6ZmxleH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9faGVhZHtmbGV4LWdyb3c6MDt3aWR0aDoyNHB4fS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19tYWlue3BhZGRpbmctbGVmdDoxMHB4O2ZsZXgtZ3JvdzoxfS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX190aXRsZXtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjhweH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9fbGluZXt3aWR0aDoycHg7dG9wOjA7Ym90dG9tOjA7bGVmdDoxMXB4fS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19pY29uLmlzLWljb257d2lkdGg6MjRweH0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2hlYWQsLmVsLXN0ZXAuaXMtY2VudGVyIC5lbC1zdGVwX19tYWlue3RleHQtYWxpZ246Y2VudGVyfS5lbC1zdGVwLmlzLWNlbnRlciAuZWwtc3RlcF9fZGVzY3JpcHRpb257cGFkZGluZy1sZWZ0OjIwJTtwYWRkaW5nLXJpZ2h0OjIwJX0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2xpbmV7bGVmdDo1MCU7cmlnaHQ6LTUwJX0uZWwtc3RlcC5pcy1zaW1wbGV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2hlYWR7d2lkdGg6YXV0bztmb250LXNpemU6MDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29ue2JhY2tncm91bmQ6MCAwO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Zm9udC1zaXplOjEycHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29uLWlubmVyW2NsYXNzKj1lbC1pY29uXTpub3QoLmlzLXN0YXR1cyl7Zm9udC1zaXplOjE4cHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29uLWlubmVyLmlzLXN0YXR1c3t0cmFuc2Zvcm06c2NhbGUoLjgpIHRyYW5zbGF0ZVkoMXB4KX0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX21haW57cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZmxleC1ncm93OjF9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX190aXRsZXtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoyMHB4fS5lbC1zdGVwLmlzLXNpbXBsZTpub3QoOmxhc3Qtb2YtdHlwZSkgLmVsLXN0ZXBfX3RpdGxle21heC13aWR0aDo1MCU7d29yZC1icmVhazpicmVhay1hbGx9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvd3tmbGV4LWdyb3c6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzphZnRlciwuZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2Fycm93OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxNXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kOiNjMGM0Y2N9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpIHRyYW5zbGF0ZVkoLTRweCk7dHJhbnNmb3JtLW9yaWdpbjowIDB9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGVZKDRweCk7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9LmVsLXN0ZXAuaXMtc2ltcGxlOmxhc3Qtb2YtdHlwZSAuZWwtc3RlcF9fYXJyb3d7ZGlzcGxheTpub25lfS5lbC1jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtY2Fyb3VzZWwtLWhvcml6b250YWx7b3ZlcmZsb3cteDpoaWRkZW59LmVsLWNhcm91c2VsLS12ZXJ0aWNhbHtvdmVyZmxvdy15OmhpZGRlbn0uZWwtY2Fyb3VzZWxfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MzAwcHh9LmVsLWNhcm91c2VsX19hcnJvd3tib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbjowO2hlaWdodDozNnB4O3dpZHRoOjM2cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjouM3M7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMxLDQ1LDYxLC4xMSk7Y29sb3I6I2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3otaW5kZXg6MTA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHh9LmVsLWNhcm91c2VsX19hcnJvdy0tbGVmdHtsZWZ0OjE2cHh9LmVsLWNhcm91c2VsX19hcnJvdy0tcmlnaHR7cmlnaHQ6MTZweH0uZWwtY2Fyb3VzZWxfX2Fycm93OmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgzMSw0NSw2MSwuMjMpfS5lbC1jYXJvdXNlbF9fYXJyb3cgaXtjdXJzb3I6cG9pbnRlcn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnN7cG9zaXRpb246YWJzb2x1dGU7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1ob3Jpem9udGFse2JvdHRvbTowO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tdmVydGljYWx7cmlnaHQ6MDt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tb3V0c2lkZXtib3R0b206MjZweDt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpzdGF0aWM7dHJhbnNmb3JtOm5vbmV9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1vdXRzaWRlIC5lbC1jYXJvdXNlbF9faW5kaWNhdG9yOmhvdmVyIGJ1dHRvbntvcGFjaXR5Oi42NH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUgYnV0dG9ue2JhY2tncm91bmQtY29sb3I6I2MwYzRjYztvcGFjaXR5Oi4yNH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVsc3tsZWZ0OjA7cmlnaHQ6MDt0cmFuc2Zvcm06bm9uZTt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVscyAuZWwtY2Fyb3VzZWxfX2J1dHRvbntoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO3BhZGRpbmc6MnB4IDE4cHg7Zm9udC1zaXplOjEycHh9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1sYWJlbHMgLmVsLWNhcm91c2VsX19pbmRpY2F0b3J7cGFkZGluZzo2cHggNHB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3I6aG92ZXIgYnV0dG9ue29wYWNpdHk6LjcyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yLS1ob3Jpem9udGFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MTJweCA0cHh9LmVsLWNhcm91c2VsX19pbmRpY2F0b3ItLXZlcnRpY2Fse3BhZGRpbmc6NHB4IDEycHh9LmVsLWNhcm91c2VsX19pbmRpY2F0b3ItLXZlcnRpY2FsIC5lbC1jYXJvdXNlbF9fYnV0dG9ue3dpZHRoOjJweDtoZWlnaHQ6MTVweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvci5pcy1hY3RpdmUgYnV0dG9ue29wYWNpdHk6MX0uZWwtY2Fyb3VzZWxfX2J1dHRvbntkaXNwbGF5OmJsb2NrO29wYWNpdHk6LjQ4O3dpZHRoOjMwcHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDttYXJnaW46MDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOi4zc30uZWwtY2Fyb3VzZWxfX2l0ZW0sLmVsLWNhcm91c2VsX19tYXNre2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZX0uY2Fyb3VzZWwtYXJyb3ctbGVmdC1lbnRlciwuY2Fyb3VzZWwtYXJyb3ctbGVmdC1sZWF2ZS1hY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgtMTBweCk7b3BhY2l0eTowfS5jYXJvdXNlbC1hcnJvdy1yaWdodC1lbnRlciwuY2Fyb3VzZWwtYXJyb3ctcmlnaHQtbGVhdmUtYWN0aXZle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHRyYW5zbGF0ZVgoMTBweCk7b3BhY2l0eTowfS5lbC1jYXJvdXNlbF9faXRlbXt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjB9LmVsLWNhcm91c2VsX19pdGVtLmlzLWFjdGl2ZXt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLC5lbC1jYXJvdXNlbF9faXRlbS5pcy1hbmltYXRpbmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0fS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZHt3aWR0aDo1MCV9LmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLmlzLWluLXN0YWdle2N1cnNvcjpwb2ludGVyO3otaW5kZXg6MX0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtaW4tc3RhZ2UuaXMtaG92ZXIgLmVsLWNhcm91c2VsX19tYXNrLC5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZC5pcy1pbi1zdGFnZTpob3ZlciAuZWwtY2Fyb3VzZWxfX21hc2t7b3BhY2l0eTouMTJ9LmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLmlzLWFjdGl2ZXt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19tYXNre3dpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjI0O3RyYW5zaXRpb246LjJzfS5lbC1mYWRlLWluLWVudGVyLC5lbC1mYWRlLWluLWxlYXZlLWFjdGl2ZSwuZWwtZmFkZS1pbi1saW5lYXItZW50ZXIsLmVsLWZhZGUtaW4tbGluZWFyLWxlYXZlLC5lbC1mYWRlLWluLWxpbmVhci1sZWF2ZS1hY3RpdmUsLmZhZGUtaW4tbGluZWFyLWVudGVyLC5mYWRlLWluLWxpbmVhci1sZWF2ZSwuZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZle29wYWNpdHk6MH0uZWwtZmFkZS1pbi1saW5lYXItZW50ZXItYWN0aXZlLC5lbC1mYWRlLWluLWxpbmVhci1sZWF2ZS1hY3RpdmUsLmZhZGUtaW4tbGluZWFyLWVudGVyLWFjdGl2ZSwuZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZle3RyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyfS5lbC1mYWRlLWluLWVudGVyLWFjdGl2ZSwuZWwtZmFkZS1pbi1sZWF2ZS1hY3RpdmUsLmVsLXpvb20taW4tY2VudGVyLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1jZW50ZXItbGVhdmUtYWN0aXZle3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSl9LmVsLXpvb20taW4tY2VudGVyLWVudGVyLC5lbC16b29tLWluLWNlbnRlci1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCl9LmVsLXpvb20taW4tdG9wLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi10b3AtbGVhdmUtYWN0aXZle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVZKDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wfS5lbC16b29tLWluLXRvcC1lbnRlciwuZWwtem9vbS1pbi10b3AtbGVhdmUtYWN0aXZle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVZKDApfS5lbC16b29tLWluLWJvdHRvbS1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tYm90dG9tLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWSgxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbX0uZWwtem9vbS1pbi1ib3R0b20tZW50ZXIsLmVsLXpvb20taW4tYm90dG9tLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlWSgwKX0uZWwtem9vbS1pbi1sZWZ0LWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1sZWZ0LWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdH0uZWwtem9vbS1pbi1sZWZ0LWVudGVyLC5lbC16b29tLWluLWxlZnQtbGVhdmUtYWN0aXZle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjQ1KX0uY29sbGFwc2UtdHJhbnNpdGlvbnt0cmFuc2l0aW9uOmhlaWdodCAuM3MgZWFzZS1pbi1vdXQscGFkZGluZy10b3AgLjNzIGVhc2UtaW4tb3V0LHBhZGRpbmctYm90dG9tIC4zcyBlYXNlLWluLW91dH0uaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9ue3RyYW5zaXRpb246d2lkdGggLjNzIGVhc2UtaW4tb3V0LHBhZGRpbmctbGVmdCAuM3MgZWFzZS1pbi1vdXQscGFkZGluZy1yaWdodCAuM3MgZWFzZS1pbi1vdXR9LmVsLWxpc3QtZW50ZXItYWN0aXZlLC5lbC1saXN0LWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAxc30uZWwtbGlzdC1lbnRlciwuZWwtbGlzdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zMHB4KX0uZWwtb3BhY2l0eS10cmFuc2l0aW9ue3RyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpfS5lbC1jb2xsYXBzZXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlZWY1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmVlZjV9LmVsLWNvbGxhcHNlLWl0ZW0uaXMtZGlzYWJsZWQgLmVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlcntjb2xvcjojYmJiO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY29sbGFwc2UtaXRlbV9faGVhZGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzMwMzEzMztjdXJzb3I6cG9pbnRlcjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlZWY1O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjUwMDt0cmFuc2l0aW9uOmJvcmRlci1ib3R0b20tY29sb3IgLjNzO291dGxpbmU6MH0uZWwtY29sbGFwc2UtaXRlbV9fYXJyb3d7bWFyZ2luOjAgOHB4IDAgYXV0bzt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7Zm9udC13ZWlnaHQ6MzAwfS5lbC1jb2xsYXBzZS1pdGVtX19hcnJvdy5pcy1hY3RpdmV7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LmVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlci5mb2N1c2luZzpmb2N1czpub3QoOmhvdmVyKXtjb2xvcjojNDA5ZWZmfS5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXIuaXMtYWN0aXZle2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LmVsLWNvbGxhcHNlLWl0ZW1fX3dyYXB7d2lsbC1jaGFuZ2U6aGVpZ2h0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtvdmVyZmxvdzpoaWRkZW47Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmVlZjV9LmVsLWNhc2NhZGVyX190YWdzLC5lbC10YWd7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNvbGxhcHNlLWl0ZW1fX2NvbnRlbnR7cGFkZGluZy1ib3R0b206MjVweDtmb250LXNpemU6MTNweDtjb2xvcjojMzAzMTMzO2xpbmUtaGVpZ2h0OjEuNzY5MjMwNzY5MjMwNzY5fS5lbC1jb2xsYXBzZS1pdGVtOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMXB4fS5lbC1wb3BwZXIgLnBvcHBlcl9fYXJyb3csLmVsLXBvcHBlciAucG9wcGVyX19hcnJvdzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0uZWwtcG9wcGVyIC5wb3BwZXJfX2Fycm93e2JvcmRlci13aWR0aDo2cHg7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMnB4IDEycHggcmdiYSgwLDAsMCwuMDMpKX0uZWwtcG9wcGVyIC5wb3BwZXJfX2Fycm93OmFmdGVye2NvbnRlbnQ6IiAiO2JvcmRlci13aWR0aDo2cHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49dG9wXXttYXJnaW4tYm90dG9tOjEycHh9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3R0b206LTZweDtsZWZ0OjUwJTttYXJnaW4tcmlnaHQ6M3B4O2JvcmRlci10b3AtY29sb3I6I2ViZWVmNTtib3JkZXItYm90dG9tLXdpZHRoOjB9LmVsLXBvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvdzphZnRlcntib3R0b206MXB4O21hcmdpbi1sZWZ0Oi02cHg7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b20td2lkdGg6MH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21de21hcmdpbi10b3A6MTJweH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93e3RvcDotNnB4O2xlZnQ6NTAlO21hcmdpbi1yaWdodDozcHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6I2ViZWVmNX0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTZweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XXttYXJnaW4tbGVmdDoxMnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvd3t0b3A6NTAlO2xlZnQ6LTZweDttYXJnaW4tYm90dG9tOjNweDtib3JkZXItcmlnaHQtY29sb3I6I2ViZWVmNTtib3JkZXItbGVmdC13aWR0aDowfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvdzphZnRlcntib3R0b206LTZweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItbGVmdC13aWR0aDowfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRde21hcmdpbi1yaWdodDoxMnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e3RvcDo1MCU7cmlnaHQ6LTZweDttYXJnaW4tYm90dG9tOjNweDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojZWJlZWY1fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93OmFmdGVye3JpZ2h0OjFweDtib3R0b206LTZweDttYXJnaW4tbGVmdDotNnB4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9LmVsLXRhZ3tiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmY7Ym9yZGVyLWNvbG9yOiNkOWVjZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjMycHg7cGFkZGluZzowIDEwcHg7bGluZS1oZWlnaHQ6MzBweDtmb250LXNpemU6MTJweDtjb2xvcjojNDA5ZWZmO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXRhZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM0MDllZmZ9LmVsLXRhZyAuZWwtdGFnX19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC10YWcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXRhZy5lbC10YWctLWluZm97YmFja2dyb3VuZC1jb2xvcjojZjRmNGY1O2JvcmRlci1jb2xvcjojZTllOWViO2NvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLWluZm8uaXMtaGl0e2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC10YWcuZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLWluZm8gLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4O2NvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3MuaXMtaGl0e2JvcmRlci1jb2xvcjojNjdjMjNhfS5lbC10YWcuZWwtdGFnLS1zdWNjZXNzIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2JvcmRlci1jb2xvcjojZmFlY2Q4O2NvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLXdhcm5pbmcuaXMtaGl0e2JvcmRlci1jb2xvcjojZTZhMjNjfS5lbC10YWcuZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmZGUyZTI7Y29sb3I6I2Y1NmM2Y30uZWwtdGFnLmVsLXRhZy0tZGFuZ2VyLmlzLWhpdHtib3JkZXItY29sb3I6I2Y1NmM2Y30uZWwtdGFnLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmNTZjNmN9LmVsLXRhZy5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Y30uZWwtdGFnIC5lbC1pY29uLWNsb3Nle2JvcmRlci1yYWRpdXM6NTAlO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7bGluZS1oZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dG9wOi0xcHg7cmlnaHQ6LTVweH0uZWwtdGFnIC5lbC1pY29uLWNsb3NlOmJlZm9yZXtkaXNwbGF5OmJsb2NrfS5lbC10YWctLWRhcmt7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmO2NvbG9yOiNmZmZ9LmVsLXRhZy0tZGFyaywuZWwtdGFnLS1kYXJrLmlzLWhpdHtib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtdGFnLS1kYXJrIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmZmZ9LmVsLXRhZy0tZGFyayAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzY2YjFmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTk7Ym9yZGVyLWNvbG9yOiM5MDkzOTk7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mby5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy0tZGFyay5lbC10YWctLWluZm8gLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2E2YTlhZH0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2E7Ym9yZGVyLWNvbG9yOiM2N2MyM2E7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2Vzcy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM2N2MyM2F9LmVsLXRhZy0tZGFyay5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6Izg1Y2U2MX0uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2M7Ym9yZGVyLWNvbG9yOiNlNmEyM2M7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy0tZGFyay5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2ViYjU2M30uZWwtdGFnLS1kYXJrLmVsLXRhZy0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Yztib3JkZXItY29sb3I6I2Y1NmM2Yztjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXIuaXMtaGl0e2JvcmRlci1jb2xvcjojZjU2YzZjfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjc4OTg5fS5lbC10YWctLXBsYWlue2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2IzZDhmZjtjb2xvcjojNDA5ZWZmfS5lbC10YWctLXBsYWluLmlzLWhpdHtib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtdGFnLS1wbGFpbiAuZWwtdGFnX19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC10YWctLXBsYWluIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmfS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNkM2Q0ZDY7Y29sb3I6IzkwOTM5OX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLWluZm8uaXMtaGl0e2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZXtjb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojYzJlN2IwO2NvbG9yOiM2N2MyM2F9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1zdWNjZXNzLmlzLWhpdHtib3JkZXItY29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2V7Y29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2F9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2Y1ZGFiMTtjb2xvcjojZTZhMjNjfS5lbC10YWctLXBsYWluLmVsLXRhZy0td2FybmluZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZTZhMjNjfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2ZiYzRjNDtjb2xvcjojZjU2YzZjfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2VyLmlzLWhpdHtib3JkZXItY29sb3I6I2Y1NmM2Y30uZWwtdGFnLS1wbGFpbi5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZXtjb2xvcjojZjU2YzZjfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjU2YzZjfS5lbC10YWctLW1lZGl1bXtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyNnB4fS5lbC10YWctLW1lZGl1bSAuZWwtaWNvbi1jbG9zZXt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC10YWctLXNtYWxse2hlaWdodDoyNHB4O3BhZGRpbmc6MCA4cHg7bGluZS1oZWlnaHQ6MjJweH0uZWwtdGFnLS1zbWFsbCAuZWwtaWNvbi1jbG9zZXt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC10YWctLW1pbml7aGVpZ2h0OjIwcHg7cGFkZGluZzowIDVweDtsaW5lLWhlaWdodDoxOXB4fS5lbC10YWctLW1pbmkgLmVsLWljb24tY2xvc2V7bWFyZ2luLWxlZnQ6LTNweDt0cmFuc2Zvcm06c2NhbGUoLjcpfS5lbC1jYXNjYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDo0MHB4fS5lbC1jYXNjYWRlcjpub3QoLmlzLWRpc2FibGVkKTpob3ZlciAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpwb2ludGVyO2JvcmRlci1jb2xvcjojYzBjNGNjfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpmb2N1cywuZWwtY2FzY2FkZXIgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDllZmZ9LmVsLWNhc2NhZGVyIC5lbC1pbnB1dHtjdXJzb3I6cG9pbnRlcn0uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pY29uLWFycm93LWRvd257dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO2ZvbnQtc2l6ZToxNHB4fS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWljb24tYXJyb3ctZG93bi5pcy1yZXZlcnNle3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uZWwtY2FzY2FkZXIgLmVsLWlucHV0IC5lbC1pY29uLWNpcmNsZS1jbG9zZTpob3Zlcntjb2xvcjojOTA5Mzk5fS5lbC1jYXNjYWRlci0tbWVkaXVte2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWNhc2NhZGVyLS1zbWFsbHtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDozMnB4fS5lbC1jYXNjYWRlci0tbWluaXtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1jYXNjYWRlci5pcy1kaXNhYmxlZCAuZWwtY2FzY2FkZXJfX2xhYmVse3otaW5kZXg6Mjtjb2xvcjojYzBjNGNjfS5lbC1jYXNjYWRlcl9fZHJvcGRvd257bWFyZ2luOjVweCAwO2ZvbnQtc2l6ZToxNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNlNGU3ZWQ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLWNhc2NhZGVyX190YWdze3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDozMHB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2xpbmUtaGVpZ2h0Om5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFne2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21heC13aWR0aDoxMDAlO21hcmdpbjoycHggMCAycHggNnB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7YmFja2dyb3VuZDojZjBmMmY1fS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnOm5vdCguaXMtaGl0KXtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWc+c3BhbntmbGV4OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWcgLmVsLWljb24tY2xvc2V7ZmxleDpub25lO2JhY2tncm91bmQtY29sb3I6I2MwYzRjYztjb2xvcjojZmZmfS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnIC5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tcGFuZWx7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWxpc3R7bWF4LWhlaWdodDoyMDRweDttYXJnaW46MDtwYWRkaW5nOjZweCAwO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MzRweDtwYWRkaW5nOjAgMTVweDt0ZXh0LWFsaWduOmxlZnQ7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtOmZvY3VzLC5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtOmhvdmVye2JhY2tncm91bmQ6I2Y1ZjdmYX0uZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24taXRlbS5pcy1jaGVja2Vke2NvbG9yOiM0MDllZmY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtPnNwYW57bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLWNhc2NhZGVyX19lbXB0eS10ZXh0e21hcmdpbjoxMHB4IDA7Y29sb3I6I2MwYzRjY30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dHtmbGV4OjE7aGVpZ2h0OjI0cHg7bWluLXdpZHRoOjYwcHg7bWFyZ2luOjJweCAwIDJweCAxNXB4O3BhZGRpbmc6MDtjb2xvcjojNjA2MjY2O2JvcmRlcjpub25lO291dGxpbmU6MDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I2MwYzRjY30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2MwYzRjY30uZWwtY29sb3ItcHJlZGVmaW5le2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTJweDttYXJnaW4tdG9wOjhweDt3aWR0aDoyODBweH0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvcnN7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LXdyYXA6d3JhcH0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcnttYXJnaW46MCAwIDhweCA4cHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcn0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcjpudGgtY2hpbGQoMTBuKzEpe21hcmdpbi1sZWZ0OjB9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3Iuc2VsZWN0ZWR7Ym94LXNoYWRvdzowIDAgM3B4IDJweCAjNDA5ZWZmfS5lbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yPmRpdntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czozcHh9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3IuaXMtYWxwaGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FJQUFBRFpGOHV3QUFBQUdVbEVRVlFZVjJNNGd3SCtZd0NHSWFzSVV3aFQyNUJWQkFEdHpZTllySHZ2NGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5lbC1jb2xvci1odWUtc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyODBweDtoZWlnaHQ6MTJweDtiYWNrZ3JvdW5kLWNvbG9yOnJlZDtwYWRkaW5nOjAgMnB4fS5lbC1jb2xvci1odWUtc2xpZGVyX19iYXJ7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcscmVkIDAsI2ZmMCAxNyUsIzBmMCAzMyUsIzBmZiA1MCUsIzAwZiA2NyUsI2YwZiA4MyUscmVkKTtoZWlnaHQ6MTAwJX0uZWwtY29sb3ItaHVlLXNsaWRlcl9fdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2xlZnQ6MDt0b3A6MDt3aWR0aDo0cHg7aGVpZ2h0OjEwMCU7Ym9yZGVyLXJhZGl1czoxcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2YwZjBmMDtib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuNik7ei1pbmRleDoxfS5lbC1jb2xvci1odWUtc2xpZGVyLmlzLXZlcnRpY2Fse3dpZHRoOjEycHg7aGVpZ2h0OjE4MHB4O3BhZGRpbmc6MnB4IDB9LmVsLWNvbG9yLWh1ZS1zbGlkZXIuaXMtdmVydGljYWwgLmVsLWNvbG9yLWh1ZS1zbGlkZXJfX2JhcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcscmVkIDAsI2ZmMCAxNyUsIzBmMCAzMyUsIzBmZiA1MCUsIzAwZiA2NyUsI2YwZiA4MyUscmVkKX0uZWwtY29sb3ItaHVlLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtY29sb3ItaHVlLXNsaWRlcl9fdGh1bWJ7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjRweH0uZWwtY29sb3Itc3ZwYW5lbHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoyODBweDtoZWlnaHQ6MTgwcHh9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNrLC5lbC1jb2xvci1zdnBhbmVsX193aGl0ZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MH0uZWwtY29sb3Itc3ZwYW5lbF9fd2hpdGV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2ZmZixoc2xhKDAsMCUsMTAwJSwwKSl9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDBkZWcsIzAwMCx0cmFuc3BhcmVudCl9LmVsLWNvbG9yLXN2cGFuZWxfX2N1cnNvcntwb3NpdGlvbjphYnNvbHV0ZX0uZWwtY29sb3Itc3ZwYW5lbF9fY3Vyc29yPmRpdntjdXJzb3I6aGVhZDt3aWR0aDo0cHg7aGVpZ2h0OjRweDtib3gtc2hhZG93OjAgMCAwIDEuNXB4ICNmZmYsaW5zZXQgMCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMyksMCAwIDFweCAycHggcmdiYSgwLDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMnB4LC0ycHgpfS5lbC1jb2xvci1hbHBoYS1zbGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjI4MHB4O2hlaWdodDoxMnB4O2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyX19iYXJ7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsaHNsYSgwLDAlLDEwMCUsMCkgMCwjZmZmKTtoZWlnaHQ6MTAwJX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyX190aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGVmdDowO3RvcDowO3dpZHRoOjRweDtoZWlnaHQ6MTAwJTtib3JkZXItcmFkaXVzOjFweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZjBmMGYwO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC42KTt6LWluZGV4OjF9LmVsLWNvbG9yLWFscGhhLXNsaWRlci5pcy12ZXJ0aWNhbHt3aWR0aDoyMHB4O2hlaWdodDoxODBweH0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX2JhcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsaHNsYSgwLDAlLDEwMCUsMCkgMCwjZmZmKX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1ie2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDo0cHh9LmVsLWNvbG9yLWRyb3Bkb3due3dpZHRoOjMwMHB4fS5lbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVye21hcmdpbi1ib3R0b206NnB4fS5lbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVyOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS5lbC1jb2xvci1kcm9wZG93bl9fYnRuc3ttYXJnaW4tdG9wOjZweDt0ZXh0LWFsaWduOnJpZ2h0fS5lbC1jb2xvci1kcm9wZG93bl9fdmFsdWV7ZmxvYXQ6bGVmdDtsaW5lLWhlaWdodDoyNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwMDA7d2lkdGg6MTYwcHh9LmVsLWNvbG9yLWRyb3Bkb3duX19idG57Ym9yZGVyOjFweCBzb2xpZCAjZGNkY2RjO2NvbG9yOiMzMzM7bGluZS1oZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjAgMjBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweH0uZWwtY29sb3ItZHJvcGRvd25fX2J0bltkaXNhYmxlZF17Y29sb3I6I2NjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNvbG9yLWRyb3Bkb3duX19idG46aG92ZXJ7Y29sb3I6IzQwOWVmZjtib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRue2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0MDllZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cGFkZGluZzoxNXB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jb2xvci1kcm9wZG93bl9fbGluay1idG46aG92ZXJ7Y29sb3I6dGludCgjNDA5ZWZmLDIwJSl9LmVsLWNvbG9yLXBpY2tlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDpub3JtYWw7aGVpZ2h0OjQwcHh9LmVsLWNvbG9yLXBpY2tlci5pcy1kaXNhYmxlZCAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY29sb3ItcGlja2VyLS1tZWRpdW17aGVpZ2h0OjM2cHh9LmVsLWNvbG9yLXBpY2tlci0tbWVkaXVtIC5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7aGVpZ2h0OjM2cHg7d2lkdGg6MzZweH0uZWwtY29sb3ItcGlja2VyLS1tZWRpdW0gLmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MzRweDt3aWR0aDozNHB4fS5lbC1jb2xvci1waWNrZXItLXNtYWxse2hlaWdodDozMnB4fS5lbC1jb2xvci1waWNrZXItLXNtYWxsIC5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7aGVpZ2h0OjMycHg7d2lkdGg6MzJweH0uZWwtY29sb3ItcGlja2VyLS1zbWFsbCAuZWwtY29sb3ItcGlja2VyX19tYXNre2hlaWdodDozMHB4O3dpZHRoOjMwcHh9LmVsLWNvbG9yLXBpY2tlci0tc21hbGwgLmVsLWNvbG9yLXBpY2tlcl9fZW1wdHksLmVsLWNvbG9yLXBpY2tlci0tc21hbGwgLmVsLWNvbG9yLXBpY2tlcl9faWNvbnt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApIHNjYWxlKC44KX0uZWwtY29sb3ItcGlja2VyLS1taW5pe2hlaWdodDoyOHB4fS5lbC1jb2xvci1waWNrZXItLW1pbmkgLmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntoZWlnaHQ6MjhweDt3aWR0aDoyOHB4fS5lbC1jb2xvci1waWNrZXItLW1pbmkgLmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MjZweDt3aWR0aDoyNnB4fS5lbC1jb2xvci1waWNrZXItLW1pbmkgLmVsLWNvbG9yLXBpY2tlcl9fZW1wdHksLmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX19pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCkgc2NhbGUoLjgpfS5lbC1jb2xvci1waWNrZXJfX21hc2t7aGVpZ2h0OjM4cHg7d2lkdGg6MzhweDtib3JkZXItcmFkaXVzOjRweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MXB4O2xlZnQ6MXB4O3otaW5kZXg6MTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNyl9LmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDtwYWRkaW5nOjRweDtib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTY7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjA7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNvbG9yLXBpY2tlcl9fY29sb3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2JvcmRlci1yYWRpdXM6MnB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNvbG9yLXBpY2tlcl9fY29sb3IuaXMtYWxwaGF7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBd0FBQUFNQ0FJQUFBRFpGOHV3QUFBQUdVbEVRVlFZVjJNNGd3SCtZd0NHSWFzSVV3aFQyNUJWQkFEdHpZTllySHZ2NGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5lbC1jb2xvci1waWNrZXJfX2NvbG9yLWlubmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtyaWdodDowO2JvdHRvbTowfS5lbC1jb2xvci1waWNrZXJfX2VtcHR5LC5lbC1jb2xvci1waWNrZXJfX2ljb257dG9wOjUwJTtsZWZ0OjUwJTtmb250LXNpemU6MTJweDtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtY29sb3ItcGlja2VyX19lbXB0eXtjb2xvcjojOTk5O3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCl9LmVsLWNvbG9yLXBpY2tlcl9faWNvbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCk7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtY29sb3ItcGlja2VyX19wYW5lbHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwO3BhZGRpbmc6NnB4O2JveC1zaXppbmc6Y29udGVudC1ib3g7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2ViZWVmNTtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtdGV4dGFyZWF7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Zm9udC1zaXplOjE0cHh9LmVsLXRleHRhcmVhX19pbm5lcntkaXNwbGF5OmJsb2NrO3Jlc2l6ZTp2ZXJ0aWNhbDtwYWRkaW5nOjVweCAxNXB4O2xpbmUtaGVpZ2h0OjEuNTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTtmb250LXNpemU6aW5oZXJpdDtjb2xvcjojNjA2MjY2O2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCAjZGNkZmU2O2JvcmRlci1yYWRpdXM6NHB4O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLXRleHRhcmVhX19pbm5lcjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2MwYzRjY30uZWwtdGV4dGFyZWFfX2lubmVyOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLXRleHRhcmVhX19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6I2MwYzRjY30uZWwtdGV4dGFyZWFfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojYzBjNGNjfS5lbC10ZXh0YXJlYV9faW5uZXI6Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC10ZXh0YXJlYSAuZWwtaW5wdXRfX2NvdW50e2NvbG9yOiM5MDkzOTk7YmFja2dyb3VuZDojZmZmO3Bvc2l0aW9uOmFic29sdXRlO2ZvbnQtc2l6ZToxMnB4O2JvdHRvbTo1cHg7cmlnaHQ6MTBweH0uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmE7Ym9yZGVyLWNvbG9yOiNlNGU3ZWQ7Y29sb3I6I2MwYzRjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXRleHRhcmVhLmlzLWRpc2FibGVkIC5lbC10ZXh0YXJlYV9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLXRleHRhcmVhLmlzLWRpc2FibGVkIC5lbC10ZXh0YXJlYV9faW5uZXI6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I2MwYzRjY30uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6I2MwYzRjY30uZWwtdGV4dGFyZWEuaXMtZXhjZWVkIC5lbC10ZXh0YXJlYV9faW5uZXJ7Ym9yZGVyLWNvbG9yOiNmNTZjNmN9LmVsLXRleHRhcmVhLmlzLWV4Y2VlZCAuZWwtaW5wdXRfX2NvdW50e2NvbG9yOiNmNTZjNmN9LmVsLWlucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCV9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhcnt6LWluZGV4OjExO3dpZHRoOjZweH0uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyOmhvcml6b250YWx7aGVpZ2h0OjZweH0uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JvcmRlci1yYWRpdXM6NXB4O3dpZHRoOjZweDtiYWNrZ3JvdW5kOiNiNGJjY2N9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOiNmZmZ9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZXtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6NnB4fS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NsZWFye2NvbG9yOiNjMGM0Y2M7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NsZWFyOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLWlucHV0IC5lbC1pbnB1dF9fY291bnR7aGVpZ2h0OjEwMCU7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTJweH0uZWwtaW5wdXQgLmVsLWlucHV0X19jb3VudCAuZWwtaW5wdXRfX2NvdW50LWlubmVye2JhY2tncm91bmQ6I2ZmZjtsaW5lLWhlaWdodDpub3JtYWw7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDVweH0uZWwtaW5wdXRfX2lubmVyey13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGNkZmU2O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojNjA2MjY2O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7b3V0bGluZTowO3BhZGRpbmc6MCAxNXB4O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7d2lkdGg6MTAwJX0uZWwtaW5wdXRfX3ByZWZpeCwuZWwtaW5wdXRfX3N1ZmZpeHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcztoZWlnaHQ6MTAwJTtjb2xvcjojYzBjNGNjO3RleHQtYWxpZ246Y2VudGVyfS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5lbC1pbnB1dF9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWlucHV0X19pbm5lcjo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojYzBjNGNjfS5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6I2MwYzRjY30uZWwtaW5wdXQuaXMtYWN0aXZlIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0X19pbm5lcjpmb2N1c3tib3JkZXItY29sb3I6IzQwOWVmZjtvdXRsaW5lOjB9LmVsLWlucHV0X19zdWZmaXh7cmlnaHQ6NXB4O3RyYW5zaXRpb246YWxsIC4zc30uZWwtaW5wdXRfX3N1ZmZpeC1pbm5lcntwb2ludGVyLWV2ZW50czphbGx9LmVsLWlucHV0X19wcmVmaXh7bGVmdDo1cHg7dHJhbnNpdGlvbjphbGwgLjNzfS5lbC1pbnB1dF9faWNvbntoZWlnaHQ6MTAwJTt3aWR0aDoyNXB4O3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246YWxsIC4zcztsaW5lLWhlaWdodDo0MHB4fS5lbC1pbnB1dF9faWNvbjphZnRlcntjb250ZW50OiIiO2hlaWdodDoxMDAlO3dpZHRoOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1pbnB1dF9fdmFsaWRhdGVJY29ue3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhO2JvcmRlci1jb2xvcjojZTRlN2VkO2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojYzBjNGNjfS5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNjMGM0Y2N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faWNvbntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWxpbmssLmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWljb24tY2lyY2xlLWNsb3Nle2N1cnNvcjpwb2ludGVyfS5lbC1pbnB1dC5pcy1leGNlZWQgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6I2Y1NmM2Y30uZWwtaW5wdXQuaXMtZXhjZWVkIC5lbC1pbnB1dF9fc3VmZml4IC5lbC1pbnB1dF9fY291bnR7Y29sb3I6I2Y1NmM2Y30uZWwtaW5wdXQtLXN1ZmZpeCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctcmlnaHQ6MzBweH0uZWwtaW5wdXQtLXByZWZpeCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDozMHB4fS5lbC1pbnB1dC0tbWVkaXVte2ZvbnQtc2l6ZToxNHB4fS5lbC1pbnB1dC0tbWVkaXVtIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjM2cHg7bGluZS1oZWlnaHQ6MzZweH0uZWwtaW5wdXQtLW1lZGl1bSAuZWwtaW5wdXRfX2ljb257bGluZS1oZWlnaHQ6MzZweH0uZWwtaW5wdXQtLXNtYWxse2ZvbnQtc2l6ZToxM3B4fS5lbC1pbnB1dC0tc21hbGwgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fS5lbC1pbnB1dC0tc21hbGwgLmVsLWlucHV0X19pY29ue2xpbmUtaGVpZ2h0OjMycHh9LmVsLWlucHV0LS1taW5pe2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dC0tbWluaSAuZWwtaW5wdXRfX2lubmVye2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9LmVsLWlucHV0LS1taW5pIC5lbC1pbnB1dF9faWNvbntsaW5lLWhlaWdodDoyOHB4fS5lbC1pbnB1dC1ncm91cHtsaW5lLWhlaWdodDpub3JtYWw7ZGlzcGxheTppbmxpbmUtdGFibGU7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MH0uZWwtaW5wdXQtZ3JvdXA+LmVsLWlucHV0X19pbm5lcnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTp0YWJsZS1jZWxsfS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY3ZmE7Y29sb3I6IzkwOTM5OTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTp0YWJsZS1jZWxsO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI2RjZGZlNjtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjAgMjBweDt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1pbnB1dC1ncm91cC0tcHJlcGVuZCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5ke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmVsLWlucHV0LWdyb3VwLS1hcHBlbmQgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kOmZvY3VzLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZDpmb2N1c3tvdXRsaW5lOjB9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtc2VsZWN0LC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtc2VsZWN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjotMTBweCAtMjBweH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCBidXR0b24uZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIGRpdi5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCBkaXYuZWwtc2VsZWN0OmhvdmVyIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIGJ1dHRvbi5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIGRpdi5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgZGl2LmVsLXNlbGVjdDpob3ZlciAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOmluaGVyaXQ7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1pbnB1dCwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgLmVsLWlucHV0e2ZvbnQtc2l6ZTppbmhlcml0fS5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtib3JkZXItcmlnaHQ6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtib3JkZXItbGVmdDowfS5lbC1pbnB1dC1ncm91cC0tYXBwZW5kIC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwLS1wcmVwZW5kIC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmU7d2lkdGg6MDtoZWlnaHQ6MH0uZWwtdHJhbnNmZXJ7Zm9udC1zaXplOjE0cHh9LmVsLXRyYW5zZmVyX19idXR0b25ze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwYWRkaW5nOjAgMzBweH0uZWwtdHJhbnNmZXJfX2J1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG87cGFkZGluZzoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmO2ZvbnQtc2l6ZTowfS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbSsuZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0sLmVsLXRyYW5zZmVyX19idXR0b24gW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDowfS5lbC10cmFuc2Zlcl9fYnV0dG9uLmlzLXdpdGgtdGV4dHN7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXRyYW5zZmVyX19idXR0b24uaXMtZGlzYWJsZWQsLmVsLXRyYW5zZmVyX19idXR0b24uaXMtZGlzYWJsZWQ6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZGNkZmU2O2JhY2tncm91bmQtY29sb3I6I2Y1ZjdmYTtjb2xvcjojYzBjNGNjfS5lbC10cmFuc2Zlcl9fYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1ib3R0b206MTBweH0uZWwtdHJhbnNmZXJfX2J1dHRvbjpudGgtY2hpbGQoMil7bWFyZ2luOjB9LmVsLXRyYW5zZmVyX19idXR0b24gaSwuZWwtdHJhbnNmZXJfX2J1dHRvbiBzcGFue2ZvbnQtc2l6ZToxNHB4fS5lbC10cmFuc2Zlci1wYW5lbHtib3JkZXI6MXB4IHNvbGlkICNlYmVlZjU7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MjAwcHg7bWF4LWhlaWdodDoxMDAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdHJhbnNmZXItcGFuZWxfX2JvZHl7aGVpZ2h0OjI0NnB4fS5lbC10cmFuc2Zlci1wYW5lbF9fYm9keS5pcy13aXRoLWZvb3RlcntwYWRkaW5nLWJvdHRvbTo0MHB4fS5lbC10cmFuc2Zlci1wYW5lbF9fbGlzdHttYXJnaW46MDtwYWRkaW5nOjZweCAwO2xpc3Qtc3R5bGU6bm9uZTtoZWlnaHQ6MjQ2cHg7b3ZlcmZsb3c6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRyYW5zZmVyLXBhbmVsX19saXN0LmlzLWZpbHRlcmFibGV7aGVpZ2h0OjE5NHB4O3BhZGRpbmctdG9wOjB9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVte2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7cGFkZGluZy1sZWZ0OjE1cHg7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtLmVsLWNoZWNrYm94e2NvbG9yOiM2MDYyNjZ9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtLmVsLWNoZWNrYm94IC5lbC1jaGVja2JveF9fbGFiZWx7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy1sZWZ0OjI0cHg7bGluZS1oZWlnaHQ6MzBweH0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0gLmVsLWNoZWNrYm94X19pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4fS5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVye3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjoxNXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO3dpZHRoOmF1dG99LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzJweDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZy1yaWdodDoxMHB4O3BhZGRpbmctbGVmdDozMHB4fS5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVyIC5lbC1pbnB1dF9faWNvbnttYXJnaW4tbGVmdDo1cHh9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVye2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHg7YmFja2dyb3VuZDojZjVmN2ZhO21hcmdpbjowO3BhZGRpbmctbGVmdDoxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmVlZjU7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiMwMDB9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIC5lbC1jaGVja2JveHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQwcHh9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIC5lbC1jaGVja2JveCAuZWwtY2hlY2tib3hfX2xhYmVse2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMDMxMzM7Zm9udC13ZWlnaHQ6NDAwfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlciAuZWwtY2hlY2tib3ggLmVsLWNoZWNrYm94X19sYWJlbCBzcGFue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1cHg7Y29sb3I6IzkwOTM5OTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDB9LmVsLWRpdmlkZXJfX3RleHQsLmVsLWxpbmt7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNHB4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3RlcntoZWlnaHQ6NDBweDtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmVlZjU7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7ei1pbmRleDoxfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3RlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtY29udGFpbmVyLC5lbC10aW1lbGluZS1pdGVtX19ub2Rle2Rpc3BsYXk6LW1zLWZsZXhib3h9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyIC5lbC1jaGVja2JveHtwYWRkaW5nLWxlZnQ6MjBweDtjb2xvcjojNjA2MjY2fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5e21hcmdpbjowO2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7cGFkZGluZzo2cHggMTVweCAwO2NvbG9yOiM5MDkzOTk7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC1jaGVja2JveF9fbGFiZWx7cGFkZGluZy1sZWZ0OjhweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLWNoZWNrYm94X19pbm5lcntoZWlnaHQ6MTRweDt3aWR0aDoxNHB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtY2hlY2tib3hfX2lubmVyOmFmdGVye2hlaWdodDo2cHg7d2lkdGg6M3B4O2xlZnQ6NHB4fS5lbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4OjE7ZmxleC1iYXNpczphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MH0uZWwtY29udGFpbmVyLmlzLXZlcnRpY2FsLC5lbC1kcmF3ZXIsLmVsLWVtcHR5ey13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbH0uZWwtYXNpZGUsLmVsLWhlYWRlcnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY29udGFpbmVyLmlzLXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZWwtaGVhZGVye3BhZGRpbmc6MCAyMHB4fS5lbC1hc2lkZSwuZWwtaGVhZGVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LXNocmluazowfS5lbC1hc2lkZXtvdmVyZmxvdzphdXRvfS5lbC1mb290ZXIsLmVsLW1haW57LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLW1haW57ZGlzcGxheTpibG9jaztmbGV4OjE7ZmxleC1iYXNpczphdXRvO292ZXJmbG93OmF1dG87cGFkZGluZzoyMHB4fS5lbC1mb290ZXIsLmVsLW1haW57Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1mb290ZXJ7cGFkZGluZzowIDIwcHg7ZmxleC1zaHJpbms6MH0uZWwtdGltZWxpbmV7bWFyZ2luOjA7Zm9udC1zaXplOjE0cHg7bGlzdC1zdHlsZTpub25lfS5lbC10aW1lbGluZSAuZWwtdGltZWxpbmUtaXRlbTpsYXN0LWNoaWxkIC5lbC10aW1lbGluZS1pdGVtX190YWlse2Rpc3BsYXk6bm9uZX0uZWwtdGltZWxpbmUtaXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWJvdHRvbToyMHB4fS5lbC10aW1lbGluZS1pdGVtX193cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDoyOHB4O3RvcDotM3B4fS5lbC10aW1lbGluZS1pdGVtX190YWlse3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O2hlaWdodDoxMDAlO2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZTRlN2VkfS5lbC10aW1lbGluZS1pdGVtX19pY29ue2NvbG9yOiNmZmY7Zm9udC1zaXplOjEzcHh9LmVsLXRpbWVsaW5lLWl0ZW1fX25vZGV7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZC1jb2xvcjojZTRlN2VkO2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtaW1hZ2VfX2Vycm9yLC5lbC10aW1lbGluZS1pdGVtX19kb3R7ZGlzcGxheTotbXMtZmxleGJveH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tbm9ybWFse2xlZnQ6LTFweDt3aWR0aDoxMnB4O2hlaWdodDoxMnB4fS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1sYXJnZXtsZWZ0Oi0ycHg7d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXRpbWVsaW5lLWl0ZW1fX25vZGUtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjdjMjNhfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2U2YTIzY30uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Y30uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLXRpbWVsaW5lLWl0ZW1fX2RvdHtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLXRpbWVsaW5lLWl0ZW1fX2NvbnRlbnR7Y29sb3I6IzMwMzEzM30uZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1we2NvbG9yOiM5MDkzOTk7bGluZS1oZWlnaHQ6MTtmb250LXNpemU6MTNweH0uZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wLmlzLXRvcHttYXJnaW4tYm90dG9tOjhweDtwYWRkaW5nLXRvcDo0cHh9LmVsLXRpbWVsaW5lLWl0ZW1fX3RpbWVzdGFtcC5pcy1ib3R0b217bWFyZ2luLXRvcDo4cHh9LmVsLWxpbmt7ZGlzcGxheTppbmxpbmUtZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtZGVjb3JhdGlvbjpub25lO291dGxpbmU6MDtwYWRkaW5nOjB9LmVsLWxpbmsuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7aGVpZ2h0OjA7Ym90dG9tOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQwOWVmZn0uZWwtbGluay5lbC1saW5rLS1kZWZhdWx0OmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLXByaW1hcnkuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLXByaW1hcnk6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOiM0MDllZmZ9LmVsLWxpbmsuaXMtZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1saW5rIFtjbGFzcyo9ZWwtaWNvbi1dK3NwYW57bWFyZ2luLWxlZnQ6NXB4fS5lbC1saW5rLmVsLWxpbmstLWRlZmF1bHR7Y29sb3I6IzYwNjI2Nn0uZWwtbGluay5lbC1saW5rLS1kZWZhdWx0OmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdC5pcy1kaXNhYmxlZHtjb2xvcjojYzBjNGNjfS5lbC1saW5rLmVsLWxpbmstLXByaW1hcnl7Y29sb3I6IzQwOWVmZn0uZWwtbGluay5lbC1saW5rLS1wcmltYXJ5OmhvdmVye2NvbG9yOiM2NmIxZmZ9LmVsLWxpbmsuZWwtbGluay0tcHJpbWFyeS5pcy1kaXNhYmxlZHtjb2xvcjojYTBjZmZmfS5lbC1saW5rLmVsLWxpbmstLWRhbmdlci5pcy11bmRlcmxpbmU6aG92ZXI6YWZ0ZXIsLmVsLWxpbmsuZWwtbGluay0tZGFuZ2VyOmFmdGVye2JvcmRlci1jb2xvcjojZjU2YzZjfS5lbC1saW5rLmVsLWxpbmstLWRhbmdlcntjb2xvcjojZjU2YzZjfS5lbC1saW5rLmVsLWxpbmstLWRhbmdlcjpob3Zlcntjb2xvcjojZjc4OTg5fS5lbC1saW5rLmVsLWxpbmstLWRhbmdlci5pcy1kaXNhYmxlZHtjb2xvcjojZmFiNmI2fS5lbC1saW5rLmVsLWxpbmstLXN1Y2Nlc3MuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLXN1Y2Nlc3M6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOiM2N2MyM2F9LmVsLWxpbmsuZWwtbGluay0tc3VjY2Vzc3tjb2xvcjojNjdjMjNhfS5lbC1saW5rLmVsLWxpbmstLXN1Y2Nlc3M6aG92ZXJ7Y29sb3I6Izg1Y2U2MX0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzLmlzLWRpc2FibGVke2NvbG9yOiNiM2UxOWR9LmVsLWxpbmsuZWwtbGluay0td2FybmluZy5pcy11bmRlcmxpbmU6aG92ZXI6YWZ0ZXIsLmVsLWxpbmsuZWwtbGluay0td2FybmluZzphZnRlcntib3JkZXItY29sb3I6I2U2YTIzY30uZWwtbGluay5lbC1saW5rLS13YXJuaW5ne2NvbG9yOiNlNmEyM2N9LmVsLWxpbmsuZWwtbGluay0td2FybmluZzpob3Zlcntjb2xvcjojZWJiNTYzfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmcuaXMtZGlzYWJsZWR7Y29sb3I6I2YzZDE5ZX0uZWwtbGluay5lbC1saW5rLS1pbmZvLmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1pbmZvOmFmdGVye2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC1saW5rLmVsLWxpbmstLWluZm97Y29sb3I6IzkwOTM5OX0uZWwtbGluay5lbC1saW5rLS1pbmZvOmhvdmVye2NvbG9yOiNhNmE5YWR9LmVsLWxpbmsuZWwtbGluay0taW5mby5pcy1kaXNhYmxlZHtjb2xvcjojYzhjOWNjfS5lbC1kaXZpZGVye2JhY2tncm91bmQtY29sb3I6I2RjZGZlNjtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGl2aWRlci0taG9yaXpvbnRhbHtkaXNwbGF5OmJsb2NrO2hlaWdodDoxcHg7d2lkdGg6MTAwJTttYXJnaW46MjRweCAwfS5lbC1kaXZpZGVyLS12ZXJ0aWNhbHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxcHg7aGVpZ2h0OjFlbTttYXJnaW46MCA4cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1kaXZpZGVyX190ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwYWRkaW5nOjAgMjBweDtjb2xvcjojMzAzMTMzfS5lbC1pbWFnZV9fZXJyb3IsLmVsLWltYWdlX19wbGFjZWhvbGRlcntiYWNrZ3JvdW5kOiNmNWY3ZmF9LmVsLWRpdmlkZXJfX3RleHQuaXMtbGVmdHtsZWZ0OjIwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmVsLWRpdmlkZXJfX3RleHQuaXMtY2VudGVye2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSl9LmVsLWRpdmlkZXJfX3RleHQuaXMtcmlnaHR7cmlnaHQ6MjBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uZWwtaW1hZ2VfX2Vycm9yLC5lbC1pbWFnZV9faW5uZXIsLmVsLWltYWdlX19wbGFjZWhvbGRlcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC1pbWFnZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzpoaWRkZW59LmVsLWltYWdlX19pbm5lcnt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWltYWdlX19pbm5lci0tY2VudGVye3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2Rpc3BsYXk6YmxvY2t9LmVsLWltYWdlX19lcnJvcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2MwYzRjYzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWltYWdlX19wcmV2aWV3e2N1cnNvcjpwb2ludGVyfS5lbC1pbWFnZS12aWV3ZXJfX3dyYXBwZXJ7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjB9LmVsLWltYWdlLXZpZXdlcl9fYnRue3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym9yZGVyLXJhZGl1czo1MCU7b3BhY2l0eTouODtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7dXNlci1zZWxlY3Q6bm9uZX0uZWwtYnV0dG9uLC5lbC1jaGVja2JveCwuZWwtaW1hZ2Utdmlld2VyX19idG57LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uZWwtaW1hZ2Utdmlld2VyX19jbG9zZXt0b3A6NDBweDtyaWdodDo0MHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Zm9udC1zaXplOjI0cHg7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM2MDYyNjZ9LmVsLWltYWdlLXZpZXdlcl9fY2FudmFze3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnN7bGVmdDo1MCU7Ym90dG9tOjMwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7d2lkdGg6MjgycHg7aGVpZ2h0OjQ0cHg7cGFkZGluZzowIDIzcHg7YmFja2dyb3VuZC1jb2xvcjojNjA2MjY2O2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MjJweH0uZWwtaW1hZ2Utdmlld2VyX19hY3Rpb25zX19pbm5lcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RleHQtYWxpZ246anVzdGlmeTtjdXJzb3I6ZGVmYXVsdDtmb250LXNpemU6MjNweDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZWwtaW1hZ2Utdmlld2VyX19uZXh0LC5lbC1pbWFnZS12aWV3ZXJfX3ByZXZ7dG9wOjUwJTt3aWR0aDo0NHB4O2hlaWdodDo0NHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjA2MjY2O2JvcmRlci1jb2xvcjojZmZmfS5lbC1pbWFnZS12aWV3ZXJfX3ByZXZ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7bGVmdDo0MHB4fS5lbC1pbWFnZS12aWV3ZXJfX25leHR7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7cmlnaHQ6NDBweDt0ZXh0LWluZGVudDoycHh9LmVsLWltYWdlLXZpZXdlcl9fbWFza3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtvcGFjaXR5Oi41O2JhY2tncm91bmQ6IzAwMH0udmlld2VyLWZhZGUtZW50ZXItYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOnZpZXdlci1mYWRlLWluIC4zczthbmltYXRpb246dmlld2VyLWZhZGUtaW4gLjNzfS52aWV3ZXItZmFkZS1sZWF2ZS1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246dmlld2VyLWZhZGUtb3V0IC4zczthbmltYXRpb246dmlld2VyLWZhZGUtb3V0IC4zc31ALXdlYmtpdC1rZXlmcmFtZXMgdmlld2VyLWZhZGUtaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO29wYWNpdHk6MX19QGtleWZyYW1lcyB2aWV3ZXItZmFkZS1pbnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCk7b3BhY2l0eToxfX1ALXdlYmtpdC1rZXlmcmFtZXMgdmlld2VyLWZhZGUtb3V0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgdmlld2VyLWZhZGUtb3V0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fS5lbC1idXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2RjZGZlNjtjb2xvcjojNjA2MjY2Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7bWFyZ2luOjA7dHJhbnNpdGlvbjouMXM7Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MTJweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6NHB4fS5lbC1idXR0b24rLmVsLWJ1dHRvbnttYXJnaW4tbGVmdDoxMHB4fS5lbC1idXR0b246Zm9jdXMsLmVsLWJ1dHRvbjpob3Zlcntjb2xvcjojNDA5ZWZmO2JvcmRlci1jb2xvcjojYzZlMmZmO2JhY2tncm91bmQtY29sb3I6I2VjZjVmZn0uZWwtYnV0dG9uOmFjdGl2ZXtjb2xvcjojM2E4ZWU2O2JvcmRlci1jb2xvcjojM2E4ZWU2O291dGxpbmU6MH0uZWwtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5lbC1idXR0b24gW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDo1cHh9LmVsLWJ1dHRvbi5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6IzQwOWVmZjtjb2xvcjojNDA5ZWZmfS5lbC1idXR0b24uaXMtYWN0aXZlLC5lbC1idXR0b24uaXMtcGxhaW46YWN0aXZle2NvbG9yOiMzYThlZTY7Ym9yZGVyLWNvbG9yOiMzYThlZTZ9LmVsLWJ1dHRvbi5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojZmZmO291dGxpbmU6MH0uZWwtYnV0dG9uLmlzLWRpc2FibGVkLC5lbC1idXR0b24uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojYzBjNGNjO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZWJlZWY1fS5lbC1idXR0b24uaXMtZGlzYWJsZWQuZWwtYnV0dG9uLS10ZXh0e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5pcy1wbGFpbiwuZWwtYnV0dG9uLmlzLWRpc2FibGVkLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24uaXMtZGlzYWJsZWQuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZWJlZWY1O2NvbG9yOiNjMGM0Y2N9LmVsLWJ1dHRvbi5pcy1sb2FkaW5ne3Bvc2l0aW9uOnJlbGF0aXZlO3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWJ1dHRvbi5pcy1sb2FkaW5nOmJlZm9yZXtwb2ludGVyLWV2ZW50czpub25lO2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDotMXB4O3RvcDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHg7Ym9yZGVyLXJhZGl1czppbmhlcml0O2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjM1KX0uZWwtYnV0dG9uLmlzLXJvdW5ke2JvcmRlci1yYWRpdXM6MjBweDtwYWRkaW5nOjEycHggMjNweH0uZWwtYnV0dG9uLmlzLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJTtwYWRkaW5nOjEycHh9LmVsLWJ1dHRvbi0tcHJpbWFyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjtib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtYnV0dG9uLS1wcmltYXJ5OmZvY3VzLC5lbC1idXR0b24tLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZDojNjZiMWZmO2JvcmRlci1jb2xvcjojNjZiMWZmO2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZDojM2E4ZWU2O2JvcmRlci1jb2xvcjojM2E4ZWU2O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeTphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXByaW1hcnkuaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojYTBjZmZmO2JvcmRlci1jb2xvcjojYTBjZmZmfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW57Y29sb3I6IzQwOWVmZjtiYWNrZ3JvdW5kOiNlY2Y1ZmY7Ym9yZGVyLWNvbG9yOiNiM2Q4ZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6IzQwOWVmZjtib3JkZXItY29sb3I6IzQwOWVmZjtjb2xvcjojZmZmfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6IzNhOGVlNjtib3JkZXItY29sb3I6IzNhOGVlNjtjb2xvcjojZmZmO291dGxpbmU6MH0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojOGNjNWZmO2JhY2tncm91bmQtY29sb3I6I2VjZjVmZjtib3JkZXItY29sb3I6I2Q5ZWNmZn0uZWwtYnV0dG9uLS1zdWNjZXNze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjdjMjNhO2JvcmRlci1jb2xvcjojNjdjMjNhfS5lbC1idXR0b24tLXN1Y2Nlc3M6Zm9jdXMsLmVsLWJ1dHRvbi0tc3VjY2Vzczpob3ZlcntiYWNrZ3JvdW5kOiM4NWNlNjE7Ym9yZGVyLWNvbG9yOiM4NWNlNjE7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1zdWNjZXNzOmFjdGl2ZXtiYWNrZ3JvdW5kOiM1ZGFmMzQ7Ym9yZGVyLWNvbG9yOiM1ZGFmMzQ7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS1zdWNjZXNzOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNiM2UxOWQ7Ym9yZGVyLWNvbG9yOiNiM2UxOWR9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbntjb2xvcjojNjdjMjNhO2JhY2tncm91bmQ6I2YwZjllYjtib3JkZXItY29sb3I6I2MyZTdiMH0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojNjdjMjNhO2JvcmRlci1jb2xvcjojNjdjMjNhO2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojNWRhZjM0O2JvcmRlci1jb2xvcjojNWRhZjM0O2NvbG9yOiNmZmY7b3V0bGluZTowfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNhNGRhODk7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4fS5lbC1idXR0b24tLXdhcm5pbmd7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2M7Ym9yZGVyLWNvbG9yOiNlNmEyM2N9LmVsLWJ1dHRvbi0td2FybmluZzpmb2N1cywuZWwtYnV0dG9uLS13YXJuaW5nOmhvdmVye2JhY2tncm91bmQ6I2ViYjU2Mztib3JkZXItY29sb3I6I2ViYjU2Mztjb2xvcjojZmZmfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtYWN0aXZlLC5lbC1idXR0b24tLXdhcm5pbmc6YWN0aXZle2JhY2tncm91bmQ6I2NmOTIzNjtib3JkZXItY29sb3I6I2NmOTIzNjtjb2xvcjojZmZmfS5lbC1idXR0b24tLXdhcm5pbmc6YWN0aXZle291dGxpbmU6MH0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2YzZDE5ZTtib3JkZXItY29sb3I6I2YzZDE5ZX0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWlue2NvbG9yOiNlNmEyM2M7YmFja2dyb3VuZDojZmRmNmVjO2JvcmRlci1jb2xvcjojZjVkYWIxfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNlNmEyM2M7Ym9yZGVyLWNvbG9yOiNlNmEyM2M7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNjZjkyMzY7Ym9yZGVyLWNvbG9yOiNjZjkyMzY7Y29sb3I6I2ZmZjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2YwYzc4YTtiYWNrZ3JvdW5kLWNvbG9yOiNmZGY2ZWM7Ym9yZGVyLWNvbG9yOiNmYWVjZDh9LmVsLWJ1dHRvbi0tZGFuZ2Vye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjU2YzZjO2JvcmRlci1jb2xvcjojZjU2YzZjfS5lbC1idXR0b24tLWRhbmdlcjpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZDojZjc4OTg5O2JvcmRlci1jb2xvcjojZjc4OTg5O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1kYW5nZXI6YWN0aXZle2JhY2tncm91bmQ6I2RkNjE2MTtib3JkZXItY29sb3I6I2RkNjE2MTtjb2xvcjojZmZmfS5lbC1idXR0b24tLWRhbmdlcjphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLWRhbmdlci5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1kYW5nZXIuaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLWRhbmdlci5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXIuaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmYWI2YjY7Ym9yZGVyLWNvbG9yOiNmYWI2YjZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWlue2NvbG9yOiNmNTZjNmM7YmFja2dyb3VuZDojZmVmMGYwO2JvcmRlci1jb2xvcjojZmJjNGM0fS5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojZjU2YzZjO2JvcmRlci1jb2xvcjojZjU2YzZjO2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNkZDYxNjE7Ym9yZGVyLWNvbG9yOiNkZDYxNjE7Y29sb3I6I2ZmZjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojZjlhN2E3O2JhY2tncm91bmQtY29sb3I6I2ZlZjBmMDtib3JkZXItY29sb3I6I2ZkZTJlMn0uZWwtYnV0dG9uLS1pbmZve2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojOTA5Mzk5O2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC1idXR0b24tLWluZm86Zm9jdXMsLmVsLWJ1dHRvbi0taW5mbzpob3ZlcntiYWNrZ3JvdW5kOiNhNmE5YWQ7Ym9yZGVyLWNvbG9yOiNhNmE5YWQ7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS1pbmZvLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1pbmZvOmFjdGl2ZXtiYWNrZ3JvdW5kOiM4Mjg0OGE7Ym9yZGVyLWNvbG9yOiM4Mjg0OGE7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS1pbmZvOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0taW5mby5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1pbmZvLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1pbmZvLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLWluZm8uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNjOGM5Y2M7Ym9yZGVyLWNvbG9yOiNjOGM5Y2N9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbntjb2xvcjojOTA5Mzk5O2JhY2tncm91bmQ6I2Y0ZjRmNTtib3JkZXItY29sb3I6I2QzZDRkNn0uZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLWluZm8uaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojOTA5Mzk5O2JvcmRlci1jb2xvcjojOTA5Mzk5O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojODI4NDhhO2JvcmRlci1jb2xvcjojODI4NDhhO2NvbG9yOiNmZmY7b3V0bGluZTowfS5lbC1idXR0b24tLWluZm8uaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNiY2JlYzI7YmFja2dyb3VuZC1jb2xvcjojZjRmNGY1O2JvcmRlci1jb2xvcjojZTllOWVifS5lbC1idXR0b24tLXRleHQsLmVsLWJ1dHRvbi0tdGV4dC5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS10ZXh0LmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXRleHQuaXMtZGlzYWJsZWQ6aG92ZXIsLmVsLWJ1dHRvbi0tdGV4dDphY3RpdmV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1idXR0b24tLW1lZGl1bXtwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uLS1taW5pLC5lbC1idXR0b24tLXNtYWxse2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1idXR0b24tLW1lZGl1bS5pcy1yb3VuZHtwYWRkaW5nOjEwcHggMjBweH0uZWwtYnV0dG9uLS1tZWRpdW0uaXMtY2lyY2xle3BhZGRpbmc6MTBweH0uZWwtYnV0dG9uLS1zbWFsbCwuZWwtYnV0dG9uLS1zbWFsbC5pcy1yb3VuZHtwYWRkaW5nOjlweCAxNXB4fS5lbC1idXR0b24tLXNtYWxsLmlzLWNpcmNsZXtwYWRkaW5nOjlweH0uZWwtYnV0dG9uLS1taW5pLC5lbC1idXR0b24tLW1pbmkuaXMtcm91bmR7cGFkZGluZzo3cHggMTVweH0uZWwtYnV0dG9uLS1taW5pLmlzLWNpcmNsZXtwYWRkaW5nOjdweH0uZWwtYnV0dG9uLS10ZXh0e2NvbG9yOiM0MDllZmY7YmFja2dyb3VuZDowIDA7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5lbC1idXR0b24tLXRleHQ6Zm9jdXMsLmVsLWJ1dHRvbi0tdGV4dDpob3Zlcntjb2xvcjojNjZiMWZmO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1idXR0b24tLXRleHQ6YWN0aXZle2NvbG9yOiMzYThlZTY7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtYnV0dG9uLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtYnV0dG9uLWdyb3VwOmFmdGVyLC5lbC1idXR0b24tZ3JvdXA6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDoiIn0uZWwtYnV0dG9uLWdyb3VwOmFmdGVye2NsZWFyOmJvdGh9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9ue2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uKy5lbC1idXR0b257bWFyZ2luLWxlZnQ6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b24uaXMtZGlzYWJsZWR7ei1pbmRleDoxfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZC5pcy1yb3VuZHtib3JkZXItcmFkaXVzOjIwcHh9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQuaXMtY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yYWRpdXM6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6LTFweH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b24uaXMtYWN0aXZlLC5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjphY3RpdmUsLmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmZvY3VzLC5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpob3Zlcnt6LWluZGV4OjF9LmVsLWJ1dHRvbi1ncm91cD4uZWwtZHJvcGRvd24+LmVsLWJ1dHRvbntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1sZWZ0LWNvbG9yOmhzbGEoMCwwJSwxMDAlLC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LWNvbG9yOmhzbGEoMCwwJSwxMDAlLC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6bGFzdC1jaGlsZHtib3JkZXItbGVmdC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1wcmltYXJ5Om5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLWxlZnQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpO2JvcmRlci1yaWdodC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tc3VjY2Vzczpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1sZWZ0LWNvbG9yOmhzbGEoMCwwJSwxMDAlLC41KTtib3JkZXItcmlnaHQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0td2FybmluZzpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0td2FybmluZzpsYXN0LWNoaWxke2JvcmRlci1sZWZ0LWNvbG9yOmhzbGEoMCwwJSwxMDAlLC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItbGVmdC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNSk7Ym9yZGVyLXJpZ2h0LWNvbG9yOmhzbGEoMCwwJSwxMDAlLC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWRhbmdlcjpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLWxlZnQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpO2JvcmRlci1yaWdodC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjpoc2xhKDAsMCUsMTAwJSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0taW5mbzpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1sZWZ0LWNvbG9yOmhzbGEoMCwwJSwxMDAlLC41KTtib3JkZXItcmlnaHQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjUpfS5lbC1jYWxlbmRhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLWNhbGVuZGFyX19oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MTJweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmVlZjV9LmVsLWJhY2t0b3AsLmVsLXBhZ2UtaGVhZGVye2Rpc3BsYXk6LW1zLWZsZXhib3h9LmVsLWNhbGVuZGFyX190aXRsZXtjb2xvcjojMDAwO2FsaWduLXNlbGY6Y2VudGVyfS5lbC1jYWxlbmRhcl9fYm9keXtwYWRkaW5nOjEycHggMjBweCAzNXB4fS5lbC1jYWxlbmRhci10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uZWwtY2FsZW5kYXItdGFibGUgdGhlYWQgdGh7cGFkZGluZzoxMnB4IDA7Y29sb3I6IzYwNjI2Njtmb250LXdlaWdodDo0MDB9LmVsLWNhbGVuZGFyLXRhYmxlOm5vdCguaXMtcmFuZ2UpIHRkLm5leHQsLmVsLWNhbGVuZGFyLXRhYmxlOm5vdCguaXMtcmFuZ2UpIHRkLnByZXZ7Y29sb3I6I2MwYzRjY30uZWwtYmFja3RvcCwuZWwtY2FsZW5kYXItdGFibGUgdGQuaXMtdG9kYXl7Y29sb3I6IzQwOWVmZn0uZWwtY2FsZW5kYXItdGFibGUgdGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWVmNTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmVlZjU7dmVydGljYWwtYWxpZ246dG9wO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZX0uZWwtY2FsZW5kYXItdGFibGUgdGQuaXMtc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjJmOGZlfS5lbC1jYWxlbmRhci10YWJsZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlZWY1fS5lbC1jYWxlbmRhci10YWJsZSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWVmNX0uZWwtY2FsZW5kYXItdGFibGUgdHIuZWwtY2FsZW5kYXItdGFibGVfX3Jvdy0taGlkZS1ib3JkZXIgdGR7Ym9yZGVyLXRvcDpub25lfS5lbC1jYWxlbmRhci10YWJsZSAuZWwtY2FsZW5kYXItZGF5e2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtoZWlnaHQ6ODVweH0uZWwtY2FsZW5kYXItdGFibGUgLmVsLWNhbGVuZGFyLWRheTpob3ZlcntjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmMmY4ZmV9LmVsLWJhY2t0b3B7cG9zaXRpb246Zml4ZWQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToyMHB4O2JveC1zaGFkb3c6MCAwIDZweCByZ2JhKDAsMCwwLC4xMik7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDo1fS5lbC1iYWNrdG9wOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2YyZjZmY30uZWwtcGFnZS1oZWFkZXJ7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXBhZ2UtaGVhZGVyX19sZWZ0e2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tcmlnaHQ6NDBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtcGFnZS1oZWFkZXJfX2xlZnQ6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjE2cHg7cmlnaHQ6LTIwcHg7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOiNkY2RmZTZ9LmVsLWNoZWNrYm94LC5lbC1jaGVja2JveF9faW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1wYWdlLWhlYWRlcl9fbGVmdCAuZWwtaWNvbi1iYWNre2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1yaWdodDo2cHg7YWxpZ24tc2VsZjpjZW50ZXJ9LmVsLXBhZ2UtaGVhZGVyX190aXRsZXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LmVsLXBhZ2UtaGVhZGVyX19jb250ZW50e2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiMzMDMxMzN9LmVsLWNoZWNrYm94e2NvbG9yOiM2MDYyNjY7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyO3VzZXItc2VsZWN0Om5vbmU7bWFyZ2luLXJpZ2h0OjMwcHh9LmVsLWNoZWNrYm94LC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLC5lbC1lbXB0eV9faW1hZ2UgaW1nLC5lbC1yYWRpb3std2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZHtwYWRkaW5nOjlweCAyMHB4IDlweCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI2RjZGZlNjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGluZS1oZWlnaHQ6bm9ybWFsO2hlaWdodDo0MHB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5pcy1jaGVja2Vke2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5pcy1kaXNhYmxlZHtib3JkZXItY29sb3I6I2ViZWVmNTtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkKy5lbC1jaGVja2JveC5pcy1ib3JkZXJlZHttYXJnaW4tbGVmdDoxMHB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVte3BhZGRpbmc6N3B4IDIwcHggN3B4IDEwcHg7Ym9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjM2cHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1tZWRpdW0gLmVsLWNoZWNrYm94X19sYWJlbHtsaW5lLWhlaWdodDoxN3B4O2ZvbnQtc2l6ZToxNHB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVtIC5lbC1jaGVja2JveF9faW5uZXJ7aGVpZ2h0OjE0cHg7d2lkdGg6MTRweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLXNtYWxse3BhZGRpbmc6NXB4IDE1cHggNXB4IDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2xhYmVse2xpbmUtaGVpZ2h0OjE1cHg7Zm9udC1zaXplOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2lubmVyOmFmdGVye2hlaWdodDo2cHg7d2lkdGg6MnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWluaXtwYWRkaW5nOjNweCAxNXB4IDNweCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyOHB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWluaSAuZWwtY2hlY2tib3hfX2xhYmVse2xpbmUtaGVpZ2h0OjEycHg7Zm9udC1zaXplOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1taW5pIC5lbC1jaGVja2JveF9faW5uZXJ7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1pbmkgLmVsLWNoZWNrYm94X19pbm5lcjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjJweH0uZWwtY2hlY2tib3hfX2lucHV0e2N1cnNvcjpwb2ludGVyO291dGxpbmU6MDtsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkIC5lbC1jaGVja2JveF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojZWRmMmZjO2JvcmRlci1jb2xvcjojZGNkZmU2O2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkIC5lbC1jaGVja2JveF9faW5uZXI6YWZ0ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjojYzBjNGNjfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcisuZWwtY2hlY2tib3hfX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmMmY2ZmM7Ym9yZGVyLWNvbG9yOiNkY2RmZTZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOiNjMGM0Y2N9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojZjJmNmZjO2JvcmRlci1jb2xvcjojZGNkZmU2fS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNjMGM0Y2M7Ym9yZGVyLWNvbG9yOiNjMGM0Y2N9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXIsLmVsLWNoZWNrYm94X19pbnB1dC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojNDA5ZWZmO2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQrc3Bhbi5lbC1jaGVja2JveF9fbGFiZWx7Y29sb3I6I2MwYzRjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2NhbGVZKDEpfS5lbC1jaGVja2JveF9faW5wdXQuaXMtY2hlY2tlZCsuZWwtY2hlY2tib3hfX2xhYmVse2NvbG9yOiM0MDllZmZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1mb2N1cyAuZWwtY2hlY2tib3hfX2lubmVye2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1jaGVja2JveF9faW5wdXQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVyOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDoycHg7dHJhbnNmb3JtOnNjYWxlKC41KTtsZWZ0OjA7cmlnaHQ6MDt0b3A6NXB4fS5lbC1jaGVja2JveF9faW5wdXQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVyOmFmdGVye2Rpc3BsYXk6bm9uZX0uZWwtY2hlY2tib3hfX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI2RjZGZlNjtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDoxO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KSxiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KX0uZWwtY2hlY2tib3hfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1jaGVja2JveF9faW5uZXI6YWZ0ZXJ7Ym94LXNpemluZzpjb250ZW50LWJveDtjb250ZW50OiIiO2JvcmRlcjoxcHggc29saWQgI2ZmZjtib3JkZXItbGVmdDowO2JvcmRlci10b3A6MDtoZWlnaHQ6N3B4O2xlZnQ6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2NhbGVZKDApO3dpZHRoOjNweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGVhc2UtaW4gLjA1czt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0uZWwtY2hlY2tib3hfX29yaWdpbmFse29wYWNpdHk6MDtvdXRsaW5lOjA7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7d2lkdGg6MDtoZWlnaHQ6MDt6LWluZGV4Oi0xfS5lbC1jaGVja2JveC1idXR0b24sLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LmVsLWNoZWNrYm94X19sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxOXB4O2ZvbnQtc2l6ZToxNHB4fS5lbC1jaGVja2JveDpsYXN0LW9mLXR5cGV7bWFyZ2luLXJpZ2h0OjB9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7bGluZS1oZWlnaHQ6MTtmb250LXdlaWdodDo1MDA7d2hpdGUtc3BhY2U6bm93cmFwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGNkZmU2O2JvcmRlci1sZWZ0OjA7Y29sb3I6IzYwNjI2Njstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO21hcmdpbjowO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7cGFkZGluZzoxMnB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTJweCAyMHB4fS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyOmhvdmVye2NvbG9yOiM0MDllZmZ9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV17bGluZS1oZWlnaHQ6Ljl9LmVsLXJhZGlvLC5lbC1yYWRpb19faW5wdXR7bGluZS1oZWlnaHQ6MTt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyIFtjbGFzcyo9ZWwtaWNvbi1dK3NwYW57bWFyZ2luLWxlZnQ6NXB4fS5lbC1jaGVja2JveC1idXR0b25fX29yaWdpbmFse29wYWNpdHk6MDtvdXRsaW5lOjA7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luOjA7ei1pbmRleDotMX0uZWwtcmFkaW8sLmVsLXJhZGlvX19pbm5lciwuZWwtcmFkaW9fX2lucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1jaGVja2JveC1idXR0b24uaXMtY2hlY2tlZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjtib3JkZXItY29sb3I6IzQwOWVmZjtib3gtc2hhZG93Oi0xcHggMCAwIDAgIzhjYzVmZn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWNoZWNrZWQ6Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQtY29sb3I6IzQwOWVmZn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWRpc2FibGVkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNlYmVlZjU7Ym94LXNoYWRvdzpub25lfS5lbC1jaGVja2JveC1idXR0b24uaXMtZGlzYWJsZWQ6Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQtY29sb3I6I2ViZWVmNX0uZWwtY2hlY2tib3gtYnV0dG9uOmZpcnN0LWNoaWxkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGNkZmU2O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWZvY3VzIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1jaGVja2JveC1idXR0b246bGFzdC1jaGlsZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5lbC1jaGVja2JveC1idXR0b24tLW1lZGl1bSAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLWNoZWNrYm94LWJ1dHRvbi0tbWVkaXVtIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTBweCAyMHB4fS5lbC1jaGVja2JveC1idXR0b24tLXNtYWxsIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye3BhZGRpbmc6OXB4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b24tLXNtYWxsIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6OXB4IDE1cHh9LmVsLWNoZWNrYm94LWJ1dHRvbi0tbWluaSAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntwYWRkaW5nOjdweCAxNXB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtY2hlY2tib3gtYnV0dG9uLS1taW5pIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6N3B4IDE1cHh9LmVsLWNoZWNrYm94LWdyb3Vwe2ZvbnQtc2l6ZTowfS5lbC1yYWRpbywuZWwtcmFkaW8tLW1lZGl1bS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2xhYmVse2ZvbnQtc2l6ZToxNHB4fS5lbC1yYWRpb3tjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjttYXJnaW4tcmlnaHQ6MzBweH0uZWwtY2FzY2FkZXItbm9kZT4uZWwtcmFkaW8sLmVsLXJhZGlvOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmVsLXJhZGlvLmlzLWJvcmRlcmVke3BhZGRpbmc6MTJweCAyMHB4IDAgMTBweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNkY2RmZTY7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0MHB4fS5lbC1yYWRpby5pcy1ib3JkZXJlZC5pcy1jaGVja2Vke2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1yYWRpby5pcy1ib3JkZXJlZC5pcy1kaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOiNlYmVlZjV9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCAuZWwtcmFkaW9fX2lubmVyLC5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQuaXMtY2hlY2tlZCAuZWwtcmFkaW9fX2lubmVye2JhY2tncm91bmQtY29sb3I6I2Y1ZjdmYTtib3JkZXItY29sb3I6I2U0ZTdlZH0uZWwtcmFkaW8uaXMtYm9yZGVyZWQrLmVsLXJhZGlvLmlzLWJvcmRlcmVke21hcmdpbi1sZWZ0OjEwcHh9LmVsLXJhZGlvLS1tZWRpdW0uaXMtYm9yZGVyZWR7cGFkZGluZzoxMHB4IDIwcHggMCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2hlaWdodDozNnB4fS5lbC1yYWRpby0tbWluaS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2xhYmVsLC5lbC1yYWRpby0tc21hbGwuaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19sYWJlbHtmb250LXNpemU6MTJweH0uZWwtcmFkaW8tLW1lZGl1bS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2lubmVye2hlaWdodDoxNHB4O3dpZHRoOjE0cHh9LmVsLXJhZGlvLS1zbWFsbC5pcy1ib3JkZXJlZHtwYWRkaW5nOjhweCAxNXB4IDAgMTBweDtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweH0uZWwtcmFkaW8tLXNtYWxsLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19faW5uZXJ7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZWwtcmFkaW8tLW1pbmkuaXMtYm9yZGVyZWR7cGFkZGluZzo2cHggMTVweCAwIDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjI4cHh9LmVsLXJhZGlvLS1taW5pLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19faW5uZXJ7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZWwtcmFkaW9fX2lucHV0e2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkIC5lbC1yYWRpb19faW5uZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcjphZnRlcntjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZjVmN2ZhfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcisuZWwtcmFkaW9fX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNjMGM0Y2N9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCtzcGFuLmVsLXJhZGlvX19sYWJlbHtjb2xvcjojYzBjNGNjO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFkaW9fX2lucHV0LmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcntib3JkZXItY29sb3I6IzQwOWVmZjtiYWNrZ3JvdW5kOiM0MDllZmZ9LmVsLXJhZGlvX19pbnB1dC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXI6YWZ0ZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpfS5lbC1yYWRpb19faW5wdXQuaXMtY2hlY2tlZCsuZWwtcmFkaW9fX2xhYmVse2NvbG9yOiM0MDllZmZ9LmVsLXJhZGlvX19pbnB1dC5pcy1mb2N1cyAuZWwtcmFkaW9fX2lubmVye2JvcmRlci1jb2xvcjojNDA5ZWZmfS5lbC1yYWRpb19faW5uZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZGNkZmU2O2JvcmRlci1yYWRpdXM6MTAwJTt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXJhZGlvX19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzQwOWVmZn0uZWwtcmFkaW9fX2lubmVyOmFmdGVye3dpZHRoOjRweDtoZWlnaHQ6NHB4O2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGVhc2UtaW59LmVsLXJhZGlvX19vcmlnaW5hbHtvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOjB9LmVsLXJhZGlvOmZvY3VzOm5vdCguaXMtZm9jdXMpOm5vdCg6YWN0aXZlKTpub3QoLmlzLWRpc2FibGVkKSAuZWwtcmFkaW9fX2lubmVye2JveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOWVmZn0uZWwtcmFkaW9fX2xhYmVse2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctbGVmdDoxMHB4fS5lbC1zY3JvbGxiYXJ7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zY3JvbGxiYXI6YWN0aXZlPi5lbC1zY3JvbGxiYXJfX2JhciwuZWwtc2Nyb2xsYmFyOmZvY3VzPi5lbC1zY3JvbGxiYXJfX2JhciwuZWwtc2Nyb2xsYmFyOmhvdmVyPi5lbC1zY3JvbGxiYXJfX2JhcntvcGFjaXR5OjE7dHJhbnNpdGlvbjpvcGFjaXR5IC4zNHMgZWFzZS1vdXR9LmVsLXNjcm9sbGJhcl9fd3JhcHtvdmVyZmxvdzpzY3JvbGw7aGVpZ2h0OjEwMCV9LmVsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHR7c2Nyb2xsYmFyLXdpZHRoOm5vbmV9LmVsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQ6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjA7aGVpZ2h0OjB9LmVsLXNjcm9sbGJhcl9fdGh1bWJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2N1cnNvcjpwb2ludGVyO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTQ0LDE0NywxNTMsLjMpO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3N9LmVsLXNjcm9sbGJhcl9fdGh1bWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0NCwxNDcsMTUzLC41KX0uZWwtc2Nyb2xsYmFyX19iYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MnB4O2JvdHRvbToycHg7ei1pbmRleDoxO2JvcmRlci1yYWRpdXM6NHB4O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjEycyBlYXNlLW91dH0uZWwtc2Nyb2xsYmFyX19iYXIuaXMtdmVydGljYWx7d2lkdGg6NnB4O3RvcDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLXZlcnRpY2FsPmRpdnt3aWR0aDoxMDAlfS5lbC1zY3JvbGxiYXJfX2Jhci5pcy1ob3Jpem9udGFse2hlaWdodDo2cHg7bGVmdDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLWhvcml6b250YWw+ZGl2e2hlaWdodDoxMDAlfS5lbC1jYXNjYWRlci1wYW5lbHtkaXNwbGF5OmZsZXg7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjE0cHh9LmVsLWNhc2NhZGVyLXBhbmVsLmlzLWJvcmRlcmVke2JvcmRlcjoxcHggc29saWQgI2U0ZTdlZDtib3JkZXItcmFkaXVzOjRweH0uZWwtY2FzY2FkZXItbWVudXttaW4td2lkdGg6MTgwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiM2MDYyNjY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTRlN2VkfS5lbC1jYXNjYWRlci1tZW51Omxhc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0Om5vbmV9LmVsLWNhc2NhZGVyLW1lbnU6bGFzdC1jaGlsZCAuZWwtY2FzY2FkZXItbm9kZXtwYWRkaW5nLXJpZ2h0OjIwcHh9LmVsLWNhc2NhZGVyLW1lbnVfX3dyYXB7aGVpZ2h0OjIwNHB4fS5lbC1jYXNjYWRlci1tZW51X19saXN0e3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6MTAwJTttYXJnaW46MDtwYWRkaW5nOjZweCAwO2xpc3Qtc3R5bGU6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhc2NhZGVyLW1lbnVfX2hvdmVyLXpvbmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtY2FzY2FkZXItbWVudV9fZW1wdHktdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojYzBjNGNjfS5lbC1jYXNjYWRlci1ub2Rle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDMwcHggMCAyMHB4O2hlaWdodDozNHB4O2xpbmUtaGVpZ2h0OjM0cHg7b3V0bGluZTowfS5lbC1jYXNjYWRlci1ub2RlLmlzLXNlbGVjdGFibGUuaW4tYWN0aXZlLXBhdGh7Y29sb3I6IzYwNjI2Nn0uZWwtY2FzY2FkZXItbm9kZS5pbi1hY3RpdmUtcGF0aCwuZWwtY2FzY2FkZXItbm9kZS5pcy1hY3RpdmUsLmVsLWNhc2NhZGVyLW5vZGUuaXMtc2VsZWN0YWJsZS5pbi1jaGVja2VkLXBhdGh7Y29sb3I6IzQwOWVmZjtmb250LXdlaWdodDo3MDB9LmVsLWNhc2NhZGVyLW5vZGU6bm90KC5pcy1kaXNhYmxlZCl7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNhc2NhZGVyLW5vZGU6bm90KC5pcy1kaXNhYmxlZCk6Zm9jdXMsLmVsLWNhc2NhZGVyLW5vZGU6bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZDojZjVmN2ZhfS5lbC1jYXNjYWRlci1ub2RlLmlzLWRpc2FibGVke2NvbG9yOiNjMGM0Y2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jYXNjYWRlci1ub2RlX19wcmVmaXh7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4fS5lbC1jYXNjYWRlci1ub2RlX19wb3N0Zml4e3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHh9LmVsLWNhc2NhZGVyLW5vZGVfX2xhYmVse2ZsZXg6MTtwYWRkaW5nOjAgMTBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LmVsLWNhc2NhZGVyLW5vZGU+LmVsLXJhZGlvIC5lbC1yYWRpb19fbGFiZWx7cGFkZGluZy1sZWZ0OjB9LmVsLWF2YXRhcntkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOiNmZmY7YmFja2dyb3VuZDojYzBjNGNjO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtmb250LXNpemU6MTRweH0uZWwtZHJhd2VyLC5lbC1kcmF3ZXJfX2JvZHk+Knstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtYXZhdGFyPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtZHJhd2VyLC5lbC1kcmF3ZXJfX2hlYWRlcntkaXNwbGF5Oi1tcy1mbGV4Ym94fS5lbC1hdmF0YXItLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX0uZWwtYXZhdGFyLS1zcXVhcmV7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWF2YXRhci0taWNvbntmb250LXNpemU6MThweH0uZWwtYXZhdGFyLS1sYXJnZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWF2YXRhci0tbWVkaXVte3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7bGluZS1oZWlnaHQ6MzZweH0uZWwtYXZhdGFyLS1zbWFsbHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9LmVsLWRyYXdlci5sdHIsLmVsLWRyYXdlci5ydGwsLmVsLWRyYXdlcl9fY29udGFpbmVye3RvcDowO2JvdHRvbTowO2hlaWdodDoxMDAlfUAtd2Via2l0LWtleWZyYW1lcyBlbC1kcmF3ZXItZmFkZS1pbnswJXtvcGFjaXR5OjB9dG97b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIGVsLWRyYXdlci1mYWRlLWluezAle29wYWNpdHk6MH10b3tvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyBydGwtZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX19QGtleWZyYW1lcyBydGwtZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHJ0bC1kcmF3ZXItb3V0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoMCl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlKX19QGtleWZyYW1lcyBydGwtZHJhd2VyLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSl9fUAtd2Via2l0LWtleWZyYW1lcyBsdHItZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMCl9fUBrZXlmcmFtZXMgbHRyLWRyYXdlci1pbnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgbHRyLWRyYXdlci1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlKX19QGtleWZyYW1lcyBsdHItZHJhd2VyLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUpfX1ALXdlYmtpdC1rZXlmcmFtZXMgdHRiLWRyYXdlci1pbnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9dG97dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX19QGtleWZyYW1lcyB0dGItZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgdHRiLWRyYXdlci1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9fUBrZXlmcmFtZXMgdHRiLWRyYXdlci1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTAwJSl9fUAtd2Via2l0LWtleWZyYW1lcyBidHQtZHJhd2VyLWluezAle3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfXRve3RyYW5zZm9ybTp0cmFuc2xhdGUoMCl9fUBrZXlmcmFtZXMgYnR0LWRyYXdlci1pbnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlKDApfX1ALXdlYmtpdC1rZXlmcmFtZXMgYnR0LWRyYXdlci1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgxMDAlKX19QGtleWZyYW1lcyBidHQtZHJhd2VyLW91dHswJXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApfXRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKDEwMCUpfX0uZWwtZHJhd2Vye3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2hhZG93OjAgOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLC4yKSwwIDE2cHggMjRweCAycHggcmdiYSgwLDAsMCwuMTQpLDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsLjEyKTtvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowfS5lbC1kcmF3ZXIucnRsey13ZWJraXQtYW5pbWF0aW9uOnJ0bC1kcmF3ZXItb3V0IC4zczthbmltYXRpb246cnRsLWRyYXdlci1vdXQgLjNzO3JpZ2h0OjB9LmVsLWRyYXdlcl9fb3BlbiAuZWwtZHJhd2VyLnJ0bHstd2Via2l0LWFuaW1hdGlvbjpydGwtZHJhd2VyLWluIC4zcyAxbXM7YW5pbWF0aW9uOnJ0bC1kcmF3ZXItaW4gLjNzIDFtc30uZWwtZHJhd2VyLmx0cnstd2Via2l0LWFuaW1hdGlvbjpsdHItZHJhd2VyLW91dCAuM3M7YW5pbWF0aW9uOmx0ci1kcmF3ZXItb3V0IC4zcztsZWZ0OjB9LmVsLWRyYXdlcl9fb3BlbiAuZWwtZHJhd2VyLmx0cnstd2Via2l0LWFuaW1hdGlvbjpsdHItZHJhd2VyLWluIC4zcyAxbXM7YW5pbWF0aW9uOmx0ci1kcmF3ZXItaW4gLjNzIDFtc30uZWwtZHJhd2VyLnR0Ynstd2Via2l0LWFuaW1hdGlvbjp0dGItZHJhd2VyLW91dCAuM3M7YW5pbWF0aW9uOnR0Yi1kcmF3ZXItb3V0IC4zczt0b3A6MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIudHRiey13ZWJraXQtYW5pbWF0aW9uOnR0Yi1kcmF3ZXItaW4gLjNzIDFtczthbmltYXRpb246dHRiLWRyYXdlci1pbiAuM3MgMW1zfS5lbC1kcmF3ZXIuYnR0ey13ZWJraXQtYW5pbWF0aW9uOmJ0dC1kcmF3ZXItb3V0IC4zczthbmltYXRpb246YnR0LWRyYXdlci1vdXQgLjNzO2JvdHRvbTowfS5lbC1kcmF3ZXJfX29wZW4gLmVsLWRyYXdlci5idHR7LXdlYmtpdC1hbmltYXRpb246YnR0LWRyYXdlci1pbiAuM3MgMW1zO2FuaW1hdGlvbjpidHQtZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlcl9fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luOjB9LmVsLWRyYXdlcl9faGVhZGVye2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojNzI3NjdiO2Rpc3BsYXk6ZmxleDttYXJnaW4tYm90dG9tOjMycHg7cGFkZGluZzoyMHB4IDIwcHggMH0uZWwtZHJhd2VyX19oZWFkZXI+OmZpcnN0LWNoaWxke2ZsZXg6MX0uZWwtZHJhd2VyX190aXRsZXttYXJnaW46MDtmbGV4OjE7bGluZS1oZWlnaHQ6aW5oZXJpdDtmb250LXNpemU6MXJlbX0uZWwtZHJhd2VyX19jbG9zZS1idG57Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjIwcHg7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1kcmF3ZXJfX2JvZHl7ZmxleDoxO292ZXJmbG93OmF1dG99LmVsLWRyYXdlcl9fYm9keT4qe2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZHJhd2VyLmJ0dCwuZWwtZHJhd2VyLnR0YiwuZWwtZHJhd2VyX19jb250YWluZXJ7d2lkdGg6MTAwJTtsZWZ0OjA7cmlnaHQ6MH0uZWwtZHJhd2VyX19jb250YWluZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRyYXdlci1mYWRlLWVudGVyLWFjdGl2ZXstd2Via2l0LWFuaW1hdGlvbjplbC1kcmF3ZXItZmFkZS1pbiAuM3M7YW5pbWF0aW9uOmVsLWRyYXdlci1mYWRlLWluIC4zc30uZWwtZHJhd2VyLWZhZGUtbGVhdmUtYWN0aXZle2FuaW1hdGlvbjplbC1kcmF3ZXItZmFkZS1pbiAuM3MgcmV2ZXJzZX0uZWwtcG9wY29uZmlybV9fbWFpbntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1wb3Bjb25maXJtX19pY29ue21hcmdpbi1yaWdodDo1cHh9LmVsLXBvcGNvbmZpcm1fX2FjdGlvbnt0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbjowfUAtd2Via2l0LWtleWZyYW1lcyBlbC1za2VsZXRvbi1sb2FkaW5nezAle2JhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCV9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDUwJX19QGtleWZyYW1lcyBlbC1za2VsZXRvbi1sb2FkaW5nezAle2JhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCV9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDUwJX19LmVsLXNrZWxldG9ue3dpZHRoOjEwMCV9LmVsLXNrZWxldG9uX19maXJzdC1saW5lLC5lbC1za2VsZXRvbl9fcGFyYWdyYXBoe2hlaWdodDoxNnB4O21hcmdpbi10b3A6MTZweDtiYWNrZ3JvdW5kOiNmMmYyZjJ9LmVsLXNrZWxldG9uLmlzLWFuaW1hdGVkIC5lbC1za2VsZXRvbl9faXRlbXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZywjZjJmMmYyIDI1JSwjZTZlNmU2IDM3JSwjZjJmMmYyIDYzJSk7YmFja2dyb3VuZC1zaXplOjQwMCUgMTAwJTstd2Via2l0LWFuaW1hdGlvbjplbC1za2VsZXRvbi1sb2FkaW5nIDEuNHMgZWFzZSBpbmZpbml0ZTthbmltYXRpb246ZWwtc2tlbGV0b24tbG9hZGluZyAxLjRzIGVhc2UgaW5maW5pdGV9LmVsLXNrZWxldG9uX19pdGVte2JhY2tncm91bmQ6I2YyZjJmMjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtib3JkZXItcmFkaXVzOjRweDt3aWR0aDoxMDAlfS5lbC1za2VsZXRvbl9fY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7bGluZS1oZWlnaHQ6MzZweH0uZWwtc2tlbGV0b25fX2NpcmNsZS0tbGd7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4fS5lbC1za2VsZXRvbl9fY2lyY2xlLS1tZHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9LmVsLXNrZWxldG9uX19idXR0b257aGVpZ2h0OjQwcHg7d2lkdGg6NjRweDtib3JkZXItcmFkaXVzOjRweH0uZWwtc2tlbGV0b25fX3B7d2lkdGg6MTAwJX0uZWwtc2tlbGV0b25fX3AuaXMtbGFzdHt3aWR0aDo2MSV9LmVsLXNrZWxldG9uX19wLmlzLWZpcnN0e3dpZHRoOjMzJX0uZWwtc2tlbGV0b25fX3RleHR7d2lkdGg6MTAwJTtoZWlnaHQ6MTNweH0uZWwtc2tlbGV0b25fX2NhcHRpb257aGVpZ2h0OjEycHh9LmVsLXNrZWxldG9uX19oMXtoZWlnaHQ6MjBweH0uZWwtc2tlbGV0b25fX2gze2hlaWdodDoxOHB4fS5lbC1za2VsZXRvbl9faDV7aGVpZ2h0OjE2cHh9LmVsLXNrZWxldG9uX19pbWFnZXt3aWR0aDp1bnNldDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym9yZGVyLXJhZGl1czowfS5lbC1za2VsZXRvbl9faW1hZ2Ugc3Zne2ZpbGw6I2RjZGRlMDt3aWR0aDoyMiU7aGVpZ2h0OjIyJX0uZWwtZW1wdHl7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt0ZXh0LWFsaWduOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo0MHB4IDB9LmVsLWVtcHR5X19pbWFnZXt3aWR0aDoxNjBweH0uZWwtZW1wdHlfX2ltYWdlIGltZywuZWwtZW1wdHlfX2ltYWdlIHN2Z3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtZW1wdHlfX2ltYWdlIGltZ3std2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LW8tb2JqZWN0LWZpdDpjb250YWluO29iamVjdC1maXQ6Y29udGFpbn0uZWwtZW1wdHlfX2ltYWdlIHN2Z3tmaWxsOiNkY2RkZTB9LmVsLWVtcHR5X19kZXNjcmlwdGlvbnttYXJnaW4tdG9wOjIwcHh9LmVsLWVtcHR5X19kZXNjcmlwdGlvbiBwe21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM5MDkzOTl9LmVsLWVtcHR5X19ib3R0b217bWFyZ2luLXRvcDoyMHB4fQ=="}},"time_used":648,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":648,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}},{"url":{"schema":"https","addr":"global-cryptocurrencies.com/app/js/chunk-vendors.f400527f.js","fqdn":"global-cryptocurrencies.com","domain":"global-cryptocurrencies.com","tld":"com"},"ip":{"addr":"72.167.33.195","port":443,"asn":398101,"as":"GO-DADDY-COM-LLC","country":"United States","country_code":"US"},"is_navigation_request":false,"resource_type":"script","requested_by":"https://global-cryptocurrencies.com/app/","date":"2026-07-27T10:53:10.558Z","timestamp":1785149590558,"http_version":"HTTP/2","security_state":"secure","security_info":{"cipher_suite":"TLS_AES_256_GCM_SHA384","key_group_name":"x25519","signature_name":"RSA-PSS-SHA256","protocol":"TLSv1.3","cert":{"subject":{"commonName":"global-cryptocurrencies.com","organization":""},"issuer":{"commonName":"LiteSSL RSA CA 2025","organization":"TrustAsia Technologies, Inc."},"validity":{"start":"Tue, 23 Jun 2026 08:00:00 GMT","end":"Mon, 21 Sep 2026 07:59:59 GMT"},"fingerprint":{"sha1":"DF:87:63:6C:00:96:7B:6E:DE:75:A3:8E:C4:57:BD:CA:40:4C:47:DE","sha256":"F4:E1:FB:35:62:93:36:36:15:75:30:A4:08:5D:5E:B7:6D:66:C9:A0:B0:1A:62:C9:41:7A:8D:9F:BB:5E:4D:6C"}}},"request":{"raw":"GET /app/js/chunk-vendors.f400527f.js HTTP/1.1\r\nHost: global-cryptocurrencies.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://global-cryptocurrencies.com/app/\r\nCookie: angela_session=eyJpdiI6IkNRXC9lXC9pMWl0b1RIZUkzWDVWeUd5Zz09IiwidmFsdWUiOiI4Q3dhc1JheTNzTThYXC9LM1paNDdIdVRUVTRxUjZ2bVwvVWNIc3kySnYxNStsK3lQbDFuOXZXYUlnUjYzRUluOUszaldrSDVVUDkwZ3hTaENvQVYxUnJ4MkxXclAzZDlycTZLVjY0bVVLTjRrSnBqcU1xWEROQ0FvVVF3TWlwUE9PIiwibWFjIjoiZDQ5OTc1NDQwYjk5NjE2NTgxNzJhOTg4ODJkYWI1NmY0ZDYzNDEwOTZjMWRkNzFkNWY4NzgwODZmMGI0MTY1ZCJ9\r\nSec-Fetch-Dest: script\r\nSec-Fetch-Mode: no-cors\r\nSec-Fetch-Site: same-origin\r\nPriority: u=1\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\nserver: nginx\r\ndate: Mon, 27 Jul 2026 10:53:10 GMT\r\ncontent-type: application/javascript\r\nlast-modified: Tue, 09 Nov 2021 15:48:52 GMT\r\nvary: Accept-Encoding\r\netag: W/\"618a9864-1fe116\"\r\nexpires: Mon, 27 Jul 2026 22:53:10 GMT\r\ncache-control: max-age=43200\r\nstrict-transport-security: max-age=31536000\r\ncontent-encoding: gzip\r\nX-Firefox-Spdy: h2\r\n\r\n","headers":null,"cookies":null,"status_code":"200","status_text":"","fingerprints":[{"name":"Nginx","description":"Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.","website":"https://nginx.org/en","common_platform_enumeration":"cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*","icon":"Nginx.svg","categories":["Web servers","Reverse proxies"]},{"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":2089238,"size_decoded":657345,"mime_type":"application/javascript","magic":"JavaScript source, Unicode text, UTF-8 text, with very long lines (65532), with no line terminators","md5":"bc330ad02f2e8f2b6c3f9449060958bf","sha1":"36376be22ee56993800f4424d1558afdf1ea8d3a","sha256":"fe3a131b37f0d0632344909b979ab212a7825e5660c95a30be119fe58a4716ff","sha512":"c3b3367fd086d93a1586f32c3c656b55dcd726597cdd308b6fb26363c4b619ff33c89ae2c46827c7a2cfe7fc4bdbf933c228c84696732490528cf13d8dccccfa","ssdeep":"12288:B4fznhD5TfC2dAkquIbgeSxzGSNEUr12rzKmE/FOxJ0Ugk24L:B4bhD5Tf55qvbgeoGkEk12XsUH24L","tlshash":"c6252b8d73c4b06547e361b1506f240bb3372958a809849cba35e8da6cbd94e633bf7d","first_seen":"2025-08-03T16:44:49.06658Z","last_seen":"2026-07-27T10:54:16.509349Z","times_seen":9,"resource_available":false,"data":"KHdpbmRvd1sid2VicGFja0pzb25wIl09d2luZG93WyJ3ZWJwYWNrSnNvbnAiXXx8W10pLnB1c2goW1siY2h1bmstdmVuZG9ycyJdLHsiMDA0NiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPWkuZWFjaCxvPWkuY3JlYXRlSGFzaE1hcCxhPW4oIjRmODUiKSxzPW4oIjMzMDEiKSxsPWEuZXh0ZW5kKHt0eXBlOiJzZXJpZXMucGFyYWxsZWwiLGRlcGVuZGVuY2llczpbInBhcmFsbGVsIl0sdmlzdWFsQ29sb3JBY2Nlc3NQYXRoOiJsaW5lU3R5bGUuY29sb3IiLGdldEluaXRpYWxEYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRTb3VyY2UoKTtyZXR1cm4gYyhuLHRoaXMpLHMobix0aGlzKX0sZ2V0UmF3SW5kaWNlc0J5QWN0aXZlU3RhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb29yZGluYXRlU3lzdGVtLG49dGhpcy5nZXREYXRhKCksaT1bXTtyZXR1cm4gdC5lYWNoQWN0aXZlU3RhdGUobiwoZnVuY3Rpb24odCxyKXtlPT09dCYmaS5wdXNoKG4uZ2V0UmF3SW5kZXgocikpfSkpLGl9LGRlZmF1bHRPcHRpb246e3psZXZlbDowLHo6Mixjb29yZGluYXRlU3lzdGVtOiJwYXJhbGxlbCIscGFyYWxsZWxJbmRleDowLGxhYmVsOntzaG93OiExfSxpbmFjdGl2ZU9wYWNpdHk6LjA1LGFjdGl2ZU9wYWNpdHk6MSxsaW5lU3R5bGU6e3dpZHRoOjEsb3BhY2l0eTouNDUsdHlwZToic29saWQifSxlbXBoYXNpczp7bGFiZWw6e3Nob3c6ITF9fSxwcm9ncmVzc2l2ZTo1MDAsc21vb3RoOiExLGFuaW1hdGlvbkVhc2luZzoibGluZWFyIn19KTtmdW5jdGlvbiBjKGUsdCl7aWYoIWUuZW5jb2RlRGVmaW5lKXt2YXIgbj10LmVjTW9kZWwuZ2V0Q29tcG9uZW50KCJwYXJhbGxlbCIsdC5nZXQoInBhcmFsbGVsSW5kZXgiKSk7aWYobil7dmFyIGk9ZS5lbmNvZGVEZWZpbmU9bygpO3Iobi5kaW1lbnNpb25zLChmdW5jdGlvbihlKXt2YXIgdD11KGUpO2kuc2V0KGUsdCl9KSl9fX1mdW5jdGlvbiB1KGUpe3JldHVybitlLnJlcGxhY2UoImRpbSIsIiIpfWUuZXhwb3J0cz1sfSwiMDA0ZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjcyYjYiKSxvPW4oIjIzMDYiKSxhPW4oImExNWEiKSxzPWEuY3JlYXRlU3ltYm9sLGw9bigiZjkzNCIpLGM9bigiY2JiMCIpLHU9ci5leHRlbmQoe3R5cGU6InZpc3VhbE1hcC5waWVjZXdpc2UiLGRvUmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ncm91cDtlLnJlbW92ZUFsbCgpO3ZhciB0PXRoaXMudmlzdWFsTWFwTW9kZWwsbj10LmdldCgidGV4dEdhcCIpLHI9dC50ZXh0U3R5bGVNb2RlbCxhPXIuZ2V0Rm9udCgpLHM9ci5nZXRUZXh0Q29sb3IoKSxjPXRoaXMuX2dldEl0ZW1BbGlnbigpLHU9dC5pdGVtU2l6ZSxoPXRoaXMuX2dldFZpZXdEYXRhKCksZD1oLmVuZHNUZXh0LGY9aS5yZXRyaWV2ZSh0LmdldCgic2hvd0xhYmVsIiwhMCksIWQpO2Z1bmN0aW9uIHAocil7dmFyIGw9ci5waWVjZSxoPW5ldyBvLkdyb3VwO2gub25jbGljaz1pLmJpbmQodGhpcy5fb25JdGVtQ2xpY2ssdGhpcyxsKSx0aGlzLl9lbmFibGVIb3ZlckxpbmsoaCxyLmluZGV4SW5Nb2RlbFBpZWNlTGlzdCk7dmFyIGQ9dC5nZXRSZXByZXNlbnRWYWx1ZShsKTtpZih0aGlzLl9jcmVhdGVJdGVtU3ltYm9sKGgsZCxbMCwwLHVbMF0sdVsxXV0pLGYpe3ZhciBwPXRoaXMudmlzdWFsTWFwTW9kZWwuZ2V0VmFsdWVTdGF0ZShkKTtoLmFkZChuZXcgby5UZXh0KHtzdHlsZTp7eDoicmlnaHQiPT09Yz8tbjp1WzBdK24seTp1WzFdLzIsdGV4dDpsLnRleHQsdGV4dFZlcnRpY2FsQWxpZ246Im1pZGRsZSIsdGV4dEFsaWduOmMsdGV4dEZvbnQ6YSx0ZXh0RmlsbDpzLG9wYWNpdHk6Im91dE9mUmFuZ2UiPT09cD8uNToxfX0pKX1lLmFkZChoKX1kJiZ0aGlzLl9yZW5kZXJFbmRzVGV4dChlLGRbMF0sdSxmLGMpLGkuZWFjaChoLnZpZXdQaWVjZUxpc3QscCx0aGlzKSxkJiZ0aGlzLl9yZW5kZXJFbmRzVGV4dChlLGRbMV0sdSxmLGMpLGwuYm94KHQuZ2V0KCJvcmllbnQiKSxlLHQuZ2V0KCJpdGVtR2FwIikpLHRoaXMucmVuZGVyQmFja2dyb3VuZChlKSx0aGlzLnBvc2l0aW9uR3JvdXAoZSl9LF9lbmFibGVIb3Zlckxpbms6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciBuPXRoaXMudmlzdWFsTWFwTW9kZWw7bi5vcHRpb24uaG92ZXJMaW5rJiZ0aGlzLmFwaS5kaXNwYXRjaEFjdGlvbih7dHlwZTplLGJhdGNoOmMubWFrZUhpZ2hEb3duQmF0Y2gobi5maW5kVGFyZ2V0RGF0YUluZGljZXModCksbil9KX1lLm9uKCJtb3VzZW92ZXIiLGkuYmluZChuLHRoaXMsImhpZ2hsaWdodCIpKS5vbigibW91c2VvdXQiLGkuYmluZChuLHRoaXMsImRvd25wbGF5IikpfSxfZ2V0SXRlbUFsaWduOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52aXN1YWxNYXBNb2RlbCx0PWUub3B0aW9uO2lmKCJ2ZXJ0aWNhbCI9PT10Lm9yaWVudClyZXR1cm4gYy5nZXRJdGVtQWxpZ24oZSx0aGlzLmFwaSxlLml0ZW1TaXplKTt2YXIgbj10LmFsaWduO3JldHVybiBuJiYiYXV0byIhPT1ufHwobj0ibGVmdCIpLG59LF9yZW5kZXJFbmRzVGV4dDpmdW5jdGlvbihlLHQsbixpLHIpe2lmKHQpe3ZhciBhPW5ldyBvLkdyb3VwLHM9dGhpcy52aXN1YWxNYXBNb2RlbC50ZXh0U3R5bGVNb2RlbDthLmFkZChuZXcgby5UZXh0KHtzdHlsZTp7eDppPyJyaWdodCI9PT1yP25bMF06MDpuWzBdLzIseTpuWzFdLzIsdGV4dFZlcnRpY2FsQWxpZ246Im1pZGRsZSIsdGV4dEFsaWduOmk/cjoiY2VudGVyIix0ZXh0OnQsdGV4dEZvbnQ6cy5nZXRGb250KCksdGV4dEZpbGw6cy5nZXRUZXh0Q29sb3IoKX19KSksZS5hZGQoYSl9fSxfZ2V0Vmlld0RhdGE6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZpc3VhbE1hcE1vZGVsLHQ9aS5tYXAoZS5nZXRQaWVjZUxpc3QoKSwoZnVuY3Rpb24oZSx0KXtyZXR1cm57cGllY2U6ZSxpbmRleEluTW9kZWxQaWVjZUxpc3Q6dH19KSksbj1lLmdldCgidGV4dCIpLHI9ZS5nZXQoIm9yaWVudCIpLG89ZS5nZXQoImludmVyc2UiKTtyZXR1cm4oImhvcml6b250YWwiPT09cj9vOiFvKT90LnJldmVyc2UoKTpuJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpKSx7dmlld1BpZWNlTGlzdDp0LGVuZHNUZXh0Om59fSxfY3JlYXRlSXRlbVN5bWJvbDpmdW5jdGlvbihlLHQsbil7ZS5hZGQocyh0aGlzLmdldENvbnRyb2xsZXJWaXN1YWwodCwic3ltYm9sIiksblswXSxuWzFdLG5bMl0sblszXSx0aGlzLmdldENvbnRyb2xsZXJWaXN1YWwodCwiY29sb3IiKSkpfSxfb25JdGVtQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52aXN1YWxNYXBNb2RlbCxuPXQub3B0aW9uLHI9aS5jbG9uZShuLnNlbGVjdGVkKSxvPXQuZ2V0U2VsZWN0ZWRNYXBLZXkoZSk7InNpbmdsZSI9PT1uLnNlbGVjdGVkTW9kZT8ocltvXT0hMCxpLmVhY2gociwoZnVuY3Rpb24oZSx0KXtyW3RdPXQ9PT1vfSkpKTpyW29dPSFyW29dLHRoaXMuYXBpLmRpc3BhdGNoQWN0aW9uKHt0eXBlOiJzZWxlY3REYXRhUmFuZ2UiLGZyb206dGhpcy51aWQsdmlzdWFsTWFwSWQ6dGhpcy52aXN1YWxNYXBNb2RlbC5pZCxzZWxlY3RlZDpyfSl9fSksaD11O2UuZXhwb3J0cz1ofSwiMDA3ZCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKTtuKCJjYjhmIiksbigiYTk2YiIpLG4oIjQyZjYiKSxpLnJlZ2lzdGVyQWN0aW9uKHt0eXBlOiJzaG93VGlwIixldmVudDoic2hvd1RpcCIsdXBkYXRlOiJ0b29sdGlwOm1hbnVhbGx5U2hvd1RpcCJ9LChmdW5jdGlvbigpe30pKSxpLnJlZ2lzdGVyQWN0aW9uKHt0eXBlOiJoaWRlVGlwIixldmVudDoiaGlkZVRpcCIsdXBkYXRlOiJ0b29sdGlwOm1hbnVhbGx5SGlkZVRpcCJ9LChmdW5jdGlvbigpe30pKX0sIjAwYmEiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIikscj1uKCI2ZDhiIiksbz1uKCJlNDZiIiksYT1uKCJlMGQzIikscz1hLmRlZmF1bHRFbXBoYXNpcyxsPW4oIjBmOTkiKSxjPWwubWFrZVNlcmllc0VuY29kZUZvck5hbWVCYXNlZCx1PW4oImM0YTMiKSxoPWkuZXh0ZW5kU2VyaWVzTW9kZWwoe3R5cGU6InNlcmllcy5mdW5uZWwiLGluaXQ6ZnVuY3Rpb24oZSl7aC5zdXBlckFwcGx5KHRoaXMsImluaXQiLGFyZ3VtZW50cyksdGhpcy5sZWdlbmRWaXN1YWxQcm92aWRlcj1uZXcgdShyLmJpbmQodGhpcy5nZXREYXRhLHRoaXMpLHIuYmluZCh0aGlzLmdldFJhd0RhdGEsdGhpcykpLHRoaXMuX2RlZmF1bHRMYWJlbExpbmUoZSl9LGdldEluaXRpYWxEYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odGhpcyx7Y29vcmREaW1lbnNpb25zOlsidmFsdWUiXSxlbmNvZGVEZWZhdWx0ZXI6ci5jdXJyeShjLHRoaXMpfSl9LF9kZWZhdWx0TGFiZWxMaW5lOmZ1bmN0aW9uKGUpe3MoZSwibGFiZWxMaW5lIixbInNob3ciXSk7dmFyIHQ9ZS5sYWJlbExpbmUsbj1lLmVtcGhhc2lzLmxhYmVsTGluZTt0LnNob3c9dC5zaG93JiZlLmxhYmVsLnNob3csbi5zaG93PW4uc2hvdyYmZS5lbXBoYXNpcy5sYWJlbC5zaG93fSxnZXREYXRhUGFyYW1zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RGF0YSgpLG49aC5zdXBlckNhbGwodGhpcywiZ2V0RGF0YVBhcmFtcyIsZSksaT10Lm1hcERpbWVuc2lvbigidmFsdWUiKSxyPXQuZ2V0U3VtKGkpO3JldHVybiBuLnBlcmNlbnQ9cj8rKHQuZ2V0KGksZSkvcioxMDApLnRvRml4ZWQoMik6MCxuLiR2YXJzLnB1c2goInBlcmNlbnQiKSxufSxkZWZhdWx0T3B0aW9uOnt6bGV2ZWw6MCx6OjIsbGVnZW5kSG92ZXJMaW5rOiEwLGxlZnQ6ODAsdG9wOjYwLHJpZ2h0OjgwLGJvdHRvbTo2MCxtaW5TaXplOiIwJSIsbWF4U2l6ZToiMTAwJSIsc29ydDoiZGVzY2VuZGluZyIsb3JpZW50OiJ2ZXJ0aWNhbCIsZ2FwOjAsZnVubmVsQWxpZ246ImNlbnRlciIsbGFiZWw6e3Nob3c6ITAscG9zaXRpb246Im91dGVyIn0sbGFiZWxMaW5lOntzaG93OiEwLGxlbmd0aDoyMCxsaW5lU3R5bGU6e3dpZHRoOjEsdHlwZToic29saWQifX0saXRlbVN0eWxlOntib3JkZXJDb2xvcjoiI2ZmZiIsYm9yZGVyV2lkdGg6MX0sZW1waGFzaXM6e2xhYmVsOntzaG93OiEwfX19fSksZD1oO2UuZXhwb3J0cz1kfSwiMDBkOCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIHQ9dHx8WzAsMF0saS5tYXAoWzAsMV0sKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0scj1lW25dLzIsbz1bXSxhPVtdO3JldHVybiBvW25dPWktcixhW25dPWkrcixvWzEtbl09YVsxLW5dPXRbMS1uXSxNYXRoLmFicyh0aGlzLmRhdGFUb1BvaW50KG8pW25dLXRoaXMuZGF0YVRvUG9pbnQoYSlbbl0pfSksdGhpcyl9ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLmdldEJvdW5kaW5nUmVjdCgpO3JldHVybntjb29yZFN5czp7dHlwZToiZ2VvIix4OnQueCx5OnQueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodCx6b29tOmUuZ2V0Wm9vbSgpfSxhcGk6e2Nvb3JkOmZ1bmN0aW9uKHQpe3JldHVybiBlLmRhdGFUb1BvaW50KHQpfSxzaXplOmkuYmluZChyLGUpfX19ZS5leHBvcnRzPW99LCIwMGVlIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiYjYyMiIpLHI9aSgidG9TdHJpbmdUYWciKSxvPXt9O29bcl09InoiLGUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobyl9LCIwMGZkIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiOWU2OSIpLHI9T2JqZWN0LnByb3RvdHlwZSxvPXIuaGFzT3duUHJvcGVydHksYT1yLnRvU3RyaW5nLHM9aT9pLnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBsKGUpe3ZhciB0PW8uY2FsbChlLHMpLG49ZVtzXTt0cnl7ZVtzXT12b2lkIDA7dmFyIGk9ITB9Y2F0Y2gobCl7fXZhciByPWEuY2FsbChlKTtyZXR1cm4gaSYmKHQ/ZVtzXT1uOmRlbGV0ZSBlW3NdKSxyfWUuZXhwb3J0cz1sfSwiMDE0MSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjk4NTAiKSxvPW4oIjZjYzUiKSxhPW4oIjViODciKTtmdW5jdGlvbiBzKGUsdCxuLGkpe28uY2FsbCh0aGlzLGUpLHRoaXMubWFwPXQ7dmFyIHI9YS5sb2FkKHQsbik7dGhpcy5fbmFtZUNvb3JkTWFwPXIubmFtZUNvb3JkTWFwLHRoaXMuX3JlZ2lvbnNNYXA9ci5yZWdpb25zTWFwLHRoaXMuX2ludmVydExvbmdpdHV0ZT1udWxsPT1pfHxpLHRoaXMucmVnaW9ucz1yLnJlZ2lvbnMsdGhpcy5fcmVjdD1yLmJvdW5kaW5nUmVjdH1mdW5jdGlvbiBsKGUsdCxuLGkpe3ZhciByPW4uZ2VvTW9kZWwsbz1uLnNlcmllc01vZGVsLGE9cj9yLmNvb3JkaW5hdGVTeXN0ZW06bz9vLmNvb3JkaW5hdGVTeXN0ZW18fChvLmdldFJlZmVycmluZ0NvbXBvbmVudHMoImdlbyIpWzBdfHx7fSkuY29vcmRpbmF0ZVN5c3RlbTpudWxsO3JldHVybiBhPT09dGhpcz9hW2VdKGkpOm51bGx9cy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnMsdHlwZToiZ2VvIixkaW1lbnNpb25zOlsibG5nIiwibGF0Il0sY29udGFpbkNvb3JkOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnJlZ2lvbnMsbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0uY29udGFpbihlKSlyZXR1cm4hMDtyZXR1cm4hMX0sdHJhbnNmb3JtVG86ZnVuY3Rpb24oZSx0LG4saSl7dmFyIG89dGhpcy5nZXRCb3VuZGluZ1JlY3QoKSxhPXRoaXMuX2ludmVydExvbmdpdHV0ZTtvPW8uY2xvbmUoKSxhJiYoby55PS1vLnktby5oZWlnaHQpO3ZhciBzPXRoaXMuX3Jhd1RyYW5zZm9ybWFibGU7aWYocy50cmFuc2Zvcm09by5jYWxjdWxhdGVUcmFuc2Zvcm0obmV3IHIoZSx0LG4saSkpLHMuZGVjb21wb3NlVHJhbnNmb3JtKCksYSl7dmFyIGw9cy5zY2FsZTtsWzFdPS1sWzFdfXMudXBkYXRlVHJhbnNmb3JtKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKCl9LGdldFJlZ2lvbjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVnaW9uc01hcC5nZXQoZSl9LGdldFJlZ2lvbkJ5Q29vcmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMucmVnaW9ucyxuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXS5jb250YWluKGUpKXJldHVybiB0W25dfSxhZGRHZW9Db29yZDpmdW5jdGlvbihlLHQpe3RoaXMuX25hbWVDb29yZE1hcC5zZXQoZSx0KX0sZ2V0R2VvQ29vcmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVDb29yZE1hcC5nZXQoZSl9LGdldEJvdW5kaW5nUmVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWN0fSxkYXRhVG9Qb2ludDpmdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyI9PT10eXBlb2YgZSYmKGU9dGhpcy5nZXRHZW9Db29yZChlKSksZSlyZXR1cm4gby5wcm90b3R5cGUuZGF0YVRvUG9pbnQuY2FsbCh0aGlzLGUsdCxuKX0sY29udmVydFRvUGl4ZWw6aS5jdXJyeShsLCJkYXRhVG9Qb2ludCIpLGNvbnZlcnRGcm9tUGl4ZWw6aS5jdXJyeShsLCJwb2ludFRvRGF0YSIpfSxpLm1peGluKHMsbyk7dmFyIGM9cztlLmV4cG9ydHM9Y30sIjAxNTYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIik7ZnVuY3Rpb24gcihlLHQsbil7bj1ufHx7fTt2YXIgcj1lLmNvb3JkaW5hdGVTeXN0ZW0sbz10LmF4aXMsYT17fSxzPW8uZ2V0QXhlc09uWmVyb09mKClbMF0sbD1vLnBvc2l0aW9uLGM9cz8ib25aZXJvIjpsLHU9by5kaW0saD1yLmdldFJlY3QoKSxkPVtoLngsaC54K2gud2lkdGgsaC55LGgueStoLmhlaWdodF0sZj17bGVmdDowLHJpZ2h0OjEsdG9wOjAsYm90dG9tOjEsb25aZXJvOjJ9LHA9dC5nZXQoIm9mZnNldCIpfHwwLG09IngiPT09dT9bZFsyXS1wLGRbM10rcF06W2RbMF0tcCxkWzFdK3BdO2lmKHMpe3ZhciBnPXMudG9HbG9iYWxDb29yZChzLmRhdGFUb0Nvb3JkKDApKTttW2Yub25aZXJvXT1NYXRoLm1heChNYXRoLm1pbihnLG1bMV0pLG1bMF0pfWEucG9zaXRpb249WyJ5Ij09PXU/bVtmW2NdXTpkWzBdLCJ4Ij09PXU/bVtmW2NdXTpkWzNdXSxhLnJvdGF0aW9uPU1hdGguUEkvMiooIngiPT09dT8wOjEpO3ZhciB2PXt0b3A6LTEsYm90dG9tOjEsbGVmdDotMSxyaWdodDoxfTthLmxhYmVsRGlyZWN0aW9uPWEudGlja0RpcmVjdGlvbj1hLm5hbWVEaXJlY3Rpb249dltsXSxhLmxhYmVsT2Zmc2V0PXM/bVtmW2xdXS1tW2Yub25aZXJvXTowLHQuZ2V0KCJheGlzVGljay5pbnNpZGUiKSYmKGEudGlja0RpcmVjdGlvbj0tYS50aWNrRGlyZWN0aW9uKSxpLnJldHJpZXZlKG4ubGFiZWxJbnNpZGUsdC5nZXQoImF4aXNMYWJlbC5pbnNpZGUiKSkmJihhLmxhYmVsRGlyZWN0aW9uPS1hLmxhYmVsRGlyZWN0aW9uKTt2YXIgeT10LmdldCgiYXhpc0xhYmVsLnJvdGF0ZSIpO3JldHVybiBhLmxhYmVsUm90YXRlPSJ0b3AiPT09Yz8teTp5LGEuejI9MSxhfXQubGF5b3V0PXJ9LCIwMWVkIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiNmQ4YiIpLG89bigiMjMwNiIpO24oIjVhYTkiKSxuKCJhZjI0IiksaS5leHRlbmRDb21wb25lbnRWaWV3KHt0eXBlOiJncmlkIixyZW5kZXI6ZnVuY3Rpb24oZSx0KXt0aGlzLmdyb3VwLnJlbW92ZUFsbCgpLGUuZ2V0KCJzaG93IikmJnRoaXMuZ3JvdXAuYWRkKG5ldyBvLlJlY3Qoe3NoYXBlOmUuY29vcmRpbmF0ZVN5c3RlbS5nZXRSZWN0KCksc3R5bGU6ci5kZWZhdWx0cyh7ZmlsbDplLmdldCgiYmFja2dyb3VuZENvbG9yIil9LGUuZ2V0SXRlbVN0eWxlKCkpLHNpbGVudDohMCx6MjotMX0pKX19KSxpLnJlZ2lzdGVyUHJlcHJvY2Vzc29yKChmdW5jdGlvbihlKXtlLnhBeGlzJiZlLnlBeGlzJiYhZS5ncmlkJiYoZS5ncmlkPXt9KX0pKX0sIjAxZWYiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7dmFyIGk9ZS50YXJnZXQscj1pLnBvc2l0aW9uO3JbMF0rPXQsclsxXSs9bixpLmRpcnR5KCl9ZnVuY3Rpb24gaShlLHQsbixpKXt2YXIgcj1lLnRhcmdldCxvPWUuem9vbUxpbWl0LGE9ci5wb3NpdGlvbixzPXIuc2NhbGUsbD1lLnpvb209ZS56b29tfHwxO2lmKGwqPXQsbyl7dmFyIGM9by5taW58fDAsdT1vLm1heHx8MS8wO2w9TWF0aC5tYXgoTWF0aC5taW4odSxsKSxjKX12YXIgaD1sL2Uuem9vbTtlLnpvb209bCxhWzBdLT0obi1hWzBdKSooaC0xKSxhWzFdLT0oaS1hWzFdKSooaC0xKSxzWzBdKj1oLHNbMV0qPWgsci5kaXJ0eSgpfXQudXBkYXRlVmlld09uUGFuPW4sdC51cGRhdGVWaWV3T25ab29tPWl9LCIwMzUyIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmNiNyIpLHI9bigiYjEyZiIpLG89bigiMGY5OSIpLGE9by5kZXRlY3RTb3VyY2VGb3JtYXQscz1uKCI5M2QwIiksbD1zLlNFUklFU19MQVlPVVRfQllfQ09MVU1OO2kuZXh0ZW5kKHt0eXBlOiJkYXRhc2V0IixkZWZhdWx0T3B0aW9uOntzZXJpZXNMYXlvdXRCeTpsLHNvdXJjZUhlYWRlcjpudWxsLGRpbWVuc2lvbnM6bnVsbCxzb3VyY2U6bnVsbH0sb3B0aW9uVXBkYXRlZDpmdW5jdGlvbigpe2EodGhpcyl9fSksci5leHRlbmQoe3R5cGU6ImRhdGFzZXQifSl9LCIwMzY2IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMWMwYiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYoaShlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FsbCh0KX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZS5jYWxsKHQsbil9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gZS5jYWxsKHQsbixpKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihuLGkscil7cmV0dXJuIGUuY2FsbCh0LG4saSxyKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LCIwM2Q2IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiOWMwZSIpLHI9bigiNmNhMSIpLG89bigiMzlhZCIpKCExKSxhPW4oIjVhOTQiKSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixzPXIoZSksbD0wLGM9W107Zm9yKG4gaW4gcyluIT1hJiZpKHMsbikmJmMucHVzaChuKTt3aGlsZSh0Lmxlbmd0aD5sKWkocyxuPXRbbCsrXSkmJih+byhjLG4pfHxjLnB1c2gobikpO3JldHVybiBjfX0sIjA0ZjYiOmZ1bmN0aW9uKGUsdCl7dmFyIG49MzIsaT03O2Z1bmN0aW9uIHIoZSl7dmFyIHQ9MDt3aGlsZShlPj1uKXR8PTEmZSxlPj49MTtyZXR1cm4gZSt0fWZ1bmN0aW9uIG8oZSx0LG4saSl7dmFyIHI9dCsxO2lmKHI9PT1uKXJldHVybiAxO2lmKGkoZVtyKytdLGVbdF0pPDApe3doaWxlKHI8biYmaShlW3JdLGVbci0xXSk8MClyKys7YShlLHQscil9ZWxzZSB3aGlsZShyPG4mJmkoZVtyXSxlW3ItMV0pPj0wKXIrKztyZXR1cm4gci10fWZ1bmN0aW9uIGEoZSx0LG4pe24tLTt3aGlsZSh0PG4pe3ZhciBpPWVbdF07ZVt0KytdPWVbbl0sZVtuLS1dPWl9fWZ1bmN0aW9uIHMoZSx0LG4saSxyKXtmb3IoaT09PXQmJmkrKztpPG47aSsrKXt2YXIgbyxhPWVbaV0scz10LGw9aTt3aGlsZShzPGwpbz1zK2w+Pj4xLHIoYSxlW29dKTwwP2w9bzpzPW8rMTt2YXIgYz1pLXM7c3dpdGNoKGMpe2Nhc2UgMzplW3MrM109ZVtzKzJdO2Nhc2UgMjplW3MrMl09ZVtzKzFdO2Nhc2UgMTplW3MrMV09ZVtzXTticmVhaztkZWZhdWx0OndoaWxlKGM+MCllW3MrY109ZVtzK2MtMV0sYy0tfWVbc109YX19ZnVuY3Rpb24gbChlLHQsbixpLHIsbyl7dmFyIGE9MCxzPTAsbD0xO2lmKG8oZSx0W24rcl0pPjApe3M9aS1yO3doaWxlKGw8cyYmbyhlLHRbbityK2xdKT4wKWE9bCxsPTErKGw8PDEpLGw8PTAmJihsPXMpO2w+cyYmKGw9cyksYSs9cixsKz1yfWVsc2V7cz1yKzE7d2hpbGUobDxzJiZvKGUsdFtuK3ItbF0pPD0wKWE9bCxsPTErKGw8PDEpLGw8PTAmJihsPXMpO2w+cyYmKGw9cyk7dmFyIGM9YTthPXItbCxsPXItY31hKys7d2hpbGUoYTxsKXt2YXIgdT1hKyhsLWE+Pj4xKTtvKGUsdFtuK3VdKT4wP2E9dSsxOmw9dX1yZXR1cm4gbH1mdW5jdGlvbiBjKGUsdCxuLGkscixvKXt2YXIgYT0wLHM9MCxsPTE7aWYobyhlLHRbbityXSk8MCl7cz1yKzE7d2hpbGUobDxzJiZvKGUsdFtuK3ItbF0pPDApYT1sLGw9MSsobDw8MSksbDw9MCYmKGw9cyk7bD5zJiYobD1zKTt2YXIgYz1hO2E9ci1sLGw9ci1jfWVsc2V7cz1pLXI7d2hpbGUobDxzJiZvKGUsdFtuK3IrbF0pPj0wKWE9bCxsPTErKGw8PDEpLGw8PTAmJihsPXMpO2w+cyYmKGw9cyksYSs9cixsKz1yfWErKzt3aGlsZShhPGwpe3ZhciB1PWErKGwtYT4+PjEpO28oZSx0W24rdV0pPDA/bD11OmE9dSsxfXJldHVybiBsfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbixyLG89aSxhPTAscz0wO2E9ZS5sZW5ndGg7dmFyIHU9W107ZnVuY3Rpb24gaChlLHQpe25bc109ZSxyW3NdPXQscys9MX1mdW5jdGlvbiBkKCl7d2hpbGUocz4xKXt2YXIgZT1zLTI7aWYoZT49MSYmcltlLTFdPD1yW2VdK3JbZSsxXXx8ZT49MiYmcltlLTJdPD1yW2VdK3JbZS0xXSlyW2UtMV08cltlKzFdJiZlLS07ZWxzZSBpZihyW2VdPnJbZSsxXSlicmVhaztwKGUpfX1mdW5jdGlvbiBmKCl7d2hpbGUocz4xKXt2YXIgZT1zLTI7ZT4wJiZyW2UtMV08cltlKzFdJiZlLS0scChlKX19ZnVuY3Rpb24gcChpKXt2YXIgbz1uW2ldLGE9cltpXSx1PW5baSsxXSxoPXJbaSsxXTtyW2ldPWEraCxpPT09cy0zJiYobltpKzFdPW5baSsyXSxyW2krMV09cltpKzJdKSxzLS07dmFyIGQ9YyhlW3VdLGUsbyxhLDAsdCk7bys9ZCxhLT1kLDAhPT1hJiYoaD1sKGVbbythLTFdLGUsdSxoLGgtMSx0KSwwIT09aCYmKGE8PWg/bShvLGEsdSxoKTpnKG8sYSx1LGgpKSl9ZnVuY3Rpb24gbShuLHIsYSxzKXt2YXIgaD0wO2ZvcihoPTA7aDxyO2grKyl1W2hdPWVbbitoXTt2YXIgZD0wLGY9YSxwPW47aWYoZVtwKytdPWVbZisrXSwwIT09LS1zKWlmKDEhPT1yKXt2YXIgbSxnLHYseT1vO3doaWxlKDEpe209MCxnPTAsdj0hMTtkb3tpZih0KGVbZl0sdVtkXSk8MCl7aWYoZVtwKytdPWVbZisrXSxnKyssbT0wLDA9PT0tLXMpe3Y9ITA7YnJlYWt9fWVsc2UgaWYoZVtwKytdPXVbZCsrXSxtKyssZz0wLDE9PT0tLXIpe3Y9ITA7YnJlYWt9fXdoaWxlKChtfGcpPHkpO2lmKHYpYnJlYWs7ZG97aWYobT1jKGVbZl0sdSxkLHIsMCx0KSwwIT09bSl7Zm9yKGg9MDtoPG07aCsrKWVbcCtoXT11W2QraF07aWYocCs9bSxkKz1tLHItPW0scjw9MSl7dj0hMDticmVha319aWYoZVtwKytdPWVbZisrXSwwPT09LS1zKXt2PSEwO2JyZWFrfWlmKGc9bCh1W2RdLGUsZixzLDAsdCksMCE9PWcpe2ZvcihoPTA7aDxnO2grKyllW3AraF09ZVtmK2hdO2lmKHArPWcsZis9ZyxzLT1nLDA9PT1zKXt2PSEwO2JyZWFrfX1pZihlW3ArK109dVtkKytdLDE9PT0tLXIpe3Y9ITA7YnJlYWt9eS0tfXdoaWxlKG0+PWl8fGc+PWkpO2lmKHYpYnJlYWs7eTwwJiYoeT0wKSx5Kz0yfWlmKG89eSxvPDEmJihvPTEpLDE9PT1yKXtmb3IoaD0wO2g8cztoKyspZVtwK2hdPWVbZitoXTtlW3Arc109dVtkXX1lbHNle2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcjtmb3IoaD0wO2g8cjtoKyspZVtwK2hdPXVbZCtoXX19ZWxzZXtmb3IoaD0wO2g8cztoKyspZVtwK2hdPWVbZitoXTtlW3Arc109dVtkXX1lbHNlIGZvcihoPTA7aDxyO2grKyllW3AraF09dVtkK2hdfWZ1bmN0aW9uIGcobixyLGEscyl7dmFyIGg9MDtmb3IoaD0wO2g8cztoKyspdVtoXT1lW2EraF07dmFyIGQ9bityLTEsZj1zLTEscD1hK3MtMSxtPTAsZz0wO2lmKGVbcC0tXT1lW2QtLV0sMCE9PS0tcilpZigxIT09cyl7dmFyIHY9bzt3aGlsZSgxKXt2YXIgeT0wLGI9MCx4PSExO2Rve2lmKHQodVtmXSxlW2RdKTwwKXtpZihlW3AtLV09ZVtkLS1dLHkrKyxiPTAsMD09PS0tcil7eD0hMDticmVha319ZWxzZSBpZihlW3AtLV09dVtmLS1dLGIrKyx5PTAsMT09PS0tcyl7eD0hMDticmVha319d2hpbGUoKHl8Yik8dik7aWYoeClicmVhaztkb3tpZih5PXItYyh1W2ZdLGUsbixyLHItMSx0KSwwIT09eSl7Zm9yKHAtPXksZC09eSxyLT15LGc9cCsxLG09ZCsxLGg9eS0xO2g+PTA7aC0tKWVbZytoXT1lW20raF07aWYoMD09PXIpe3g9ITA7YnJlYWt9fWlmKGVbcC0tXT11W2YtLV0sMT09PS0tcyl7eD0hMDticmVha31pZihiPXMtbChlW2RdLHUsMCxzLHMtMSx0KSwwIT09Yil7Zm9yKHAtPWIsZi09YixzLT1iLGc9cCsxLG09ZisxLGg9MDtoPGI7aCsrKWVbZytoXT11W20raF07aWYoczw9MSl7eD0hMDticmVha319aWYoZVtwLS1dPWVbZC0tXSwwPT09LS1yKXt4PSEwO2JyZWFrfXYtLX13aGlsZSh5Pj1pfHxiPj1pKTtpZih4KWJyZWFrO3Y8MCYmKHY9MCksdis9Mn1pZihvPXYsbzwxJiYobz0xKSwxPT09cyl7Zm9yKHAtPXIsZC09cixnPXArMSxtPWQrMSxoPXItMTtoPj0wO2gtLSllW2craF09ZVttK2hdO2VbcF09dVtmXX1lbHNle2lmKDA9PT1zKXRocm93IG5ldyBFcnJvcjtmb3IobT1wLShzLTEpLGg9MDtoPHM7aCsrKWVbbStoXT11W2hdfX1lbHNle2ZvcihwLT1yLGQtPXIsZz1wKzEsbT1kKzEsaD1yLTE7aD49MDtoLS0pZVtnK2hdPWVbbStoXTtlW3BdPXVbZl19ZWxzZSBmb3IobT1wLShzLTEpLGg9MDtoPHM7aCsrKWVbbStoXT11W2hdfW49W10scj1bXSx0aGlzLm1lcmdlUnVucz1kLHRoaXMuZm9yY2VNZXJnZVJ1bnM9Zix0aGlzLnB1c2hSdW49aH1mdW5jdGlvbiBoKGUsdCxpLGEpe2l8fChpPTApLGF8fChhPWUubGVuZ3RoKTt2YXIgbD1hLWk7aWYoIShsPDIpKXt2YXIgYz0wO2lmKGw8bilyZXR1cm4gYz1vKGUsaSxhLHQpLHZvaWQgcyhlLGksYSxpK2MsdCk7dmFyIGg9bmV3IHUoZSx0KSxkPXIobCk7ZG97aWYoYz1vKGUsaSxhLHQpLGM8ZCl7dmFyIGY9bDtmPmQmJihmPWQpLHMoZSxpLGkrZixpK2MsdCksYz1mfWgucHVzaFJ1bihpLGMpLGgubWVyZ2VSdW5zKCksbC09YyxpKz1jfXdoaWxlKDAhPT1sKTtoLmZvcmNlTWVyZ2VSdW5zKCl9fWUuZXhwb3J0cz1ofSwiMDUxYiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjFhMTQiKSxyPW4oIjEwZGIiKTtlLmV4cG9ydHM9bigiMGJhZCIpP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaS5mKGUsdCxyKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0sIjA1N2YiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJmYzZhIikscj1uKCIyNDFjIikuZixvPXt9LnRvU3RyaW5nLGE9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcihlKX1jYXRjaCh0KXtyZXR1cm4gYS5zbGljZSgpfX07ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1vLmNhbGwoZSk/cyhlKTpyKGkoZSkpfX0sIjA1ZjUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI3YTQxIikscj1uKCJlZjA4IikuZG9jdW1lbnQsbz1pKHIpJiZpKHIuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBvP3IuY3JlYXRlRWxlbWVudChlKTp7fX19LCIwNjU1IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiODcyOCIpLHI9MWUtODtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuIE1hdGguYWJzKGUtdCk8cn1mdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj0wLGE9ZVswXTtpZighYSlyZXR1cm4hMTtmb3IodmFyIHM9MTtzPGUubGVuZ3RoO3MrKyl7dmFyIGw9ZVtzXTtyKz1pKGFbMF0sYVsxXSxsWzBdLGxbMV0sdCxuKSxhPWx9dmFyIGM9ZVswXTtyZXR1cm4gbyhhWzBdLGNbMF0pJiZvKGFbMV0sY1sxXSl8fChyKz1pKGFbMF0sYVsxXSxjWzBdLGNbMV0sdCxuKSksMCE9PXJ9dC5jb250YWluPWF9LCIwNmFkIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNDQzNiIpLHI9bigiNDFlZiIpLG89bigiNmQ4YiIpLGE9by5pc0FycmF5TGlrZSxzPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gYyhlLHQsbil7ZVt0XT1ufWZ1bmN0aW9uIHUoZSx0LG4pe3JldHVybih0LWUpKm4rZX1mdW5jdGlvbiBoKGUsdCxuKXtyZXR1cm4gbj4uNT90OmV9ZnVuY3Rpb24gZChlLHQsbixpLHIpe3ZhciBvPWUubGVuZ3RoO2lmKDE9PT1yKWZvcih2YXIgYT0wO2E8bzthKyspaVthXT11KGVbYV0sdFthXSxuKTtlbHNle3ZhciBzPW8mJmVbMF0ubGVuZ3RoO2ZvcihhPTA7YTxvO2ErKylmb3IodmFyIGw9MDtsPHM7bCsrKWlbYV1bbF09dShlW2FdW2xdLHRbYV1bbF0sbil9fWZ1bmN0aW9uIGYoZSx0LG4pe3ZhciBpPWUubGVuZ3RoLHI9dC5sZW5ndGg7aWYoaSE9PXIpe3ZhciBvPWk+cjtpZihvKWUubGVuZ3RoPXI7ZWxzZSBmb3IodmFyIGE9aTthPHI7YSsrKWUucHVzaCgxPT09bj90W2FdOnMuY2FsbCh0W2FdKSl9dmFyIGw9ZVswXSYmZVswXS5sZW5ndGg7Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigxPT09bilpc05hTihlW2FdKSYmKGVbYV09dFthXSk7ZWxzZSBmb3IodmFyIGM9MDtjPGw7YysrKWlzTmFOKGVbYV1bY10pJiYoZVthXVtjXT10W2FdW2NdKX1mdW5jdGlvbiBwKGUsdCxuKXtpZihlPT09dClyZXR1cm4hMDt2YXIgaT1lLmxlbmd0aDtpZihpIT09dC5sZW5ndGgpcmV0dXJuITE7aWYoMT09PW4pe2Zvcih2YXIgcj0wO3I8aTtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITF9ZWxzZXt2YXIgbz1lWzBdLmxlbmd0aDtmb3Iocj0wO3I8aTtyKyspZm9yKHZhciBhPTA7YTxvO2ErKylpZihlW3JdW2FdIT09dFtyXVthXSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBtKGUsdCxuLGkscixvLGEscyxsKXt2YXIgYz1lLmxlbmd0aDtpZigxPT09bClmb3IodmFyIHU9MDt1PGM7dSsrKXNbdV09ZyhlW3VdLHRbdV0sblt1XSxpW3VdLHIsbyxhKTtlbHNle3ZhciBoPWVbMF0ubGVuZ3RoO2Zvcih1PTA7dTxjO3UrKylmb3IodmFyIGQ9MDtkPGg7ZCsrKXNbdV1bZF09ZyhlW3VdW2RdLHRbdV1bZF0sblt1XVtkXSxpW3VdW2RdLHIsbyxhKX19ZnVuY3Rpb24gZyhlLHQsbixpLHIsbyxhKXt2YXIgcz0uNSoobi1lKSxsPS41KihpLXQpO3JldHVybigyKih0LW4pK3MrbCkqYSsoLTMqKHQtbiktMipzLWwpKm8rcypyK3R9ZnVuY3Rpb24gdihlKXtpZihhKGUpKXt2YXIgdD1lLmxlbmd0aDtpZihhKGVbMF0pKXtmb3IodmFyIG49W10saT0wO2k8dDtpKyspbi5wdXNoKHMuY2FsbChlW2ldKSk7cmV0dXJuIG59cmV0dXJuIHMuY2FsbChlKX1yZXR1cm4gZX1mdW5jdGlvbiB5KGUpe3JldHVybiBlWzBdPU1hdGguZmxvb3IoZVswXSksZVsxXT1NYXRoLmZsb29yKGVbMV0pLGVbMl09TWF0aC5mbG9vcihlWzJdKSwicmdiYSgiK2Uuam9pbigiLCIpKyIpIn1mdW5jdGlvbiBiKGUpe3ZhciB0PWVbZS5sZW5ndGgtMV0udmFsdWU7cmV0dXJuIGEodCYmdFswXSk/MjoxfWZ1bmN0aW9uIHgoZSx0LG4sbyxzLGwpe3ZhciBjPWUuX2dldHRlcix2PWUuX3NldHRlcix4PSJzcGxpbmUiPT09dCxfPW8ubGVuZ3RoO2lmKF8pe3ZhciB3LFM9b1swXS52YWx1ZSxDPWEoUyksaz0hMSxUPSExLE09Qz9iKG8pOjA7by5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnRpbWUtdC50aW1lfSkpLHc9b1tfLTFdLnRpbWU7Zm9yKHZhciBFPVtdLEk9W10sRD1vWzBdLnZhbHVlLEE9ITAsTz0wO088XztPKyspe0UucHVzaChvW09dLnRpbWUvdyk7dmFyIFA9b1tPXS52YWx1ZTtpZihDJiZwKFAsRCxNKXx8IUMmJlA9PT1EfHwoQT0hMSksRD1QLCJzdHJpbmciPT09dHlwZW9mIFApe3ZhciBMPXIucGFyc2UoUCk7TD8oUD1MLGs9ITApOlQ9ITB9SS5wdXNoKFApfWlmKGx8fCFBKXt2YXIgTj1JW18tMV07Zm9yKE89MDtPPF8tMTtPKyspQz9mKElbT10sTixNKTohaXNOYU4oSVtPXSl8fGlzTmFOKE4pfHxUfHxrfHwoSVtPXT1OKTtDJiZmKGMoZS5fdGFyZ2V0LHMpLE4sTSk7dmFyIFIsJCx6LEIsRixWLGo9MCxIPTA7aWYoayl2YXIgVz1bMCwwLDAsMF07dmFyIEc9ZnVuY3Rpb24oZSx0KXt2YXIgbjtpZih0PDApbj0wO2Vsc2UgaWYodDxIKXtmb3IoUj1NYXRoLm1pbihqKzEsXy0xKSxuPVI7bj49MDtuLS0paWYoRVtuXTw9dClicmVhaztuPU1hdGgubWluKG4sXy0yKX1lbHNle2ZvcihuPWo7bjxfO24rKylpZihFW25dPnQpYnJlYWs7bj1NYXRoLm1pbihuLTEsXy0yKX1qPW4sSD10O3ZhciBpPUVbbisxXS1FW25dO2lmKDAhPT1pKWlmKCQ9KHQtRVtuXSkvaSx4KWlmKEI9SVtuXSx6PUlbMD09PW4/bjpuLTFdLEY9SVtuPl8tMj9fLTE6bisxXSxWPUlbbj5fLTM/Xy0xOm4rMl0sQyltKHosQixGLFYsJCwkKiQsJCokKiQsYyhlLHMpLE0pO2Vsc2V7aWYoaylyPW0oeixCLEYsViwkLCQqJCwkKiQqJCxXLDEpLHI9eShXKTtlbHNle2lmKFQpcmV0dXJuIGgoQixGLCQpO3I9Zyh6LEIsRixWLCQsJCokLCQqJCokKX12KGUscyxyKX1lbHNlIGlmKEMpZChJW25dLElbbisxXSwkLGMoZSxzKSxNKTtlbHNle3ZhciByO2lmKGspZChJW25dLElbbisxXSwkLFcsMSkscj15KFcpO2Vsc2V7aWYoVClyZXR1cm4gaChJW25dLElbbisxXSwkKTtyPXUoSVtuXSxJW24rMV0sJCl9dihlLHMscil9fSxVPW5ldyBpKHt0YXJnZXQ6ZS5fdGFyZ2V0LGxpZmU6dyxsb29wOmUuX2xvb3AsZGVsYXk6ZS5fZGVsYXksb25mcmFtZTpHLG9uZGVzdHJveTpufSk7cmV0dXJuIHQmJiJzcGxpbmUiIT09dCYmKFUuZWFzaW5nPXQpLFV9fX12YXIgXz1mdW5jdGlvbihlLHQsbixpKXt0aGlzLl90cmFja3M9e30sdGhpcy5fdGFyZ2V0PWUsdGhpcy5fbG9vcD10fHwhMSx0aGlzLl9nZXR0ZXI9bnx8bCx0aGlzLl9zZXR0ZXI9aXx8Yyx0aGlzLl9jbGlwQ291bnQ9MCx0aGlzLl9kZWxheT0wLHRoaXMuX2RvbmVMaXN0PVtdLHRoaXMuX29uZnJhbWVMaXN0PVtdLHRoaXMuX2NsaXBMaXN0PVtdfTtfLnByb3RvdHlwZT17d2hlbjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX3RyYWNrcztmb3IodmFyIGkgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGkpKXtpZighbltpXSl7bltpXT1bXTt2YXIgcj10aGlzLl9nZXR0ZXIodGhpcy5fdGFyZ2V0LGkpO2lmKG51bGw9PXIpY29udGludWU7MCE9PWUmJm5baV0ucHVzaCh7dGltZTowLHZhbHVlOnYocil9KX1uW2ldLnB1c2goe3RpbWU6ZSx2YWx1ZTp0W2ldfSl9cmV0dXJuIHRoaXN9LGR1cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb25mcmFtZUxpc3QucHVzaChlKSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8dGhpcy5fY2xpcExpc3QubGVuZ3RoO2UrKyl0aGlzLl9jbGlwTGlzdFtlXS5wYXVzZSgpO3RoaXMuX3BhdXNlZD0hMH0scmVzdW1lOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLl9jbGlwTGlzdC5sZW5ndGg7ZSsrKXRoaXMuX2NsaXBMaXN0W2VdLnJlc3VtZSgpO3RoaXMuX3BhdXNlZD0hMX0saXNQYXVzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3BhdXNlZH0sX2RvbmVDYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuX3RyYWNrcz17fSx0aGlzLl9jbGlwTGlzdC5sZW5ndGg9MDtmb3IodmFyIGU9dGhpcy5fZG9uZUxpc3QsdD1lLmxlbmd0aCxuPTA7bjx0O24rKyllW25dLmNhbGwodGhpcyl9LHN0YXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIG4saT10aGlzLHI9MCxvPWZ1bmN0aW9uKCl7ci0tLHJ8fGkuX2RvbmVDYWxsYmFjaygpfTtmb3IodmFyIGEgaW4gdGhpcy5fdHJhY2tzKWlmKHRoaXMuX3RyYWNrcy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9eCh0aGlzLGUsbyx0aGlzLl90cmFja3NbYV0sYSx0KTtzJiYodGhpcy5fY2xpcExpc3QucHVzaChzKSxyKyssdGhpcy5hbmltYXRpb24mJnRoaXMuYW5pbWF0aW9uLmFkZENsaXAocyksbj1zKX1pZihuKXt2YXIgbD1uLm9uZnJhbWU7bi5vbmZyYW1lPWZ1bmN0aW9uKGUsdCl7bChlLHQpO2Zvcih2YXIgbj0wO248aS5fb25mcmFtZUxpc3QubGVuZ3RoO24rKylpLl9vbmZyYW1lTGlzdFtuXShlLHQpfX1yZXR1cm4gcnx8dGhpcy5fZG9uZUNhbGxiYWNrKCksdGhpc30sc3RvcDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fY2xpcExpc3Qsbj10aGlzLmFuaW1hdGlvbixpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciByPXRbaV07ZSYmci5vbmZyYW1lKHRoaXMuX3RhcmdldCwxKSxuJiZuLnJlbW92ZUNsaXAocil9dC5sZW5ndGg9MH0sZGVsYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2RlbGF5PWUsdGhpc30sZG9uZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fZG9uZUxpc3QucHVzaChlKSx0aGlzfSxnZXRDbGlwczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jbGlwTGlzdH19O3ZhciB3PV87ZS5leHBvcnRzPXd9LCIwNmM3IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMzFkOSIpLG89bigiNjE3OSIpLGE9bigiYjFkNCIpLHM9ZnVuY3Rpb24oZSx0KXt0aGlzLm5hbWU9ZXx8IiIsdGhpcy5kZXB0aD0wLHRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5kYXRhSW5kZXg9LTEsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnZpZXdDaGlsZHJlbj1bXSx0aGlzLmhvc3RUcmVlPXR9O2Z1bmN0aW9uIGwoZSl7dGhpcy5yb290LHRoaXMuZGF0YSx0aGlzLl9ub2Rlcz1bXSx0aGlzLmhvc3RNb2RlbD1lfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj10LmNoaWxkcmVuO2UucGFyZW50Tm9kZSE9PXQmJihuLnB1c2goZSksZS5wYXJlbnROb2RlPXQpfXMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGlzUmVtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFJbmRleDwwfSxlYWNoTm9kZTpmdW5jdGlvbihlLHQsbil7ImZ1bmN0aW9uIj09PXR5cGVvZiBlJiYobj10LHQ9ZSxlPW51bGwpLGU9ZXx8e30saS5pc1N0cmluZyhlKSYmKGU9e29yZGVyOmV9KTt2YXIgcixvPWUub3JkZXJ8fCJwcmVvcmRlciIsYT10aGlzW2UuYXR0cnx8ImNoaWxkcmVuIl07InByZW9yZGVyIj09PW8mJihyPXQuY2FsbChuLHRoaXMpKTtmb3IodmFyIHM9MDshciYmczxhLmxlbmd0aDtzKyspYVtzXS5lYWNoTm9kZShlLHQsbik7InBvc3RvcmRlciI9PT1vJiZ0LmNhbGwobix0aGlzKX0sdXBkYXRlRGVwdGhBbmRIZWlnaHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9MDt0aGlzLmRlcHRoPWU7Zm9yKHZhciBuPTA7bjx0aGlzLmNoaWxkcmVuLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuY2hpbGRyZW5bbl07aS51cGRhdGVEZXB0aEFuZEhlaWdodChlKzEpLGkuaGVpZ2h0PnQmJih0PWkuaGVpZ2h0KX10aGlzLmhlaWdodD10KzF9LGdldE5vZGVCeUlkOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZ2V0SWQoKT09PWUpcmV0dXJuIHRoaXM7Zm9yKHZhciB0PTAsbj10aGlzLmNoaWxkcmVuLGk9bi5sZW5ndGg7dDxpO3QrKyl7dmFyIHI9blt0XS5nZXROb2RlQnlJZChlKTtpZihyKXJldHVybiByfX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7aWYoZT09PXRoaXMpcmV0dXJuITA7Zm9yKHZhciB0PTAsbj10aGlzLmNoaWxkcmVuLGk9bi5sZW5ndGg7dDxpO3QrKyl7dmFyIHI9blt0XS5jb250YWlucyhlKTtpZihyKXJldHVybiByfX0sZ2V0QW5jZXN0b3JzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49ZT90aGlzOnRoaXMucGFyZW50Tm9kZTt3aGlsZShuKXQucHVzaChuKSxuPW4ucGFyZW50Tm9kZTtyZXR1cm4gdC5yZXZlcnNlKCksdH0sZ2V0VmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5ob3N0VHJlZS5kYXRhO3JldHVybiB0LmdldCh0LmdldERpbWVuc2lvbihlfHwidmFsdWUiKSx0aGlzLmRhdGFJbmRleCl9LHNldExheW91dDpmdW5jdGlvbihlLHQpe3RoaXMuZGF0YUluZGV4Pj0wJiZ0aGlzLmhvc3RUcmVlLmRhdGEuc2V0SXRlbUxheW91dCh0aGlzLmRhdGFJbmRleCxlLHQpfSxnZXRMYXlvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3N0VHJlZS5kYXRhLmdldEl0ZW1MYXlvdXQodGhpcy5kYXRhSW5kZXgpfSxnZXRNb2RlbDpmdW5jdGlvbihlKXtpZighKHRoaXMuZGF0YUluZGV4PDApKXt2YXIgdD10aGlzLmhvc3RUcmVlLG49dC5kYXRhLmdldEl0ZW1Nb2RlbCh0aGlzLmRhdGFJbmRleCk7cmV0dXJuIG4uZ2V0TW9kZWwoZSl9fSxzZXRWaXN1YWw6ZnVuY3Rpb24oZSx0KXt0aGlzLmRhdGFJbmRleD49MCYmdGhpcy5ob3N0VHJlZS5kYXRhLnNldEl0ZW1WaXN1YWwodGhpcy5kYXRhSW5kZXgsZSx0KX0sZ2V0VmlzdWFsOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaG9zdFRyZWUuZGF0YS5nZXRJdGVtVmlzdWFsKHRoaXMuZGF0YUluZGV4LGUsdCl9LGdldFJhd0luZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9zdFRyZWUuZGF0YS5nZXRSYXdJbmRleCh0aGlzLmRhdGFJbmRleCl9LGdldElkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9zdFRyZWUuZGF0YS5nZXRJZCh0aGlzLmRhdGFJbmRleCl9LGlzQW5jZXN0b3JPZjpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7d2hpbGUodCl7aWYodD09PXRoaXMpcmV0dXJuITA7dD10LnBhcmVudE5vZGV9cmV0dXJuITF9LGlzRGVzY2VuZGFudE9mOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09dGhpcyYmZS5pc0FuY2VzdG9yT2YodGhpcyl9fSxsLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bCx0eXBlOiJ0cmVlIixlYWNoTm9kZTpmdW5jdGlvbihlLHQsbil7dGhpcy5yb290LmVhY2hOb2RlKGUsdCxuKX0sZ2V0Tm9kZUJ5RGF0YUluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGF0YS5nZXRSYXdJbmRleChlKTtyZXR1cm4gdGhpcy5fbm9kZXNbdF19LGdldE5vZGVCeU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucm9vdC5nZXROb2RlQnlOYW1lKGUpfSx1cGRhdGU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5kYXRhLHQ9dGhpcy5fbm9kZXMsbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl0W25dLmRhdGFJbmRleD0tMTtmb3Iobj0wLGk9ZS5jb3VudCgpO248aTtuKyspdFtlLmdldFJhd0luZGV4KG4pXS5kYXRhSW5kZXg9bn0sY2xlYXJMYXlvdXRzOmZ1bmN0aW9uKCl7dGhpcy5kYXRhLmNsZWFySXRlbUxheW91dHMoKX19LGwuY3JlYXRlVHJlZT1mdW5jdGlvbihlLHQsbil7dmFyIHU9bmV3IGwodCksaD1bXSxkPTE7ZnVuY3Rpb24gZihlLHQpe3ZhciBuPWUudmFsdWU7ZD1NYXRoLm1heChkLGkuaXNBcnJheShuKT9uLmxlbmd0aDoxKSxoLnB1c2goZSk7dmFyIHI9bmV3IHMoZS5uYW1lLHUpO3Q/YyhyLHQpOnUucm9vdD1yLHUuX25vZGVzLnB1c2gocik7dmFyIG89ZS5jaGlsZHJlbjtpZihvKWZvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKWYob1thXSxyKX1mKGUpLHUucm9vdC51cGRhdGVEZXB0aEFuZEhlaWdodCgwKTt2YXIgcD1hKGgse2Nvb3JkRGltZW5zaW9uczpbInZhbHVlIl0sZGltZW5zaW9uc0NvdW50OmR9KSxtPW5ldyBvKHAsdCk7cmV0dXJuIG0uaW5pdERhdGEoaCksbiYmbihtKSxyKHttYWluRGF0YTptLHN0cnVjdDp1LHN0cnVjdEF0dHI6InRyZWUifSksdS51cGRhdGUoKSx1fTt2YXIgdT1sO2UuZXhwb3J0cz11fSwiMDZjZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjgzYWIiKSxyPW4oImQxZTciKSxvPW4oIjVjNmMiKSxhPW4oImZjNmEiKSxzPW4oImMwNGUiKSxsPW4oIjUxMzUiKSxjPW4oIjBjZmIiKSx1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPWk/dTpmdW5jdGlvbihlLHQpe2lmKGU9YShlKSx0PXModCwhMCksYyl0cnl7cmV0dXJuIHUoZSx0KX1jYXRjaChuKXt9aWYobChlLHQpKXJldHVybiBvKCFyLmYuY2FsbChlLHQpLGVbdF0pfX0sIjA2ZWEiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0ZTA4Iikscj0oaS5fX0RFVl9fLG4oIjZkOGIiKSksbz1uKCJlYWVhIiksYT1uKCI1ZjE0Iikscz1uKCI2MGUzIiksbD1uKCIzODQyIiksYz1sLnJlZm9ybUludGVydmFscyx1PW8uZXh0ZW5kKHt0eXBlOiJ2aXN1YWxNYXAucGllY2V3aXNlIixkZWZhdWx0T3B0aW9uOntzZWxlY3RlZDpudWxsLG1pbk9wZW46ITEsbWF4T3BlbjohMSxhbGlnbjoiYXV0byIsaXRlbVdpZHRoOjIwLGl0ZW1IZWlnaHQ6MTQsaXRlbVN5bWJvbDoicm91bmRSZWN0IixwaWVjZUxpc3Q6bnVsbCxjYXRlZ29yaWVzOm51bGwsc3BsaXROdW1iZXI6NSxzZWxlY3RlZE1vZGU6Im11bHRpcGxlIixpdGVtR2FwOjEwLGhvdmVyTGluazohMCxzaG93TGFiZWw6bnVsbH0sb3B0aW9uVXBkYXRlZDpmdW5jdGlvbihlLHQpe3Uuc3VwZXJBcHBseSh0aGlzLCJvcHRpb25VcGRhdGVkIixhcmd1bWVudHMpLHRoaXMuX3BpZWNlTGlzdD1bXSx0aGlzLnJlc2V0RXh0ZW50KCk7dmFyIG49dGhpcy5fbW9kZT10aGlzLl9kZXRlcm1pbmVNb2RlKCk7aFt0aGlzLl9tb2RlXS5jYWxsKHRoaXMpLHRoaXMuX3Jlc2V0U2VsZWN0ZWQoZSx0KTt2YXIgaT10aGlzLm9wdGlvbi5jYXRlZ29yaWVzO3RoaXMucmVzZXRWaXN1YWwoKGZ1bmN0aW9uKGUsdCl7ImNhdGVnb3JpZXMiPT09bj8oZS5tYXBwaW5nTWV0aG9kPSJjYXRlZ29yeSIsZS5jYXRlZ29yaWVzPXIuY2xvbmUoaSkpOihlLmRhdGFFeHRlbnQ9dGhpcy5nZXRFeHRlbnQoKSxlLm1hcHBpbmdNZXRob2Q9InBpZWNld2lzZSIsZS5waWVjZUxpc3Q9ci5tYXAodGhpcy5fcGllY2VMaXN0LChmdW5jdGlvbihlKXtlPXIuY2xvbmUoZSk7cmV0dXJuImluUmFuZ2UiIT09dCYmKGUudmlzdWFsPW51bGwpLGV9KSkpfSkpfSxjb21wbGV0ZVZpc3VhbE9wdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uLHQ9e30sbj1hLmxpc3RWaXN1YWxUeXBlcygpLGk9dGhpcy5pc0NhdGVnb3J5KCk7ZnVuY3Rpb24gbChlLHQsbil7cmV0dXJuIGUmJmVbdF0mJihyLmlzT2JqZWN0KGVbdF0pP2VbdF0uaGFzT3duUHJvcGVydHkobik6ZVt0XT09PW4pfXIuZWFjaChlLnBpZWNlcywoZnVuY3Rpb24oZSl7ci5lYWNoKG4sKGZ1bmN0aW9uKG4pe2UuaGFzT3duUHJvcGVydHkobikmJih0W25dPTEpfSkpfSkpLHIuZWFjaCh0LChmdW5jdGlvbih0LG4pe3ZhciBvPTA7ci5lYWNoKHRoaXMuc3RhdGVMaXN0LChmdW5jdGlvbih0KXtvfD1sKGUsdCxuKXx8bChlLnRhcmdldCx0LG4pfSksdGhpcyksIW8mJnIuZWFjaCh0aGlzLnN0YXRlTGlzdCwoZnVuY3Rpb24odCl7KGVbdF18fChlW3RdPXt9KSlbbl09cy5nZXQobiwiaW5SYW5nZSI9PT10PyJhY3RpdmUiOiJpbmFjdGl2ZSIsaSl9KSl9KSx0aGlzKSxvLnByb3RvdHlwZS5jb21wbGV0ZVZpc3VhbE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZXNldFNlbGVjdGVkOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5vcHRpb24saT10aGlzLl9waWVjZUxpc3Qsbz0odD9uOmUpLnNlbGVjdGVkfHx7fTtpZihuLnNlbGVjdGVkPW8sci5lYWNoKGksKGZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRTZWxlY3RlZE1hcEtleShlKTtvLmhhc093blByb3BlcnR5KG4pfHwob1tuXT0hMCl9KSx0aGlzKSwic2luZ2xlIj09PW4uc2VsZWN0ZWRNb2RlKXt2YXIgYT0hMTtyLmVhY2goaSwoZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldFNlbGVjdGVkTWFwS2V5KGUpO29bbl0mJihhP29bbl09ITE6YT0hMCl9KSx0aGlzKX19LGdldFNlbGVjdGVkTWFwS2V5OmZ1bmN0aW9uKGUpe3JldHVybiJjYXRlZ29yaWVzIj09PXRoaXMuX21vZGU/ZS52YWx1ZSsiIjplLmluZGV4KyIifSxnZXRQaWVjZUxpc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGllY2VMaXN0fSxfZGV0ZXJtaW5lTW9kZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uO3JldHVybiBlLnBpZWNlcyYmZS5waWVjZXMubGVuZ3RoPjA/InBpZWNlcyI6dGhpcy5vcHRpb24uY2F0ZWdvcmllcz8iY2F0ZWdvcmllcyI6InNwbGl0TnVtYmVyIn0sc2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb24uc2VsZWN0ZWQ9ci5jbG9uZShlKX0sZ2V0VmFsdWVTdGF0ZTpmdW5jdGlvbihlKXt2YXIgdD1hLmZpbmRQaWVjZUluZGV4KGUsdGhpcy5fcGllY2VMaXN0KTtyZXR1cm4gbnVsbCE9dCYmdGhpcy5vcHRpb24uc2VsZWN0ZWRbdGhpcy5nZXRTZWxlY3RlZE1hcEtleSh0aGlzLl9waWVjZUxpc3RbdF0pXT8iaW5SYW5nZSI6Im91dE9mUmFuZ2UifSxmaW5kVGFyZ2V0RGF0YUluZGljZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaFRhcmdldFNlcmllcygoZnVuY3Rpb24obil7dmFyIGk9W10scj1uLmdldERhdGEoKTtyLmVhY2godGhpcy5nZXREYXRhRGltZW5zaW9uKHIpLChmdW5jdGlvbih0LG4pe3ZhciByPWEuZmluZFBpZWNlSW5kZXgodCx0aGlzLl9waWVjZUxpc3QpO3I9PT1lJiZpLnB1c2gobil9KSx0aGlzKSx0LnB1c2goe3Nlcmllc0lkOm4uaWQsZGF0YUluZGV4Oml9KX0pLHRoaXMpLHR9LGdldFJlcHJlc2VudFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKHRoaXMuaXNDYXRlZ29yeSgpKXQ9ZS52YWx1ZTtlbHNlIGlmKG51bGwhPWUudmFsdWUpdD1lLnZhbHVlO2Vsc2V7dmFyIG49ZS5pbnRlcnZhbHx8W107dD1uWzBdPT09LTEvMCYmblsxXT09PTEvMD8wOihuWzBdK25bMV0pLzJ9cmV0dXJuIHR9LGdldFZpc3VhbE1ldGE6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaXNDYXRlZ29yeSgpKXt2YXIgdD1bXSxuPVtdLGk9dGhpcyxvPXRoaXMuX3BpZWNlTGlzdC5zbGljZSgpO2lmKG8ubGVuZ3RoKXt2YXIgYT1vWzBdLmludGVydmFsWzBdO2EhPT0tMS8wJiZvLnVuc2hpZnQoe2ludGVydmFsOlstMS8wLGFdfSksYT1vW28ubGVuZ3RoLTFdLmludGVydmFsWzFdLGEhPT0xLzAmJm8ucHVzaCh7aW50ZXJ2YWw6W2EsMS8wXX0pfWVsc2Ugby5wdXNoKHtpbnRlcnZhbDpbLTEvMCwxLzBdfSk7dmFyIHM9LTEvMDtyZXR1cm4gci5lYWNoKG8sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW50ZXJ2YWw7dCYmKHRbMF0+cyYmbChbcyx0WzBdXSwib3V0T2ZSYW5nZSIpLGwodC5zbGljZSgpKSxzPXRbMV0pfSksdGhpcykse3N0b3BzOnQsb3V0ZXJDb2xvcnM6bn19ZnVuY3Rpb24gbChyLG8pe3ZhciBhPWkuZ2V0UmVwcmVzZW50VmFsdWUoe2ludGVydmFsOnJ9KTtvfHwobz1pLmdldFZhbHVlU3RhdGUoYSkpO3ZhciBzPWUoYSxvKTtyWzBdPT09LTEvMD9uWzBdPXM6clsxXT09PTEvMD9uWzFdPXM6dC5wdXNoKHt2YWx1ZTpyWzBdLGNvbG9yOnN9LHt2YWx1ZTpyWzFdLGNvbG9yOnN9KX19fSksaD17c3BsaXROdW1iZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbix0PXRoaXMuX3BpZWNlTGlzdCxuPU1hdGgubWluKGUucHJlY2lzaW9uLDIwKSxpPXRoaXMuZ2V0RXh0ZW50KCksbz1lLnNwbGl0TnVtYmVyO289TWF0aC5tYXgocGFyc2VJbnQobywxMCksMSksZS5zcGxpdE51bWJlcj1vO3ZhciBhPShpWzFdLWlbMF0pL287d2hpbGUoK2EudG9GaXhlZChuKSE9PWEmJm48NSluKys7ZS5wcmVjaXNpb249bixhPSthLnRvRml4ZWQobiksZS5taW5PcGVuJiZ0LnB1c2goe2ludGVydmFsOlstMS8wLGlbMF1dLGNsb3NlOlswLDBdfSk7Zm9yKHZhciBzPTAsbD1pWzBdO3M8bztsKz1hLHMrKyl7dmFyIHU9cz09PW8tMT9pWzFdOmwrYTt0LnB1c2goe2ludGVydmFsOltsLHVdLGNsb3NlOlsxLDFdfSl9ZS5tYXhPcGVuJiZ0LnB1c2goe2ludGVydmFsOltpWzFdLDEvMF0sY2xvc2U6WzAsMF19KSxjKHQpLHIuZWFjaCh0LChmdW5jdGlvbihlLHQpe2UuaW5kZXg9dCxlLnRleHQ9dGhpcy5mb3JtYXRWYWx1ZVRleHQoZS5pbnRlcnZhbCl9KSx0aGlzKX0sY2F0ZWdvcmllczpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uO3IuZWFjaChlLmNhdGVnb3JpZXMsKGZ1bmN0aW9uKGUpe3RoaXMuX3BpZWNlTGlzdC5wdXNoKHt0ZXh0OnRoaXMuZm9ybWF0VmFsdWVUZXh0KGUsITApLHZhbHVlOmV9KX0pLHRoaXMpLGQoZSx0aGlzLl9waWVjZUxpc3QpfSxwaWVjZXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbix0PXRoaXMuX3BpZWNlTGlzdDtyLmVhY2goZS5waWVjZXMsKGZ1bmN0aW9uKGUsbil7ci5pc09iamVjdChlKXx8KGU9e3ZhbHVlOmV9KTt2YXIgaT17dGV4dDoiIixpbmRleDpufTtpZihudWxsIT1lLmxhYmVsJiYoaS50ZXh0PWUubGFiZWwpLGUuaGFzT3duUHJvcGVydHkoInZhbHVlIikpe3ZhciBvPWkudmFsdWU9ZS52YWx1ZTtpLmludGVydmFsPVtvLG9dLGkuY2xvc2U9WzEsMV19ZWxzZXtmb3IodmFyIHM9aS5pbnRlcnZhbD1bXSxsPWkuY2xvc2U9WzAsMF0sYz1bMSwwLDFdLHU9Wy0xLzAsMS8wXSxoPVtdLGQ9MDtkPDI7ZCsrKXtmb3IodmFyIGY9W1siZ3RlIiwiZ3QiLCJtaW4iXSxbImx0ZSIsImx0IiwibWF4Il1dW2RdLHA9MDtwPDMmJm51bGw9PXNbZF07cCsrKXNbZF09ZVtmW3BdXSxsW2RdPWNbcF0saFtkXT0yPT09cDtudWxsPT1zW2RdJiYoc1tkXT11W2RdKX1oWzBdJiZzWzFdPT09MS8wJiYobFswXT0wKSxoWzFdJiZzWzBdPT09LTEvMCYmKGxbMV09MCksc1swXT09PXNbMV0mJmxbMF0mJmxbMV0mJihpLnZhbHVlPXNbMF0pfWkudmlzdWFsPWEucmV0cmlldmVWaXN1YWxzKGUpLHQucHVzaChpKX0pLHRoaXMpLGQoZSx0KSxjKHQpLHIuZWFjaCh0LChmdW5jdGlvbihlKXt2YXIgdD1lLmNsb3NlLG49W1siPCIsIuKJpCJdW3RbMV1dLFsiPiIsIuKJpSJdW3RbMF1dXTtlLnRleHQ9ZS50ZXh0fHx0aGlzLmZvcm1hdFZhbHVlVGV4dChudWxsIT1lLnZhbHVlP2UudmFsdWU6ZS5pbnRlcnZhbCwhMSxuKX0pLHRoaXMpfX07ZnVuY3Rpb24gZChlLHQpe3ZhciBuPWUuaW52ZXJzZTsoInZlcnRpY2FsIj09PWUub3JpZW50PyFuOm4pJiZ0LnJldmVyc2UoKX12YXIgZj11O2UuZXhwb3J0cz1mfSwiMDcyZCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCIwYmFkIikscj1uKCI5ODc2Iiksbz1uKCJmZWQ1IiksYT1uKCIxOTE3Iikscz1uKCIwOTgzIiksbD1uKCI5ZmJiIiksYz1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hY3x8bigiNGI4YiIpKChmdW5jdGlvbigpe3ZhciBlPXt9LHQ9e30sbj1TeW1ib2woKSxpPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIGVbbl09NyxpLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdPWV9KSksNyE9Yyh7fSxlKVtuXXx8T2JqZWN0LmtleXMoYyh7fSx0KSkuam9pbigiIikhPWl9KSk/ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKGUpLGM9YXJndW1lbnRzLmxlbmd0aCx1PTEsaD1vLmYsZD1hLmY7d2hpbGUoYz51KXt2YXIgZixwPWwoYXJndW1lbnRzW3UrK10pLG09aD9yKHApLmNvbmNhdChoKHApKTpyKHApLGc9bS5sZW5ndGgsdj0wO3doaWxlKGc+dilmPW1bdisrXSxpJiYhZC5jYWxsKHAsZil8fChuW2ZdPXBbZl0pfXJldHVybiBufTpjfSwiMDdkNyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjQxZWYiKSxvPW4oIjYwN2QiKSxhPW4oIjY1ZWQiKSxzPW4oIjIyZDEiKSxsPW4oImVkYTIiKSxjPWkuZWFjaCx1PWwudG9DYW1lbENhc2UsaD1bIiIsIi13ZWJraXQtIiwiLW1vei0iLCItby0iXSxkPSJwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JvcmRlci1zdHlsZTpzb2xpZDt3aGl0ZS1zcGFjZTpub3dyYXA7ei1pbmRleDo5OTk5OTk5OyI7ZnVuY3Rpb24gZihlKXt2YXIgdD0iY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIixuPSJsZWZ0ICIrZSsicyAiK3QrIix0b3AgIitlKyJzICIrdDtyZXR1cm4gaS5tYXAoaCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUrInRyYW5zaXRpb246IitufSkpLmpvaW4oIjsiKX1mdW5jdGlvbiBwKGUpe3ZhciB0PVtdLG49ZS5nZXQoImZvbnRTaXplIiksaT1lLmdldFRleHRDb2xvcigpO2kmJnQucHVzaCgiY29sb3I6IitpKSx0LnB1c2goImZvbnQ6IitlLmdldEZvbnQoKSk7dmFyIHI9ZS5nZXQoImxpbmVIZWlnaHQiKTtudWxsPT1yJiYocj1NYXRoLnJvdW5kKDMqbi8yKSksbiYmdC5wdXNoKCJsaW5lLWhlaWdodDoiK3IrInB4Iik7dmFyIG89ZS5nZXQoInRleHRTaGFkb3dDb2xvciIpLGE9ZS5nZXQoInRleHRTaGFkb3dCbHVyIil8fDAscz1lLmdldCgidGV4dFNoYWRvd09mZnNldFgiKXx8MCxsPWUuZ2V0KCJ0ZXh0U2hhZG93T2Zmc2V0WSIpfHwwO3JldHVybiBhJiZ0LnB1c2goInRleHQtc2hhZG93OiIrcysicHggIitsKyJweCAiK2ErInB4ICIrbyksYyhbImRlY29yYXRpb24iLCJhbGlnbiJdLChmdW5jdGlvbihuKXt2YXIgaT1lLmdldChuKTtpJiZ0LnB1c2goInRleHQtIituKyI6IitpKX0pKSx0LmpvaW4oIjsiKX1mdW5jdGlvbiBtKGUpe3ZhciB0PVtdLG49ZS5nZXQoInRyYW5zaXRpb25EdXJhdGlvbiIpLGk9ZS5nZXQoImJhY2tncm91bmRDb2xvciIpLG89ZS5nZXRNb2RlbCgidGV4dFN0eWxlIiksYT1lLmdldCgicGFkZGluZyIpO3JldHVybiBuJiZ0LnB1c2goZihuKSksaSYmKHMuY2FudmFzU3VwcG9ydGVkP3QucHVzaCgiYmFja2dyb3VuZC1Db2xvcjoiK2kpOih0LnB1c2goImJhY2tncm91bmQtQ29sb3I6IyIrci50b0hleChpKSksdC5wdXNoKCJmaWx0ZXI6YWxwaGEob3BhY2l0eT03MCkiKSkpLGMoWyJ3aWR0aCIsImNvbG9yIiwicmFkaXVzIl0sKGZ1bmN0aW9uKG4pe3ZhciBpPSJib3JkZXItIituLHI9dShpKSxvPWUuZ2V0KHIpO251bGwhPW8mJnQucHVzaChpKyI6IitvKygiY29sb3IiPT09bj8iIjoicHgiKSl9KSksdC5wdXNoKHAobykpLG51bGwhPWEmJnQucHVzaCgicGFkZGluZzoiK2wubm9ybWFsaXplQ3NzQXJyYXkoYSkuam9pbigicHggIikrInB4IiksdC5qb2luKCI7IikrIjsifWZ1bmN0aW9uIGcoZSx0LG4saSxyKXt2YXIgbz10JiZ0LnBhaW50ZXI7aWYobil7dmFyIHM9byYmby5nZXRWaWV3cG9ydFJvb3QoKTtzJiZhLnRyYW5zZm9ybUxvY2FsQ29vcmQoZSxzLGRvY3VtZW50LmJvZHksaSxyKX1lbHNle2VbMF09aSxlWzFdPXI7dmFyIGw9byYmby5nZXRWaWV3cG9ydFJvb3RPZmZzZXQoKTtsJiYoZVswXSs9bC5vZmZzZXRMZWZ0LGVbMV0rPWwub2Zmc2V0VG9wKX1lWzJdPWVbMF0vdC5nZXRXaWR0aCgpLGVbM109ZVsxXS90LmdldEhlaWdodCgpfWZ1bmN0aW9uIHYoZSx0LG4pe2lmKHMud3hhKXJldHVybiBudWxsO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2kuZG9tQmVsb25nVG9acj0hMCx0aGlzLmVsPWk7dmFyIHI9dGhpcy5fenI9dC5nZXRacigpLGE9dGhpcy5fYXBwZW5kVG9Cb2R5PW4mJm4uYXBwZW5kVG9Cb2R5O3RoaXMuX3N0eWxlQ29vcmQ9WzAsMCwwLDBdLGcodGhpcy5fc3R5bGVDb29yZCxyLGEsdC5nZXRXaWR0aCgpLzIsdC5nZXRIZWlnaHQoKS8yKSxhP2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaSk6ZS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXI9ZSx0aGlzLl9zaG93PSExLHRoaXMuX2hpZGVUaW1lb3V0O3ZhciBsPXRoaXM7aS5vbm1vdXNlZW50ZXI9ZnVuY3Rpb24oKXtsLl9lbnRlcmFibGUmJihjbGVhclRpbWVvdXQobC5faGlkZVRpbWVvdXQpLGwuX3Nob3c9ITApLGwuX2luQ29udGVudD0hMH0saS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXtpZihlPWV8fHdpbmRvdy5ldmVudCwhbC5fZW50ZXJhYmxlKXt2YXIgdD1yLmhhbmRsZXIsbj1yLnBhaW50ZXIuZ2V0Vmlld3BvcnRSb290KCk7by5ub3JtYWxpemVFdmVudChuLGUsITApLHQuZGlzcGF0Y2goIm1vdXNlbW92ZSIsZSl9fSxpLm9ubW91c2VsZWF2ZT1mdW5jdGlvbigpe2wuX2VudGVyYWJsZSYmbC5fc2hvdyYmbC5oaWRlTGF0ZXIobC5faGlkZURlbGF5KSxsLl9pbkNvbnRlbnQ9ITF9fXYucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp2LF9lbnRlcmFibGU6ITAsdXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcixuPXQuY3VycmVudFN0eWxlfHxkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQpLGk9dC5zdHlsZTsiYWJzb2x1dGUiIT09aS5wb3NpdGlvbiYmImFic29sdXRlIiE9PW4ucG9zaXRpb24mJihpLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciByPWUuZ2V0KCJhbHdheXNTaG93Q29udGVudCIpO3ImJnRoaXMuX21vdmVUb29sdGlwSWZSZXNpemVkKCl9LF9tb3ZlVG9vbHRpcElmUmVzaXplZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3N0eWxlQ29vcmRbMl0sdD10aGlzLl9zdHlsZUNvb3JkWzNdLG49ZSp0aGlzLl96ci5nZXRXaWR0aCgpLGk9dCp0aGlzLl96ci5nZXRIZWlnaHQoKTt0aGlzLm1vdmVUbyhuLGkpfSxzaG93OmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dCk7dmFyIHQ9dGhpcy5lbCxuPXRoaXMuX3N0eWxlQ29vcmQ7dC5zdHlsZS5jc3NUZXh0PWQrbShlKSsiO2xlZnQ6IituWzBdKyJweDt0b3A6IituWzFdKyJweDsiKyhlLmdldCgiZXh0cmFDc3NUZXh0Iil8fCIiKSx0LnN0eWxlLmRpc3BsYXk9dC5pbm5lckhUTUw/ImJsb2NrIjoibm9uZSIsdC5zdHlsZS5wb2ludGVyRXZlbnRzPXRoaXMuX2VudGVyYWJsZT8iYXV0byI6Im5vbmUiLHRoaXMuX3Nob3c9ITB9LHNldENvbnRlbnQ6ZnVuY3Rpb24oZSl7dGhpcy5lbC5pbm5lckhUTUw9bnVsbD09ZT8iIjplfSxzZXRFbnRlcmFibGU6ZnVuY3Rpb24oZSl7dGhpcy5fZW50ZXJhYmxlPWV9LGdldFNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsO3JldHVybltlLmNsaWVudFdpZHRoLGUuY2xpZW50SGVpZ2h0XX0sbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fc3R5bGVDb29yZDtnKG4sdGhpcy5fenIsdGhpcy5fYXBwZW5kVG9Cb2R5LGUsdCk7dmFyIGk9dGhpcy5lbC5zdHlsZTtpLmxlZnQ9blswXSsicHgiLGkudG9wPW5bMV0rInB4In0saGlkZTpmdW5jdGlvbigpe3RoaXMuZWwuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fc2hvdz0hMX0saGlkZUxhdGVyOmZ1bmN0aW9uKGUpeyF0aGlzLl9zaG93fHx0aGlzLl9pbkNvbnRlbnQmJnRoaXMuX2VudGVyYWJsZXx8KGU/KHRoaXMuX2hpZGVEZWxheT1lLHRoaXMuX3Nob3c9ITEsdGhpcy5faGlkZVRpbWVvdXQ9c2V0VGltZW91dChpLmJpbmQodGhpcy5oaWRlLHRoaXMpLGUpKTp0aGlzLmhpZGUoKSl9LGlzU2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaG93fSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfSxnZXRPdXRlclNpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsLmNsaWVudFdpZHRoLHQ9dGhpcy5lbC5jbGllbnRIZWlnaHQ7aWYoZG9jdW1lbnQuZGVmYXVsdFZpZXcmJmRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpe3ZhciBuPWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbCk7biYmKGUrPXBhcnNlSW50KG4uYm9yZGVyTGVmdFdpZHRoLDEwKStwYXJzZUludChuLmJvcmRlclJpZ2h0V2lkdGgsMTApLHQrPXBhcnNlSW50KG4uYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KG4uYm9yZGVyQm90dG9tV2lkdGgsMTApKX1yZXR1cm57d2lkdGg6ZSxoZWlnaHQ6dH19fTt2YXIgeT12O2UuZXhwb3J0cz15fSwiMDdlNiI6ZnVuY3Rpb24oZSx0LG4pe24oIjRkODUiKSxuKCJhNzUzIil9LCIwODE3IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpO24oImYzMDYiKSxuKCIwMDQ2IiksbigiNjBkNyIpO3ZhciByPW4oImFiNzEiKTtpLnJlZ2lzdGVyVmlzdWFsKHIpfSwiMDg1ZCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKTtuKCJiZDkyIiksbigiMTllMiIpO3ZhciByPW4oImVhYmYiKSxvPW4oIjRjOTkiKSxhPW4oIjA5YjEiKTtpLnJlZ2lzdGVyUHJlcHJvY2Vzc29yKHIpLGkucmVnaXN0ZXJWaXN1YWwobyksaS5yZWdpc3RlckxheW91dChhKX0sIjA4YzMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI4NGNlIiksbz1mdW5jdGlvbihlLHQsbixpKXtyLmNhbGwodGhpcyxlLHQsbiksdGhpcy50eXBlPWl8fCJ2YWx1ZSIsdGhpcy5tb2RlbD1udWxsfTtvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6byxnZXRMYWJlbE1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0TW9kZWwoImxhYmVsIil9LGlzSG9yaXpvbnRhbDpmdW5jdGlvbigpe3JldHVybiJob3Jpem9udGFsIj09PXRoaXMubW9kZWwuZ2V0KCJvcmllbnQiKX19LGkuaW5oZXJpdHMobyxyKTt2YXIgYT1vO2UuZXhwb3J0cz1hfSwiMDk4MyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImM5MDEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChpKGUpKX19LCIwOWIxIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMjMwNiIpLHI9aS5zdWJQaXhlbE9wdGltaXplLG89bigiY2NjZCIpLGE9bigiMzg0MiIpLHM9YS5wYXJzZVBlcmNlbnQsbD1uKCI2ZDhiIiksYz1sLnJldHJpZXZlMix1PSJ1bmRlZmluZWQiIT09dHlwZW9mIEZsb2F0MzJBcnJheT9GbG9hdDMyQXJyYXk6QXJyYXksaD17c2VyaWVzVHlwZToiY2FuZGxlc3RpY2siLHBsYW46bygpLHJlc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29vcmRpbmF0ZVN5c3RlbSxuPWUuZ2V0RGF0YSgpLGk9ZihlLG4pLG89MCxhPTEscz1bIngiLCJ5Il0sbD1uLm1hcERpbWVuc2lvbihzW29dKSxjPW4ubWFwRGltZW5zaW9uKHNbYV0sITApLGg9Y1swXSxwPWNbMV0sbT1jWzJdLGc9Y1szXTtpZihuLnNldExheW91dCh7Y2FuZGxlV2lkdGg6aSxpc1NpbXBsZUJveDppPD0xLjN9KSwhKG51bGw9PWx8fGMubGVuZ3RoPDQpKXJldHVybntwcm9ncmVzczplLnBpcGVsaW5lQ29udGV4dC5sYXJnZT95OnZ9O2Z1bmN0aW9uIHYoZSxuKXt2YXIgczt3aGlsZShudWxsIT0ocz1lLm5leHQoKSkpe3ZhciBjPW4uZ2V0KGwscyksdT1uLmdldChoLHMpLGY9bi5nZXQocCxzKSx2PW4uZ2V0KG0scykseT1uLmdldChnLHMpLGI9TWF0aC5taW4odSxmKSx4PU1hdGgubWF4KHUsZiksXz1UKGIsYyksdz1UKHgsYyksUz1UKHYsYyksQz1UKHksYyksaz1bXTtNKGssdywwKSxNKGssXywxKSxrLnB1c2goSShDKSxJKHcpLEkoUyksSShfKSksbi5zZXRJdGVtTGF5b3V0KHMse3NpZ246ZChuLHMsdSxmLHApLGluaXRCYXNlbGluZTp1PmY/d1thXTpfW2FdLGVuZHM6ayxicnVzaFJlY3Q6RSh2LHksYyl9KX1mdW5jdGlvbiBUKGUsbil7dmFyIGk9W107cmV0dXJuIGlbb109bixpW2FdPWUsaXNOYU4obil8fGlzTmFOKGUpP1tOYU4sTmFOXTp0LmRhdGFUb1BvaW50KGkpfWZ1bmN0aW9uIE0oZSx0LG4pe3ZhciBhPXQuc2xpY2UoKSxzPXQuc2xpY2UoKTthW29dPXIoYVtvXStpLzIsMSwhMSksc1tvXT1yKHNbb10taS8yLDEsITApLG4/ZS5wdXNoKGEscyk6ZS5wdXNoKHMsYSl9ZnVuY3Rpb24gRShlLHQsbil7dmFyIHI9VChlLG4pLHM9VCh0LG4pO3JldHVybiByW29dLT1pLzIsc1tvXS09aS8yLHt4OnJbMF0seTpyWzFdLHdpZHRoOmE/aTpzWzBdLXJbMF0saGVpZ2h0OmE/c1sxXS1yWzFdOml9fWZ1bmN0aW9uIEkoZSl7cmV0dXJuIGVbb109cihlW29dLDEpLGV9fWZ1bmN0aW9uIHkoZSxuKXt2YXIgaSxyLHM9bmV3IHUoNCplLmNvdW50KSxjPTAsZj1bXSx2PVtdO3doaWxlKG51bGwhPShyPWUubmV4dCgpKSl7dmFyIHk9bi5nZXQobCxyKSxiPW4uZ2V0KGgscikseD1uLmdldChwLHIpLF89bi5nZXQobSxyKSx3PW4uZ2V0KGcscik7aXNOYU4oeSl8fGlzTmFOKF8pfHxpc05hTih3KT8oc1tjKytdPU5hTixjKz0zKTooc1tjKytdPWQobixyLGIseCxwKSxmW29dPXksZlthXT1fLGk9dC5kYXRhVG9Qb2ludChmLG51bGwsdiksc1tjKytdPWk/aVswXTpOYU4sc1tjKytdPWk/aVsxXTpOYU4sZlthXT13LGk9dC5kYXRhVG9Qb2ludChmLG51bGwsdiksc1tjKytdPWk/aVsxXTpOYU4pfW4uc2V0TGF5b3V0KCJsYXJnZVBvaW50cyIscyl9fX07ZnVuY3Rpb24gZChlLHQsbixpLHIpe3ZhciBvO3JldHVybiBvPW4+aT8tMTpuPGk/MTp0PjA/ZS5nZXQocix0LTEpPD1pPzE6LTE6MSxvfWZ1bmN0aW9uIGYoZSx0KXt2YXIgbixpPWUuZ2V0QmFzZUF4aXMoKSxyPSJjYXRlZ29yeSI9PT1pLnR5cGU/aS5nZXRCYW5kV2lkdGgoKToobj1pLmdldEV4dGVudCgpLE1hdGguYWJzKG5bMV0tblswXSkvdC5jb3VudCgpKSxvPXMoYyhlLmdldCgiYmFyTWF4V2lkdGgiKSxyKSxyKSxhPXMoYyhlLmdldCgiYmFyTWluV2lkdGgiKSwxKSxyKSxsPWUuZ2V0KCJiYXJXaWR0aCIpO3JldHVybiBudWxsIT1sP3MobCxyKTpNYXRoLm1heChNYXRoLm1pbihyLzIsbyksYSl9ZS5leHBvcnRzPWh9LCIwYTA2IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImM1MzIiKSxyPW4oIjMwYjUiKSxvPW4oImY2YjQiKSxhPW4oIjUyNzAiKSxzPW4oIjRhN2IiKTtmdW5jdGlvbiBsKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgbyxyZXNwb25zZTpuZXcgb319bC5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlKXsic3RyaW5nIj09PXR5cGVvZiBlPyhlPWFyZ3VtZW50c1sxXXx8e30sZS51cmw9YXJndW1lbnRzWzBdKTplPWV8fHt9LGU9cyh0aGlzLmRlZmF1bHRzLGUpLGUubWV0aG9kP2UubWV0aG9kPWUubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/ZS5tZXRob2Q9dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKTplLm1ldGhvZD0iZ2V0Ijt2YXIgdD1bYSx2b2lkIDBdLG49UHJvbWlzZS5yZXNvbHZlKGUpO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC51bnNoaWZ0KGUuZnVsZmlsbGVkLGUucmVqZWN0ZWQpfSkpLHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlLmZ1bGZpbGxlZCxlLnJlamVjdGVkKX0pKTt3aGlsZSh0Lmxlbmd0aCluPW4udGhlbih0LnNoaWZ0KCksdC5zaGlmdCgpKTtyZXR1cm4gbn0sbC5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKGUpe3JldHVybiBlPXModGhpcy5kZWZhdWx0cyxlKSxyKGUudXJsLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcikucmVwbGFjZSgvXlw/LywiIil9LGkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sKGZ1bmN0aW9uKGUpe2wucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdChzKG58fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihufHx7fSkuZGF0YX0pKX19KSksaS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2wucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQsbixpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHMoaXx8e30se21ldGhvZDplLHVybDp0LGRhdGE6bn0pKX19KSksZS5leHBvcnRzPWx9LCIwYTZkIjpmdW5jdGlvbihlLHQsbil7bigiZTRkMSIpLG4oIjdmNzIiKX0sIjBhZTIiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI5ODc2Iikscj1uKCJmZWQ1Iiksbz1uKCIxOTE3Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSksbj1yLmY7aWYobil7dmFyIGEscz1uKGUpLGw9by5mLGM9MDt3aGlsZShzLmxlbmd0aD5jKWwuY2FsbChlLGE9c1tjKytdKSYmdC5wdXNoKGEpfXJldHVybiB0fX0sIjBiNDQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2MDdkIikscj1mdW5jdGlvbigpe3RoaXMuX3RyYWNrPVtdfTtmdW5jdGlvbiBvKGUpe3ZhciB0PWVbMV1bMF0tZVswXVswXSxuPWVbMV1bMV0tZVswXVsxXTtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtuKm4pfWZ1bmN0aW9uIGEoZSl7cmV0dXJuWyhlWzBdWzBdK2VbMV1bMF0pLzIsKGVbMF1bMV0rZVsxXVsxXSkvMl19ci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnIscmVjb2duaXplOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5fZG9UcmFjayhlLHQsbiksdGhpcy5fcmVjb2duaXplKGUpfSxjbGVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFjay5sZW5ndGg9MCx0aGlzfSxfZG9UcmFjazpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS50b3VjaGVzO2lmKHIpe2Zvcih2YXIgbz17cG9pbnRzOltdLHRvdWNoZXM6W10sdGFyZ2V0OnQsZXZlbnQ6ZX0sYT0wLHM9ci5sZW5ndGg7YTxzO2ErKyl7dmFyIGw9clthXSxjPWkuY2xpZW50VG9Mb2NhbChuLGwse30pO28ucG9pbnRzLnB1c2goW2MuenJYLGMuenJZXSksby50b3VjaGVzLnB1c2gobCl9dGhpcy5fdHJhY2sucHVzaChvKX19LF9yZWNvZ25pemU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHMpaWYocy5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG49c1t0XSh0aGlzLl90cmFjayxlKTtpZihuKXJldHVybiBufX19O3ZhciBzPXtwaW5jaDpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoO2lmKG4pe3ZhciBpPShlW24tMV18fHt9KS5wb2ludHMscj0oZVtuLTJdfHx7fSkucG9pbnRzfHxpO2lmKHImJnIubGVuZ3RoPjEmJmkmJmkubGVuZ3RoPjEpe3ZhciBzPW8oaSkvbyhyKTshaXNGaW5pdGUocykmJihzPTEpLHQucGluY2hTY2FsZT1zO3ZhciBsPWEoaSk7cmV0dXJuIHQucGluY2hYPWxbMF0sdC5waW5jaFk9bFsxXSx7dHlwZToicGluY2giLHRhcmdldDplWzBdLnRhcmdldCxldmVudDp0fX19fX0sbD1yO2UuZXhwb3J0cz1sfSwiMGI0YiI6ZnVuY3Rpb24oZSx0LG4pe24oImQyOGYiKSxuKCJmMTRjIiksbigiMGVlNyIpLG4oImViZjkiKX0sIjBiOTkiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiMTlmYSIpKCEwKTtuKCIzOTNhIikoU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbihlKXt0aGlzLl90PVN0cmluZyhlKSx0aGlzLl9pPTB9KSwoZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuX3Qsbj10aGlzLl9pO3JldHVybiBuPj10Lmxlbmd0aD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9OihlPWkodCxuKSx0aGlzLl9pKz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KSl9LCIwYmFkIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKCI0YjhiIikoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSl9LCIwYzEyIjpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXt9ZnVuY3Rpb24gaShlLHQsbixpKXtmb3IodmFyIHI9MCxvPXQubGVuZ3RoLGE9MCxzPTA7cjxvO3IrKyl7dmFyIGw9dFtyXTtpZihsLnJlbW92ZWQpe2ZvcihjPVtdLHU9czt1PHMrbC5jb3VudDt1KyspYy5wdXNoKHUpO2wuaW5kaWNlcz1jLHMrPWwuY291bnR9ZWxzZXtmb3IodmFyIGM9W10sdT1hO3U8YStsLmNvdW50O3UrKyljLnB1c2godSk7bC5pbmRpY2VzPWMsYSs9bC5jb3VudCxsLmFkZGVkfHwocys9bC5jb3VudCl9fXJldHVybiB0fWZ1bmN0aW9uIHIoZSl7cmV0dXJue25ld1BvczplLm5ld1Bvcyxjb21wb25lbnRzOmUuY29tcG9uZW50cy5zbGljZSgwKX19bi5wcm90b3R5cGU9e2RpZmY6ZnVuY3Rpb24oZSx0LG4pe258fChuPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fSksdGhpcy5lcXVhbHM9bjt2YXIgbz10aGlzO2U9ZS5zbGljZSgpLHQ9dC5zbGljZSgpO3ZhciBhPXQubGVuZ3RoLHM9ZS5sZW5ndGgsbD0xLGM9YStzLHU9W3tuZXdQb3M6LTEsY29tcG9uZW50czpbXX1dLGg9dGhpcy5leHRyYWN0Q29tbW9uKHVbMF0sdCxlLDApO2lmKHVbMF0ubmV3UG9zKzE+PWEmJmgrMT49cyl7Zm9yKHZhciBkPVtdLGY9MDtmPHQubGVuZ3RoO2YrKylkLnB1c2goZik7cmV0dXJuW3tpbmRpY2VzOmQsY291bnQ6dC5sZW5ndGh9XX1mdW5jdGlvbiBwKCl7Zm9yKHZhciBuPS0xKmw7bjw9bDtuKz0yKXt2YXIgYyxoPXVbbi0xXSxkPXVbbisxXSxmPShkP2QubmV3UG9zOjApLW47aCYmKHVbbi0xXT12b2lkIDApO3ZhciBwPWgmJmgubmV3UG9zKzE8YSxtPWQmJjA8PWYmJmY8cztpZihwfHxtKXtpZighcHx8bSYmaC5uZXdQb3M8ZC5uZXdQb3M/KGM9cihkKSxvLnB1c2hDb21wb25lbnQoYy5jb21wb25lbnRzLHZvaWQgMCwhMCkpOihjPWgsYy5uZXdQb3MrKyxvLnB1c2hDb21wb25lbnQoYy5jb21wb25lbnRzLCEwLHZvaWQgMCkpLGY9by5leHRyYWN0Q29tbW9uKGMsdCxlLG4pLGMubmV3UG9zKzE+PWEmJmYrMT49cylyZXR1cm4gaShvLGMuY29tcG9uZW50cyx0LGUpO3Vbbl09Y31lbHNlIHVbbl09dm9pZCAwfWwrK313aGlsZShsPD1jKXt2YXIgbT1wKCk7aWYobSlyZXR1cm4gbX19LHB1c2hDb21wb25lbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWVbZS5sZW5ndGgtMV07aSYmaS5hZGRlZD09PXQmJmkucmVtb3ZlZD09PW4/ZVtlLmxlbmd0aC0xXT17Y291bnQ6aS5jb3VudCsxLGFkZGVkOnQscmVtb3ZlZDpufTplLnB1c2goe2NvdW50OjEsYWRkZWQ6dCxyZW1vdmVkOm59KX0sZXh0cmFjdENvbW1vbjpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj10Lmxlbmd0aCxvPW4ubGVuZ3RoLGE9ZS5uZXdQb3Mscz1hLWksbD0wO3doaWxlKGErMTxyJiZzKzE8byYmdGhpcy5lcXVhbHModFthKzFdLG5bcysxXSkpYSsrLHMrKyxsKys7cmV0dXJuIGwmJmUuY29tcG9uZW50cy5wdXNoKHtjb3VudDpsfSksZS5uZXdQb3M9YSxzfSx0b2tlbml6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgpfSxqb2luOmZ1bmN0aW9uKGUpe3JldHVybiBlLnNsaWNlKCl9fTt2YXIgbz1uZXcgbjtmdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gby5kaWZmKGUsdCxuKX1lLmV4cG9ydHM9YX0sIjBjMzciOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj0iLS1ceDNlIixvPWZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiYXV0b0N1cnZlbmVzcyIpfHxudWxsfSxhPWZ1bmN0aW9uKGUsdCl7dmFyIG49byhlKSxyPTIwLGE9W107aWYoIm51bWJlciI9PT10eXBlb2YgbilyPW47ZWxzZSBpZihpLmlzQXJyYXkobikpcmV0dXJuIHZvaWQoZS5fX2N1cnZlbmVzc0xpc3Q9bik7dD5yJiYocj10KTt2YXIgcz1yJTI/cisyOnIrMzthPVtdO2Zvcih2YXIgbD0wO2w8cztsKyspYS5wdXNoKChsJTI/bCsxOmwpLzEwKihsJTI/LTE6MSkpO2UuX19jdXJ2ZW5lc3NMaXN0PWF9LHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPVtlLmlkLGUuZGF0YUluZGV4XS5qb2luKCIuIiksbz1bdC5pZCx0LmRhdGFJbmRleF0uam9pbigiLiIpO3JldHVybltuLnVpZCxpLG9dLmpvaW4ocil9LGw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zcGxpdChyKTtyZXR1cm5bdFswXSx0WzJdLHRbMV1dLmpvaW4ocil9LGM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1zKGUubm9kZTEsZS5ub2RlMix0KTtyZXR1cm4gdC5fX2VkZ2VNYXBbbl19LHU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1oKHMoZS5ub2RlMSxlLm5vZGUyLHQpLHQpLGk9aChzKGUubm9kZTIsZS5ub2RlMSx0KSx0KTtyZXR1cm4gbitpfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5fX2VkZ2VNYXA7cmV0dXJuIG5bZV0/bltlXS5sZW5ndGg6MH07ZnVuY3Rpb24gZChlKXtvKGUpJiYoZS5fX2N1cnZlbmVzc0xpc3Q9W10sZS5fX2VkZ2VNYXA9e30sYShlKSl9ZnVuY3Rpb24gZihlLHQsbixpKXtpZihvKG4pKXt2YXIgcj1zKGUsdCxuKSxhPW4uX19lZGdlTWFwLGM9YVtsKHIpXTthW3JdJiYhYz9hW3JdLmlzRm9yd2FyZD0hMDpjJiZhW3JdJiYoYy5pc0ZvcndhcmQ9ITAsYVtyXS5pc0ZvcndhcmQ9ITEpLGFbcl09YVtyXXx8W10sYVtyXS5wdXNoKGkpfX1mdW5jdGlvbiBwKGUsdCxuLHIpe3ZhciBkPW8odCksZj1pLmlzQXJyYXkoZCk7aWYoIWQpcmV0dXJuIG51bGw7dmFyIHA9YyhlLHQpO2lmKCFwKXJldHVybiBudWxsO2Zvcih2YXIgbT0tMSxnPTA7ZzxwLmxlbmd0aDtnKyspaWYocFtnXT09PW4pe209ZzticmVha312YXIgdj11KGUsdCk7YSh0LHYpLGUubGluZVN0eWxlPWUubGluZVN0eWxlfHx7fTt2YXIgeT1zKGUubm9kZTEsZS5ub2RlMix0KSxiPXQuX19jdXJ2ZW5lc3NMaXN0LHg9Znx8diUyPzA6MTtpZihwLmlzRm9yd2FyZClyZXR1cm4gYlt4K21dO3ZhciBfPWwoeSksdz1oKF8sdCksUz1iW20rdyt4XTtyZXR1cm4gcj9mP2QmJjA9PT1kWzBdPyh3K3gpJTI/UzotUzooKHclMj8wOjEpK3gpJTI/UzotUzoodyt4KSUyP1M6LVM6YlttK3creF19dC5pbml0Q3VydmVuZXNzTGlzdD1kLHQuY3JlYXRlRWRnZU1hcEZvckN1cnZlbmVzcz1mLHQuZ2V0Q3VydmVuZXNzRm9yRWRnZT1wfSwiMGM0MSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjRhMDEiKSxvPW4oIjAxZWYiKSxhPW4oImM1MjYiKSxzPWEub25JcnJlbGV2YW50RWxlbWVudCxsPW4oIjIzMDYiKSxjPW4oIjViODciKSx1PW4oIjg5MTgiKSxoPXUuZ2V0VUlELGQ9bigiMGNkZSIpO2Z1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5nZXRJdGVtU3R5bGUoKSxuPWUuZ2V0KCJhcmVhQ29sb3IiKTtyZXR1cm4gbnVsbCE9biYmKHQuZmlsbD1uKSx0fWZ1bmN0aW9uIHAoZSx0LG4scixvKXtuLm9mZigiY2xpY2siKSxuLm9mZigibW91c2Vkb3duIiksdC5nZXQoInNlbGVjdGVkTW9kZSIpJiYobi5vbigibW91c2Vkb3duIiwoZnVuY3Rpb24oKXtlLl9tb3VzZURvd25GbGFnPSEwfSkpLG4ub24oImNsaWNrIiwoZnVuY3Rpb24oYSl7aWYoZS5fbW91c2VEb3duRmxhZyl7ZS5fbW91c2VEb3duRmxhZz0hMTt2YXIgcz1hLnRhcmdldDt3aGlsZSghcy5fX3JlZ2lvbnMpcz1zLnBhcmVudDtpZihzKXt2YXIgbD17dHlwZTooImdlbyI9PT10Lm1haW5UeXBlPyJnZW8iOiJtYXAiKSsiVG9nZ2xlU2VsZWN0IixiYXRjaDppLm1hcChzLl9fcmVnaW9ucywoZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6ZS5uYW1lLGZyb206by51aWR9fSkpfTtsW3QubWFpblR5cGUrIklkIl09dC5pZCxyLmRpc3BhdGNoQWN0aW9uKGwpLG0odCxuKX19fSkpKX1mdW5jdGlvbiBtKGUsdCl7dC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2kuZWFjaCh0Ll9fcmVnaW9ucywoZnVuY3Rpb24obil7dC50cmlnZ2VyKGUuaXNTZWxlY3RlZChuLm5hbWUpPyJlbXBoYXNpcyI6Im5vcm1hbCIpfSkpfSkpfWZ1bmN0aW9uIGcoZSx0KXt2YXIgbj1uZXcgbC5Hcm91cDt0aGlzLnVpZD1oKCJlY19tYXBfZHJhdyIpLHRoaXMuX2NvbnRyb2xsZXI9bmV3IHIoZS5nZXRacigpKSx0aGlzLl9jb250cm9sbGVySG9zdD17dGFyZ2V0OnQ/bjpudWxsfSx0aGlzLmdyb3VwPW4sdGhpcy5fdXBkYXRlR3JvdXA9dCx0aGlzLl9tb3VzZURvd25GbGFnLHRoaXMuX21hcE5hbWUsdGhpcy5faW5pdGlhbGl6ZWQsbi5hZGQodGhpcy5fcmVnaW9uc0dyb3VwPW5ldyBsLkdyb3VwKSxuLmFkZCh0aGlzLl9iYWNrZ3JvdW5kR3JvdXA9bmV3IGwuR3JvdXApfWcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpnLGRyYXc6ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT0iZ2VvIj09PWUubWFpblR5cGUscz1lLmdldERhdGEmJmUuZ2V0RGF0YSgpO2EmJnQuZWFjaENvbXBvbmVudCh7bWFpblR5cGU6InNlcmllcyIsc3ViVHlwZToibWFwIn0sKGZ1bmN0aW9uKHQpe3N8fHQuZ2V0SG9zdEdlb01vZGVsKCkhPT1lfHwocz10LmdldERhdGEoKSl9KSk7dmFyIGM9ZS5jb29yZGluYXRlU3lzdGVtO3RoaXMuX3VwZGF0ZUJhY2tncm91bmQoYyk7dmFyIHUsaD10aGlzLl9yZWdpb25zR3JvdXAsZz10aGlzLmdyb3VwLHY9Yy5nZXRUcmFuc2Zvcm1JbmZvKCkseT0haC5jaGlsZEF0KDApfHxvO2lmKHkpZy50cmFuc2Zvcm09di5yb2FtVHJhbnNmb3JtLGcuZGVjb21wb3NlVHJhbnNmb3JtKCksZy5kaXJ0eSgpO2Vsc2V7dmFyIGI9bmV3IGQ7Yi50cmFuc2Zvcm09di5yb2FtVHJhbnNmb3JtLGIuZGVjb21wb3NlVHJhbnNmb3JtKCk7dmFyIHg9e3NjYWxlOmIuc2NhbGUscG9zaXRpb246Yi5wb3NpdGlvbn07dT1iLnNjYWxlLGwudXBkYXRlUHJvcHMoZyx4LGUpfXZhciBfPXYucmF3U2NhbGUsdz12LnJhd1Bvc2l0aW9uO2gucmVtb3ZlQWxsKCk7dmFyIFM9WyJpdGVtU3R5bGUiXSxDPVsiZW1waGFzaXMiLCJpdGVtU3R5bGUiXSxrPVsibGFiZWwiXSxUPVsiZW1waGFzaXMiLCJsYWJlbCJdLE09aS5jcmVhdGVIYXNoTWFwKCk7aS5lYWNoKGMucmVnaW9ucywoZnVuY3Rpb24odCl7dmFyIG49TS5nZXQodC5uYW1lKXx8TS5zZXQodC5uYW1lLG5ldyBsLkdyb3VwKSxyPW5ldyBsLkNvbXBvdW5kUGF0aCh7c2VnbWVudElnbm9yZVRocmVzaG9sZDoxLHNoYXBlOntwYXRoczpbXX19KTtuLmFkZChyKTt2YXIgbyxjPWUuZ2V0UmVnaW9uTW9kZWwodC5uYW1lKXx8ZSxkPWMuZ2V0TW9kZWwoUykscD1jLmdldE1vZGVsKEMpLG09ZihkKSx2PWYocCksYj1jLmdldE1vZGVsKGspLHg9Yy5nZXRNb2RlbChUKTtpZihzKXtvPXMuaW5kZXhPZk5hbWUodC5uYW1lKTt2YXIgRT1zLmdldEl0ZW1WaXN1YWwobywiY29sb3IiLCEwKTtFJiYobS5maWxsPUUpfXZhciBJPWZ1bmN0aW9uKGUpe3JldHVybltlWzBdKl9bMF0rd1swXSxlWzFdKl9bMV0rd1sxXV19O2kuZWFjaCh0Lmdlb21ldHJpZXMsKGZ1bmN0aW9uKGUpe2lmKCJwb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUuZXh0ZXJpb3IubGVuZ3RoOysrbil0LnB1c2goSShlLmV4dGVyaW9yW25dKSk7ci5zaGFwZS5wYXRocy5wdXNoKG5ldyBsLlBvbHlnb24oe3NlZ21lbnRJZ25vcmVUaHJlc2hvbGQ6MSxzaGFwZTp7cG9pbnRzOnR9fSkpO2ZvcihuPTA7bjwoZS5pbnRlcmlvcnM/ZS5pbnRlcmlvcnMubGVuZ3RoOjApOysrbil7Zm9yKHZhciBpPWUuaW50ZXJpb3JzW25dLG89KHQ9W10sMCk7bzxpLmxlbmd0aDsrK28pdC5wdXNoKEkoaVtvXSkpO3Iuc2hhcGUucGF0aHMucHVzaChuZXcgbC5Qb2x5Z29uKHtzZWdtZW50SWdub3JlVGhyZXNob2xkOjEsc2hhcGU6e3BvaW50czp0fX0pKX19fSkpLHIuc2V0U3R5bGUobSksci5zdHlsZS5zdHJva2VOb1NjYWxlPSEwLHIuY3VsbGluZz0hMDt2YXIgRD1iLmdldCgic2hvdyIpLEE9eC5nZXQoInNob3ciKSxPPXMmJmlzTmFOKHMuZ2V0KHMubWFwRGltZW5zaW9uKCJ2YWx1ZSIpLG8pKSxQPXMmJnMuZ2V0SXRlbUxheW91dChvKTtpZihhfHxPJiYoRHx8QSl8fFAmJlAuc2hvd0xhYmVsKXt2YXIgTCxOPWE/dC5uYW1lOm87KCFzfHxvPj0wKSYmKEw9ZSk7dmFyIFI9bmV3IGwuVGV4dCh7cG9zaXRpb246SSh0LmNlbnRlci5zbGljZSgpKSxzY2FsZTpbMS9nLnNjYWxlWzBdLDEvZy5zY2FsZVsxXV0sejI6MTAsc2lsZW50OiEwfSk7aWYobC5zZXRMYWJlbFN0eWxlKFIuc3R5bGUsUi5ob3ZlclN0eWxlPXt9LGIseCx7bGFiZWxGZXRjaGVyOkwsbGFiZWxEYXRhSW5kZXg6TixkZWZhdWx0VGV4dDp0Lm5hbWUsdXNlSW5zaWRlU3R5bGU6ITF9LHt0ZXh0QWxpZ246ImNlbnRlciIsdGV4dFZlcnRpY2FsQWxpZ246Im1pZGRsZSJ9KSwheSl7dmFyICQ9WzEvdVswXSwxL3VbMV1dO2wudXBkYXRlUHJvcHMoUix7c2NhbGU6JH0sZSl9bi5hZGQoUil9aWYocylzLnNldEl0ZW1HcmFwaGljRWwobyxuKTtlbHNle2M9ZS5nZXRSZWdpb25Nb2RlbCh0Lm5hbWUpO3IuZXZlbnREYXRhPXtjb21wb25lbnRUeXBlOiJnZW8iLGNvbXBvbmVudEluZGV4OmUuY29tcG9uZW50SW5kZXgsZ2VvSW5kZXg6ZS5jb21wb25lbnRJbmRleCxuYW1lOnQubmFtZSxyZWdpb246YyYmYy5vcHRpb258fHt9fX12YXIgej1uLl9fcmVnaW9uc3x8KG4uX19yZWdpb25zPVtdKTt6LnB1c2godCksbi5oaWdoRG93blNpbGVudE9uVG91Y2g9ISFlLmdldCgic2VsZWN0ZWRNb2RlIiksbC5zZXRIb3ZlclN0eWxlKG4sdiksaC5hZGQobil9KSksdGhpcy5fdXBkYXRlQ29udHJvbGxlcihlLHQsbikscCh0aGlzLGUsaCxuLHIpLG0oZSxoKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fcmVnaW9uc0dyb3VwLnJlbW92ZUFsbCgpLHRoaXMuX2JhY2tncm91bmRHcm91cC5yZW1vdmVBbGwoKSx0aGlzLl9jb250cm9sbGVyLmRpc3Bvc2UoKSx0aGlzLl9tYXBOYW1lJiZjLnJlbW92ZUdyYXBoaWModGhpcy5fbWFwTmFtZSx0aGlzLnVpZCksdGhpcy5fbWFwTmFtZT1udWxsLHRoaXMuX2NvbnRyb2xsZXJIb3N0PXt9fSxfdXBkYXRlQmFja2dyb3VuZDpmdW5jdGlvbihlKXt2YXIgdD1lLm1hcDt0aGlzLl9tYXBOYW1lIT09dCYmaS5lYWNoKGMubWFrZUdyYXBoaWModCx0aGlzLnVpZCksKGZ1bmN0aW9uKGUpe3RoaXMuX2JhY2tncm91bmRHcm91cC5hZGQoZSl9KSx0aGlzKSx0aGlzLl9tYXBOYW1lPXR9LF91cGRhdGVDb250cm9sbGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmNvb3JkaW5hdGVTeXN0ZW0sYT10aGlzLl9jb250cm9sbGVyLGw9dGhpcy5fY29udHJvbGxlckhvc3Q7bC56b29tTGltaXQ9ZS5nZXQoInNjYWxlTGltaXQiKSxsLnpvb209ci5nZXRab29tKCksYS5lbmFibGUoZS5nZXQoInJvYW0iKXx8ITEpO3ZhciBjPWUubWFpblR5cGU7ZnVuY3Rpb24gdSgpe3ZhciB0PXt0eXBlOiJnZW9Sb2FtIixjb21wb25lbnRUeXBlOmN9O3JldHVybiB0W2MrIklkIl09ZS5pZCx0fWEub2ZmKCJwYW4iKS5vbigicGFuIiwoZnVuY3Rpb24oZSl7dGhpcy5fbW91c2VEb3duRmxhZz0hMSxvLnVwZGF0ZVZpZXdPblBhbihsLGUuZHgsZS5keSksbi5kaXNwYXRjaEFjdGlvbihpLmV4dGVuZCh1KCkse2R4OmUuZHgsZHk6ZS5keX0pKX0pLHRoaXMpLGEub2ZmKCJ6b29tIikub24oInpvb20iLChmdW5jdGlvbihlKXtpZih0aGlzLl9tb3VzZURvd25GbGFnPSExLG8udXBkYXRlVmlld09uWm9vbShsLGUuc2NhbGUsZS5vcmlnaW5YLGUub3JpZ2luWSksbi5kaXNwYXRjaEFjdGlvbihpLmV4dGVuZCh1KCkse3pvb206ZS5zY2FsZSxvcmlnaW5YOmUub3JpZ2luWCxvcmlnaW5ZOmUub3JpZ2luWX0pKSx0aGlzLl91cGRhdGVHcm91cCl7dmFyIHQ9dGhpcy5ncm91cC5zY2FsZTt0aGlzLl9yZWdpb25zR3JvdXAudHJhdmVyc2UoKGZ1bmN0aW9uKGUpeyJ0ZXh0Ij09PWUudHlwZSYmZS5hdHRyKCJzY2FsZSIsWzEvdFswXSwxL3RbMV1dKX0pKX19KSx0aGlzKSxhLnNldFBvaW50ZXJDaGVja2VyKChmdW5jdGlvbih0LGksbyl7cmV0dXJuIHIuZ2V0Vmlld1JlY3RBZnRlclJvYW0oKS5jb250YWluKGksbykmJiFzKHQsbixlKX0pKX19O3ZhciB2PWc7ZS5leHBvcnRzPXZ9LCIwY2IyIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiN2IwYiIpLHI9TWF0aC5mbG9vcixvPSIiLnJlcGxhY2UsYT0vXCQoWyQmJ2BdfFxkezEsMn18PFtePl0qPikvZyxzPS9cJChbJCYnYF18XGR7MSwyfSkvZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sbCxjLHUpe3ZhciBoPW4rZS5sZW5ndGgsZD1sLmxlbmd0aCxmPXM7cmV0dXJuIHZvaWQgMCE9PWMmJihjPWkoYyksZj1hKSxvLmNhbGwodSxmLChmdW5jdGlvbihpLG8pe3ZhciBhO3N3aXRjaChvLmNoYXJBdCgwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gZTtjYXNlImAiOnJldHVybiB0LnNsaWNlKDAsbik7Y2FzZSInIjpyZXR1cm4gdC5zbGljZShoKTtjYXNlIjwiOmE9Y1tvLnNsaWNlKDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBzPStvO2lmKDA9PT1zKXJldHVybiBpO2lmKHM+ZCl7dmFyIHU9cihzLzEwKTtyZXR1cm4gMD09PXU/aTp1PD1kP3ZvaWQgMD09PWxbdS0xXT9vLmNoYXJBdCgxKTpsW3UtMV0rby5jaGFyQXQoMSk6aX1hPWxbcy0xXX1yZXR1cm4gdm9pZCAwPT09YT8iIjphfSkpfX0sIjBjY2IiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI1MGM0Iikscj1uKCIxMTQ4Iiksbz1uKCIxZDgwIiksYT1NYXRoLmNlaWwscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLHMpe3ZhciBsLGMsdT1TdHJpbmcobyh0KSksaD11Lmxlbmd0aCxkPXZvaWQgMD09PXM/IiAiOlN0cmluZyhzKSxmPWkobik7cmV0dXJuIGY8PWh8fCIiPT1kP3U6KGw9Zi1oLGM9ci5jYWxsKGQsYShsL2QubGVuZ3RoKSksYy5sZW5ndGg+bCYmKGM9Yy5zbGljZSgwLGwpKSxlP3UrYzpjK3UpfX07ZS5leHBvcnRzPXtzdGFydDpzKCExKSxlbmQ6cyghMCl9fSwiMGNkZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjE2ODciKSxyPW4oIjQwMWIiKSxvPWkuaWRlbnRpdHksYT01ZS01O2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGU+YXx8ZTwtYX12YXIgbD1mdW5jdGlvbihlKXtlPWV8fHt9LGUucG9zaXRpb258fCh0aGlzLnBvc2l0aW9uPVswLDBdKSxudWxsPT1lLnJvdGF0aW9uJiYodGhpcy5yb3RhdGlvbj0wKSxlLnNjYWxlfHwodGhpcy5zY2FsZT1bMSwxXSksdGhpcy5vcmlnaW49dGhpcy5vcmlnaW58fG51bGx9LGM9bC5wcm90b3R5cGU7Yy50cmFuc2Zvcm09bnVsbCxjLm5lZWRMb2NhbFRyYW5zZm9ybT1mdW5jdGlvbigpe3JldHVybiBzKHRoaXMucm90YXRpb24pfHxzKHRoaXMucG9zaXRpb25bMF0pfHxzKHRoaXMucG9zaXRpb25bMV0pfHxzKHRoaXMuc2NhbGVbMF0tMSl8fHModGhpcy5zY2FsZVsxXS0xKX07dmFyIHU9W107Yy51cGRhdGVUcmFuc2Zvcm09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudCx0PWUmJmUudHJhbnNmb3JtLG49dGhpcy5uZWVkTG9jYWxUcmFuc2Zvcm0oKSxyPXRoaXMudHJhbnNmb3JtO2lmKG58fHQpe3I9cnx8aS5jcmVhdGUoKSxuP3RoaXMuZ2V0TG9jYWxUcmFuc2Zvcm0ocik6byhyKSx0JiYobj9pLm11bChyLGUudHJhbnNmb3JtLHIpOmkuY29weShyLGUudHJhbnNmb3JtKSksdGhpcy50cmFuc2Zvcm09cjt2YXIgYT10aGlzLmdsb2JhbFNjYWxlUmF0aW87aWYobnVsbCE9YSYmMSE9PWEpe3RoaXMuZ2V0R2xvYmFsU2NhbGUodSk7dmFyIHM9dVswXTwwPy0xOjEsbD11WzFdPDA/LTE6MSxjPSgodVswXS1zKSphK3MpL3VbMF18fDAsaD0oKHVbMV0tbCkqYStsKS91WzFdfHwwO3JbMF0qPWMsclsxXSo9YyxyWzJdKj1oLHJbM10qPWh9dGhpcy5pbnZUcmFuc2Zvcm09dGhpcy5pbnZUcmFuc2Zvcm18fGkuY3JlYXRlKCksaS5pbnZlcnQodGhpcy5pbnZUcmFuc2Zvcm0scil9ZWxzZSByJiZvKHIpfSxjLmdldExvY2FsVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3JldHVybiBsLmdldExvY2FsVHJhbnNmb3JtKHRoaXMsZSl9LGMuc2V0VHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNmb3JtLG49ZS5kcHJ8fDE7dD9lLnNldFRyYW5zZm9ybShuKnRbMF0sbip0WzFdLG4qdFsyXSxuKnRbM10sbip0WzRdLG4qdFs1XSk6ZS5zZXRUcmFuc2Zvcm0obiwwLDAsbiwwLDApfSxjLnJlc3RvcmVUcmFuc2Zvcm09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kcHJ8fDE7ZS5zZXRUcmFuc2Zvcm0odCwwLDAsdCwwLDApfTt2YXIgaD1bXSxkPWkuY3JlYXRlKCk7Yy5zZXRMb2NhbFRyYW5zZm9ybT1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lWzBdKmVbMF0rZVsxXSplWzFdLG49ZVsyXSplWzJdK2VbM10qZVszXSxpPXRoaXMucG9zaXRpb24scj10aGlzLnNjYWxlO3ModC0xKSYmKHQ9TWF0aC5zcXJ0KHQpKSxzKG4tMSkmJihuPU1hdGguc3FydChuKSksZVswXTwwJiYodD0tdCksZVszXTwwJiYobj0tbiksaVswXT1lWzRdLGlbMV09ZVs1XSxyWzBdPXQsclsxXT1uLHRoaXMucm90YXRpb249TWF0aC5hdGFuMigtZVsxXS9uLGVbMF0vdCl9fSxjLmRlY29tcG9zZVRyYW5zZm9ybT1mdW5jdGlvbigpe2lmKHRoaXMudHJhbnNmb3JtKXt2YXIgZT10aGlzLnBhcmVudCx0PXRoaXMudHJhbnNmb3JtO2UmJmUudHJhbnNmb3JtJiYoaS5tdWwoaCxlLmludlRyYW5zZm9ybSx0KSx0PWgpO3ZhciBuPXRoaXMub3JpZ2luO24mJihuWzBdfHxuWzFdKSYmKGRbNF09blswXSxkWzVdPW5bMV0saS5tdWwoaCx0LGQpLGhbNF0tPW5bMF0saFs1XS09blsxXSx0PWgpLHRoaXMuc2V0TG9jYWxUcmFuc2Zvcm0odCl9fSxjLmdldEdsb2JhbFNjYWxlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHJhbnNmb3JtO3JldHVybiBlPWV8fFtdLHQ/KGVbMF09TWF0aC5zcXJ0KHRbMF0qdFswXSt0WzFdKnRbMV0pLGVbMV09TWF0aC5zcXJ0KHRbMl0qdFsyXSt0WzNdKnRbM10pLHRbMF08MCYmKGVbMF09LWVbMF0pLHRbM108MCYmKGVbMV09LWVbMV0pLGUpOihlWzBdPTEsZVsxXT0xLGUpfSxjLnRyYW5zZm9ybUNvb3JkVG9Mb2NhbD1mdW5jdGlvbihlLHQpe3ZhciBuPVtlLHRdLGk9dGhpcy5pbnZUcmFuc2Zvcm07cmV0dXJuIGkmJnIuYXBwbHlUcmFuc2Zvcm0obixuLGkpLG59LGMudHJhbnNmb3JtQ29vcmRUb0dsb2JhbD1mdW5jdGlvbihlLHQpe3ZhciBuPVtlLHRdLGk9dGhpcy50cmFuc2Zvcm07cmV0dXJuIGkmJnIuYXBwbHlUcmFuc2Zvcm0obixuLGkpLG59LGwuZ2V0TG9jYWxUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXt0PXR8fFtdLG8odCk7dmFyIG49ZS5vcmlnaW4scj1lLnNjYWxlfHxbMSwxXSxhPWUucm90YXRpb258fDAscz1lLnBvc2l0aW9ufHxbMCwwXTtyZXR1cm4gbiYmKHRbNF0tPW5bMF0sdFs1XS09blsxXSksaS5zY2FsZSh0LHQsciksYSYmaS5yb3RhdGUodCx0LGEpLG4mJih0WzRdKz1uWzBdLHRbNV0rPW5bMV0pLHRbNF0rPXNbMF0sdFs1XSs9c1sxXSx0fTt2YXIgZj1sO2UuZXhwb3J0cz1mfSwiMGNmYiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjgzYWIiKSxyPW4oImQwMzkiKSxvPW4oImNjMTIiKTtlLmV4cG9ydHM9IWkmJiFyKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSwiMGRhOCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjE5ZWIiKSxyPW4oIjk4NTAiKSxvPW4oIjZkOGIiKSxhPW4oIjVlNzYiKTtmdW5jdGlvbiBzKGUpe2kuY2FsbCh0aGlzLGUpfXMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLHR5cGU6ImltYWdlIixicnVzaDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc3R5bGUsaT1uLmltYWdlO24uYmluZChlLHRoaXMsdCk7dmFyIHI9dGhpcy5faW1hZ2U9YS5jcmVhdGVPclVwZGF0ZUltYWdlKGksdGhpcy5faW1hZ2UsdGhpcyx0aGlzLm9ubG9hZCk7aWYociYmYS5pc0ltYWdlUmVhZHkocikpe3ZhciBvPW4ueHx8MCxzPW4ueXx8MCxsPW4ud2lkdGgsYz1uLmhlaWdodCx1PXIud2lkdGgvci5oZWlnaHQ7aWYobnVsbD09bCYmbnVsbCE9Yz9sPWMqdTpudWxsPT1jJiZudWxsIT1sP2M9bC91Om51bGw9PWwmJm51bGw9PWMmJihsPXIud2lkdGgsYz1yLmhlaWdodCksdGhpcy5zZXRUcmFuc2Zvcm0oZSksbi5zV2lkdGgmJm4uc0hlaWdodCl7dmFyIGg9bi5zeHx8MCxkPW4uc3l8fDA7ZS5kcmF3SW1hZ2UocixoLGQsbi5zV2lkdGgsbi5zSGVpZ2h0LG8scyxsLGMpfWVsc2UgaWYobi5zeCYmbi5zeSl7aD1uLnN4LGQ9bi5zeTt2YXIgZj1sLWgscD1jLWQ7ZS5kcmF3SW1hZ2UocixoLGQsZixwLG8scyxsLGMpfWVsc2UgZS5kcmF3SW1hZ2UocixvLHMsbCxjKTtudWxsIT1uLnRleHQmJih0aGlzLnJlc3RvcmVUcmFuc2Zvcm0oZSksdGhpcy5kcmF3UmVjdFRleHQoZSx0aGlzLmdldEJvdW5kaW5nUmVjdCgpKSl9fSxnZXRCb3VuZGluZ1JlY3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0eWxlO3JldHVybiB0aGlzLl9yZWN0fHwodGhpcy5fcmVjdD1uZXcgcihlLnh8fDAsZS55fHwwLGUud2lkdGh8fDAsZS5oZWlnaHR8fDApKSx0aGlzLl9yZWN0fX0sby5pbmhlcml0cyhzLGkpO3ZhciBsPXM7ZS5leHBvcnRzPWx9LCIwZGY2IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19fSwiMGUwZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjVmMTQiKSxyPW4oIjZkOGIiKTtmdW5jdGlvbiBvKGUsdCl7ZS5lYWNoU2VyaWVzQnlUeXBlKCJzYW5rZXkiLChmdW5jdGlvbihlKXt2YXIgdD1lLmdldEdyYXBoKCksbj10Lm5vZGVzO2lmKG4ubGVuZ3RoKXt2YXIgbz0xLzAsYT0tMS8wO3IuZWFjaChuLChmdW5jdGlvbihlKXt2YXIgdD1lLmdldExheW91dCgpLnZhbHVlO3Q8byYmKG89dCksdD5hJiYoYT10KX0pKSxyLmVhY2gobiwoZnVuY3Rpb24odCl7dmFyIG49bmV3IGkoe3R5cGU6ImNvbG9yIixtYXBwaW5nTWV0aG9kOiJsaW5lYXIiLGRhdGFFeHRlbnQ6W28sYV0sdmlzdWFsOmUuZ2V0KCJjb2xvciIpfSkscj1uLm1hcFZhbHVlVG9WaXN1YWwodC5nZXRMYXlvdXQoKS52YWx1ZSkscz10LmdldE1vZGVsKCkuZ2V0KCJpdGVtU3R5bGUuY29sb3IiKTtudWxsIT1zP3Quc2V0VmlzdWFsKCJjb2xvciIscyk6dC5zZXRWaXN1YWwoImNvbG9yIixyKX0pKX19KSl9ZS5leHBvcnRzPW99LCIwZTE1IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNTk3ZiIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PW4/aShlLHQsITEpOmkoZSxuLCExIT09dCl9fSwiMGVlNyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjIzMDYiKSxvPW4oImY5MzQiKSxhPW4oIjVlOTciKSxzPXIuR3JvdXAsbD1bIndpZHRoIiwiaGVpZ2h0Il0sYz1bIngiLCJ5Il0sdT1hLmV4dGVuZCh7dHlwZToibGVnZW5kLnNjcm9sbCIsbmV3bGluZURpc2FibGVkOiEwLGluaXQ6ZnVuY3Rpb24oKXt1LnN1cGVyQ2FsbCh0aGlzLCJpbml0IiksdGhpcy5fY3VycmVudEluZGV4PTAsdGhpcy5ncm91cC5hZGQodGhpcy5fY29udGFpbmVyR3JvdXA9bmV3IHMpLHRoaXMuX2NvbnRhaW5lckdyb3VwLmFkZCh0aGlzLmdldENvbnRlbnRHcm91cCgpKSx0aGlzLmdyb3VwLmFkZCh0aGlzLl9jb250cm9sbGVyR3JvdXA9bmV3IHMpLHRoaXMuX3Nob3dDb250cm9sbGVyfSxyZXNldElubmVyOmZ1bmN0aW9uKCl7dS5zdXBlckNhbGwodGhpcywicmVzZXRJbm5lciIpLHRoaXMuX2NvbnRyb2xsZXJHcm91cC5yZW1vdmVBbGwoKSx0aGlzLl9jb250YWluZXJHcm91cC5yZW1vdmVDbGlwUGF0aCgpLHRoaXMuX2NvbnRhaW5lckdyb3VwLl9fcmVjdFNpemU9bnVsbH0scmVuZGVySW5uZXI6ZnVuY3Rpb24oZSx0LG4sbyxhLHMsbCl7dmFyIGM9dGhpczt1LnN1cGVyQ2FsbCh0aGlzLCJyZW5kZXJJbm5lciIsZSx0LG4sbyxhLHMsbCk7dmFyIGg9dGhpcy5fY29udHJvbGxlckdyb3VwLGQ9dC5nZXQoInBhZ2VJY29uU2l6ZSIsITApO2kuaXNBcnJheShkKXx8KGQ9W2QsZF0pLHAoInBhZ2VQcmV2IiwwKTt2YXIgZj10LmdldE1vZGVsKCJwYWdlVGV4dFN0eWxlIik7ZnVuY3Rpb24gcChlLG4pe3ZhciBhPWUrIkRhdGFJbmRleCIscz1yLmNyZWF0ZUljb24odC5nZXQoInBhZ2VJY29ucyIsITApW3QuZ2V0T3JpZW50KCkubmFtZV1bbl0se29uY2xpY2s6aS5iaW5kKGMuX3BhZ2VHbyxjLGEsdCxvKX0se3g6LWRbMF0vMix5Oi1kWzFdLzIsd2lkdGg6ZFswXSxoZWlnaHQ6ZFsxXX0pO3MubmFtZT1lLGguYWRkKHMpfWguYWRkKG5ldyByLlRleHQoe25hbWU6InBhZ2VUZXh0IixzdHlsZTp7dGV4dEZpbGw6Zi5nZXRUZXh0Q29sb3IoKSxmb250OmYuZ2V0Rm9udCgpLHRleHRWZXJ0aWNhbEFsaWduOiJtaWRkbGUiLHRleHRBbGlnbjoiY2VudGVyIn0sc2lsZW50OiEwfSkpLHAoInBhZ2VOZXh0IiwxKX0sbGF5b3V0SW5uZXI6ZnVuY3Rpb24oZSx0LG4scixhLHMpe3ZhciB1PXRoaXMuZ2V0U2VsZWN0b3JHcm91cCgpLGg9ZS5nZXRPcmllbnQoKS5pbmRleCxkPWxbaF0sZj1jW2hdLHA9bFsxLWhdLG09Y1sxLWhdO2EmJm8uYm94KCJob3Jpem9udGFsIix1LGUuZ2V0KCJzZWxlY3Rvckl0ZW1HYXAiLCEwKSk7dmFyIGc9ZS5nZXQoInNlbGVjdG9yQnV0dG9uR2FwIiwhMCksdj11LmdldEJvdW5kaW5nUmVjdCgpLHk9Wy12LngsLXYueV0sYj1pLmNsb25lKG4pO2EmJihiW2RdPW5bZF0tdltkXS1nKTt2YXIgeD10aGlzLl9sYXlvdXRDb250ZW50QW5kQ29udHJvbGxlcihlLHIsYixoLGQscCxtKTtpZihhKXtpZigiZW5kIj09PXMpeVtoXSs9eFtkXStnO2Vsc2V7dmFyIF89dltkXStnO3lbaF0tPV8seFtmXS09X314W2RdKz12W2RdK2cseVsxLWhdKz14W21dK3hbcF0vMi12W3BdLzIseFtwXT1NYXRoLm1heCh4W3BdLHZbcF0pLHhbbV09TWF0aC5taW4oeFttXSx2W21dK3lbMS1oXSksdS5hdHRyKCJwb3NpdGlvbiIseSl9cmV0dXJuIHh9LF9sYXlvdXRDb250ZW50QW5kQ29udHJvbGxlcjpmdW5jdGlvbihlLHQsbixhLHMsbCxjKXt2YXIgdT10aGlzLmdldENvbnRlbnRHcm91cCgpLGg9dGhpcy5fY29udGFpbmVyR3JvdXAsZD10aGlzLl9jb250cm9sbGVyR3JvdXA7by5ib3goZS5nZXQoIm9yaWVudCIpLHUsZS5nZXQoIml0ZW1HYXAiKSxhP24ud2lkdGg6bnVsbCxhP251bGw6bi5oZWlnaHQpLG8uYm94KCJob3Jpem9udGFsIixkLGUuZ2V0KCJwYWdlQnV0dG9uSXRlbUdhcCIsITApKTt2YXIgZj11LmdldEJvdW5kaW5nUmVjdCgpLHA9ZC5nZXRCb3VuZGluZ1JlY3QoKSxtPXRoaXMuX3Nob3dDb250cm9sbGVyPWZbc10+bltzXSxnPVstZi54LC1mLnldO3R8fChnW2FdPXUucG9zaXRpb25bYV0pO3ZhciB2PVswLDBdLHk9Wy1wLngsLXAueV0sYj1pLnJldHJpZXZlMihlLmdldCgicGFnZUJ1dHRvbkdhcCIsITApLGUuZ2V0KCJpdGVtR2FwIiwhMCkpO2lmKG0pe3ZhciB4PWUuZ2V0KCJwYWdlQnV0dG9uUG9zaXRpb24iLCEwKTsiZW5kIj09PXg/eVthXSs9bltzXS1wW3NdOnZbYV0rPXBbc10rYn15WzEtYV0rPWZbbF0vMi1wW2xdLzIsdS5hdHRyKCJwb3NpdGlvbiIsZyksaC5hdHRyKCJwb3NpdGlvbiIsdiksZC5hdHRyKCJwb3NpdGlvbiIseSk7dmFyIF89e3g6MCx5OjB9O2lmKF9bc109bT9uW3NdOmZbc10sX1tsXT1NYXRoLm1heChmW2xdLHBbbF0pLF9bY109TWF0aC5taW4oMCxwW2NdK3lbMS1hXSksaC5fX3JlY3RTaXplPW5bc10sbSl7dmFyIHc9e3g6MCx5OjB9O3dbc109TWF0aC5tYXgobltzXS1wW3NdLWIsMCksd1tsXT1fW2xdLGguc2V0Q2xpcFBhdGgobmV3IHIuUmVjdCh7c2hhcGU6d30pKSxoLl9fcmVjdFNpemU9d1tzXX1lbHNlIGQuZWFjaENoaWxkKChmdW5jdGlvbihlKXtlLmF0dHIoe2ludmlzaWJsZTohMCxzaWxlbnQ6ITB9KX0pKTt2YXIgUz10aGlzLl9nZXRQYWdlSW5mbyhlKTtyZXR1cm4gbnVsbCE9Uy5wYWdlSW5kZXgmJnIudXBkYXRlUHJvcHModSx7cG9zaXRpb246Uy5jb250ZW50UG9zaXRpb259LCEhbSYmZSksdGhpcy5fdXBkYXRlUGFnZUluZm9WaWV3KGUsUyksX30sX3BhZ2VHbzpmdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5fZ2V0UGFnZUluZm8odClbZV07bnVsbCE9aSYmbi5kaXNwYXRjaEFjdGlvbih7dHlwZToibGVnZW5kU2Nyb2xsIixzY3JvbGxEYXRhSW5kZXg6aSxsZWdlbmRJZDp0LmlkfSl9LF91cGRhdGVQYWdlSW5mb1ZpZXc6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9jb250cm9sbGVyR3JvdXA7aS5lYWNoKFsicGFnZVByZXYiLCJwYWdlTmV4dCJdLChmdW5jdGlvbihpKXt2YXIgcj1udWxsIT10W2krIkRhdGFJbmRleCJdLG89bi5jaGlsZE9mTmFtZShpKTtvJiYoby5zZXRTdHlsZSgiZmlsbCIscj9lLmdldCgicGFnZUljb25Db2xvciIsITApOmUuZ2V0KCJwYWdlSWNvbkluYWN0aXZlQ29sb3IiLCEwKSksby5jdXJzb3I9cj8icG9pbnRlciI6ImRlZmF1bHQiKX0pKTt2YXIgcj1uLmNoaWxkT2ZOYW1lKCJwYWdlVGV4dCIpLG89ZS5nZXQoInBhZ2VGb3JtYXR0ZXIiKSxhPXQucGFnZUluZGV4LHM9bnVsbCE9YT9hKzE6MCxsPXQucGFnZUNvdW50O3ImJm8mJnIuc2V0U3R5bGUoInRleHQiLGkuaXNTdHJpbmcobyk/by5yZXBsYWNlKCJ7Y3VycmVudH0iLHMpLnJlcGxhY2UoInt0b3RhbH0iLGwpOm8oe2N1cnJlbnQ6cyx0b3RhbDpsfSkpfSxfZ2V0UGFnZUluZm86ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXQoInNjcm9sbERhdGFJbmRleCIsITApLG49dGhpcy5nZXRDb250ZW50R3JvdXAoKSxpPXRoaXMuX2NvbnRhaW5lckdyb3VwLl9fcmVjdFNpemUscj1lLmdldE9yaWVudCgpLmluZGV4LG89bFtyXSxhPWNbcl0scz10aGlzLl9maW5kVGFyZ2V0SXRlbUluZGV4KHQpLHU9bi5jaGlsZHJlbigpLGg9dVtzXSxkPXUubGVuZ3RoLGY9ZD8xOjAscD17Y29udGVudFBvc2l0aW9uOm4ucG9zaXRpb24uc2xpY2UoKSxwYWdlQ291bnQ6ZixwYWdlSW5kZXg6Zi0xLHBhZ2VQcmV2RGF0YUluZGV4Om51bGwscGFnZU5leHREYXRhSW5kZXg6bnVsbH07aWYoIWgpcmV0dXJuIHA7dmFyIG09eChoKTtwLmNvbnRlbnRQb3NpdGlvbltyXT0tbS5zO2Zvcih2YXIgZz1zKzEsdj1tLHk9bSxiPW51bGw7Zzw9ZDsrK2cpYj14KHVbZ10pLCghYiYmeS5lPnYucytpfHxiJiYhXyhiLHYucykpJiYodj15Lmk+di5pP3k6Yix2JiYobnVsbD09cC5wYWdlTmV4dERhdGFJbmRleCYmKHAucGFnZU5leHREYXRhSW5kZXg9di5pKSwrK3AucGFnZUNvdW50KSkseT1iO2ZvcihnPXMtMSx2PW0seT1tLGI9bnVsbDtnPj0tMTstLWcpYj14KHVbZ10pLGImJl8oeSxiLnMpfHwhKHYuaTx5LmkpfHwoeT12LG51bGw9PXAucGFnZVByZXZEYXRhSW5kZXgmJihwLnBhZ2VQcmV2RGF0YUluZGV4PXYuaSksKytwLnBhZ2VDb3VudCwrK3AucGFnZUluZGV4KSx2PWI7cmV0dXJuIHA7ZnVuY3Rpb24geChlKXtpZihlKXt2YXIgdD1lLmdldEJvdW5kaW5nUmVjdCgpLG49dFthXStlLnBvc2l0aW9uW3JdO3JldHVybntzOm4sZTpuK3Rbb10saTplLl9fbGVnZW5kRGF0YUluZGV4fX19ZnVuY3Rpb24gXyhlLHQpe3JldHVybiBlLmU+PXQmJmUuczw9dCtpfX0sX2ZpbmRUYXJnZXRJdGVtSW5kZXg6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX3Nob3dDb250cm9sbGVyKXJldHVybiAwO3ZhciB0LG4saT10aGlzLmdldENvbnRlbnRHcm91cCgpO3JldHVybiBpLmVhY2hDaGlsZCgoZnVuY3Rpb24oaSxyKXt2YXIgbz1pLl9fbGVnZW5kRGF0YUluZGV4O251bGw9PW4mJm51bGwhPW8mJihuPXIpLG89PT1lJiYodD1yKX0pKSxudWxsIT10P3Q6bn19KSxoPXU7ZS5leHBvcnRzPWh9LCIwZjU1IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiODRjZSIpLG89ZnVuY3Rpb24oZSx0LG4saSxvKXtyLmNhbGwodGhpcyxlLHQsbiksdGhpcy50eXBlPWl8fCJ2YWx1ZSIsdGhpcy5heGlzSW5kZXg9b307by5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm8sbW9kZWw6bnVsbCxpc0hvcml6b250YWw6ZnVuY3Rpb24oKXtyZXR1cm4iaG9yaXpvbnRhbCIhPT10aGlzLmNvb3JkaW5hdGVTeXN0ZW0uZ2V0TW9kZWwoKS5nZXQoImxheW91dCIpfX0saS5pbmhlcml0cyhvLHIpO3ZhciBhPW87ZS5leHBvcnRzPWF9LCIwZjk5IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNGUwOCIpLHI9KGkuX19ERVZfXyxuKCJlMGQzIikpLG89ci5tYWtlSW5uZXIsYT1yLmdldERhdGFJdGVtVmFsdWUscz1uKCI2ZDhiIiksbD1zLmNyZWF0ZUhhc2hNYXAsYz1zLmVhY2gsdT1zLm1hcCxoPXMuaXNBcnJheSxkPXMuaXNTdHJpbmcsZj1zLmlzT2JqZWN0LHA9cy5pc1R5cGVkQXJyYXksbT1zLmlzQXJyYXlMaWtlLGc9cy5leHRlbmQsdj0ocy5hc3NlcnQsbigiZWM2ZiIpKSx5PW4oIjkzZDAiKSxiPXkuU09VUkNFX0ZPUk1BVF9PUklHSU5BTCx4PXkuU09VUkNFX0ZPUk1BVF9BUlJBWV9ST1dTLF89eS5TT1VSQ0VfRk9STUFUX09CSkVDVF9ST1dTLHc9eS5TT1VSQ0VfRk9STUFUX0tFWUVEX0NPTFVNTlMsUz15LlNPVVJDRV9GT1JNQVRfVU5LTk9XTixDPXkuU09VUkNFX0ZPUk1BVF9UWVBFRF9BUlJBWSxrPXkuU0VSSUVTX0xBWU9VVF9CWV9ST1csVD17TXVzdDoxLE1pZ2h0OjIsTm90OjN9LE09bygpO2Z1bmN0aW9uIEUoZSl7dmFyIHQ9ZS5vcHRpb24uc291cmNlLG49UztpZihwKHQpKW49QztlbHNlIGlmKGgodCkpezA9PT10Lmxlbmd0aCYmKG49eCk7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXt2YXIgbz10W2ldO2lmKG51bGwhPW8pe2lmKGgobykpe249eDticmVha31pZihmKG8pKXtuPV87YnJlYWt9fX19ZWxzZSBpZihmKHQpKXtmb3IodmFyIGEgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGEpJiZtKHRbYV0pKXtuPXc7YnJlYWt9fWVsc2UgaWYobnVsbCE9dCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgZGF0YSIpO00oZSkuc291cmNlRm9ybWF0PW59ZnVuY3Rpb24gSShlKXtyZXR1cm4gTShlKS5zb3VyY2V9ZnVuY3Rpb24gRChlKXtNKGUpLmRhdGFzZXRNYXA9bCgpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9ZS5vcHRpb24sbj10LmRhdGEsaT1wKG4pP0M6YixyPSExLG89dC5zZXJpZXNMYXlvdXRCeSxhPXQuc291cmNlSGVhZGVyLHM9dC5kaW1lbnNpb25zLGw9eihlKTtpZihsKXt2YXIgYz1sLm9wdGlvbjtuPWMuc291cmNlLGk9TShsKS5zb3VyY2VGb3JtYXQscj0hMCxvPW98fGMuc2VyaWVzTGF5b3V0QnksbnVsbD09YSYmKGE9Yy5zb3VyY2VIZWFkZXIpLHM9c3x8Yy5kaW1lbnNpb25zfXZhciB1PU8obixpLG8sYSxzKTtNKGUpLnNvdXJjZT1uZXcgdih7ZGF0YTpuLGZyb21EYXRhc2V0OnIsc2VyaWVzTGF5b3V0Qnk6byxzb3VyY2VGb3JtYXQ6aSxkaW1lbnNpb25zRGVmaW5lOnUuZGltZW5zaW9uc0RlZmluZSxzdGFydEluZGV4OnUuc3RhcnRJbmRleCxkaW1lbnNpb25zRGV0ZWN0Q291bnQ6dS5kaW1lbnNpb25zRGV0ZWN0Q291bnQsZW5jb2RlRGVmaW5lOnQuZW5jb2RlfSl9ZnVuY3Rpb24gTyhlLHQsbixpLHIpe2lmKCFlKXJldHVybntkaW1lbnNpb25zRGVmaW5lOlAocil9O3ZhciBvLHM7aWYodD09PXgpImF1dG8iPT09aXx8bnVsbD09aT9MKChmdW5jdGlvbihlKXtudWxsIT1lJiYiLSIhPT1lJiYoZChlKT9udWxsPT1zJiYocz0xKTpzPTApfSksbixlLDEwKTpzPWk/MTowLHJ8fDEhPT1zfHwocj1bXSxMKChmdW5jdGlvbihlLHQpe3JbdF09bnVsbCE9ZT9lOiIifSksbixlKSksbz1yP3IubGVuZ3RoOm49PT1rP2UubGVuZ3RoOmVbMF0/ZVswXS5sZW5ndGg6bnVsbDtlbHNlIGlmKHQ9PT1fKXJ8fChyPU4oZSkpO2Vsc2UgaWYodD09PXcpcnx8KHI9W10sYyhlLChmdW5jdGlvbihlLHQpe3IucHVzaCh0KX0pKSk7ZWxzZSBpZih0PT09Yil7dmFyIGw9YShlWzBdKTtvPWgobCkmJmwubGVuZ3RofHwxfXJldHVybntzdGFydEluZGV4OnMsZGltZW5zaW9uc0RlZmluZTpQKHIpLGRpbWVuc2lvbnNEZXRlY3RDb3VudDpvfX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWwoKTtyZXR1cm4gdShlLChmdW5jdGlvbihlLG4pe2lmKGU9Zyh7fSxmKGUpP2U6e25hbWU6ZX0pLG51bGw9PWUubmFtZSlyZXR1cm4gZTtlLm5hbWUrPSIiLG51bGw9PWUuZGlzcGxheU5hbWUmJihlLmRpc3BsYXlOYW1lPWUubmFtZSk7dmFyIGk9dC5nZXQoZS5uYW1lKTtyZXR1cm4gaT9lLm5hbWUrPSItIitpLmNvdW50Kys6dC5zZXQoZS5uYW1lLHtjb3VudDoxfSksZX0pKX19ZnVuY3Rpb24gTChlLHQsbixpKXtpZihudWxsPT1pJiYoaT0xLzApLHQ9PT1rKWZvcih2YXIgcj0wO3I8bi5sZW5ndGgmJnI8aTtyKyspZShuW3JdP25bcl1bMF06bnVsbCxyKTtlbHNle3ZhciBvPW5bMF18fFtdO2ZvcihyPTA7cjxvLmxlbmd0aCYmcjxpO3IrKyllKG9bcl0scil9fWZ1bmN0aW9uIE4oZSl7dmFyIHQsbj0wO3doaWxlKG48ZS5sZW5ndGgmJiEodD1lW24rK10pKTtpZih0KXt2YXIgaT1bXTtyZXR1cm4gYyh0LChmdW5jdGlvbihlLHQpe2kucHVzaCh0KX0pKSxpfX1mdW5jdGlvbiBSKGUsdCxuKXt2YXIgaT17fSxyPXoodCk7aWYoIXJ8fCFlKXJldHVybiBpO3ZhciBvLGEscz1bXSxsPVtdLHU9dC5lY01vZGVsLGg9TSh1KS5kYXRhc2V0TWFwLGQ9ci51aWQrIl8iK24uc2VyaWVzTGF5b3V0Qnk7ZT1lLnNsaWNlKCksYyhlLChmdW5jdGlvbih0LG4peyFmKHQpJiYoZVtuXT17bmFtZTp0fSksIm9yZGluYWwiPT09dC50eXBlJiZudWxsPT1vJiYobz1uLGE9ZyhlW25dKSksaVt0Lm5hbWVdPVtdfSkpO3ZhciBwPWguZ2V0KGQpfHxoLnNldChkLHtjYXRlZ29yeVdheURpbTphLHZhbHVlV2F5RGltOjB9KTtmdW5jdGlvbiBtKGUsdCxuKXtmb3IodmFyIGk9MDtpPG47aSsrKWUucHVzaCh0K2kpfWZ1bmN0aW9uIGcoZSl7dmFyIHQ9ZS5kaW1zRGVmO3JldHVybiB0P3QubGVuZ3RoOjF9cmV0dXJuIGMoZSwoZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm5hbWUscj1nKGUpO2lmKG51bGw9PW8pe3ZhciBhPXAudmFsdWVXYXlEaW07bShpW25dLGEsciksbShsLGEscikscC52YWx1ZVdheURpbSs9cn1lbHNlIGlmKG89PT10KW0oaVtuXSwwLHIpLG0ocywwLHIpO2Vsc2V7YT1wLmNhdGVnb3J5V2F5RGltO20oaVtuXSxhLHIpLG0obCxhLHIpLHAuY2F0ZWdvcnlXYXlEaW0rPXJ9fSkpLHMubGVuZ3RoJiYoaS5pdGVtTmFtZT1zKSxsLmxlbmd0aCYmKGkuc2VyaWVzTmFtZT1sKSxpfWZ1bmN0aW9uICQoZSx0LG4pe3ZhciBpPXt9LHI9eihlKTtpZighcilyZXR1cm4gaTt2YXIgbyxhPXQuc291cmNlRm9ybWF0LHM9dC5kaW1lbnNpb25zRGVmaW5lO2EhPT1fJiZhIT09d3x8YyhzLChmdW5jdGlvbihlLHQpeyJuYW1lIj09PShmKGUpP2UubmFtZTplKSYmKG89dCl9KSk7dmFyIGw9ZnVuY3Rpb24oKXtmb3IodmFyIGU9e30saT17fSxyPVtdLGw9MCxjPU1hdGgubWluKDUsbik7bDxjO2wrKyl7dmFyIHU9Rih0LmRhdGEsYSx0LnNlcmllc0xheW91dEJ5LHMsdC5zdGFydEluZGV4LGwpO3IucHVzaCh1KTt2YXIgaD11PT09VC5Ob3Q7aWYoaCYmbnVsbD09ZS52JiZsIT09byYmKGUudj1sKSwobnVsbD09ZS5ufHxlLm49PT1lLnZ8fCFoJiZyW2Uubl09PT1ULk5vdCkmJihlLm49bCksZChlKSYmcltlLm5dIT09VC5Ob3QpcmV0dXJuIGU7aHx8KHU9PT1ULk1pZ2h0JiZudWxsPT1pLnYmJmwhPT1vJiYoaS52PWwpLG51bGwhPWkubiYmaS5uIT09aS52fHwoaS5uPWwpKX1mdW5jdGlvbiBkKGUpe3JldHVybiBudWxsIT1lLnYmJm51bGwhPWUubn1yZXR1cm4gZChlKT9lOmQoaSk/aTpudWxsfSgpO2lmKGwpe2kudmFsdWU9bC52O3ZhciB1PW51bGwhPW8/bzpsLm47aS5pdGVtTmFtZT1bdV0saS5zZXJpZXNOYW1lPVt1XX1yZXR1cm4gaX1mdW5jdGlvbiB6KGUpe3ZhciB0PWUub3B0aW9uLG49dC5kYXRhO2lmKCFuKXJldHVybiBlLmVjTW9kZWwuZ2V0Q29tcG9uZW50KCJkYXRhc2V0Iix0LmRhdGFzZXRJbmRleHx8MCl9ZnVuY3Rpb24gQihlLHQpe3JldHVybiBGKGUuZGF0YSxlLnNvdXJjZUZvcm1hdCxlLnNlcmllc0xheW91dEJ5LGUuZGltZW5zaW9uc0RlZmluZSxlLnN0YXJ0SW5kZXgsdCl9ZnVuY3Rpb24gRihlLHQsbixpLHIsbyl7dmFyIHMsbCxjLHU9NTtpZihwKGUpKXJldHVybiBULk5vdDtpZihpKXt2YXIgbT1pW29dO2YobSk/KGw9bS5uYW1lLGM9bS50eXBlKTpkKG0pJiYobD1tKX1pZihudWxsIT1jKXJldHVybiJvcmRpbmFsIj09PWM/VC5NdXN0OlQuTm90O2lmKHQ9PT14KWlmKG49PT1rKXtmb3IodmFyIGc9ZVtvXSx2PTA7djwoZ3x8W10pLmxlbmd0aCYmdjx1O3YrKylpZihudWxsIT0ocz1NKGdbcit2XSkpKXJldHVybiBzfWVsc2UgZm9yKHY9MDt2PGUubGVuZ3RoJiZ2PHU7disrKXt2YXIgeT1lW3Irdl07aWYoeSYmbnVsbCE9KHM9TSh5W29dKSkpcmV0dXJuIHN9ZWxzZSBpZih0PT09Xyl7aWYoIWwpcmV0dXJuIFQuTm90O2Zvcih2PTA7djxlLmxlbmd0aCYmdjx1O3YrKyl7dmFyIFM9ZVt2XTtpZihTJiZudWxsIT0ocz1NKFNbbF0pKSlyZXR1cm4gc319ZWxzZSBpZih0PT09dyl7aWYoIWwpcmV0dXJuIFQuTm90O2c9ZVtsXTtpZighZ3x8cChnKSlyZXR1cm4gVC5Ob3Q7Zm9yKHY9MDt2PGcubGVuZ3RoJiZ2PHU7disrKWlmKG51bGwhPShzPU0oZ1t2XSkpKXJldHVybiBzfWVsc2UgaWYodD09PWIpZm9yKHY9MDt2PGUubGVuZ3RoJiZ2PHU7disrKXtTPWVbdl07dmFyIEM9YShTKTtpZighaChDKSlyZXR1cm4gVC5Ob3Q7aWYobnVsbCE9KHM9TShDW29dKSkpcmV0dXJuIHN9ZnVuY3Rpb24gTShlKXt2YXIgdD1kKGUpO3JldHVybiBudWxsIT1lJiZpc0Zpbml0ZShlKSYmIiIhPT1lP3Q/VC5NaWdodDpULk5vdDp0JiYiLSIhPT1lP1QuTXVzdDp2b2lkIDB9cmV0dXJuIFQuTm90fXQuQkVfT1JESU5BTD1ULHQuZGV0ZWN0U291cmNlRm9ybWF0PUUsdC5nZXRTb3VyY2U9SSx0LnJlc2V0U291cmNlRGVmYXVsdGVyPUQsdC5wcmVwYXJlU291cmNlPUEsdC5tYWtlU2VyaWVzRW5jb2RlRm9yQXhpc0Nvb3JkU3lzPVIsdC5tYWtlU2VyaWVzRW5jb2RlRm9yTmFtZUJhc2VkPSQsdC5ndWVzc09yZGluYWw9Qn0sIjBmYWUiOmZ1bmN0aW9uKGUsdCxuKXt9LCIwZmQzIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMjMwNiIpLHI9bigiN2U1YiIpLG89bigiNmQ4YiIpLGE9bigiYTE1YSIpLHM9YS5jcmVhdGVTeW1ib2wsbD1uKCI0MDFiIiksYz1uKCI0YTNmIik7ZnVuY3Rpb24gdShlLHQsbil7aS5Hcm91cC5jYWxsKHRoaXMpLHRoaXMuYWRkKHRoaXMuY3JlYXRlTGluZShlLHQsbikpLHRoaXMuX3VwZGF0ZUVmZmVjdFN5bWJvbChlLHQpfXZhciBoPXUucHJvdG90eXBlO2guY3JlYXRlTGluZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5ldyByKGUsdCxuKX0saC5fdXBkYXRlRWZmZWN0U3ltYm9sPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRJdGVtTW9kZWwodCksaT1uLmdldE1vZGVsKCJlZmZlY3QiKSxyPWkuZ2V0KCJzeW1ib2xTaXplIiksYT1pLmdldCgic3ltYm9sIik7by5pc0FycmF5KHIpfHwocj1bcixyXSk7dmFyIGw9aS5nZXQoImNvbG9yIil8fGUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpLGM9dGhpcy5jaGlsZEF0KDEpO3RoaXMuX3N5bWJvbFR5cGUhPT1hJiYodGhpcy5yZW1vdmUoYyksYz1zKGEsLS41LC0uNSwxLDEsbCksYy56Mj0xMDAsYy5jdWxsaW5nPSEwLHRoaXMuYWRkKGMpKSxjJiYoYy5zZXRTdHlsZSgic2hhZG93Q29sb3IiLGwpLGMuc2V0U3R5bGUoaS5nZXRJdGVtU3R5bGUoWyJjb2xvciJdKSksYy5hdHRyKCJzY2FsZSIsciksYy5zZXRDb2xvcihsKSxjLmF0dHIoInNjYWxlIixyKSx0aGlzLl9zeW1ib2xUeXBlPWEsdGhpcy5fc3ltYm9sU2NhbGU9cix0aGlzLl91cGRhdGVFZmZlY3RBbmltYXRpb24oZSxpLHQpKX0saC5fdXBkYXRlRWZmZWN0QW5pbWF0aW9uPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLmNoaWxkQXQoMSk7aWYoaSl7dmFyIHI9dGhpcyxhPWUuZ2V0SXRlbUxheW91dChuKSxzPTFlMyp0LmdldCgicGVyaW9kIiksbD10LmdldCgibG9vcCIpLGM9dC5nZXQoImNvbnN0YW50U3BlZWQiKSx1PW8ucmV0cmlldmUodC5nZXQoImRlbGF5IiksKGZ1bmN0aW9uKHQpe3JldHVybiB0L2UuY291bnQoKSpzLzN9KSksaD0iZnVuY3Rpb24iPT09dHlwZW9mIHU7aWYoaS5pZ25vcmU9ITAsdGhpcy51cGRhdGVBbmltYXRpb25Qb2ludHMoaSxhKSxjPjAmJihzPXRoaXMuZ2V0TGluZUxlbmd0aChpKS9jKjFlMykscyE9PXRoaXMuX3BlcmlvZHx8bCE9PXRoaXMuX2xvb3Ape2kuc3RvcEFuaW1hdGlvbigpO3ZhciBkPXU7aCYmKGQ9dShuKSksaS5fX3Q+MCYmKGQ9LXMqaS5fX3QpLGkuX190PTA7dmFyIGY9aS5hbmltYXRlKCIiLGwpLndoZW4ocyx7X190OjF9KS5kZWxheShkKS5kdXJpbmcoKGZ1bmN0aW9uKCl7ci51cGRhdGVTeW1ib2xQb3NpdGlvbihpKX0pKTtsfHxmLmRvbmUoKGZ1bmN0aW9uKCl7ci5yZW1vdmUoaSl9KSksZi5zdGFydCgpfXRoaXMuX3BlcmlvZD1zLHRoaXMuX2xvb3A9bH19LGguZ2V0TGluZUxlbmd0aD1mdW5jdGlvbihlKXtyZXR1cm4gbC5kaXN0KGUuX19wMSxlLl9fY3AxKStsLmRpc3QoZS5fX2NwMSxlLl9fcDIpfSxoLnVwZGF0ZUFuaW1hdGlvblBvaW50cz1mdW5jdGlvbihlLHQpe2UuX19wMT10WzBdLGUuX19wMj10WzFdLGUuX19jcDE9dFsyXXx8Wyh0WzBdWzBdK3RbMV1bMF0pLzIsKHRbMF1bMV0rdFsxXVsxXSkvMl19LGgudXBkYXRlRGF0YT1mdW5jdGlvbihlLHQsbil7dGhpcy5jaGlsZEF0KDApLnVwZGF0ZURhdGEoZSx0LG4pLHRoaXMuX3VwZGF0ZUVmZmVjdFN5bWJvbChlLHQpfSxoLnVwZGF0ZVN5bWJvbFBvc2l0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX19wMSxuPWUuX19wMixpPWUuX19jcDEscj1lLl9fdCxvPWUucG9zaXRpb24sYT1bb1swXSxvWzFdXSxzPWMucXVhZHJhdGljQXQsdT1jLnF1YWRyYXRpY0Rlcml2YXRpdmVBdDtvWzBdPXModFswXSxpWzBdLG5bMF0sciksb1sxXT1zKHRbMV0saVsxXSxuWzFdLHIpO3ZhciBoPXUodFswXSxpWzBdLG5bMF0sciksZD11KHRbMV0saVsxXSxuWzFdLHIpO2lmKGUucm90YXRpb249LU1hdGguYXRhbjIoZCxoKS1NYXRoLlBJLzIsImxpbmUiPT09dGhpcy5fc3ltYm9sVHlwZXx8InJlY3QiPT09dGhpcy5fc3ltYm9sVHlwZXx8InJvdW5kUmVjdCI9PT10aGlzLl9zeW1ib2xUeXBlKWlmKHZvaWQgMCE9PWUuX19sYXN0VCYmZS5fX2xhc3RUPGUuX190KXt2YXIgZj0xLjA1KmwuZGlzdChhLG8pO2UuYXR0cigic2NhbGUiLFtlLnNjYWxlWzBdLGZdKSwxPT09ciYmKG9bMF09YVswXSsob1swXS1hWzBdKS8yLG9bMV09YVsxXSsob1sxXS1hWzFdKS8yKX1lbHNlIGlmKDE9PT1lLl9fbGFzdFQpe2Y9MipsLmRpc3QodCxvKTtlLmF0dHIoInNjYWxlIixbZS5zY2FsZVswXSxmXSl9ZWxzZSBlLmF0dHIoInNjYWxlIix0aGlzLl9zeW1ib2xTY2FsZSk7ZS5fX2xhc3RUPWUuX190LGUuaWdub3JlPSExfSxoLnVwZGF0ZUxheW91dD1mdW5jdGlvbihlLHQpe3RoaXMuY2hpbGRBdCgwKS51cGRhdGVMYXlvdXQoZSx0KTt2YXIgbj1lLmdldEl0ZW1Nb2RlbCh0KS5nZXRNb2RlbCgiZWZmZWN0Iik7dGhpcy5fdXBkYXRlRWZmZWN0QW5pbWF0aW9uKGUsbix0KX0sby5pbmhlcml0cyh1LGkuR3JvdXApO3ZhciBkPXU7ZS5leHBvcnRzPWR9LCIxMDdjIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiZDAzOSIpO2UuZXhwb3J0cz1pKChmdW5jdGlvbigpe3ZhciBlPVJlZ0V4cCgiKD88YT5iKSIsInN0cmluZyIuY2hhckF0KDUpKTtyZXR1cm4iYiIhPT1lLmV4ZWMoImIiKS5ncm91cHMuYXx8ImJjIiE9PSJiIi5yZXBsYWNlKGUsIiQ8YT5jIil9KSl9LDEwOTg6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIGk9bigiMTdlZCIpLHI9bChpKSxvPW4oImY4OTMiKSxhPWwobykscz0iZnVuY3Rpb24iPT09dHlwZW9mIGEuZGVmYXVsdCYmInN5bWJvbCI9PT10eXBlb2Ygci5kZWZhdWx0P2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgYS5kZWZhdWx0JiZlLmNvbnN0cnVjdG9yPT09YS5kZWZhdWx0JiZlIT09YS5kZWZhdWx0LnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX07ZnVuY3Rpb24gbChlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5kZWZhdWx0PSJmdW5jdGlvbiI9PT10eXBlb2YgYS5kZWZhdWx0JiYic3ltYm9sIj09PXMoci5kZWZhdWx0KT9mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOnMoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIGEuZGVmYXVsdCYmZS5jb25zdHJ1Y3Rvcj09PWEuZGVmYXVsdCYmZSE9PWEuZGVmYXVsdC5wcm90b3R5cGU/InN5bWJvbCI6InVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpzKGUpfX0sIjEwY2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIikscj1uKCI2ZDhiIiksbz1uKCI5ODUwIiksYT1uKCIyYjhjIikscz1uKCJhODkwIiksbD1uKCI4OGIzIiksYz1uKCJiZDllIiksdT1bImluQnJ1c2giLCJvdXRPZkJydXNoIl0saD0iX19lY0JydXNoU2VsZWN0IixkPSJfX2VjSW5CcnVzaFNlbGVjdEV2ZW50IixmPWkuUFJJT1JJVFkuVklTVUFMLkJSVVNIO2Z1bmN0aW9uIHAoZSl7ZS5lYWNoQ29tcG9uZW50KHttYWluVHlwZToiYnJ1c2gifSwoZnVuY3Rpb24odCl7dmFyIG49dC5icnVzaFRhcmdldE1hbmFnZXI9bmV3IGModC5vcHRpb24sZSk7bi5zZXRJbnB1dFJhbmdlcyh0LmFyZWFzLGUpfSkpfWZ1bmN0aW9uIG0oZSx0LG4saSxyKXtpZihyKXt2YXIgbz1lLmdldFpyKCk7aWYoIW9bZF0pe29baF18fChvW2hdPWcpO3ZhciBhPWwuY3JlYXRlT3JVcGRhdGUobyxoLG4sdCk7YShlLGkpfX19ZnVuY3Rpb24gZyhlLHQpe2lmKCFlLmlzRGlzcG9zZWQoKSl7dmFyIG49ZS5nZXRacigpO25bZF09ITAsZS5kaXNwYXRjaEFjdGlvbih7dHlwZToiYnJ1c2hTZWxlY3QiLGJhdGNoOnR9KSxuW2RdPSExfX1mdW5jdGlvbiB2KGUsdCxuLGkpe2Zvcih2YXIgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7dmFyIGE9dFtyXTtpZihlW2EuYnJ1c2hUeXBlXShpLG4sYS5zZWxlY3RvcnMsYSkpcmV0dXJuITB9fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9ZS5icnVzaFNlbGVjdG9yO2lmKHIuaXNTdHJpbmcodCkpe3ZhciBuPVtdO3JldHVybiByLmVhY2gocywoZnVuY3Rpb24oZSxpKXtuW2ldPWZ1bmN0aW9uKG4saSxyLG8pe3ZhciBhPWkuZ2V0SXRlbUxheW91dChuKTtyZXR1cm4gZVt0XShhLHIsbyl9fSkpLG59aWYoci5pc0Z1bmN0aW9uKHQpKXt2YXIgaT17fTtyZXR1cm4gci5lYWNoKHMsKGZ1bmN0aW9uKGUsbil7aVtuXT10fSkpLGl9cmV0dXJuIHR9ZnVuY3Rpb24gYihlLHQpe3ZhciBuPWUub3B0aW9uLnNlcmllc0luZGV4O3JldHVybiBudWxsIT1uJiYiYWxsIiE9PW4mJihyLmlzQXJyYXkobik/ci5pbmRleE9mKG4sdCk8MDp0IT09bil9ZnVuY3Rpb24geChlKXt2YXIgdD1lLnNlbGVjdG9ycz17fTtyZXR1cm4gci5lYWNoKHNbZS5icnVzaFR5cGVdLChmdW5jdGlvbihuLGkpe3RbaV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSx0LGUpfX0pKSxlfWkucmVnaXN0ZXJMYXlvdXQoZiwoZnVuY3Rpb24oZSx0LG4pe2UuZWFjaENvbXBvbmVudCh7bWFpblR5cGU6ImJydXNoIn0sKGZ1bmN0aW9uKGUpe24mJiJ0YWtlR2xvYmFsQ3Vyc29yIj09PW4udHlwZSYmZS5zZXRCcnVzaE9wdGlvbigiYnJ1c2giPT09bi5rZXk/bi5icnVzaE9wdGlvbjp7YnJ1c2hUeXBlOiExfSl9KSkscChlKX0pKSxpLnJlZ2lzdGVyVmlzdWFsKGYsKGZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxvLHM9W107ZS5lYWNoQ29tcG9uZW50KHttYWluVHlwZToiYnJ1c2gifSwoZnVuY3Rpb24odCxuKXt2YXIgbD17YnJ1c2hJZDp0LmlkLGJydXNoSW5kZXg6bixicnVzaE5hbWU6dC5uYW1lLGFyZWFzOnIuY2xvbmUodC5hcmVhcyksc2VsZWN0ZWQ6W119O3MucHVzaChsKTt2YXIgYz10Lm9wdGlvbixoPWMuYnJ1c2hMaW5rLGQ9W10sZj1bXSxwPVtdLG09MDtufHwoaT1jLnRocm90dGxlVHlwZSxvPWMudGhyb3R0bGVEZWxheSk7dmFyIGc9ci5tYXAodC5hcmVhcywoZnVuY3Rpb24oZSl7cmV0dXJuIHgoci5kZWZhdWx0cyh7Ym91bmRpbmdSZWN0Ol9bZS5icnVzaFR5cGVdKGUpfSxlKSl9KSksdz1hLmNyZWF0ZVZpc3VhbE1hcHBpbmdzKHQub3B0aW9uLHUsKGZ1bmN0aW9uKGUpe2UubWFwcGluZ01ldGhvZD0iZml4ZWQifSkpO2Z1bmN0aW9uIFMoZSl7cmV0dXJuImFsbCI9PT1ofHxkW2VdfWZ1bmN0aW9uIEMoZSl7cmV0dXJuISFlLmxlbmd0aH1mdW5jdGlvbiBrKGUsdCl7dmFyIG49ZS5jb29yZGluYXRlU3lzdGVtO218PW4uaGFzQXhpc0JydXNoZWQoKSxTKHQpJiZuLmVhY2hBY3RpdmVTdGF0ZShlLmdldERhdGEoKSwoZnVuY3Rpb24oZSx0KXsiYWN0aXZlIj09PWUmJihmW3RdPTEpfSkpfWZ1bmN0aW9uIFQobixpLG8pe3ZhciBhPXkobik7aWYoYSYmIWIodCxpKSYmKHIuZWFjaChnLChmdW5jdGlvbihpKXthW2kuYnJ1c2hUeXBlXSYmdC5icnVzaFRhcmdldE1hbmFnZXIuY29udHJvbFNlcmllcyhpLG4sZSkmJm8ucHVzaChpKSxtfD1DKG8pfSkpLFMoaSkmJkMobykpKXt2YXIgcz1uLmdldERhdGEoKTtzLmVhY2goKGZ1bmN0aW9uKGUpe3YoYSxvLHMsZSkmJihmW2VdPTEpfSkpfX1yLmlzQXJyYXkoaCkmJnIuZWFjaChoLChmdW5jdGlvbihlKXtkW2VdPTF9KSksZS5lYWNoU2VyaWVzKChmdW5jdGlvbihlLHQpe3ZhciBuPXBbdF09W107InBhcmFsbGVsIj09PWUuc3ViVHlwZT9rKGUsdCxuKTpUKGUsdCxuKX0pKSxlLmVhY2hTZXJpZXMoKGZ1bmN0aW9uKGUsdCl7dmFyIG49e3Nlcmllc0lkOmUuaWQsc2VyaWVzSW5kZXg6dCxzZXJpZXNOYW1lOmUubmFtZSxkYXRhSW5kZXg6W119O2wuc2VsZWN0ZWQucHVzaChuKTt2YXIgaT15KGUpLHI9cFt0XSxvPWUuZ2V0RGF0YSgpLHM9Uyh0KT9mdW5jdGlvbihlKXtyZXR1cm4gZltlXT8obi5kYXRhSW5kZXgucHVzaChvLmdldFJhd0luZGV4KGUpKSwiaW5CcnVzaCIpOiJvdXRPZkJydXNoIn06ZnVuY3Rpb24oZSl7cmV0dXJuIHYoaSxyLG8sZSk/KG4uZGF0YUluZGV4LnB1c2goby5nZXRSYXdJbmRleChlKSksImluQnJ1c2giKToib3V0T2ZCcnVzaCJ9OyhTKHQpP206QyhyKSkmJmEuYXBwbHlWaXN1YWwodSx3LG8scyl9KSl9KSksbSh0LGksbyxzLG4pfSkpO3ZhciBfPXtsaW5lWDpyLm5vb3AsbGluZVk6ci5ub29wLHJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHcoZS5yYW5nZSl9LHBvbHlnb246ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ZS5yYW5nZSxpPTAscj1uLmxlbmd0aDtpPHI7aSsrKXt0PXR8fFtbMS8wLC0xLzBdLFsxLzAsLTEvMF1dO3ZhciBvPW5baV07b1swXTx0WzBdWzBdJiYodFswXVswXT1vWzBdKSxvWzBdPnRbMF1bMV0mJih0WzBdWzFdPW9bMF0pLG9bMV08dFsxXVswXSYmKHRbMV1bMF09b1sxXSksb1sxXT50WzFdWzFdJiYodFsxXVsxXT1vWzFdKX1yZXR1cm4gdCYmdyh0KX19O2Z1bmN0aW9uIHcoZSl7cmV0dXJuIG5ldyBvKGVbMF1bMF0sZVsxXVswXSxlWzBdWzFdLWVbMF1bMF0sZVsxXVsxXS1lWzFdWzBdKX10LmxheW91dENvdmVycz1wfSwiMTBkYiI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSwxMTExOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIik7bigiNjdhOCIpLG4oIjQ3ODQiKTt2YXIgcj1uKCI3Zjk2Iiksbz1uKCI4N2MzIik7aS5yZWdpc3RlclZpc3VhbChyKCJlZmZlY3RTY2F0dGVyIiwiY2lyY2xlIikpLGkucmVnaXN0ZXJMYXlvdXQobygiZWZmZWN0U2NhdHRlciIpKX0sMTE0ODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImE2OTEiKSxyPW4oIjFkODAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9U3RyaW5nKHIodGhpcykpLG49IiIsbz1pKGUpO2lmKG88MHx8bz09MS8wKXRocm93IFJhbmdlRXJyb3IoIldyb25nIG51bWJlciBvZiByZXBldGl0aW9ucyIpO2Zvcig7bz4wOyhvPj4+PTEpJiYodCs9dCkpMSZvJiYobis9dCk7cmV0dXJuIG59fSwxMjc2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiZDc4NCIpLHI9bigiNDRlNyIpLG89bigiODI1YSIpLGE9bigiMWQ4MCIpLHM9bigiNDg0MCIpLGw9bigiOGFhNSIpLGM9bigiNTBjNCIpLHU9bigiMTRjMyIpLGg9bigiOTI2MyIpLGQ9bigiOWY3ZiIpLGY9bigiZDAzOSIpLHA9ZC5VTlNVUFBPUlRFRF9ZLG09W10ucHVzaCxnPU1hdGgubWluLHY9NDI5NDk2NzI5NSx5PSFmKChmdW5jdGlvbigpe3ZhciBlPS8oPzopLyx0PWUuZXhlYztlLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBuPSJhYiIuc3BsaXQoZSk7cmV0dXJuIDIhPT1uLmxlbmd0aHx8ImEiIT09blswXXx8ImIiIT09blsxXX0pKTtpKCJzcGxpdCIsKGZ1bmN0aW9uKGUsdCxuKXt2YXIgaTtyZXR1cm4gaT0iYyI9PSJhYmJjIi5zcGxpdCgvKGIpKi8pWzFdfHw0IT0idGVzdCIuc3BsaXQoLyg/OikvLC0xKS5sZW5ndGh8fDIhPSJhYiIuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGh8fDQhPSIuIi5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGh8fCIuIi5zcGxpdCgvKCkoKS8pLmxlbmd0aD4xfHwiIi5zcGxpdCgvLj8vKS5sZW5ndGg/ZnVuY3Rpb24oZSxuKXt2YXIgaT1TdHJpbmcoYSh0aGlzKSksbz12b2lkIDA9PT1uP3Y6bj4+PjA7aWYoMD09PW8pcmV0dXJuW107aWYodm9pZCAwPT09ZSlyZXR1cm5baV07aWYoIXIoZSkpcmV0dXJuIHQuY2FsbChpLGUsbyk7dmFyIHMsbCxjLHU9W10sZD0oZS5pZ25vcmVDYXNlPyJpIjoiIikrKGUubXVsdGlsaW5lPyJtIjoiIikrKGUudW5pY29kZT8idSI6IiIpKyhlLnN0aWNreT8ieSI6IiIpLGY9MCxwPW5ldyBSZWdFeHAoZS5zb3VyY2UsZCsiZyIpO3doaWxlKHM9aC5jYWxsKHAsaSkpe2lmKGw9cC5sYXN0SW5kZXgsbD5mJiYodS5wdXNoKGkuc2xpY2UoZixzLmluZGV4KSkscy5sZW5ndGg+MSYmcy5pbmRleDxpLmxlbmd0aCYmbS5hcHBseSh1LHMuc2xpY2UoMSkpLGM9c1swXS5sZW5ndGgsZj1sLHUubGVuZ3RoPj1vKSlicmVhaztwLmxhc3RJbmRleD09PXMuaW5kZXgmJnAubGFzdEluZGV4Kyt9cmV0dXJuIGY9PT1pLmxlbmd0aD8hYyYmcC50ZXN0KCIiKXx8dS5wdXNoKCIiKTp1LnB1c2goaS5zbGljZShmKSksdS5sZW5ndGg+bz91LnNsaWNlKDAsbyk6dX06IjAiLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGg/ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdm9pZCAwPT09ZSYmMD09PW4/W106dC5jYWxsKHRoaXMsZSxuKX06dCxbZnVuY3Rpb24odCxuKXt2YXIgcj1hKHRoaXMpLG89dm9pZCAwPT10P3ZvaWQgMDp0W2VdO3JldHVybiB2b2lkIDAhPT1vP28uY2FsbCh0LHIsbik6aS5jYWxsKFN0cmluZyhyKSx0LG4pfSxmdW5jdGlvbihlLHIpe3ZhciBhPW4oaSx0aGlzLGUscixpIT09dCk7aWYoYS5kb25lKXJldHVybiBhLnZhbHVlO3ZhciBoPW8odGhpcyksZD1TdHJpbmcoZSksZj1zKGgsUmVnRXhwKSxtPWgudW5pY29kZSx5PShoLmlnbm9yZUNhc2U/ImkiOiIiKSsoaC5tdWx0aWxpbmU/Im0iOiIiKSsoaC51bmljb2RlPyJ1IjoiIikrKHA/ImciOiJ5IiksYj1uZXcgZihwPyJeKD86IitoLnNvdXJjZSsiKSI6aCx5KSx4PXZvaWQgMD09PXI/djpyPj4+MDtpZigwPT09eClyZXR1cm5bXTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIG51bGw9PT11KGIsZCk/W2RdOltdO3ZhciBfPTAsdz0wLFM9W107d2hpbGUodzxkLmxlbmd0aCl7Yi5sYXN0SW5kZXg9cD8wOnc7dmFyIEMsaz11KGIscD9kLnNsaWNlKHcpOmQpO2lmKG51bGw9PT1rfHwoQz1nKGMoYi5sYXN0SW5kZXgrKHA/dzowKSksZC5sZW5ndGgpKT09PV8pdz1sKGQsdyxtKTtlbHNle2lmKFMucHVzaChkLnNsaWNlKF8sdykpLFMubGVuZ3RoPT09eClyZXR1cm4gUztmb3IodmFyIFQ9MTtUPD1rLmxlbmd0aC0xO1QrKylpZihTLnB1c2goa1tUXSksUy5sZW5ndGg9PT14KXJldHVybiBTO3c9Xz1DfX1yZXR1cm4gUy5wdXNoKGQuc2xpY2UoXykpLFN9XX0pLCF5LHApfSwiMTJmMiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybnttZXRob2RzOntmb2N1czpmdW5jdGlvbigpe3RoaXMuJHJlZnNbZV0uZm9jdXMoKX19fX19LDEzMTA6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGV9ZS5leHBvcnRzPW59LCIxMzNkIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiZTBkMyIpO2Z1bmN0aW9uIG8oZSx0KXt2YXIgbixvPVtdLGE9ZS5zZXJpZXNJbmRleDtpZihudWxsPT1hfHwhKG49dC5nZXRTZXJpZXNCeUluZGV4KGEpKSlyZXR1cm57cG9pbnQ6W119O3ZhciBzPW4uZ2V0RGF0YSgpLGw9ci5xdWVyeURhdGFJbmRleChzLGUpO2lmKG51bGw9PWx8fGw8MHx8aS5pc0FycmF5KGwpKXJldHVybntwb2ludDpbXX07dmFyIGM9cy5nZXRJdGVtR3JhcGhpY0VsKGwpLHU9bi5jb29yZGluYXRlU3lzdGVtO2lmKG4uZ2V0VG9vbHRpcFBvc2l0aW9uKW89bi5nZXRUb29sdGlwUG9zaXRpb24obCl8fFtdO2Vsc2UgaWYodSYmdS5kYXRhVG9Qb2ludClvPXUuZGF0YVRvUG9pbnQocy5nZXRWYWx1ZXMoaS5tYXAodS5kaW1lbnNpb25zLChmdW5jdGlvbihlKXtyZXR1cm4gcy5tYXBEaW1lbnNpb24oZSl9KSksbCwhMCkpfHxbXTtlbHNlIGlmKGMpe3ZhciBoPWMuZ2V0Qm91bmRpbmdSZWN0KCkuY2xvbmUoKTtoLmFwcGx5VHJhbnNmb3JtKGMudHJhbnNmb3JtKSxvPVtoLngraC53aWR0aC8yLGgueStoLmhlaWdodC8yXX1yZXR1cm57cG9pbnQ6byxlbDpjfX1lLmV4cG9ydHM9b30sMTQxODpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiYTE1YSIpLG89ci5jcmVhdGVTeW1ib2wsYT1uKCIyMzA2Iikscz1uKCIzODQyIiksbD1zLnBhcnNlUGVyY2VudCxjPW4oImM3NzUiKSx1PWMuZ2V0RGVmYXVsdExhYmVsO2Z1bmN0aW9uIGgoZSx0LG4pe2EuR3JvdXAuY2FsbCh0aGlzKSx0aGlzLnVwZGF0ZURhdGEoZSx0LG4pfXZhciBkPWgucHJvdG90eXBlLGY9aC5nZXRTeW1ib2xTaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRJdGVtVmlzdWFsKHQsInN5bWJvbFNpemUiKTtyZXR1cm4gbiBpbnN0YW5jZW9mIEFycmF5P24uc2xpY2UoKTpbK24sK25dfTtmdW5jdGlvbiBwKGUpe3JldHVybltlWzBdLzIsZVsxXS8yXX1mdW5jdGlvbiBtKGUsdCl7dGhpcy5wYXJlbnQuZHJpZnQoZSx0KX1kLl9jcmVhdGVTeW1ib2w9ZnVuY3Rpb24oZSx0LG4saSxyKXt0aGlzLnJlbW92ZUFsbCgpO3ZhciBhPXQuZ2V0SXRlbVZpc3VhbChuLCJjb2xvciIpLHM9byhlLC0xLC0xLDIsMixhLHIpO3MuYXR0cih7ejI6MTAwLGN1bGxpbmc6ITAsc2NhbGU6cChpKX0pLHMuZHJpZnQ9bSx0aGlzLl9zeW1ib2xUeXBlPWUsdGhpcy5hZGQocyl9LGQuc3RvcFN5bWJvbEFuaW1hdGlvbj1mdW5jdGlvbihlKXt0aGlzLmNoaWxkQXQoMCkuc3RvcEFuaW1hdGlvbihlKX0sZC5nZXRTeW1ib2xQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRBdCgwKX0sZC5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkQXQoMCkuc2NhbGV9LGQuaGlnaGxpZ2h0PWZ1bmN0aW9uKCl7dGhpcy5jaGlsZEF0KDApLnRyaWdnZXIoImVtcGhhc2lzIil9LGQuZG93bnBsYXk9ZnVuY3Rpb24oKXt0aGlzLmNoaWxkQXQoMCkudHJpZ2dlcigibm9ybWFsIil9LGQuc2V0Wj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY2hpbGRBdCgwKTtuLnpsZXZlbD1lLG4uej10fSxkLnNldERyYWdnYWJsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNoaWxkQXQoMCk7dC5kcmFnZ2FibGU9ZSx0LmN1cnNvcj1lPyJtb3ZlIjp0LmN1cnNvcn0sZC51cGRhdGVEYXRhPWZ1bmN0aW9uKGUsdCxuKXt0aGlzLnNpbGVudD0hMTt2YXIgaT1lLmdldEl0ZW1WaXN1YWwodCwic3ltYm9sIil8fCJjaXJjbGUiLHI9ZS5ob3N0TW9kZWwsbz1mKGUsdCkscz1pIT09dGhpcy5fc3ltYm9sVHlwZTtpZihzKXt2YXIgbD1lLmdldEl0ZW1WaXN1YWwodCwic3ltYm9sS2VlcEFzcGVjdCIpO3RoaXMuX2NyZWF0ZVN5bWJvbChpLGUsdCxvLGwpfWVsc2V7dmFyIGM9dGhpcy5jaGlsZEF0KDApO2Muc2lsZW50PSExLGEudXBkYXRlUHJvcHMoYyx7c2NhbGU6cChvKX0scix0KX1pZih0aGlzLl91cGRhdGVDb21tb24oZSx0LG8sbikscyl7Yz10aGlzLmNoaWxkQXQoMCk7dmFyIHU9biYmbi5mYWRlSW4saD17c2NhbGU6Yy5zY2FsZS5zbGljZSgpfTt1JiYoaC5zdHlsZT17b3BhY2l0eTpjLnN0eWxlLm9wYWNpdHl9KSxjLnNjYWxlPVswLDBdLHUmJihjLnN0eWxlLm9wYWNpdHk9MCksYS5pbml0UHJvcHMoYyxoLHIsdCl9dGhpcy5fc2VyaWVzTW9kZWw9cn07dmFyIGc9WyJpdGVtU3R5bGUiXSx2PVsiZW1waGFzaXMiLCJpdGVtU3R5bGUiXSx5PVsibGFiZWwiXSxiPVsiZW1waGFzaXMiLCJsYWJlbCJdO2Z1bmN0aW9uIHgoZSx0KXtpZighdGhpcy5pbmNyZW1lbnRhbCYmIXRoaXMudXNlSG92ZXJMYXllcilpZigiZW1waGFzaXMiPT09dCl7dmFyIG49dGhpcy5fX3N5bWJvbE9yaWdpbmFsU2NhbGUsaT1uWzFdL25bMF0scj17c2NhbGU6W01hdGgubWF4KDEuMSpuWzBdLG5bMF0rMyksTWF0aC5tYXgoMS4xKm5bMV0sblsxXSszKmkpXX07dGhpcy5hbmltYXRlVG8ociw0MDAsImVsYXN0aWNPdXQiKX1lbHNlIm5vcm1hbCI9PT10JiZ0aGlzLmFuaW1hdGVUbyh7c2NhbGU6dGhpcy5fX3N5bWJvbE9yaWdpbmFsU2NhbGV9LDQwMCwiZWxhc3RpY091dCIpfWQuX3VwZGF0ZUNvbW1vbj1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz10aGlzLmNoaWxkQXQoMCkscz1lLmhvc3RNb2RlbCxjPWUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpOyJpbWFnZSIhPT1vLnR5cGU/by51c2VTdHlsZSh7c3Ryb2tlTm9TY2FsZTohMH0pOm8uc2V0U3R5bGUoe29wYWNpdHk6MSxzaGFkb3dCbHVyOm51bGwsc2hhZG93T2Zmc2V0WDpudWxsLHNoYWRvd09mZnNldFk6bnVsbCxzaGFkb3dDb2xvcjpudWxsfSk7dmFyIGg9ciYmci5pdGVtU3R5bGUsZD1yJiZyLmhvdmVySXRlbVN0eWxlLGY9ciYmci5zeW1ib2xPZmZzZXQsbT1yJiZyLmxhYmVsTW9kZWwsXz1yJiZyLmhvdmVyTGFiZWxNb2RlbCx3PXImJnIuaG92ZXJBbmltYXRpb24sUz1yJiZyLmN1cnNvclN0eWxlO2lmKCFyfHxlLmhhc0l0ZW1PcHRpb24pe3ZhciBDPXImJnIuaXRlbU1vZGVsP3IuaXRlbU1vZGVsOmUuZ2V0SXRlbU1vZGVsKHQpO2g9Qy5nZXRNb2RlbChnKS5nZXRJdGVtU3R5bGUoWyJjb2xvciJdKSxkPUMuZ2V0TW9kZWwodikuZ2V0SXRlbVN0eWxlKCksZj1DLmdldFNoYWxsb3coInN5bWJvbE9mZnNldCIpLG09Qy5nZXRNb2RlbCh5KSxfPUMuZ2V0TW9kZWwoYiksdz1DLmdldFNoYWxsb3coImhvdmVyQW5pbWF0aW9uIiksUz1DLmdldFNoYWxsb3coImN1cnNvciIpfWVsc2UgZD1pLmV4dGVuZCh7fSxkKTt2YXIgaz1vLnN0eWxlLFQ9ZS5nZXRJdGVtVmlzdWFsKHQsInN5bWJvbFJvdGF0ZSIpO28uYXR0cigicm90YXRpb24iLChUfHwwKSpNYXRoLlBJLzE4MHx8MCksZiYmby5hdHRyKCJwb3NpdGlvbiIsW2woZlswXSxuWzBdKSxsKGZbMV0sblsxXSldKSxTJiZvLmF0dHIoImN1cnNvciIsUyksby5zZXRDb2xvcihjLHImJnIuc3ltYm9sSW5uZXJDb2xvciksby5zZXRTdHlsZShoKTt2YXIgTT1lLmdldEl0ZW1WaXN1YWwodCwib3BhY2l0eSIpO251bGwhPU0mJihrLm9wYWNpdHk9TSk7dmFyIEU9ZS5nZXRJdGVtVmlzdWFsKHQsImxpZnRaIiksST1vLl9fejJPcmlnaW47bnVsbCE9RT9udWxsPT1JJiYoby5fX3oyT3JpZ2luPW8uejIsby56Mis9RSk6bnVsbCE9SSYmKG8uejI9SSxvLl9fejJPcmlnaW49bnVsbCk7dmFyIEQ9ciYmci51c2VOYW1lTGFiZWw7ZnVuY3Rpb24gQSh0LG4pe3JldHVybiBEP2UuZ2V0TmFtZSh0KTp1KGUsdCl9YS5zZXRMYWJlbFN0eWxlKGssZCxtLF8se2xhYmVsRmV0Y2hlcjpzLGxhYmVsRGF0YUluZGV4OnQsZGVmYXVsdFRleHQ6QSxpc1JlY3RUZXh0OiEwLGF1dG9Db2xvcjpjfSksby5fX3N5bWJvbE9yaWdpbmFsU2NhbGU9cChuKSxvLmhvdmVyU3R5bGU9ZCxvLmhpZ2hEb3duT25VcGRhdGU9dyYmcy5pc0FuaW1hdGlvbkVuYWJsZWQoKT94Om51bGwsYS5zZXRIb3ZlclN0eWxlKG8pfSxkLmZhZGVPdXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNoaWxkQXQoMCk7dGhpcy5zaWxlbnQ9bi5zaWxlbnQ9ITAsKCF0fHwhdC5rZWVwTGFiZWwpJiYobi5zdHlsZS50ZXh0PW51bGwpLGEudXBkYXRlUHJvcHMobix7c3R5bGU6e29wYWNpdHk6MH0sc2NhbGU6WzAsMF19LHRoaXMuX3Nlcmllc01vZGVsLHRoaXMuZGF0YUluZGV4LGUpfSxpLmluaGVyaXRzKGgsYS5Hcm91cCk7dmFyIF89aDtlLmV4cG9ydHM9X30sMTQ2NjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiMjMwNiIpLG89bigiNmQ4YiIpLGE9bigiYTE1YSIpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIG8uaXNBcnJheShlKXx8KGU9WytlLCtlXSksZX12YXIgbD1pLmV4dGVuZENoYXJ0Vmlldyh7dHlwZToicmFkYXIiLHJlbmRlcjpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5jb29yZGluYXRlU3lzdGVtLGw9dGhpcy5ncm91cCxjPWUuZ2V0RGF0YSgpLHU9dGhpcy5fZGF0YTtmdW5jdGlvbiBoKGUsdCl7dmFyIG49ZS5nZXRJdGVtVmlzdWFsKHQsInN5bWJvbCIpfHwiY2lyY2xlIixpPWUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpO2lmKCJub25lIiE9PW4pe3ZhciByPXMoZS5nZXRJdGVtVmlzdWFsKHQsInN5bWJvbFNpemUiKSksbz1hLmNyZWF0ZVN5bWJvbChuLC0xLC0xLDIsMixpKSxsPWUuZ2V0SXRlbVZpc3VhbCh0LCJzeW1ib2xSb3RhdGUiKXx8MDtyZXR1cm4gby5hdHRyKHtzdHlsZTp7c3Ryb2tlTm9TY2FsZTohMH0sejI6MTAwLHNjYWxlOltyWzBdLzIsclsxXS8yXSxyb3RhdGlvbjpsKk1hdGguUEkvMTgwfHwwfSksb319ZnVuY3Rpb24gZCh0LG4saSxvLGEscyl7aS5yZW1vdmVBbGwoKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoLTE7bCsrKXt2YXIgYz1oKG8sYSk7YyYmKGMuX19kaW1JZHg9bCx0W2xdPyhjLmF0dHIoInBvc2l0aW9uIix0W2xdKSxyW3M/ImluaXRQcm9wcyI6InVwZGF0ZVByb3BzIl0oYyx7cG9zaXRpb246bltsXX0sZSxhKSk6Yy5hdHRyKCJwb3NpdGlvbiIsbltsXSksaS5hZGQoYykpfX1mdW5jdGlvbiBmKGUpe3JldHVybiBvLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm5baS5jeCxpLmN5XX0pKX1jLmRpZmYodSkuYWRkKChmdW5jdGlvbih0KXt2YXIgbj1jLmdldEl0ZW1MYXlvdXQodCk7aWYobil7dmFyIGk9bmV3IHIuUG9seWdvbixvPW5ldyByLlBvbHlsaW5lLGE9e3NoYXBlOntwb2ludHM6bn19O2kuc2hhcGUucG9pbnRzPWYobiksby5zaGFwZS5wb2ludHM9ZihuKSxyLmluaXRQcm9wcyhpLGEsZSx0KSxyLmluaXRQcm9wcyhvLGEsZSx0KTt2YXIgcz1uZXcgci5Hcm91cCxsPW5ldyByLkdyb3VwO3MuYWRkKG8pLHMuYWRkKGkpLHMuYWRkKGwpLGQoby5zaGFwZS5wb2ludHMsbixsLGMsdCwhMCksYy5zZXRJdGVtR3JhcGhpY0VsKHQscyl9fSkpLnVwZGF0ZSgoZnVuY3Rpb24odCxuKXt2YXIgaT11LmdldEl0ZW1HcmFwaGljRWwobiksbz1pLmNoaWxkQXQoMCksYT1pLmNoaWxkQXQoMSkscz1pLmNoaWxkQXQoMiksbD17c2hhcGU6e3BvaW50czpjLmdldEl0ZW1MYXlvdXQodCl9fTtsLnNoYXBlLnBvaW50cyYmKGQoby5zaGFwZS5wb2ludHMsbC5zaGFwZS5wb2ludHMscyxjLHQsITEpLHIudXBkYXRlUHJvcHMobyxsLGUpLHIudXBkYXRlUHJvcHMoYSxsLGUpLGMuc2V0SXRlbUdyYXBoaWNFbCh0LGkpKX0pKS5yZW1vdmUoKGZ1bmN0aW9uKGUpe2wucmVtb3ZlKHUuZ2V0SXRlbUdyYXBoaWNFbChlKSl9KSkuZXhlY3V0ZSgpLGMuZWFjaEl0ZW1HcmFwaGljRWwoKGZ1bmN0aW9uKGUsdCl7dmFyIG49Yy5nZXRJdGVtTW9kZWwodCksaT1lLmNoaWxkQXQoMCksYT1lLmNoaWxkQXQoMSkscz1lLmNoaWxkQXQoMiksdT1jLmdldEl0ZW1WaXN1YWwodCwiY29sb3IiKTtsLmFkZChlKSxpLnVzZVN0eWxlKG8uZGVmYXVsdHMobi5nZXRNb2RlbCgibGluZVN0eWxlIikuZ2V0TGluZVN0eWxlKCkse2ZpbGw6Im5vbmUiLHN0cm9rZTp1fSkpLGkuaG92ZXJTdHlsZT1uLmdldE1vZGVsKCJlbXBoYXNpcy5saW5lU3R5bGUiKS5nZXRMaW5lU3R5bGUoKTt2YXIgaD1uLmdldE1vZGVsKCJhcmVhU3R5bGUiKSxkPW4uZ2V0TW9kZWwoImVtcGhhc2lzLmFyZWFTdHlsZSIpLGY9aC5pc0VtcHR5KCkmJmgucGFyZW50TW9kZWwuaXNFbXB0eSgpLHA9ZC5pc0VtcHR5KCkmJmQucGFyZW50TW9kZWwuaXNFbXB0eSgpO3A9cCYmZixhLmlnbm9yZT1mLGEudXNlU3R5bGUoby5kZWZhdWx0cyhoLmdldEFyZWFTdHlsZSgpLHtmaWxsOnUsb3BhY2l0eTouN30pKSxhLmhvdmVyU3R5bGU9ZC5nZXRBcmVhU3R5bGUoKTt2YXIgbT1uLmdldE1vZGVsKCJpdGVtU3R5bGUiKS5nZXRJdGVtU3R5bGUoWyJjb2xvciJdKSxnPW4uZ2V0TW9kZWwoImVtcGhhc2lzLml0ZW1TdHlsZSIpLmdldEl0ZW1TdHlsZSgpLHY9bi5nZXRNb2RlbCgibGFiZWwiKSx5PW4uZ2V0TW9kZWwoImVtcGhhc2lzLmxhYmVsIik7cy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe2Uuc2V0U3R5bGUobSksZS5ob3ZlclN0eWxlPW8uY2xvbmUoZyk7dmFyIG49Yy5nZXQoYy5kaW1lbnNpb25zW2UuX19kaW1JZHhdLHQpOyhudWxsPT1ufHxpc05hTihuKSkmJihuPSIiKSxyLnNldExhYmVsU3R5bGUoZS5zdHlsZSxlLmhvdmVyU3R5bGUsdix5LHtsYWJlbEZldGNoZXI6Yy5ob3N0TW9kZWwsbGFiZWxEYXRhSW5kZXg6dCxsYWJlbERpbUluZGV4OmUuX19kaW1JZHgsZGVmYXVsdFRleHQ6bixhdXRvQ29sb3I6dSxpc1JlY3RUZXh0OiEwfSl9KSksZS5oaWdoRG93bk9uVXBkYXRlPWZ1bmN0aW9uKGUsdCl7YS5hdHRyKCJpZ25vcmUiLCJlbXBoYXNpcyI9PT10P3A6Zil9LHIuc2V0SG92ZXJTdHlsZShlKX0pKSx0aGlzLl9kYXRhPWN9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuZ3JvdXAucmVtb3ZlQWxsKCksdGhpcy5fZGF0YT1udWxsfSxkaXNwb3NlOmZ1bmN0aW9uKCl7fX0pO2UuZXhwb3J0cz1sfSwiMTRjMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImM2YjYiKSxyPW4oIjkyNjMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4ZWM7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBuKXt2YXIgbz1uLmNhbGwoZSx0KTtpZigib2JqZWN0IiE9PXR5cGVvZiBvKXRocm93IFR5cGVFcnJvcigiUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsIik7cmV0dXJuIG99aWYoIlJlZ0V4cCIhPT1pKGUpKXRocm93IFR5cGVFcnJvcigiUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlciIpO3JldHVybiByLmNhbGwoZSx0KX19LCIxNGQzIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMjMwNiIpLG89bigiZmFiMiIpLGE9bigiNjY3OSIpLHM9WyJheGlzTGluZSIsImF4aXNUaWNrTGFiZWwiLCJheGlzTmFtZSJdLGw9WyJzcGxpdExpbmUiLCJzcGxpdEFyZWEiLCJtaW5vclNwbGl0TGluZSJdLGM9YS5leHRlbmQoe3R5cGU6InJhZGl1c0F4aXMiLGF4aXNQb2ludGVyQ2xhc3M6IlBvbGFyQXhpc1BvaW50ZXIiLHJlbmRlcjpmdW5jdGlvbihlLHQpe2lmKHRoaXMuZ3JvdXAucmVtb3ZlQWxsKCksZS5nZXQoInNob3ciKSl7dmFyIG49ZS5heGlzLHI9bi5wb2xhcixhPXIuZ2V0QW5nbGVBeGlzKCksYz1uLmdldFRpY2tzQ29vcmRzKCksaD1uLmdldE1pbm9yVGlja3NDb29yZHMoKSxkPWEuZ2V0RXh0ZW50KClbMF0sZj1uLmdldEV4dGVudCgpLHA9dShyLGUsZCksbT1uZXcgbyhlLHApO2kuZWFjaChzLG0uYWRkLG0pLHRoaXMuZ3JvdXAuYWRkKG0uZ2V0R3JvdXAoKSksaS5lYWNoKGwsKGZ1bmN0aW9uKHQpe2UuZ2V0KHQrIi5zaG93IikmJiFuLnNjYWxlLmlzQmxhbmsoKSYmdGhpc1siXyIrdF0oZSxyLGQsZixjLGgpfSksdGhpcyl9fSxfc3BsaXRMaW5lOmZ1bmN0aW9uKGUsdCxuLG8sYSl7dmFyIHM9ZS5nZXRNb2RlbCgic3BsaXRMaW5lIiksbD1zLmdldE1vZGVsKCJsaW5lU3R5bGUiKSxjPWwuZ2V0KCJjb2xvciIpLHU9MDtjPWMgaW5zdGFuY2VvZiBBcnJheT9jOltjXTtmb3IodmFyIGg9W10sZD0wO2Q8YS5sZW5ndGg7ZCsrKXt2YXIgZj11KyslYy5sZW5ndGg7aFtmXT1oW2ZdfHxbXSxoW2ZdLnB1c2gobmV3IHIuQ2lyY2xlKHtzaGFwZTp7Y3g6dC5jeCxjeTp0LmN5LHI6YVtkXS5jb29yZH19KSl9Zm9yKGQ9MDtkPGgubGVuZ3RoO2QrKyl0aGlzLmdyb3VwLmFkZChyLm1lcmdlUGF0aChoW2RdLHtzdHlsZTppLmRlZmF1bHRzKHtzdHJva2U6Y1tkJWMubGVuZ3RoXSxmaWxsOm51bGx9LGwuZ2V0TGluZVN0eWxlKCkpLHNpbGVudDohMH0pKX0sX21pbm9yU3BsaXRMaW5lOmZ1bmN0aW9uKGUsdCxuLG8sYSxzKXtpZihzLmxlbmd0aCl7Zm9yKHZhciBsPWUuZ2V0TW9kZWwoIm1pbm9yU3BsaXRMaW5lIiksYz1sLmdldE1vZGVsKCJsaW5lU3R5bGUiKSx1PVtdLGg9MDtoPHMubGVuZ3RoO2grKylmb3IodmFyIGQ9MDtkPHNbaF0ubGVuZ3RoO2QrKyl1LnB1c2gobmV3IHIuQ2lyY2xlKHtzaGFwZTp7Y3g6dC5jeCxjeTp0LmN5LHI6c1toXVtkXS5jb29yZH19KSk7dGhpcy5ncm91cC5hZGQoci5tZXJnZVBhdGgodSx7c3R5bGU6aS5kZWZhdWx0cyh7ZmlsbDpudWxsfSxjLmdldExpbmVTdHlsZSgpKSxzaWxlbnQ6ITB9KSl9fSxfc3BsaXRBcmVhOmZ1bmN0aW9uKGUsdCxuLG8sYSl7aWYoYS5sZW5ndGgpe3ZhciBzPWUuZ2V0TW9kZWwoInNwbGl0QXJlYSIpLGw9cy5nZXRNb2RlbCgiYXJlYVN0eWxlIiksYz1sLmdldCgiY29sb3IiKSx1PTA7Yz1jIGluc3RhbmNlb2YgQXJyYXk/YzpbY107Zm9yKHZhciBoPVtdLGQ9YVswXS5jb29yZCxmPTE7ZjxhLmxlbmd0aDtmKyspe3ZhciBwPXUrKyVjLmxlbmd0aDtoW3BdPWhbcF18fFtdLGhbcF0ucHVzaChuZXcgci5TZWN0b3Ioe3NoYXBlOntjeDp0LmN4LGN5OnQuY3kscjA6ZCxyOmFbZl0uY29vcmQsc3RhcnRBbmdsZTowLGVuZEFuZ2xlOjIqTWF0aC5QSX0sc2lsZW50OiEwfSkpLGQ9YVtmXS5jb29yZH1mb3IoZj0wO2Y8aC5sZW5ndGg7ZisrKXRoaXMuZ3JvdXAuYWRkKHIubWVyZ2VQYXRoKGhbZl0se3N0eWxlOmkuZGVmYXVsdHMoe2ZpbGw6Y1tmJWMubGVuZ3RoXX0sbC5nZXRBcmVhU3R5bGUoKSksc2lsZW50OiEwfSkpfX19KTtmdW5jdGlvbiB1KGUsdCxuKXtyZXR1cm57cG9zaXRpb246W2UuY3gsZS5jeV0scm90YXRpb246bi8xODAqTWF0aC5QSSxsYWJlbERpcmVjdGlvbjotMSx0aWNrRGlyZWN0aW9uOi0xLG5hbWVEaXJlY3Rpb246MSxsYWJlbFJvdGF0ZTp0LmdldE1vZGVsKCJheGlzTGFiZWwiKS5nZXQoInJvdGF0ZSIpLHoyOjF9fWUuZXhwb3J0cz1jfSwiMTRlOSI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKGkpe2lmKHRbaV0pcmV0dXJuIHRbaV0uZXhwb3J0czt2YXIgcj10W2ldPXtpOmksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtpXS5jYWxsKHIuZXhwb3J0cyxyLHIuZXhwb3J0cyxuKSxyLmw9ITAsci5leHBvcnRzfXJldHVybiBuLm09ZSxuLmM9dCxuLmQ9ZnVuY3Rpb24oZSx0LGkpe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDppfSl9LG4ucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1uKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiYib2JqZWN0Ij09PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJiJzdHJpbmciIT10eXBlb2YgZSlmb3IodmFyIHIgaW4gZSluLmQoaSxyLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwscikpO3JldHVybiBpfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGVbImRlZmF1bHQiXX06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LCJhIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD0iL2Rpc3QvIixuKG4ucz0xMzEpfSh7MTMxOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpO3ZhciBpPW4oMTYpLHI9bigzOCksbz1uLm4ociksYT1uKDMpLHM9bigyKSxsPXt2ZXJ0aWNhbDp7b2Zmc2V0OiJvZmZzZXRIZWlnaHQiLHNjcm9sbDoic2Nyb2xsVG9wIixzY3JvbGxTaXplOiJzY3JvbGxIZWlnaHQiLHNpemU6ImhlaWdodCIsa2V5OiJ2ZXJ0aWNhbCIsYXhpczoiWSIsY2xpZW50OiJjbGllbnRZIixkaXJlY3Rpb246InRvcCJ9LGhvcml6b250YWw6e29mZnNldDoib2Zmc2V0V2lkdGgiLHNjcm9sbDoic2Nyb2xsTGVmdCIsc2Nyb2xsU2l6ZToic2Nyb2xsV2lkdGgiLHNpemU6IndpZHRoIixrZXk6Imhvcml6b250YWwiLGF4aXM6IlgiLGNsaWVudDoiY2xpZW50WCIsZGlyZWN0aW9uOiJsZWZ0In19O2Z1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5tb3ZlLG49ZS5zaXplLGk9ZS5iYXIscj17fSxvPSJ0cmFuc2xhdGUiK2kuYXhpcysiKCIrdCsiJSkiO3JldHVybiByW2kuc2l6ZV09bixyLnRyYW5zZm9ybT1vLHIubXNUcmFuc2Zvcm09byxyLndlYmtpdFRyYW5zZm9ybT1vLHJ9dmFyIHU9e25hbWU6IkJhciIscHJvcHM6e3ZlcnRpY2FsOkJvb2xlYW4sc2l6ZTpTdHJpbmcsbW92ZTpOdW1iZXJ9LGNvbXB1dGVkOntiYXI6ZnVuY3Rpb24oKXtyZXR1cm4gbFt0aGlzLnZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwiXX0sd3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQud3JhcH19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNpemUsbj10aGlzLm1vdmUsaT10aGlzLmJhcjtyZXR1cm4gZSgiZGl2Iix7Y2xhc3M6WyJlbC1zY3JvbGxiYXJfX2JhciIsImlzLSIraS5rZXldLG9uOnttb3VzZWRvd246dGhpcy5jbGlja1RyYWNrSGFuZGxlcn19LFtlKCJkaXYiLHtyZWY6InRodW1iIixjbGFzczoiZWwtc2Nyb2xsYmFyX190aHVtYiIsb246e21vdXNlZG93bjp0aGlzLmNsaWNrVGh1bWJIYW5kbGVyfSxzdHlsZTpjKHtzaXplOnQsbW92ZTpuLGJhcjppfSl9KV0pfSxtZXRob2RzOntjbGlja1RodW1iSGFuZGxlcjpmdW5jdGlvbihlKXtlLmN0cmxLZXl8fDI9PT1lLmJ1dHRvbnx8KHRoaXMuc3RhcnREcmFnKGUpLHRoaXNbdGhpcy5iYXIuYXhpc109ZS5jdXJyZW50VGFyZ2V0W3RoaXMuYmFyLm9mZnNldF0tKGVbdGhpcy5iYXIuY2xpZW50XS1lLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXSkpfSxjbGlja1RyYWNrSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1NYXRoLmFicyhlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dLWVbdGhpcy5iYXIuY2xpZW50XSksbj10aGlzLiRyZWZzLnRodW1iW3RoaXMuYmFyLm9mZnNldF0vMixpPTEwMCoodC1uKS90aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO3RoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdPWkqdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdLzEwMH0sc3RhcnREcmFnOmZ1bmN0aW9uKGUpe2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5jdXJzb3JEb3duPSEwLE9iamVjdChzWyJvbiJdKShkb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlciksT2JqZWN0KHNbIm9uIl0pKGRvY3VtZW50LCJtb3VzZXVwIix0aGlzLm1vdXNlVXBEb2N1bWVudEhhbmRsZXIpLGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcjpmdW5jdGlvbihlKXtpZighMSE9PXRoaXMuY3Vyc29yRG93bil7dmFyIHQ9dGhpc1t0aGlzLmJhci5heGlzXTtpZih0KXt2YXIgbj0tMSoodGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXS1lW3RoaXMuYmFyLmNsaWVudF0pLGk9dGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdLXQscj0xMDAqKG4taSkvdGhpcy4kZWxbdGhpcy5iYXIub2Zmc2V0XTt0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXT1yKnRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxTaXplXS8xMDB9fX0sbW91c2VVcERvY3VtZW50SGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLmN1cnNvckRvd249ITEsdGhpc1t0aGlzLmJhci5heGlzXT0wLE9iamVjdChzWyJvZmYiXSkoZG9jdW1lbnQsIm1vdXNlbW92ZSIsdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpLGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9bnVsbH19LGRlc3Ryb3llZDpmdW5jdGlvbigpe09iamVjdChzWyJvZmYiXSkoZG9jdW1lbnQsIm1vdXNldXAiLHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcil9fSxoPXtuYW1lOiJFbFNjcm9sbGJhciIsY29tcG9uZW50czp7QmFyOnV9LHByb3BzOntuYXRpdmU6Qm9vbGVhbix3cmFwU3R5bGU6e30sd3JhcENsYXNzOnt9LHZpZXdDbGFzczp7fSx2aWV3U3R5bGU6e30sbm9yZXNpemU6Qm9vbGVhbix0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRpdiJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3NpemVXaWR0aDoiMCIsc2l6ZUhlaWdodDoiMCIsbW92ZVg6MCxtb3ZlWTowfX0sY29tcHV0ZWQ6e3dyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy53cmFwfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PW8oKSgpLG49dGhpcy53cmFwU3R5bGU7aWYodCl7dmFyIGk9Ii0iK3QrInB4IixyPSJtYXJnaW4tYm90dG9tOiAiK2krIjsgbWFyZ2luLXJpZ2h0OiAiK2krIjsiO0FycmF5LmlzQXJyYXkodGhpcy53cmFwU3R5bGUpPyhuPU9iamVjdChhWyJ0b09iamVjdCJdKSh0aGlzLndyYXBTdHlsZSksbi5tYXJnaW5SaWdodD1uLm1hcmdpbkJvdHRvbT1pKToic3RyaW5nIj09PXR5cGVvZiB0aGlzLndyYXBTdHlsZT9uKz1yOm49cn12YXIgcz1lKHRoaXMudGFnLHtjbGFzczpbImVsLXNjcm9sbGJhcl9fdmlldyIsdGhpcy52aWV3Q2xhc3NdLHN0eWxlOnRoaXMudmlld1N0eWxlLHJlZjoicmVzaXplIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCksbD1lKCJkaXYiLHtyZWY6IndyYXAiLHN0eWxlOm4sb246e3Njcm9sbDp0aGlzLmhhbmRsZVNjcm9sbH0sY2xhc3M6W3RoaXMud3JhcENsYXNzLCJlbC1zY3JvbGxiYXJfX3dyYXAiLHQ/IiI6ImVsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQiXX0sW1tzXV0pLGM9dm9pZCAwO3JldHVybiBjPXRoaXMubmF0aXZlP1tlKCJkaXYiLHtyZWY6IndyYXAiLGNsYXNzOlt0aGlzLndyYXBDbGFzcywiZWwtc2Nyb2xsYmFyX193cmFwIl0sc3R5bGU6bn0sW1tzXV0pXTpbbCxlKHUse2F0dHJzOnttb3ZlOnRoaXMubW92ZVgsc2l6ZTp0aGlzLnNpemVXaWR0aH19KSxlKHUse2F0dHJzOnt2ZXJ0aWNhbDohMCxtb3ZlOnRoaXMubW92ZVksc2l6ZTp0aGlzLnNpemVIZWlnaHR9fSldLGUoImRpdiIse2NsYXNzOiJlbC1zY3JvbGxiYXIifSxjKX0sbWV0aG9kczp7aGFuZGxlU2Nyb2xsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53cmFwO3RoaXMubW92ZVk9MTAwKmUuc2Nyb2xsVG9wL2UuY2xpZW50SGVpZ2h0LHRoaXMubW92ZVg9MTAwKmUuc2Nyb2xsTGVmdC9lLmNsaWVudFdpZHRofSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgZT12b2lkIDAsdD12b2lkIDAsbj10aGlzLndyYXA7biYmKGU9MTAwKm4uY2xpZW50SGVpZ2h0L24uc2Nyb2xsSGVpZ2h0LHQ9MTAwKm4uY2xpZW50V2lkdGgvbi5zY3JvbGxXaWR0aCx0aGlzLnNpemVIZWlnaHQ9ZTwxMDA/ZSsiJSI6IiIsdGhpcy5zaXplV2lkdGg9dDwxMDA/dCsiJSI6IiIpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMubmF0aXZlfHwodGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGUpLCF0aGlzLm5vcmVzaXplJiZPYmplY3QoaVsiYWRkUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kcmVmcy5yZXNpemUsdGhpcy51cGRhdGUpKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMubmF0aXZlfHwhdGhpcy5ub3Jlc2l6ZSYmT2JqZWN0KGlbInJlbW92ZVJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJHJlZnMucmVzaXplLHRoaXMudXBkYXRlKX0saW5zdGFsbDpmdW5jdGlvbihlKXtlLmNvbXBvbmVudChoLm5hbWUsaCl9fTt0WyJkZWZhdWx0Il09aH0sMTY6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNDAxMCIpfSwyOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjU5MjQiKX0sMzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI4MTIyIil9LDM4OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImU2MmQiKX19KX0sMTU0ODpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMzMwMSIpLG89bigiNjk3ZSIpLGE9bigiMjAyMyIpLHM9bigiNDMxOSIpLGw9bigiZjkzNCIpO2wuZ2V0TGF5b3V0UmVjdDt0LmdldExheW91dFJlY3Q9bC5nZXRMYXlvdXRSZWN0O3ZhciBjPW4oImVlMWEiKSx1PWMuZW5hYmxlRGF0YVN0YWNrLGg9Yy5pc0RpbWVuc2lvblN0YWNrZWQsZD1jLmdldFN0YWNrZWREaW1lbnNpb24sZj1uKCI4NjJkIik7dC5jb21wbGV0ZURpbWVuc2lvbnM9Zjt2YXIgcD1uKCJiMWQ0Iik7dC5jcmVhdGVEaW1lbnNpb25zPXA7dmFyIG09bigiYTE1YSIpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIHIoZS5nZXRTb3VyY2UoKSxlKX10LmNyZWF0ZVN5bWJvbD1tLmNyZWF0ZVN5bWJvbDt2YXIgdj17aXNEaW1lbnNpb25TdGFja2VkOmgsZW5hYmxlRGF0YVN0YWNrOnUsZ2V0U3RhY2tlZERpbWVuc2lvbjpkfTtmdW5jdGlvbiB5KGUsdCl7dmFyIG49dDtzLmlzSW5zdGFuY2UodCl8fChuPW5ldyBzKHQpLGkubWl4aW4obixhKSk7dmFyIHI9by5jcmVhdGVTY2FsZUJ5TW9kZWwobik7cmV0dXJuIHIuc2V0RXh0ZW50KGVbMF0sZVsxXSksby5uaWNlU2NhbGVFeHRlbnQocixuKSxyfWZ1bmN0aW9uIGIoZSl7aS5taXhpbihlLGEpfXQuY3JlYXRlTGlzdD1nLHQuZGF0YVN0YWNrPXYsdC5jcmVhdGVTY2FsZT15LHQubWl4aW5BeGlzTW9kZWxDb21tb25NZXRob2RzPWJ9LCIxNTliIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiZGE4NCIpLHI9bigiZmRiYyIpLG89bigiMTdjMiIpLGE9bigiOTExMiIpO2Zvcih2YXIgcyBpbiByKXt2YXIgbD1pW3NdLGM9bCYmbC5wcm90b3R5cGU7aWYoYyYmYy5mb3JFYWNoIT09byl0cnl7YShjLCJmb3JFYWNoIixvKX1jYXRjaCh1KXtjLmZvckVhY2g9b319fSwiMTVhZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKTtuKCJjYjY5IiksbigiYWJmZiIpO3ZhciByPW4oIjdmOTYiKSxvPW4oIjg3YzMiKTtuKCIwMWVkIiksaS5yZWdpc3RlclZpc3VhbChyKCJzY2F0dGVyIiwiY2lyY2xlIikpLGkucmVnaXN0ZXJMYXlvdXQobygic2NhdHRlciIpKX0sMTYwOTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sMTY4NzpmdW5jdGlvbihlLHQpe3ZhciBuPSJ1bmRlZmluZWQiPT09dHlwZW9mIEZsb2F0MzJBcnJheT9BcnJheTpGbG9hdDMyQXJyYXk7ZnVuY3Rpb24gaSgpe3ZhciBlPW5ldyBuKDYpO3JldHVybiByKGUpLGV9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0xLGVbNF09MCxlWzVdPTAsZX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGV9ZnVuY3Rpb24gYShlLHQsbil7dmFyIGk9dFswXSpuWzBdK3RbMl0qblsxXSxyPXRbMV0qblswXSt0WzNdKm5bMV0sbz10WzBdKm5bMl0rdFsyXSpuWzNdLGE9dFsxXSpuWzJdK3RbM10qblszXSxzPXRbMF0qbls0XSt0WzJdKm5bNV0rdFs0XSxsPXRbMV0qbls0XSt0WzNdKm5bNV0rdFs1XTtyZXR1cm4gZVswXT1pLGVbMV09cixlWzJdPW8sZVszXT1hLGVbNF09cyxlWzVdPWwsZX1mdW5jdGlvbiBzKGUsdCxuKXtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XStuWzBdLGVbNV09dFs1XStuWzFdLGV9ZnVuY3Rpb24gbChlLHQsbil7dmFyIGk9dFswXSxyPXRbMl0sbz10WzRdLGE9dFsxXSxzPXRbM10sbD10WzVdLGM9TWF0aC5zaW4obiksdT1NYXRoLmNvcyhuKTtyZXR1cm4gZVswXT1pKnUrYSpjLGVbMV09LWkqYythKnUsZVsyXT1yKnUrcypjLGVbM109LXIqYyt1KnMsZVs0XT11Km8rYypsLGVbNV09dSpsLWMqbyxlfWZ1bmN0aW9uIGMoZSx0LG4pe3ZhciBpPW5bMF0scj1uWzFdO3JldHVybiBlWzBdPXRbMF0qaSxlWzFdPXRbMV0qcixlWzJdPXRbMl0qaSxlWzNdPXRbM10qcixlWzRdPXRbNF0qaSxlWzVdPXRbNV0qcixlfWZ1bmN0aW9uIHUoZSx0KXt2YXIgbj10WzBdLGk9dFsyXSxyPXRbNF0sbz10WzFdLGE9dFszXSxzPXRbNV0sbD1uKmEtbyppO3JldHVybiBsPyhsPTEvbCxlWzBdPWEqbCxlWzFdPS1vKmwsZVsyXT0taSpsLGVbM109bipsLGVbNF09KGkqcy1hKnIpKmwsZVs1XT0obypyLW4qcykqbCxlKTpudWxsfWZ1bmN0aW9uIGgoZSl7dmFyIHQ9aSgpO3JldHVybiBvKHQsZSksdH10LmNyZWF0ZT1pLHQuaWRlbnRpdHk9cix0LmNvcHk9byx0Lm11bD1hLHQudHJhbnNsYXRlPXMsdC5yb3RhdGU9bCx0LnNjYWxlPWMsdC5pbnZlcnQ9dSx0LmNsb25lPWh9LDE3NDg6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKSxyPW4oIjZkOGIiKSxvPW4oIjcxYWQiKSxhPW4oIjQzMTkiKSxzPW4oIjIwMjMiKSxsPW8udmFsdWVBeGlzO2Z1bmN0aW9uIGMoZSx0KXtyZXR1cm4gci5kZWZhdWx0cyh7c2hvdzp0fSxlKX12YXIgdT1pLmV4dGVuZENvbXBvbmVudE1vZGVsKHt0eXBlOiJyYWRhciIsb3B0aW9uVXBkYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0KCJib3VuZGFyeUdhcCIpLHQ9dGhpcy5nZXQoInNwbGl0TnVtYmVyIiksbj10aGlzLmdldCgic2NhbGUiKSxpPXRoaXMuZ2V0KCJheGlzTGluZSIpLG89dGhpcy5nZXQoImF4aXNUaWNrIiksbD10aGlzLmdldCgiYXhpc1R5cGUiKSxjPXRoaXMuZ2V0KCJheGlzTGFiZWwiKSx1PXRoaXMuZ2V0KCJuYW1lIiksaD10aGlzLmdldCgibmFtZS5zaG93IiksZD10aGlzLmdldCgibmFtZS5mb3JtYXR0ZXIiKSxmPXRoaXMuZ2V0KCJuYW1lR2FwIikscD10aGlzLmdldCgidHJpZ2dlckV2ZW50IiksbT1yLm1hcCh0aGlzLmdldCgiaW5kaWNhdG9yIil8fFtdLChmdW5jdGlvbihtKXtudWxsIT1tLm1heCYmbS5tYXg+MCYmIW0ubWluP20ubWluPTA6bnVsbCE9bS5taW4mJm0ubWluPDAmJiFtLm1heCYmKG0ubWF4PTApO3ZhciBnPXU7aWYobnVsbCE9bS5jb2xvciYmKGc9ci5kZWZhdWx0cyh7Y29sb3I6bS5jb2xvcn0sdSkpLG09ci5tZXJnZShyLmNsb25lKG0pLHtib3VuZGFyeUdhcDplLHNwbGl0TnVtYmVyOnQsc2NhbGU6bixheGlzTGluZTppLGF4aXNUaWNrOm8sYXhpc1R5cGU6bCxheGlzTGFiZWw6YyxuYW1lOm0udGV4dCxuYW1lTG9jYXRpb246ImVuZCIsbmFtZUdhcDpmLG5hbWVUZXh0U3R5bGU6Zyx0cmlnZ2VyRXZlbnQ6cH0sITEpLGh8fChtLm5hbWU9IiIpLCJzdHJpbmciPT09dHlwZW9mIGQpe3ZhciB2PW0ubmFtZTttLm5hbWU9ZC5yZXBsYWNlKCJ7dmFsdWV9IixudWxsIT12P3Y6IiIpfWVsc2UiZnVuY3Rpb24iPT09dHlwZW9mIGQmJihtLm5hbWU9ZChtLm5hbWUsbSkpO3ZhciB5PXIuZXh0ZW5kKG5ldyBhKG0sbnVsbCx0aGlzLmVjTW9kZWwpLHMpO3JldHVybiB5Lm1haW5UeXBlPSJyYWRhciIseS5jb21wb25lbnRJbmRleD10aGlzLmNvbXBvbmVudEluZGV4LHl9KSx0aGlzKTt0aGlzLmdldEluZGljYXRvck1vZGVscz1mdW5jdGlvbigpe3JldHVybiBtfX0sZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejowLGNlbnRlcjpbIjUwJSIsIjUwJSJdLHJhZGl1czoiNzUlIixzdGFydEFuZ2xlOjkwLG5hbWU6e3Nob3c6ITB9LGJvdW5kYXJ5R2FwOlswLDBdLHNwbGl0TnVtYmVyOjUsbmFtZUdhcDoxNSxzY2FsZTohMSxzaGFwZToicG9seWdvbiIsYXhpc0xpbmU6ci5tZXJnZSh7bGluZVN0eWxlOntjb2xvcjoiI2JiYiJ9fSxsLmF4aXNMaW5lKSxheGlzTGFiZWw6YyhsLmF4aXNMYWJlbCwhMSksYXhpc1RpY2s6YyhsLmF4aXNUaWNrLCExKSxheGlzVHlwZToiaW50ZXJ2YWwiLHNwbGl0TGluZTpjKGwuc3BsaXRMaW5lLCEwKSxzcGxpdEFyZWE6YyhsLnNwbGl0QXJlYSwhMCksaW5kaWNhdG9yOltdfX0pLGg9dTtlLmV4cG9ydHM9aH0sMTc5MjpmdW5jdGlvbihlLHQpe3ZhciBuPXsi5Y2X5rW36K+45bKbIjpbMzIsODBdLCLlub/kuJwiOlswLC0xMF0sIummmea4ryI6WzEwLDVdLCLmvrPpl6giOlstMTAsMTBdLCLlpKnmtKUiOls1LDVdfTtmdW5jdGlvbiBpKGUsdCl7aWYoImNoaW5hIj09PWUpe3ZhciBpPW5bdC5uYW1lXTtpZihpKXt2YXIgcj10LmNlbnRlcjtyWzBdKz1pWzBdLzEwLjUsclsxXSs9LWlbMV0vMTR9fX1lLmV4cG9ydHM9aX0sIjE3YjgiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzMDE0Iikscj1pLmV4dGVuZCh7dHlwZToic2VyaWVzLmJhciIsZGVwZW5kZW5jaWVzOlsiZ3JpZCIsInBvbGFyIl0sYnJ1c2hTZWxlY3RvcjoicmVjdCIsZ2V0UHJvZ3Jlc3NpdmU6ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuZ2V0KCJsYXJnZSIpJiZ0aGlzLmdldCgicHJvZ3Jlc3NpdmUiKX0sZ2V0UHJvZ3Jlc3NpdmVUaHJlc2hvbGQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldCgicHJvZ3Jlc3NpdmVUaHJlc2hvbGQiKSx0PXRoaXMuZ2V0KCJsYXJnZVRocmVzaG9sZCIpO3JldHVybiB0PmUmJihlPXQpLGV9LGRlZmF1bHRPcHRpb246e2NsaXA6ITAscm91bmRDYXA6ITEsc2hvd0JhY2tncm91bmQ6ITEsYmFja2dyb3VuZFN0eWxlOntjb2xvcjoicmdiYSgxODAsIDE4MCwgMTgwLCAwLjIpIixib3JkZXJDb2xvcjpudWxsLGJvcmRlcldpZHRoOjAsYm9yZGVyVHlwZToic29saWQiLGJvcmRlclJhZGl1czowLHNoYWRvd0JsdXI6MCxzaGFkb3dDb2xvcjpudWxsLHNoYWRvd09mZnNldFg6MCxzaGFkb3dPZmZzZXRZOjAsb3BhY2l0eToxfX19KTtlLmV4cG9ydHM9cn0sIjE3YzIiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiYjcyNyIpLmZvckVhY2gscj1uKCJhNjQwIiksbz1yKCJmb3JFYWNoIik7ZS5leHBvcnRzPW8/W10uZm9yRWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0sIjE3ZDYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCIyMmQxIiksbz1uKCJlMGQzIiksYT1vLm1ha2VJbm5lcixzPWEoKSxsPWkuZWFjaDtmdW5jdGlvbiBjKGUsdCxuKXtpZighci5ub2RlKXt2YXIgaT10LmdldFpyKCk7cyhpKS5yZWNvcmRzfHwocyhpKS5yZWNvcmRzPXt9KSx1KGksdCk7dmFyIG89cyhpKS5yZWNvcmRzW2VdfHwocyhpKS5yZWNvcmRzW2VdPXt9KTtvLmhhbmRsZXI9bn19ZnVuY3Rpb24gdShlLHQpe2Z1bmN0aW9uIG4obixpKXtlLm9uKG4sKGZ1bmN0aW9uKG4pe3ZhciByPXAodCk7bChzKGUpLnJlY29yZHMsKGZ1bmN0aW9uKGUpe2UmJmkoZSxuLHIuZGlzcGF0Y2hBY3Rpb24pfSkpLGgoci5wZW5kaW5ncyx0KX0pKX1zKGUpLmluaXRpYWxpemVkfHwocyhlKS5pbml0aWFsaXplZD0hMCxuKCJjbGljayIsaS5jdXJyeShmLCJjbGljayIpKSxuKCJtb3VzZW1vdmUiLGkuY3VycnkoZiwibW91c2Vtb3ZlIikpLG4oImdsb2JhbG91dCIsZCkpfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbixpPWUuc2hvd1RpcC5sZW5ndGgscj1lLmhpZGVUaXAubGVuZ3RoO2k/bj1lLnNob3dUaXBbaS0xXTpyJiYobj1lLmhpZGVUaXBbci0xXSksbiYmKG4uZGlzcGF0Y2hBY3Rpb249bnVsbCx0LmRpc3BhdGNoQWN0aW9uKG4pKX1mdW5jdGlvbiBkKGUsdCxuKXtlLmhhbmRsZXIoImxlYXZlIixudWxsLG4pfWZ1bmN0aW9uIGYoZSx0LG4saSl7dC5oYW5kbGVyKGUsbixpKX1mdW5jdGlvbiBwKGUpe3ZhciB0PXtzaG93VGlwOltdLGhpZGVUaXA6W119LG49ZnVuY3Rpb24oaSl7dmFyIHI9dFtpLnR5cGVdO3I/ci5wdXNoKGkpOihpLmRpc3BhdGNoQWN0aW9uPW4sZS5kaXNwYXRjaEFjdGlvbihpKSl9O3JldHVybntkaXNwYXRjaEFjdGlvbjpuLHBlbmRpbmdzOnR9fWZ1bmN0aW9uIG0oZSx0KXtpZighci5ub2RlKXt2YXIgbj10LmdldFpyKCksaT0ocyhuKS5yZWNvcmRzfHx7fSlbZV07aSYmKHMobikucmVjb3Jkc1tlXT1udWxsKX19dC5yZWdpc3Rlcj1jLHQudW5yZWdpc3Rlcj1tfSwiMTdlZCI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKCI1MTFmIiksX19lc01vZHVsZTohMH19LDE4MzY6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZjYTEiKSxyPW4oIjY0MzgiKS5mLG89e30udG9TdHJpbmcsYT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdLHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiByKGUpfWNhdGNoKHQpe3JldHVybiBhLnNsaWNlKCl9fTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gYSYmIltvYmplY3QgV2luZG93XSI9PW8uY2FsbChlKT9zKGUpOnIoaShlKSl9fSwiMThjMCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oImUwZDgiKSxvPW4oIjhlNDMiKSxhPXIucHJvdG90eXBlLHM9ci5leHRlbmQoe3R5cGU6Im9yZGluYWwiLGluaXQ6ZnVuY3Rpb24oZSx0KXtlJiYhaS5pc0FycmF5KGUpfHwoZT1uZXcgbyh7Y2F0ZWdvcmllczplfSkpLHRoaXMuX29yZGluYWxNZXRhPWUsdGhpcy5fZXh0ZW50PXR8fFswLGUuY2F0ZWdvcmllcy5sZW5ndGgtMV19LHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGU/dGhpcy5fb3JkaW5hbE1ldGEuZ2V0T3JkaW5hbChlKTpNYXRoLnJvdW5kKGUpfSxjb250YWluOmZ1bmN0aW9uKGUpe3JldHVybiBlPXRoaXMucGFyc2UoZSksYS5jb250YWluLmNhbGwodGhpcyxlKSYmbnVsbCE9dGhpcy5fb3JkaW5hbE1ldGEuY2F0ZWdvcmllc1tlXX0sbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBhLm5vcm1hbGl6ZS5jYWxsKHRoaXMsdGhpcy5wYXJzZShlKSl9LHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGEuc2NhbGUuY2FsbCh0aGlzLGUpKX0sZ2V0VGlja3M6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuX2V4dGVudCxuPXRbMF07d2hpbGUobjw9dFsxXSllLnB1c2gobiksbisrO3JldHVybiBlfSxnZXRMYWJlbDpmdW5jdGlvbihlKXtpZighdGhpcy5pc0JsYW5rKCkpcmV0dXJuIHRoaXMuX29yZGluYWxNZXRhLmNhdGVnb3JpZXNbZV19LGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V4dGVudFsxXS10aGlzLl9leHRlbnRbMF0rMX0sdW5pb25FeHRlbnRGcm9tRGF0YTpmdW5jdGlvbihlLHQpe3RoaXMudW5pb25FeHRlbnQoZS5nZXRBcHByb3hpbWF0ZUV4dGVudCh0KSl9LGdldE9yZGluYWxNZXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yZGluYWxNZXRhfSxuaWNlVGlja3M6aS5ub29wLG5pY2VFeHRlbnQ6aS5ub29wfSk7cy5jcmVhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHN9O3ZhciBsPXM7ZS5leHBvcnRzPWx9LDE5MTc6ZnVuY3Rpb24oZSx0KXt0LmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LDE5NTM6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjI0NDkiKSxyPWkuZXh0ZW5kKHt0eXBlOiJtYXJrTGluZSIsZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejo1LHN5bWJvbDpbImNpcmNsZSIsImFycm93Il0sc3ltYm9sU2l6ZTpbOCwxNl0scHJlY2lzaW9uOjIsdG9vbHRpcDp7dHJpZ2dlcjoiaXRlbSJ9LGxhYmVsOntzaG93OiEwLHBvc2l0aW9uOiJlbmQiLGRpc3RhbmNlOjV9LGxpbmVTdHlsZTp7dHlwZToiZGFzaGVkIn0sZW1waGFzaXM6e2xhYmVsOntzaG93OiEwfSxsaW5lU3R5bGU6e3dpZHRoOjN9fSxhbmltYXRpb25FYXNpbmc6ImxpbmVhciJ9fSk7ZS5leHBvcnRzPXJ9LCIxOWFhIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgIisobj9uKyIgIjoiIikrImludm9jYXRpb24iKTtyZXR1cm4gZX19LCIxOWUyIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiZTg4NyIpLG89bigiMjMwNiIpLGE9bigiY2JlNSIpLHM9bigiYjBhZiIpLGw9cy5jcmVhdGVDbGlwUGF0aCxjPVsiaXRlbVN0eWxlIl0sdT1bImVtcGhhc2lzIiwiaXRlbVN0eWxlIl0saD1bImNvbG9yIiwiY29sb3IwIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJDb2xvcjAiXSxkPXIuZXh0ZW5kKHt0eXBlOiJjYW5kbGVzdGljayIscmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLmdyb3VwLnJlbW92ZUNsaXBQYXRoKCksdGhpcy5fdXBkYXRlRHJhd01vZGUoZSksdGhpcy5faXNMYXJnZURyYXc/dGhpcy5fcmVuZGVyTGFyZ2UoZSk6dGhpcy5fcmVuZGVyTm9ybWFsKGUpfSxpbmNyZW1lbnRhbFByZXBhcmVSZW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuX2NsZWFyKCksdGhpcy5fdXBkYXRlRHJhd01vZGUoZSl9LGluY3JlbWVudGFsUmVuZGVyOmZ1bmN0aW9uKGUsdCxuLGkpe3RoaXMuX2lzTGFyZ2VEcmF3P3RoaXMuX2luY3JlbWVudGFsUmVuZGVyTGFyZ2UoZSx0KTp0aGlzLl9pbmNyZW1lbnRhbFJlbmRlck5vcm1hbChlLHQpfSxfdXBkYXRlRHJhd01vZGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5waXBlbGluZUNvbnRleHQubGFyZ2U7KG51bGw9PXRoaXMuX2lzTGFyZ2VEcmF3fHx0XnRoaXMuX2lzTGFyZ2VEcmF3KSYmKHRoaXMuX2lzTGFyZ2VEcmF3PXQsdGhpcy5fY2xlYXIoKSl9LF9yZW5kZXJOb3JtYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXRhKCksbj10aGlzLl9kYXRhLGk9dGhpcy5ncm91cCxyPXQuZ2V0TGF5b3V0KCJpc1NpbXBsZUJveCIpLGE9ZS5nZXQoImNsaXAiLCEwKSxzPWUuY29vcmRpbmF0ZVN5c3RlbSxsPXMuZ2V0QXJlYSYmcy5nZXRBcmVhKCk7dGhpcy5fZGF0YXx8aS5yZW1vdmVBbGwoKSx0LmRpZmYobikuYWRkKChmdW5jdGlvbihuKXtpZih0Lmhhc1ZhbHVlKG4pKXt2YXIgcyxjPXQuZ2V0SXRlbUxheW91dChuKTtpZihhJiZtKGwsYykpcmV0dXJuO3M9cChjLG4sITApLG8uaW5pdFByb3BzKHMse3NoYXBlOntwb2ludHM6Yy5lbmRzfX0sZSxuKSxnKHMsdCxuLHIpLGkuYWRkKHMpLHQuc2V0SXRlbUdyYXBoaWNFbChuLHMpfX0pKS51cGRhdGUoKGZ1bmN0aW9uKHMsYyl7dmFyIHU9bi5nZXRJdGVtR3JhcGhpY0VsKGMpO2lmKHQuaGFzVmFsdWUocykpe3ZhciBoPXQuZ2V0SXRlbUxheW91dChzKTthJiZtKGwsaCk/aS5yZW1vdmUodSk6KHU/by51cGRhdGVQcm9wcyh1LHtzaGFwZTp7cG9pbnRzOmguZW5kc319LGUscyk6dT1wKGgscyksZyh1LHQscyxyKSxpLmFkZCh1KSx0LnNldEl0ZW1HcmFwaGljRWwocyx1KSl9ZWxzZSBpLnJlbW92ZSh1KX0pKS5yZW1vdmUoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uZ2V0SXRlbUdyYXBoaWNFbChlKTt0JiZpLnJlbW92ZSh0KX0pKS5leGVjdXRlKCksdGhpcy5fZGF0YT10fSxfcmVuZGVyTGFyZ2U6ZnVuY3Rpb24oZSl7dGhpcy5fY2xlYXIoKSxiKGUsdGhpcy5ncm91cCk7dmFyIHQ9ZS5nZXQoImNsaXAiLCEwKT9sKGUuY29vcmRpbmF0ZVN5c3RlbSwhMSxlKTpudWxsO3Q/dGhpcy5ncm91cC5zZXRDbGlwUGF0aCh0KTp0aGlzLmdyb3VwLnJlbW92ZUNsaXBQYXRoKCl9LF9pbmNyZW1lbnRhbFJlbmRlck5vcm1hbDpmdW5jdGlvbihlLHQpe3ZhciBuLGk9dC5nZXREYXRhKCkscj1pLmdldExheW91dCgiaXNTaW1wbGVCb3giKTt3aGlsZShudWxsIT0obj1lLm5leHQoKSkpe3ZhciBvLGE9aS5nZXRJdGVtTGF5b3V0KG4pO289cChhLG4pLGcobyxpLG4sciksby5pbmNyZW1lbnRhbD0hMCx0aGlzLmdyb3VwLmFkZChvKX19LF9pbmNyZW1lbnRhbFJlbmRlckxhcmdlOmZ1bmN0aW9uKGUsdCl7Yih0LHRoaXMuZ3JvdXAsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dGhpcy5fY2xlYXIoKX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5ncm91cC5yZW1vdmVBbGwoKSx0aGlzLl9kYXRhPW51bGx9LGRpc3Bvc2U6aS5ub29wfSksZj1hLmV4dGVuZCh7dHlwZToibm9ybWFsQ2FuZGxlc3RpY2tCb3giLHNoYXBlOnt9LGJ1aWxkUGF0aDpmdW5jdGlvbihlLHQpe3ZhciBuPXQucG9pbnRzO3RoaXMuX19zaW1wbGVCb3g/KGUubW92ZVRvKG5bNF1bMF0sbls0XVsxXSksZS5saW5lVG8obls2XVswXSxuWzZdWzFdKSk6KGUubW92ZVRvKG5bMF1bMF0sblswXVsxXSksZS5saW5lVG8oblsxXVswXSxuWzFdWzFdKSxlLmxpbmVUbyhuWzJdWzBdLG5bMl1bMV0pLGUubGluZVRvKG5bM11bMF0sblszXVsxXSksZS5jbG9zZVBhdGgoKSxlLm1vdmVUbyhuWzRdWzBdLG5bNF1bMV0pLGUubGluZVRvKG5bNV1bMF0sbls1XVsxXSksZS5tb3ZlVG8obls2XVswXSxuWzZdWzFdKSxlLmxpbmVUbyhuWzddWzBdLG5bN11bMV0pKX19KTtmdW5jdGlvbiBwKGUsdCxuKXt2YXIgaT1lLmVuZHM7cmV0dXJuIG5ldyBmKHtzaGFwZTp7cG9pbnRzOm4/dihpLGUpOml9LHoyOjEwMH0pfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49ITAsaT0wO2k8dC5lbmRzLmxlbmd0aDtpKyspaWYoZS5jb250YWluKHQuZW5kc1tpXVswXSx0LmVuZHNbaV1bMV0pKXtuPSExO2JyZWFrfXJldHVybiBufWZ1bmN0aW9uIGcoZSx0LG4saSl7dmFyIHI9dC5nZXRJdGVtTW9kZWwobiksYT1yLmdldE1vZGVsKGMpLHM9dC5nZXRJdGVtVmlzdWFsKG4sImNvbG9yIiksbD10LmdldEl0ZW1WaXN1YWwobiwiYm9yZGVyQ29sb3IiKXx8cyxkPWEuZ2V0SXRlbVN0eWxlKGgpO2UudXNlU3R5bGUoZCksZS5zdHlsZS5zdHJva2VOb1NjYWxlPSEwLGUuc3R5bGUuZmlsbD1zLGUuc3R5bGUuc3Ryb2tlPWwsZS5fX3NpbXBsZUJveD1pO3ZhciBmPXIuZ2V0TW9kZWwodSkuZ2V0SXRlbVN0eWxlKCk7by5zZXRIb3ZlclN0eWxlKGUsZil9ZnVuY3Rpb24gdihlLHQpe3JldHVybiBpLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnNsaWNlKCksZVsxXT10LmluaXRCYXNlbGluZSxlfSkpfXZhciB5PWEuZXh0ZW5kKHt0eXBlOiJsYXJnZUNhbmRsZXN0aWNrQm94IixzaGFwZTp7fSxidWlsZFBhdGg6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dC5wb2ludHMsaT0wO2k8bi5sZW5ndGg7KWlmKHRoaXMuX19zaWduPT09bltpKytdKXt2YXIgcj1uW2krK107ZS5tb3ZlVG8ocixuW2krK10pLGUubGluZVRvKHIsbltpKytdKX1lbHNlIGkrPTN9fSk7ZnVuY3Rpb24gYihlLHQsbil7dmFyIGk9ZS5nZXREYXRhKCkscj1pLmdldExheW91dCgibGFyZ2VQb2ludHMiKSxvPW5ldyB5KHtzaGFwZTp7cG9pbnRzOnJ9LF9fc2lnbjoxfSk7dC5hZGQobyk7dmFyIGE9bmV3IHkoe3NoYXBlOntwb2ludHM6cn0sX19zaWduOi0xfSk7dC5hZGQoYSkseCgxLG8sZSxpKSx4KC0xLGEsZSxpKSxuJiYoby5pbmNyZW1lbnRhbD0hMCxhLmluY3JlbWVudGFsPSEwKX1mdW5jdGlvbiB4KGUsdCxuLGkpe3ZhciByPWU+MD8iUCI6Ik4iLG89aS5nZXRWaXN1YWwoImJvcmRlckNvbG9yIityKXx8aS5nZXRWaXN1YWwoImNvbG9yIityKSxhPW4uZ2V0TW9kZWwoYykuZ2V0SXRlbVN0eWxlKGgpO3QudXNlU3R5bGUoYSksdC5zdHlsZS5maWxsPW51bGwsdC5zdHlsZS5zdHJva2U9b312YXIgXz1kO2UuZXhwb3J0cz1ffSwiMTllYiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjJiNjEiKSxvPW4oImQ1YjciKSxhPW4oIjllMmUiKTtmdW5jdGlvbiBzKGUpe2Zvcih2YXIgdCBpbiBlPWV8fHt9LG8uY2FsbCh0aGlzLGUpLGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmInN0eWxlIiE9PXQmJih0aGlzW3RdPWVbdF0pO3RoaXMuc3R5bGU9bmV3IHIoZS5zdHlsZSx0aGlzKSx0aGlzLl9yZWN0PW51bGwsdGhpcy5fX2NsaXBQYXRocz1udWxsfXMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLHR5cGU6ImRpc3BsYXlhYmxlIixfX2RpcnR5OiEwLGludmlzaWJsZTohMSx6OjAsejI6MCx6bGV2ZWw6MCxkcmFnZ2FibGU6ITEsZHJhZ2dpbmc6ITEsc2lsZW50OiExLGN1bGxpbmc6ITEsY3Vyc29yOiJwb2ludGVyIixyZWN0SG92ZXI6ITEscHJvZ3Jlc3NpdmU6ITEsaW5jcmVtZW50YWw6ITEsZ2xvYmFsU2NhbGVSYXRpbzoxLGJlZm9yZUJydXNoOmZ1bmN0aW9uKGUpe30sYWZ0ZXJCcnVzaDpmdW5jdGlvbihlKXt9LGJydXNoOmZ1bmN0aW9uKGUsdCl7fSxnZXRCb3VuZGluZ1JlY3Q6ZnVuY3Rpb24oKXt9LGNvbnRhaW46ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5yZWN0Q29udGFpbihlLHQpfSx0cmF2ZXJzZTpmdW5jdGlvbihlLHQpe2UuY2FsbCh0LHRoaXMpfSxyZWN0Q29udGFpbjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMudHJhbnNmb3JtQ29vcmRUb0xvY2FsKGUsdCksaT10aGlzLmdldEJvdW5kaW5nUmVjdCgpO3JldHVybiBpLmNvbnRhaW4oblswXSxuWzFdKX0sZGlydHk6ZnVuY3Rpb24oKXt0aGlzLl9fZGlydHk9dGhpcy5fX2RpcnR5VGV4dD0hMCx0aGlzLl9yZWN0PW51bGwsdGhpcy5fX3pyJiZ0aGlzLl9fenIucmVmcmVzaCgpfSxhbmltYXRlU3R5bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgic3R5bGUiLGUpfSxhdHRyS1Y6ZnVuY3Rpb24oZSx0KXsic3R5bGUiIT09ZT9vLnByb3RvdHlwZS5hdHRyS1YuY2FsbCh0aGlzLGUsdCk6dGhpcy5zdHlsZS5zZXQodCl9LHNldFN0eWxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0KGUsdCksdGhpcy5kaXJ0eSghMSksdGhpc30sdXNlU3R5bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3R5bGU9bmV3IHIoZSx0aGlzKSx0aGlzLmRpcnR5KCExKSx0aGlzfSxjYWxjdWxhdGVUZXh0UG9zaXRpb246bnVsbH0saS5pbmhlcml0cyhzLG8pLGkubWl4aW4ocyxhKTt2YXIgbD1zO2UuZXhwb3J0cz1sfSwiMTlmYSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImZjNWUiKSxyPW4oImM5MDEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIG8sYSxzPVN0cmluZyhyKHQpKSxsPWkobiksYz1zLmxlbmd0aDtyZXR1cm4gbDwwfHxsPj1jP2U/IiI6dm9pZCAwOihvPXMuY2hhckNvZGVBdChsKSxvPDU1Mjk2fHxvPjU2MzE5fHxsKzE9PT1jfHwoYT1zLmNoYXJDb2RlQXQobCsxKSk8NTYzMjB8fGE+NTczNDM/ZT9zLmNoYXJBdChsKTpvOmU/cy5zbGljZShsLGwrMik6YS01NjMyMCsoby01NTI5Njw8MTApKzY1NTM2KX19fSwiMWExNCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjc3ZTkiKSxyPW4oImZhZjUiKSxvPW4oIjMzOTciKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt0LmY9bigiMGJhZCIpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYoaShlKSx0PW8odCwhMCksaShuKSxyKXRyeXtyZXR1cm4gYShlLHQsbil9Y2F0Y2gocyl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSwiMWE4YyI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoIm9iamVjdCI9PXR8fCJmdW5jdGlvbiI9PXQpfWUuZXhwb3J0cz1ufSwiMWFiMyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjIzMDYiKSxvPW4oImU4ODciKTtmdW5jdGlvbiBhKGUsdCxuLGkpe3ZhciByPXQuZ2V0RGF0YSgpLG89dGhpcy5kYXRhSW5kZXgsYT1yLmdldE5hbWUobyksbD10LmdldCgic2VsZWN0ZWRPZmZzZXQiKTtpLmRpc3BhdGNoQWN0aW9uKHt0eXBlOiJwaWVUb2dnbGVTZWxlY3QiLGZyb206ZSxuYW1lOmEsc2VyaWVzSWQ6dC5pZH0pLHIuZWFjaCgoZnVuY3Rpb24oZSl7cyhyLmdldEl0ZW1HcmFwaGljRWwoZSksci5nZXRJdGVtTGF5b3V0KGUpLHQuaXNTZWxlY3RlZChyLmdldE5hbWUoZSkpLGwsbil9KSl9ZnVuY3Rpb24gcyhlLHQsbixpLHIpe3ZhciBvPSh0LnN0YXJ0QW5nbGUrdC5lbmRBbmdsZSkvMixhPU1hdGguY29zKG8pLHM9TWF0aC5zaW4obyksbD1uP2k6MCxjPVthKmwscypsXTtyP2UuYW5pbWF0ZSgpLndoZW4oMjAwLHtwb3NpdGlvbjpjfSkuc3RhcnQoImJvdW5jZU91dCIpOmUuYXR0cigicG9zaXRpb24iLGMpfWZ1bmN0aW9uIGwoZSx0KXtyLkdyb3VwLmNhbGwodGhpcyk7dmFyIG49bmV3IHIuU2VjdG9yKHt6MjoyfSksaT1uZXcgci5Qb2x5bGluZSxvPW5ldyByLlRleHQ7dGhpcy5hZGQobiksdGhpcy5hZGQoaSksdGhpcy5hZGQobyksdGhpcy51cGRhdGVEYXRhKGUsdCwhMCl9dmFyIGM9bC5wcm90b3R5cGU7Yy51cGRhdGVEYXRhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzLmNoaWxkQXQoMCksYT10aGlzLmNoaWxkQXQoMSksbD10aGlzLmNoaWxkQXQoMiksYz1lLmhvc3RNb2RlbCx1PWUuZ2V0SXRlbU1vZGVsKHQpLGg9ZS5nZXRJdGVtTGF5b3V0KHQpLGQ9aS5leHRlbmQoe30saCk7ZC5sYWJlbD1udWxsO3ZhciBmPWMuZ2V0U2hhbGxvdygiYW5pbWF0aW9uVHlwZVVwZGF0ZSIpO2lmKG4pe28uc2V0U2hhcGUoZCk7dmFyIHA9Yy5nZXRTaGFsbG93KCJhbmltYXRpb25UeXBlIik7InNjYWxlIj09PXA/KG8uc2hhcGUucj1oLnIwLHIuaW5pdFByb3BzKG8se3NoYXBlOntyOmgucn19LGMsdCkpOihvLnNoYXBlLmVuZEFuZ2xlPWguc3RhcnRBbmdsZSxyLnVwZGF0ZVByb3BzKG8se3NoYXBlOntlbmRBbmdsZTpoLmVuZEFuZ2xlfX0sYyx0KSl9ZWxzZSJleHBhbnNpb24iPT09Zj9vLnNldFNoYXBlKGQpOnIudXBkYXRlUHJvcHMobyx7c2hhcGU6ZH0sYyx0KTt2YXIgbT1lLmdldEl0ZW1WaXN1YWwodCwiY29sb3IiKTtvLnVzZVN0eWxlKGkuZGVmYXVsdHMoe2xpbmVKb2luOiJiZXZlbCIsZmlsbDptfSx1LmdldE1vZGVsKCJpdGVtU3R5bGUiKS5nZXRJdGVtU3R5bGUoKSkpLG8uaG92ZXJTdHlsZT11LmdldE1vZGVsKCJlbXBoYXNpcy5pdGVtU3R5bGUiKS5nZXRJdGVtU3R5bGUoKTt2YXIgZz11LmdldFNoYWxsb3coImN1cnNvciIpO2cmJm8uYXR0cigiY3Vyc29yIixnKSxzKHRoaXMsZS5nZXRJdGVtTGF5b3V0KHQpLGMuaXNTZWxlY3RlZChlLmdldE5hbWUodCkpLGMuZ2V0KCJzZWxlY3RlZE9mZnNldCIpLGMuZ2V0KCJhbmltYXRpb24iKSk7dmFyIHY9IW4mJiJ0cmFuc2l0aW9uIj09PWY7dGhpcy5fdXBkYXRlTGFiZWwoZSx0LHYpLHRoaXMuaGlnaERvd25PblVwZGF0ZT1jLmdldCgic2lsZW50Iik/bnVsbDpmdW5jdGlvbihlLHQpe3ZhciBuPWMuaXNBbmltYXRpb25FbmFibGVkKCkmJnUuZ2V0KCJob3ZlckFuaW1hdGlvbiIpOyJlbXBoYXNpcyI9PT10PyhhLmlnbm9yZT1hLmhvdmVySWdub3JlLGwuaWdub3JlPWwuaG92ZXJJZ25vcmUsbiYmKG8uc3RvcEFuaW1hdGlvbighMCksby5hbmltYXRlVG8oe3NoYXBlOntyOmgucitjLmdldCgiaG92ZXJPZmZzZXQiKX19LDMwMCwiZWxhc3RpY091dCIpKSk6KGEuaWdub3JlPWEubm9ybWFsSWdub3JlLGwuaWdub3JlPWwubm9ybWFsSWdub3JlLG4mJihvLnN0b3BBbmltYXRpb24oITApLG8uYW5pbWF0ZVRvKHtzaGFwZTp7cjpoLnJ9fSwzMDAsImVsYXN0aWNPdXQiKSkpfSxyLnNldEhvdmVyU3R5bGUodGhpcyl9LGMuX3VwZGF0ZUxhYmVsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLmNoaWxkQXQoMSksbz10aGlzLmNoaWxkQXQoMiksYT1lLmhvc3RNb2RlbCxzPWUuZ2V0SXRlbU1vZGVsKHQpLGw9ZS5nZXRJdGVtTGF5b3V0KHQpLGM9bC5sYWJlbCx1PWUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpO2lmKCFjfHxpc05hTihjLngpfHxpc05hTihjLnkpKW8uaWdub3JlPW8ubm9ybWFsSWdub3JlPW8uaG92ZXJJZ25vcmU9aS5pZ25vcmU9aS5ub3JtYWxJZ25vcmU9aS5ob3Zlcklnbm9yZT0hMDtlbHNle3ZhciBoPXtwb2ludHM6Yy5saW5lUG9pbnRzfHxbW2MueCxjLnldLFtjLngsYy55XSxbYy54LGMueV1dfSxkPXt4OmMueCx5OmMueX07bj8oci51cGRhdGVQcm9wcyhpLHtzaGFwZTpofSxhLHQpLHIudXBkYXRlUHJvcHMobyx7c3R5bGU6ZH0sYSx0KSk6KGkuYXR0cih7c2hhcGU6aH0pLG8uYXR0cih7c3R5bGU6ZH0pKSxvLmF0dHIoe3JvdGF0aW9uOmMucm90YXRpb24sb3JpZ2luOltjLngsYy55XSx6MjoxMH0pO3ZhciBmPXMuZ2V0TW9kZWwoImxhYmVsIikscD1zLmdldE1vZGVsKCJlbXBoYXNpcy5sYWJlbCIpLG09cy5nZXRNb2RlbCgibGFiZWxMaW5lIiksZz1zLmdldE1vZGVsKCJlbXBoYXNpcy5sYWJlbExpbmUiKTt1PWUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpO3Iuc2V0TGFiZWxTdHlsZShvLnN0eWxlLG8uaG92ZXJTdHlsZT17fSxmLHAse2xhYmVsRmV0Y2hlcjplLmhvc3RNb2RlbCxsYWJlbERhdGFJbmRleDp0LGRlZmF1bHRUZXh0OmMudGV4dCxhdXRvQ29sb3I6dSx1c2VJbnNpZGVTdHlsZTohIWMuaW5zaWRlfSx7dGV4dEFsaWduOmMudGV4dEFsaWduLHRleHRWZXJ0aWNhbEFsaWduOmMudmVydGljYWxBbGlnbixvcGFjaXR5OmUuZ2V0SXRlbVZpc3VhbCh0LCJvcGFjaXR5Iil9KSxvLmlnbm9yZT1vLm5vcm1hbElnbm9yZT0hZi5nZXQoInNob3ciKSxvLmhvdmVySWdub3JlPSFwLmdldCgic2hvdyIpLGkuaWdub3JlPWkubm9ybWFsSWdub3JlPSFtLmdldCgic2hvdyIpLGkuaG92ZXJJZ25vcmU9IWcuZ2V0KCJzaG93IiksaS5zZXRTdHlsZSh7c3Ryb2tlOnUsb3BhY2l0eTplLmdldEl0ZW1WaXN1YWwodCwib3BhY2l0eSIpfSksaS5zZXRTdHlsZShtLmdldE1vZGVsKCJsaW5lU3R5bGUiKS5nZXRMaW5lU3R5bGUoKSksaS5ob3ZlclN0eWxlPWcuZ2V0TW9kZWwoImxpbmVTdHlsZSIpLmdldExpbmVTdHlsZSgpO3ZhciB2PW0uZ2V0KCJzbW9vdGgiKTt2JiYhMD09PXYmJih2PS40KSxpLnNldFNoYXBlKHtzbW9vdGg6dn0pfX0saS5pbmhlcml0cyhsLHIuR3JvdXApO3ZhciB1PW8uZXh0ZW5kKHt0eXBlOiJwaWUiLGluaXQ6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgci5Hcm91cDt0aGlzLl9zZWN0b3JHcm91cD1lfSxyZW5kZXI6ZnVuY3Rpb24oZSx0LG4scil7aWYoIXJ8fHIuZnJvbSE9PXRoaXMudWlkKXt2YXIgbz1lLmdldERhdGEoKSxzPXRoaXMuX2RhdGEsYz10aGlzLmdyb3VwLHU9dC5nZXQoImFuaW1hdGlvbiIpLGg9IXMsZD1lLmdldCgiYW5pbWF0aW9uVHlwZSIpLGY9ZS5nZXQoImFuaW1hdGlvblR5cGVVcGRhdGUiKSxwPWkuY3VycnkoYSx0aGlzLnVpZCxlLHUsbiksbT1lLmdldCgic2VsZWN0ZWRNb2RlIik7aWYoby5kaWZmKHMpLmFkZCgoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGwobyxlKTtoJiYic2NhbGUiIT09ZCYmdC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe2Uuc3RvcEFuaW1hdGlvbighMCl9KSksbSYmdC5vbigiY2xpY2siLHApLG8uc2V0SXRlbUdyYXBoaWNFbChlLHQpLGMuYWRkKHQpfSkpLnVwZGF0ZSgoZnVuY3Rpb24oZSx0KXt2YXIgbj1zLmdldEl0ZW1HcmFwaGljRWwodCk7aHx8InRyYW5zaXRpb24iPT09Znx8bi5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe2Uuc3RvcEFuaW1hdGlvbighMCl9KSksbi51cGRhdGVEYXRhKG8sZSksbi5vZmYoImNsaWNrIiksbSYmbi5vbigiY2xpY2siLHApLGMuYWRkKG4pLG8uc2V0SXRlbUdyYXBoaWNFbChlLG4pfSkpLnJlbW92ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9cy5nZXRJdGVtR3JhcGhpY0VsKGUpO2MucmVtb3ZlKHQpfSkpLmV4ZWN1dGUoKSx1JiZvLmNvdW50KCk+MCYmKGg/InNjYWxlIiE9PWQ6InRyYW5zaXRpb24iIT09Zikpe2Zvcih2YXIgZz1vLmdldEl0ZW1MYXlvdXQoMCksdj0xO2lzTmFOKGcuc3RhcnRBbmdsZSkmJnY8by5jb3VudCgpOysrdilnPW8uZ2V0SXRlbUxheW91dCh2KTt2YXIgeT1NYXRoLm1heChuLmdldFdpZHRoKCksbi5nZXRIZWlnaHQoKSkvMixiPWkuYmluZChjLnJlbW92ZUNsaXBQYXRoLGMpO2Muc2V0Q2xpcFBhdGgodGhpcy5fY3JlYXRlQ2xpcFBhdGgoZy5jeCxnLmN5LHksZy5zdGFydEFuZ2xlLGcuY2xvY2t3aXNlLGIsZSxoKSl9ZWxzZSBjLnJlbW92ZUNsaXBQYXRoKCk7dGhpcy5fZGF0YT1vfX0sZGlzcG9zZTpmdW5jdGlvbigpe30sX2NyZWF0ZUNsaXBQYXRoOmZ1bmN0aW9uKGUsdCxuLGksbyxhLHMsbCl7dmFyIGM9bmV3IHIuU2VjdG9yKHtzaGFwZTp7Y3g6ZSxjeTp0LHIwOjAscjpuLHN0YXJ0QW5nbGU6aSxlbmRBbmdsZTppLGNsb2Nrd2lzZTpvfX0pLHU9bD9yLmluaXRQcm9wczpyLnVwZGF0ZVByb3BzO3JldHVybiB1KGMse3NoYXBlOntlbmRBbmdsZTppKyhvPzE6LTEpKk1hdGguUEkqMn19LHMsYSksY30sY29udGFpblBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXREYXRhKCksaT1uLmdldEl0ZW1MYXlvdXQoMCk7aWYoaSl7dmFyIHI9ZVswXS1pLmN4LG89ZVsxXS1pLmN5LGE9TWF0aC5zcXJ0KHIqcitvKm8pO3JldHVybiBhPD1pLnImJmE+PWkucjB9fX0pLGg9dTtlLmV4cG9ydHM9aH0sIjFiZTQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJkMDY2Iik7ZS5leHBvcnRzPWkoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LCIxYzBiIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGUpKyIgaXMgbm90IGEgZnVuY3Rpb24iKTtyZXR1cm4gZX19LCIxYzVmIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNDAxYiIpLHI9bigiNmQ4YiIpLG89bigiMGMzNyIpLGE9by5nZXRDdXJ2ZW5lc3NGb3JFZGdlO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5jb29yZGluYXRlU3lzdGVtO2lmKCF0fHwidmlldyI9PT10LnR5cGUpe3ZhciBuPWUuZ2V0R3JhcGgoKTtuLmVhY2hOb2RlKChmdW5jdGlvbihlKXt2YXIgdD1lLmdldE1vZGVsKCk7ZS5zZXRMYXlvdXQoWyt0LmdldCgieCIpLCt0LmdldCgieSIpXSl9KSksbChuLGUpfX1mdW5jdGlvbiBsKGUsdCl7ZS5lYWNoRWRnZSgoZnVuY3Rpb24oZSxuKXt2YXIgbz1yLnJldHJpZXZlMyhlLmdldE1vZGVsKCkuZ2V0KCJsaW5lU3R5bGUuY3VydmVuZXNzIiksLWEoZSx0LG4sITApLDApLHM9aS5jbG9uZShlLm5vZGUxLmdldExheW91dCgpKSxsPWkuY2xvbmUoZS5ub2RlMi5nZXRMYXlvdXQoKSksYz1bcyxsXTsrbyYmYy5wdXNoKFsoc1swXStsWzBdKS8yLShzWzFdLWxbMV0pKm8sKHNbMV0rbFsxXSkvMi0obFswXS1zWzBdKSpvXSksZS5zZXRMYXlvdXQoYyl9KSl9dC5zaW1wbGVMYXlvdXQ9cyx0LnNpbXBsZUxheW91dEVkZ2U9bH0sIjFjN2UiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJiNjIyIikscj1pKCJpdGVyYXRvciIpLG89ITE7dHJ5e3ZhciBhPTAscz17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhYSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7bz0hMH19O3Nbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShzLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2gobCl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhbylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9e307aVtyXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19fX0sZShpKX1jYXRjaChsKXt9cmV0dXJuIG59fSwiMWNjZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjRlMDgiKSxyPShpLl9fREVWX18sbigiNmQ4YiIpKSxvPW4oImZkMjciKSxhPW4oIjM4NDIiKSxzPWEucGFyc2VQZXJjZW50LGw9bigiNjk3ZSIpLGM9bC5jcmVhdGVTY2FsZUJ5TW9kZWwsdT1sLm5pY2VTY2FsZUV4dGVudCxoPW4oIjIwMzkiKSxkPW4oImVlMWEiKSxmPWQuZ2V0U3RhY2tlZERpbWVuc2lvbjtmdW5jdGlvbiBwKGUsdCxuKXt2YXIgaT10LmdldCgiY2VudGVyIiksbz1uLmdldFdpZHRoKCksYT1uLmdldEhlaWdodCgpO2UuY3g9cyhpWzBdLG8pLGUuY3k9cyhpWzFdLGEpO3ZhciBsPWUuZ2V0UmFkaXVzQXhpcygpLGM9TWF0aC5taW4obyxhKS8yLHU9dC5nZXQoInJhZGl1cyIpO251bGw9PXU/dT1bMCwiMTAwJSJdOnIuaXNBcnJheSh1KXx8KHU9WzAsdV0pLHU9W3ModVswXSxjKSxzKHVbMV0sYyldLGwuaW52ZXJzZT9sLnNldEV4dGVudCh1WzFdLHVbMF0pOmwuc2V0RXh0ZW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gbShlLHQpe3ZhciBuPXRoaXMsaT1uLmdldEFuZ2xlQXhpcygpLG89bi5nZXRSYWRpdXNBeGlzKCk7aWYoaS5zY2FsZS5zZXRFeHRlbnQoMS8wLC0xLzApLG8uc2NhbGUuc2V0RXh0ZW50KDEvMCwtMS8wKSxlLmVhY2hTZXJpZXMoKGZ1bmN0aW9uKGUpe2lmKGUuY29vcmRpbmF0ZVN5c3RlbT09PW4pe3ZhciB0PWUuZ2V0RGF0YSgpO3IuZWFjaCh0Lm1hcERpbWVuc2lvbigicmFkaXVzIiwhMCksKGZ1bmN0aW9uKGUpe28uc2NhbGUudW5pb25FeHRlbnRGcm9tRGF0YSh0LGYodCxlKSl9KSksci5lYWNoKHQubWFwRGltZW5zaW9uKCJhbmdsZSIsITApLChmdW5jdGlvbihlKXtpLnNjYWxlLnVuaW9uRXh0ZW50RnJvbURhdGEodCxmKHQsZSkpfSkpfX0pKSx1KGkuc2NhbGUsaS5tb2RlbCksdShvLnNjYWxlLG8ubW9kZWwpLCJjYXRlZ29yeSI9PT1pLnR5cGUmJiFpLm9uQmFuZCl7dmFyIGE9aS5nZXRFeHRlbnQoKSxzPTM2MC9pLnNjYWxlLmNvdW50KCk7aS5pbnZlcnNlP2FbMV0rPXM6YVsxXS09cyxpLnNldEV4dGVudChhWzBdLGFbMV0pfX1mdW5jdGlvbiBnKGUsdCl7aWYoZS50eXBlPXQuZ2V0KCJ0eXBlIiksZS5zY2FsZT1jKHQpLGUub25CYW5kPXQuZ2V0KCJib3VuZGFyeUdhcCIpJiYiY2F0ZWdvcnkiPT09ZS50eXBlLGUuaW52ZXJzZT10LmdldCgiaW52ZXJzZSIpLCJhbmdsZUF4aXMiPT09dC5tYWluVHlwZSl7ZS5pbnZlcnNlXj10LmdldCgiY2xvY2t3aXNlIik7dmFyIG49dC5nZXQoInN0YXJ0QW5nbGUiKTtlLnNldEV4dGVudChuLG4rKGUuaW52ZXJzZT8tMzYwOjM2MCkpfXQuYXhpcz1lLGUubW9kZWw9dH1uKCI3OGYwIik7dmFyIHY9e2RpbWVuc2lvbnM6by5wcm90b3R5cGUuZGltZW5zaW9ucyxjcmVhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gZS5lYWNoQ29tcG9uZW50KCJwb2xhciIsKGZ1bmN0aW9uKGUsaSl7dmFyIHI9bmV3IG8oaSk7ci51cGRhdGU9bTt2YXIgYT1yLmdldFJhZGl1c0F4aXMoKSxzPXIuZ2V0QW5nbGVBeGlzKCksbD1lLmZpbmRBeGlzTW9kZWwoInJhZGl1c0F4aXMiKSxjPWUuZmluZEF4aXNNb2RlbCgiYW5nbGVBeGlzIik7ZyhhLGwpLGcocyxjKSxwKHIsZSx0KSxuLnB1c2gociksZS5jb29yZGluYXRlU3lzdGVtPXIsci5tb2RlbD1lfSkpLGUuZWFjaFNlcmllcygoZnVuY3Rpb24odCl7aWYoInBvbGFyIj09PXQuZ2V0KCJjb29yZGluYXRlU3lzdGVtIikpe3ZhciBuPWUucXVlcnlDb21wb25lbnRzKHttYWluVHlwZToicG9sYXIiLGluZGV4OnQuZ2V0KCJwb2xhckluZGV4IiksaWQ6dC5nZXQoInBvbGFySWQiKX0pWzBdO3QuY29vcmRpbmF0ZVN5c3RlbT1uLmNvb3JkaW5hdGVTeXN0ZW19fSkpLG59fTtoLnJlZ2lzdGVyKCJwb2xhciIsdil9LCIxY2RjIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMzQyZiIpO2UuZXhwb3J0cz0vKD86aXBob25lfGlwb2R8aXBhZCkuKmFwcGxld2Via2l0L2kudGVzdChpKX0sIjFkMmIiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1hcmd1bWVudHNbaV07cmV0dXJuIGUuYXBwbHkodCxuKX19fSwiMWQ4MCI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX19LCIxZGRlIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiZDAzOSIpLHI9bigiYjYyMiIpLG89bigiMmQwMCIpLGE9cigic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbz49NTF8fCFpKChmdW5jdGlvbigpe3ZhciB0PVtdLG49dC5jb25zdHJ1Y3Rvcj17fTtyZXR1cm4gblthXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT10W2VdKEJvb2xlYW4pLmZvb30pKX19LCIxZTMyIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMzg0MiIpLG89ci5wYXJzZVBlcmNlbnQsYT1uKCJlZTFhIikscz1hLmlzRGltZW5zaW9uU3RhY2tlZDtmdW5jdGlvbiBsKGUpe3JldHVybiBlLmdldCgic3RhY2siKXx8Il9fZWNfc3RhY2tfIitlLnNlcmllc0luZGV4fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdC5kaW0rZS5tb2RlbC5jb21wb25lbnRJbmRleH1mdW5jdGlvbiB1KGUsdCxuKXt2YXIgcj17fSxvPWgoaS5maWx0ZXIodC5nZXRTZXJpZXNCeVR5cGUoZSksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmlzU2VyaWVzRmlsdGVyZWQoZSkmJmUuY29vcmRpbmF0ZVN5c3RlbSYmInBvbGFyIj09PWUuY29vcmRpbmF0ZVN5c3RlbS50eXBlfSkpKTt0LmVhY2hTZXJpZXNCeVR5cGUoZSwoZnVuY3Rpb24oZSl7aWYoInBvbGFyIj09PWUuY29vcmRpbmF0ZVN5c3RlbS50eXBlKXt2YXIgdD1lLmdldERhdGEoKSxuPWUuY29vcmRpbmF0ZVN5c3RlbSxpPW4uZ2V0QmFzZUF4aXMoKSxhPWMobixpKSx1PWwoZSksaD1vW2FdW3VdLGQ9aC5vZmZzZXQsZj1oLndpZHRoLHA9bi5nZXRPdGhlckF4aXMoaSksbT1lLmNvb3JkaW5hdGVTeXN0ZW0uY3gsZz1lLmNvb3JkaW5hdGVTeXN0ZW0uY3ksdj1lLmdldCgiYmFyTWluSGVpZ2h0Iil8fDAseT1lLmdldCgiYmFyTWluQW5nbGUiKXx8MDtyW3VdPXJbdV18fFtdO2Zvcih2YXIgYj10Lm1hcERpbWVuc2lvbihwLmRpbSkseD10Lm1hcERpbWVuc2lvbihpLmRpbSksXz1zKHQsYiksdz0icmFkaXVzIiE9PWkuZGltfHwhZS5nZXQoInJvdW5kQ2FwIiwhMCksUz0icmFkaXVzIj09PXAuZGltP3AuZGF0YVRvUmFkaXVzKDApOnAuZGF0YVRvQW5nbGUoMCksQz0wLGs9dC5jb3VudCgpO0M8aztDKyspe3ZhciBULE0sRSxJLEQ9dC5nZXQoYixDKSxBPXQuZ2V0KHgsQyksTz1EPj0wPyJwIjoibiIsUD1TO2lmKF8mJihyW3VdW0FdfHwoclt1XVtBXT17cDpTLG46U30pLFA9clt1XVtBXVtPXSksInJhZGl1cyI9PT1wLmRpbSl7dmFyIEw9cC5kYXRhVG9SYWRpdXMoRCktUyxOPWkuZGF0YVRvQW5nbGUoQSk7TWF0aC5hYnMoTCk8diYmKEw9KEw8MD8tMToxKSp2KSxUPVAsTT1QK0wsRT1OLWQsST1FLWYsXyYmKHJbdV1bQV1bT109TSl9ZWxzZXt2YXIgUj1wLmRhdGFUb0FuZ2xlKEQsdyktUywkPWkuZGF0YVRvUmFkaXVzKEEpO01hdGguYWJzKFIpPHkmJihSPShSPDA/LTE6MSkqeSksVD0kK2QsTT1UK2YsRT1QLEk9UCtSLF8mJihyW3VdW0FdW09dPUkpfXQuc2V0SXRlbUxheW91dChDLHtjeDptLGN5OmcscjA6VCxyOk0sc3RhcnRBbmdsZTotRSpNYXRoLlBJLzE4MCxlbmRBbmdsZTotSSpNYXRoLlBJLzE4MH0pfX19KSx0aGlzKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49e307aS5lYWNoKGUsKGZ1bmN0aW9uKGUsdCl7dmFyIGk9ZS5nZXREYXRhKCkscj1lLmNvb3JkaW5hdGVTeXN0ZW0sYT1yLmdldEJhc2VBeGlzKCkscz1jKHIsYSksdT1hLmdldEV4dGVudCgpLGg9ImNhdGVnb3J5Ij09PWEudHlwZT9hLmdldEJhbmRXaWR0aCgpOk1hdGguYWJzKHVbMV0tdVswXSkvaS5jb3VudCgpLGQ9bltzXXx8e2JhbmRXaWR0aDpoLHJlbWFpbmVkV2lkdGg6aCxhdXRvV2lkdGhDb3VudDowLGNhdGVnb3J5R2FwOiIyMCUiLGdhcDoiMzAlIixzdGFja3M6e319LGY9ZC5zdGFja3M7bltzXT1kO3ZhciBwPWwoZSk7ZltwXXx8ZC5hdXRvV2lkdGhDb3VudCsrLGZbcF09ZltwXXx8e3dpZHRoOjAsbWF4V2lkdGg6MH07dmFyIG09byhlLmdldCgiYmFyV2lkdGgiKSxoKSxnPW8oZS5nZXQoImJhck1heFdpZHRoIiksaCksdj1lLmdldCgiYmFyR2FwIikseT1lLmdldCgiYmFyQ2F0ZWdvcnlHYXAiKTttJiYhZltwXS53aWR0aCYmKG09TWF0aC5taW4oZC5yZW1haW5lZFdpZHRoLG0pLGZbcF0ud2lkdGg9bSxkLnJlbWFpbmVkV2lkdGgtPW0pLGcmJihmW3BdLm1heFdpZHRoPWcpLG51bGwhPXYmJihkLmdhcD12KSxudWxsIT15JiYoZC5jYXRlZ29yeUdhcD15KX0pKTt2YXIgcj17fTtyZXR1cm4gaS5lYWNoKG4sKGZ1bmN0aW9uKGUsdCl7clt0XT17fTt2YXIgbj1lLnN0YWNrcyxhPWUuYmFuZFdpZHRoLHM9byhlLmNhdGVnb3J5R2FwLGEpLGw9byhlLmdhcCwxKSxjPWUucmVtYWluZWRXaWR0aCx1PWUuYXV0b1dpZHRoQ291bnQsaD0oYy1zKS8odSsodS0xKSpsKTtoPU1hdGgubWF4KGgsMCksaS5lYWNoKG4sKGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5tYXhXaWR0aDtuJiZuPGgmJihuPU1hdGgubWluKG4sYyksZS53aWR0aCYmKG49TWF0aC5taW4obixlLndpZHRoKSksYy09bixlLndpZHRoPW4sdS0tKX0pKSxoPShjLXMpLyh1Kyh1LTEpKmwpLGg9TWF0aC5tYXgoaCwwKTt2YXIgZCxmPTA7aS5lYWNoKG4sKGZ1bmN0aW9uKGUsdCl7ZS53aWR0aHx8KGUud2lkdGg9aCksZD1lLGYrPWUud2lkdGgqKDErbCl9KSksZCYmKGYtPWQud2lkdGgqbCk7dmFyIHA9LWYvMjtpLmVhY2gobiwoZnVuY3Rpb24oZSxuKXtyW3RdW25dPXJbdF1bbl18fHtvZmZzZXQ6cCx3aWR0aDplLndpZHRofSxwKz1lLndpZHRoKigxK2wpfSkpfSkpLHJ9dmFyIGQ9dTtlLmV4cG9ydHM9ZH0sIjFlM2MiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigiMmE0NCIpfSwiMWYwZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImNiZTUiKSxyPWkuZXh0ZW5kKHt0eXBlOiJlY2hhcnRzR2F1Z2VQb2ludGVyIixzaGFwZTp7YW5nbGU6MCx3aWR0aDoxMCxyOjEwLHg6MCx5OjB9LGJ1aWxkUGF0aDpmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY29zLGk9TWF0aC5zaW4scj10LnIsbz10LndpZHRoLGE9dC5hbmdsZSxzPXQueC1uKGEpKm8qKG8+PXIvMz8xOjIpLGw9dC55LWkoYSkqbyoobz49ci8zPzE6Mik7YT10LmFuZ2xlLU1hdGguUEkvMixlLm1vdmVUbyhzLGwpLGUubGluZVRvKHQueCtuKGEpKm8sdC55K2koYSkqbyksZS5saW5lVG8odC54K24odC5hbmdsZSkqcix0LnkraSh0LmFuZ2xlKSpyKSxlLmxpbmVUbyh0LngtbihhKSpvLHQueS1pKGEpKm8pLGUubGluZVRvKHMsbCl9fSk7ZS5leHBvcnRzPXJ9LCIxZjFhIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiZTBkMyIpLG89bigiNmNiNyIpLGE9bigiNDMxOSIpLHM9bigiNzAyMyIpLGw9bigiZWVlYSIpLGM9by5leHRlbmQoe3R5cGU6ImdlbyIsY29vcmRpbmF0ZVN5c3RlbTpudWxsLGxheW91dE1vZGU6ImJveCIsaW5pdDpmdW5jdGlvbihlKXtvLnByb3RvdHlwZS5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmRlZmF1bHRFbXBoYXNpcyhlLCJsYWJlbCIsWyJzaG93Il0pfSxvcHRpb25VcGRhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb24sdD10aGlzO2UucmVnaW9ucz1sLmdldEZpbGxlZFJlZ2lvbnMoZS5yZWdpb25zLGUubWFwLGUubmFtZU1hcCksdGhpcy5fb3B0aW9uTW9kZWxNYXA9aS5yZWR1Y2UoZS5yZWdpb25zfHxbXSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gbi5uYW1lJiZlLnNldChuLm5hbWUsbmV3IGEobix0KSksZX0pLGkuY3JlYXRlSGFzaE1hcCgpKSx0aGlzLnVwZGF0ZVNlbGVjdGVkTWFwKGUucmVnaW9ucyl9LGRlZmF1bHRPcHRpb246e3psZXZlbDowLHo6MCxzaG93OiEwLGxlZnQ6ImNlbnRlciIsdG9wOiJjZW50ZXIiLGFzcGVjdFNjYWxlOm51bGwsc2lsZW50OiExLG1hcDoiIixib3VuZGluZ0Nvb3JkczpudWxsLGNlbnRlcjpudWxsLHpvb206MSxzY2FsZUxpbWl0Om51bGwsbGFiZWw6e3Nob3c6ITEsY29sb3I6IiMwMDAifSxpdGVtU3R5bGU6e2JvcmRlcldpZHRoOi41LGJvcmRlckNvbG9yOiIjNDQ0Iixjb2xvcjoiI2VlZSJ9LGVtcGhhc2lzOntsYWJlbDp7c2hvdzohMCxjb2xvcjoicmdiKDEwMCwwLDApIn0saXRlbVN0eWxlOntjb2xvcjoicmdiYSgyNTUsMjE1LDAsMC44KSJ9fSxyZWdpb25zOltdfSxnZXRSZWdpb25Nb2RlbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fb3B0aW9uTW9kZWxNYXAuZ2V0KGUpfHxuZXcgYShudWxsLHRoaXMsdGhpcy5lY01vZGVsKX0sZ2V0Rm9ybWF0dGVkTGFiZWw6ZnVuY3Rpb24oZSx0KXt0PXR8fCJub3JtYWwiO3ZhciBuPXRoaXMuZ2V0UmVnaW9uTW9kZWwoZSksaT1uLmdldCgoIm5vcm1hbCI9PT10PyIiOnQrIi4iKSsibGFiZWwuZm9ybWF0dGVyIikscj17bmFtZTplfTtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGk/KHIuc3RhdHVzPXQsaShyKSk6InN0cmluZyI9PT10eXBlb2YgaT9pLnJlcGxhY2UoInthfSIsbnVsbCE9ZT9lOiIiKTp2b2lkIDB9LHNldFpvb206ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb24uem9vbT1lfSxzZXRDZW50ZXI6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb24uY2VudGVyPWV9fSk7aS5taXhpbihjLHMpO3ZhciB1PWM7ZS5leHBvcnRzPXV9LCIxZmFiIjpmdW5jdGlvbihlLHQpe3ZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZSxpPWZ1bmN0aW9uKGUpe3RoaXMuXyRoYW5kbGVycz17fSx0aGlzLl8kZXZlbnRQcm9jZXNzb3I9ZX07ZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuXyRldmVudFByb2Nlc3NvcjtyZXR1cm4gbnVsbCE9dCYmbiYmbi5ub3JtYWxpemVRdWVyeSYmKHQ9bi5ub3JtYWxpemVRdWVyeSh0KSksdH1mdW5jdGlvbiBvKGUsdCxuLGksbyxhKXt2YXIgcz1lLl8kaGFuZGxlcnM7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBuJiYobz1pLGk9bixuPW51bGwpLCFpfHwhdClyZXR1cm4gZTtuPXIoZSxuKSxzW3RdfHwoc1t0XT1bXSk7Zm9yKHZhciBsPTA7bDxzW3RdLmxlbmd0aDtsKyspaWYoc1t0XVtsXS5oPT09aSlyZXR1cm4gZTt2YXIgYz17aDppLG9uZTphLHF1ZXJ5Om4sY3R4Om98fGUsY2FsbEF0TGFzdDppLnpyRXZlbnRmdWxDYWxsQXRMYXN0fSx1PXNbdF0ubGVuZ3RoLTEsaD1zW3RdW3VdO3JldHVybiBoJiZoLmNhbGxBdExhc3Q/c1t0XS5zcGxpY2UodSwwLGMpOnNbdF0ucHVzaChjKSxlfWkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppLG9uZTpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbyh0aGlzLGUsdCxuLGksITApfSxvbjpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbyh0aGlzLGUsdCxuLGksITEpfSxpc1NpbGVudDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl8kaGFuZGxlcnM7cmV0dXJuIXRbZV18fCF0W2VdLmxlbmd0aH0sb2ZmOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fJGhhbmRsZXJzO2lmKCFlKXJldHVybiB0aGlzLl8kaGFuZGxlcnM9e30sdGhpcztpZih0KXtpZihuW2VdKXtmb3IodmFyIGk9W10scj0wLG89bltlXS5sZW5ndGg7cjxvO3IrKyluW2VdW3JdLmghPT10JiZpLnB1c2gobltlXVtyXSk7bltlXT1pfW5bZV0mJjA9PT1uW2VdLmxlbmd0aCYmZGVsZXRlIG5bZV19ZWxzZSBkZWxldGUgbltlXTtyZXR1cm4gdGhpc30sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl8kaGFuZGxlcnNbZV0saT10aGlzLl8kZXZlbnRQcm9jZXNzb3I7aWYodCl7dmFyIHI9YXJndW1lbnRzLG89ci5sZW5ndGg7bz4zJiYocj1uLmNhbGwociwxKSk7Zm9yKHZhciBhPXQubGVuZ3RoLHM9MDtzPGE7KXt2YXIgbD10W3NdO2lmKGkmJmkuZmlsdGVyJiZudWxsIT1sLnF1ZXJ5JiYhaS5maWx0ZXIoZSxsLnF1ZXJ5KSlzKys7ZWxzZXtzd2l0Y2gobyl7Y2FzZSAxOmwuaC5jYWxsKGwuY3R4KTticmVhaztjYXNlIDI6bC5oLmNhbGwobC5jdHgsclsxXSk7YnJlYWs7Y2FzZSAzOmwuaC5jYWxsKGwuY3R4LHJbMV0sclsyXSk7YnJlYWs7ZGVmYXVsdDpsLmguYXBwbHkobC5jdHgscik7YnJlYWt9bC5vbmU/KHQuc3BsaWNlKHMsMSksYS0tKTpzKyt9fX1yZXR1cm4gaSYmaS5hZnRlclRyaWdnZXImJmkuYWZ0ZXJUcmlnZ2VyKGUpLHRoaXN9LHRyaWdnZXJXaXRoQ29udGV4dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl8kaGFuZGxlcnNbZV0saT10aGlzLl8kZXZlbnRQcm9jZXNzb3I7aWYodCl7dmFyIHI9YXJndW1lbnRzLG89ci5sZW5ndGg7bz40JiYocj1uLmNhbGwociwxLHIubGVuZ3RoLTEpKTtmb3IodmFyIGE9cltyLmxlbmd0aC0xXSxzPXQubGVuZ3RoLGw9MDtsPHM7KXt2YXIgYz10W2xdO2lmKGkmJmkuZmlsdGVyJiZudWxsIT1jLnF1ZXJ5JiYhaS5maWx0ZXIoZSxjLnF1ZXJ5KSlsKys7ZWxzZXtzd2l0Y2gobyl7Y2FzZSAxOmMuaC5jYWxsKGEpO2JyZWFrO2Nhc2UgMjpjLmguY2FsbChhLHJbMV0pO2JyZWFrO2Nhc2UgMzpjLmguY2FsbChhLHJbMV0sclsyXSk7YnJlYWs7ZGVmYXVsdDpjLmguYXBwbHkoYSxyKTticmVha31jLm9uZT8odC5zcGxpY2UobCwxKSxzLS0pOmwrK319fXJldHVybiBpJiZpLmFmdGVyVHJpZ2dlciYmaS5hZnRlclRyaWdnZXIoZSksdGhpc319O3ZhciBhPWk7ZS5leHBvcnRzPWF9LDIwMjM6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPXtnZXRNaW46ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb24sbj1lfHxudWxsPT10LnJhbmdlU3RhcnQ/dC5taW46dC5yYW5nZVN0YXJ0O3JldHVybiB0aGlzLmF4aXMmJm51bGwhPW4mJiJkYXRhTWluIiE9PW4mJiJmdW5jdGlvbiIhPT10eXBlb2YgbiYmIWkuZXFOYU4obikmJihuPXRoaXMuYXhpcy5zY2FsZS5wYXJzZShuKSksbn0sZ2V0TWF4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9uLG49ZXx8bnVsbD09dC5yYW5nZUVuZD90Lm1heDp0LnJhbmdlRW5kO3JldHVybiB0aGlzLmF4aXMmJm51bGwhPW4mJiJkYXRhTWF4IiE9PW4mJiJmdW5jdGlvbiIhPT10eXBlb2YgbiYmIWkuZXFOYU4obikmJihuPXRoaXMuYXhpcy5zY2FsZS5wYXJzZShuKSksbn0sZ2V0TmVlZENyb3NzWmVybzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uO3JldHVybiBudWxsPT1lLnJhbmdlU3RhcnQmJm51bGw9PWUucmFuZ2VFbmQmJiFlLnNjYWxlfSxnZXRDb29yZFN5c01vZGVsOmkubm9vcCxzZXRSYW5nZTpmdW5jdGlvbihlLHQpe3RoaXMub3B0aW9uLnJhbmdlU3RhcnQ9ZSx0aGlzLm9wdGlvbi5yYW5nZUVuZD10fSxyZXNldFJhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb24ucmFuZ2VTdGFydD10aGlzLm9wdGlvbi5yYW5nZUVuZD1udWxsfX07ZS5leHBvcnRzPXJ9LDIwMzk6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPXt9O2Z1bmN0aW9uIG8oKXt0aGlzLl9jb29yZGluYXRlU3lzdGVtcz1bXX1vLnByb3RvdHlwZT17Y29uc3RydWN0b3I6byxjcmVhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtpLmVhY2gociwoZnVuY3Rpb24oaSxyKXt2YXIgbz1pLmNyZWF0ZShlLHQpO249bi5jb25jYXQob3x8W10pfSkpLHRoaXMuX2Nvb3JkaW5hdGVTeXN0ZW1zPW59LHVwZGF0ZTpmdW5jdGlvbihlLHQpe2kuZWFjaCh0aGlzLl9jb29yZGluYXRlU3lzdGVtcywoZnVuY3Rpb24obil7bi51cGRhdGUmJm4udXBkYXRlKGUsdCl9KSl9LGdldENvb3JkaW5hdGVTeXN0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Nvb3JkaW5hdGVTeXN0ZW1zLnNsaWNlKCl9fSxvLnJlZ2lzdGVyPWZ1bmN0aW9uKGUsdCl7cltlXT10fSxvLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gcltlXX07dmFyIGE9bztlLmV4cG9ydHM9YX0sIjIwYzgiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0YTNmIikscj1uKCI0MDFiIiksbz1uKCJlMjYzIiksYT1uKCI5ODUwIikscz1uKCIyY2Y0IiksbD1zLmRldmljZVBpeGVsUmF0aW8sYz17TToxLEw6MixDOjMsUTo0LEE6NSxaOjYsUjo3fSx1PVtdLGg9W10sZD1bXSxmPVtdLHA9TWF0aC5taW4sbT1NYXRoLm1heCxnPU1hdGguY29zLHY9TWF0aC5zaW4seT1NYXRoLnNxcnQsYj1NYXRoLmFicyx4PSJ1bmRlZmluZWQiIT09dHlwZW9mIEZsb2F0MzJBcnJheSxfPWZ1bmN0aW9uKGUpe3RoaXMuX3NhdmVEYXRhPSFlLHRoaXMuX3NhdmVEYXRhJiYodGhpcy5kYXRhPVtdKSx0aGlzLl9jdHg9bnVsbH07Xy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl8sX3hpOjAsX3lpOjAsX3gwOjAsX3kwOjAsX3V4OjAsX3V5OjAsX2xlbjowLF9saW5lRGFzaDpudWxsLF9kYXNoT2Zmc2V0OjAsX2Rhc2hJZHg6MCxfZGFzaFN1bTowLHNldFNjYWxlOmZ1bmN0aW9uKGUsdCxuKXtuPW58fDAsdGhpcy5fdXg9YihuL2wvZSl8fDAsdGhpcy5fdXk9YihuL2wvdCl8fDB9LGdldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3R4fSxiZWdpblBhdGg6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2N0eD1lLGUmJmUuYmVnaW5QYXRoKCksZSYmKHRoaXMuZHByPWUuZHByKSx0aGlzLl9zYXZlRGF0YSYmKHRoaXMuX2xlbj0wKSx0aGlzLl9saW5lRGFzaCYmKHRoaXMuX2xpbmVEYXNoPW51bGwsdGhpcy5fZGFzaE9mZnNldD0wKSx0aGlzfSxtb3ZlVG86ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5hZGREYXRhKGMuTSxlLHQpLHRoaXMuX2N0eCYmdGhpcy5fY3R4Lm1vdmVUbyhlLHQpLHRoaXMuX3gwPWUsdGhpcy5feTA9dCx0aGlzLl94aT1lLHRoaXMuX3lpPXQsdGhpc30sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dmFyIG49YihlLXRoaXMuX3hpKT50aGlzLl91eHx8Yih0LXRoaXMuX3lpKT50aGlzLl91eXx8dGhpcy5fbGVuPDU7cmV0dXJuIHRoaXMuYWRkRGF0YShjLkwsZSx0KSx0aGlzLl9jdHgmJm4mJih0aGlzLl9uZWVkc0Rhc2goKT90aGlzLl9kYXNoZWRMaW5lVG8oZSx0KTp0aGlzLl9jdHgubGluZVRvKGUsdCkpLG4mJih0aGlzLl94aT1lLHRoaXMuX3lpPXQpLHRoaXN9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LG4saSxyLG8pe3JldHVybiB0aGlzLmFkZERhdGEoYy5DLGUsdCxuLGkscixvKSx0aGlzLl9jdHgmJih0aGlzLl9uZWVkc0Rhc2goKT90aGlzLl9kYXNoZWRCZXppZXJUbyhlLHQsbixpLHIsbyk6dGhpcy5fY3R4LmJlemllckN1cnZlVG8oZSx0LG4saSxyLG8pKSx0aGlzLl94aT1yLHRoaXMuX3lpPW8sdGhpc30scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gdGhpcy5hZGREYXRhKGMuUSxlLHQsbixpKSx0aGlzLl9jdHgmJih0aGlzLl9uZWVkc0Rhc2goKT90aGlzLl9kYXNoZWRRdWFkcmF0aWNUbyhlLHQsbixpKTp0aGlzLl9jdHgucXVhZHJhdGljQ3VydmVUbyhlLHQsbixpKSksdGhpcy5feGk9bix0aGlzLl95aT1pLHRoaXN9LGFyYzpmdW5jdGlvbihlLHQsbixpLHIsbyl7cmV0dXJuIHRoaXMuYWRkRGF0YShjLkEsZSx0LG4sbixpLHItaSwwLG8/MDoxKSx0aGlzLl9jdHgmJnRoaXMuX2N0eC5hcmMoZSx0LG4saSxyLG8pLHRoaXMuX3hpPWcocikqbitlLHRoaXMuX3lpPXYocikqbit0LHRoaXN9LGFyY1RvOmZ1bmN0aW9uKGUsdCxuLGkscil7cmV0dXJuIHRoaXMuX2N0eCYmdGhpcy5fY3R4LmFyY1RvKGUsdCxuLGksciksdGhpc30scmVjdDpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gdGhpcy5fY3R4JiZ0aGlzLl9jdHgucmVjdChlLHQsbixpKSx0aGlzLmFkZERhdGEoYy5SLGUsdCxuLGkpLHRoaXN9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuYWRkRGF0YShjLlopO3ZhciBlPXRoaXMuX2N0eCx0PXRoaXMuX3gwLG49dGhpcy5feTA7cmV0dXJuIGUmJih0aGlzLl9uZWVkc0Rhc2goKSYmdGhpcy5fZGFzaGVkTGluZVRvKHQsbiksZS5jbG9zZVBhdGgoKSksdGhpcy5feGk9dCx0aGlzLl95aT1uLHRoaXN9LGZpbGw6ZnVuY3Rpb24oZSl7ZSYmZS5maWxsKCksdGhpcy50b1N0YXRpYygpfSxzdHJva2U6ZnVuY3Rpb24oZSl7ZSYmZS5zdHJva2UoKSx0aGlzLnRvU3RhdGljKCl9LHNldExpbmVEYXNoOmZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSl7dGhpcy5fbGluZURhc2g9ZSx0aGlzLl9kYXNoSWR4PTA7Zm9yKHZhciB0PTAsbj0wO248ZS5sZW5ndGg7bisrKXQrPWVbbl07dGhpcy5fZGFzaFN1bT10fXJldHVybiB0aGlzfSxzZXRMaW5lRGFzaE9mZnNldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fZGFzaE9mZnNldD1lLHRoaXN9LGxlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW59LHNldERhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7dGhpcy5kYXRhJiZ0aGlzLmRhdGEubGVuZ3RoPT09dHx8IXh8fCh0aGlzLmRhdGE9bmV3IEZsb2F0MzJBcnJheSh0KSk7Zm9yKHZhciBuPTA7bjx0O24rKyl0aGlzLmRhdGFbbl09ZVtuXTt0aGlzLl9sZW49dH0sYXBwZW5kUGF0aDpmdW5jdGlvbihlKXtlIGluc3RhbmNlb2YgQXJyYXl8fChlPVtlXSk7Zm9yKHZhciB0PWUubGVuZ3RoLG49MCxpPXRoaXMuX2xlbixyPTA7cjx0O3IrKyluKz1lW3JdLmxlbigpO3gmJnRoaXMuZGF0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmKHRoaXMuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGkrbikpO2ZvcihyPTA7cjx0O3IrKylmb3IodmFyIG89ZVtyXS5kYXRhLGE9MDthPG8ubGVuZ3RoO2ErKyl0aGlzLmRhdGFbaSsrXT1vW2FdO3RoaXMuX2xlbj1pfSxhZGREYXRhOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX3NhdmVEYXRhKXt2YXIgdD10aGlzLmRhdGE7dGhpcy5fbGVuK2FyZ3VtZW50cy5sZW5ndGg+dC5sZW5ndGgmJih0aGlzLl9leHBhbmREYXRhKCksdD10aGlzLmRhdGEpO2Zvcih2YXIgbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFt0aGlzLl9sZW4rK109YXJndW1lbnRzW25dO3RoaXMuX3ByZXZDbWQ9ZX19LF9leHBhbmREYXRhOmZ1bmN0aW9uKCl7aWYoISh0aGlzLmRhdGEgaW5zdGFuY2VvZiBBcnJheSkpe2Zvcih2YXIgZT1bXSx0PTA7dDx0aGlzLl9sZW47dCsrKWVbdF09dGhpcy5kYXRhW3RdO3RoaXMuZGF0YT1lfX0sX25lZWRzRGFzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saW5lRGFzaH0sX2Rhc2hlZExpbmVUbzpmdW5jdGlvbihlLHQpe3ZhciBuLGkscj10aGlzLl9kYXNoU3VtLG89dGhpcy5fZGFzaE9mZnNldCxhPXRoaXMuX2xpbmVEYXNoLHM9dGhpcy5fY3R4LGw9dGhpcy5feGksYz10aGlzLl95aSx1PWUtbCxoPXQtYyxkPXkodSp1K2gqaCksZj1sLGc9Yyx2PWEubGVuZ3RoO3UvPWQsaC89ZCxvPDAmJihvPXIrbyksbyU9cixmLT1vKnUsZy09bypoO3doaWxlKHU+MCYmZjw9ZXx8dTwwJiZmPj1lfHwwPT09dSYmKGg+MCYmZzw9dHx8aDwwJiZnPj10KSlpPXRoaXMuX2Rhc2hJZHgsbj1hW2ldLGYrPXUqbixnKz1oKm4sdGhpcy5fZGFzaElkeD0oaSsxKSV2LHU+MCYmZjxsfHx1PDAmJmY+bHx8aD4wJiZnPGN8fGg8MCYmZz5jfHxzW2klMj8ibW92ZVRvIjoibGluZVRvIl0odT49MD9wKGYsZSk6bShmLGUpLGg+PTA/cChnLHQpOm0oZyx0KSk7dT1mLWUsaD1nLXQsdGhpcy5fZGFzaE9mZnNldD0teSh1KnUraCpoKX0sX2Rhc2hlZEJlemllclRvOmZ1bmN0aW9uKGUsdCxuLHIsbyxhKXt2YXIgcyxsLGMsdSxoLGQ9dGhpcy5fZGFzaFN1bSxmPXRoaXMuX2Rhc2hPZmZzZXQscD10aGlzLl9saW5lRGFzaCxtPXRoaXMuX2N0eCxnPXRoaXMuX3hpLHY9dGhpcy5feWksYj1pLmN1YmljQXQseD0wLF89dGhpcy5fZGFzaElkeCx3PXAubGVuZ3RoLFM9MDtmb3IoZjwwJiYoZj1kK2YpLGYlPWQscz0wO3M8MTtzKz0uMSlsPWIoZyxlLG4sbyxzKy4xKS1iKGcsZSxuLG8scyksYz1iKHYsdCxyLGEscysuMSktYih2LHQscixhLHMpLHgrPXkobCpsK2MqYyk7Zm9yKDtfPHc7XysrKWlmKFMrPXBbX10sUz5mKWJyZWFrO3M9KFMtZikveDt3aGlsZShzPD0xKXU9YihnLGUsbixvLHMpLGg9Yih2LHQscixhLHMpLF8lMj9tLm1vdmVUbyh1LGgpOm0ubGluZVRvKHUsaCkscys9cFtfXS94LF89KF8rMSkldztfJTIhPT0wJiZtLmxpbmVUbyhvLGEpLGw9by11LGM9YS1oLHRoaXMuX2Rhc2hPZmZzZXQ9LXkobCpsK2MqYyl9LF9kYXNoZWRRdWFkcmF0aWNUbzpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1uLG89aTtuPShuKzIqZSkvMyxpPShpKzIqdCkvMyxlPSh0aGlzLl94aSsyKmUpLzMsdD0odGhpcy5feWkrMip0KS8zLHRoaXMuX2Rhc2hlZEJlemllclRvKGUsdCxuLGkscixvKX0sdG9TdGF0aWM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGE7ZSBpbnN0YW5jZW9mIEFycmF5JiYoZS5sZW5ndGg9dGhpcy5fbGVuLHgmJih0aGlzLmRhdGE9bmV3IEZsb2F0MzJBcnJheShlKSkpfSxnZXRCb3VuZGluZ1JlY3Q6ZnVuY3Rpb24oKXt1WzBdPXVbMV09ZFswXT1kWzFdPU51bWJlci5NQVhfVkFMVUUsaFswXT1oWzFdPWZbMF09ZlsxXT0tTnVtYmVyLk1BWF9WQUxVRTtmb3IodmFyIGU9dGhpcy5kYXRhLHQ9MCxuPTAsaT0wLHM9MCxsPTA7bDxlLmxlbmd0aDspe3ZhciBwPWVbbCsrXTtzd2l0Y2goMT09PWwmJih0PWVbbF0sbj1lW2wrMV0saT10LHM9bikscCl7Y2FzZSBjLk06aT1lW2wrK10scz1lW2wrK10sdD1pLG49cyxkWzBdPWksZFsxXT1zLGZbMF09aSxmWzFdPXM7YnJlYWs7Y2FzZSBjLkw6by5mcm9tTGluZSh0LG4sZVtsXSxlW2wrMV0sZCxmKSx0PWVbbCsrXSxuPWVbbCsrXTticmVhaztjYXNlIGMuQzpvLmZyb21DdWJpYyh0LG4sZVtsKytdLGVbbCsrXSxlW2wrK10sZVtsKytdLGVbbF0sZVtsKzFdLGQsZiksdD1lW2wrK10sbj1lW2wrK107YnJlYWs7Y2FzZSBjLlE6by5mcm9tUXVhZHJhdGljKHQsbixlW2wrK10sZVtsKytdLGVbbF0sZVtsKzFdLGQsZiksdD1lW2wrK10sbj1lW2wrK107YnJlYWs7Y2FzZSBjLkE6dmFyIG09ZVtsKytdLHk9ZVtsKytdLGI9ZVtsKytdLHg9ZVtsKytdLF89ZVtsKytdLHc9ZVtsKytdK187bCs9MTt2YXIgUz0xLWVbbCsrXTsxPT09bCYmKGk9ZyhfKSpiK20scz12KF8pKngreSksby5mcm9tQXJjKG0seSxiLHgsXyx3LFMsZCxmKSx0PWcodykqYittLG49dih3KSp4K3k7YnJlYWs7Y2FzZSBjLlI6aT10PWVbbCsrXSxzPW49ZVtsKytdO3ZhciBDPWVbbCsrXSxrPWVbbCsrXTtvLmZyb21MaW5lKGkscyxpK0MscytrLGQsZik7YnJlYWs7Y2FzZSBjLlo6dD1pLG49czticmVha31yLm1pbih1LHUsZCksci5tYXgoaCxoLGYpfXJldHVybiAwPT09bCYmKHVbMF09dVsxXT1oWzBdPWhbMV09MCksbmV3IGEodVswXSx1WzFdLGhbMF0tdVswXSxoWzFdLXVbMV0pfSxyZWJ1aWxkUGF0aDpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixpLHIsbyxhLHM9dGhpcy5kYXRhLGw9dGhpcy5fdXgsdT10aGlzLl91eSxoPXRoaXMuX2xlbixkPTA7ZDxoOyl7dmFyIGY9c1tkKytdO3N3aXRjaCgxPT09ZCYmKGk9c1tkXSxyPXNbZCsxXSx0PWksbj1yKSxmKXtjYXNlIGMuTTp0PWk9c1tkKytdLG49cj1zW2QrK10sZS5tb3ZlVG8oaSxyKTticmVhaztjYXNlIGMuTDpvPXNbZCsrXSxhPXNbZCsrXSwoYihvLWkpPmx8fGIoYS1yKT51fHxkPT09aC0xKSYmKGUubGluZVRvKG8sYSksaT1vLHI9YSk7YnJlYWs7Y2FzZSBjLkM6ZS5iZXppZXJDdXJ2ZVRvKHNbZCsrXSxzW2QrK10sc1tkKytdLHNbZCsrXSxzW2QrK10sc1tkKytdKSxpPXNbZC0yXSxyPXNbZC0xXTticmVhaztjYXNlIGMuUTplLnF1YWRyYXRpY0N1cnZlVG8oc1tkKytdLHNbZCsrXSxzW2QrK10sc1tkKytdKSxpPXNbZC0yXSxyPXNbZC0xXTticmVhaztjYXNlIGMuQTp2YXIgcD1zW2QrK10sbT1zW2QrK10seT1zW2QrK10seD1zW2QrK10sXz1zW2QrK10sdz1zW2QrK10sUz1zW2QrK10sQz1zW2QrK10saz15Png/eTp4LFQ9eT54PzE6eS94LE09eT54P3gveToxLEU9TWF0aC5hYnMoeS14KT4uMDAxLEk9Xyt3O0U/KGUudHJhbnNsYXRlKHAsbSksZS5yb3RhdGUoUyksZS5zY2FsZShULE0pLGUuYXJjKDAsMCxrLF8sSSwxLUMpLGUuc2NhbGUoMS9ULDEvTSksZS5yb3RhdGUoLVMpLGUudHJhbnNsYXRlKC1wLC1tKSk6ZS5hcmMocCxtLGssXyxJLDEtQyksMT09PWQmJih0PWcoXykqeStwLG49dihfKSp4K20pLGk9ZyhJKSp5K3Ascj12KEkpKngrbTticmVhaztjYXNlIGMuUjp0PWk9c1tkXSxuPXI9c1tkKzFdLGUucmVjdChzW2QrK10sc1tkKytdLHNbZCsrXSxzW2QrK10pO2JyZWFrO2Nhc2UgYy5aOmUuY2xvc2VQYXRoKCksaT10LHI9bn19fX0sXy5DTUQ9Yzt2YXIgdz1fO2UuZXhwb3J0cz13fSwyMTA2OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKG4pe3ZhciBpLHI7ZnVuY3Rpb24gbyhlKXtyZXR1cm4obz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLmtleSxpKX19ZnVuY3Rpb24gbChlLHQsbil7cmV0dXJuIHQmJnMoZS5wcm90b3R5cGUsdCksbiYmcyhlLG4pLGV9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiB1KGUpfHxoKGUsdCl8fGQoZSx0KXx8cCgpfWZ1bmN0aW9uIHUoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX1mdW5jdGlvbiBoKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSkpe3ZhciBuPVtdLGk9ITAscj0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShpPShhPXMubmV4dCgpKS5kb25lKSYmKG4ucHVzaChhLnZhbHVlKSwhdHx8bi5sZW5ndGghPT10KTtpPSEwKTt9Y2F0Y2goZSl7cj0hMCxvPWV9ZmluYWxseXt0cnl7aXx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihyKXRocm93IG99fXJldHVybiBufX1mdW5jdGlvbiBkKGUsdCl7aWYoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBmKGUsdCk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnNsaWNlKDgsLTEpO3JldHVybiJPYmplY3QiPT09biYmZS5jb25zdHJ1Y3RvciYmKG49ZS5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PW58fCJTZXQiPT09bj9BcnJheS5mcm9tKGUpOiJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3Qobik/ZihlLHQpOnZvaWQgMH19ZnVuY3Rpb24gZihlLHQpeyhudWxsPT10fHx0PmUubGVuZ3RoKSYmKHQ9ZS5sZW5ndGgpO2Zvcih2YXIgbj0wLGk9bmV3IEFycmF5KHQpO248dDtuKyspaVtuXT1lW25dO3JldHVybiBpfWZ1bmN0aW9uIHAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfWZ1bmN0aW9uIG0oZSx0KXt2YXIgbjtpZigidW5kZWZpbmVkIj09dHlwZW9mIFN5bWJvbHx8bnVsbD09ZVtTeW1ib2wuaXRlcmF0b3JdKXtpZihBcnJheS5pc0FycmF5KGUpfHwobj1kKGUpKXx8dCYmZSYmIm51bWJlciI9PXR5cGVvZiBlLmxlbmd0aCl7biYmKGU9bik7dmFyIGk9MDtyZXR1cm57czp0PWZ1bmN0aW9uKCl7fSxuOmZ1bmN0aW9uKCl7cmV0dXJuIGk+PWUubGVuZ3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTplW2krK119fSxlOmZ1bmN0aW9uKGUpe3Rocm93IGV9LGY6dH19dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfXZhciByLG89ITAsYT0hMTtyZXR1cm57czpmdW5jdGlvbigpe249ZVtTeW1ib2wuaXRlcmF0b3JdKCl9LG46ZnVuY3Rpb24oKXt2YXIgZT1uLm5leHQoKTtyZXR1cm4gbz1lLmRvbmUsZX0sZTpmdW5jdGlvbihlKXthPSEwLHI9ZX0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgcn19fX1mdW5jdGlvbiBnKGUsdCxuKXtyZXR1cm4gZShuPXtwYXRoOnQsZXhwb3J0czp7fSxyZXF1aXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYoZSxudWxsPT10P24ucGF0aDp0KX19LG4uZXhwb3J0cyksbi5leHBvcnRzfWZ1bmN0aW9uIHYoKXt0aHJvdyBuZXcgRXJyb3IoIkR5bmFtaWMgcmVxdWlyZXMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIil9dmFyIHk9IjIuMC4wIixiPTI1Nix4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSfHw5MDA3MTk5MjU0NzQwOTkxLF89MTYsdz17U0VNVkVSX1NQRUNfVkVSU0lPTjp5LE1BWF9MRU5HVEg6YixNQVhfU0FGRV9JTlRFR0VSOngsTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSDpffSxTPSJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT10eXBlb2Ygbj8idW5kZWZpbmVkIjpvKG4pKSYmT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KSYmT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5OT0RFX0RFQlVHJiYvXGJzZW12ZXJcYi9pLnRlc3QoT2JqZWN0KHtOT0RFX0VOVjoicHJvZHVjdGlvbiIsQkFTRV9VUkw6IiJ9KS5OT0RFX0RFQlVHKT9mdW5jdGlvbigpe2Zvcih2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCksaT0wO2k8dDtpKyspbltpXT1hcmd1bWVudHNbaV07cmV0dXJuKGU9Y29uc29sZSkuZXJyb3IuYXBwbHkoZSxbIlNFTVZFUiJdLmNvbmNhdChuKSl9OmZ1bmN0aW9uKCl7fSxDPVMsaz1nKChmdW5jdGlvbihlLHQpe3ZhciBuPXcuTUFYX1NBRkVfQ09NUE9ORU5UX0xFTkdUSCxpPSh0PWUuZXhwb3J0cz17fSkucmU9W10scj10LnNyYz1bXSxvPXQudD17fSxhPTA7KGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBzPWErKztDKHMsdCksb1tlXT1zLHJbc109dCxpW3NdPW5ldyBSZWdFeHAodCxuPyJnIjp2b2lkIDApfSkoIk5VTUVSSUNJREVOVElGSUVSIiwiMHxbMS05XVxcZCoiKSxlKCJOVU1FUklDSURFTlRJRklFUkxPT1NFIiwiWzAtOV0rIiksZSgiTk9OTlVNRVJJQ0lERU5USUZJRVIiLCJcXGQqW2EtekEtWi1dW2EtekEtWjAtOS1dKiIpLGUoIk1BSU5WRVJTSU9OIiwiKCIuY29uY2F0KHJbby5OVU1FUklDSURFTlRJRklFUl0sIilcXC4iKSsiKCIuY29uY2F0KHJbby5OVU1FUklDSURFTlRJRklFUl0sIilcXC4iKSsiKCIuY29uY2F0KHJbby5OVU1FUklDSURFTlRJRklFUl0sIikiKSksZSgiTUFJTlZFUlNJT05MT09TRSIsIigiLmNvbmNhdChyW28uTlVNRVJJQ0lERU5USUZJRVJMT09TRV0sIilcXC4iKSsiKCIuY29uY2F0KHJbby5OVU1FUklDSURFTlRJRklFUkxPT1NFXSwiKVxcLiIpKyIoIi5jb25jYXQocltvLk5VTUVSSUNJREVOVElGSUVSTE9PU0VdLCIpIikpLGUoIlBSRVJFTEVBU0VJREVOVElGSUVSIiwiKD86Ii5jb25jYXQocltvLk5VTUVSSUNJREVOVElGSUVSXSwifCIpLmNvbmNhdChyW28uTk9OTlVNRVJJQ0lERU5USUZJRVJdLCIpIikpLGUoIlBSRVJFTEVBU0VJREVOVElGSUVSTE9PU0UiLCIoPzoiLmNvbmNhdChyW28uTlVNRVJJQ0lERU5USUZJRVJMT09TRV0sInwiKS5jb25jYXQocltvLk5PTk5VTUVSSUNJREVOVElGSUVSXSwiKSIpKSxlKCJQUkVSRUxFQVNFIiwiKD86LSgiLmNvbmNhdChyW28uUFJFUkVMRUFTRUlERU5USUZJRVJdLCIoPzpcXC4iKS5jb25jYXQocltvLlBSRVJFTEVBU0VJREVOVElGSUVSXSwiKSopKSIpKSxlKCJQUkVSRUxFQVNFTE9PU0UiLCIoPzotPygiLmNvbmNhdChyW28uUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV0sIig/OlxcLiIpLmNvbmNhdChyW28uUFJFUkVMRUFTRUlERU5USUZJRVJMT09TRV0sIikqKSkiKSksZSgiQlVJTERJREVOVElGSUVSIiwiWzAtOUEtWmEtei1dKyIpLGUoIkJVSUxEIiwiKD86XFwrKCIuY29uY2F0KHJbby5CVUlMRElERU5USUZJRVJdLCIoPzpcXC4iKS5jb25jYXQocltvLkJVSUxESURFTlRJRklFUl0sIikqKSkiKSksZSgiRlVMTFBMQUlOIiwidj8iLmNvbmNhdChyW28uTUFJTlZFUlNJT05dKS5jb25jYXQocltvLlBSRVJFTEVBU0VdLCI/IikuY29uY2F0KHJbby5CVUlMRF0sIj8iKSksZSgiRlVMTCIsIl4iLmNvbmNhdChyW28uRlVMTFBMQUlOXSwiJCIpKSxlKCJMT09TRVBMQUlOIiwiW3Y9XFxzXSoiLmNvbmNhdChyW28uTUFJTlZFUlNJT05MT09TRV0pLmNvbmNhdChyW28uUFJFUkVMRUFTRUxPT1NFXSwiPyIpLmNvbmNhdChyW28uQlVJTERdLCI/IikpLGUoIkxPT1NFIiwiXiIuY29uY2F0KHJbby5MT09TRVBMQUlOXSwiJCIpKSxlKCJHVExUIiwiKCg/Ojx8Pik/PT8pIiksZSgiWFJBTkdFSURFTlRJRklFUkxPT1NFIiwiIi5jb25jYXQocltvLk5VTUVSSUNJREVOVElGSUVSTE9PU0VdLCJ8eHxYfFxcKiIpKSxlKCJYUkFOR0VJREVOVElGSUVSIiwiIi5jb25jYXQocltvLk5VTUVSSUNJREVOVElGSUVSXSwifHh8WHxcXCoiKSksZSgiWFJBTkdFUExBSU4iLCJbdj1cXHNdKigiLmNvbmNhdChyW28uWFJBTkdFSURFTlRJRklFUl0sIikiKSsiKD86XFwuKCIuY29uY2F0KHJbby5YUkFOR0VJREVOVElGSUVSXSwiKSIpKyIoPzpcXC4oIi5jb25jYXQocltvLlhSQU5HRUlERU5USUZJRVJdLCIpIikrIig/OiIuY29uY2F0KHJbby5QUkVSRUxFQVNFXSwiKT8iKS5jb25jYXQocltvLkJVSUxEXSwiPyIpKyIpPyk/IiksZSgiWFJBTkdFUExBSU5MT09TRSIsIlt2PVxcc10qKCIuY29uY2F0KHJbby5YUkFOR0VJREVOVElGSUVSTE9PU0VdLCIpIikrIig/OlxcLigiLmNvbmNhdChyW28uWFJBTkdFSURFTlRJRklFUkxPT1NFXSwiKSIpKyIoPzpcXC4oIi5jb25jYXQocltvLlhSQU5HRUlERU5USUZJRVJMT09TRV0sIikiKSsiKD86Ii5jb25jYXQocltvLlBSRVJFTEVBU0VMT09TRV0sIik/IikuY29uY2F0KHJbby5CVUlMRF0sIj8iKSsiKT8pPyIpLGUoIlhSQU5HRSIsIl4iLmNvbmNhdChyW28uR1RMVF0sIlxccyoiKS5jb25jYXQocltvLlhSQU5HRVBMQUlOXSwiJCIpKSxlKCJYUkFOR0VMT09TRSIsIl4iLmNvbmNhdChyW28uR1RMVF0sIlxccyoiKS5jb25jYXQocltvLlhSQU5HRVBMQUlOTE9PU0VdLCIkIikpLGUoIkNPRVJDRSIsIiIuY29uY2F0KCIoXnxbXlxcZF0pKFxcZHsxLCIpLmNvbmNhdChuLCJ9KSIpKyIoPzpcXC4oXFxkezEsIi5jb25jYXQobiwifSkpPyIpKyIoPzpcXC4oXFxkezEsIi5jb25jYXQobiwifSkpPyIpKyIoPzokfFteXFxkXSkiKSxlKCJDT0VSQ0VSVEwiLHJbby5DT0VSQ0VdLCEwKSxlKCJMT05FVElMREUiLCIoPzp+Pj8pIiksZSgiVElMREVUUklNIiwiKFxccyopIi5jb25jYXQocltvLkxPTkVUSUxERV0sIlxccysiKSwhMCksdC50aWxkZVRyaW1SZXBsYWNlPSIkMX4iLGUoIlRJTERFIiwiXiIuY29uY2F0KHJbby5MT05FVElMREVdKS5jb25jYXQocltvLlhSQU5HRVBMQUlOXSwiJCIpKSxlKCJUSUxERUxPT1NFIiwiXiIuY29uY2F0KHJbby5MT05FVElMREVdKS5jb25jYXQocltvLlhSQU5HRVBMQUlOTE9PU0VdLCIkIikpLGUoIkxPTkVDQVJFVCIsIig/OlxcXikiKSxlKCJDQVJFVFRSSU0iLCIoXFxzKikiLmNvbmNhdChyW28uTE9ORUNBUkVUXSwiXFxzKyIpLCEwKSx0LmNhcmV0VHJpbVJlcGxhY2U9IiQxXiIsZSgiQ0FSRVQiLCJeIi5jb25jYXQocltvLkxPTkVDQVJFVF0pLmNvbmNhdChyW28uWFJBTkdFUExBSU5dLCIkIikpLGUoIkNBUkVUTE9PU0UiLCJeIi5jb25jYXQocltvLkxPTkVDQVJFVF0pLmNvbmNhdChyW28uWFJBTkdFUExBSU5MT09TRV0sIiQiKSksZSgiQ09NUEFSQVRPUkxPT1NFIiwiXiIuY29uY2F0KHJbby5HVExUXSwiXFxzKigiKS5jb25jYXQocltvLkxPT1NFUExBSU5dLCIpJHxeJCIpKSxlKCJDT01QQVJBVE9SIiwiXiIuY29uY2F0KHJbby5HVExUXSwiXFxzKigiKS5jb25jYXQocltvLkZVTExQTEFJTl0sIikkfF4kIikpLGUoIkNPTVBBUkFUT1JUUklNIiwiKFxccyopIi5jb25jYXQocltvLkdUTFRdLCJcXHMqKCIpLmNvbmNhdChyW28uTE9PU0VQTEFJTl0sInwiKS5jb25jYXQocltvLlhSQU5HRVBMQUlOXSwiKSIpLCEwKSx0LmNvbXBhcmF0b3JUcmltUmVwbGFjZT0iJDEkMiQzIixlKCJIWVBIRU5SQU5HRSIsIl5cXHMqKCIuY29uY2F0KHJbby5YUkFOR0VQTEFJTl0sIikiKSsiXFxzKy1cXHMrIisiKCIuY29uY2F0KHJbby5YUkFOR0VQTEFJTl0sIikiKSsiXFxzKiQiKSxlKCJIWVBIRU5SQU5HRUxPT1NFIiwiXlxccyooIi5jb25jYXQocltvLlhSQU5HRVBMQUlOTE9PU0VdLCIpIikrIlxccystXFxzKyIrIigiLmNvbmNhdChyW28uWFJBTkdFUExBSU5MT09TRV0sIikiKSsiXFxzKiQiKSxlKCJTVEFSIiwiKDx8Pik/PT9cXHMqXFwqIiksZSgiR1RFMCIsIl5cXHMqPj1cXHMqMC4wLjBcXHMqJCIpLGUoIkdURTBQUkUiLCJeXFxzKj49XFxzKjAuMC4wLTBcXHMqJCIpfSkpLFQ9L15bMC05XSskLyxNPWZ1bmN0aW9uKGUsdCl7dmFyIG49VC50ZXN0KGUpLGk9VC50ZXN0KHQpO3JldHVybiBuJiZpJiYoZT0rZSx0PSt0KSxlPT09dD8wOm4mJiFpfHwoIWl8fG4pJiZlPHQ/LTE6MX0sRT1mdW5jdGlvbihlLHQpe3JldHVybiBNKHQsZSl9LEk9e2NvbXBhcmVJZGVudGlmaWVyczpNLHJjb21wYXJlSWRlbnRpZmllcnM6RX0sRD13Lk1BWF9MRU5HVEgsQT13Lk1BWF9TQUZFX0lOVEVHRVIsTz1rLnJlLFA9ay50LEw9SS5jb21wYXJlSWRlbnRpZmllcnMsTj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtpZihhKHRoaXMsZSksbiYmIm9iamVjdCI9PT1vKG4pfHwobj17bG9vc2U6ISFuLGluY2x1ZGVQcmVyZWxlYXNlOiExfSksdCBpbnN0YW5jZW9mIGUpe2lmKHQubG9vc2U9PT0hIW4ubG9vc2UmJnQuaW5jbHVkZVByZXJlbGVhc2U9PT0hIW4uaW5jbHVkZVByZXJlbGVhc2UpcmV0dXJuIHQ7dD10LnZlcnNpb259ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBWZXJzaW9uOiAiLmNvbmNhdCh0KSk7aWYodC5sZW5ndGg+RCl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2ZXJzaW9uIGlzIGxvbmdlciB0aGFuICIuY29uY2F0KEQsIiBjaGFyYWN0ZXJzIikpO2lmKEMoIlNlbVZlciIsdCxuKSx0aGlzLm9wdGlvbnM9bix0aGlzLmxvb3NlPSEhbi5sb29zZSx0aGlzLmluY2x1ZGVQcmVyZWxlYXNlPSEhbi5pbmNsdWRlUHJlcmVsZWFzZSwhKG49dC50cmltKCkubWF0Y2gobi5sb29zZT9PW1AuTE9PU0VdOk9bUC5GVUxMXSkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgVmVyc2lvbjogIi5jb25jYXQodCkpO2lmKHRoaXMucmF3PXQsdGhpcy5tYWpvcj0rblsxXSx0aGlzLm1pbm9yPStuWzJdLHRoaXMucGF0Y2g9K25bM10sdGhpcy5tYWpvcj5BfHx0aGlzLm1ham9yPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBtYWpvciB2ZXJzaW9uIik7aWYodGhpcy5taW5vcj5BfHx0aGlzLm1pbm9yPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBtaW5vciB2ZXJzaW9uIik7aWYodGhpcy5wYXRjaD5BfHx0aGlzLnBhdGNoPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRjaCB2ZXJzaW9uIik7bls0XT90aGlzLnByZXJlbGVhc2U9bls0XS5zcGxpdCgiLiIpLm1hcCgoZnVuY3Rpb24oZSl7aWYoL15bMC05XSskLy50ZXN0KGUpKXt2YXIgdD0rZTtpZigwPD10JiZ0PEEpcmV0dXJuIHR9cmV0dXJuIGV9KSk6dGhpcy5wcmVyZWxlYXNlPVtdLHRoaXMuYnVpbGQ9bls1XT9uWzVdLnNwbGl0KCIuIik6W10sdGhpcy5mb3JtYXQoKX1yZXR1cm4gbChlLFt7a2V5OiJmb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVyc2lvbj0iIi5jb25jYXQodGhpcy5tYWpvciwiLiIpLmNvbmNhdCh0aGlzLm1pbm9yLCIuIikuY29uY2F0KHRoaXMucGF0Y2gpLHRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJih0aGlzLnZlcnNpb24rPSItIi5jb25jYXQodGhpcy5wcmVyZWxlYXNlLmpvaW4oIi4iKSkpLHRoaXMudmVyc2lvbn19LHtrZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnNpb259fSx7a2V5OiJjb21wYXJlIix2YWx1ZTpmdW5jdGlvbih0KXtpZihDKCJTZW1WZXIuY29tcGFyZSIsdGhpcy52ZXJzaW9uLHRoaXMub3B0aW9ucyx0KSwhKHQgaW5zdGFuY2VvZiBlKSl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0PT09dGhpcy52ZXJzaW9uKXJldHVybiAwO3Q9bmV3IGUodCx0aGlzLm9wdGlvbnMpfXJldHVybiB0LnZlcnNpb249PT10aGlzLnZlcnNpb24/MDp0aGlzLmNvbXBhcmVNYWluKHQpfHx0aGlzLmNvbXBhcmVQcmUodCl9fSx7a2V5OiJjb21wYXJlTWFpbiIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHwodD1uZXcgZSh0LHRoaXMub3B0aW9ucykpLEwodGhpcy5tYWpvcix0Lm1ham9yKXx8TCh0aGlzLm1pbm9yLHQubWlub3IpfHxMKHRoaXMucGF0Y2gsdC5wYXRjaCl9fSx7a2V5OiJjb21wYXJlUHJlIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZXx8KHQ9bmV3IGUodCx0aGlzLm9wdGlvbnMpKSx0aGlzLnByZXJlbGVhc2UubGVuZ3RoJiYhdC5wcmVyZWxlYXNlLmxlbmd0aClyZXR1cm4tMTtpZighdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmdC5wcmVyZWxlYXNlLmxlbmd0aClyZXR1cm4gMTtpZighdGhpcy5wcmVyZWxlYXNlLmxlbmd0aCYmIXQucHJlcmVsZWFzZS5sZW5ndGgpcmV0dXJuIDA7dmFyIG49MDtkb3t2YXIgaT10aGlzLnByZXJlbGVhc2Vbbl0scj10LnByZXJlbGVhc2Vbbl07aWYoQygicHJlcmVsZWFzZSBjb21wYXJlIixuLGksciksdm9pZCAwPT09aSYmdm9pZCAwPT09cilyZXR1cm4gMDtpZih2b2lkIDA9PT1yKXJldHVybiAxO2lmKHZvaWQgMD09PWkpcmV0dXJuLTE7aWYoaSE9PXIpcmV0dXJuIEwoaSxyKX13aGlsZSgrK24pfX0se2tleToiY29tcGFyZUJ1aWxkIix2YWx1ZTpmdW5jdGlvbih0KXt0IGluc3RhbmNlb2YgZXx8KHQ9bmV3IGUodCx0aGlzLm9wdGlvbnMpKTt2YXIgbj0wO2Rve3ZhciBpPXRoaXMuYnVpbGRbbl0scj10LmJ1aWxkW25dO2lmKEMoInByZXJlbGVhc2UgY29tcGFyZSIsbixpLHIpLHZvaWQgMD09PWkmJnZvaWQgMD09PXIpcmV0dXJuIDA7aWYodm9pZCAwPT09cilyZXR1cm4gMTtpZih2b2lkIDA9PT1pKXJldHVybi0xO2lmKGkhPT1yKXJldHVybiBMKGkscil9d2hpbGUoKytuKX19LHtrZXk6ImluYyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJwcmVtYWpvciI6dGhpcy5wcmVyZWxlYXNlLmxlbmd0aD0wLHRoaXMucGF0Y2g9MCx0aGlzLm1pbm9yPTAsdGhpcy5tYWpvcisrLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UicHJlbWlub3IiOnRoaXMucHJlcmVsZWFzZS5sZW5ndGg9MCx0aGlzLnBhdGNoPTAsdGhpcy5taW5vcisrLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UicHJlcGF0Y2giOnRoaXMucHJlcmVsZWFzZS5sZW5ndGg9MCx0aGlzLmluYygicGF0Y2giLHQpLHRoaXMuaW5jKCJwcmUiLHQpO2JyZWFrO2Nhc2UicHJlcmVsZWFzZSI6MD09PXRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJnRoaXMuaW5jKCJwYXRjaCIsdCksdGhpcy5pbmMoInByZSIsdCk7YnJlYWs7Y2FzZSJtYWpvciI6MD09PXRoaXMubWlub3ImJjA9PT10aGlzLnBhdGNoJiYwIT09dGhpcy5wcmVyZWxlYXNlLmxlbmd0aHx8dGhpcy5tYWpvcisrLHRoaXMubWlub3I9MCx0aGlzLnBhdGNoPTAsdGhpcy5wcmVyZWxlYXNlPVtdO2JyZWFrO2Nhc2UibWlub3IiOjA9PT10aGlzLnBhdGNoJiYwIT09dGhpcy5wcmVyZWxlYXNlLmxlbmd0aHx8dGhpcy5taW5vcisrLHRoaXMucGF0Y2g9MCx0aGlzLnByZXJlbGVhc2U9W107YnJlYWs7Y2FzZSJwYXRjaCI6MD09PXRoaXMucHJlcmVsZWFzZS5sZW5ndGgmJnRoaXMucGF0Y2grKyx0aGlzLnByZXJlbGVhc2U9W107YnJlYWs7Y2FzZSJwcmUiOmlmKDA9PT10aGlzLnByZXJlbGVhc2UubGVuZ3RoKXRoaXMucHJlcmVsZWFzZT1bMF07ZWxzZXtmb3IodmFyIG49dGhpcy5wcmVyZWxlYXNlLmxlbmd0aDswPD0tLW47KSJudW1iZXIiPT10eXBlb2YgdGhpcy5wcmVyZWxlYXNlW25dJiYodGhpcy5wcmVyZWxlYXNlW25dKyssbj0tMik7LTE9PT1uJiZ0aGlzLnByZXJlbGVhc2UucHVzaCgwKX10JiYodGhpcy5wcmVyZWxlYXNlWzBdIT09dHx8aXNOYU4odGhpcy5wcmVyZWxlYXNlWzFdKSkmJih0aGlzLnByZXJlbGVhc2U9W3QsMF0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGluY3JlbWVudCBhcmd1bWVudDogIi5jb25jYXQoZSkpfXJldHVybiB0aGlzLmZvcm1hdCgpLHRoaXMucmF3PXRoaXMudmVyc2lvbix0aGlzfX1dKSxlfSgpLFI9TiwkPXcuTUFYX0xFTkdUSCx6PWsucmUsQj1rLnQsRj1mdW5jdGlvbihlLHQpe2lmKHQmJiJvYmplY3QiPT09byh0KXx8KHQ9e2xvb3NlOiEhdCxpbmNsdWRlUHJlcmVsZWFzZTohMX0pLGUgaW5zdGFuY2VvZiBSKXJldHVybiBlO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDtpZihlLmxlbmd0aD4kKXJldHVybiBudWxsO2lmKCEodC5sb29zZT96W0IuTE9PU0VdOnpbQi5GVUxMXSkudGVzdChlKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIG5ldyBSKGUsdCl9Y2F0Y2goZSl7cmV0dXJuIG51bGx9fSxWPUYsaj1mdW5jdGlvbihlLHQpe3JldHVybih0PVYoZSx0KSk/dC52ZXJzaW9uOm51bGx9LEg9aixXPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9VihlLnRyaW0oKS5yZXBsYWNlKC9eWz12XSsvLCIiKSx0KSk/dC52ZXJzaW9uOm51bGx9LEc9VyxVPWZ1bmN0aW9uKGUsdCxuLGkpeyJzdHJpbmciPT10eXBlb2YgbiYmKGk9bixuPXZvaWQgMCk7dHJ5e3JldHVybiBuZXcgUihlLG4pLmluYyh0LGkpLnZlcnNpb259Y2F0Y2goZSl7cmV0dXJuIG51bGx9fSxxPVUsWT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG5ldyBSKGUsbikuY29tcGFyZShuZXcgUih0LG4pKX0sWD1ZLEs9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAwPT09WChlLHQsbil9LFo9SyxKPWZ1bmN0aW9uKGUsdCl7aWYoWihlLHQpKXJldHVybiBudWxsO3ZhciBuLGk9VihlKSxyPVYodCksbz0odD1pLnByZXJlbGVhc2UubGVuZ3RofHxyLnByZXJlbGVhc2UubGVuZ3RoKT8icHJlIjoiIjt0PXQ/InByZXJlbGVhc2UiOiIiO2ZvcihuIGluIGkpaWYoKCJtYWpvciI9PT1ufHwibWlub3IiPT09bnx8InBhdGNoIj09PW4pJiZpW25dIT09cltuXSlyZXR1cm4gbytuO3JldHVybiB0fSxRPUosZWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFIoZSx0KS5tYWpvcn0sdGU9ZWUsbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFIoZSx0KS5taW5vcn0saWU9bmUscmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFIoZSx0KS5wYXRjaH0sb2U9cmUsYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odD1WKGUsdCkpJiZ0LnByZXJlbGVhc2UubGVuZ3RoP3QucHJlcmVsZWFzZTpudWxsfSxzZT1hZSxsZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIFgodCxlLG4pfSxjZT1sZSx1ZT1mdW5jdGlvbihlLHQpe3JldHVybiBYKGUsdCwhMCl9LGhlPXVlLGRlPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT1uZXcgUihlLG4pLG49bmV3IFIodCxuKSxlLmNvbXBhcmUobil8fGUuY29tcGFyZUJ1aWxkKG4pfSxmZT1kZSxwZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGZlKGUsbix0KX0pKX0sbWU9cGUsZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zb3J0KChmdW5jdGlvbihlLG4pe3JldHVybiBmZShuLGUsdCl9KSl9LHZlPWdlLHllPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMDxYKGUsdCxuKX0sYmU9eWUseGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBYKGUsdCxuKTwwfSxfZT14ZSx3ZT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIDAhPT1YKGUsdCxuKX0sU2U9d2UsQ2U9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAwPD1YKGUsdCxuKX0sa2U9Q2UsVGU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBYKGUsdCxuKTw9MH0sTWU9VGUsRWU9ZnVuY3Rpb24oZSx0LG4saSl7c3dpdGNoKHQpe2Nhc2UiPT09IjpyZXR1cm4ib2JqZWN0Ij09PW8oZSkmJihlPWUudmVyc2lvbiksIm9iamVjdCI9PT1vKG4pJiYobj1uLnZlcnNpb24pLGU9PT1uO2Nhc2UiIT09IjpyZXR1cm4ib2JqZWN0Ij09PW8oZSkmJihlPWUudmVyc2lvbiksIm9iamVjdCI9PT1vKG4pJiYobj1uLnZlcnNpb24pLGUhPT1uO2Nhc2UiIjpjYXNlIj0iOmNhc2UiPT0iOnJldHVybiBaKGUsbixpKTtjYXNlIiE9IjpyZXR1cm4gU2UoZSxuLGkpO2Nhc2UiPiI6cmV0dXJuIGJlKGUsbixpKTtjYXNlIj49IjpyZXR1cm4ga2UoZSxuLGkpO2Nhc2UiPCI6cmV0dXJuIF9lKGUsbixpKTtjYXNlIjw9IjpyZXR1cm4gTWUoZSxuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBvcGVyYXRvcjogIi5jb25jYXQodCkpfX0sSWU9RWUsRGU9ay5yZSxBZT1rLnQsT2U9ZnVuY3Rpb24oZSx0KXtpZihlIGluc3RhbmNlb2YgUilyZXR1cm4gZTtpZigibnVtYmVyIj09dHlwZW9mIGUmJihlPVN0cmluZyhlKSksInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3ZhciBuLGk9bnVsbDtpZigodD10fHx7fSkucnRsKXtmb3IoOyhuPURlW0FlLkNPRVJDRVJUTF0uZXhlYyhlKSkmJighaXx8aS5pbmRleCtpWzBdLmxlbmd0aCE9PWUubGVuZ3RoKTspaSYmbi5pbmRleCtuWzBdLmxlbmd0aD09PWkuaW5kZXgraVswXS5sZW5ndGh8fChpPW4pLERlW0FlLkNPRVJDRVJUTF0ubGFzdEluZGV4PW4uaW5kZXgrblsxXS5sZW5ndGgrblsyXS5sZW5ndGg7RGVbQWUuQ09FUkNFUlRMXS5sYXN0SW5kZXg9LTF9ZWxzZSBpPWUubWF0Y2goRGVbQWUuQ09FUkNFXSk7cmV0dXJuIG51bGw9PT1pP251bGw6VigiIi5jb25jYXQoaVsyXSwiLiIpLmNvbmNhdChpWzNdfHwiMCIsIi4iKS5jb25jYXQoaVs0XXx8IjAiKSx0KX0sUGU9T2UsTGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7dmFyIGk9dGhpcztpZihhKHRoaXMsZSksbiYmIm9iamVjdCI9PT1vKG4pfHwobj17bG9vc2U6ISFuLGluY2x1ZGVQcmVyZWxlYXNlOiExfSksdCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQubG9vc2U9PT0hIW4ubG9vc2UmJnQuaW5jbHVkZVByZXJlbGVhc2U9PT0hIW4uaW5jbHVkZVByZXJlbGVhc2U/dDpuZXcgZSh0LnJhdyxuKTtpZih0IGluc3RhbmNlb2YgbnQpcmV0dXJuIHRoaXMucmF3PXQudmFsdWUsdGhpcy5zZXQ9W1t0XV0sdGhpcy5mb3JtYXQoKSx0aGlzO2lmKHRoaXMub3B0aW9ucz1uLHRoaXMubG9vc2U9ISFuLmxvb3NlLHRoaXMuaW5jbHVkZVByZXJlbGVhc2U9ISFuLmluY2x1ZGVQcmVyZWxlYXNlLHRoaXMucmF3PXQsdGhpcy5zZXQ9dC5zcGxpdCgvXHMqXHxcfFxzKi8pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGkucGFyc2VSYW5nZShlLnRyaW0oKSl9KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGh9KSksIXRoaXMuc2V0Lmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIFNlbVZlciBSYW5nZTogIi5jb25jYXQodCkpO3RoaXMuZm9ybWF0KCl9cmV0dXJuIGwoZSxbe2tleToiZm9ybWF0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmdlPXRoaXMuc2V0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuam9pbigiICIpLnRyaW0oKX0pKS5qb2luKCJ8fCIpLnRyaW0oKSx0aGlzLnJhbmdlfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmFuZ2V9fSx7a2V5OiJwYXJzZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5vcHRpb25zLmxvb3NlO2U9ZS50cmltKCk7dmFyIGk9bj9SZVskZS5IWVBIRU5SQU5HRUxPT1NFXTpSZVskZS5IWVBIRU5SQU5HRV07ZT1lLnJlcGxhY2UoaSxKZSh0aGlzLm9wdGlvbnMuaW5jbHVkZVByZXJlbGVhc2UpKSxDKCJoeXBoZW4gcmVwbGFjZSIsZSksZT1lLnJlcGxhY2UoUmVbJGUuQ09NUEFSQVRPUlRSSU1dLHplKSxDKCJjb21wYXJhdG9yIHRyaW0iLGUsUmVbJGUuQ09NUEFSQVRPUlRSSU1dKSxlPShlPShlPWUucmVwbGFjZShSZVskZS5USUxERVRSSU1dLEJlKSkucmVwbGFjZShSZVskZS5DQVJFVFRSSU1dLEZlKSkuc3BsaXQoL1xzKy8pLmpvaW4oIiAiKTt2YXIgcj1uP1JlWyRlLkNPTVBBUkFUT1JMT09TRV06UmVbJGUuQ09NUEFSQVRPUl07cmV0dXJuIGUuc3BsaXQoIiAiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBqZShlLHQub3B0aW9ucyl9KSkuam9pbigiICIpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBaZShlLHQub3B0aW9ucyl9KSkuZmlsdGVyKHRoaXMub3B0aW9ucy5sb29zZT9mdW5jdGlvbihlKXtyZXR1cm4hIWUubWF0Y2gocil9OmZ1bmN0aW9uKCl7cmV0dXJuITB9KS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgbnQoZSx0Lm9wdGlvbnMpfSkpfX0se2tleToiaW50ZXJzZWN0cyIsdmFsdWU6ZnVuY3Rpb24odCxuKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhIFJhbmdlIGlzIHJlcXVpcmVkIik7cmV0dXJuIHRoaXMuc2V0LnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBWZShlLG4pJiZ0LnNldC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gVmUodCxuKSYmZS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmludGVyc2VjdHModCxuKX0pKX0pKX0pKX0pKX19LHtrZXk6InRlc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO2lmKCJzdHJpbmciPT10eXBlb2YgZSl0cnl7ZT1uZXcgUihlLHRoaXMub3B0aW9ucyl9Y2F0Y2goZSl7cmV0dXJuITF9Zm9yKHZhciB0PTA7dDx0aGlzLnNldC5sZW5ndGg7dCsrKWlmKFFlKHRoaXMuc2V0W3RdLGUsdGhpcy5vcHRpb25zKSlyZXR1cm4hMDtyZXR1cm4hMX19XSksZX0oKSxOZT1MZSxSZT1rLnJlLCRlPWsudCx6ZT1rLmNvbXBhcmF0b3JUcmltUmVwbGFjZSxCZT1rLnRpbGRlVHJpbVJlcGxhY2UsRmU9ay5jYXJldFRyaW1SZXBsYWNlLFZlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSEwLGk9ZS5zbGljZSgpLHI9aS5wb3AoKTtuJiZpLmxlbmd0aDspbj1pLmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gci5pbnRlcnNlY3RzKGUsdCl9KSkscj1pLnBvcCgpO3JldHVybiBufSxqZT1mdW5jdGlvbihlLHQpe3JldHVybiBDKCJjb21wIixlLHQpLGU9VWUoZSx0KSxDKCJjYXJldCIsZSksZT1XZShlLHQpLEMoInRpbGRlcyIsZSksZT1ZZShlLHQpLEMoInhyYW5nZSIsZSksZT1LZShlLHQpLEMoInN0YXJzIixlKSxlfSxIZT1mdW5jdGlvbihlKXtyZXR1cm4hZXx8IngiPT09ZS50b0xvd2VyQ2FzZSgpfHwiKiI9PT1lfSxXZT1mdW5jdGlvbihlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gR2UoZSx0KX0pKS5qb2luKCIgIil9LEdlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dC5sb29zZT9SZVskZS5USUxERUxPT1NFXTpSZVskZS5USUxERV0sZS5yZXBsYWNlKHQsKGZ1bmN0aW9uKHQsbixpLHIsbyl7cmV0dXJuIEMoInRpbGRlIixlLHQsbixpLHIsbyksaT1IZShuKT8iIjpIZShpKT8iPj0iLmNvbmNhdChuLCIuMC4wIDwiKS5jb25jYXQoK24rMSwiLjAuMC0wIik6SGUocik/Ij49Ii5jb25jYXQobiwiLiIpLmNvbmNhdChpLCIuMCA8IikuY29uY2F0KG4sIi4iKS5jb25jYXQoK2krMSwiLjAtMCIpOm8/KEMoInJlcGxhY2VUaWxkZSBwciIsbyksIj49Ii5jb25jYXQobiwiLiIpLmNvbmNhdChpLCIuIikuY29uY2F0KHIsIi0iKS5jb25jYXQobywiIDwiKS5jb25jYXQobiwiLiIpLmNvbmNhdCgraSsxLCIuMC0wIikpOiI+PSIuY29uY2F0KG4sIi4iKS5jb25jYXQoaSwiLiIpLmNvbmNhdChyLCIgPCIpLmNvbmNhdChuLCIuIikuY29uY2F0KCtpKzEsIi4wLTAiKSxDKCJ0aWxkZSByZXR1cm4iLGkpLGl9KSl9LFVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBxZShlLHQpfSkpLmpvaW4oIiAiKX0scWU9ZnVuY3Rpb24oZSx0KXtDKCJjYXJldCIsZSx0KTt2YXIgbj10Lmxvb3NlP1JlWyRlLkNBUkVUTE9PU0VdOlJlWyRlLkNBUkVUXSxpPXQuaW5jbHVkZVByZXJlbGVhc2U/Ii0wIjoiIjtyZXR1cm4gZS5yZXBsYWNlKG4sKGZ1bmN0aW9uKHQsbixyLG8sYSl7cmV0dXJuIEMoImNhcmV0IixlLHQsbixyLG8sYSksbj1IZShuKT8iIjpIZShyKT8iPj0iLmNvbmNhdChuLCIuMC4wIikuY29uY2F0KGksIiA8IikuY29uY2F0KCtuKzEsIi4wLjAtMCIpOkhlKG8pPyIwIj09PW4/Ij49Ii5jb25jYXQobiwiLiIpLmNvbmNhdChyLCIuMCIpLmNvbmNhdChpLCIgPCIpLmNvbmNhdChuLCIuIikuY29uY2F0KCtyKzEsIi4wLTAiKToiPj0iLmNvbmNhdChuLCIuIikuY29uY2F0KHIsIi4wIikuY29uY2F0KGksIiA8IikuY29uY2F0KCtuKzEsIi4wLjAtMCIpOmE/KEMoInJlcGxhY2VDYXJldCBwciIsYSksIjAiPT09bj8iMCI9PT1yPyI+PSIuY29uY2F0KG4sIi4iKS5jb25jYXQociwiLiIpLmNvbmNhdChvLCItIikuY29uY2F0KGEsIiA8IikuY29uY2F0KG4sIi4iKS5jb25jYXQociwiLiIpLmNvbmNhdCgrbysxLCItMCIpOiI+PSIuY29uY2F0KG4sIi4iKS5jb25jYXQociwiLiIpLmNvbmNhdChvLCItIikuY29uY2F0KGEsIiA8IikuY29uY2F0KG4sIi4iKS5jb25jYXQoK3IrMSwiLjAtMCIpOiI+PSIuY29uY2F0KG4sIi4iKS5jb25jYXQociwiLiIpLmNvbmNhdChvLCItIikuY29uY2F0KGEsIiA8IikuY29uY2F0KCtuKzEsIi4wLjAtMCIpKTooQygibm8gcHIiKSwiMCI9PT1uPyIwIj09PXI/Ij49Ii5jb25jYXQobiwiLiIpLmNvbmNhdChyLCIuIikuY29uY2F0KG8pLmNvbmNhdChpLCIgPCIpLmNvbmNhdChuLCIuIikuY29uY2F0KHIsIi4iKS5jb25jYXQoK28rMSwiLTAiKToiPj0iLmNvbmNhdChuLCIuIikuY29uY2F0KHIsIi4iKS5jb25jYXQobykuY29uY2F0KGksIiA8IikuY29uY2F0KG4sIi4iKS5jb25jYXQoK3IrMSwiLjAtMCIpOiI+PSIuY29uY2F0KG4sIi4iKS5jb25jYXQociwiLiIpLmNvbmNhdChvLCIgPCIpLmNvbmNhdCgrbisxLCIuMC4wLTAiKSksQygiY2FyZXQgcmV0dXJuIixuKSxufSkpfSxZZT1mdW5jdGlvbihlLHQpe3JldHVybiBDKCJyZXBsYWNlWFJhbmdlcyIsZSx0KSxlLnNwbGl0KC9ccysvKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBYZShlLHQpfSkpLmpvaW4oIiAiKX0sWGU9ZnVuY3Rpb24oZSx0KXtlPWUudHJpbSgpO3ZhciBuPXQubG9vc2U/UmVbJGUuWFJBTkdFTE9PU0VdOlJlWyRlLlhSQU5HRV07cmV0dXJuIGUucmVwbGFjZShuLChmdW5jdGlvbihuLGkscixvLGEscyl7QygieFJhbmdlIixlLG4saSxyLG8sYSxzKTt2YXIgbD1IZShyKSxjPWx8fEhlKG8pLHU9Y3x8SGUoYSk7cmV0dXJuIj0iPT09aSYmdSYmKGk9IiIpLHM9dC5pbmNsdWRlUHJlcmVsZWFzZT8iLTAiOiIiLGw/bj0iPiI9PT1pfHwiPCI9PT1pPyI8MC4wLjAtMCI6IioiOmkmJnU/KGMmJihvPTApLGE9MCwiPiI9PT1pPyhpPSI+PSIsYT1jPyhyPStyKzEsbz0wKToobz0rbysxLDApKToiPD0iPT09aSYmKGk9IjwiLGM/cj0rcisxOm89K28rMSksIjwiPT09aSYmKHM9Ii0wIiksbj0iIi5jb25jYXQoaStyLCIuIikuY29uY2F0KG8sIi4iKS5jb25jYXQoYSkuY29uY2F0KHMpKTpjP249Ij49Ii5jb25jYXQociwiLjAuMCIpLmNvbmNhdChzLCIgPCIpLmNvbmNhdCgrcisxLCIuMC4wLTAiKTp1JiYobj0iPj0iLmNvbmNhdChyLCIuIikuY29uY2F0KG8sIi4wIikuY29uY2F0KHMsIiA8IikuY29uY2F0KHIsIi4iKS5jb25jYXQoK28rMSwiLjAtMCIpKSxDKCJ4UmFuZ2UgcmV0dXJuIixuKSxufSkpfSxLZT1mdW5jdGlvbihlLHQpe3JldHVybiBDKCJyZXBsYWNlU3RhcnMiLGUsdCksZS50cmltKCkucmVwbGFjZShSZVskZS5TVEFSXSwiIil9LFplPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEMoInJlcGxhY2VHVEUwIixlLHQpLGUudHJpbSgpLnJlcGxhY2UoUmVbdC5pbmNsdWRlUHJlcmVsZWFzZT8kZS5HVEUwUFJFOiRlLkdURTBdLCIiKX0sSmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixpLHIsbyxhLHMsbCxjLHUsaCxkLGYpe3JldHVybiBuPUhlKGkpPyIiOkhlKHIpPyI+PSIuY29uY2F0KGksIi4wLjAiKS5jb25jYXQoZT8iLTAiOiIiKTpIZShvKT8iPj0iLmNvbmNhdChpLCIuIikuY29uY2F0KHIsIi4wIikuY29uY2F0KGU/Ii0wIjoiIik6YT8iPj0iLmNvbmNhdChuKToiPj0iLmNvbmNhdChuKS5jb25jYXQoZT8iLTAiOiIiKSxsPUhlKGMpPyIiOkhlKHUpPyI8Ii5jb25jYXQoK2MrMSwiLjAuMC0wIik6SGUoaCk/IjwiLmNvbmNhdChjLCIuIikuY29uY2F0KCt1KzEsIi4wLTAiKTpkPyI8PSIuY29uY2F0KGMsIi4iKS5jb25jYXQodSwiLiIpLmNvbmNhdChoLCItIikuY29uY2F0KGQpOmU/IjwiLmNvbmNhdChjLCIuIikuY29uY2F0KHUsIi4iKS5jb25jYXQoK2grMSwiLTAiKToiPD0iLmNvbmNhdChsKSwiIi5jb25jYXQobiwiICIpLmNvbmNhdChsKS50cmltKCl9fSxRZT1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYoIWVbaV0udGVzdCh0KSlyZXR1cm4hMTtpZighdC5wcmVyZWxlYXNlLmxlbmd0aHx8bi5pbmNsdWRlUHJlcmVsZWFzZSlyZXR1cm4hMDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihDKGVbcl0uc2VtdmVyKSxlW3JdLnNlbXZlciE9PW50LkFOWSYmMDxlW3JdLnNlbXZlci5wcmVyZWxlYXNlLmxlbmd0aCl7dmFyIG89ZVtyXS5zZW12ZXI7aWYoby5tYWpvcj09PXQubWFqb3ImJm8ubWlub3I9PT10Lm1pbm9yJiZvLnBhdGNoPT09dC5wYXRjaClyZXR1cm4hMH1yZXR1cm4hMX0sZXQ9U3ltYm9sKCJTZW1WZXIgQU5ZIiksdHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7aWYoYSh0aGlzLGUpLG4mJiJvYmplY3QiPT09byhuKXx8KG49e2xvb3NlOiEhbixpbmNsdWRlUHJlcmVsZWFzZTohMX0pLHQgaW5zdGFuY2VvZiBlKXtpZih0Lmxvb3NlPT09ISFuLmxvb3NlKXJldHVybiB0O3Q9dC52YWx1ZX1DKCJjb21wYXJhdG9yIix0LG4pLHRoaXMub3B0aW9ucz1uLHRoaXMubG9vc2U9ISFuLmxvb3NlLHRoaXMucGFyc2UodCksdGhpcy5zZW12ZXI9PT1ldD90aGlzLnZhbHVlPSIiOnRoaXMudmFsdWU9dGhpcy5vcGVyYXRvcit0aGlzLnNlbXZlci52ZXJzaW9uLEMoImNvbXAiLHRoaXMpfXJldHVybiBsKGUsbnVsbCxbe2tleToiQU5ZIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZXR9fV0pLGwoZSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucy5sb29zZT9pdFtydC5DT01QQVJBVE9STE9PU0VdOml0W3J0LkNPTVBBUkFUT1JdO2lmKCEodD1lLm1hdGNoKHQpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGNvbXBhcmF0b3I6ICIuY29uY2F0KGUpKTt0aGlzLm9wZXJhdG9yPXZvaWQgMCE9PXRbMV0/dFsxXToiIiwiPSI9PT10aGlzLm9wZXJhdG9yJiYodGhpcy5vcGVyYXRvcj0iIiksdFsyXT90aGlzLnNlbXZlcj1uZXcgUih0WzJdLHRoaXMub3B0aW9ucy5sb29zZSk6dGhpcy5zZW12ZXI9ZXR9fSx7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX19LHtrZXk6InRlc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKEMoIkNvbXBhcmF0b3IudGVzdCIsZSx0aGlzLm9wdGlvbnMubG9vc2UpLHRoaXMuc2VtdmVyPT09ZXR8fGU9PT1ldClyZXR1cm4hMDtpZigic3RyaW5nIj09dHlwZW9mIGUpdHJ5e2U9bmV3IFIoZSx0aGlzLm9wdGlvbnMpfWNhdGNoKGUpe3JldHVybiExfXJldHVybiBJZShlLHRoaXMub3BlcmF0b3IsdGhpcy5zZW12ZXIsdGhpcy5vcHRpb25zKX19LHtrZXk6ImludGVyc2VjdHMiLHZhbHVlOmZ1bmN0aW9uKHQsbil7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYSBDb21wYXJhdG9yIGlzIHJlcXVpcmVkIik7aWYobiYmIm9iamVjdCI9PT1vKG4pfHwobj17bG9vc2U6ISFuLGluY2x1ZGVQcmVyZWxlYXNlOiExfSksIiI9PT10aGlzLm9wZXJhdG9yKXJldHVybiIiPT09dGhpcy52YWx1ZXx8bmV3IE5lKHQudmFsdWUsbikudGVzdCh0aGlzLnZhbHVlKTtpZigiIj09PXQub3BlcmF0b3IpcmV0dXJuIiI9PT10LnZhbHVlfHxuZXcgTmUodGhpcy52YWx1ZSxuKS50ZXN0KHQuc2VtdmVyKTt2YXIgaT0hKCI+PSIhPT10aGlzLm9wZXJhdG9yJiYiPiIhPT10aGlzLm9wZXJhdG9yfHwiPj0iIT09dC5vcGVyYXRvciYmIj4iIT09dC5vcGVyYXRvcikscj0hKCI8PSIhPT10aGlzLm9wZXJhdG9yJiYiPCIhPT10aGlzLm9wZXJhdG9yfHwiPD0iIT09dC5vcGVyYXRvciYmIjwiIT09dC5vcGVyYXRvciksYT10aGlzLnNlbXZlci52ZXJzaW9uPT09dC5zZW12ZXIudmVyc2lvbixzPSEoIj49IiE9PXRoaXMub3BlcmF0b3ImJiI8PSIhPT10aGlzLm9wZXJhdG9yfHwiPj0iIT09dC5vcGVyYXRvciYmIjw9IiE9PXQub3BlcmF0b3IpLGw9SWUodGhpcy5zZW12ZXIsIjwiLHQuc2VtdmVyLG4pJiYoIj49Ij09PXRoaXMub3BlcmF0b3J8fCI+Ij09PXRoaXMub3BlcmF0b3IpJiYoIjw9Ij09PXQub3BlcmF0b3J8fCI8Ij09PXQub3BlcmF0b3IpO3Q9SWUodGhpcy5zZW12ZXIsIj4iLHQuc2VtdmVyLG4pJiYoIjw9Ij09PXRoaXMub3BlcmF0b3J8fCI8Ij09PXRoaXMub3BlcmF0b3IpJiYoIj49Ij09PXQub3BlcmF0b3J8fCI+Ij09PXQub3BlcmF0b3IpO3JldHVybiBpfHxyfHxhJiZzfHxsfHx0fX1dKSxlfSgpLG50PXR0LGl0PWsucmUscnQ9ay50LG90PWZ1bmN0aW9uKGUsdCxuKXt0cnl7dD1uZXcgTmUodCxuKX1jYXRjaChlKXtyZXR1cm4hMX1yZXR1cm4gdC50ZXN0KGUpfSxhdD1vdCxzdD1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgTmUoZSx0KS5zZXQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkpLmpvaW4oIiAiKS50cmltKCkuc3BsaXQoIiAiKX0pKX0sbHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW51bGwscj1udWxsLG89bnVsbDt0cnl7bz1uZXcgTmUodCxuKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtvLnRlc3QoZSkmJihpJiYtMSE9PXIuY29tcGFyZShlKXx8KHI9bmV3IFIoaT1lLG4pKSl9KSksaX0sY3Q9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW51bGwscj1udWxsLG89bnVsbDt0cnl7bz1uZXcgTmUodCxuKX1jYXRjaChlKXtyZXR1cm4gbnVsbH1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtvLnRlc3QoZSkmJihpJiYxIT09ci5jb21wYXJlKGUpfHwocj1uZXcgUihpPWUsbikpKX0pKSxpfSx1dD1mdW5jdGlvbihlLHQpe2U9bmV3IE5lKGUsdCk7dmFyIG49bmV3IFIoIjAuMC4wIik7aWYoZS50ZXN0KG4pKXJldHVybiBuO2lmKG49bmV3IFIoIjAuMC4wLTAiKSxlLnRlc3QobikpcmV0dXJuIG47bj1udWxsO2Zvcih2YXIgaT0wO2k8ZS5zZXQubGVuZ3RoOysraSllLnNldFtpXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uZXcgUihlLnNlbXZlci52ZXJzaW9uKTtzd2l0Y2goZS5vcGVyYXRvcil7Y2FzZSI+IjowPT09dC5wcmVyZWxlYXNlLmxlbmd0aD90LnBhdGNoKys6dC5wcmVyZWxlYXNlLnB1c2goMCksdC5yYXc9dC5mb3JtYXQoKTtjYXNlIiI6Y2FzZSI+PSI6biYmIWJlKG4sdCl8fChuPXQpO2JyZWFrO2Nhc2UiPCI6Y2FzZSI8PSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgb3BlcmF0aW9uOiAiLmNvbmNhdChlLm9wZXJhdG9yKSl9fSkpO3JldHVybiBuJiZlLnRlc3Qobik/bjpudWxsfSxodD1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gbmV3IE5lKGUsdCkucmFuZ2V8fCIqIn1jYXRjaChlKXtyZXR1cm4gbnVsbH19LGR0PW50LkFOWSxmdD1mdW5jdGlvbihlLHQsbixpKXt2YXIgcixhLHMsbCxjO3N3aXRjaChlPW5ldyBSKGUsaSksdD1uZXcgTmUodCxpKSxuKXtjYXNlIj4iOnI9YmUsYT1NZSxzPV9lLGw9Ij4iLGM9Ij49IjticmVhaztjYXNlIjwiOnI9X2UsYT1rZSxzPWJlLGw9IjwiLGM9Ijw9IjticmVhaztkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoJ011c3QgcHJvdmlkZSBhIGhpbG8gdmFsIG9mICI8IiBvciAiPiInKX1pZihhdChlLHQsaSkpcmV0dXJuITE7Zm9yKHZhciB1PTA7dTx0LnNldC5sZW5ndGg7Kyt1KXt2YXIgaD1mdW5jdGlvbihuKXtuPXQuc2V0W25dO3ZhciBvPW51bGwsdT1udWxsO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc2VtdmVyPT09ZHQmJihlPW5ldyBudCgiPj0wLjAuMCIpKSxvPW98fGUsdT11fHxlLHIoZS5zZW12ZXIsby5zZW12ZXIsaSk/bz1lOnMoZS5zZW12ZXIsdS5zZW12ZXIsaSkmJih1PWUpfSkpLG8ub3BlcmF0b3I9PT1sfHxvLm9wZXJhdG9yPT09Y3x8KCF1Lm9wZXJhdG9yfHx1Lm9wZXJhdG9yPT09bCkmJmEoZSx1LnNlbXZlcil8fHUub3BlcmF0b3I9PT1jJiZzKGUsdS5zZW12ZXIpP3t2OiExfTp2b2lkIDB9KHUpO2lmKCJvYmplY3QiPT09byhoKSlyZXR1cm4gaC52fXJldHVybiEwfSxwdD1mdCxtdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHB0KGUsdCwiPiIsbil9LGd0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcHQoZSx0LCI8IixuKX0sdnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPW5ldyBOZShlLG4pLHQ9bmV3IE5lKHQsbiksZS5pbnRlcnNlY3RzKHQpfSx5dD1mdW5jdGlvbihlLHQsbil7dmFyIGk9W10scj1udWxsLG89bnVsbCxhPWUuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gWChlLHQsbil9KSkscz1tKGEpO3RyeXtmb3Iocy5zKCk7IShsPXMubigpKS5kb25lOyl7dmFyIGw9bC52YWx1ZTtyPWF0KGwsdCxuKT8obz1sLHJ8fGwpOihvJiZpLnB1c2goW3Isb10pLG89bnVsbCl9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfXImJmkucHVzaChbcixudWxsXSk7Zm9yKHZhciB1PVtdLGg9MCxkPWk7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWMoZFtoXSwyKSxwPWZbMF07cD09PShmPWZbMV0pP3UucHVzaChwKTpmfHxwIT09YVswXT9mP3A9PT1hWzBdP3UucHVzaCgiPD0iLmNvbmNhdChmKSk6dS5wdXNoKCIiLmNvbmNhdChwLCIgLSAiKS5jb25jYXQoZikpOnUucHVzaCgiPj0iLmNvbmNhdChwKSk6dS5wdXNoKCIqIil9dmFyIGc9dS5qb2luKCIgfHwgIik7ZT0ic3RyaW5nIj09dHlwZW9mIHQucmF3P3QucmF3OlN0cmluZyh0KTtyZXR1cm4gZy5sZW5ndGg8ZS5sZW5ndGg/Zzp0fSxidD1udC5BTlkseHQ9ZnVuY3Rpb24oZSx0LG4pe2U9bmV3IE5lKGUsbiksdD1uZXcgTmUodCxuKTt2YXIgaSxyPSExLG89bShlLnNldCk7dHJ5e2U6Zm9yKG8ucygpOyEoaT1vLm4oKSkuZG9uZTspe3ZhciBhPWkudmFsdWUscz1tKHQuc2V0KTt0cnl7Zm9yKHMucygpOyEobD1zLm4oKSkuZG9uZTspe3ZhciBsPWwudmFsdWU7bD1fdChhLGwsbikscj1yfHxudWxsIT09bDtpZihsKWNvbnRpbnVlIGV9fWNhdGNoKGUpe3MuZShlKX1maW5hbGx5e3MuZigpfWlmKHIpcmV0dXJuITF9fWNhdGNoKGUpe28uZShlKX1maW5hbGx5e28uZigpfXJldHVybiEwfSxfdD1mdW5jdGlvbihlLHQsbil7aWYoMT09PWUubGVuZ3RoJiZlWzBdLnNlbXZlcj09PWJ0KXJldHVybiAxPT09dC5sZW5ndGgmJnRbMF0uc2VtdmVyPT09YnQ7dmFyIGkscixvLGE9bmV3IFNldCxzPW0oZSk7dHJ5e2ZvcihzLnMoKTshKGw9cy5uKCkpLmRvbmU7KXt2YXIgbD1sLnZhbHVlOyI+Ij09PWwub3BlcmF0b3J8fCI+PSI9PT1sLm9wZXJhdG9yP2k9d3QoaSxsLG4pOiI8Ij09PWwub3BlcmF0b3J8fCI8PSI9PT1sLm9wZXJhdG9yP3I9U3QocixsLG4pOmEuYWRkKGwuc2VtdmVyKX19Y2F0Y2goZSl7cy5lKGUpfWZpbmFsbHl7cy5mKCl9aWYoMTxhLnNpemUpcmV0dXJuIG51bGw7aWYoaSYmcil7aWYoMDwobz1YKGkuc2VtdmVyLHIuc2VtdmVyLG4pKSlyZXR1cm4gbnVsbDtpZigwPT09byYmKCI+PSIhPT1pLm9wZXJhdG9yfHwiPD0iIT09ci5vcGVyYXRvcikpcmV0dXJuIG51bGx9dmFyIGMsdT1tKGEpO3RyeXtmb3IodS5zKCk7IShjPXUubigpKS5kb25lOyl7dmFyIGg9Yy52YWx1ZTtpZihpJiYhYXQoaCxTdHJpbmcoaSksbikpcmV0dXJuIG51bGw7aWYociYmIWF0KGgsU3RyaW5nKHIpLG4pKXJldHVybiBudWxsO3ZhciBkPW0odCk7dHJ5e2ZvcihkLnMoKTshKGY9ZC5uKCkpLmRvbmU7KXt2YXIgZj1mLnZhbHVlO2lmKCFhdChoLFN0cmluZyhmKSxuKSlyZXR1cm4hMX19Y2F0Y2goZSl7ZC5lKGUpfWZpbmFsbHl7ZC5mKCl9cmV0dXJuITB9fWNhdGNoKGUpe3UuZShlKX1maW5hbGx5e3UuZigpfXZhciBwPW0odCk7dHJ5e2ZvcihwLnMoKTshKGc9cC5uKCkpLmRvbmU7KXt2YXIgZz1nLnZhbHVlLHY9dnx8Ij4iPT09Zy5vcGVyYXRvcnx8Ij49Ij09PWcub3BlcmF0b3IseT15fHwiPCI9PT1nLm9wZXJhdG9yfHwiPD0iPT09Zy5vcGVyYXRvcjtpZihpKWlmKCI+Ij09PWcub3BlcmF0b3J8fCI+PSI9PT1nLm9wZXJhdG9yKXtpZih3dChpLGcsbik9PT1nKXJldHVybiExfWVsc2UgaWYoIj49Ij09PWkub3BlcmF0b3ImJiFhdChpLnNlbXZlcixTdHJpbmcoZyksbikpcmV0dXJuITE7aWYocilpZigiPCI9PT1nLm9wZXJhdG9yfHwiPD0iPT09Zy5vcGVyYXRvcil7aWYoU3QocixnLG4pPT09ZylyZXR1cm4hMX1lbHNlIGlmKCI8PSI9PT1yLm9wZXJhdG9yJiYhYXQoci5zZW12ZXIsU3RyaW5nKGcpLG4pKXJldHVybiExO2lmKCFnLm9wZXJhdG9yJiYocnx8aSkmJjAhPT1vKXJldHVybiExfX1jYXRjaChlKXtwLmUoZSl9ZmluYWxseXtwLmYoKX1yZXR1cm4hKGkmJnkmJiFyJiYwIT09b3x8ciYmdiYmIWkmJjAhPT1vKX0sd3Q9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlJiYoMDwobj1YKGUuc2VtdmVyLHQuc2VtdmVyLG4pKXx8IShuPDB8fCI+Ij09PXQub3BlcmF0b3ImJiI+PSI9PT1lLm9wZXJhdG9yKSk/ZTp0fSxTdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUmJigobj1YKGUuc2VtdmVyLHQuc2VtdmVyLG4pKTwwfHwhKDA8bnx8IjwiPT09dC5vcGVyYXRvciYmIjw9Ij09PWUub3BlcmF0b3IpKT9lOnR9LEN0PXtyZTprLnJlLHNyYzprLnNyYyx0b2tlbnM6ay50LFNFTVZFUl9TUEVDX1ZFUlNJT046dy5TRU1WRVJfU1BFQ19WRVJTSU9OLFNlbVZlcjpSLGNvbXBhcmVJZGVudGlmaWVyczpJLmNvbXBhcmVJZGVudGlmaWVycyxyY29tcGFyZUlkZW50aWZpZXJzOkkucmNvbXBhcmVJZGVudGlmaWVycyxwYXJzZTpWLHZhbGlkOkgsY2xlYW46RyxpbmM6cSxkaWZmOlEsbWFqb3I6dGUsbWlub3I6aWUscGF0Y2g6b2UscHJlcmVsZWFzZTpzZSxjb21wYXJlOlgscmNvbXBhcmU6Y2UsY29tcGFyZUxvb3NlOmhlLGNvbXBhcmVCdWlsZDpmZSxzb3J0Om1lLHJzb3J0OnZlLGd0OmJlLGx0Ol9lLGVxOlosbmVxOlNlLGd0ZTprZSxsdGU6TWUsY21wOkllLGNvZXJjZTpQZSxDb21wYXJhdG9yOm50LFJhbmdlOk5lLHNhdGlzZmllczphdCx0b0NvbXBhcmF0b3JzOnN0LG1heFNhdGlzZnlpbmc6bHQsbWluU2F0aXNmeWluZzpjdCxtaW5WZXJzaW9uOnV0LHZhbGlkUmFuZ2U6aHQsb3V0c2lkZTpwdCxndHI6bXQsbHRyOmd0LGludGVyc2VjdHM6dnQsc2ltcGxpZnlSYW5nZTp5dCxzdWJzZXQ6eHR9OyFmdW5jdGlvbigpe2Z1bmN0aW9uIG4oZSx0KXtuLmluc3RhbGxlZHx8KHQ/bnVsbCE9Q3QudmFsaWQoZS52ZXJzaW9uKT8obi5pbnN0YWxsZWQ9ITAsQ3QubHQoZS52ZXJzaW9uLCIzLjAuMCIpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHtheGlvczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fSwkaHR0cDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9fX0pOihlLmNvbmZpZy5nbG9iYWxQcm9wZXJ0aWVzLmF4aW9zPXQsZS5jb25maWcuZ2xvYmFsUHJvcGVydGllcy4kaHR0cD10KSxlLmF4aW9zPXQsZS4kaHR0cD10KTpjb25zb2xlLmVycm9yKCJVbmtvd24gdnVlIHZlcnNpb24iKTpjb25zb2xlLmVycm9yKCJZb3UgaGF2ZSB0byBpbnN0YWxsIGF4aW9zIikpfSJvYmplY3QiPT1vKHQpP2UuZXhwb3J0cz1uOihpPVtdLHI9ZnVuY3Rpb24oKXtyZXR1cm4gbn0uYXBwbHkodCxpKSx2b2lkIDA9PT1yfHwoZS5leHBvcnRzPXIpKX0oKX0pLmNhbGwodGhpcyxuKCI0MzYyIikpfSwyMTQ1OmZ1bmN0aW9uKGUsdCl7dmFyIG49e307ZnVuY3Rpb24gaShlLHQpe25bZV09dH1mdW5jdGlvbiByKGUpe3JldHVybiBuW2VdfXQucmVnaXN0ZXI9aSx0LmdldD1yfSwyMTYzOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0Zjg1Iikscj1uKCIwNmM3Iiksbz1uKCJlZGEyIiksYT1vLmVuY29kZUhUTUwscz1uKCI0MzE5IiksbD1pLmV4dGVuZCh7dHlwZToic2VyaWVzLnRyZWUiLGxheW91dEluZm86bnVsbCxsYXlvdXRNb2RlOiJib3giLGdldEluaXRpYWxEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PXtuYW1lOmUubmFtZSxjaGlsZHJlbjplLmRhdGF9LG49ZS5sZWF2ZXN8fHt9LGk9bmV3IHMobix0aGlzLHRoaXMuZWNNb2RlbCksbz1yLmNyZWF0ZVRyZWUodCx0aGlzLGEpO2Z1bmN0aW9uIGEoZSl7ZS53cmFwTWV0aG9kKCJnZXRJdGVtTW9kZWwiLChmdW5jdGlvbihlLHQpe3ZhciBuPW8uZ2V0Tm9kZUJ5RGF0YUluZGV4KHQpO3JldHVybiBuLmNoaWxkcmVuLmxlbmd0aCYmbi5pc0V4cGFuZHx8KGUucGFyZW50TW9kZWw9aSksZX0pKX12YXIgbD0wO28uZWFjaE5vZGUoInByZW9yZGVyIiwoZnVuY3Rpb24oZSl7ZS5kZXB0aD5sJiYobD1lLmRlcHRoKX0pKTt2YXIgYz1lLmV4cGFuZEFuZENvbGxhcHNlLHU9YyYmZS5pbml0aWFsVHJlZURlcHRoPj0wP2UuaW5pdGlhbFRyZWVEZXB0aDpsO3JldHVybiBvLnJvb3QuZWFjaE5vZGUoInByZW9yZGVyIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ob3N0VHJlZS5kYXRhLmdldFJhd0RhdGFJdGVtKGUuZGF0YUluZGV4KTtlLmlzRXhwYW5kPXQmJm51bGwhPXQuY29sbGFwc2VkPyF0LmNvbGxhcHNlZDplLmRlcHRoPD11fSkpLG8uZGF0YX0sZ2V0T3JpZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXQoIm9yaWVudCIpO3JldHVybiJob3Jpem9udGFsIj09PWU/ZT0iTFIiOiJ2ZXJ0aWNhbCI9PT1lJiYoZT0iVEIiKSxlfSxzZXRab29tOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9uLnpvb209ZX0sc2V0Q2VudGVyOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9uLmNlbnRlcj1lfSxmb3JtYXRUb29sdGlwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RGF0YSgpLnRyZWUsbj10LnJvb3QuY2hpbGRyZW5bMF0saT10LmdldE5vZGVCeURhdGFJbmRleChlKSxyPWkuZ2V0VmFsdWUoKSxvPWkubmFtZTt3aGlsZShpJiZpIT09bilvPWkucGFyZW50Tm9kZS5uYW1lKyIuIitvLGk9aS5wYXJlbnROb2RlO3JldHVybiBhKG8rKGlzTmFOKHIpfHxudWxsPT1yPyIiOiIgOiAiK3IpKX0sZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejoyLGNvb3JkaW5hdGVTeXN0ZW06InZpZXciLGxlZnQ6IjEyJSIsdG9wOiIxMiUiLHJpZ2h0OiIxMiUiLGJvdHRvbToiMTIlIixsYXlvdXQ6Im9ydGhvZ29uYWwiLGVkZ2VTaGFwZToiY3VydmUiLGVkZ2VGb3JrUG9zaXRpb246IjUwJSIscm9hbTohMSxub2RlU2NhbGVSYXRpbzouNCxjZW50ZXI6bnVsbCx6b29tOjEsb3JpZW50OiJMUiIsc3ltYm9sOiJlbXB0eUNpcmNsZSIsc3ltYm9sU2l6ZTo3LGV4cGFuZEFuZENvbGxhcHNlOiEwLGluaXRpYWxUcmVlRGVwdGg6MixsaW5lU3R5bGU6e2NvbG9yOiIjY2NjIix3aWR0aDoxLjUsY3VydmVuZXNzOi41fSxpdGVtU3R5bGU6e2NvbG9yOiJsaWdodHN0ZWVsYmx1ZSIsYm9yZGVyQ29sb3I6IiNjMjM1MzEiLGJvcmRlcldpZHRoOjEuNX0sbGFiZWw6e3Nob3c6ITAsY29sb3I6IiM1NTUifSxsZWF2ZXM6e2xhYmVsOntzaG93OiEwfX0sYW5pbWF0aW9uRWFzaW5nOiJsaW5lYXIiLGFuaW1hdGlvbkR1cmF0aW9uOjcwMCxhbmltYXRpb25EdXJhdGlvblVwZGF0ZToxZTN9fSk7ZS5leHBvcnRzPWx9LCIyMTZhIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMzg0MiIpLG89bigiZWRhMiIpLGE9bigiOTQ0ZSIpLHM9bigiODllMyIpLGw9cy5wcm90b3R5cGUsYz1NYXRoLmNlaWwsdT1NYXRoLmZsb29yLGg9MWUzLGQ9NjAqaCxmPTYwKmQscD0yNCpmLG09ZnVuY3Rpb24oZSx0LG4saSl7d2hpbGUobjxpKXt2YXIgcj1uK2k+Pj4xO2Vbcl1bMV08dD9uPXIrMTppPXJ9cmV0dXJuIG59LGc9cy5leHRlbmQoe3R5cGU6InRpbWUiLGdldExhYmVsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3N0ZXBMdmwsbj1uZXcgRGF0ZShlKTtyZXR1cm4gby5mb3JtYXRUaW1lKHRbMF0sbix0aGlzLmdldFNldHRpbmcoInVzZVVUQyIpKX0sbmljZUV4dGVudDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9leHRlbnQ7aWYodFswXT09PXRbMV0mJih0WzBdLT1wLHRbMV0rPXApLHRbMV09PT0tMS8wJiZ0WzBdPT09MS8wKXt2YXIgbj1uZXcgRGF0ZTt0WzFdPStuZXcgRGF0ZShuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0WzBdPXRbMV0tcH10aGlzLm5pY2VUaWNrcyhlLnNwbGl0TnVtYmVyLGUubWluSW50ZXJ2YWwsZS5tYXhJbnRlcnZhbCk7dmFyIGk9dGhpcy5faW50ZXJ2YWw7ZS5maXhNaW58fCh0WzBdPXIucm91bmQodSh0WzBdL2kpKmkpKSxlLmZpeE1heHx8KHRbMV09ci5yb3VuZChjKHRbMV0vaSkqaSkpfSxuaWNlVGlja3M6ZnVuY3Rpb24oZSx0LG4pe2U9ZXx8MTA7dmFyIGk9dGhpcy5fZXh0ZW50LG89aVsxXS1pWzBdLHM9by9lO251bGwhPXQmJnM8dCYmKHM9dCksbnVsbCE9biYmcz5uJiYocz1uKTt2YXIgbD12Lmxlbmd0aCxoPW0odixzLDAsbCksZD12W01hdGgubWluKGgsbC0xKV0sZj1kWzFdO2lmKCJ5ZWFyIj09PWRbMF0pe3ZhciBwPW8vZixnPXIubmljZShwL2UsITApO2YqPWd9dmFyIHk9dGhpcy5nZXRTZXR0aW5nKCJ1c2VVVEMiKT8wOjYwKm5ldyBEYXRlKCtpWzBdfHwraVsxXSkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsYj1bTWF0aC5yb3VuZChjKChpWzBdLXkpL2YpKmYreSksTWF0aC5yb3VuZCh1KChpWzFdLXkpL2YpKmYreSldO2EuZml4RXh0ZW50KGIsaSksdGhpcy5fc3RlcEx2bD1kLHRoaXMuX2ludGVydmFsPWYsdGhpcy5fbmljZUV4dGVudD1ifSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4rci5wYXJzZURhdGUoZSl9fSk7aS5lYWNoKFsiY29udGFpbiIsIm5vcm1hbGl6ZSJdLChmdW5jdGlvbihlKXtnLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0KXtyZXR1cm4gbFtlXS5jYWxsKHRoaXMsdGhpcy5wYXJzZSh0KSl9fSkpO3ZhciB2PVtbImhoOm1tOnNzIixoXSxbImhoOm1tOnNzIiw1KmhdLFsiaGg6bW06c3MiLDEwKmhdLFsiaGg6bW06c3MiLDE1KmhdLFsiaGg6bW06c3MiLDMwKmhdLFsiaGg6bW1cbk1NLWRkIixkXSxbImhoOm1tXG5NTS1kZCIsNSpkXSxbImhoOm1tXG5NTS1kZCIsMTAqZF0sWyJoaDptbVxuTU0tZGQiLDE1KmRdLFsiaGg6bW1cbk1NLWRkIiwzMCpkXSxbImhoOm1tXG5NTS1kZCIsZl0sWyJoaDptbVxuTU0tZGQiLDIqZl0sWyJoaDptbVxuTU0tZGQiLDYqZl0sWyJoaDptbVxuTU0tZGQiLDEyKmZdLFsiTU0tZGRcbnl5eXkiLHBdLFsiTU0tZGRcbnl5eXkiLDIqcF0sWyJNTS1kZFxueXl5eSIsMypwXSxbIk1NLWRkXG55eXl5Iiw0KnBdLFsiTU0tZGRcbnl5eXkiLDUqcF0sWyJNTS1kZFxueXl5eSIsNipwXSxbIndlZWsiLDcqcF0sWyJNTS1kZFxueXl5eSIsMTAqcF0sWyJ3ZWVrIiwxNCpwXSxbIndlZWsiLDIxKnBdLFsibW9udGgiLDMxKnBdLFsid2VlayIsNDIqcF0sWyJtb250aCIsNjIqcF0sWyJ3ZWVrIiw3MCpwXSxbInF1YXJ0ZXIiLDk1KnBdLFsibW9udGgiLDMxKnAqNF0sWyJtb250aCIsMzEqcCo1XSxbImhhbGYteWVhciIsMzgwKnAvMl0sWyJtb250aCIsMzEqcCo4XSxbIm1vbnRoIiwzMSpwKjEwXSxbInllYXIiLDM4MCpwXV07Zy5jcmVhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnKHt1c2VVVEM6ZS5lY01vZGVsLmdldCgidXNlVVRDIil9KX07dmFyIHk9ZztlLmV4cG9ydHM9eX0sIjIxN2IiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0ZTA4Iikscj0oaS5fX0RFVl9fLG4oIjMzMDEiKSksbz1uKCI0Zjg1IiksYT1vLmV4dGVuZCh7dHlwZToic2VyaWVzLmxpbmUiLGRlcGVuZGVuY2llczpbImdyaWQiLCJwb2xhciJdLGdldEluaXRpYWxEYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcy5nZXRTb3VyY2UoKSx0aGlzLHt1c2VFbmNvZGVEZWZhdWx0ZXI6ITB9KX0sZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejoyLGNvb3JkaW5hdGVTeXN0ZW06ImNhcnRlc2lhbjJkIixsZWdlbmRIb3Zlckxpbms6ITAsaG92ZXJBbmltYXRpb246ITAsY2xpcDohMCxsYWJlbDp7cG9zaXRpb246InRvcCJ9LGxpbmVTdHlsZTp7d2lkdGg6Mix0eXBlOiJzb2xpZCJ9LHN0ZXA6ITEsc21vb3RoOiExLHNtb290aE1vbm90b25lOm51bGwsc3ltYm9sOiJlbXB0eUNpcmNsZSIsc3ltYm9sU2l6ZTo0LHN5bWJvbFJvdGF0ZTpudWxsLHNob3dTeW1ib2w6ITAsc2hvd0FsbFN5bWJvbDoiYXV0byIsY29ubmVjdE51bGxzOiExLHNhbXBsaW5nOiJub25lIixhbmltYXRpb25FYXNpbmc6ImxpbmVhciIscHJvZ3Jlc3NpdmU6MCxob3ZlckxheWVyVGhyZXNob2xkOjEvMH19KTtlLmV4cG9ydHM9YX0sIjIxN2MiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI2Y2I3Iik7bigiZGYzYSIpO3ZhciBvPXIuZXh0ZW5kKHt0eXBlOiJwYXJhbGxlbCIsZGVwZW5kZW5jaWVzOlsicGFyYWxsZWxBeGlzIl0sY29vcmRpbmF0ZVN5c3RlbTpudWxsLGRpbWVuc2lvbnM6bnVsbCxwYXJhbGxlbEF4aXNJbmRleDpudWxsLGxheW91dE1vZGU6ImJveCIsZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejowLGxlZnQ6ODAsdG9wOjYwLHJpZ2h0OjgwLGJvdHRvbTo2MCxsYXlvdXQ6Imhvcml6b250YWwiLGF4aXNFeHBhbmRhYmxlOiExLGF4aXNFeHBhbmRDZW50ZXI6bnVsbCxheGlzRXhwYW5kQ291bnQ6MCxheGlzRXhwYW5kV2lkdGg6NTAsYXhpc0V4cGFuZFJhdGU6MTcsYXhpc0V4cGFuZERlYm91bmNlOjUwLGF4aXNFeHBhbmRTbGlkZVRyaWdnZXJBcmVhOlstLjE1LC4wNSwuNF0sYXhpc0V4cGFuZFRyaWdnZXJPbjoiY2xpY2siLHBhcmFsbGVsQXhpc0RlZmF1bHQ6bnVsbH0saW5pdDpmdW5jdGlvbigpe3IucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMubWVyZ2VPcHRpb24oe30pfSxtZXJnZU9wdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbjtlJiZpLm1lcmdlKHQsZSwhMCksdGhpcy5faW5pdERpbWVuc2lvbnMoKX0sY29udGFpbnM6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldCgicGFyYWxsZWxJbmRleCIpO3JldHVybiBudWxsIT1uJiZ0LmdldENvbXBvbmVudCgicGFyYWxsZWwiLG4pPT09dGhpc30sc2V0QXhpc0V4cGFuZDpmdW5jdGlvbihlKXtpLmVhY2goWyJheGlzRXhwYW5kYWJsZSIsImF4aXNFeHBhbmRDZW50ZXIiLCJheGlzRXhwYW5kQ291bnQiLCJheGlzRXhwYW5kV2lkdGgiLCJheGlzRXhwYW5kV2luZG93Il0sKGZ1bmN0aW9uKHQpe2UuaGFzT3duUHJvcGVydHkodCkmJih0aGlzLm9wdGlvblt0XT1lW3RdKX0pLHRoaXMpfSxfaW5pdERpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRpbWVuc2lvbnM9W10sdD10aGlzLnBhcmFsbGVsQXhpc0luZGV4PVtdLG49aS5maWx0ZXIodGhpcy5kZXBlbmRlbnRNb2RlbHMucGFyYWxsZWxBeGlzLChmdW5jdGlvbihlKXtyZXR1cm4oZS5nZXQoInBhcmFsbGVsSW5kZXgiKXx8MCk9PT10aGlzLmNvbXBvbmVudEluZGV4fSksdGhpcyk7aS5lYWNoKG4sKGZ1bmN0aW9uKG4pe2UucHVzaCgiZGltIituLmdldCgiZGltIikpLHQucHVzaChuLmNvbXBvbmVudEluZGV4KX0pKX19KTtlLmV4cG9ydHM9b30sMjI2NjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiODI1YSIpLHI9bigiZTk1YSIpLG89bigiNTBjNCIpLGE9bigiMDM2NiIpLHM9bigiMzVhMSIpLGw9bigiMmE2MiIpLGM9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciB1LGgsZCxmLHAsbSxnLHY9biYmbi50aGF0LHk9ISghbnx8IW4uQVNfRU5UUklFUyksYj0hKCFufHwhbi5JU19JVEVSQVRPUikseD0hKCFufHwhbi5JTlRFUlJVUFRFRCksXz1hKHQsdiwxK3kreCksdz1mdW5jdGlvbihlKXtyZXR1cm4gdSYmbCh1KSxuZXcgYyghMCxlKX0sUz1mdW5jdGlvbihlKXtyZXR1cm4geT8oaShlKSx4P18oZVswXSxlWzFdLHcpOl8oZVswXSxlWzFdKSk6eD9fKGUsdyk6XyhlKX07aWYoYil1PWU7ZWxzZXtpZihoPXMoZSksImZ1bmN0aW9uIiE9dHlwZW9mIGgpdGhyb3cgVHlwZUVycm9yKCJUYXJnZXQgaXMgbm90IGl0ZXJhYmxlIik7aWYocihoKSl7Zm9yKGQ9MCxmPW8oZS5sZW5ndGgpO2Y+ZDtkKyspaWYocD1TKGVbZF0pLHAmJnAgaW5zdGFuY2VvZiBjKXJldHVybiBwO3JldHVybiBuZXcgYyghMSl9dT1oLmNhbGwoZSl9bT11Lm5leHQ7d2hpbGUoIShnPW0uY2FsbCh1KSkuZG9uZSl7dHJ5e3A9UyhnLnZhbHVlKX1jYXRjaChDKXt0aHJvdyBsKHUpLEN9aWYoIm9iamVjdCI9PXR5cGVvZiBwJiZwJiZwIGluc3RhbmNlb2YgYylyZXR1cm4gcH1yZXR1cm4gbmV3IGMoITEpfX0sIjIyZDEiOmZ1bmN0aW9uKGUsdCl7dmFyIG49e307bj0ib2JqZWN0Ij09PXR5cGVvZiB3eCYmImZ1bmN0aW9uIj09PXR5cGVvZiB3eC5nZXRTeXN0ZW1JbmZvU3luYz97YnJvd3Nlcjp7fSxvczp7fSxub2RlOiExLHd4YTohMCxjYW52YXNTdXBwb3J0ZWQ6ITAsc3ZnU3VwcG9ydGVkOiExLHRvdWNoRXZlbnRzU3VwcG9ydGVkOiEwLGRvbVN1cHBvcnRlZDohMX06InVuZGVmaW5lZCI9PT10eXBlb2YgZG9jdW1lbnQmJiJ1bmRlZmluZWQiIT09dHlwZW9mIHNlbGY/e2Jyb3dzZXI6e30sb3M6e30sbm9kZTohMSx3b3JrZXI6ITAsY2FudmFzU3VwcG9ydGVkOiEwLGRvbVN1cHBvcnRlZDohMX06InVuZGVmaW5lZCI9PT10eXBlb2YgbmF2aWdhdG9yP3ticm93c2VyOnt9LG9zOnt9LG5vZGU6ITAsd29ya2VyOiExLGNhbnZhc1N1cHBvcnRlZDohMCxzdmdTdXBwb3J0ZWQ6ITAsZG9tU3VwcG9ydGVkOiExfTpyKG5hdmlnYXRvci51c2VyQWdlbnQpO3ZhciBpPW47ZnVuY3Rpb24gcihlKXt2YXIgdD17fSxuPXt9LGk9ZS5tYXRjaCgvRmlyZWZveFwvKFtcZC5dKykvKSxyPWUubWF0Y2goL01TSUVccyhbXGQuXSspLyl8fGUubWF0Y2goL1RyaWRlbnRcLy4rP3J2OigoW1xkLl0rKSkvKSxvPWUubWF0Y2goL0VkZ2VcLyhbXGQuXSspLyksYT0vbWljcm9tZXNzZW5nZXIvaS50ZXN0KGUpO3JldHVybiBpJiYobi5maXJlZm94PSEwLG4udmVyc2lvbj1pWzFdKSxyJiYobi5pZT0hMCxuLnZlcnNpb249clsxXSksbyYmKG4uZWRnZT0hMCxuLnZlcnNpb249b1sxXSksYSYmKG4ud2VDaGF0PSEwKSx7YnJvd3NlcjpuLG9zOnQsbm9kZTohMSxjYW52YXNTdXBwb3J0ZWQ6ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0LHN2Z1N1cHBvcnRlZDoidW5kZWZpbmVkIiE9PXR5cGVvZiBTVkdSZWN0LHRvdWNoRXZlbnRzU3VwcG9ydGVkOiJvbnRvdWNoc3RhcnQiaW4gd2luZG93JiYhbi5pZSYmIW4uZWRnZSxwb2ludGVyRXZlbnRzU3VwcG9ydGVkOiJvbnBvaW50ZXJkb3duImluIHdpbmRvdyYmKG4uZWRnZXx8bi5pZSYmbi52ZXJzaW9uPj0xMSksZG9tU3VwcG9ydGVkOiJ1bmRlZmluZWQiIT09dHlwZW9mIGRvY3VtZW50fX1lLmV4cG9ydHM9aX0sIjIyZGEiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJmOTM0Iik7ZnVuY3Rpb24gcihlKXtlLmhpZXJOb2RlPXtkZWZhdWx0QW5jZXN0b3I6bnVsbCxhbmNlc3RvcjplLHByZWxpbTowLG1vZGlmaWVyOjAsY2hhbmdlOjAsc2hpZnQ6MCxpOjAsdGhyZWFkOm51bGx9O3ZhciB0LG4saT1bZV07d2hpbGUodD1pLnBvcCgpKWlmKG49dC5jaGlsZHJlbix0LmlzRXhwYW5kJiZuLmxlbmd0aClmb3IodmFyIHI9bi5sZW5ndGgsbz1yLTE7bz49MDtvLS0pe3ZhciBhPW5bb107YS5oaWVyTm9kZT17ZGVmYXVsdEFuY2VzdG9yOm51bGwsYW5jZXN0b3I6YSxwcmVsaW06MCxtb2RpZmllcjowLGNoYW5nZTowLHNoaWZ0OjAsaTpvLHRocmVhZDpudWxsfSxpLnB1c2goYSl9fWZ1bmN0aW9uIG8oZSx0KXt2YXIgbj1lLmlzRXhwYW5kP2UuY2hpbGRyZW46W10saT1lLnBhcmVudE5vZGUuY2hpbGRyZW4scj1lLmhpZXJOb2RlLmk/aVtlLmhpZXJOb2RlLmktMV06bnVsbDtpZihuLmxlbmd0aCl7dShlKTt2YXIgbz0oblswXS5oaWVyTm9kZS5wcmVsaW0rbltuLmxlbmd0aC0xXS5oaWVyTm9kZS5wcmVsaW0pLzI7cj8oZS5oaWVyTm9kZS5wcmVsaW09ci5oaWVyTm9kZS5wcmVsaW0rdChlLHIpLGUuaGllck5vZGUubW9kaWZpZXI9ZS5oaWVyTm9kZS5wcmVsaW0tbyk6ZS5oaWVyTm9kZS5wcmVsaW09b31lbHNlIHImJihlLmhpZXJOb2RlLnByZWxpbT1yLmhpZXJOb2RlLnByZWxpbSt0KGUscikpO2UucGFyZW50Tm9kZS5oaWVyTm9kZS5kZWZhdWx0QW5jZXN0b3I9aChlLHIsZS5wYXJlbnROb2RlLmhpZXJOb2RlLmRlZmF1bHRBbmNlc3Rvcnx8aVswXSx0KX1mdW5jdGlvbiBhKGUpe3ZhciB0PWUuaGllck5vZGUucHJlbGltK2UucGFyZW50Tm9kZS5oaWVyTm9kZS5tb2RpZmllcjtlLnNldExheW91dCh7eDp0fSwhMCksZS5oaWVyTm9kZS5tb2RpZmllcis9ZS5wYXJlbnROb2RlLmhpZXJOb2RlLm1vZGlmaWVyfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZTpnfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj17fTtyZXR1cm4gZS09TWF0aC5QSS8yLG4ueD10Kk1hdGguY29zKGUpLG4ueT10Kk1hdGguc2luKGUpLG59ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBpLmdldExheW91dFJlY3QoZS5nZXRCb3hMYXlvdXRQYXJhbXMoKSx7d2lkdGg6dC5nZXRXaWR0aCgpLGhlaWdodDp0LmdldEhlaWdodCgpfSl9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmNoaWxkcmVuLG49dC5sZW5ndGgsaT0wLHI9MDt3aGlsZSgtLW4+PTApe3ZhciBvPXRbbl07by5oaWVyTm9kZS5wcmVsaW0rPWksby5oaWVyTm9kZS5tb2RpZmllcis9aSxyKz1vLmhpZXJOb2RlLmNoYW5nZSxpKz1vLmhpZXJOb2RlLnNoaWZ0K3J9fWZ1bmN0aW9uIGgoZSx0LG4saSl7aWYodCl7dmFyIHI9ZSxvPWUsYT1vLnBhcmVudE5vZGUuY2hpbGRyZW5bMF0scz10LGw9ci5oaWVyTm9kZS5tb2RpZmllcixjPW8uaGllck5vZGUubW9kaWZpZXIsdT1hLmhpZXJOb2RlLm1vZGlmaWVyLGg9cy5oaWVyTm9kZS5tb2RpZmllcjt3aGlsZShzPWQocyksbz1mKG8pLHMmJm8pe3I9ZChyKSxhPWYoYSksci5oaWVyTm9kZS5hbmNlc3Rvcj1lO3ZhciBnPXMuaGllck5vZGUucHJlbGltK2gtby5oaWVyTm9kZS5wcmVsaW0tYytpKHMsbyk7Zz4wJiYobShwKHMsZSxuKSxlLGcpLGMrPWcsbCs9ZyksaCs9cy5oaWVyTm9kZS5tb2RpZmllcixjKz1vLmhpZXJOb2RlLm1vZGlmaWVyLGwrPXIuaGllck5vZGUubW9kaWZpZXIsdSs9YS5oaWVyTm9kZS5tb2RpZmllcn1zJiYhZChyKSYmKHIuaGllck5vZGUudGhyZWFkPXMsci5oaWVyTm9kZS5tb2RpZmllcis9aC1sKSxvJiYhZihhKSYmKGEuaGllck5vZGUudGhyZWFkPW8sYS5oaWVyTm9kZS5tb2RpZmllcis9Yy11LG49ZSl9cmV0dXJuIG59ZnVuY3Rpb24gZChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0Lmxlbmd0aCYmZS5pc0V4cGFuZD90W3QubGVuZ3RoLTFdOmUuaGllck5vZGUudGhyZWFkfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdC5sZW5ndGgmJmUuaXNFeHBhbmQ/dFswXTplLmhpZXJOb2RlLnRocmVhZH1mdW5jdGlvbiBwKGUsdCxuKXtyZXR1cm4gZS5oaWVyTm9kZS5hbmNlc3Rvci5wYXJlbnROb2RlPT09dC5wYXJlbnROb2RlP2UuaGllck5vZGUuYW5jZXN0b3I6bn1mdW5jdGlvbiBtKGUsdCxuKXt2YXIgaT1uLyh0LmhpZXJOb2RlLmktZS5oaWVyTm9kZS5pKTt0LmhpZXJOb2RlLmNoYW5nZS09aSx0LmhpZXJOb2RlLnNoaWZ0Kz1uLHQuaGllck5vZGUubW9kaWZpZXIrPW4sdC5oaWVyTm9kZS5wcmVsaW0rPW4sZS5oaWVyTm9kZS5jaGFuZ2UrPWl9ZnVuY3Rpb24gZyhlLHQpe3JldHVybiBlLnBhcmVudE5vZGU9PT10LnBhcmVudE5vZGU/MToyfXQuaW5pdD1yLHQuZmlyc3RXYWxrPW8sdC5zZWNvbmRXYWxrPWEsdC5zZXBhcmF0aW9uPXMsdC5yYWRpYWxDb29yZGluYXRlPWwsdC5nZXRWaWV3UmVjdD1jfSwyMzA2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCIzNDJkIiksbz1uKCI0MWVmIiksYT1uKCIxNjg3Iikscz1uKCI0MDFiIiksbD1uKCJjYmU1IiksYz1uKCIwY2RlIiksdT1uKCIwZGE4Iik7dC5JbWFnZT11O3ZhciBoPW4oImUxZmMiKTt0Lkdyb3VwPWg7dmFyIGQ9bigiNzZhNSIpO3QuVGV4dD1kO3ZhciBmPW4oImQ5ZmMiKTt0LkNpcmNsZT1mO3ZhciBwPW4oIjRhYTIiKTt0LlNlY3Rvcj1wO3ZhciBtPW4oIjQ1NzMiKTt0LlJpbmc9bTt2YXIgZz1uKCI4N2IxIik7dC5Qb2x5Z29uPWc7dmFyIHY9bigiZDQ5OCIpO3QuUG9seWxpbmU9djt2YXIgeT1uKCJjN2EyIik7dC5SZWN0PXk7dmFyIGI9bigiY2IxMSIpO3QuTGluZT1iO3ZhciB4PW4oImFjMGYiKTt0LkJlemllckN1cnZlPXg7dmFyIF89bigiOGQzMiIpO3QuQXJjPV87dmFyIHc9bigiZDRjNiIpO3QuQ29tcG91bmRQYXRoPXc7dmFyIFM9bigiNDhhOSIpO3QuTGluZWFyR3JhZGllbnQ9Uzt2YXIgQz1uKCJkZGVkIik7dC5SYWRpYWxHcmFkaWVudD1DO3ZhciBrPW4oIjk4NTAiKTt0LkJvdW5kaW5nUmVjdD1rO3ZhciBUPW4oIjM5MmYiKTt0LkluY3JlbWVudGFsRGlzcGxheWFibGU9VDt2YXIgTT1uKCI5Y2Y5IiksRT1NYXRoLm1heCxJPU1hdGgubWluLEQ9e30sQT0xLE89e2NvbG9yOiJ0ZXh0RmlsbCIsdGV4dEJvcmRlckNvbG9yOiJ0ZXh0U3Ryb2tlIix0ZXh0Qm9yZGVyV2lkdGg6InRleHRTdHJva2VXaWR0aCJ9LFA9ImVtcGhhc2lzIixMPSJub3JtYWwiLE49MSxSPXt9LCQ9e307ZnVuY3Rpb24geihlKXtyZXR1cm4gbC5leHRlbmQoZSl9ZnVuY3Rpb24gQihlLHQpe3JldHVybiByLmV4dGVuZEZyb21TdHJpbmcoZSx0KX1mdW5jdGlvbiBGKGUsdCl7JFtlXT10fWZ1bmN0aW9uIFYoZSl7aWYoJC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gJFtlXX1mdW5jdGlvbiBqKGUsdCxuLGkpe3ZhciBvPXIuY3JlYXRlRnJvbVN0cmluZyhlLHQpO3JldHVybiBuJiYoImNlbnRlciI9PT1pJiYobj1XKG4sby5nZXRCb3VuZGluZ1JlY3QoKSkpLFUobyxuKSksb31mdW5jdGlvbiBIKGUsdCxuKXt2YXIgaT1uZXcgdSh7c3R5bGU6e2ltYWdlOmUseDp0LngseTp0Lnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9LG9ubG9hZDpmdW5jdGlvbihlKXtpZigiY2VudGVyIj09PW4pe3ZhciByPXt3aWR0aDplLndpZHRoLGhlaWdodDplLmhlaWdodH07aS5zZXRTdHlsZShXKHQscikpfX19KTtyZXR1cm4gaX1mdW5jdGlvbiBXKGUsdCl7dmFyIG4saT10LndpZHRoL3QuaGVpZ2h0LHI9ZS5oZWlnaHQqaTtyPD1lLndpZHRoP249ZS5oZWlnaHQ6KHI9ZS53aWR0aCxuPXIvaSk7dmFyIG89ZS54K2Uud2lkdGgvMixhPWUueStlLmhlaWdodC8yO3JldHVybnt4Om8tci8yLHk6YS1uLzIsd2lkdGg6cixoZWlnaHQ6bn19dmFyIEc9ci5tZXJnZVBhdGg7ZnVuY3Rpb24gVShlLHQpe2lmKGUuYXBwbHlUcmFuc2Zvcm0pe3ZhciBuPWUuZ2V0Qm91bmRpbmdSZWN0KCksaT1uLmNhbGN1bGF0ZVRyYW5zZm9ybSh0KTtlLmFwcGx5VHJhbnNmb3JtKGkpfX1mdW5jdGlvbiBxKGUpe3JldHVybiBNLnN1YlBpeGVsT3B0aW1pemVMaW5lKGUuc2hhcGUsZS5zaGFwZSxlLnN0eWxlKSxlfWZ1bmN0aW9uIFkoZSl7cmV0dXJuIE0uc3ViUGl4ZWxPcHRpbWl6ZVJlY3QoZS5zaGFwZSxlLnNoYXBlLGUuc3R5bGUpLGV9dmFyIFg9TS5zdWJQaXhlbE9wdGltaXplO2Z1bmN0aW9uIEsoZSl7cmV0dXJuIG51bGwhPWUmJiJub25lIiE9PWV9dmFyIFo9aS5jcmVhdGVIYXNoTWFwKCksSj0wO2Z1bmN0aW9uIFEoZSl7aWYoInN0cmluZyIhPT10eXBlb2YgZSlyZXR1cm4gZTt2YXIgdD1aLmdldChlKTtyZXR1cm4gdHx8KHQ9by5saWZ0KGUsLS4xKSxKPDFlNCYmKFouc2V0KGUsdCksSisrKSksdH1mdW5jdGlvbiBlZShlKXtpZihlLl9faG92ZXJTdGxEaXJ0eSl7ZS5fX2hvdmVyU3RsRGlydHk9ITE7dmFyIHQ9ZS5fX2hvdmVyU3RsO2lmKHQpe3ZhciBuPWUuX19jYWNoZWROb3JtYWxTdGw9e307ZS5fX2NhY2hlZE5vcm1hbFoyPWUuejI7dmFyIGk9ZS5zdHlsZTtmb3IodmFyIHIgaW4gdCludWxsIT10W3JdJiYobltyXT1pW3JdKTtuLmZpbGw9aS5maWxsLG4uc3Ryb2tlPWkuc3Ryb2tlfWVsc2UgZS5fX2NhY2hlZE5vcm1hbFN0bD1lLl9fY2FjaGVkTm9ybWFsWjI9bnVsbH19ZnVuY3Rpb24gdGUoZSl7dmFyIHQ9ZS5fX2hvdmVyU3RsO2lmKHQmJiFlLl9faGlnaGxpZ2h0ZWQpe3ZhciBuPWUuX196cixpPWUudXNlSG92ZXJMYXllciYmbiYmImNhbnZhcyI9PT1uLnBhaW50ZXIudHlwZTtpZihlLl9faGlnaGxpZ2h0ZWQ9aT8ibGF5ZXIiOiJwbGFpbiIsIShlLmlzR3JvdXB8fCFuJiZlLnVzZUhvdmVyTGF5ZXIpKXt2YXIgcj1lLG89ZS5zdHlsZTtpJiYocj1uLmFkZEhvdmVyKGUpLG89ci5zdHlsZSksQ2UobyksaXx8ZWUociksby5leHRlbmRGcm9tKHQpLG5lKG8sdCwiZmlsbCIpLG5lKG8sdCwic3Ryb2tlIiksU2UobyksaXx8KGUuZGlydHkoITEpLGUuejIrPUEpfX19ZnVuY3Rpb24gbmUoZSx0LG4peyFLKHRbbl0pJiZLKGVbbl0pJiYoZVtuXT1RKGVbbl0pKX1mdW5jdGlvbiBpZShlKXt2YXIgdD1lLl9faGlnaGxpZ2h0ZWQ7aWYodCYmKGUuX19oaWdobGlnaHRlZD0hMSwhZS5pc0dyb3VwKSlpZigibGF5ZXIiPT09dCllLl9fenImJmUuX196ci5yZW1vdmVIb3ZlcihlKTtlbHNle3ZhciBuPWUuc3R5bGUsaT1lLl9fY2FjaGVkTm9ybWFsU3RsO2kmJihDZShuKSxlLnNldFN0eWxlKGkpLFNlKG4pKTt2YXIgcj1lLl9fY2FjaGVkTm9ybWFsWjI7bnVsbCE9ciYmZS56Mi1yPT09QSYmKGUuejI9cil9fWZ1bmN0aW9uIHJlKGUsdCxuKXt2YXIgaSxyPUwsbz1MO2UuX19oaWdobGlnaHRlZCYmKHI9UCxpPSEwKSx0KGUsbiksZS5fX2hpZ2hsaWdodGVkJiYobz1QLGk9ITApLGUuaXNHcm91cCYmZS50cmF2ZXJzZSgoZnVuY3Rpb24oZSl7IWUuaXNHcm91cCYmdChlLG4pfSkpLGkmJmUuX19oaWdoRG93bk9uVXBkYXRlJiZlLl9faGlnaERvd25PblVwZGF0ZShyLG8pfWZ1bmN0aW9uIG9lKGUsdCl7dD1lLl9faG92ZXJTdGw9ITEhPT10JiYoZS5ob3ZlclN0eWxlfHx0fHx7fSksZS5fX2hvdmVyU3RsRGlydHk9ITAsZS5fX2hpZ2hsaWdodGVkJiYoZS5fX2NhY2hlZE5vcm1hbFN0bD1udWxsLGllKGUpLHRlKGUpKX1mdW5jdGlvbiBhZShlKXshdWUodGhpcyxlKSYmIXRoaXMuX19oaWdoQnlPdXRlciYmcmUodGhpcyx0ZSl9ZnVuY3Rpb24gc2UoZSl7IXVlKHRoaXMsZSkmJiF0aGlzLl9faGlnaEJ5T3V0ZXImJnJlKHRoaXMsaWUpfWZ1bmN0aW9uIGxlKGUpe3RoaXMuX19oaWdoQnlPdXRlcnw9MTw8KGV8fDApLHJlKHRoaXMsdGUpfWZ1bmN0aW9uIGNlKGUpeyEodGhpcy5fX2hpZ2hCeU91dGVyJj1+KDE8PChlfHwwKSkpJiZyZSh0aGlzLGllKX1mdW5jdGlvbiB1ZShlLHQpe3JldHVybiBlLl9faGlnaERvd25TaWxlbnRPblRvdWNoJiZ0LnpyQnlUb3VjaH1mdW5jdGlvbiBoZShlLHQpe2RlKGUsITApLHJlKGUsb2UsdCl9ZnVuY3Rpb24gZGUoZSx0KXt2YXIgbj0hMT09PXQ7aWYoZS5fX2hpZ2hEb3duU2lsZW50T25Ub3VjaD1lLmhpZ2hEb3duU2lsZW50T25Ub3VjaCxlLl9faGlnaERvd25PblVwZGF0ZT1lLmhpZ2hEb3duT25VcGRhdGUsIW58fGUuX19oaWdoRG93bkRpc3BhdGNoZXIpe3ZhciBpPW4/Im9mZiI6Im9uIjtlW2ldKCJtb3VzZW92ZXIiLGFlKVtpXSgibW91c2VvdXQiLHNlKSxlW2ldKCJlbXBoYXNpcyIsbGUpW2ldKCJub3JtYWwiLGNlKSxlLl9faGlnaEJ5T3V0ZXI9ZS5fX2hpZ2hCeU91dGVyfHwwLGUuX19oaWdoRG93bkRpc3BhdGNoZXI9IW59fWZ1bmN0aW9uIGZlKGUpe3JldHVybiEoIWV8fCFlLl9faGlnaERvd25EaXNwYXRjaGVyKX1mdW5jdGlvbiBwZShlKXt2YXIgdD1SW2VdO3JldHVybiBudWxsPT10JiZOPD0zMiYmKHQ9UltlXT1OKyspLHR9ZnVuY3Rpb24gbWUoZSx0LG4scixvLGEscyl7bz1vfHxEO3ZhciBsLGM9by5sYWJlbEZldGNoZXIsdT1vLmxhYmVsRGF0YUluZGV4LGg9by5sYWJlbERpbUluZGV4LGQ9by5sYWJlbFByb3AsZj1uLmdldFNoYWxsb3coInNob3ciKSxwPXIuZ2V0U2hhbGxvdygic2hvdyIpOyhmfHxwKSYmKGMmJihsPWMuZ2V0Rm9ybWF0dGVkTGFiZWwodSwibm9ybWFsIixudWxsLGgsZCkpLG51bGw9PWwmJihsPWkuaXNGdW5jdGlvbihvLmRlZmF1bHRUZXh0KT9vLmRlZmF1bHRUZXh0KHUsbyk6by5kZWZhdWx0VGV4dCkpO3ZhciBtPWY/bDpudWxsLGc9cD9pLnJldHJpZXZlMihjP2MuZ2V0Rm9ybWF0dGVkTGFiZWwodSwiZW1waGFzaXMiLG51bGwsaCxkKTpudWxsLGwpOm51bGw7bnVsbD09bSYmbnVsbD09Z3x8KHZlKGUsbixhLG8pLHZlKHQscixzLG8sITApKSxlLnRleHQ9bSx0LnRleHQ9Z31mdW5jdGlvbiBnZShlLHQsbil7dmFyIHI9ZS5zdHlsZTt0JiYoQ2UociksZS5zZXRTdHlsZSh0KSxTZShyKSkscj1lLl9faG92ZXJTdGwsbiYmciYmKENlKHIpLGkuZXh0ZW5kKHIsbiksU2UocikpfWZ1bmN0aW9uIHZlKGUsdCxuLHIsbyl7cmV0dXJuIGJlKGUsdCxyLG8pLG4mJmkuZXh0ZW5kKGUsbiksZX1mdW5jdGlvbiB5ZShlLHQsbil7dmFyIGkscj17aXNSZWN0VGV4dDohMH07ITE9PT1uP2k9ITA6ci5hdXRvQ29sb3I9bixiZShlLHQscixpKX1mdW5jdGlvbiBiZShlLHQsbixyKXtpZihuPW58fEQsbi5pc1JlY3RUZXh0KXt2YXIgbztuLmdldFRleHRQb3NpdGlvbj9vPW4uZ2V0VGV4dFBvc2l0aW9uKHQscik6KG89dC5nZXRTaGFsbG93KCJwb3NpdGlvbiIpfHwocj9udWxsOiJpbnNpZGUiKSwib3V0c2lkZSI9PT1vJiYobz0idG9wIikpLGUudGV4dFBvc2l0aW9uPW8sZS50ZXh0T2Zmc2V0PXQuZ2V0U2hhbGxvdygib2Zmc2V0Iik7dmFyIGE9dC5nZXRTaGFsbG93KCJyb3RhdGUiKTtudWxsIT1hJiYoYSo9TWF0aC5QSS8xODApLGUudGV4dFJvdGF0aW9uPWEsZS50ZXh0RGlzdGFuY2U9aS5yZXRyaWV2ZTIodC5nZXRTaGFsbG93KCJkaXN0YW5jZSIpLHI/bnVsbDo1KX12YXIgcyxsPXQuZWNNb2RlbCxjPWwmJmwub3B0aW9uLnRleHRTdHlsZSx1PXhlKHQpO2lmKHUpZm9yKHZhciBoIGluIHM9e30sdSlpZih1Lmhhc093blByb3BlcnR5KGgpKXt2YXIgZD10LmdldE1vZGVsKFsicmljaCIsaF0pO19lKHNbaF09e30sZCxjLG4scil9cmV0dXJuIGUucmljaD1zLF9lKGUsdCxjLG4sciwhMCksbi5mb3JjZVJpY2gmJiFuLnRleHRTdHlsZSYmKG4udGV4dFN0eWxlPXt9KSxlfWZ1bmN0aW9uIHhlKGUpe3ZhciB0O3doaWxlKGUmJmUhPT1lLmVjTW9kZWwpe3ZhciBuPShlLm9wdGlvbnx8RCkucmljaDtpZihuKWZvcih2YXIgaSBpbiB0PXR8fHt9LG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmKHRbaV09MSk7ZT1lLnBhcmVudE1vZGVsfXJldHVybiB0fWZ1bmN0aW9uIF9lKGUsdCxuLHIsbyxhKXtuPSFvJiZufHxELGUudGV4dEZpbGw9d2UodC5nZXRTaGFsbG93KCJjb2xvciIpLHIpfHxuLmNvbG9yLGUudGV4dFN0cm9rZT13ZSh0LmdldFNoYWxsb3coInRleHRCb3JkZXJDb2xvciIpLHIpfHxuLnRleHRCb3JkZXJDb2xvcixlLnRleHRTdHJva2VXaWR0aD1pLnJldHJpZXZlMih0LmdldFNoYWxsb3coInRleHRCb3JkZXJXaWR0aCIpLG4udGV4dEJvcmRlcldpZHRoKSxvfHwoYSYmKGUuaW5zaWRlUm9sbGJhY2tPcHQ9cixTZShlKSksbnVsbD09ZS50ZXh0RmlsbCYmKGUudGV4dEZpbGw9ci5hdXRvQ29sb3IpKSxlLmZvbnRTdHlsZT10LmdldFNoYWxsb3coImZvbnRTdHlsZSIpfHxuLmZvbnRTdHlsZSxlLmZvbnRXZWlnaHQ9dC5nZXRTaGFsbG93KCJmb250V2VpZ2h0Iil8fG4uZm9udFdlaWdodCxlLmZvbnRTaXplPXQuZ2V0U2hhbGxvdygiZm9udFNpemUiKXx8bi5mb250U2l6ZSxlLmZvbnRGYW1pbHk9dC5nZXRTaGFsbG93KCJmb250RmFtaWx5Iil8fG4uZm9udEZhbWlseSxlLnRleHRBbGlnbj10LmdldFNoYWxsb3coImFsaWduIiksZS50ZXh0VmVydGljYWxBbGlnbj10LmdldFNoYWxsb3coInZlcnRpY2FsQWxpZ24iKXx8dC5nZXRTaGFsbG93KCJiYXNlbGluZSIpLGUudGV4dExpbmVIZWlnaHQ9dC5nZXRTaGFsbG93KCJsaW5lSGVpZ2h0IiksZS50ZXh0V2lkdGg9dC5nZXRTaGFsbG93KCJ3aWR0aCIpLGUudGV4dEhlaWdodD10LmdldFNoYWxsb3coImhlaWdodCIpLGUudGV4dFRhZz10LmdldFNoYWxsb3coInRhZyIpLGEmJnIuZGlzYWJsZUJveHx8KGUudGV4dEJhY2tncm91bmRDb2xvcj13ZSh0LmdldFNoYWxsb3coImJhY2tncm91bmRDb2xvciIpLHIpLGUudGV4dFBhZGRpbmc9dC5nZXRTaGFsbG93KCJwYWRkaW5nIiksZS50ZXh0Qm9yZGVyQ29sb3I9d2UodC5nZXRTaGFsbG93KCJib3JkZXJDb2xvciIpLHIpLGUudGV4dEJvcmRlcldpZHRoPXQuZ2V0U2hhbGxvdygiYm9yZGVyV2lkdGgiKSxlLnRleHRCb3JkZXJSYWRpdXM9dC5nZXRTaGFsbG93KCJib3JkZXJSYWRpdXMiKSxlLnRleHRCb3hTaGFkb3dDb2xvcj10LmdldFNoYWxsb3coInNoYWRvd0NvbG9yIiksZS50ZXh0Qm94U2hhZG93Qmx1cj10LmdldFNoYWxsb3coInNoYWRvd0JsdXIiKSxlLnRleHRCb3hTaGFkb3dPZmZzZXRYPXQuZ2V0U2hhbGxvdygic2hhZG93T2Zmc2V0WCIpLGUudGV4dEJveFNoYWRvd09mZnNldFk9dC5nZXRTaGFsbG93KCJzaGFkb3dPZmZzZXRZIikpLGUudGV4dFNoYWRvd0NvbG9yPXQuZ2V0U2hhbGxvdygidGV4dFNoYWRvd0NvbG9yIil8fG4udGV4dFNoYWRvd0NvbG9yLGUudGV4dFNoYWRvd0JsdXI9dC5nZXRTaGFsbG93KCJ0ZXh0U2hhZG93Qmx1ciIpfHxuLnRleHRTaGFkb3dCbHVyLGUudGV4dFNoYWRvd09mZnNldFg9dC5nZXRTaGFsbG93KCJ0ZXh0U2hhZG93T2Zmc2V0WCIpfHxuLnRleHRTaGFkb3dPZmZzZXRYLGUudGV4dFNoYWRvd09mZnNldFk9dC5nZXRTaGFsbG93KCJ0ZXh0U2hhZG93T2Zmc2V0WSIpfHxuLnRleHRTaGFkb3dPZmZzZXRZfWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuImF1dG8iIT09ZT9lOnQmJnQuYXV0b0NvbG9yP3QuYXV0b0NvbG9yOm51bGx9ZnVuY3Rpb24gU2UoZSl7dmFyIHQsbj1lLnRleHRQb3NpdGlvbixpPWUuaW5zaWRlUm9sbGJhY2tPcHQ7aWYoaSYmbnVsbD09ZS50ZXh0RmlsbCl7dmFyIHI9aS5hdXRvQ29sb3Isbz1pLmlzUmVjdFRleHQsYT1pLnVzZUluc2lkZVN0eWxlLHM9ITEhPT1hJiYoITA9PT1hfHxvJiZuJiYic3RyaW5nIj09PXR5cGVvZiBuJiZuLmluZGV4T2YoImluc2lkZSIpPj0wKSxsPSFzJiZudWxsIT1yOyhzfHxsKSYmKHQ9e3RleHRGaWxsOmUudGV4dEZpbGwsdGV4dFN0cm9rZTplLnRleHRTdHJva2UsdGV4dFN0cm9rZVdpZHRoOmUudGV4dFN0cm9rZVdpZHRofSkscyYmKGUudGV4dEZpbGw9IiNmZmYiLG51bGw9PWUudGV4dFN0cm9rZSYmKGUudGV4dFN0cm9rZT1yLG51bGw9PWUudGV4dFN0cm9rZVdpZHRoJiYoZS50ZXh0U3Ryb2tlV2lkdGg9MikpKSxsJiYoZS50ZXh0RmlsbD1yKX1lLmluc2lkZVJvbGxiYWNrPXR9ZnVuY3Rpb24gQ2UoZSl7dmFyIHQ9ZS5pbnNpZGVSb2xsYmFjazt0JiYoZS50ZXh0RmlsbD10LnRleHRGaWxsLGUudGV4dFN0cm9rZT10LnRleHRTdHJva2UsZS50ZXh0U3Ryb2tlV2lkdGg9dC50ZXh0U3Ryb2tlV2lkdGgsZS5pbnNpZGVSb2xsYmFjaz1udWxsKX1mdW5jdGlvbiBrZShlLHQpe3ZhciBuPXQmJnQuZ2V0TW9kZWwoInRleHRTdHlsZSIpO3JldHVybiBpLnRyaW0oW2UuZm9udFN0eWxlfHxuJiZuLmdldFNoYWxsb3coImZvbnRTdHlsZSIpfHwiIixlLmZvbnRXZWlnaHR8fG4mJm4uZ2V0U2hhbGxvdygiZm9udFdlaWdodCIpfHwiIiwoZS5mb250U2l6ZXx8biYmbi5nZXRTaGFsbG93KCJmb250U2l6ZSIpfHwxMikrInB4IixlLmZvbnRGYW1pbHl8fG4mJm4uZ2V0U2hhbGxvdygiZm9udEZhbWlseSIpfHwic2Fucy1zZXJpZiJdLmpvaW4oIiAiKSl9ZnVuY3Rpb24gVGUoZSx0LG4saSxyLG8peyJmdW5jdGlvbiI9PT10eXBlb2YgciYmKG89cixyPW51bGwpO3ZhciBhPWkmJmkuaXNBbmltYXRpb25FbmFibGVkKCk7aWYoYSl7dmFyIHM9ZT8iVXBkYXRlIjoiIixsPWkuZ2V0U2hhbGxvdygiYW5pbWF0aW9uRHVyYXRpb24iK3MpLGM9aS5nZXRTaGFsbG93KCJhbmltYXRpb25FYXNpbmciK3MpLHU9aS5nZXRTaGFsbG93KCJhbmltYXRpb25EZWxheSIrcyk7ImZ1bmN0aW9uIj09PXR5cGVvZiB1JiYodT11KHIsaS5nZXRBbmltYXRpb25EZWxheVBhcmFtcz9pLmdldEFuaW1hdGlvbkRlbGF5UGFyYW1zKHQscik6bnVsbCkpLCJmdW5jdGlvbiI9PT10eXBlb2YgbCYmKGw9bChyKSksbD4wP3QuYW5pbWF0ZVRvKG4sbCx1fHwwLGMsbywhIW8pOih0LnN0b3BBbmltYXRpb24oKSx0LmF0dHIobiksbyYmbygpKX1lbHNlIHQuc3RvcEFuaW1hdGlvbigpLHQuYXR0cihuKSxvJiZvKCl9ZnVuY3Rpb24gTWUoZSx0LG4saSxyKXtUZSghMCxlLHQsbixpLHIpfWZ1bmN0aW9uIEVlKGUsdCxuLGkscil7VGUoITEsZSx0LG4saSxyKX1mdW5jdGlvbiBJZShlLHQpe3ZhciBuPWEuaWRlbnRpdHkoW10pO3doaWxlKGUmJmUhPT10KWEubXVsKG4sZS5nZXRMb2NhbFRyYW5zZm9ybSgpLG4pLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRGUoZSx0LG4pe3JldHVybiB0JiYhaS5pc0FycmF5TGlrZSh0KSYmKHQ9Yy5nZXRMb2NhbFRyYW5zZm9ybSh0KSksbiYmKHQ9YS5pbnZlcnQoW10sdCkpLHMuYXBwbHlUcmFuc2Zvcm0oW10sZSx0KX1mdW5jdGlvbiBBZShlLHQsbil7dmFyIGk9MD09PXRbNF18fDA9PT10WzVdfHwwPT09dFswXT8xOk1hdGguYWJzKDIqdFs0XS90WzBdKSxyPTA9PT10WzRdfHwwPT09dFs1XXx8MD09PXRbMl0/MTpNYXRoLmFicygyKnRbNF0vdFsyXSksbz1bImxlZnQiPT09ZT8taToicmlnaHQiPT09ZT9pOjAsInRvcCI9PT1lPy1yOiJib3R0b20iPT09ZT9yOjBdO3JldHVybiBvPURlKG8sdCxuKSxNYXRoLmFicyhvWzBdKT5NYXRoLmFicyhvWzFdKT9vWzBdPjA/InJpZ2h0IjoibGVmdCI6b1sxXT4wPyJib3R0b20iOiJ0b3AifWZ1bmN0aW9uIE9lKGUsdCxuLHIpe2lmKGUmJnQpe3ZhciBvPWEoZSk7dC50cmF2ZXJzZSgoZnVuY3Rpb24oZSl7aWYoIWUuaXNHcm91cCYmZS5hbmlkKXt2YXIgdD1vW2UuYW5pZF07aWYodCl7dmFyIGk9bChlKTtlLmF0dHIobCh0KSksTWUoZSxpLG4sZS5kYXRhSW5kZXgpfX19KSl9ZnVuY3Rpb24gYShlKXt2YXIgdD17fTtyZXR1cm4gZS50cmF2ZXJzZSgoZnVuY3Rpb24oZSl7IWUuaXNHcm91cCYmZS5hbmlkJiYodFtlLmFuaWRdPWUpfSkpLHR9ZnVuY3Rpb24gbChlKXt2YXIgdD17cG9zaXRpb246cy5jbG9uZShlLnBvc2l0aW9uKSxyb3RhdGlvbjplLnJvdGF0aW9ufTtyZXR1cm4gZS5zaGFwZSYmKHQuc2hhcGU9aS5leHRlbmQoe30sZS5zaGFwZSkpLHR9fWZ1bmN0aW9uIFBlKGUsdCl7cmV0dXJuIGkubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPWVbMF07bj1FKG4sdC54KSxuPUkobix0LngrdC53aWR0aCk7dmFyIGk9ZVsxXTtyZXR1cm4gaT1FKGksdC55KSxpPUkoaSx0LnkrdC5oZWlnaHQpLFtuLGldfSkpfWZ1bmN0aW9uIExlKGUsdCl7dmFyIG49RShlLngsdC54KSxpPUkoZS54K2Uud2lkdGgsdC54K3Qud2lkdGgpLHI9RShlLnksdC55KSxvPUkoZS55K2UuaGVpZ2h0LHQueSt0LmhlaWdodCk7aWYoaT49biYmbz49cilyZXR1cm57eDpuLHk6cix3aWR0aDppLW4saGVpZ2h0Om8tcn19ZnVuY3Rpb24gTmUoZSx0LG4pe3Q9aS5leHRlbmQoe3JlY3RIb3ZlcjohMH0sdCk7dmFyIHI9dC5zdHlsZT17c3Ryb2tlTm9TY2FsZTohMH07aWYobj1ufHx7eDotMSx5Oi0xLHdpZHRoOjIsaGVpZ2h0OjJ9LGUpcmV0dXJuIDA9PT1lLmluZGV4T2YoImltYWdlOi8vIik/KHIuaW1hZ2U9ZS5zbGljZSg4KSxpLmRlZmF1bHRzKHIsbiksbmV3IHUodCkpOmooZS5yZXBsYWNlKCJwYXRoOi8vIiwiIiksdCxuLCJjZW50ZXIiKX1mdW5jdGlvbiBSZShlLHQsbixpLHIpe2Zvcih2YXIgbz0wLGE9cltyLmxlbmd0aC0xXTtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXTtpZigkZShlLHQsbixpLHNbMF0sc1sxXSxhWzBdLGFbMV0pKXJldHVybiEwO2E9c319ZnVuY3Rpb24gJGUoZSx0LG4saSxyLG8sYSxzKXt2YXIgbD1uLWUsYz1pLXQsdT1hLXIsaD1zLW8sZD16ZSh1LGgsbCxjKTtpZihCZShkKSlyZXR1cm4hMTt2YXIgZj1lLXIscD10LW8sbT16ZShmLHAsbCxjKS9kO2lmKG08MHx8bT4xKXJldHVybiExO3ZhciBnPXplKGYscCx1LGgpL2Q7cmV0dXJuIShnPDB8fGc+MSl9ZnVuY3Rpb24gemUoZSx0LG4saSl7cmV0dXJuIGUqaS1uKnR9ZnVuY3Rpb24gQmUoZSl7cmV0dXJuIGU8PTFlLTYmJmU+PS0xZS02fUYoImNpcmNsZSIsZiksRigic2VjdG9yIixwKSxGKCJyaW5nIixtKSxGKCJwb2x5Z29uIixnKSxGKCJwb2x5bGluZSIsdiksRigicmVjdCIseSksRigibGluZSIsYiksRigiYmV6aWVyQ3VydmUiLHgpLEYoImFyYyIsXyksdC5aMl9FTVBIQVNJU19MSUZUPUEsdC5DQUNIRURfTEFCRUxfU1RZTEVfUFJPUEVSVElFUz1PLHQuZXh0ZW5kU2hhcGU9eix0LmV4dGVuZFBhdGg9Qix0LnJlZ2lzdGVyU2hhcGU9Rix0LmdldFNoYXBlQ2xhc3M9Vix0Lm1ha2VQYXRoPWosdC5tYWtlSW1hZ2U9SCx0Lm1lcmdlUGF0aD1HLHQucmVzaXplUGF0aD1VLHQuc3ViUGl4ZWxPcHRpbWl6ZUxpbmU9cSx0LnN1YlBpeGVsT3B0aW1pemVSZWN0PVksdC5zdWJQaXhlbE9wdGltaXplPVgsdC5zZXRFbGVtZW50SG92ZXJTdHlsZT1vZSx0LnNldEhvdmVyU3R5bGU9aGUsdC5zZXRBc0hpZ2hEb3duRGlzcGF0Y2hlcj1kZSx0LmlzSGlnaERvd25EaXNwYXRjaGVyPWZlLHQuZ2V0SGlnaGxpZ2h0RGlnaXQ9cGUsdC5zZXRMYWJlbFN0eWxlPW1lLHQubW9kaWZ5TGFiZWxTdHlsZT1nZSx0LnNldFRleHRTdHlsZT12ZSx0LnNldFRleHQ9eWUsdC5nZXRGb250PWtlLHQudXBkYXRlUHJvcHM9TWUsdC5pbml0UHJvcHM9RWUsdC5nZXRUcmFuc2Zvcm09SWUsdC5hcHBseVRyYW5zZm9ybT1EZSx0LnRyYW5zZm9ybURpcmVjdGlvbj1BZSx0Lmdyb3VwVHJhbnNpdGlvbj1PZSx0LmNsaXBQb2ludHNCeVJlY3Q9UGUsdC5jbGlwUmVjdEJ5UmVjdD1MZSx0LmNyZWF0ZUljb249TmUsdC5saW5lUG9seWdvbkludGVyc2VjdD1SZSx0LmxpbmVMaW5lSW50ZXJzZWN0PSRlfSwyMzI1OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI2MDdkIiksbz1uKCIyMzA2IiksYT1uKCI4OGIzIikscz1uKCI3ZGNmIiksbD1uKCIzODQyIiksYz1uKCJmOTM0IiksdT1uKCJlZjZhIiksaD1vLlJlY3QsZD1sLmxpbmVhck1hcCxmPWwuYXNjLHA9aS5iaW5kLG09aS5lYWNoLGc9Nyx2PTEseT0zMCxiPSJob3Jpem9udGFsIix4PSJ2ZXJ0aWNhbCIsXz01LHc9WyJsaW5lIiwiYmFyIiwiY2FuZGxlc3RpY2siLCJzY2F0dGVyIl0sUz1zLmV4dGVuZCh7dHlwZToiZGF0YVpvb20uc2xpZGVyIixpbml0OmZ1bmN0aW9uKGUsdCl7dGhpcy5fZGlzcGxheWFibGVzPXt9LHRoaXMuX29yaWVudCx0aGlzLl9yYW5nZSx0aGlzLl9oYW5kbGVFbmRzLHRoaXMuX3NpemUsdGhpcy5faGFuZGxlV2lkdGgsdGhpcy5faGFuZGxlSGVpZ2h0LHRoaXMuX2xvY2F0aW9uLHRoaXMuX2RyYWdnaW5nLHRoaXMuX2RhdGFTaGFkb3dJbmZvLHRoaXMuYXBpPXR9LHJlbmRlcjpmdW5jdGlvbihlLHQsbixpKXtTLnN1cGVyQXBwbHkodGhpcywicmVuZGVyIixhcmd1bWVudHMpLGEuY3JlYXRlT3JVcGRhdGUodGhpcywiX2Rpc3BhdGNoWm9vbUFjdGlvbiIsdGhpcy5kYXRhWm9vbU1vZGVsLmdldCgidGhyb3R0bGUiKSwiZml4UmF0ZSIpLHRoaXMuX29yaWVudD1lLmdldCgib3JpZW50IiksITEhPT10aGlzLmRhdGFab29tTW9kZWwuZ2V0KCJzaG93Iik/KGkmJiJkYXRhWm9vbSI9PT1pLnR5cGUmJmkuZnJvbT09PXRoaXMudWlkfHx0aGlzLl9idWlsZFZpZXcoKSx0aGlzLl91cGRhdGVWaWV3KCkpOnRoaXMuZ3JvdXAucmVtb3ZlQWxsKCl9LHJlbW92ZTpmdW5jdGlvbigpe1Muc3VwZXJBcHBseSh0aGlzLCJyZW1vdmUiLGFyZ3VtZW50cyksYS5jbGVhcih0aGlzLCJfZGlzcGF0Y2hab29tQWN0aW9uIil9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtTLnN1cGVyQXBwbHkodGhpcywiZGlzcG9zZSIsYXJndW1lbnRzKSxhLmNsZWFyKHRoaXMsIl9kaXNwYXRjaFpvb21BY3Rpb24iKX0sX2J1aWxkVmlldzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ3JvdXA7ZS5yZW1vdmVBbGwoKSx0aGlzLl9yZXNldExvY2F0aW9uKCksdGhpcy5fcmVzZXRJbnRlcnZhbCgpO3ZhciB0PXRoaXMuX2Rpc3BsYXlhYmxlcy5iYXJHcm91cD1uZXcgby5Hcm91cDt0aGlzLl9yZW5kZXJCYWNrZ3JvdW5kKCksdGhpcy5fcmVuZGVySGFuZGxlKCksdGhpcy5fcmVuZGVyRGF0YVNoYWRvdygpLGUuYWRkKHQpLHRoaXMuX3Bvc2l0aW9uR3JvdXAoKX0sX3Jlc2V0TG9jYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGFab29tTW9kZWwsdD10aGlzLmFwaSxuPXRoaXMuX2ZpbmRDb29yZFJlY3QoKSxyPXt3aWR0aDp0LmdldFdpZHRoKCksaGVpZ2h0OnQuZ2V0SGVpZ2h0KCl9LG89dGhpcy5fb3JpZW50PT09Yj97cmlnaHQ6ci53aWR0aC1uLngtbi53aWR0aCx0b3A6ci5oZWlnaHQteS1nLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Onl9OntyaWdodDpnLHRvcDpuLnksd2lkdGg6eSxoZWlnaHQ6bi5oZWlnaHR9LGE9Yy5nZXRMYXlvdXRQYXJhbXMoZS5vcHRpb24pO2kuZWFjaChbInJpZ2h0IiwidG9wIiwid2lkdGgiLCJoZWlnaHQiXSwoZnVuY3Rpb24oZSl7InBoIj09PWFbZV0mJihhW2VdPW9bZV0pfSkpO3ZhciBzPWMuZ2V0TGF5b3V0UmVjdChhLHIsZS5wYWRkaW5nKTt0aGlzLl9sb2NhdGlvbj17eDpzLngseTpzLnl9LHRoaXMuX3NpemU9W3Mud2lkdGgscy5oZWlnaHRdLHRoaXMuX29yaWVudD09PXgmJnRoaXMuX3NpemUucmV2ZXJzZSgpfSxfcG9zaXRpb25Hcm91cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ3JvdXAsdD10aGlzLl9sb2NhdGlvbixuPXRoaXMuX29yaWVudCxpPXRoaXMuZGF0YVpvb21Nb2RlbC5nZXRGaXJzdFRhcmdldEF4aXNNb2RlbCgpLHI9aSYmaS5nZXQoImludmVyc2UiKSxvPXRoaXMuX2Rpc3BsYXlhYmxlcy5iYXJHcm91cCxhPSh0aGlzLl9kYXRhU2hhZG93SW5mb3x8e30pLm90aGVyQXhpc0ludmVyc2U7by5hdHRyKG4hPT1ifHxyP249PT1iJiZyP3tzY2FsZTphP1stMSwxXTpbLTEsLTFdfTpuIT09eHx8cj97c2NhbGU6YT9bLTEsLTFdOlstMSwxXSxyb3RhdGlvbjpNYXRoLlBJLzJ9OntzY2FsZTphP1sxLC0xXTpbMSwxXSxyb3RhdGlvbjpNYXRoLlBJLzJ9OntzY2FsZTphP1sxLDFdOlsxLC0xXX0pO3ZhciBzPWUuZ2V0Qm91bmRpbmdSZWN0KFtvXSk7ZS5hdHRyKCJwb3NpdGlvbiIsW3QueC1zLngsdC55LXMueV0pfSxfZ2V0Vmlld0V4dGVudDpmdW5jdGlvbigpe3JldHVyblswLHRoaXMuX3NpemVbMF1dfSxfcmVuZGVyQmFja2dyb3VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YVpvb21Nb2RlbCx0PXRoaXMuX3NpemUsbj10aGlzLl9kaXNwbGF5YWJsZXMuYmFyR3JvdXA7bi5hZGQobmV3IGgoe3NpbGVudDohMCxzaGFwZTp7eDowLHk6MCx3aWR0aDp0WzBdLGhlaWdodDp0WzFdfSxzdHlsZTp7ZmlsbDplLmdldCgiYmFja2dyb3VuZENvbG9yIil9LHoyOi00MH0pKSxuLmFkZChuZXcgaCh7c2hhcGU6e3g6MCx5OjAsd2lkdGg6dFswXSxoZWlnaHQ6dFsxXX0sc3R5bGU6e2ZpbGw6InRyYW5zcGFyZW50In0sejI6MCxvbmNsaWNrOmkuYmluZCh0aGlzLl9vbkNsaWNrUGFuZWxDbGljayx0aGlzKX0pKX0sX3JlbmRlckRhdGFTaGFkb3c6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhU2hhZG93SW5mbz10aGlzLl9wcmVwYXJlRGF0YVNoYWRvd0luZm8oKTtpZihlKXt2YXIgdD10aGlzLl9zaXplLG49ZS5zZXJpZXMscj1uLmdldFJhd0RhdGEoKSxhPW4uZ2V0U2hhZG93RGltP24uZ2V0U2hhZG93RGltKCk6ZS5vdGhlckRpbTtpZihudWxsIT1hKXt2YXIgcz1yLmdldERhdGFFeHRlbnQoYSksbD0uMyooc1sxXS1zWzBdKTtzPVtzWzBdLWwsc1sxXStsXTt2YXIgYyx1PVswLHRbMV1dLGg9WzAsdFswXV0sZj1bW3RbMF0sMF0sWzAsMF1dLHA9W10sbT1oWzFdLyhyLmNvdW50KCktMSksZz0wLHY9TWF0aC5yb3VuZChyLmNvdW50KCkvdFswXSk7ci5lYWNoKFthXSwoZnVuY3Rpb24oZSx0KXtpZih2PjAmJnQldilnKz1tO2Vsc2V7dmFyIG49bnVsbD09ZXx8aXNOYU4oZSl8fCIiPT09ZSxpPW4/MDpkKGUscyx1LCEwKTtuJiYhYyYmdD8oZi5wdXNoKFtmW2YubGVuZ3RoLTFdWzBdLDBdKSxwLnB1c2goW3BbcC5sZW5ndGgtMV1bMF0sMF0pKTohbiYmYyYmKGYucHVzaChbZywwXSkscC5wdXNoKFtnLDBdKSksZi5wdXNoKFtnLGldKSxwLnB1c2goW2csaV0pLGcrPW0sYz1ufX0pKTt2YXIgeT10aGlzLmRhdGFab29tTW9kZWw7dGhpcy5fZGlzcGxheWFibGVzLmJhckdyb3VwLmFkZChuZXcgby5Qb2x5Z29uKHtzaGFwZTp7cG9pbnRzOmZ9LHN0eWxlOmkuZGVmYXVsdHMoe2ZpbGw6eS5nZXQoImRhdGFCYWNrZ3JvdW5kQ29sb3IiKX0seS5nZXRNb2RlbCgiZGF0YUJhY2tncm91bmQuYXJlYVN0eWxlIikuZ2V0QXJlYVN0eWxlKCkpLHNpbGVudDohMCx6MjotMjB9KSksdGhpcy5fZGlzcGxheWFibGVzLmJhckdyb3VwLmFkZChuZXcgby5Qb2x5bGluZSh7c2hhcGU6e3BvaW50czpwfSxzdHlsZTp5LmdldE1vZGVsKCJkYXRhQmFja2dyb3VuZC5saW5lU3R5bGUiKS5nZXRMaW5lU3R5bGUoKSxzaWxlbnQ6ITAsejI6LTE5fSkpfX19LF9wcmVwYXJlRGF0YVNoYWRvd0luZm86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGFab29tTW9kZWwsdD1lLmdldCgic2hvd0RhdGFTaGFkb3ciKTtpZighMSE9PXQpe3ZhciBuLHI9dGhpcy5lY01vZGVsO3JldHVybiBlLmVhY2hUYXJnZXRBeGlzKChmdW5jdGlvbihvLGEpe3ZhciBzPWUuZ2V0QXhpc1Byb3h5KG8ubmFtZSxhKS5nZXRUYXJnZXRTZXJpZXNNb2RlbHMoKTtpLmVhY2gocywoZnVuY3Rpb24oZSl7aWYoIW4mJiEoITAhPT10JiZpLmluZGV4T2YodyxlLmdldCgidHlwZSIpKTwwKSl7dmFyIHMsbD1yLmdldENvbXBvbmVudChvLmF4aXMsYSkuYXhpcyxjPUMoby5uYW1lKSx1PWUuY29vcmRpbmF0ZVN5c3RlbTtudWxsIT1jJiZ1LmdldE90aGVyQXhpcyYmKHM9dS5nZXRPdGhlckF4aXMobCkuaW52ZXJzZSksYz1lLmdldERhdGEoKS5tYXBEaW1lbnNpb24oYyksbj17dGhpc0F4aXM6bCxzZXJpZXM6ZSx0aGlzRGltOm8ubmFtZSxvdGhlckRpbTpjLG90aGVyQXhpc0ludmVyc2U6c319fSksdGhpcyl9KSx0aGlzKSxufX0sX3JlbmRlckhhbmRsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Rpc3BsYXlhYmxlcyx0PWUuaGFuZGxlcz1bXSxuPWUuaGFuZGxlTGFiZWxzPVtdLGk9dGhpcy5fZGlzcGxheWFibGVzLmJhckdyb3VwLHI9dGhpcy5fc2l6ZSxhPXRoaXMuZGF0YVpvb21Nb2RlbDtpLmFkZChlLmZpbGxlcj1uZXcgaCh7ZHJhZ2dhYmxlOiEwLGN1cnNvcjprKHRoaXMuX29yaWVudCksZHJpZnQ6cCh0aGlzLl9vbkRyYWdNb3ZlLHRoaXMsImFsbCIpLG9uZHJhZ3N0YXJ0OnAodGhpcy5fc2hvd0RhdGFJbmZvLHRoaXMsITApLG9uZHJhZ2VuZDpwKHRoaXMuX29uRHJhZ0VuZCx0aGlzKSxvbm1vdXNlb3ZlcjpwKHRoaXMuX3Nob3dEYXRhSW5mbyx0aGlzLCEwKSxvbm1vdXNlb3V0OnAodGhpcy5fc2hvd0RhdGFJbmZvLHRoaXMsITEpLHN0eWxlOntmaWxsOmEuZ2V0KCJmaWxsZXJDb2xvciIpLHRleHRQb3NpdGlvbjoiaW5zaWRlIn19KSksaS5hZGQobmV3IGgoe3NpbGVudDohMCxzdWJQaXhlbE9wdGltaXplOiEwLHNoYXBlOnt4OjAseTowLHdpZHRoOnJbMF0saGVpZ2h0OnJbMV19LHN0eWxlOntzdHJva2U6YS5nZXQoImRhdGFCYWNrZ3JvdW5kQ29sb3IiKXx8YS5nZXQoImJvcmRlckNvbG9yIiksbGluZVdpZHRoOnYsZmlsbDoicmdiYSgwLDAsMCwwKSJ9fSkpLG0oWzAsMV0sKGZ1bmN0aW9uKGUpe3ZhciByPW8uY3JlYXRlSWNvbihhLmdldCgiaGFuZGxlSWNvbiIpLHtjdXJzb3I6ayh0aGlzLl9vcmllbnQpLGRyYWdnYWJsZTohMCxkcmlmdDpwKHRoaXMuX29uRHJhZ01vdmUsdGhpcyxlKSxvbmRyYWdlbmQ6cCh0aGlzLl9vbkRyYWdFbmQsdGhpcyksb25tb3VzZW92ZXI6cCh0aGlzLl9zaG93RGF0YUluZm8sdGhpcywhMCksb25tb3VzZW91dDpwKHRoaXMuX3Nob3dEYXRhSW5mbyx0aGlzLCExKX0se3g6LTEseTowLHdpZHRoOjIsaGVpZ2h0OjJ9KSxzPXIuZ2V0Qm91bmRpbmdSZWN0KCk7dGhpcy5faGFuZGxlSGVpZ2h0PWwucGFyc2VQZXJjZW50KGEuZ2V0KCJoYW5kbGVTaXplIiksdGhpcy5fc2l6ZVsxXSksdGhpcy5faGFuZGxlV2lkdGg9cy53aWR0aC9zLmhlaWdodCp0aGlzLl9oYW5kbGVIZWlnaHQsci5zZXRTdHlsZShhLmdldE1vZGVsKCJoYW5kbGVTdHlsZSIpLmdldEl0ZW1TdHlsZSgpKTt2YXIgYz1hLmdldCgiaGFuZGxlQ29sb3IiKTtudWxsIT1jJiYoci5zdHlsZS5maWxsPWMpLGkuYWRkKHRbZV09cik7dmFyIHU9YS50ZXh0U3R5bGVNb2RlbDt0aGlzLmdyb3VwLmFkZChuW2VdPW5ldyBvLlRleHQoe3NpbGVudDohMCxpbnZpc2libGU6ITAsc3R5bGU6e3g6MCx5OjAsdGV4dDoiIix0ZXh0VmVydGljYWxBbGlnbjoibWlkZGxlIix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEZpbGw6dS5nZXRUZXh0Q29sb3IoKSx0ZXh0Rm9udDp1LmdldEZvbnQoKX0sejI6MTB9KSl9KSx0aGlzKX0sX3Jlc2V0SW50ZXJ2YWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yYW5nZT10aGlzLmRhdGFab29tTW9kZWwuZ2V0UGVyY2VudFJhbmdlKCksdD10aGlzLl9nZXRWaWV3RXh0ZW50KCk7dGhpcy5faGFuZGxlRW5kcz1bZChlWzBdLFswLDEwMF0sdCwhMCksZChlWzFdLFswLDEwMF0sdCwhMCldfSxfdXBkYXRlSW50ZXJ2YWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmRhdGFab29tTW9kZWwsaT10aGlzLl9oYW5kbGVFbmRzLHI9dGhpcy5fZ2V0Vmlld0V4dGVudCgpLG89bi5maW5kUmVwcmVzZW50YXRpdmVBeGlzUHJveHkoKS5nZXRNaW5NYXhTcGFuKCksYT1bMCwxMDBdO3UodCxpLHIsbi5nZXQoInpvb21Mb2NrIik/ImFsbCI6ZSxudWxsIT1vLm1pblNwYW4/ZChvLm1pblNwYW4sYSxyLCEwKTpudWxsLG51bGwhPW8ubWF4U3Bhbj9kKG8ubWF4U3BhbixhLHIsITApOm51bGwpO3ZhciBzPXRoaXMuX3JhbmdlLGw9dGhpcy5fcmFuZ2U9ZihbZChpWzBdLHIsYSwhMCksZChpWzFdLHIsYSwhMCldKTtyZXR1cm4hc3x8c1swXSE9PWxbMF18fHNbMV0hPT1sWzFdfSxfdXBkYXRlVmlldzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9kaXNwbGF5YWJsZXMsbj10aGlzLl9oYW5kbGVFbmRzLGk9ZihuLnNsaWNlKCkpLHI9dGhpcy5fc2l6ZTttKFswLDFdLChmdW5jdGlvbihlKXt2YXIgaT10LmhhbmRsZXNbZV0sbz10aGlzLl9oYW5kbGVIZWlnaHQ7aS5hdHRyKHtzY2FsZTpbby8yLG8vMl0scG9zaXRpb246W25bZV0sclsxXS8yLW8vMl19KX0pLHRoaXMpLHQuZmlsbGVyLnNldFNoYXBlKHt4OmlbMF0seTowLHdpZHRoOmlbMV0taVswXSxoZWlnaHQ6clsxXX0pLHRoaXMuX3VwZGF0ZURhdGFJbmZvKGUpfSxfdXBkYXRlRGF0YUluZm86ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kYXRhWm9vbU1vZGVsLG49dGhpcy5fZGlzcGxheWFibGVzLGk9bi5oYW5kbGVMYWJlbHMscj10aGlzLl9vcmllbnQsYT1bIiIsIiJdO2lmKHQuZ2V0KCJzaG93RGV0YWlsIikpe3ZhciBzPXQuZmluZFJlcHJlc2VudGF0aXZlQXhpc1Byb3h5KCk7aWYocyl7dmFyIGw9cy5nZXRBeGlzTW9kZWwoKS5heGlzLGM9dGhpcy5fcmFuZ2UsdT1lP3MuY2FsY3VsYXRlRGF0YVdpbmRvdyh7c3RhcnQ6Y1swXSxlbmQ6Y1sxXX0pLnZhbHVlV2luZG93OnMuZ2V0RGF0YVZhbHVlV2luZG93KCk7YT1bdGhpcy5fZm9ybWF0TGFiZWwodVswXSxsKSx0aGlzLl9mb3JtYXRMYWJlbCh1WzFdLGwpXX19dmFyIGg9Zih0aGlzLl9oYW5kbGVFbmRzLnNsaWNlKCkpO2Z1bmN0aW9uIGQoZSl7dmFyIHQ9by5nZXRUcmFuc2Zvcm0obi5oYW5kbGVzW2VdLnBhcmVudCx0aGlzLmdyb3VwKSxzPW8udHJhbnNmb3JtRGlyZWN0aW9uKDA9PT1lPyJyaWdodCI6ImxlZnQiLHQpLGw9dGhpcy5faGFuZGxlV2lkdGgvMitfLGM9by5hcHBseVRyYW5zZm9ybShbaFtlXSsoMD09PWU/LWw6bCksdGhpcy5fc2l6ZVsxXS8yXSx0KTtpW2VdLnNldFN0eWxlKHt4OmNbMF0seTpjWzFdLHRleHRWZXJ0aWNhbEFsaWduOnI9PT1iPyJtaWRkbGUiOnMsdGV4dEFsaWduOnI9PT1iP3M6ImNlbnRlciIsdGV4dDphW2VdfSl9ZC5jYWxsKHRoaXMsMCksZC5jYWxsKHRoaXMsMSl9LF9mb3JtYXRMYWJlbDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZGF0YVpvb21Nb2RlbCxyPW4uZ2V0KCJsYWJlbEZvcm1hdHRlciIpLG89bi5nZXQoImxhYmVsUHJlY2lzaW9uIik7bnVsbCE9byYmImF1dG8iIT09b3x8KG89dC5nZXRQaXhlbFByZWNpc2lvbigpKTt2YXIgYT1udWxsPT1lfHxpc05hTihlKT8iIjoiY2F0ZWdvcnkiPT09dC50eXBlfHwidGltZSI9PT10LnR5cGU/dC5zY2FsZS5nZXRMYWJlbChNYXRoLnJvdW5kKGUpKTplLnRvRml4ZWQoTWF0aC5taW4obywyMCkpO3JldHVybiBpLmlzRnVuY3Rpb24ocik/cihlLGEpOmkuaXNTdHJpbmcocik/ci5yZXBsYWNlKCJ7dmFsdWV9IixhKTphfSxfc2hvd0RhdGFJbmZvOmZ1bmN0aW9uKGUpe2U9dGhpcy5fZHJhZ2dpbmd8fGU7dmFyIHQ9dGhpcy5fZGlzcGxheWFibGVzLmhhbmRsZUxhYmVsczt0WzBdLmF0dHIoImludmlzaWJsZSIsIWUpLHRbMV0uYXR0cigiaW52aXNpYmxlIiwhZSl9LF9vbkRyYWdNb3ZlOmZ1bmN0aW9uKGUsdCxuLGkpe3RoaXMuX2RyYWdnaW5nPSEwLHIuc3RvcChpLmV2ZW50KTt2YXIgYT10aGlzLl9kaXNwbGF5YWJsZXMuYmFyR3JvdXAuZ2V0TG9jYWxUcmFuc2Zvcm0oKSxzPW8uYXBwbHlUcmFuc2Zvcm0oW3Qsbl0sYSwhMCksbD10aGlzLl91cGRhdGVJbnRlcnZhbChlLHNbMF0pLGM9dGhpcy5kYXRhWm9vbU1vZGVsLmdldCgicmVhbHRpbWUiKTt0aGlzLl91cGRhdGVWaWV3KCFjKSxsJiZjJiZ0aGlzLl9kaXNwYXRjaFpvb21BY3Rpb24oKX0sX29uRHJhZ0VuZDpmdW5jdGlvbigpe3RoaXMuX2RyYWdnaW5nPSExLHRoaXMuX3Nob3dEYXRhSW5mbyghMSk7dmFyIGU9dGhpcy5kYXRhWm9vbU1vZGVsLmdldCgicmVhbHRpbWUiKTshZSYmdGhpcy5fZGlzcGF0Y2hab29tQWN0aW9uKCl9LF9vbkNsaWNrUGFuZWxDbGljazpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zaXplLG49dGhpcy5fZGlzcGxheWFibGVzLmJhckdyb3VwLnRyYW5zZm9ybUNvb3JkVG9Mb2NhbChlLm9mZnNldFgsZS5vZmZzZXRZKTtpZighKG5bMF08MHx8blswXT50WzBdfHxuWzFdPDB8fG5bMV0+dFsxXSkpe3ZhciBpPXRoaXMuX2hhbmRsZUVuZHMscj0oaVswXStpWzFdKS8yLG89dGhpcy5fdXBkYXRlSW50ZXJ2YWwoImFsbCIsblswXS1yKTt0aGlzLl91cGRhdGVWaWV3KCksbyYmdGhpcy5fZGlzcGF0Y2hab29tQWN0aW9uKCl9fSxfZGlzcGF0Y2hab29tQWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmFuZ2U7dGhpcy5hcGkuZGlzcGF0Y2hBY3Rpb24oe3R5cGU6ImRhdGFab29tIixmcm9tOnRoaXMudWlkLGRhdGFab29tSWQ6dGhpcy5kYXRhWm9vbU1vZGVsLmlkLHN0YXJ0OmVbMF0sZW5kOmVbMV19KX0sX2ZpbmRDb29yZFJlY3Q6ZnVuY3Rpb24oKXt2YXIgZTtpZihtKHRoaXMuZ2V0VGFyZ2V0Q29vcmRJbmZvKCksKGZ1bmN0aW9uKHQpe2lmKCFlJiZ0Lmxlbmd0aCl7dmFyIG49dFswXS5tb2RlbC5jb29yZGluYXRlU3lzdGVtO2U9bi5nZXRSZWN0JiZuLmdldFJlY3QoKX19KSksIWUpe3ZhciB0PXRoaXMuYXBpLmdldFdpZHRoKCksbj10aGlzLmFwaS5nZXRIZWlnaHQoKTtlPXt4Oi4yKnQseTouMipuLHdpZHRoOi42KnQsaGVpZ2h0Oi42Km59fXJldHVybiBlfX0pO2Z1bmN0aW9uIEMoZSl7dmFyIHQ9e3g6InkiLHk6IngiLHJhZGl1czoiYW5nbGUiLGFuZ2xlOiJyYWRpdXMifTtyZXR1cm4gdFtlXX1mdW5jdGlvbiBrKGUpe3JldHVybiJ2ZXJ0aWNhbCI9PT1lPyJucy1yZXNpemUiOiJldy1yZXNpemUifXZhciBUPVM7ZS5leHBvcnRzPVR9LCIyMzdmIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiNjE3OSIpLG89bigiNzM2OCIpLGE9bigiMzFkOSIpLHM9bigiYjFkNCIpLGw9bigiMjAzOSIpLGM9bigiMzMwMSIpO2Z1bmN0aW9uIHUoZSx0LG4sdSxoKXtmb3IodmFyIGQ9bmV3IG8odSksZj0wO2Y8ZS5sZW5ndGg7ZisrKWQuYWRkTm9kZShpLnJldHJpZXZlKGVbZl0uaWQsZVtmXS5uYW1lLGYpLGYpO3ZhciBwPVtdLG09W10sZz0wO2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspe3ZhciB2PXRbZl0seT12LnNvdXJjZSxiPXYudGFyZ2V0O2QuYWRkRWRnZSh5LGIsZykmJihtLnB1c2godikscC5wdXNoKGkucmV0cmlldmUodi5pZCx5KyIgPiAiK2IpKSxnKyspfXZhciB4LF89bi5nZXQoImNvb3JkaW5hdGVTeXN0ZW0iKTtpZigiY2FydGVzaWFuMmQiPT09X3x8InBvbGFyIj09PV8peD1jKGUsbik7ZWxzZXt2YXIgdz1sLmdldChfKSxTPXcmJiJ2aWV3IiE9PXcudHlwZSYmdy5kaW1lbnNpb25zfHxbXTtpLmluZGV4T2YoUywidmFsdWUiKTwwJiZTLmNvbmNhdChbInZhbHVlIl0pO3ZhciBDPXMoZSx7Y29vcmREaW1lbnNpb25zOlN9KTt4PW5ldyByKEMsbikseC5pbml0RGF0YShlKX12YXIgaz1uZXcgcihbInZhbHVlIl0sbik7cmV0dXJuIGsuaW5pdERhdGEobSxwKSxoJiZoKHgsayksYSh7bWFpbkRhdGE6eCxzdHJ1Y3Q6ZCxzdHJ1Y3RBdHRyOiJncmFwaCIsZGF0YXM6e25vZGU6eCxlZGdlOmt9LGRhdGFzQXR0cjp7bm9kZToiZGF0YSIsZWRnZToiZWRnZURhdGEifX0pLGQudXBkYXRlKCksZH1lLmV4cG9ydHM9dX0sIjIzY2IiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJhNjkxIikscj1NYXRoLm1heCxvPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPWkoZSk7cmV0dXJuIG48MD9yKG4rdCwwKTpvKG4sdCl9fSwiMjNlMCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjc4ODciKSxvPW4oIjg5ZTMiKSxhPW4oIjM4NDIiKSxzPW4oIjY5N2UiKSxsPXMuZ2V0U2NhbGVFeHRlbnQsYz1zLm5pY2VTY2FsZUV4dGVudCx1PW4oIjIwMzkiKSxoPW4oIjhjMmEiKTtmdW5jdGlvbiBkKGUsdCxuKXt0aGlzLl9tb2RlbD1lLHRoaXMuZGltZW5zaW9ucz1bXSx0aGlzLl9pbmRpY2F0b3JBeGVzPWkubWFwKGUuZ2V0SW5kaWNhdG9yTW9kZWxzKCksKGZ1bmN0aW9uKGUsdCl7dmFyIG49ImluZGljYXRvcl8iK3QsaT1uZXcgcihuLCJsb2ciPT09ZS5nZXQoImF4aXNUeXBlIik/bmV3IGg6bmV3IG8pO3JldHVybiBpLm5hbWU9ZS5nZXQoIm5hbWUiKSxpLm1vZGVsPWUsZS5heGlzPWksdGhpcy5kaW1lbnNpb25zLnB1c2gobiksaX0pLHRoaXMpLHRoaXMucmVzaXplKGUsbiksdGhpcy5jeCx0aGlzLmN5LHRoaXMucix0aGlzLnIwLHRoaXMuc3RhcnRBbmdsZX1kLnByb3RvdHlwZS5nZXRJbmRpY2F0b3JBeGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2luZGljYXRvckF4ZXN9LGQucHJvdG90eXBlLmRhdGFUb1BvaW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faW5kaWNhdG9yQXhlc1t0XTtyZXR1cm4gdGhpcy5jb29yZFRvUG9pbnQobi5kYXRhVG9Db29yZChlKSx0KX0sZC5wcm90b3R5cGUuY29vcmRUb1BvaW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5faW5kaWNhdG9yQXhlc1t0XSxpPW4uYW5nbGUscj10aGlzLmN4K2UqTWF0aC5jb3MoaSksbz10aGlzLmN5LWUqTWF0aC5zaW4oaSk7cmV0dXJuW3Isb119LGQucHJvdG90eXBlLnBvaW50VG9EYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0tdGhpcy5jeCxuPWVbMV0tdGhpcy5jeSxpPU1hdGguc3FydCh0KnQrbipuKTt0Lz1pLG4vPWk7Zm9yKHZhciByLG89TWF0aC5hdGFuMigtbix0KSxhPTEvMCxzPS0xLGw9MDtsPHRoaXMuX2luZGljYXRvckF4ZXMubGVuZ3RoO2wrKyl7dmFyIGM9dGhpcy5faW5kaWNhdG9yQXhlc1tsXSx1PU1hdGguYWJzKG8tYy5hbmdsZSk7dTxhJiYocj1jLHM9bCxhPXUpfXJldHVybltzLCsociYmci5jb29yZFRvRGF0YShpKSldfSxkLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldCgiY2VudGVyIikscj10LmdldFdpZHRoKCksbz10LmdldEhlaWdodCgpLHM9TWF0aC5taW4ocixvKS8yO3RoaXMuY3g9YS5wYXJzZVBlcmNlbnQoblswXSxyKSx0aGlzLmN5PWEucGFyc2VQZXJjZW50KG5bMV0sbyksdGhpcy5zdGFydEFuZ2xlPWUuZ2V0KCJzdGFydEFuZ2xlIikqTWF0aC5QSS8xODA7dmFyIGw9ZS5nZXQoInJhZGl1cyIpOyJzdHJpbmciIT09dHlwZW9mIGwmJiJudW1iZXIiIT09dHlwZW9mIGx8fChsPVswLGxdKSx0aGlzLnIwPWEucGFyc2VQZXJjZW50KGxbMF0scyksdGhpcy5yPWEucGFyc2VQZXJjZW50KGxbMV0scyksaS5lYWNoKHRoaXMuX2luZGljYXRvckF4ZXMsKGZ1bmN0aW9uKGUsdCl7ZS5zZXRFeHRlbnQodGhpcy5yMCx0aGlzLnIpO3ZhciBuPXRoaXMuc3RhcnRBbmdsZSt0Kk1hdGguUEkqMi90aGlzLl9pbmRpY2F0b3JBeGVzLmxlbmd0aDtuPU1hdGguYXRhbjIoTWF0aC5zaW4obiksTWF0aC5jb3MobikpLGUuYW5nbGU9bn0pLHRoaXMpfSxkLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbmRpY2F0b3JBeGVzLHI9dGhpcy5fbW9kZWw7aS5lYWNoKG4sKGZ1bmN0aW9uKGUpe2Uuc2NhbGUuc2V0RXh0ZW50KDEvMCwtMS8wKX0pKSxlLmVhY2hTZXJpZXNCeVR5cGUoInJhZGFyIiwoZnVuY3Rpb24odCxvKXtpZigicmFkYXIiPT09dC5nZXQoImNvb3JkaW5hdGVTeXN0ZW0iKSYmZS5nZXRDb21wb25lbnQoInJhZGFyIix0LmdldCgicmFkYXJJbmRleCIpKT09PXIpe3ZhciBhPXQuZ2V0RGF0YSgpO2kuZWFjaChuLChmdW5jdGlvbihlKXtlLnNjYWxlLnVuaW9uRXh0ZW50RnJvbURhdGEoYSxhLm1hcERpbWVuc2lvbihlLmRpbSkpfSkpfX0pLHRoaXMpO3ZhciBvPXIuZ2V0KCJzcGxpdE51bWJlciIpO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApKSxuPWUvdDtyZXR1cm4gMj09PW4/bj01Om4qPTIsbip0fWkuZWFjaChuLChmdW5jdGlvbihlLHQpe3ZhciBuPWwoZS5zY2FsZSxlLm1vZGVsKS5leHRlbnQ7YyhlLnNjYWxlLGUubW9kZWwpO3ZhciBpPWUubW9kZWwscj1lLnNjYWxlLHU9aS5nZXRNaW4oKSxoPWkuZ2V0TWF4KCksZD1yLmdldEludGVydmFsKCk7aWYobnVsbCE9dSYmbnVsbCE9aClyLnNldEV4dGVudCgrdSwraCksci5zZXRJbnRlcnZhbCgoaC11KS9vKTtlbHNlIGlmKG51bGwhPXUpe2Rve3A9dStkKm8sci5zZXRFeHRlbnQoK3UscCksci5zZXRJbnRlcnZhbChkKSxkPXMoZCl9d2hpbGUocDxuWzFdJiZpc0Zpbml0ZShwKSYmaXNGaW5pdGUoblsxXSkpfWVsc2UgaWYobnVsbCE9aCl7ZG97bT1oLWQqbyxyLnNldEV4dGVudChtLCtoKSxyLnNldEludGVydmFsKGQpLGQ9cyhkKX13aGlsZShtPm5bMF0mJmlzRmluaXRlKG0pJiZpc0Zpbml0ZShuWzBdKSl9ZWxzZXt2YXIgZj1yLmdldFRpY2tzKCkubGVuZ3RoLTE7Zj5vJiYoZD1zKGQpKTt2YXIgcD1NYXRoLmNlaWwoblsxXS9kKSpkLG09YS5yb3VuZChwLWQqbyk7ci5zZXRFeHRlbnQobSxwKSxyLnNldEludGVydmFsKGQpfX0pKX0sZC5kaW1lbnNpb25zPVtdLGQuY3JlYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49W107cmV0dXJuIGUuZWFjaENvbXBvbmVudCgicmFkYXIiLChmdW5jdGlvbihpKXt2YXIgcj1uZXcgZChpLGUsdCk7bi5wdXNoKHIpLGkuY29vcmRpbmF0ZVN5c3RlbT1yfSkpLGUuZWFjaFNlcmllc0J5VHlwZSgicmFkYXIiLChmdW5jdGlvbihlKXsicmFkYXIiPT09ZS5nZXQoImNvb3JkaW5hdGVTeXN0ZW0iKSYmKGUuY29vcmRpbmF0ZVN5c3RlbT1uW2UuZ2V0KCJyYWRhckluZGV4Iil8fDBdKX0pKSxufSx1LnJlZ2lzdGVyKCJyYWRhciIsZCk7dmFyIGY9ZDtlLmV4cG9ydHM9Zn0sIjIzZTciOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJkYTg0Iikscj1uKCIwNmNmIikuZixvPW4oIjkxMTIiKSxhPW4oIjZlZWIiKSxzPW4oImNlNGUiKSxsPW4oImU4OTMiKSxjPW4oIjk0Y2EiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbix1LGgsZCxmLHAsbT1lLnRhcmdldCxnPWUuZ2xvYmFsLHY9ZS5zdGF0O2lmKHU9Zz9pOnY/aVttXXx8cyhtLHt9KTooaVttXXx8e30pLnByb3RvdHlwZSx1KWZvcihoIGluIHQpe2lmKGY9dFtoXSxlLm5vVGFyZ2V0R2V0PyhwPXIodSxoKSxkPXAmJnAudmFsdWUpOmQ9dVtoXSxuPWMoZz9oOm0rKHY/Ii4iOiIjIikraCxlLmZvcmNlZCksIW4mJnZvaWQgMCE9PWQpe2lmKHR5cGVvZiBmPT09dHlwZW9mIGQpY29udGludWU7bChmLGQpfShlLnNoYW18fGQmJmQuc2hhbSkmJm8oZiwic2hhbSIsITApLGEodSxoLGYsZSl9fX0sIjIzZWUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIik7bigiODc5ZSIpLG4oIjk3MDQiKSxuKCJkNzQ3Iik7dmFyIHI9bigiNjc1YSIpLG89bigiN2Y5NiIpLGE9bigiMjk0MyIpLHM9bigiZGU2ZSIpLGw9bigiZDM1NyIpLGM9bigiYWRkYSIpLHU9bigiNTg2NiIpLGg9bigiN2IwYyIpO2kucmVnaXN0ZXJQcm9jZXNzb3IociksaS5yZWdpc3RlclZpc3VhbChvKCJncmFwaCIsImNpcmNsZSIsbnVsbCkpLGkucmVnaXN0ZXJWaXN1YWwoYSksaS5yZWdpc3RlclZpc3VhbChzKSxpLnJlZ2lzdGVyTGF5b3V0KGwpLGkucmVnaXN0ZXJMYXlvdXQoaS5QUklPUklUWS5WSVNVQUwuUE9TVF9DSEFSVF9MQVlPVVQsYyksaS5yZWdpc3RlckxheW91dCh1KSxpLnJlZ2lzdGVyQ29vcmRpbmF0ZVN5c3RlbSgiZ3JhcGhWaWV3Iix7Y3JlYXRlOmh9KX0sIjI0MWMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJjYTg0Iikscj1uKCI3ODM5Iiksbz1yLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gaShlLG8pfX0sMjQ0NDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbih0KXt2YXIgaT1uKCJjNTMyIikscj1uKCJjOGFmIiksbz17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIGEoZSx0KXshaS5pc1VuZGVmaW5lZChlKSYmaS5pc1VuZGVmaW5lZChlWyJDb250ZW50LVR5cGUiXSkmJihlWyJDb250ZW50LVR5cGUiXT10KX1mdW5jdGlvbiBzKCl7dmFyIGU7cmV0dXJuKCJ1bmRlZmluZWQiIT09dHlwZW9mIFhNTEh0dHBSZXF1ZXN0fHwidW5kZWZpbmVkIiE9PXR5cGVvZiB0JiYiW29iamVjdCBwcm9jZXNzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpJiYoZT1uKCJiNTBkIikpLGV9dmFyIGw9e2FkYXB0ZXI6cygpLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHIodCwiQWNjZXB0Iikscih0LCJDb250ZW50LVR5cGUiKSxpLmlzRm9ybURhdGEoZSl8fGkuaXNBcnJheUJ1ZmZlcihlKXx8aS5pc0J1ZmZlcihlKXx8aS5pc1N0cmVhbShlKXx8aS5pc0ZpbGUoZSl8fGkuaXNCbG9iKGUpP2U6aS5pc0FycmF5QnVmZmVyVmlldyhlKT9lLmJ1ZmZlcjppLmlzVVJMU2VhcmNoUGFyYW1zKGUpPyhhKHQsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiksZS50b1N0cmluZygpKTppLmlzT2JqZWN0KGUpPyhhKHQsImFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCIpLEpTT04uc3RyaW5naWZ5KGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUpdHJ5e2U9SlNPTi5wYXJzZShlKX1jYXRjaCh0KXt9cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLChmdW5jdGlvbihlKXtsLmhlYWRlcnNbZV09e319KSksaS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sKGZ1bmN0aW9uKGUpe2wuaGVhZGVyc1tlXT1pLm1lcmdlKG8pfSkpLGUuZXhwb3J0cz1sfSkuY2FsbCh0aGlzLG4oIjQzNjIiKSl9LDI0NDk6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjRlMDgiKSxyPShpLl9fREVWX18sbigiM2ViYSIpKSxvPW4oIjZkOGIiKSxhPW4oIjIyZDEiKSxzPW4oImUwZDMiKSxsPW4oImVkYTIiKSxjPW4oIjM4YTIiKSx1PWwuYWRkQ29tbWFzLGg9bC5lbmNvZGVIVE1MO2Z1bmN0aW9uIGQoZSl7cy5kZWZhdWx0RW1waGFzaXMoZSwibGFiZWwiLFsic2hvdyJdKX12YXIgZj1yLmV4dGVuZENvbXBvbmVudE1vZGVsKHt0eXBlOiJtYXJrZXIiLGRlcGVuZGVuY2llczpbInNlcmllcyIsImdyaWQiLCJwb2xhciIsImdlbyJdLGluaXQ6ZnVuY3Rpb24oZSx0LG4pe3RoaXMubWVyZ2VEZWZhdWx0QW5kVGhlbWUoZSxuKSx0aGlzLl9tZXJnZU9wdGlvbihlLG4sITEsITApfSxpc0FuaW1hdGlvbkVuYWJsZWQ6ZnVuY3Rpb24oKXtpZihhLm5vZGUpcmV0dXJuITE7dmFyIGU9dGhpcy5fX2hvc3RTZXJpZXM7cmV0dXJuIHRoaXMuZ2V0U2hhbGxvdygiYW5pbWF0aW9uIikmJmUmJmUuaXNBbmltYXRpb25FbmFibGVkKCl9LG1lcmdlT3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbWVyZ2VPcHRpb24oZSx0LCExLCExKX0sX21lcmdlT3B0aW9uOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXRoaXMuY29uc3RydWN0b3IsYT10aGlzLm1haW5UeXBlKyJNb2RlbCI7bnx8dC5lYWNoU2VyaWVzKChmdW5jdGlvbihlKXt2YXIgbj1lLmdldCh0aGlzLm1haW5UeXBlLCEwKSxzPWVbYV07biYmbi5kYXRhPyhzP3MuX21lcmdlT3B0aW9uKG4sdCwhMCk6KGkmJmQobiksby5lYWNoKG4uZGF0YSwoZnVuY3Rpb24oZSl7ZSBpbnN0YW5jZW9mIEFycmF5PyhkKGVbMF0pLGQoZVsxXSkpOmQoZSl9KSkscz1uZXcgcihuLHRoaXMsdCksby5leHRlbmQocyx7bWFpblR5cGU6dGhpcy5tYWluVHlwZSxzZXJpZXNJbmRleDplLnNlcmllc0luZGV4LG5hbWU6ZS5uYW1lLGNyZWF0ZWRCeVNlbGY6ITB9KSxzLl9faG9zdFNlcmllcz1lKSxlW2FdPXMpOmVbYV09bnVsbH0pLHRoaXMpfSxmb3JtYXRUb29sdGlwOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXRoaXMuZ2V0RGF0YSgpLGE9dGhpcy5nZXRSYXdWYWx1ZShlKSxzPW8uaXNBcnJheShhKT9vLm1hcChhLHUpLmpvaW4oIiwgIik6dShhKSxsPXIuZ2V0TmFtZShlKSxjPWgodGhpcy5uYW1lKSxkPSJodG1sIj09PWk/Ijxici8+IjoiXG4iO3JldHVybihudWxsIT1hfHxsKSYmKGMrPWQpLGwmJihjKz1oKGwpLG51bGwhPWEmJihjKz0iIDogIikpLG51bGwhPWEmJihjKz1oKHMpKSxjfSxnZXREYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RhdGF9LHNldERhdGE6ZnVuY3Rpb24oZSl7dGhpcy5fZGF0YT1lfX0pO28ubWl4aW4oZixjKTt2YXIgcD1mO2UuZXhwb3J0cz1wfSwiMjRiOSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjRlMDgiKSxyPShpLl9fREVWX18sbigiZjkzNCIpKSxvPW4oIjM4NDIiKSxhPW8ucGFyc2VQZXJjZW50LHM9by5saW5lYXJNYXA7ZnVuY3Rpb24gbChlLHQpe3JldHVybiByLmdldExheW91dFJlY3QoZS5nZXRCb3hMYXlvdXRQYXJhbXMoKSx7d2lkdGg6dC5nZXRXaWR0aCgpLGhlaWdodDp0LmdldEhlaWdodCgpfSl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgbj1lLm1hcERpbWVuc2lvbigidmFsdWUiKSxpPWUubWFwQXJyYXkobiwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSkscj1bXSxvPSJhc2NlbmRpbmciPT09dCxhPTAscz1lLmNvdW50KCk7YTxzO2ErKylyW2FdPWE7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiB0P3Iuc29ydCh0KToibm9uZSIhPT10JiZyLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8/aVtlXS1pW3RdOmlbdF0taVtlXX0pKSxyfWZ1bmN0aW9uIHUoZSl7ZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbixpLHIsbyxhPWUuZ2V0SXRlbU1vZGVsKHQpLHM9YS5nZXRNb2RlbCgibGFiZWwiKSxsPXMuZ2V0KCJwb3NpdGlvbiIpLGM9YS5nZXQoIm9yaWVudCIpLHU9YS5nZXRNb2RlbCgibGFiZWxMaW5lIiksaD1lLmdldEl0ZW1MYXlvdXQodCksZD1oLnBvaW50cyxmPSJpbm5lciI9PT1sfHwiaW5zaWRlIj09PWx8fCJjZW50ZXIiPT09bHx8Imluc2lkZUxlZnQiPT09bHx8Imluc2lkZVJpZ2h0Ij09PWw7aWYoZikiaW5zaWRlTGVmdCI9PT1sPyhpPShkWzBdWzBdK2RbM11bMF0pLzIrNSxyPShkWzBdWzFdK2RbM11bMV0pLzIsbj0ibGVmdCIpOiJpbnNpZGVSaWdodCI9PT1sPyhpPShkWzFdWzBdK2RbMl1bMF0pLzItNSxyPShkWzFdWzFdK2RbMl1bMV0pLzIsbj0icmlnaHQiKTooaT0oZFswXVswXStkWzFdWzBdK2RbMl1bMF0rZFszXVswXSkvNCxyPShkWzBdWzFdK2RbMV1bMV0rZFsyXVsxXStkWzNdWzFdKS80LG49ImNlbnRlciIpLG89W1tpLHJdLFtpLHJdXTtlbHNle3ZhciBwLG0sZyx2LHk9dS5nZXQoImxlbmd0aCIpOyJsZWZ0Ij09PWw/KHA9KGRbM11bMF0rZFswXVswXSkvMixtPShkWzNdWzFdK2RbMF1bMV0pLzIsZz1wLXksaT1nLTUsbj0icmlnaHQiKToicmlnaHQiPT09bD8ocD0oZFsxXVswXStkWzJdWzBdKS8yLG09KGRbMV1bMV0rZFsyXVsxXSkvMixnPXAreSxpPWcrNSxuPSJsZWZ0Iik6InRvcCI9PT1sPyhwPShkWzNdWzBdK2RbMF1bMF0pLzIsbT0oZFszXVsxXStkWzBdWzFdKS8yLHY9bS15LHI9di01LG49ImNlbnRlciIpOiJib3R0b20iPT09bD8ocD0oZFsxXVswXStkWzJdWzBdKS8yLG09KGRbMV1bMV0rZFsyXVsxXSkvMix2PW0reSxyPXYrNSxuPSJjZW50ZXIiKToicmlnaHRUb3AiPT09bD8ocD0iaG9yaXpvbnRhbCI9PT1jP2RbM11bMF06ZFsxXVswXSxtPSJob3Jpem9udGFsIj09PWM/ZFszXVsxXTpkWzFdWzFdLCJob3Jpem9udGFsIj09PWM/KHY9bS15LHI9di01LG49ImNlbnRlciIpOihnPXAreSxpPWcrNSxuPSJ0b3AiKSk6InJpZ2h0Qm90dG9tIj09PWw/KHA9ZFsyXVswXSxtPWRbMl1bMV0sImhvcml6b250YWwiPT09Yz8odj1tK3kscj12KzUsbj0iY2VudGVyIik6KGc9cCt5LGk9Zys1LG49ImJvdHRvbSIpKToibGVmdFRvcCI9PT1sPyhwPWRbMF1bMF0sbT0iaG9yaXpvbnRhbCI9PT1jP2RbMF1bMV06ZFsxXVsxXSwiaG9yaXpvbnRhbCI9PT1jPyh2PW0teSxyPXYtNSxuPSJjZW50ZXIiKTooZz1wLXksaT1nLTUsbj0icmlnaHQiKSk6ImxlZnRCb3R0b20iPT09bD8ocD0iaG9yaXpvbnRhbCI9PT1jP2RbMV1bMF06ZFszXVswXSxtPSJob3Jpem9udGFsIj09PWM/ZFsxXVsxXTpkWzJdWzFdLCJob3Jpem9udGFsIj09PWM/KHY9bSt5LHI9dis1LG49ImNlbnRlciIpOihnPXAteSxpPWctNSxuPSJyaWdodCIpKToocD0oZFsxXVswXStkWzJdWzBdKS8yLG09KGRbMV1bMV0rZFsyXVsxXSkvMiwiaG9yaXpvbnRhbCI9PT1jPyh2PW0reSxyPXYrNSxuPSJjZW50ZXIiKTooZz1wK3ksaT1nKzUsbj0ibGVmdCIpKSwiaG9yaXpvbnRhbCI9PT1jPyhnPXAsaT1nKToodj1tLHI9diksbz1bW3AsbV0sW2csdl1dfWgubGFiZWw9e2xpbmVQb2ludHM6byx4OmkseTpyLHZlcnRpY2FsQWxpZ246Im1pZGRsZSIsdGV4dEFsaWduOm4saW5zaWRlOmZ9fSkpfWZ1bmN0aW9uIGgoZSx0LG4pe2UuZWFjaFNlcmllc0J5VHlwZSgiZnVubmVsIiwoZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXREYXRhKCksaT1uLm1hcERpbWVuc2lvbigidmFsdWUiKSxyPWUuZ2V0KCJzb3J0Iiksbz1sKGUsdCksaD1jKG4sciksZD1lLmdldCgib3JpZW50IiksZj1vLndpZHRoLHA9by5oZWlnaHQsbT1vLngsZz1vLnksdj0iaG9yaXpvbnRhbCI9PT1kP1thKGUuZ2V0KCJtaW5TaXplIikscCksYShlLmdldCgibWF4U2l6ZSIpLHApXTpbYShlLmdldCgibWluU2l6ZSIpLGYpLGEoZS5nZXQoIm1heFNpemUiKSxmKV0seT1uLmdldERhdGFFeHRlbnQoaSksYj1lLmdldCgibWluIikseD1lLmdldCgibWF4Iik7bnVsbD09YiYmKGI9TWF0aC5taW4oeVswXSwwKSksbnVsbD09eCYmKHg9eVsxXSk7dmFyIF89ZS5nZXQoImZ1bm5lbEFsaWduIiksdz1lLmdldCgiZ2FwIiksUz0iaG9yaXpvbnRhbCI9PT1kP2Y6cCxDPShTLXcqKG4uY291bnQoKS0xKSkvbi5jb3VudCgpLGs9ZnVuY3Rpb24oZSx0KXtpZigiaG9yaXpvbnRhbCI9PT1kKXt2YXIgcixvPW4uZ2V0KGksZSl8fDAsYT1zKG8sW2IseF0sdiwhMCk7c3dpdGNoKF8pe2Nhc2UidG9wIjpyPWc7YnJlYWs7Y2FzZSJjZW50ZXIiOnI9ZysocC1hKS8yO2JyZWFrO2Nhc2UiYm90dG9tIjpyPWcrKHAtYSk7YnJlYWt9cmV0dXJuW1t0LHJdLFt0LHIrYV1dfW89bi5nZXQoaSxlKXx8MDt2YXIgbCxjPXMobyxbYix4XSx2LCEwKTtzd2l0Y2goXyl7Y2FzZSJsZWZ0IjpsPW07YnJlYWs7Y2FzZSJjZW50ZXIiOmw9bSsoZi1jKS8yO2JyZWFrO2Nhc2UicmlnaHQiOmw9bStmLWM7YnJlYWt9cmV0dXJuW1tsLHRdLFtsK2MsdF1dfTsiYXNjZW5kaW5nIj09PXImJihDPS1DLHc9LXcsImhvcml6b250YWwiPT09ZD9tKz1mOmcrPXAsaD1oLnJldmVyc2UoKSk7Zm9yKHZhciBUPTA7VDxoLmxlbmd0aDtUKyspe3ZhciBNPWhbVF0sRT1oW1QrMV0sST1uLmdldEl0ZW1Nb2RlbChNKTtpZigiaG9yaXpvbnRhbCI9PT1kKXt2YXIgRD1JLmdldCgiaXRlbVN0eWxlLndpZHRoIik7bnVsbD09RD9EPUM6KEQ9YShELGYpLCJhc2NlbmRpbmciPT09ciYmKEQ9LUQpKTt2YXIgQT1rKE0sbSksTz1rKEUsbStEKTttKz1EK3csbi5zZXRJdGVtTGF5b3V0KE0se3BvaW50czpBLmNvbmNhdChPLnNsaWNlKCkucmV2ZXJzZSgpKX0pfWVsc2V7dmFyIFA9SS5nZXQoIml0ZW1TdHlsZS5oZWlnaHQiKTtudWxsPT1QP1A9QzooUD1hKFAscCksImFzY2VuZGluZyI9PT1yJiYoUD0tUCkpO0E9ayhNLCJob3Jpem9udGFsIj09PWQ/bTpnKSxPPWsoRSwiaG9yaXpvbnRhbCI9PT1kP20rRDpnK1ApO2crPVArdyxuLnNldEl0ZW1MYXlvdXQoTSx7cG9pbnRzOkEuY29uY2F0KE8uc2xpY2UoKS5yZXZlcnNlKCkpfSl9fXUobil9KSl9ZS5leHBvcnRzPWh9LDI1MzI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCIyM2U3Iikscj1uKCI1YTM0Iiksbz1uKCIxZDgwIiksYT1uKCJhYjEzIik7aSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDohYSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhflN0cmluZyhvKHRoaXMpKS5pbmRleE9mKHIoZSksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSwiMjU1YyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKSxyPW4oImQ0ZDEiKSxvPXIuUG9seWdvbixhPW4oIjIzMDYiKSxzPW4oIjZkOGIiKSxsPXMuYmluZCxjPXMuZXh0ZW5kLHU9bigiODBmMCIpLGg9aS5leHRlbmRDaGFydFZpZXcoe3R5cGU6InRoZW1lUml2ZXIiLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLl9sYXllcnM9W119LHJlbmRlcjpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5nZXREYXRhKCkscj10aGlzLmdyb3VwLHM9ZS5nZXRMYXllclNlcmllcygpLGg9aS5nZXRMYXlvdXQoImxheW91dEluZm8iKSxmPWgucmVjdCxwPWguYm91bmRhcnlHYXA7ZnVuY3Rpb24gbShlKXtyZXR1cm4gZS5uYW1lfXIuYXR0cigicG9zaXRpb24iLFswLGYueStwWzBdXSk7dmFyIGc9bmV3IHUodGhpcy5fbGF5ZXJzU2VyaWVzfHxbXSxzLG0sbSksdj17fTtmdW5jdGlvbiB5KHQsbixsKXt2YXIgdT10aGlzLl9sYXllcnM7aWYoInJlbW92ZSIhPT10KXtmb3IodmFyIGgsZixwLG09W10sZz1bXSx5PXNbbl0uaW5kaWNlcyxiPTA7Yjx5Lmxlbmd0aDtiKyspe3ZhciB4PWkuZ2V0SXRlbUxheW91dCh5W2JdKSxfPXgueCx3PXgueTAsUz14Lnk7bS5wdXNoKFtfLHddKSxnLnB1c2goW18sdytTXSksaD1pLmdldEl0ZW1WaXN1YWwoeVtiXSwiY29sb3IiKX12YXIgQz1pLmdldEl0ZW1MYXlvdXQoeVswXSksaz1pLmdldEl0ZW1Nb2RlbCh5W2ItMV0pLFQ9ay5nZXRNb2RlbCgibGFiZWwiKSxNPVQuZ2V0KCJtYXJnaW4iKTtpZigiYWRkIj09PXQpe3ZhciBFPXZbbl09bmV3IGEuR3JvdXA7Zj1uZXcgbyh7c2hhcGU6e3BvaW50czptLHN0YWNrZWRPblBvaW50czpnLHNtb290aDouNCxzdGFja2VkT25TbW9vdGg6LjQsc21vb3RoQ29uc3RyYWludDohMX0sejI6MH0pLHA9bmV3IGEuVGV4dCh7c3R5bGU6e3g6Qy54LU0seTpDLnkwK0MueS8yfX0pLEUuYWRkKGYpLEUuYWRkKHApLHIuYWRkKEUpLGYuc2V0Q2xpcFBhdGgoZChmLmdldEJvdW5kaW5nUmVjdCgpLGUsKGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGlwUGF0aCgpfSkpKX1lbHNle0U9dVtsXTtmPUUuY2hpbGRBdCgwKSxwPUUuY2hpbGRBdCgxKSxyLmFkZChFKSx2W25dPUUsYS51cGRhdGVQcm9wcyhmLHtzaGFwZTp7cG9pbnRzOm0sc3RhY2tlZE9uUG9pbnRzOmd9fSxlKSxhLnVwZGF0ZVByb3BzKHAse3N0eWxlOnt4OkMueC1NLHk6Qy55MCtDLnkvMn19LGUpfXZhciBJPWsuZ2V0TW9kZWwoImVtcGhhc2lzLml0ZW1TdHlsZSIpLEQ9ay5nZXRNb2RlbCgiaXRlbVN0eWxlIik7YS5zZXRUZXh0U3R5bGUocC5zdHlsZSxULHt0ZXh0OlQuZ2V0KCJzaG93Iik/ZS5nZXRGb3JtYXR0ZWRMYWJlbCh5W2ItMV0sIm5vcm1hbCIpfHxpLmdldE5hbWUoeVtiLTFdKTpudWxsLHRleHRWZXJ0aWNhbEFsaWduOiJtaWRkbGUifSksZi5zZXRTdHlsZShjKHtmaWxsOmh9LEQuZ2V0SXRlbVN0eWxlKFsiY29sb3IiXSkpKSxhLnNldEhvdmVyU3R5bGUoZixJLmdldEl0ZW1TdHlsZSgpKX1lbHNlIHIucmVtb3ZlKHVbbl0pfWcuYWRkKGwoeSx0aGlzLCJhZGQiKSkudXBkYXRlKGwoeSx0aGlzLCJ1cGRhdGUiKSkucmVtb3ZlKGwoeSx0aGlzLCJyZW1vdmUiKSkuZXhlY3V0ZSgpLHRoaXMuX2xheWVyc1Nlcmllcz1zLHRoaXMuX2xheWVycz12fSxkaXNwb3NlOmZ1bmN0aW9uKCl7fX0pO2Z1bmN0aW9uIGQoZSx0LG4pe3ZhciBpPW5ldyBhLlJlY3Qoe3NoYXBlOnt4OmUueC0xMCx5OmUueS0xMCx3aWR0aDowLGhlaWdodDplLmhlaWdodCsyMH19KTtyZXR1cm4gYS5pbml0UHJvcHMoaSx7c2hhcGU6e3dpZHRoOmUud2lkdGgrMjAsaGVpZ2h0OmUuaGVpZ2h0KzIwfX0sdCxuKSxpfWUuZXhwb3J0cz1ofSwiMjVmMCI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCI2ZWViIikscj1uKCI4MjVhIiksbz1uKCJkMDM5IiksYT1uKCJhZDZkIikscz0idG9TdHJpbmciLGw9UmVnRXhwLnByb3RvdHlwZSxjPWxbc10sdT1vKChmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9Yy5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSkpLGg9Yy5uYW1lIT1zOyh1fHxoKSYmaShSZWdFeHAucHJvdG90eXBlLHMsKGZ1bmN0aW9uKCl7dmFyIGU9cih0aGlzKSx0PVN0cmluZyhlLnNvdXJjZSksbj1lLmZsYWdzLGk9U3RyaW5nKHZvaWQgMD09PW4mJmUgaW5zdGFuY2VvZiBSZWdFeHAmJiEoImZsYWdzImluIGwpP2EuY2FsbChlKTpuKTtyZXR1cm4iLyIrdCsiLyIraX0pLHt1bnNhZmU6ITB9KX0sMjYyNjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImQwNjYiKSxyPW4oIjliZjIiKSxvPW4oImI2MjIiKSxhPW4oIjgzYWIiKSxzPW8oInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKSxuPXIuZjthJiZ0JiYhdFtzXSYmbih0LHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LCIyNmRkIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIjZmNGYiKSxyPW4oIjEwZGIiKSxvPW4oIjkyZjAiKSxhPXt9O24oIjA1MWIiKShhLG4oImNjMTUiKSgiaXRlcmF0b3IiKSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UucHJvdG90eXBlPWkoYSx7bmV4dDpyKDEsbil9KSxvKGUsdCsiIEl0ZXJhdG9yIil9fSwiMjZlMSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oImUwZDMiKSxvPWkuZWFjaCxhPWkuaXNPYmplY3Qscz1bImFyZWFTdHlsZSIsImxpbmVTdHlsZSIsIm5vZGVTdHlsZSIsImxpbmtTdHlsZSIsImNob3JkU3R5bGUiLCJsYWJlbCIsImxhYmVsTGluZSJdO2Z1bmN0aW9uIGwoZSl7dmFyIHQ9ZSYmZS5pdGVtU3R5bGU7aWYodClmb3IodmFyIG49MCxyPXMubGVuZ3RoO248cjtuKyspe3ZhciBvPXNbbl0sYT10Lm5vcm1hbCxsPXQuZW1waGFzaXM7YSYmYVtvXSYmKGVbb109ZVtvXXx8e30sZVtvXS5ub3JtYWw/aS5tZXJnZShlW29dLm5vcm1hbCxhW29dKTplW29dLm5vcm1hbD1hW29dLGFbb109bnVsbCksbCYmbFtvXSYmKGVbb109ZVtvXXx8e30sZVtvXS5lbXBoYXNpcz9pLm1lcmdlKGVbb10uZW1waGFzaXMsbFtvXSk6ZVtvXS5lbXBoYXNpcz1sW29dLGxbb109bnVsbCl9fWZ1bmN0aW9uIGMoZSx0LG4pe2lmKGUmJmVbdF0mJihlW3RdLm5vcm1hbHx8ZVt0XS5lbXBoYXNpcykpe3ZhciByPWVbdF0ubm9ybWFsLG89ZVt0XS5lbXBoYXNpcztyJiYobj8oZVt0XS5ub3JtYWw9ZVt0XS5lbXBoYXNpcz1udWxsLGkuZGVmYXVsdHMoZVt0XSxyKSk6ZVt0XT1yKSxvJiYoZS5lbXBoYXNpcz1lLmVtcGhhc2lzfHx7fSxlLmVtcGhhc2lzW3RdPW8pfX1mdW5jdGlvbiB1KGUpe2MoZSwiaXRlbVN0eWxlIiksYyhlLCJsaW5lU3R5bGUiKSxjKGUsImFyZWFTdHlsZSIpLGMoZSwibGFiZWwiKSxjKGUsImxhYmVsTGluZSIpLGMoZSwidXBwZXJMYWJlbCIpLGMoZSwiZWRnZUxhYmVsIil9ZnVuY3Rpb24gaChlLHQpe3ZhciBuPWEoZSkmJmVbdF0saT1hKG4pJiZuLnRleHRTdHlsZTtpZihpKWZvcih2YXIgbz0wLHM9ci5URVhUX1NUWUxFX09QVElPTlMubGVuZ3RoO288cztvKyspe3Q9ci5URVhUX1NUWUxFX09QVElPTlNbb107aS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5bdF09aVt0XSl9fWZ1bmN0aW9uIGQoZSl7ZSYmKHUoZSksaChlLCJsYWJlbCIpLGUuZW1waGFzaXMmJmgoZS5lbXBoYXNpcywibGFiZWwiKSl9ZnVuY3Rpb24gZihlKXtpZihhKGUpKXtsKGUpLHUoZSksaChlLCJsYWJlbCIpLGgoZSwidXBwZXJMYWJlbCIpLGgoZSwiZWRnZUxhYmVsIiksZS5lbXBoYXNpcyYmKGgoZS5lbXBoYXNpcywibGFiZWwiKSxoKGUuZW1waGFzaXMsInVwcGVyTGFiZWwiKSxoKGUuZW1waGFzaXMsImVkZ2VMYWJlbCIpKTt2YXIgdD1lLm1hcmtQb2ludDt0JiYobCh0KSxkKHQpKTt2YXIgbj1lLm1hcmtMaW5lO24mJihsKG4pLGQobikpO3ZhciByPWUubWFya0FyZWE7ciYmZChyKTt2YXIgbz1lLmRhdGE7aWYoImdyYXBoIj09PWUudHlwZSl7bz1vfHxlLm5vZGVzO3ZhciBzPWUubGlua3N8fGUuZWRnZXM7aWYocyYmIWkuaXNUeXBlZEFycmF5KHMpKWZvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWQoc1tmXSk7aS5lYWNoKGUuY2F0ZWdvcmllcywoZnVuY3Rpb24oZSl7dShlKX0pKX1pZihvJiYhaS5pc1R5cGVkQXJyYXkobykpZm9yKGY9MDtmPG8ubGVuZ3RoO2YrKylkKG9bZl0pO3Q9ZS5tYXJrUG9pbnQ7aWYodCYmdC5kYXRhKXt2YXIgcD10LmRhdGE7Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKylkKHBbZl0pfW49ZS5tYXJrTGluZTtpZihuJiZuLmRhdGEpe3ZhciBtPW4uZGF0YTtmb3IoZj0wO2Y8bS5sZW5ndGg7ZisrKWkuaXNBcnJheShtW2ZdKT8oZChtW2ZdWzBdKSxkKG1bZl1bMV0pKTpkKG1bZl0pfSJnYXVnZSI9PT1lLnR5cGU/KGgoZSwiYXhpc0xhYmVsIiksaChlLCJ0aXRsZSIpLGgoZSwiZGV0YWlsIikpOiJ0cmVlbWFwIj09PWUudHlwZT8oYyhlLmJyZWFkY3J1bWIsIml0ZW1TdHlsZSIpLGkuZWFjaChlLmxldmVscywoZnVuY3Rpb24oZSl7dShlKX0pKSk6InRyZWUiPT09ZS50eXBlJiZ1KGUubGVhdmVzKX19ZnVuY3Rpb24gcChlKXtyZXR1cm4gaS5pc0FycmF5KGUpP2U6ZT9bZV06W119ZnVuY3Rpb24gbShlKXtyZXR1cm4oaS5pc0FycmF5KGUpP2VbMF06ZSl8fHt9fWZ1bmN0aW9uIGcoZSx0KXtvKHAoZS5zZXJpZXMpLChmdW5jdGlvbihlKXthKGUpJiZmKGUpfSkpO3ZhciBuPVsieEF4aXMiLCJ5QXhpcyIsInJhZGl1c0F4aXMiLCJhbmdsZUF4aXMiLCJzaW5nbGVBeGlzIiwicGFyYWxsZWxBeGlzIiwicmFkYXIiXTt0JiZuLnB1c2goInZhbHVlQXhpcyIsImNhdGVnb3J5QXhpcyIsImxvZ0F4aXMiLCJ0aW1lQXhpcyIpLG8obiwoZnVuY3Rpb24odCl7byhwKGVbdF0pLChmdW5jdGlvbihlKXtlJiYoaChlLCJheGlzTGFiZWwiKSxoKGUuYXhpc1BvaW50ZXIsImxhYmVsIikpfSkpfSkpLG8ocChlLnBhcmFsbGVsKSwoZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5wYXJhbGxlbEF4aXNEZWZhdWx0O2godCwiYXhpc0xhYmVsIiksaCh0JiZ0LmF4aXNQb2ludGVyLCJsYWJlbCIpfSkpLG8ocChlLmNhbGVuZGFyKSwoZnVuY3Rpb24oZSl7YyhlLCJpdGVtU3R5bGUiKSxoKGUsImRheUxhYmVsIiksaChlLCJtb250aExhYmVsIiksaChlLCJ5ZWFyTGFiZWwiKX0pKSxvKHAoZS5yYWRhciksKGZ1bmN0aW9uKGUpe2goZSwibmFtZSIpfSkpLG8ocChlLmdlbyksKGZ1bmN0aW9uKGUpe2EoZSkmJihkKGUpLG8ocChlLnJlZ2lvbnMpLChmdW5jdGlvbihlKXtkKGUpfSkpKX0pKSxvKHAoZS50aW1lbGluZSksKGZ1bmN0aW9uKGUpe2QoZSksYyhlLCJsYWJlbCIpLGMoZSwiaXRlbVN0eWxlIiksYyhlLCJjb250cm9sU3R5bGUiLCEwKTt2YXIgdD1lLmRhdGE7aS5pc0FycmF5KHQpJiZpLmVhY2godCwoZnVuY3Rpb24oZSl7aS5pc09iamVjdChlKSYmKGMoZSwibGFiZWwiKSxjKGUsIml0ZW1TdHlsZSIpKX0pKX0pKSxvKHAoZS50b29sYm94KSwoZnVuY3Rpb24oZSl7YyhlLCJpY29uU3R5bGUiKSxvKGUuZmVhdHVyZSwoZnVuY3Rpb24oZSl7YyhlLCJpY29uU3R5bGUiKX0pKX0pKSxoKG0oZS5heGlzUG9pbnRlciksImxhYmVsIiksaChtKGUudG9vbHRpcCkuYXhpc1BvaW50ZXIsImxhYmVsIil9ZS5leHBvcnRzPWd9LCIyODJiIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpO2Z1bmN0aW9uIHIoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XVsxXXx8KGVbdF1bMV09ZVt0XVswXSk7cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtmb3IodmFyIG89e30sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgcz1lW2FdWzFdO2lmKCEobiYmaS5pbmRleE9mKG4scyk+PTB8fHImJmkuaW5kZXhPZihyLHMpPDApKXt2YXIgbD10LmdldFNoYWxsb3cocyk7bnVsbCE9bCYmKG9bZVthXVswXV09bCl9fXJldHVybiBvfX1lLmV4cG9ydHM9cn0sMjg3NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSx0LG4saSxyLG8sYSxzKXt2YXIgbCxjPSJmdW5jdGlvbiI9PT10eXBlb2YgZT9lLm9wdGlvbnM6ZTtpZih0JiYoYy5yZW5kZXI9dCxjLnN0YXRpY1JlbmRlckZucz1uLGMuX2NvbXBpbGVkPSEwKSxpJiYoYy5mdW5jdGlvbmFsPSEwKSxvJiYoYy5fc2NvcGVJZD0iZGF0YS12LSIrbyksYT8obD1mdW5jdGlvbihlKXtlPWV8fHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fHx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuJHZub2RlJiZ0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCxlfHwidW5kZWZpbmVkIj09PXR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9ffHwoZT1fX1ZVRV9TU1JfQ09OVEVYVF9fKSxyJiZyLmNhbGwodGhpcyxlKSxlJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cyYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKGEpfSxjLl9zc3JSZWdpc3Rlcj1sKTpyJiYobD1zP2Z1bmN0aW9uKCl7ci5jYWxsKHRoaXMsKGMuZnVuY3Rpb25hbD90aGlzLnBhcmVudDp0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KX06ciksbClpZihjLmZ1bmN0aW9uYWwpe2MuX2luamVjdFN0eWxlcz1sO3ZhciB1PWMucmVuZGVyO2MucmVuZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuY2FsbCh0KSx1KGUsdCl9fWVsc2V7dmFyIGg9Yy5iZWZvcmVDcmVhdGU7Yy5iZWZvcmVDcmVhdGU9aD9bXS5jb25jYXQoaCxsKTpbbF19cmV0dXJue2V4cG9ydHM6ZSxvcHRpb25zOmN9fW4uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX0sIjI5MmUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzODQyIikscj1pLnBhcnNlUGVyY2VudCxvPWkubGluZWFyTWFwLGE9bigiZjkzNCIpLHM9bigiYmI3MCIpLGw9bigiNmQ4YiIpLGM9MipNYXRoLlBJLHU9TWF0aC5QSS8xODA7ZnVuY3Rpb24gaChlLHQpe3JldHVybiBhLmdldExheW91dFJlY3QoZS5nZXRCb3hMYXlvdXRQYXJhbXMoKSx7d2lkdGg6dC5nZXRXaWR0aCgpLGhlaWdodDp0LmdldEhlaWdodCgpfSl9ZnVuY3Rpb24gZChlLHQsbixpKXt0LmVhY2hTZXJpZXNCeVR5cGUoZSwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXRhKCksaT10Lm1hcERpbWVuc2lvbigidmFsdWUiKSxhPWgoZSxuKSxkPWUuZ2V0KCJjZW50ZXIiKSxmPWUuZ2V0KCJyYWRpdXMiKTtsLmlzQXJyYXkoZil8fChmPVswLGZdKSxsLmlzQXJyYXkoZCl8fChkPVtkLGRdKTt2YXIgcD1yKGEud2lkdGgsbi5nZXRXaWR0aCgpKSxtPXIoYS5oZWlnaHQsbi5nZXRIZWlnaHQoKSksZz1NYXRoLm1pbihwLG0pLHY9cihkWzBdLHApK2EueCx5PXIoZFsxXSxtKSthLnksYj1yKGZbMF0sZy8yKSx4PXIoZlsxXSxnLzIpLF89LWUuZ2V0KCJzdGFydEFuZ2xlIikqdSx3PWUuZ2V0KCJtaW5BbmdsZSIpKnUsUz0wO3QuZWFjaChpLChmdW5jdGlvbihlKXshaXNOYU4oZSkmJlMrK30pKTt2YXIgQz10LmdldFN1bShpKSxrPU1hdGguUEkvKEN8fFMpKjIsVD1lLmdldCgiY2xvY2t3aXNlIiksTT1lLmdldCgicm9zZVR5cGUiKSxFPWUuZ2V0KCJzdGlsbFNob3daZXJvU3VtIiksST10LmdldERhdGFFeHRlbnQoaSk7SVswXT0wO3ZhciBEPWMsQT0wLE89XyxQPVQ/MTotMTtpZih0LmVhY2goaSwoZnVuY3Rpb24oZSxuKXt2YXIgaTtpZihpc05hTihlKSl0LnNldEl0ZW1MYXlvdXQobix7YW5nbGU6TmFOLHN0YXJ0QW5nbGU6TmFOLGVuZEFuZ2xlOk5hTixjbG9ja3dpc2U6VCxjeDp2LGN5OnkscjA6YixyOk0/TmFOOngsdmlld1JlY3Q6YX0pO2Vsc2V7aT0iYXJlYSIhPT1NPzA9PT1DJiZFP2s6ZSprOmMvUyxpPHc/KGk9dyxELT13KTpBKz1lO3ZhciByPU8rUCppO3Quc2V0SXRlbUxheW91dChuLHthbmdsZTppLHN0YXJ0QW5nbGU6TyxlbmRBbmdsZTpyLGNsb2Nrd2lzZTpULGN4OnYsY3k6eSxyMDpiLHI6TT9vKGUsSSxbYix4XSk6eCx2aWV3UmVjdDphfSksTz1yfX0pKSxEPGMmJlMpaWYoRDw9LjAwMSl7dmFyIEw9Yy9TO3QuZWFjaChpLChmdW5jdGlvbihlLG4pe2lmKCFpc05hTihlKSl7dmFyIGk9dC5nZXRJdGVtTGF5b3V0KG4pO2kuYW5nbGU9TCxpLnN0YXJ0QW5nbGU9XytQKm4qTCxpLmVuZEFuZ2xlPV8rUCoobisxKSpMfX0pKX1lbHNlIGs9RC9BLE89Xyx0LmVhY2goaSwoZnVuY3Rpb24oZSxuKXtpZighaXNOYU4oZSkpe3ZhciBpPXQuZ2V0SXRlbUxheW91dChuKSxyPWkuYW5nbGU9PT13P3c6ZSprO2kuc3RhcnRBbmdsZT1PLGkuZW5kQW5nbGU9TytQKnIsTys9UCpyfX0pKTtzKGUseCxhLndpZHRoLGEuaGVpZ2h0LGEueCxhLnkpfSkpfWUuZXhwb3J0cz1kfSwyOTQzOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD17fTtlLmVhY2hTZXJpZXNCeVR5cGUoImdyYXBoIiwoZnVuY3Rpb24oZSl7dmFyIG49ZS5nZXRDYXRlZ29yaWVzRGF0YSgpLGk9ZS5nZXREYXRhKCkscj17fTtuLmVhY2goKGZ1bmN0aW9uKGkpe3ZhciBvPW4uZ2V0TmFtZShpKTtyWyJlYy0iK29dPWk7dmFyIGE9bi5nZXRJdGVtTW9kZWwoaSkscz1hLmdldCgiaXRlbVN0eWxlLmNvbG9yIil8fGUuZ2V0Q29sb3JGcm9tUGFsZXR0ZShvLHQpO24uc2V0SXRlbVZpc3VhbChpLCJjb2xvciIscyk7Zm9yKHZhciBsPVsib3BhY2l0eSIsInN5bWJvbCIsInN5bWJvbFNpemUiLCJzeW1ib2xLZWVwQXNwZWN0Il0sYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1hLmdldFNoYWxsb3cobFtjXSwhMCk7bnVsbCE9dSYmbi5zZXRJdGVtVmlzdWFsKGksbFtjXSx1KX19KSksbi5jb3VudCgpJiZpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWkuZ2V0SXRlbU1vZGVsKGUpLG89dC5nZXRTaGFsbG93KCJjYXRlZ29yeSIpO2lmKG51bGwhPW8peyJzdHJpbmciPT09dHlwZW9mIG8mJihvPXJbImVjLSIrb10pO2Zvcih2YXIgYT1bImNvbG9yIiwib3BhY2l0eSIsInN5bWJvbCIsInN5bWJvbFNpemUiLCJzeW1ib2xLZWVwQXNwZWN0Il0scz0wO3M8YS5sZW5ndGg7cysrKW51bGw9PWkuZ2V0SXRlbVZpc3VhbChlLGFbc10sITApJiZpLnNldEl0ZW1WaXN1YWwoZSxhW3NdLG4uZ2V0SXRlbVZpc3VhbChvLGFbc10pKX19KSl9KSl9ZS5leHBvcnRzPW59LCIyOTljIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4oaSl7aWYodFtpXSlyZXR1cm4gdFtpXS5leHBvcnRzO3ZhciByPXRbaV09e2k6aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoci5leHBvcnRzLHIsci5leHBvcnRzLG4pLHIubD0hMCxyLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQsaSl7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Oml9KX0sbi5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmInN0cmluZyIhPXR5cGVvZiBlKWZvcih2YXIgciBpbiBlKW4uZChpLHIsZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxyKSk7cmV0dXJuIGl9LG4ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gbi5kKHQsImEiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPSIvZGlzdC8iLG4obi5zPTEzNSl9KHsxMzU6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLnIodCk7dmFyIGk9big1KSxyPW4ubihpKSxvPW4oMTcpLGE9bi5uKG8pLHM9bigyKSxsPW4oMyksYz1uKDcpLHU9bi5uKGMpLGg9e25hbWU6IkVsVG9vbHRpcCIsbWl4aW5zOltyLmFdLHByb3BzOntvcGVuRGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sZGlzYWJsZWQ6Qm9vbGVhbixtYW51YWw6Qm9vbGVhbixlZmZlY3Q6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRhcmsifSxhcnJvd09mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxwb3BwZXJDbGFzczpTdHJpbmcsY29udGVudDpTdHJpbmcsdmlzaWJsZUFycm93OntkZWZhdWx0OiEwfSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJlbC1mYWRlLWluLWxpbmVhciJ9LHBvcHBlck9wdGlvbnM6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRhcmllc1BhZGRpbmc6MTAsZ3B1QWNjZWxlcmF0aW9uOiExfX19LGVudGVyYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGhpZGVBZnRlcjp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSx0YWJpbmRleDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0b29sdGlwSWQ6ImVsLXRvb2x0aXAtIitPYmplY3QobFsiZ2VuZXJhdGVJZCJdKSgpLHRpbWVvdXRQZW5kaW5nOm51bGwsZm9jdXNpbmc6ITF9fSxiZWZvcmVDcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJGlzU2VydmVyfHwodGhpcy5wb3BwZXJWTT1uZXcgdS5hKHtkYXRhOntub2RlOiIifSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubm9kZX19KS4kbW91bnQoKSx0aGlzLmRlYm91bmNlQ2xvc2U9YSgpKDIwMCwoZnVuY3Rpb24oKXtyZXR1cm4gZS5oYW5kbGVDbG9zZVBvcHBlcigpfSkpKX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5wb3BwZXJWTSYmKHRoaXMucG9wcGVyVk0ubm9kZT1lKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6dGhpcy50cmFuc2l0aW9ufSxvbjp7YWZ0ZXJMZWF2ZTp0aGlzLmRvRGVzdHJveX19LFtlKCJkaXYiLHtvbjp7bW91c2VsZWF2ZTpmdW5jdGlvbigpe3Quc2V0RXhwZWN0ZWRTdGF0ZSghMSksdC5kZWJvdW5jZUNsb3NlKCl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24oKXt0LnNldEV4cGVjdGVkU3RhdGUoITApfX0scmVmOiJwb3BwZXIiLGF0dHJzOntyb2xlOiJ0b29sdGlwIixpZDp0aGlzLnRvb2x0aXBJZCwiYXJpYS1oaWRkZW4iOnRoaXMuZGlzYWJsZWR8fCF0aGlzLnNob3dQb3BwZXI/InRydWUiOiJmYWxzZSJ9LGRpcmVjdGl2ZXM6W3tuYW1lOiJzaG93Iix2YWx1ZTohdGhpcy5kaXNhYmxlZCYmdGhpcy5zaG93UG9wcGVyfV0sY2xhc3M6WyJlbC10b29sdGlwX19wb3BwZXIiLCJpcy0iK3RoaXMuZWZmZWN0LHRoaXMucG9wcGVyQ2xhc3NdfSxbdGhpcy4kc2xvdHMuY29udGVudHx8dGhpcy5jb250ZW50XSldKSk7dmFyIG49dGhpcy5nZXRGaXJzdEVsZW1lbnQoKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uLmRhdGE9bi5kYXRhfHx7fTtyZXR1cm4gaS5zdGF0aWNDbGFzcz10aGlzLmFkZFRvb2x0aXBDbGFzcyhpLnN0YXRpY0NsYXNzKSxufSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRlbCwxPT09dGhpcy4kZWwubm9kZVR5cGUmJih0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLHRoaXMudG9vbHRpcElkKSx0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLnRhYmluZGV4KSxPYmplY3Qoc1sib24iXSkodGhpcy5yZWZlcmVuY2VFbG0sIm1vdXNlZW50ZXIiLHRoaXMuc2hvdyksT2JqZWN0KHNbIm9uIl0pKHRoaXMucmVmZXJlbmNlRWxtLCJtb3VzZWxlYXZlIix0aGlzLmhpZGUpLE9iamVjdChzWyJvbiJdKSh0aGlzLnJlZmVyZW5jZUVsbSwiZm9jdXMiLChmdW5jdGlvbigpe2lmKGUuJHNsb3RzLmRlZmF1bHQmJmUuJHNsb3RzLmRlZmF1bHQubGVuZ3RoKXt2YXIgdD1lLiRzbG90cy5kZWZhdWx0WzBdLmNvbXBvbmVudEluc3RhbmNlO3QmJnQuZm9jdXM/dC5mb2N1cygpOmUuaGFuZGxlRm9jdXMoKX1lbHNlIGUuaGFuZGxlRm9jdXMoKX0pKSxPYmplY3Qoc1sib24iXSkodGhpcy5yZWZlcmVuY2VFbG0sImJsdXIiLHRoaXMuaGFuZGxlQmx1ciksT2JqZWN0KHNbIm9uIl0pKHRoaXMucmVmZXJlbmNlRWxtLCJjbGljayIsdGhpcy5yZW1vdmVGb2N1c2luZykpLHRoaXMudmFsdWUmJnRoaXMucG9wcGVyVk0mJnRoaXMucG9wcGVyVk0uJG5leHRUaWNrKChmdW5jdGlvbigpe2UudmFsdWUmJmUudXBkYXRlUG9wcGVyKCl9KSl9LHdhdGNoOntmb2N1c2luZzpmdW5jdGlvbihlKXtlP09iamVjdChzWyJhZGRDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwiZm9jdXNpbmciKTpPYmplY3Qoc1sicmVtb3ZlQ2xhc3MiXSkodGhpcy5yZWZlcmVuY2VFbG0sImZvY3VzaW5nIil9fSxtZXRob2RzOntzaG93OmZ1bmN0aW9uKCl7dGhpcy5zZXRFeHBlY3RlZFN0YXRlKCEwKSx0aGlzLmhhbmRsZVNob3dQb3BwZXIoKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuc2V0RXhwZWN0ZWRTdGF0ZSghMSksdGhpcy5kZWJvdW5jZUNsb3NlKCl9LGhhbmRsZUZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2luZz0hMCx0aGlzLnNob3coKX0saGFuZGxlQmx1cjpmdW5jdGlvbigpe3RoaXMuZm9jdXNpbmc9ITEsdGhpcy5oaWRlKCl9LHJlbW92ZUZvY3VzaW5nOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2luZz0hMX0sYWRkVG9vbHRpcENsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlPyJlbC10b29sdGlwICIrZS5yZXBsYWNlKCJlbC10b29sdGlwIiwiIik6ImVsLXRvb2x0aXAifSxoYW5kbGVTaG93UG9wcGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmV4cGVjdGVkU3RhdGUmJiF0aGlzLm1hbnVhbCYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMudGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2Uuc2hvd1BvcHBlcj0hMH0pLHRoaXMub3BlbkRlbGF5KSx0aGlzLmhpZGVBZnRlcj4wJiYodGhpcy50aW1lb3V0UGVuZGluZz1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2Uuc2hvd1BvcHBlcj0hMX0pLHRoaXMuaGlkZUFmdGVyKSkpfSxoYW5kbGVDbG9zZVBvcHBlcjpmdW5jdGlvbigpe3RoaXMuZW50ZXJhYmxlJiZ0aGlzLmV4cGVjdGVkU3RhdGV8fHRoaXMubWFudWFsfHwoY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0UGVuZGluZyYmY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFBlbmRpbmcpLHRoaXMuc2hvd1BvcHBlcj0hMSx0aGlzLmRpc2FibGVkJiZ0aGlzLmRvRGVzdHJveSgpKX0sc2V0RXhwZWN0ZWRTdGF0ZTpmdW5jdGlvbihlKXshMT09PWUmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRQZW5kaW5nKSx0aGlzLmV4cGVjdGVkU3RhdGU9ZX0sZ2V0Rmlyc3RFbGVtZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2xvdHMuZGVmYXVsdDtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9bnVsbCxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmZVtuXS50YWcmJih0PWVbbl0pO3JldHVybiB0fX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMucG9wcGVyVk0mJnRoaXMucG9wcGVyVk0uJGRlc3Ryb3koKX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWZlcmVuY2VFbG07MT09PWUubm9kZVR5cGUmJihPYmplY3Qoc1sib2ZmIl0pKGUsIm1vdXNlZW50ZXIiLHRoaXMuc2hvdyksT2JqZWN0KHNbIm9mZiJdKShlLCJtb3VzZWxlYXZlIix0aGlzLmhpZGUpLE9iamVjdChzWyJvZmYiXSkoZSwiZm9jdXMiLHRoaXMuaGFuZGxlRm9jdXMpLE9iamVjdChzWyJvZmYiXSkoZSwiYmx1ciIsdGhpcy5oYW5kbGVCbHVyKSxPYmplY3Qoc1sib2ZmIl0pKGUsImNsaWNrIix0aGlzLnJlbW92ZUZvY3VzaW5nKSl9LGluc3RhbGw6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoaC5uYW1lLGgpfX07dFsiZGVmYXVsdCJdPWh9LDE3OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjBlMTUiKX0sMjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI1OTI0Iil9LDM6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiODEyMiIpfSw1OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImU5NzQiKX0sNzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIyYjBlIil9fSl9LCIyOWE4IjpmdW5jdGlvbihlLHQpe3ZhciBuPXtsZWdlbmQ6e3NlbGVjdG9yOnthbGw6IuWFqOmAiSIsaW52ZXJzZToi5Y+N6YCJIn19LHRvb2xib3g6e2JydXNoOnt0aXRsZTp7cmVjdDoi55+p5b2i6YCJ5oupIixwb2x5Z29uOiLlnIjpgIkiLGxpbmVYOiLmqKrlkJHpgInmi6kiLGxpbmVZOiLnurXlkJHpgInmi6kiLGtlZXA6IuS/neaMgemAieaLqSIsY2xlYXI6Iua4hemZpOmAieaLqSJ9fSxkYXRhVmlldzp7dGl0bGU6IuaVsOaNruinhuWbviIsbGFuZzpbIuaVsOaNruinhuWbviIsIuWFs+mXrSIsIuWIt+aWsCJdfSxkYXRhWm9vbTp7dGl0bGU6e3pvb206IuWMuuWfn+e8qeaUviIsYmFjazoi5Yy65Z+f57yp5pS+6L+Y5Y6fIn19LG1hZ2ljVHlwZTp7dGl0bGU6e2xpbmU6IuWIh+aNouS4uuaKmOe6v+WbviIsYmFyOiLliIfmjaLkuLrmn7Hnirblm74iLHN0YWNrOiLliIfmjaLkuLrloIblj6AiLHRpbGVkOiLliIfmjaLkuLrlubPpk7oifX0scmVzdG9yZTp7dGl0bGU6Iui/mOWOnyJ9LHNhdmVBc0ltYWdlOnt0aXRsZToi5L+d5a2Y5Li65Zu+54mHIixsYW5nOlsi5Y+z6ZSu5Y+m5a2Y5Li65Zu+54mHIl19fSxzZXJpZXM6e3R5cGVOYW1lczp7cGllOiLppbzlm74iLGJhcjoi5p+x54q25Zu+IixsaW5lOiLmipjnur/lm74iLHNjYXR0ZXI6IuaVo+eCueWbviIsZWZmZWN0U2NhdHRlcjoi5raf5ryq5pWj54K55Zu+IixyYWRhcjoi6Zu36L6+5Zu+Iix0cmVlOiLmoJHlm74iLHRyZWVtYXA6IuefqeW9ouagkeWbviIsYm94cGxvdDoi566x5Z6L5Zu+IixjYW5kbGVzdGljazoiS+e6v+WbviIsazoiS+e6v+WbviIsaGVhdG1hcDoi54Ot5Yqb5Zu+IixtYXA6IuWcsOWbviIscGFyYWxsZWw6IuW5s+ihjOWdkOagh+WbviIsbGluZXM6Iue6v+WbviIsZ3JhcGg6IuWFs+ezu+WbviIsc2Fua2V5OiLmoZHln7rlm74iLGZ1bm5lbDoi5ryP5paX5Zu+IixnYXVnZToi5Luq6KGo55uY5Zu+IixwaWN0b3JpYWxCYXI6IuixoeW9ouafseWbviIsdGhlbWVSaXZlcjoi5Li76aKY5rKz5rWB5Zu+IixzdW5idXJzdDoi5pet5pel5Zu+In19LGFyaWE6e2dlbmVyYWw6e3dpdGhUaXRsZToi6L+Z5piv5LiA5Liq5YWz5LqO4oCce3RpdGxlfeKAneeahOWbvuihqOOAgiIsd2l0aG91dFRpdGxlOiLov5nmmK/kuIDkuKrlm77ooajvvIwifSxzZXJpZXM6e3NpbmdsZTp7cHJlZml4OiIiLHdpdGhOYW1lOiLlm77ooajnsbvlnovmmK97c2VyaWVzVHlwZX3vvIzooajnpLp7c2VyaWVzTmFtZX3jgIIiLHdpdGhvdXROYW1lOiLlm77ooajnsbvlnovmmK97c2VyaWVzVHlwZX3jgIIifSxtdWx0aXBsZTp7cHJlZml4OiLlroPnlLF7c2VyaWVzQ291bnR95Liq5Zu+6KGo57O75YiX57uE5oiQ44CCIix3aXRoTmFtZToi56yse3Nlcmllc0lkfeS4quezu+WIl+aYr+S4gOS4quihqOekuntzZXJpZXNOYW1lfeeahHtzZXJpZXNUeXBlfe+8jCIsd2l0aG91dE5hbWU6IuesrHtzZXJpZXNJZH3kuKrns7vliJfmmK/kuIDkuKp7c2VyaWVzVHlwZX3vvIwiLHNlcGFyYXRvcjp7bWlkZGxlOiLvvJsiLGVuZDoi44CCIn19fSxkYXRhOnthbGxEYXRhOiLlhbbmlbDmja7mmK/igJTigJQiLHBhcnRpYWxEYXRhOiLlhbbkuK3vvIzliY17ZGlzcGxheUNudH3pobnmmK/igJTigJQiLHdpdGhOYW1lOiJ7bmFtZX3nmoTmlbDmja7mmK97dmFsdWV9Iix3aXRob3V0TmFtZToie3ZhbHVlfSIsc2VwYXJhdG9yOnttaWRkbGU6Iu+8jCIsZW5kOiIifX19fTtlLmV4cG9ydHM9bn0sIjI5YTkiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIikscj1uKCJiMzM2Iik7bigiYmM1ZiIpLG4oImFiMDUiKSxuKCIwNmVhIiksbigiMDA0ZiIpLG4oImQ2ZWYiKSxpLnJlZ2lzdGVyUHJlcHJvY2Vzc29yKHIpfSwiMjlmMyI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3QucHJvdG90eXBlLGk9bi50b1N0cmluZztmdW5jdGlvbiByKGUpe3JldHVybiBpLmNhbGwoZSl9ZS5leHBvcnRzPXJ9LCIyYTQ0IjpmdW5jdGlvbihlLHQsbil7fSwiMmE1ZSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITAsdC5kZWZhdWx0PWE7dmFyIGk9bigiMmIwZSIpLHI9byhpKTtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBhKGUsdCl7aWYoIXIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKWlmKHQpe3ZhciBuPVtdLGk9dC5vZmZzZXRQYXJlbnQ7d2hpbGUoaSYmZSE9PWkmJmUuY29udGFpbnMoaSkpbi5wdXNoKGkpLGk9aS5vZmZzZXRQYXJlbnQ7dmFyIG89dC5vZmZzZXRUb3Arbi5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdC5vZmZzZXRUb3B9KSwwKSxhPW8rdC5vZmZzZXRIZWlnaHQscz1lLnNjcm9sbFRvcCxsPXMrZS5jbGllbnRIZWlnaHQ7bzxzP2Uuc2Nyb2xsVG9wPW86YT5sJiYoZS5zY3JvbGxUb3A9YS1lLmNsaWVudEhlaWdodCl9ZWxzZSBlLnNjcm9sbFRvcD0wfX0sIjJhNjIiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI4MjVhIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWVbInJldHVybiJdO2lmKHZvaWQgMCE9PXQpcmV0dXJuIGkodC5jYWxsKGUpKS52YWx1ZX19LCIyYjBlIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KSxmdW5jdGlvbihlKXsKLyohCiAqIFZ1ZS5qcyB2Mi42LjE0CiAqIChjKSAyMDE0LTIwMjEgRXZhbiBZb3UKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KdmFyIG49T2JqZWN0LmZyZWV6ZSh7fSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09PWV9ZnVuY3Rpb24gcihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmbnVsbCE9PWV9ZnVuY3Rpb24gbyhlKXtyZXR1cm4hMD09PWV9ZnVuY3Rpb24gYShlKXtyZXR1cm4hMT09PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBlfHwibnVtYmVyIj09PXR5cGVvZiBlfHwic3ltYm9sIj09PXR5cGVvZiBlfHwiYm9vbGVhbiI9PT10eXBlb2YgZX1mdW5jdGlvbiBsKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PT10eXBlb2YgZX12YXIgYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1jLmNhbGwoZSl9ZnVuY3Rpb24gaChlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PWMuY2FsbChlKX1mdW5jdGlvbiBkKGUpe3ZhciB0PXBhcnNlRmxvYXQoU3RyaW5nKGUpKTtyZXR1cm4gdD49MCYmTWF0aC5mbG9vcih0KT09PXQmJmlzRmluaXRlKGUpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIHIoZSkmJiJmdW5jdGlvbiI9PT10eXBlb2YgZS50aGVuJiYiZnVuY3Rpb24iPT09dHlwZW9mIGUuY2F0Y2h9ZnVuY3Rpb24gcChlKXtyZXR1cm4gbnVsbD09ZT8iIjpBcnJheS5pc0FycmF5KGUpfHx1KGUpJiZlLnRvU3RyaW5nPT09Yz9KU09OLnN0cmluZ2lmeShlLG51bGwsMik6U3RyaW5nKGUpfWZ1bmN0aW9uIG0oZSl7dmFyIHQ9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4odCk/ZTp0fWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPWUuc3BsaXQoIiwiKSxyPTA7cjxpLmxlbmd0aDtyKyspbltpW3JdXT0hMDtyZXR1cm4gdD9mdW5jdGlvbihlKXtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldfTpmdW5jdGlvbihlKXtyZXR1cm4gbltlXX19Zygic2xvdCxjb21wb25lbnQiLCEwKTt2YXIgdj1nKCJrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcyIpO2Z1bmN0aW9uIHkoZSx0KXtpZihlLmxlbmd0aCl7dmFyIG49ZS5pbmRleE9mKHQpO2lmKG4+LTEpcmV0dXJuIGUuc3BsaWNlKG4sMSl9fXZhciBiPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geChlLHQpe3JldHVybiBiLmNhbGwoZSx0KX1mdW5jdGlvbiBfKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl07cmV0dXJuIGl8fCh0W25dPWUobikpfX12YXIgdz0vLShcdykvZyxTPV8oKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD90LnRvVXBwZXJDYXNlKCk6IiJ9KSl9KSksQz1fKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpfSkpLGs9L1xCKFtBLVpdKS9nLFQ9XygoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLCItJDEiKS50b0xvd2VyQ2FzZSgpfSkpO2Z1bmN0aW9uIE0oZSx0KXtmdW5jdGlvbiBuKG4pe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGk/aT4xP2UuYXBwbHkodCxhcmd1bWVudHMpOmUuY2FsbCh0LG4pOmUuY2FsbCh0KX1yZXR1cm4gbi5fbGVuZ3RoPWUubGVuZ3RoLG59ZnVuY3Rpb24gRShlLHQpe3JldHVybiBlLmJpbmQodCl9dmFyIEk9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ/RTpNO2Z1bmN0aW9uIEQoZSx0KXt0PXR8fDA7dmFyIG49ZS5sZW5ndGgtdCxpPW5ldyBBcnJheShuKTt3aGlsZShuLS0paVtuXT1lW24rdF07cmV0dXJuIGl9ZnVuY3Rpb24gQShlLHQpe2Zvcih2YXIgbiBpbiB0KWVbbl09dFtuXTtyZXR1cm4gZX1mdW5jdGlvbiBPKGUpe2Zvcih2YXIgdD17fSxuPTA7bjxlLmxlbmd0aDtuKyspZVtuXSYmQSh0LGVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIFAoZSx0LG4pe312YXIgTD1mdW5jdGlvbihlLHQsbil7cmV0dXJuITF9LE49ZnVuY3Rpb24oZSl7cmV0dXJuIGV9O2Z1bmN0aW9uIFIoZSx0KXtpZihlPT09dClyZXR1cm4hMDt2YXIgbj1sKGUpLGk9bCh0KTtpZighbnx8IWkpcmV0dXJuIW4mJiFpJiZTdHJpbmcoZSk9PT1TdHJpbmcodCk7dHJ5e3ZhciByPUFycmF5LmlzQXJyYXkoZSksbz1BcnJheS5pc0FycmF5KHQpO2lmKHImJm8pcmV0dXJuIGUubGVuZ3RoPT09dC5sZW5ndGgmJmUuZXZlcnkoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIFIoZSx0W25dKX0pKTtpZihlIGluc3RhbmNlb2YgRGF0ZSYmdCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGUuZ2V0VGltZSgpPT09dC5nZXRUaW1lKCk7aWYocnx8bylyZXR1cm4hMTt2YXIgYT1PYmplY3Qua2V5cyhlKSxzPU9iamVjdC5rZXlzKHQpO3JldHVybiBhLmxlbmd0aD09PXMubGVuZ3RoJiZhLmV2ZXJ5KChmdW5jdGlvbihuKXtyZXR1cm4gUihlW25dLHRbbl0pfSkpfWNhdGNoKGMpe3JldHVybiExfX1mdW5jdGlvbiAkKGUsdCl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoUihlW25dLHQpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIHooZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgQj0iZGF0YS1zZXJ2ZXItcmVuZGVyZWQiLEY9WyJjb21wb25lbnQiLCJkaXJlY3RpdmUiLCJmaWx0ZXIiXSxWPVsiYmVmb3JlQ3JlYXRlIiwiY3JlYXRlZCIsImJlZm9yZU1vdW50IiwibW91bnRlZCIsImJlZm9yZVVwZGF0ZSIsInVwZGF0ZWQiLCJiZWZvcmVEZXN0cm95IiwiZGVzdHJveWVkIiwiYWN0aXZhdGVkIiwiZGVhY3RpdmF0ZWQiLCJlcnJvckNhcHR1cmVkIiwic2VydmVyUHJlZmV0Y2giXSxqPXtvcHRpb25NZXJnZVN0cmF0ZWdpZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxzaWxlbnQ6ITEscHJvZHVjdGlvblRpcDohMSxkZXZ0b29sczohMSxwZXJmb3JtYW5jZTohMSxlcnJvckhhbmRsZXI6bnVsbCx3YXJuSGFuZGxlcjpudWxsLGlnbm9yZWRFbGVtZW50czpbXSxrZXlDb2RlczpPYmplY3QuY3JlYXRlKG51bGwpLGlzUmVzZXJ2ZWRUYWc6TCxpc1Jlc2VydmVkQXR0cjpMLGlzVW5rbm93bkVsZW1lbnQ6TCxnZXRUYWdOYW1lc3BhY2U6UCxwYXJzZVBsYXRmb3JtVGFnTmFtZTpOLG11c3RVc2VQcm9wOkwsYXN5bmM6ITAsX2xpZmVjeWNsZUhvb2tzOlZ9LEg9L2EtekEtWlx1MDBCN1x1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDNGLVx1MjA0MFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZELztmdW5jdGlvbiBXKGUpe3ZhciB0PShlKyIiKS5jaGFyQ29kZUF0KDApO3JldHVybiAzNj09PXR8fDk1PT09dH1mdW5jdGlvbiBHKGUsdCxuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sZW51bWVyYWJsZTohIWksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9dmFyIFU9bmV3IFJlZ0V4cCgiW14iK0guc291cmNlKyIuJF9cXGRdIik7ZnVuY3Rpb24gcShlKXtpZighVS50ZXN0KGUpKXt2YXIgdD1lLnNwbGl0KCIuIik7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXtpZighZSlyZXR1cm47ZT1lW3Rbbl1dfXJldHVybiBlfX19dmFyIFksWD0iX19wcm90b19fImlue30sSz0idW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3csWj0idW5kZWZpbmVkIiE9PXR5cGVvZiBXWEVudmlyb25tZW50JiYhIVdYRW52aXJvbm1lbnQucGxhdGZvcm0sSj1aJiZXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksUT1LJiZ3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLGVlPVEmJi9tc2llfHRyaWRlbnQvLnRlc3QoUSksdGU9USYmUS5pbmRleE9mKCJtc2llIDkuMCIpPjAsbmU9USYmUS5pbmRleE9mKCJlZGdlLyIpPjAsaWU9KFEmJlEuaW5kZXhPZigiYW5kcm9pZCIpLFEmJi9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChRKXx8ImlvcyI9PT1KKSxyZT0oUSYmL2Nocm9tZVwvXGQrLy50ZXN0KFEpLFEmJi9waGFudG9tanMvLnRlc3QoUSksUSYmUS5tYXRjaCgvZmlyZWZveFwvKFxkKykvKSksb2U9e30ud2F0Y2gsYWU9ITE7aWYoSyl0cnl7dmFyIHNlPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShzZSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2FlPSEwfX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0LXBhc3NpdmUiLG51bGwsc2UpfWNhdGNoKENhKXt9dmFyIGxlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PVkmJihZPSFLJiYhWiYmInVuZGVmaW5lZCIhPT10eXBlb2YgZSYmKGVbInByb2Nlc3MiXSYmInNlcnZlciI9PT1lWyJwcm9jZXNzIl0uZW52LlZVRV9FTlYpKSxZfSxjZT1LJiZ3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztmdW5jdGlvbiB1ZShlKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIGUmJi9uYXRpdmUgY29kZS8udGVzdChlLnRvU3RyaW5nKCkpfXZhciBoZSxkZT0idW5kZWZpbmVkIiE9PXR5cGVvZiBTeW1ib2wmJnVlKFN5bWJvbCkmJiJ1bmRlZmluZWQiIT09dHlwZW9mIFJlZmxlY3QmJnVlKFJlZmxlY3Qub3duS2V5cyk7aGU9InVuZGVmaW5lZCIhPT10eXBlb2YgU2V0JiZ1ZShTZXQpP1NldDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnNldD1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuITA9PT10aGlzLnNldFtlXX0sZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuc2V0W2VdPSEwfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2V0PU9iamVjdC5jcmVhdGUobnVsbCl9LGV9KCk7dmFyIGZlPVAscGU9MCxtZT1mdW5jdGlvbigpe3RoaXMuaWQ9cGUrKyx0aGlzLnN1YnM9W119O21lLnByb3RvdHlwZS5hZGRTdWI9ZnVuY3Rpb24oZSl7dGhpcy5zdWJzLnB1c2goZSl9LG1lLnByb3RvdHlwZS5yZW1vdmVTdWI9ZnVuY3Rpb24oZSl7eSh0aGlzLnN1YnMsZSl9LG1lLnByb3RvdHlwZS5kZXBlbmQ9ZnVuY3Rpb24oKXttZS50YXJnZXQmJm1lLnRhcmdldC5hZGREZXAodGhpcyl9LG1lLnByb3RvdHlwZS5ub3RpZnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN1YnMuc2xpY2UoKTtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspZVt0XS51cGRhdGUoKX0sbWUudGFyZ2V0PW51bGw7dmFyIGdlPVtdO2Z1bmN0aW9uIHZlKGUpe2dlLnB1c2goZSksbWUudGFyZ2V0PWV9ZnVuY3Rpb24geWUoKXtnZS5wb3AoKSxtZS50YXJnZXQ9Z2VbZ2UubGVuZ3RoLTFdfXZhciBiZT1mdW5jdGlvbihlLHQsbixpLHIsbyxhLHMpe3RoaXMudGFnPWUsdGhpcy5kYXRhPXQsdGhpcy5jaGlsZHJlbj1uLHRoaXMudGV4dD1pLHRoaXMuZWxtPXIsdGhpcy5ucz12b2lkIDAsdGhpcy5jb250ZXh0PW8sdGhpcy5mbkNvbnRleHQ9dm9pZCAwLHRoaXMuZm5PcHRpb25zPXZvaWQgMCx0aGlzLmZuU2NvcGVJZD12b2lkIDAsdGhpcy5rZXk9dCYmdC5rZXksdGhpcy5jb21wb25lbnRPcHRpb25zPWEsdGhpcy5jb21wb25lbnRJbnN0YW5jZT12b2lkIDAsdGhpcy5wYXJlbnQ9dm9pZCAwLHRoaXMucmF3PSExLHRoaXMuaXNTdGF0aWM9ITEsdGhpcy5pc1Jvb3RJbnNlcnQ9ITAsdGhpcy5pc0NvbW1lbnQ9ITEsdGhpcy5pc0Nsb25lZD0hMSx0aGlzLmlzT25jZT0hMSx0aGlzLmFzeW5jRmFjdG9yeT1zLHRoaXMuYXN5bmNNZXRhPXZvaWQgMCx0aGlzLmlzQXN5bmNQbGFjZWhvbGRlcj0hMX0seGU9e2NoaWxkOntjb25maWd1cmFibGU6ITB9fTt4ZS5jaGlsZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wb25lbnRJbnN0YW5jZX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYmUucHJvdG90eXBlLHhlKTt2YXIgX2U9ZnVuY3Rpb24oZSl7dm9pZCAwPT09ZSYmKGU9IiIpO3ZhciB0PW5ldyBiZTtyZXR1cm4gdC50ZXh0PWUsdC5pc0NvbW1lbnQ9ITAsdH07ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIG5ldyBiZSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxTdHJpbmcoZSkpfWZ1bmN0aW9uIFNlKGUpe3ZhciB0PW5ldyBiZShlLnRhZyxlLmRhdGEsZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zbGljZSgpLGUudGV4dCxlLmVsbSxlLmNvbnRleHQsZS5jb21wb25lbnRPcHRpb25zLGUuYXN5bmNGYWN0b3J5KTtyZXR1cm4gdC5ucz1lLm5zLHQuaXNTdGF0aWM9ZS5pc1N0YXRpYyx0LmtleT1lLmtleSx0LmlzQ29tbWVudD1lLmlzQ29tbWVudCx0LmZuQ29udGV4dD1lLmZuQ29udGV4dCx0LmZuT3B0aW9ucz1lLmZuT3B0aW9ucyx0LmZuU2NvcGVJZD1lLmZuU2NvcGVJZCx0LmFzeW5jTWV0YT1lLmFzeW5jTWV0YSx0LmlzQ2xvbmVkPSEwLHR9dmFyIENlPUFycmF5LnByb3RvdHlwZSxrZT1PYmplY3QuY3JlYXRlKENlKSxUZT1bInB1c2giLCJwb3AiLCJzaGlmdCIsInVuc2hpZnQiLCJzcGxpY2UiLCJzb3J0IiwicmV2ZXJzZSJdO1RlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PUNlW2VdO0coa2UsZSwoZnVuY3Rpb24oKXt2YXIgbj1bXSxpPWFyZ3VtZW50cy5sZW5ndGg7d2hpbGUoaS0tKW5baV09YXJndW1lbnRzW2ldO3ZhciByLG89dC5hcHBseSh0aGlzLG4pLGE9dGhpcy5fX29iX187c3dpdGNoKGUpe2Nhc2UicHVzaCI6Y2FzZSJ1bnNoaWZ0IjpyPW47YnJlYWs7Y2FzZSJzcGxpY2UiOnI9bi5zbGljZSgyKTticmVha31yZXR1cm4gciYmYS5vYnNlcnZlQXJyYXkociksYS5kZXAubm90aWZ5KCksb30pKX0pKTt2YXIgTWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoa2UpLEVlPSEwO2Z1bmN0aW9uIEllKGUpe0VlPWV9dmFyIERlPWZ1bmN0aW9uKGUpe3RoaXMudmFsdWU9ZSx0aGlzLmRlcD1uZXcgbWUsdGhpcy52bUNvdW50PTAsRyhlLCJfX29iX18iLHRoaXMpLEFycmF5LmlzQXJyYXkoZSk/KFg/QWUoZSxrZSk6T2UoZSxrZSxNZSksdGhpcy5vYnNlcnZlQXJyYXkoZSkpOnRoaXMud2FsayhlKX07ZnVuY3Rpb24gQWUoZSx0KXtlLl9fcHJvdG9fXz10fWZ1bmN0aW9uIE9lKGUsdCxuKXtmb3IodmFyIGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe3ZhciBvPW5baV07RyhlLG8sdFtvXSl9fWZ1bmN0aW9uIFBlKGUsdCl7dmFyIG47aWYobChlKSYmIShlIGluc3RhbmNlb2YgYmUpKXJldHVybiB4KGUsIl9fb2JfXyIpJiZlLl9fb2JfXyBpbnN0YW5jZW9mIERlP249ZS5fX29iX186RWUmJiFsZSgpJiYoQXJyYXkuaXNBcnJheShlKXx8dShlKSkmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJiFlLl9pc1Z1ZSYmKG49bmV3IERlKGUpKSx0JiZuJiZuLnZtQ291bnQrKyxufWZ1bmN0aW9uIExlKGUsdCxuLGkscil7dmFyIG89bmV3IG1lLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpO2lmKCFhfHwhMSE9PWEuY29uZmlndXJhYmxlKXt2YXIgcz1hJiZhLmdldCxsPWEmJmEuc2V0O3MmJiFsfHwyIT09YXJndW1lbnRzLmxlbmd0aHx8KG49ZVt0XSk7dmFyIGM9IXImJlBlKG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciB0PXM/cy5jYWxsKGUpOm47cmV0dXJuIG1lLnRhcmdldCYmKG8uZGVwZW5kKCksYyYmKGMuZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkodCkmJiRlKHQpKSksdH0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBpPXM/cy5jYWxsKGUpOm47dD09PWl8fHQhPT10JiZpIT09aXx8cyYmIWx8fChsP2wuY2FsbChlLHQpOm49dCxjPSFyJiZQZSh0KSxvLm5vdGlmeSgpKX19KX19ZnVuY3Rpb24gTmUoZSx0LG4pe2lmKEFycmF5LmlzQXJyYXkoZSkmJmQodCkpcmV0dXJuIGUubGVuZ3RoPU1hdGgubWF4KGUubGVuZ3RoLHQpLGUuc3BsaWNlKHQsMSxuKSxuO2lmKHQgaW4gZSYmISh0IGluIE9iamVjdC5wcm90b3R5cGUpKXJldHVybiBlW3RdPW4sbjt2YXIgaT1lLl9fb2JfXztyZXR1cm4gZS5faXNWdWV8fGkmJmkudm1Db3VudD9uOmk/KExlKGkudmFsdWUsdCxuKSxpLmRlcC5ub3RpZnkoKSxuKTooZVt0XT1uLG4pfWZ1bmN0aW9uIFJlKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSYmZCh0KSllLnNwbGljZSh0LDEpO2Vsc2V7dmFyIG49ZS5fX29iX187ZS5faXNWdWV8fG4mJm4udm1Db3VudHx8eChlLHQpJiYoZGVsZXRlIGVbdF0sbiYmbi5kZXAubm90aWZ5KCkpfX1mdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9dm9pZCAwLG49MCxpPWUubGVuZ3RoO248aTtuKyspdD1lW25dLHQmJnQuX19vYl9fJiZ0Ll9fb2JfXy5kZXAuZGVwZW5kKCksQXJyYXkuaXNBcnJheSh0KSYmJGUodCl9RGUucHJvdG90eXBlLndhbGs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKGUpLG49MDtuPHQubGVuZ3RoO24rKylMZShlLHRbbl0pfSxEZS5wcm90b3R5cGUub2JzZXJ2ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGg7dDxuO3QrKylQZShlW3RdKX07dmFyIHplPWoub3B0aW9uTWVyZ2VTdHJhdGVnaWVzO2Z1bmN0aW9uIEJlKGUsdCl7aWYoIXQpcmV0dXJuIGU7Zm9yKHZhciBuLGkscixvPWRlP1JlZmxlY3Qub3duS2V5cyh0KTpPYmplY3Qua2V5cyh0KSxhPTA7YTxvLmxlbmd0aDthKyspbj1vW2FdLCJfX29iX18iIT09biYmKGk9ZVtuXSxyPXRbbl0seChlLG4pP2khPT1yJiZ1KGkpJiZ1KHIpJiZCZShpLHIpOk5lKGUsbixyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRmUoZSx0LG4pe3JldHVybiBuP2Z1bmN0aW9uKCl7dmFyIGk9ImZ1bmN0aW9uIj09PXR5cGVvZiB0P3QuY2FsbChuLG4pOnQscj0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZS5jYWxsKG4sbik6ZTtyZXR1cm4gaT9CZShpLHIpOnJ9OnQ/ZT9mdW5jdGlvbigpe3JldHVybiBCZSgiZnVuY3Rpb24iPT09dHlwZW9mIHQ/dC5jYWxsKHRoaXMsdGhpcyk6dCwiZnVuY3Rpb24iPT09dHlwZW9mIGU/ZS5jYWxsKHRoaXMsdGhpcyk6ZSl9OnQ6ZX1mdW5jdGlvbiBWZShlLHQpe3ZhciBuPXQ/ZT9lLmNvbmNhdCh0KTpBcnJheS5pc0FycmF5KHQpP3Q6W3RdOmU7cmV0dXJuIG4/amUobik6bn1mdW5jdGlvbiBqZShlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7bisrKS0xPT09dC5pbmRleE9mKGVbbl0pJiZ0LnB1c2goZVtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gSGUoZSx0LG4saSl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlfHxudWxsKTtyZXR1cm4gdD9BKHIsdCk6cn16ZS5kYXRhPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj9GZShlLHQsbik6dCYmImZ1bmN0aW9uIiE9PXR5cGVvZiB0P2U6RmUoZSx0KX0sVi5mb3JFYWNoKChmdW5jdGlvbihlKXt6ZVtlXT1WZX0pKSxGLmZvckVhY2goKGZ1bmN0aW9uKGUpe3plW2UrInMiXT1IZX0pKSx6ZS53YXRjaD1mdW5jdGlvbihlLHQsbixpKXtpZihlPT09b2UmJihlPXZvaWQgMCksdD09PW9lJiYodD12b2lkIDApLCF0KXJldHVybiBPYmplY3QuY3JlYXRlKGV8fG51bGwpO2lmKCFlKXJldHVybiB0O3ZhciByPXt9O2Zvcih2YXIgbyBpbiBBKHIsZSksdCl7dmFyIGE9cltvXSxzPXRbb107YSYmIUFycmF5LmlzQXJyYXkoYSkmJihhPVthXSkscltvXT1hP2EuY29uY2F0KHMpOkFycmF5LmlzQXJyYXkocyk/czpbc119cmV0dXJuIHJ9LHplLnByb3BzPXplLm1ldGhvZHM9emUuaW5qZWN0PXplLmNvbXB1dGVkPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKCFlKXJldHVybiB0O3ZhciByPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEEocixlKSx0JiZBKHIsdCkscn0semUucHJvdmlkZT1GZTt2YXIgV2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9lOnR9O2Z1bmN0aW9uIEdlKGUsdCl7dmFyIG49ZS5wcm9wcztpZihuKXt2YXIgaSxyLG8sYT17fTtpZihBcnJheS5pc0FycmF5KG4pKXtpPW4ubGVuZ3RoO3doaWxlKGktLSlyPW5baV0sInN0cmluZyI9PT10eXBlb2YgciYmKG89UyhyKSxhW29dPXt0eXBlOm51bGx9KX1lbHNlIGlmKHUobikpZm9yKHZhciBzIGluIG4pcj1uW3NdLG89UyhzKSxhW29dPXUocik/cjp7dHlwZTpyfTtlbHNlIDA7ZS5wcm9wcz1hfX1mdW5jdGlvbiBVZShlLHQpe3ZhciBuPWUuaW5qZWN0O2lmKG4pe3ZhciBpPWUuaW5qZWN0PXt9O2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciByPTA7cjxuLmxlbmd0aDtyKyspaVtuW3JdXT17ZnJvbTpuW3JdfTtlbHNlIGlmKHUobikpZm9yKHZhciBvIGluIG4pe3ZhciBhPW5bb107aVtvXT11KGEpP0Eoe2Zyb206b30sYSk6e2Zyb206YX19ZWxzZSAwfX1mdW5jdGlvbiBxZShlKXt2YXIgdD1lLmRpcmVjdGl2ZXM7aWYodClmb3IodmFyIG4gaW4gdCl7dmFyIGk9dFtuXTsiZnVuY3Rpb24iPT09dHlwZW9mIGkmJih0W25dPXtiaW5kOmksdXBkYXRlOml9KX19ZnVuY3Rpb24gWWUoZSx0LG4pe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgdCYmKHQ9dC5vcHRpb25zKSxHZSh0LG4pLFVlKHQsbikscWUodCksIXQuX2Jhc2UmJih0LmV4dGVuZHMmJihlPVllKGUsdC5leHRlbmRzLG4pKSx0Lm1peGlucykpZm9yKHZhciBpPTAscj10Lm1peGlucy5sZW5ndGg7aTxyO2krKyllPVllKGUsdC5taXhpbnNbaV0sbik7dmFyIG8sYT17fTtmb3IobyBpbiBlKXMobyk7Zm9yKG8gaW4gdCl4KGUsbyl8fHMobyk7ZnVuY3Rpb24gcyhpKXt2YXIgcj16ZVtpXXx8V2U7YVtpXT1yKGVbaV0sdFtpXSxuLGkpfXJldHVybiBhfWZ1bmN0aW9uIFhlKGUsdCxuLGkpe2lmKCJzdHJpbmciPT09dHlwZW9mIG4pe3ZhciByPWVbdF07aWYoeChyLG4pKXJldHVybiByW25dO3ZhciBvPVMobik7aWYoeChyLG8pKXJldHVybiByW29dO3ZhciBhPUMobyk7aWYoeChyLGEpKXJldHVybiByW2FdO3ZhciBzPXJbbl18fHJbb118fHJbYV07cmV0dXJuIHN9fWZ1bmN0aW9uIEtlKGUsdCxuLGkpe3ZhciByPXRbZV0sbz0heChuLGUpLGE9bltlXSxzPXR0KEJvb2xlYW4sci50eXBlKTtpZihzPi0xKWlmKG8mJiF4KHIsImRlZmF1bHQiKSlhPSExO2Vsc2UgaWYoIiI9PT1hfHxhPT09VChlKSl7dmFyIGw9dHQoU3RyaW5nLHIudHlwZSk7KGw8MHx8czxsKSYmKGE9ITApfWlmKHZvaWQgMD09PWEpe2E9WmUoaSxyLGUpO3ZhciBjPUVlO0llKCEwKSxQZShhKSxJZShjKX1yZXR1cm4gYX1mdW5jdGlvbiBaZShlLHQsbil7aWYoeCh0LCJkZWZhdWx0Iikpe3ZhciBpPXQuZGVmYXVsdDtyZXR1cm4gZSYmZS4kb3B0aW9ucy5wcm9wc0RhdGEmJnZvaWQgMD09PWUuJG9wdGlvbnMucHJvcHNEYXRhW25dJiZ2b2lkIDAhPT1lLl9wcm9wc1tuXT9lLl9wcm9wc1tuXToiZnVuY3Rpb24iPT09dHlwZW9mIGkmJiJGdW5jdGlvbiIhPT1RZSh0LnR5cGUpP2kuY2FsbChlKTppfX12YXIgSmU9L15ccypmdW5jdGlvbiAoXHcrKS87ZnVuY3Rpb24gUWUoZSl7dmFyIHQ9ZSYmZS50b1N0cmluZygpLm1hdGNoKEplKTtyZXR1cm4gdD90WzFdOiIifWZ1bmN0aW9uIGV0KGUsdCl7cmV0dXJuIFFlKGUpPT09UWUodCl9ZnVuY3Rpb24gdHQoZSx0KXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZXQodCxlKT8wOi0xO2Zvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpO24rKylpZihldCh0W25dLGUpKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIG50KGUsdCxuKXt2ZSgpO3RyeXtpZih0KXt2YXIgaT10O3doaWxlKGk9aS4kcGFyZW50KXt2YXIgcj1pLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0cnl7dmFyIGE9ITE9PT1yW29dLmNhbGwoaSxlLHQsbik7aWYoYSlyZXR1cm59Y2F0Y2goQ2Epe3J0KENhLGksImVycm9yQ2FwdHVyZWQgaG9vayIpfX19cnQoZSx0LG4pfWZpbmFsbHl7eWUoKX19ZnVuY3Rpb24gaXQoZSx0LG4saSxyKXt2YXIgbzt0cnl7bz1uP2UuYXBwbHkodCxuKTplLmNhbGwodCksbyYmIW8uX2lzVnVlJiZmKG8pJiYhby5faGFuZGxlZCYmKG8uY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybiBudChlLGkscisiIChQcm9taXNlL2FzeW5jKSIpfSkpLG8uX2hhbmRsZWQ9ITApfWNhdGNoKENhKXtudChDYSxpLHIpfXJldHVybiBvfWZ1bmN0aW9uIHJ0KGUsdCxuKXtpZihqLmVycm9ySGFuZGxlcil0cnl7cmV0dXJuIGouZXJyb3JIYW5kbGVyLmNhbGwobnVsbCxlLHQsbil9Y2F0Y2goQ2Epe0NhIT09ZSYmb3QoQ2EsbnVsbCwiY29uZmlnLmVycm9ySGFuZGxlciIpfW90KGUsdCxuKX1mdW5jdGlvbiBvdChlLHQsbil7aWYoIUsmJiFafHwidW5kZWZpbmVkIj09PXR5cGVvZiBjb25zb2xlKXRocm93IGU7Y29uc29sZS5lcnJvcihlKX12YXIgYXQsc3Q9ITEsbHQ9W10sY3Q9ITE7ZnVuY3Rpb24gdXQoKXtjdD0hMTt2YXIgZT1sdC5zbGljZSgwKTtsdC5sZW5ndGg9MDtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdKCl9aWYoInVuZGVmaW5lZCIhPT10eXBlb2YgUHJvbWlzZSYmdWUoUHJvbWlzZSkpe3ZhciBodD1Qcm9taXNlLnJlc29sdmUoKTthdD1mdW5jdGlvbigpe2h0LnRoZW4odXQpLGllJiZzZXRUaW1lb3V0KFApfSxzdD0hMH1lbHNlIGlmKGVlfHwidW5kZWZpbmVkIj09PXR5cGVvZiBNdXRhdGlvbk9ic2VydmVyfHwhdWUoTXV0YXRpb25PYnNlcnZlcikmJiJbb2JqZWN0IE11dGF0aW9uT2JzZXJ2ZXJDb25zdHJ1Y3Rvcl0iIT09TXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpKWF0PSJ1bmRlZmluZWQiIT09dHlwZW9mIHNldEltbWVkaWF0ZSYmdWUoc2V0SW1tZWRpYXRlKT9mdW5jdGlvbigpe3NldEltbWVkaWF0ZSh1dCl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dCh1dCwwKX07ZWxzZXt2YXIgZHQ9MSxmdD1uZXcgTXV0YXRpb25PYnNlcnZlcih1dCkscHQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGR0KSk7ZnQub2JzZXJ2ZShwdCx7Y2hhcmFjdGVyRGF0YTohMH0pLGF0PWZ1bmN0aW9uKCl7ZHQ9KGR0KzEpJTIscHQuZGF0YT1TdHJpbmcoZHQpfSxzdD0hMH1mdW5jdGlvbiBtdChlLHQpe3ZhciBuO2lmKGx0LnB1c2goKGZ1bmN0aW9uKCl7aWYoZSl0cnl7ZS5jYWxsKHQpfWNhdGNoKENhKXtudChDYSx0LCJuZXh0VGljayIpfWVsc2UgbiYmbih0KX0pKSxjdHx8KGN0PSEwLGF0KCkpLCFlJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBQcm9taXNlKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bj1lfSkpfXZhciBndD1uZXcgaGU7ZnVuY3Rpb24gdnQoZSl7eXQoZSxndCksZ3QuY2xlYXIoKX1mdW5jdGlvbiB5dChlLHQpe3ZhciBuLGkscj1BcnJheS5pc0FycmF5KGUpO2lmKCEoIXImJiFsKGUpfHxPYmplY3QuaXNGcm96ZW4oZSl8fGUgaW5zdGFuY2VvZiBiZSkpe2lmKGUuX19vYl9fKXt2YXIgbz1lLl9fb2JfXy5kZXAuaWQ7aWYodC5oYXMobykpcmV0dXJuO3QuYWRkKG8pfWlmKHIpe249ZS5sZW5ndGg7d2hpbGUobi0tKXl0KGVbbl0sdCl9ZWxzZXtpPU9iamVjdC5rZXlzKGUpLG49aS5sZW5ndGg7d2hpbGUobi0tKXl0KGVbaVtuXV0sdCl9fX12YXIgYnQ9XygoZnVuY3Rpb24oZSl7dmFyIHQ9IiYiPT09ZS5jaGFyQXQoMCk7ZT10P2Uuc2xpY2UoMSk6ZTt2YXIgbj0ifiI9PT1lLmNoYXJBdCgwKTtlPW4/ZS5zbGljZSgxKTplO3ZhciBpPSIhIj09PWUuY2hhckF0KDApO3JldHVybiBlPWk/ZS5zbGljZSgxKTplLHtuYW1lOmUsb25jZTpuLGNhcHR1cmU6aSxwYXNzaXZlOnR9fSkpO2Z1bmN0aW9uIHh0KGUsdCl7ZnVuY3Rpb24gbigpe3ZhciBlPWFyZ3VtZW50cyxpPW4uZm5zO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBpdChpLG51bGwsYXJndW1lbnRzLHQsInYtb24gaGFuZGxlciIpO2Zvcih2YXIgcj1pLnNsaWNlKCksbz0wO288ci5sZW5ndGg7bysrKWl0KHJbb10sbnVsbCxlLHQsInYtb24gaGFuZGxlciIpfXJldHVybiBuLmZucz1lLG59ZnVuY3Rpb24gX3QoZSx0LG4scixhLHMpe3ZhciBsLGMsdSxoO2ZvcihsIGluIGUpYz1lW2xdLHU9dFtsXSxoPWJ0KGwpLGkoYyl8fChpKHUpPyhpKGMuZm5zKSYmKGM9ZVtsXT14dChjLHMpKSxvKGgub25jZSkmJihjPWVbbF09YShoLm5hbWUsYyxoLmNhcHR1cmUpKSxuKGgubmFtZSxjLGguY2FwdHVyZSxoLnBhc3NpdmUsaC5wYXJhbXMpKTpjIT09dSYmKHUuZm5zPWMsZVtsXT11KSk7Zm9yKGwgaW4gdClpKGVbbF0pJiYoaD1idChsKSxyKGgubmFtZSx0W2xdLGguY2FwdHVyZSkpfWZ1bmN0aW9uIHd0KGUsdCxuKXt2YXIgYTtlIGluc3RhbmNlb2YgYmUmJihlPWUuZGF0YS5ob29rfHwoZS5kYXRhLmhvb2s9e30pKTt2YXIgcz1lW3RdO2Z1bmN0aW9uIGwoKXtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx5KGEuZm5zLGwpfWkocyk/YT14dChbbF0pOnIocy5mbnMpJiZvKHMubWVyZ2VkKT8oYT1zLGEuZm5zLnB1c2gobCkpOmE9eHQoW3MsbF0pLGEubWVyZ2VkPSEwLGVbdF09YX1mdW5jdGlvbiBTdChlLHQsbil7dmFyIG89dC5vcHRpb25zLnByb3BzO2lmKCFpKG8pKXt2YXIgYT17fSxzPWUuYXR0cnMsbD1lLnByb3BzO2lmKHIocyl8fHIobCkpZm9yKHZhciBjIGluIG8pe3ZhciB1PVQoYyk7Q3QoYSxsLGMsdSwhMCl8fEN0KGEscyxjLHUsITEpfXJldHVybiBhfX1mdW5jdGlvbiBDdChlLHQsbixpLG8pe2lmKHIodCkpe2lmKHgodCxuKSlyZXR1cm4gZVtuXT10W25dLG98fGRlbGV0ZSB0W25dLCEwO2lmKHgodCxpKSlyZXR1cm4gZVtuXT10W2ldLG98fGRlbGV0ZSB0W2ldLCEwfXJldHVybiExfWZ1bmN0aW9uIGt0KGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKEFycmF5LmlzQXJyYXkoZVt0XSkpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSk7cmV0dXJuIGV9ZnVuY3Rpb24gVHQoZSl7cmV0dXJuIHMoZSk/W3dlKGUpXTpBcnJheS5pc0FycmF5KGUpP0V0KGUpOnZvaWQgMH1mdW5jdGlvbiBNdChlKXtyZXR1cm4gcihlKSYmcihlLnRleHQpJiZhKGUuaXNDb21tZW50KX1mdW5jdGlvbiBFdChlLHQpe3ZhciBuLGEsbCxjLHU9W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhPWVbbl0saShhKXx8ImJvb2xlYW4iPT09dHlwZW9mIGF8fChsPXUubGVuZ3RoLTEsYz11W2xdLEFycmF5LmlzQXJyYXkoYSk/YS5sZW5ndGg+MCYmKGE9RXQoYSwodHx8IiIpKyJfIituKSxNdChhWzBdKSYmTXQoYykmJih1W2xdPXdlKGMudGV4dCthWzBdLnRleHQpLGEuc2hpZnQoKSksdS5wdXNoLmFwcGx5KHUsYSkpOnMoYSk/TXQoYyk/dVtsXT13ZShjLnRleHQrYSk6IiIhPT1hJiZ1LnB1c2god2UoYSkpOk10KGEpJiZNdChjKT91W2xdPXdlKGMudGV4dCthLnRleHQpOihvKGUuX2lzVkxpc3QpJiZyKGEudGFnKSYmaShhLmtleSkmJnIodCkmJihhLmtleT0iX192bGlzdCIrdCsiXyIrbisiX18iKSx1LnB1c2goYSkpKTtyZXR1cm4gdX1mdW5jdGlvbiBJdChlKXt2YXIgdD1lLiRvcHRpb25zLnByb3ZpZGU7dCYmKGUuX3Byb3ZpZGVkPSJmdW5jdGlvbiI9PT10eXBlb2YgdD90LmNhbGwoZSk6dCl9ZnVuY3Rpb24gRHQoZSl7dmFyIHQ9QXQoZS4kb3B0aW9ucy5pbmplY3QsZSk7dCYmKEllKCExKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXtMZShlLG4sdFtuXSl9KSksSWUoITApKX1mdW5jdGlvbiBBdChlLHQpe2lmKGUpe2Zvcih2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9ZGU/UmVmbGVjdC5vd25LZXlzKGUpOk9iamVjdC5rZXlzKGUpLHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIG89aVtyXTtpZigiX19vYl9fIiE9PW8pe3ZhciBhPWVbb10uZnJvbSxzPXQ7d2hpbGUocyl7aWYocy5fcHJvdmlkZWQmJngocy5fcHJvdmlkZWQsYSkpe25bb109cy5fcHJvdmlkZWRbYV07YnJlYWt9cz1zLiRwYXJlbnR9aWYoIXMpaWYoImRlZmF1bHQiaW4gZVtvXSl7dmFyIGw9ZVtvXS5kZWZhdWx0O25bb109ImZ1bmN0aW9uIj09PXR5cGVvZiBsP2wuY2FsbCh0KTpsfWVsc2UgMH19cmV0dXJuIG59fWZ1bmN0aW9uIE90KGUsdCl7aWYoIWV8fCFlLmxlbmd0aClyZXR1cm57fTtmb3IodmFyIG49e30saT0wLHI9ZS5sZW5ndGg7aTxyO2krKyl7dmFyIG89ZVtpXSxhPW8uZGF0YTtpZihhJiZhLmF0dHJzJiZhLmF0dHJzLnNsb3QmJmRlbGV0ZSBhLmF0dHJzLnNsb3Qsby5jb250ZXh0IT09dCYmby5mbkNvbnRleHQhPT10fHwhYXx8bnVsbD09YS5zbG90KShuLmRlZmF1bHR8fChuLmRlZmF1bHQ9W10pKS5wdXNoKG8pO2Vsc2V7dmFyIHM9YS5zbG90LGw9bltzXXx8KG5bc109W10pOyJ0ZW1wbGF0ZSI9PT1vLnRhZz9sLnB1c2guYXBwbHkobCxvLmNoaWxkcmVufHxbXSk6bC5wdXNoKG8pfX1mb3IodmFyIGMgaW4gbiluW2NdLmV2ZXJ5KFB0KSYmZGVsZXRlIG5bY107cmV0dXJuIG59ZnVuY3Rpb24gUHQoZSl7cmV0dXJuIGUuaXNDb21tZW50JiYhZS5hc3luY0ZhY3Rvcnl8fCIgIj09PWUudGV4dH1mdW5jdGlvbiBMdChlKXtyZXR1cm4gZS5pc0NvbW1lbnQmJmUuYXN5bmNGYWN0b3J5fWZ1bmN0aW9uIE50KGUsdCxpKXt2YXIgcixvPU9iamVjdC5rZXlzKHQpLmxlbmd0aD4wLGE9ZT8hIWUuJHN0YWJsZTohbyxzPWUmJmUuJGtleTtpZihlKXtpZihlLl9ub3JtYWxpemVkKXJldHVybiBlLl9ub3JtYWxpemVkO2lmKGEmJmkmJmkhPT1uJiZzPT09aS4ka2V5JiYhbyYmIWkuJGhhc05vcm1hbClyZXR1cm4gaTtmb3IodmFyIGwgaW4gcj17fSxlKWVbbF0mJiIkIiE9PWxbMF0mJihyW2xdPVJ0KHQsbCxlW2xdKSl9ZWxzZSByPXt9O2Zvcih2YXIgYyBpbiB0KWMgaW4gcnx8KHJbY109JHQodCxjKSk7cmV0dXJuIGUmJk9iamVjdC5pc0V4dGVuc2libGUoZSkmJihlLl9ub3JtYWxpemVkPXIpLEcociwiJHN0YWJsZSIsYSksRyhyLCIka2V5IixzKSxHKHIsIiRoYXNOb3JtYWwiLG8pLHJ9ZnVuY3Rpb24gUnQoZSx0LG4pe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD9uLmFwcGx5KG51bGwsYXJndW1lbnRzKTpuKHt9KTtlPWUmJiJvYmplY3QiPT09dHlwZW9mIGUmJiFBcnJheS5pc0FycmF5KGUpP1tlXTpUdChlKTt2YXIgdD1lJiZlWzBdO3JldHVybiBlJiYoIXR8fDE9PT1lLmxlbmd0aCYmdC5pc0NvbW1lbnQmJiFMdCh0KSk/dm9pZCAwOmV9O3JldHVybiBuLnByb3h5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtnZXQ6aSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGl9ZnVuY3Rpb24gJHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XX19ZnVuY3Rpb24genQoZSx0KXt2YXIgbixpLG8sYSxzO2lmKEFycmF5LmlzQXJyYXkoZSl8fCJzdHJpbmciPT09dHlwZW9mIGUpZm9yKG49bmV3IEFycmF5KGUubGVuZ3RoKSxpPTAsbz1lLmxlbmd0aDtpPG87aSsrKW5baV09dChlW2ldLGkpO2Vsc2UgaWYoIm51bWJlciI9PT10eXBlb2YgZSlmb3Iobj1uZXcgQXJyYXkoZSksaT0wO2k8ZTtpKyspbltpXT10KGkrMSxpKTtlbHNlIGlmKGwoZSkpaWYoZGUmJmVbU3ltYm9sLml0ZXJhdG9yXSl7bj1bXTt2YXIgYz1lW1N5bWJvbC5pdGVyYXRvcl0oKSx1PWMubmV4dCgpO3doaWxlKCF1LmRvbmUpbi5wdXNoKHQodS52YWx1ZSxuLmxlbmd0aCkpLHU9Yy5uZXh0KCl9ZWxzZSBmb3IoYT1PYmplY3Qua2V5cyhlKSxuPW5ldyBBcnJheShhLmxlbmd0aCksaT0wLG89YS5sZW5ndGg7aTxvO2krKylzPWFbaV0sbltpXT10KGVbc10scyxpKTtyZXR1cm4gcihuKXx8KG49W10pLG4uX2lzVkxpc3Q9ITAsbn1mdW5jdGlvbiBCdChlLHQsbixpKXt2YXIgcixvPXRoaXMuJHNjb3BlZFNsb3RzW2VdO28/KG49bnx8e30saSYmKG49QShBKHt9LGkpLG4pKSxyPW8obil8fCgiZnVuY3Rpb24iPT09dHlwZW9mIHQ/dCgpOnQpKTpyPXRoaXMuJHNsb3RzW2VdfHwoImZ1bmN0aW9uIj09PXR5cGVvZiB0P3QoKTp0KTt2YXIgYT1uJiZuLnNsb3Q7cmV0dXJuIGE/dGhpcy4kY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiLHtzbG90OmF9LHIpOnJ9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIFhlKHRoaXMuJG9wdGlvbnMsImZpbHRlcnMiLGUsITApfHxOfWZ1bmN0aW9uIFZ0KGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/LTE9PT1lLmluZGV4T2YodCk6ZSE9PXR9ZnVuY3Rpb24ganQoZSx0LG4saSxyKXt2YXIgbz1qLmtleUNvZGVzW3RdfHxuO3JldHVybiByJiZpJiYhai5rZXlDb2Rlc1t0XT9WdChyLGkpOm8/VnQobyxlKTppP1QoaSkhPT10OnZvaWQgMD09PWV9ZnVuY3Rpb24gSHQoZSx0LG4saSxyKXtpZihuKWlmKGwobikpe3ZhciBvO0FycmF5LmlzQXJyYXkobikmJihuPU8obikpO3ZhciBhPWZ1bmN0aW9uKGEpe2lmKCJjbGFzcyI9PT1hfHwic3R5bGUiPT09YXx8dihhKSlvPWU7ZWxzZXt2YXIgcz1lLmF0dHJzJiZlLmF0dHJzLnR5cGU7bz1pfHxqLm11c3RVc2VQcm9wKHQscyxhKT9lLmRvbVByb3BzfHwoZS5kb21Qcm9wcz17fSk6ZS5hdHRyc3x8KGUuYXR0cnM9e30pfXZhciBsPVMoYSksYz1UKGEpO2lmKCEobCBpbiBvKSYmIShjIGluIG8pJiYob1thXT1uW2FdLHIpKXt2YXIgdT1lLm9ufHwoZS5vbj17fSk7dVsidXBkYXRlOiIrYV09ZnVuY3Rpb24oZSl7blthXT1lfX19O2Zvcih2YXIgcyBpbiBuKWEocyl9ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBXdChlLHQpe3ZhciBuPXRoaXMuX3N0YXRpY1RyZWVzfHwodGhpcy5fc3RhdGljVHJlZXM9W10pLGk9bltlXTtyZXR1cm4gaSYmIXR8fChpPW5bZV09dGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbZV0uY2FsbCh0aGlzLl9yZW5kZXJQcm94eSxudWxsLHRoaXMpLFV0KGksIl9fc3RhdGljX18iK2UsITEpKSxpfWZ1bmN0aW9uIEd0KGUsdCxuKXtyZXR1cm4gVXQoZSwiX19vbmNlX18iK3QrKG4/Il8iK246IiIpLCEwKSxlfWZ1bmN0aW9uIFV0KGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV0mJiJzdHJpbmciIT09dHlwZW9mIGVbaV0mJnF0KGVbaV0sdCsiXyIraSxuKTtlbHNlIHF0KGUsdCxuKX1mdW5jdGlvbiBxdChlLHQsbil7ZS5pc1N0YXRpYz0hMCxlLmtleT10LGUuaXNPbmNlPW59ZnVuY3Rpb24gWXQoZSx0KXtpZih0KWlmKHUodCkpe3ZhciBuPWUub249ZS5vbj9BKHt9LGUub24pOnt9O2Zvcih2YXIgaSBpbiB0KXt2YXIgcj1uW2ldLG89dFtpXTtuW2ldPXI/W10uY29uY2F0KHIsbyk6b319ZWxzZTtyZXR1cm4gZX1mdW5jdGlvbiBYdChlLHQsbixpKXt0PXR8fHskc3RhYmxlOiFufTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG89ZVtyXTtBcnJheS5pc0FycmF5KG8pP1h0KG8sdCxuKTpvJiYoby5wcm94eSYmKG8uZm4ucHJveHk9ITApLHRbby5rZXldPW8uZm4pfXJldHVybiBpJiYodC4ka2V5PWkpLHR9ZnVuY3Rpb24gS3QoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpe3ZhciBpPXRbbl07InN0cmluZyI9PT10eXBlb2YgaSYmaSYmKGVbdFtuXV09dFtuKzFdKX1yZXR1cm4gZX1mdW5jdGlvbiBadChlLHQpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGU/dCtlOmV9ZnVuY3Rpb24gSnQoZSl7ZS5fbz1HdCxlLl9uPW0sZS5fcz1wLGUuX2w9enQsZS5fdD1CdCxlLl9xPVIsZS5faT0kLGUuX209V3QsZS5fZj1GdCxlLl9rPWp0LGUuX2I9SHQsZS5fdj13ZSxlLl9lPV9lLGUuX3U9WHQsZS5fZz1ZdCxlLl9kPUt0LGUuX3A9WnR9ZnVuY3Rpb24gUXQoZSx0LGkscixhKXt2YXIgcyxsPXRoaXMsYz1hLm9wdGlvbnM7eChyLCJfdWlkIik/KHM9T2JqZWN0LmNyZWF0ZShyKSxzLl9vcmlnaW5hbD1yKToocz1yLHI9ci5fb3JpZ2luYWwpO3ZhciB1PW8oYy5fY29tcGlsZWQpLGg9IXU7dGhpcy5kYXRhPWUsdGhpcy5wcm9wcz10LHRoaXMuY2hpbGRyZW49aSx0aGlzLnBhcmVudD1yLHRoaXMubGlzdGVuZXJzPWUub258fG4sdGhpcy5pbmplY3Rpb25zPUF0KGMuaW5qZWN0LHIpLHRoaXMuc2xvdHM9ZnVuY3Rpb24oKXtyZXR1cm4gbC4kc2xvdHN8fE50KGUuc2NvcGVkU2xvdHMsbC4kc2xvdHM9T3QoaSxyKSksbC4kc2xvdHN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJzY29wZWRTbG90cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE50KGUuc2NvcGVkU2xvdHMsdGhpcy5zbG90cygpKX19KSx1JiYodGhpcy4kb3B0aW9ucz1jLHRoaXMuJHNsb3RzPXRoaXMuc2xvdHMoKSx0aGlzLiRzY29wZWRTbG90cz1OdChlLnNjb3BlZFNsb3RzLHRoaXMuJHNsb3RzKSksYy5fc2NvcGVJZD90aGlzLl9jPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvPWZuKHMsZSx0LG4saSxoKTtyZXR1cm4gbyYmIUFycmF5LmlzQXJyYXkobykmJihvLmZuU2NvcGVJZD1jLl9zY29wZUlkLG8uZm5Db250ZXh0PXIpLG99OnRoaXMuX2M9ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIGZuKHMsZSx0LG4saSxoKX19ZnVuY3Rpb24gZW4oZSx0LGksbyxhKXt2YXIgcz1lLm9wdGlvbnMsbD17fSxjPXMucHJvcHM7aWYocihjKSlmb3IodmFyIHUgaW4gYylsW3VdPUtlKHUsYyx0fHxuKTtlbHNlIHIoaS5hdHRycykmJm5uKGwsaS5hdHRycykscihpLnByb3BzKSYmbm4obCxpLnByb3BzKTt2YXIgaD1uZXcgUXQoaSxsLGEsbyxlKSxkPXMucmVuZGVyLmNhbGwobnVsbCxoLl9jLGgpO2lmKGQgaW5zdGFuY2VvZiBiZSlyZXR1cm4gdG4oZCxpLGgucGFyZW50LHMsaCk7aWYoQXJyYXkuaXNBcnJheShkKSl7Zm9yKHZhciBmPVR0KGQpfHxbXSxwPW5ldyBBcnJheShmLmxlbmd0aCksbT0wO208Zi5sZW5ndGg7bSsrKXBbbV09dG4oZlttXSxpLGgucGFyZW50LHMsaCk7cmV0dXJuIHB9fWZ1bmN0aW9uIHRuKGUsdCxuLGkscil7dmFyIG89U2UoZSk7cmV0dXJuIG8uZm5Db250ZXh0PW4sby5mbk9wdGlvbnM9aSx0LnNsb3QmJigoby5kYXRhfHwoby5kYXRhPXt9KSkuc2xvdD10LnNsb3QpLG99ZnVuY3Rpb24gbm4oZSx0KXtmb3IodmFyIG4gaW4gdCllW1MobildPXRbbl19SnQoUXQucHJvdG90eXBlKTt2YXIgcm49e2luaXQ6ZnVuY3Rpb24oZSx0KXtpZihlLmNvbXBvbmVudEluc3RhbmNlJiYhZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQmJmUuZGF0YS5rZWVwQWxpdmUpe3ZhciBuPWU7cm4ucHJlcGF0Y2gobixuKX1lbHNle3ZhciBpPWUuY29tcG9uZW50SW5zdGFuY2U9c24oZSxBbik7aS4kbW91bnQodD9lLmVsbTp2b2lkIDAsdCl9fSxwcmVwYXRjaDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuY29tcG9uZW50T3B0aW9ucyxpPXQuY29tcG9uZW50SW5zdGFuY2U9ZS5jb21wb25lbnRJbnN0YW5jZTtSbihpLG4ucHJvcHNEYXRhLG4ubGlzdGVuZXJzLHQsbi5jaGlsZHJlbil9LGluc2VydDpmdW5jdGlvbihlKXt2YXIgdD1lLmNvbnRleHQsbj1lLmNvbXBvbmVudEluc3RhbmNlO24uX2lzTW91bnRlZHx8KG4uX2lzTW91bnRlZD0hMCxGbihuLCJtb3VudGVkIikpLGUuZGF0YS5rZWVwQWxpdmUmJih0Ll9pc01vdW50ZWQ/UW4obik6em4obiwhMCkpfSxkZXN0cm95OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29tcG9uZW50SW5zdGFuY2U7dC5faXNEZXN0cm95ZWR8fChlLmRhdGEua2VlcEFsaXZlP0JuKHQsITApOnQuJGRlc3Ryb3koKSl9fSxvbj1PYmplY3Qua2V5cyhybik7ZnVuY3Rpb24gYW4oZSx0LG4sYSxzKXtpZighaShlKSl7dmFyIGM9bi4kb3B0aW9ucy5fYmFzZTtpZihsKGUpJiYoZT1jLmV4dGVuZChlKSksImZ1bmN0aW9uIj09PXR5cGVvZiBlKXt2YXIgdTtpZihpKGUuY2lkKSYmKHU9ZSxlPVNuKHUsYyksdm9pZCAwPT09ZSkpcmV0dXJuIHduKHUsdCxuLGEscyk7dD10fHx7fSx3aShlKSxyKHQubW9kZWwpJiZ1bihlLm9wdGlvbnMsdCk7dmFyIGg9U3QodCxlLHMpO2lmKG8oZS5vcHRpb25zLmZ1bmN0aW9uYWwpKXJldHVybiBlbihlLGgsdCxuLGEpO3ZhciBkPXQub247aWYodC5vbj10Lm5hdGl2ZU9uLG8oZS5vcHRpb25zLmFic3RyYWN0KSl7dmFyIGY9dC5zbG90O3Q9e30sZiYmKHQuc2xvdD1mKX1sbih0KTt2YXIgcD1lLm9wdGlvbnMubmFtZXx8cyxtPW5ldyBiZSgidnVlLWNvbXBvbmVudC0iK2UuY2lkKyhwPyItIitwOiIiKSx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLG4se0N0b3I6ZSxwcm9wc0RhdGE6aCxsaXN0ZW5lcnM6ZCx0YWc6cyxjaGlsZHJlbjphfSx1KTtyZXR1cm4gbX19fWZ1bmN0aW9uIHNuKGUsdCl7dmFyIG49e19pc0NvbXBvbmVudDohMCxfcGFyZW50Vm5vZGU6ZSxwYXJlbnQ6dH0saT1lLmRhdGEuaW5saW5lVGVtcGxhdGU7cmV0dXJuIHIoaSkmJihuLnJlbmRlcj1pLnJlbmRlcixuLnN0YXRpY1JlbmRlckZucz1pLnN0YXRpY1JlbmRlckZucyksbmV3IGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG4pfWZ1bmN0aW9uIGxuKGUpe2Zvcih2YXIgdD1lLmhvb2t8fChlLmhvb2s9e30pLG49MDtuPG9uLmxlbmd0aDtuKyspe3ZhciBpPW9uW25dLHI9dFtpXSxvPXJuW2ldO3I9PT1vfHxyJiZyLl9tZXJnZWR8fCh0W2ldPXI/Y24obyxyKTpvKX19ZnVuY3Rpb24gY24oZSx0KXt2YXIgbj1mdW5jdGlvbihuLGkpe2UobixpKSx0KG4saSl9O3JldHVybiBuLl9tZXJnZWQ9ITAsbn1mdW5jdGlvbiB1bihlLHQpe3ZhciBuPWUubW9kZWwmJmUubW9kZWwucHJvcHx8InZhbHVlIixpPWUubW9kZWwmJmUubW9kZWwuZXZlbnR8fCJpbnB1dCI7KHQuYXR0cnN8fCh0LmF0dHJzPXt9KSlbbl09dC5tb2RlbC52YWx1ZTt2YXIgbz10Lm9ufHwodC5vbj17fSksYT1vW2ldLHM9dC5tb2RlbC5jYWxsYmFjaztyKGEpPyhBcnJheS5pc0FycmF5KGEpPy0xPT09YS5pbmRleE9mKHMpOmEhPT1zKSYmKG9baV09W3NdLmNvbmNhdChhKSk6b1tpXT1zfXZhciBobj0xLGRuPTI7ZnVuY3Rpb24gZm4oZSx0LG4saSxyLGEpe3JldHVybihBcnJheS5pc0FycmF5KG4pfHxzKG4pKSYmKHI9aSxpPW4sbj12b2lkIDApLG8oYSkmJihyPWRuKSxwbihlLHQsbixpLHIpfWZ1bmN0aW9uIHBuKGUsdCxuLGksbyl7aWYocihuKSYmcihuLl9fb2JfXykpcmV0dXJuIF9lKCk7aWYocihuKSYmcihuLmlzKSYmKHQ9bi5pcyksIXQpcmV0dXJuIF9lKCk7dmFyIGEscyxsOyhBcnJheS5pc0FycmF5KGkpJiYiZnVuY3Rpb24iPT09dHlwZW9mIGlbMF0mJihuPW58fHt9LG4uc2NvcGVkU2xvdHM9e2RlZmF1bHQ6aVswXX0saS5sZW5ndGg9MCksbz09PWRuP2k9VHQoaSk6bz09PWhuJiYoaT1rdChpKSksInN0cmluZyI9PT10eXBlb2YgdCk/KHM9ZS4kdm5vZGUmJmUuJHZub2RlLm5zfHxqLmdldFRhZ05hbWVzcGFjZSh0KSxhPWouaXNSZXNlcnZlZFRhZyh0KT9uZXcgYmUoai5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0KSxuLGksdm9pZCAwLHZvaWQgMCxlKTpuJiZuLnByZXx8IXIobD1YZShlLiRvcHRpb25zLCJjb21wb25lbnRzIix0KSk/bmV3IGJlKHQsbixpLHZvaWQgMCx2b2lkIDAsZSk6YW4obCxuLGUsaSx0KSk6YT1hbih0LG4sZSxpKTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hOnIoYSk/KHIocykmJm1uKGEscykscihuKSYmZ24obiksYSk6X2UoKX1mdW5jdGlvbiBtbihlLHQsbil7aWYoZS5ucz10LCJmb3JlaWduT2JqZWN0Ij09PWUudGFnJiYodD12b2lkIDAsbj0hMCkscihlLmNoaWxkcmVuKSlmb3IodmFyIGE9MCxzPWUuY2hpbGRyZW4ubGVuZ3RoO2E8czthKyspe3ZhciBsPWUuY2hpbGRyZW5bYV07cihsLnRhZykmJihpKGwubnMpfHxvKG4pJiYic3ZnIiE9PWwudGFnKSYmbW4obCx0LG4pfX1mdW5jdGlvbiBnbihlKXtsKGUuc3R5bGUpJiZ2dChlLnN0eWxlKSxsKGUuY2xhc3MpJiZ2dChlLmNsYXNzKX1mdW5jdGlvbiB2bihlKXtlLl92bm9kZT1udWxsLGUuX3N0YXRpY1RyZWVzPW51bGw7dmFyIHQ9ZS4kb3B0aW9ucyxpPWUuJHZub2RlPXQuX3BhcmVudFZub2RlLHI9aSYmaS5jb250ZXh0O2UuJHNsb3RzPU90KHQuX3JlbmRlckNoaWxkcmVuLHIpLGUuJHNjb3BlZFNsb3RzPW4sZS5fYz1mdW5jdGlvbih0LG4saSxyKXtyZXR1cm4gZm4oZSx0LG4saSxyLCExKX0sZS4kY3JlYXRlRWxlbWVudD1mdW5jdGlvbih0LG4saSxyKXtyZXR1cm4gZm4oZSx0LG4saSxyLCEwKX07dmFyIG89aSYmaS5kYXRhO0xlKGUsIiRhdHRycyIsbyYmby5hdHRyc3x8bixudWxsLCEwKSxMZShlLCIkbGlzdGVuZXJzIix0Ll9wYXJlbnRMaXN0ZW5lcnN8fG4sbnVsbCwhMCl9dmFyIHluLGJuPW51bGw7ZnVuY3Rpb24geG4oZSl7SnQoZS5wcm90b3R5cGUpLGUucHJvdG90eXBlLiRuZXh0VGljaz1mdW5jdGlvbihlKXtyZXR1cm4gbXQoZSx0aGlzKX0sZS5wcm90b3R5cGUuX3JlbmRlcj1mdW5jdGlvbigpe3ZhciBlLHQ9dGhpcyxuPXQuJG9wdGlvbnMsaT1uLnJlbmRlcixyPW4uX3BhcmVudFZub2RlO3ImJih0LiRzY29wZWRTbG90cz1OdChyLmRhdGEuc2NvcGVkU2xvdHMsdC4kc2xvdHMsdC4kc2NvcGVkU2xvdHMpKSx0LiR2bm9kZT1yO3RyeXtibj10LGU9aS5jYWxsKHQuX3JlbmRlclByb3h5LHQuJGNyZWF0ZUVsZW1lbnQpfWNhdGNoKENhKXtudChDYSx0LCJyZW5kZXIiKSxlPXQuX3Zub2RlfWZpbmFsbHl7Ym49bnVsbH1yZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMT09PWUubGVuZ3RoJiYoZT1lWzBdKSxlIGluc3RhbmNlb2YgYmV8fChlPV9lKCkpLGUucGFyZW50PXIsZX19ZnVuY3Rpb24gX24oZSx0KXtyZXR1cm4oZS5fX2VzTW9kdWxlfHxkZSYmIk1vZHVsZSI9PT1lW1N5bWJvbC50b1N0cmluZ1RhZ10pJiYoZT1lLmRlZmF1bHQpLGwoZSk/dC5leHRlbmQoZSk6ZX1mdW5jdGlvbiB3bihlLHQsbixpLHIpe3ZhciBvPV9lKCk7cmV0dXJuIG8uYXN5bmNGYWN0b3J5PWUsby5hc3luY01ldGE9e2RhdGE6dCxjb250ZXh0Om4sY2hpbGRyZW46aSx0YWc6cn0sb31mdW5jdGlvbiBTbihlLHQpe2lmKG8oZS5lcnJvcikmJnIoZS5lcnJvckNvbXApKXJldHVybiBlLmVycm9yQ29tcDtpZihyKGUucmVzb2x2ZWQpKXJldHVybiBlLnJlc29sdmVkO3ZhciBuPWJuO2lmKG4mJnIoZS5vd25lcnMpJiYtMT09PWUub3duZXJzLmluZGV4T2YobikmJmUub3duZXJzLnB1c2gobiksbyhlLmxvYWRpbmcpJiZyKGUubG9hZGluZ0NvbXApKXJldHVybiBlLmxvYWRpbmdDb21wO2lmKG4mJiFyKGUub3duZXJzKSl7dmFyIGE9ZS5vd25lcnM9W25dLHM9ITAsYz1udWxsLHU9bnVsbDtuLiRvbigiaG9vazpkZXN0cm95ZWQiLChmdW5jdGlvbigpe3JldHVybiB5KGEsbil9KSk7dmFyIGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1hLmxlbmd0aDt0PG47dCsrKWFbdF0uJGZvcmNlVXBkYXRlKCk7ZSYmKGEubGVuZ3RoPTAsbnVsbCE9PWMmJihjbGVhclRpbWVvdXQoYyksYz1udWxsKSxudWxsIT09dSYmKGNsZWFyVGltZW91dCh1KSx1PW51bGwpKX0sZD16KChmdW5jdGlvbihuKXtlLnJlc29sdmVkPV9uKG4sdCkscz9hLmxlbmd0aD0wOmgoITApfSkpLHA9eigoZnVuY3Rpb24odCl7cihlLmVycm9yQ29tcCkmJihlLmVycm9yPSEwLGgoITApKX0pKSxtPWUoZCxwKTtyZXR1cm4gbChtKSYmKGYobSk/aShlLnJlc29sdmVkKSYmbS50aGVuKGQscCk6ZihtLmNvbXBvbmVudCkmJihtLmNvbXBvbmVudC50aGVuKGQscCkscihtLmVycm9yKSYmKGUuZXJyb3JDb21wPV9uKG0uZXJyb3IsdCkpLHIobS5sb2FkaW5nKSYmKGUubG9hZGluZ0NvbXA9X24obS5sb2FkaW5nLHQpLDA9PT1tLmRlbGF5P2UubG9hZGluZz0hMDpjPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7Yz1udWxsLGkoZS5yZXNvbHZlZCkmJmkoZS5lcnJvcikmJihlLmxvYWRpbmc9ITAsaCghMSkpfSksbS5kZWxheXx8MjAwKSkscihtLnRpbWVvdXQpJiYodT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3U9bnVsbCxpKGUucmVzb2x2ZWQpJiZwKG51bGwpfSksbS50aW1lb3V0KSkpKSxzPSExLGUubG9hZGluZz9lLmxvYWRpbmdDb21wOmUucmVzb2x2ZWR9fWZ1bmN0aW9uIENuKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07aWYocihuKSYmKHIobi5jb21wb25lbnRPcHRpb25zKXx8THQobikpKXJldHVybiBufX1mdW5jdGlvbiBrbihlKXtlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxlLl9oYXNIb29rRXZlbnQ9ITE7dmFyIHQ9ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO3QmJkluKGUsdCl9ZnVuY3Rpb24gVG4oZSx0KXt5bi4kb24oZSx0KX1mdW5jdGlvbiBNbihlLHQpe3luLiRvZmYoZSx0KX1mdW5jdGlvbiBFbihlLHQpe3ZhciBuPXluO3JldHVybiBmdW5jdGlvbiBpKCl7dmFyIHI9dC5hcHBseShudWxsLGFyZ3VtZW50cyk7bnVsbCE9PXImJm4uJG9mZihlLGkpfX1mdW5jdGlvbiBJbihlLHQsbil7eW49ZSxfdCh0LG58fHt9LFRuLE1uLEVuLGUpLHluPXZvaWQgMH1mdW5jdGlvbiBEbihlKXt2YXIgdD0vXmhvb2s6LztlLnByb3RvdHlwZS4kb249ZnVuY3Rpb24oZSxuKXt2YXIgaT10aGlzO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKHZhciByPTAsbz1lLmxlbmd0aDtyPG87cisrKWkuJG9uKGVbcl0sbik7ZWxzZShpLl9ldmVudHNbZV18fChpLl9ldmVudHNbZV09W10pKS5wdXNoKG4pLHQudGVzdChlKSYmKGkuX2hhc0hvb2tFdmVudD0hMCk7cmV0dXJuIGl9LGUucHJvdG90eXBlLiRvbmNlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztmdW5jdGlvbiBpKCl7bi4kb2ZmKGUsaSksdC5hcHBseShuLGFyZ3VtZW50cyl9cmV0dXJuIGkuZm49dCxuLiRvbihlLGkpLG59LGUucHJvdG90eXBlLiRvZmY9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxuO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyluLiRvZmYoZVtpXSx0KTtyZXR1cm4gbn12YXIgbyxhPW4uX2V2ZW50c1tlXTtpZighYSlyZXR1cm4gbjtpZighdClyZXR1cm4gbi5fZXZlbnRzW2VdPW51bGwsbjt2YXIgcz1hLmxlbmd0aDt3aGlsZShzLS0paWYobz1hW3NdLG89PT10fHxvLmZuPT09dCl7YS5zcGxpY2UocywxKTticmVha31yZXR1cm4gbn0sZS5wcm90b3R5cGUuJGVtaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXQuX2V2ZW50c1tlXTtpZihuKXtuPW4ubGVuZ3RoPjE/RChuKTpuO2Zvcih2YXIgaT1EKGFyZ3VtZW50cywxKSxyPSdldmVudCBoYW5kbGVyIGZvciAiJytlKyciJyxvPTAsYT1uLmxlbmd0aDtvPGE7bysrKWl0KG5bb10sdCxpLHQscil9cmV0dXJuIHR9fXZhciBBbj1udWxsO2Z1bmN0aW9uIE9uKGUpe3ZhciB0PUFuO3JldHVybiBBbj1lLGZ1bmN0aW9uKCl7QW49dH19ZnVuY3Rpb24gUG4oZSl7dmFyIHQ9ZS4kb3B0aW9ucyxuPXQucGFyZW50O2lmKG4mJiF0LmFic3RyYWN0KXt3aGlsZShuLiRvcHRpb25zLmFic3RyYWN0JiZuLiRwYXJlbnQpbj1uLiRwYXJlbnQ7bi4kY2hpbGRyZW4ucHVzaChlKX1lLiRwYXJlbnQ9bixlLiRyb290PW4/bi4kcm9vdDplLGUuJGNoaWxkcmVuPVtdLGUuJHJlZnM9e30sZS5fd2F0Y2hlcj1udWxsLGUuX2luYWN0aXZlPW51bGwsZS5fZGlyZWN0SW5hY3RpdmU9ITEsZS5faXNNb3VudGVkPSExLGUuX2lzRGVzdHJveWVkPSExLGUuX2lzQmVpbmdEZXN0cm95ZWQ9ITF9ZnVuY3Rpb24gTG4oZSl7ZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMsaT1uLiRlbCxyPW4uX3Zub2RlLG89T24obik7bi5fdm5vZGU9ZSxuLiRlbD1yP24uX19wYXRjaF9fKHIsZSk6bi5fX3BhdGNoX18obi4kZWwsZSx0LCExKSxvKCksaSYmKGkuX192dWVfXz1udWxsKSxuLiRlbCYmKG4uJGVsLl9fdnVlX189biksbi4kdm5vZGUmJm4uJHBhcmVudCYmbi4kdm5vZGU9PT1uLiRwYXJlbnQuX3Zub2RlJiYobi4kcGFyZW50LiRlbD1uLiRlbCl9LGUucHJvdG90eXBlLiRmb3JjZVVwZGF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci51cGRhdGUoKX0sZS5wcm90b3R5cGUuJGRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCFlLl9pc0JlaW5nRGVzdHJveWVkKXtGbihlLCJiZWZvcmVEZXN0cm95IiksZS5faXNCZWluZ0Rlc3Ryb3llZD0hMDt2YXIgdD1lLiRwYXJlbnQ7IXR8fHQuX2lzQmVpbmdEZXN0cm95ZWR8fGUuJG9wdGlvbnMuYWJzdHJhY3R8fHkodC4kY2hpbGRyZW4sZSksZS5fd2F0Y2hlciYmZS5fd2F0Y2hlci50ZWFyZG93bigpO3ZhciBuPWUuX3dhdGNoZXJzLmxlbmd0aDt3aGlsZShuLS0pZS5fd2F0Y2hlcnNbbl0udGVhcmRvd24oKTtlLl9kYXRhLl9fb2JfXyYmZS5fZGF0YS5fX29iX18udm1Db3VudC0tLGUuX2lzRGVzdHJveWVkPSEwLGUuX19wYXRjaF9fKGUuX3Zub2RlLG51bGwpLEZuKGUsImRlc3Ryb3llZCIpLGUuJG9mZigpLGUuJGVsJiYoZS4kZWwuX192dWVfXz1udWxsKSxlLiR2bm9kZSYmKGUuJHZub2RlLnBhcmVudD1udWxsKX19fWZ1bmN0aW9uIE5uKGUsdCxuKXt2YXIgaTtyZXR1cm4gZS4kZWw9dCxlLiRvcHRpb25zLnJlbmRlcnx8KGUuJG9wdGlvbnMucmVuZGVyPV9lKSxGbihlLCJiZWZvcmVNb3VudCIpLGk9ZnVuY3Rpb24oKXtlLl91cGRhdGUoZS5fcmVuZGVyKCksbil9LG5ldyBpaShlLGksUCx7YmVmb3JlOmZ1bmN0aW9uKCl7ZS5faXNNb3VudGVkJiYhZS5faXNEZXN0cm95ZWQmJkZuKGUsImJlZm9yZVVwZGF0ZSIpfX0sITApLG49ITEsbnVsbD09ZS4kdm5vZGUmJihlLl9pc01vdW50ZWQ9ITAsRm4oZSwibW91bnRlZCIpKSxlfWZ1bmN0aW9uIFJuKGUsdCxpLHIsbyl7dmFyIGE9ci5kYXRhLnNjb3BlZFNsb3RzLHM9ZS4kc2NvcGVkU2xvdHMsbD0hIShhJiYhYS4kc3RhYmxlfHxzIT09biYmIXMuJHN0YWJsZXx8YSYmZS4kc2NvcGVkU2xvdHMuJGtleSE9PWEuJGtleXx8IWEmJmUuJHNjb3BlZFNsb3RzLiRrZXkpLGM9ISEob3x8ZS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW58fGwpO2lmKGUuJG9wdGlvbnMuX3BhcmVudFZub2RlPXIsZS4kdm5vZGU9cixlLl92bm9kZSYmKGUuX3Zub2RlLnBhcmVudD1yKSxlLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbj1vLGUuJGF0dHJzPXIuZGF0YS5hdHRyc3x8bixlLiRsaXN0ZW5lcnM9aXx8bix0JiZlLiRvcHRpb25zLnByb3BzKXtJZSghMSk7Zm9yKHZhciB1PWUuX3Byb3BzLGg9ZS4kb3B0aW9ucy5fcHJvcEtleXN8fFtdLGQ9MDtkPGgubGVuZ3RoO2QrKyl7dmFyIGY9aFtkXSxwPWUuJG9wdGlvbnMucHJvcHM7dVtmXT1LZShmLHAsdCxlKX1JZSghMCksZS4kb3B0aW9ucy5wcm9wc0RhdGE9dH1pPWl8fG47dmFyIG09ZS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO2UuJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycz1pLEluKGUsaSxtKSxjJiYoZS4kc2xvdHM9T3QobyxyLmNvbnRleHQpLGUuJGZvcmNlVXBkYXRlKCkpfWZ1bmN0aW9uICRuKGUpe3doaWxlKGUmJihlPWUuJHBhcmVudCkpaWYoZS5faW5hY3RpdmUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gem4oZSx0KXtpZih0KXtpZihlLl9kaXJlY3RJbmFjdGl2ZT0hMSwkbihlKSlyZXR1cm59ZWxzZSBpZihlLl9kaXJlY3RJbmFjdGl2ZSlyZXR1cm47aWYoZS5faW5hY3RpdmV8fG51bGw9PT1lLl9pbmFjdGl2ZSl7ZS5faW5hY3RpdmU9ITE7Zm9yKHZhciBuPTA7bjxlLiRjaGlsZHJlbi5sZW5ndGg7bisrKXpuKGUuJGNoaWxkcmVuW25dKTtGbihlLCJhY3RpdmF0ZWQiKX19ZnVuY3Rpb24gQm4oZSx0KXtpZigoIXR8fChlLl9kaXJlY3RJbmFjdGl2ZT0hMCwhJG4oZSkpKSYmIWUuX2luYWN0aXZlKXtlLl9pbmFjdGl2ZT0hMDtmb3IodmFyIG49MDtuPGUuJGNoaWxkcmVuLmxlbmd0aDtuKyspQm4oZS4kY2hpbGRyZW5bbl0pO0ZuKGUsImRlYWN0aXZhdGVkIil9fWZ1bmN0aW9uIEZuKGUsdCl7dmUoKTt2YXIgbj1lLiRvcHRpb25zW3RdLGk9dCsiIGhvb2siO2lmKG4pZm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cisrKWl0KG5bcl0sZSxudWxsLGUsaSk7ZS5faGFzSG9va0V2ZW50JiZlLiRlbWl0KCJob29rOiIrdCkseWUoKX12YXIgVm49W10sam49W10sSG49e30sV249ITEsR249ITEsVW49MDtmdW5jdGlvbiBxbigpe1VuPVZuLmxlbmd0aD1qbi5sZW5ndGg9MCxIbj17fSxXbj1Hbj0hMX12YXIgWW49MCxYbj1EYXRlLm5vdztpZihLJiYhZWUpe3ZhciBLbj13aW5kb3cucGVyZm9ybWFuY2U7S24mJiJmdW5jdGlvbiI9PT10eXBlb2YgS24ubm93JiZYbigpPmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLnRpbWVTdGFtcCYmKFhuPWZ1bmN0aW9uKCl7cmV0dXJuIEtuLm5vdygpfSl9ZnVuY3Rpb24gWm4oKXt2YXIgZSx0O2ZvcihZbj1YbigpLEduPSEwLFZuLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuaWQtdC5pZH0pKSxVbj0wO1VuPFZuLmxlbmd0aDtVbisrKWU9Vm5bVW5dLGUuYmVmb3JlJiZlLmJlZm9yZSgpLHQ9ZS5pZCxIblt0XT1udWxsLGUucnVuKCk7dmFyIG49am4uc2xpY2UoKSxpPVZuLnNsaWNlKCk7cW4oKSxlaShuKSxKbihpKSxjZSYmai5kZXZ0b29scyYmY2UuZW1pdCgiZmx1c2giKX1mdW5jdGlvbiBKbihlKXt2YXIgdD1lLmxlbmd0aDt3aGlsZSh0LS0pe3ZhciBuPWVbdF0saT1uLnZtO2kuX3dhdGNoZXI9PT1uJiZpLl9pc01vdW50ZWQmJiFpLl9pc0Rlc3Ryb3llZCYmRm4oaSwidXBkYXRlZCIpfX1mdW5jdGlvbiBRbihlKXtlLl9pbmFjdGl2ZT0hMSxqbi5wdXNoKGUpfWZ1bmN0aW9uIGVpKGUpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uX2luYWN0aXZlPSEwLHpuKGVbdF0sITApfWZ1bmN0aW9uIHRpKGUpe3ZhciB0PWUuaWQ7aWYobnVsbD09SG5bdF0pe2lmKEhuW3RdPSEwLEduKXt2YXIgbj1Wbi5sZW5ndGgtMTt3aGlsZShuPlVuJiZWbltuXS5pZD5lLmlkKW4tLTtWbi5zcGxpY2UobisxLDAsZSl9ZWxzZSBWbi5wdXNoKGUpO1dufHwoV249ITAsbXQoWm4pKX19dmFyIG5pPTAsaWk9ZnVuY3Rpb24oZSx0LG4saSxyKXt0aGlzLnZtPWUsciYmKGUuX3dhdGNoZXI9dGhpcyksZS5fd2F0Y2hlcnMucHVzaCh0aGlzKSxpPyh0aGlzLmRlZXA9ISFpLmRlZXAsdGhpcy51c2VyPSEhaS51c2VyLHRoaXMubGF6eT0hIWkubGF6eSx0aGlzLnN5bmM9ISFpLnN5bmMsdGhpcy5iZWZvcmU9aS5iZWZvcmUpOnRoaXMuZGVlcD10aGlzLnVzZXI9dGhpcy5sYXp5PXRoaXMuc3luYz0hMSx0aGlzLmNiPW4sdGhpcy5pZD0rK25pLHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IGhlLHRoaXMubmV3RGVwSWRzPW5ldyBoZSx0aGlzLmV4cHJlc3Npb249IiIsImZ1bmN0aW9uIj09PXR5cGVvZiB0P3RoaXMuZ2V0dGVyPXQ6KHRoaXMuZ2V0dGVyPXEodCksdGhpcy5nZXR0ZXJ8fCh0aGlzLmdldHRlcj1QKSksdGhpcy52YWx1ZT10aGlzLmxhenk/dm9pZCAwOnRoaXMuZ2V0KCl9O2lpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXt2YXIgZTt2ZSh0aGlzKTt2YXIgdD10aGlzLnZtO3RyeXtlPXRoaXMuZ2V0dGVyLmNhbGwodCx0KX1jYXRjaChDYSl7aWYoIXRoaXMudXNlcil0aHJvdyBDYTtudChDYSx0LCdnZXR0ZXIgZm9yIHdhdGNoZXIgIicrdGhpcy5leHByZXNzaW9uKyciJyl9ZmluYWxseXt0aGlzLmRlZXAmJnZ0KGUpLHllKCksdGhpcy5jbGVhbnVwRGVwcygpfXJldHVybiBlfSxpaS5wcm90b3R5cGUuYWRkRGVwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQ7dGhpcy5uZXdEZXBJZHMuaGFzKHQpfHwodGhpcy5uZXdEZXBJZHMuYWRkKHQpLHRoaXMubmV3RGVwcy5wdXNoKGUpLHRoaXMuZGVwSWRzLmhhcyh0KXx8ZS5hZGRTdWIodGhpcykpfSxpaS5wcm90b3R5cGUuY2xlYW51cERlcHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRlcHMubGVuZ3RoO3doaWxlKGUtLSl7dmFyIHQ9dGhpcy5kZXBzW2VdO3RoaXMubmV3RGVwSWRzLmhhcyh0LmlkKXx8dC5yZW1vdmVTdWIodGhpcyl9dmFyIG49dGhpcy5kZXBJZHM7dGhpcy5kZXBJZHM9dGhpcy5uZXdEZXBJZHMsdGhpcy5uZXdEZXBJZHM9bix0aGlzLm5ld0RlcElkcy5jbGVhcigpLG49dGhpcy5kZXBzLHRoaXMuZGVwcz10aGlzLm5ld0RlcHMsdGhpcy5uZXdEZXBzPW4sdGhpcy5uZXdEZXBzLmxlbmd0aD0wfSxpaS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5sYXp5P3RoaXMuZGlydHk9ITA6dGhpcy5zeW5jP3RoaXMucnVuKCk6dGkodGhpcyl9LGlpLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXtpZih0aGlzLmFjdGl2ZSl7dmFyIGU9dGhpcy5nZXQoKTtpZihlIT09dGhpcy52YWx1ZXx8bChlKXx8dGhpcy5kZWVwKXt2YXIgdD10aGlzLnZhbHVlO2lmKHRoaXMudmFsdWU9ZSx0aGlzLnVzZXIpe3ZhciBuPSdjYWxsYmFjayBmb3Igd2F0Y2hlciAiJyt0aGlzLmV4cHJlc3Npb24rJyInO2l0KHRoaXMuY2IsdGhpcy52bSxbZSx0XSx0aGlzLnZtLG4pfWVsc2UgdGhpcy5jYi5jYWxsKHRoaXMudm0sZSx0KX19fSxpaS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oKXt0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eT0hMX0saWkucHJvdG90eXBlLmRlcGVuZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZGVwcy5sZW5ndGg7d2hpbGUoZS0tKXRoaXMuZGVwc1tlXS5kZXBlbmQoKX0saWkucHJvdG90eXBlLnRlYXJkb3duPWZ1bmN0aW9uKCl7aWYodGhpcy5hY3RpdmUpe3RoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWR8fHkodGhpcy52bS5fd2F0Y2hlcnMsdGhpcyk7dmFyIGU9dGhpcy5kZXBzLmxlbmd0aDt3aGlsZShlLS0pdGhpcy5kZXBzW2VdLnJlbW92ZVN1Yih0aGlzKTt0aGlzLmFjdGl2ZT0hMX19O3ZhciByaT17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OlAsc2V0OlB9O2Z1bmN0aW9uIG9pKGUsdCxuKXtyaS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0XVtuXX0scmkuc2V0PWZ1bmN0aW9uKGUpe3RoaXNbdF1bbl09ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbixyaSl9ZnVuY3Rpb24gYWkoZSl7ZS5fd2F0Y2hlcnM9W107dmFyIHQ9ZS4kb3B0aW9uczt0LnByb3BzJiZzaShlLHQucHJvcHMpLHQubWV0aG9kcyYmbWkoZSx0Lm1ldGhvZHMpLHQuZGF0YT9saShlKTpQZShlLl9kYXRhPXt9LCEwKSx0LmNvbXB1dGVkJiZoaShlLHQuY29tcHV0ZWQpLHQud2F0Y2gmJnQud2F0Y2ghPT1vZSYmZ2koZSx0LndhdGNoKX1mdW5jdGlvbiBzaShlLHQpe3ZhciBuPWUuJG9wdGlvbnMucHJvcHNEYXRhfHx7fSxpPWUuX3Byb3BzPXt9LHI9ZS4kb3B0aW9ucy5fcHJvcEtleXM9W10sbz0hZS4kcGFyZW50O298fEllKCExKTt2YXIgYT1mdW5jdGlvbihvKXtyLnB1c2gobyk7dmFyIGE9S2Uobyx0LG4sZSk7TGUoaSxvLGEpLG8gaW4gZXx8b2koZSwiX3Byb3BzIixvKX07Zm9yKHZhciBzIGluIHQpYShzKTtJZSghMCl9ZnVuY3Rpb24gbGkoZSl7dmFyIHQ9ZS4kb3B0aW9ucy5kYXRhO3Q9ZS5fZGF0YT0iZnVuY3Rpb24iPT09dHlwZW9mIHQ/Y2kodCxlKTp0fHx7fSx1KHQpfHwodD17fSk7dmFyIG49T2JqZWN0LmtleXModCksaT1lLiRvcHRpb25zLnByb3BzLHI9KGUuJG9wdGlvbnMubWV0aG9kcyxuLmxlbmd0aCk7d2hpbGUoci0tKXt2YXIgbz1uW3JdOzAsaSYmeChpLG8pfHxXKG8pfHxvaShlLCJfZGF0YSIsbyl9UGUodCwhMCl9ZnVuY3Rpb24gY2koZSx0KXt2ZSgpO3RyeXtyZXR1cm4gZS5jYWxsKHQsdCl9Y2F0Y2goQ2Epe3JldHVybiBudChDYSx0LCJkYXRhKCkiKSx7fX1maW5hbGx5e3llKCl9fXZhciB1aT17bGF6eTohMH07ZnVuY3Rpb24gaGkoZSx0KXt2YXIgbj1lLl9jb21wdXRlZFdhdGNoZXJzPU9iamVjdC5jcmVhdGUobnVsbCksaT1sZSgpO2Zvcih2YXIgciBpbiB0KXt2YXIgbz10W3JdLGE9ImZ1bmN0aW9uIj09PXR5cGVvZiBvP286by5nZXQ7MCxpfHwobltyXT1uZXcgaWkoZSxhfHxQLFAsdWkpKSxyIGluIGV8fGRpKGUscixvKX19ZnVuY3Rpb24gZGkoZSx0LG4pe3ZhciBpPSFsZSgpOyJmdW5jdGlvbiI9PT10eXBlb2Ygbj8ocmkuZ2V0PWk/ZmkodCk6cGkobikscmkuc2V0PVApOihyaS5nZXQ9bi5nZXQ/aSYmITEhPT1uLmNhY2hlP2ZpKHQpOnBpKG4uZ2V0KTpQLHJpLnNldD1uLnNldHx8UCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxyaSl9ZnVuY3Rpb24gZmkoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29tcHV0ZWRXYXRjaGVycyYmdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1tlXTtpZih0KXJldHVybiB0LmRpcnR5JiZ0LmV2YWx1YXRlKCksbWUudGFyZ2V0JiZ0LmRlcGVuZCgpLHQudmFsdWV9fWZ1bmN0aW9uIHBpKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyx0aGlzKX19ZnVuY3Rpb24gbWkoZSx0KXtlLiRvcHRpb25zLnByb3BzO2Zvcih2YXIgbiBpbiB0KWVbbl09ImZ1bmN0aW9uIiE9PXR5cGVvZiB0W25dP1A6SSh0W25dLGUpfWZ1bmN0aW9uIGdpKGUsdCl7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl07aWYoQXJyYXkuaXNBcnJheShpKSlmb3IodmFyIHI9MDtyPGkubGVuZ3RoO3IrKyl2aShlLG4saVtyXSk7ZWxzZSB2aShlLG4saSl9fWZ1bmN0aW9uIHZpKGUsdCxuLGkpe3JldHVybiB1KG4pJiYoaT1uLG49bi5oYW5kbGVyKSwic3RyaW5nIj09PXR5cGVvZiBuJiYobj1lW25dKSxlLiR3YXRjaCh0LG4saSl9ZnVuY3Rpb24geWkoZSl7dmFyIHQ9e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhfX0sbj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb3BzfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCIkZGF0YSIsdCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCIkcHJvcHMiLG4pLGUucHJvdG90eXBlLiRzZXQ9TmUsZS5wcm90b3R5cGUuJGRlbGV0ZT1SZSxlLnByb3RvdHlwZS4kd2F0Y2g9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXM7aWYodSh0KSlyZXR1cm4gdmkoaSxlLHQsbik7bj1ufHx7fSxuLnVzZXI9ITA7dmFyIHI9bmV3IGlpKGksZSx0LG4pO2lmKG4uaW1tZWRpYXRlKXt2YXIgbz0nY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyICInK3IuZXhwcmVzc2lvbisnIic7dmUoKSxpdCh0LGksW3IudmFsdWVdLGksbykseWUoKX1yZXR1cm4gZnVuY3Rpb24oKXtyLnRlYXJkb3duKCl9fX12YXIgYmk9MDtmdW5jdGlvbiB4aShlKXtlLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO3QuX3VpZD1iaSsrLHQuX2lzVnVlPSEwLGUmJmUuX2lzQ29tcG9uZW50P19pKHQsZSk6dC4kb3B0aW9ucz1ZZSh3aSh0LmNvbnN0cnVjdG9yKSxlfHx7fSx0KSx0Ll9yZW5kZXJQcm94eT10LHQuX3NlbGY9dCxQbih0KSxrbih0KSx2bih0KSxGbih0LCJiZWZvcmVDcmVhdGUiKSxEdCh0KSxhaSh0KSxJdCh0KSxGbih0LCJjcmVhdGVkIiksdC4kb3B0aW9ucy5lbCYmdC4kbW91bnQodC4kb3B0aW9ucy5lbCl9fWZ1bmN0aW9uIF9pKGUsdCl7dmFyIG49ZS4kb3B0aW9ucz1PYmplY3QuY3JlYXRlKGUuY29uc3RydWN0b3Iub3B0aW9ucyksaT10Ll9wYXJlbnRWbm9kZTtuLnBhcmVudD10LnBhcmVudCxuLl9wYXJlbnRWbm9kZT1pO3ZhciByPWkuY29tcG9uZW50T3B0aW9ucztuLnByb3BzRGF0YT1yLnByb3BzRGF0YSxuLl9wYXJlbnRMaXN0ZW5lcnM9ci5saXN0ZW5lcnMsbi5fcmVuZGVyQ2hpbGRyZW49ci5jaGlsZHJlbixuLl9jb21wb25lbnRUYWc9ci50YWcsdC5yZW5kZXImJihuLnJlbmRlcj10LnJlbmRlcixuLnN0YXRpY1JlbmRlckZucz10LnN0YXRpY1JlbmRlckZucyl9ZnVuY3Rpb24gd2koZSl7dmFyIHQ9ZS5vcHRpb25zO2lmKGUuc3VwZXIpe3ZhciBuPXdpKGUuc3VwZXIpLGk9ZS5zdXBlck9wdGlvbnM7aWYobiE9PWkpe2Uuc3VwZXJPcHRpb25zPW47dmFyIHI9U2koZSk7ciYmQShlLmV4dGVuZE9wdGlvbnMsciksdD1lLm9wdGlvbnM9WWUobixlLmV4dGVuZE9wdGlvbnMpLHQubmFtZSYmKHQuY29tcG9uZW50c1t0Lm5hbWVdPWUpfX1yZXR1cm4gdH1mdW5jdGlvbiBTaShlKXt2YXIgdCxuPWUub3B0aW9ucyxpPWUuc2VhbGVkT3B0aW9ucztmb3IodmFyIHIgaW4gbiluW3JdIT09aVtyXSYmKHR8fCh0PXt9KSx0W3JdPW5bcl0pO3JldHVybiB0fWZ1bmN0aW9uIENpKGUpe3RoaXMuX2luaXQoZSl9ZnVuY3Rpb24ga2koZSl7ZS51c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5zdGFsbGVkUGx1Z2luc3x8KHRoaXMuX2luc3RhbGxlZFBsdWdpbnM9W10pO2lmKHQuaW5kZXhPZihlKT4tMSlyZXR1cm4gdGhpczt2YXIgbj1EKGFyZ3VtZW50cywxKTtyZXR1cm4gbi51bnNoaWZ0KHRoaXMpLCJmdW5jdGlvbiI9PT10eXBlb2YgZS5pbnN0YWxsP2UuaW5zdGFsbC5hcHBseShlLG4pOiJmdW5jdGlvbiI9PT10eXBlb2YgZSYmZS5hcHBseShudWxsLG4pLHQucHVzaChlKSx0aGlzfX1mdW5jdGlvbiBUaShlKXtlLm1peGluPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9wdGlvbnM9WWUodGhpcy5vcHRpb25zLGUpLHRoaXN9fWZ1bmN0aW9uIE1pKGUpe2UuY2lkPTA7dmFyIHQ9MTtlLmV4dGVuZD1mdW5jdGlvbihlKXtlPWV8fHt9O3ZhciBuPXRoaXMsaT1uLmNpZCxyPWUuX0N0b3J8fChlLl9DdG9yPXt9KTtpZihyW2ldKXJldHVybiByW2ldO3ZhciBvPWUubmFtZXx8bi5vcHRpb25zLm5hbWU7dmFyIGE9ZnVuY3Rpb24oZSl7dGhpcy5faW5pdChlKX07cmV0dXJuIGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEsYS5jaWQ9dCsrLGEub3B0aW9ucz1ZZShuLm9wdGlvbnMsZSksYVsic3VwZXIiXT1uLGEub3B0aW9ucy5wcm9wcyYmRWkoYSksYS5vcHRpb25zLmNvbXB1dGVkJiZJaShhKSxhLmV4dGVuZD1uLmV4dGVuZCxhLm1peGluPW4ubWl4aW4sYS51c2U9bi51c2UsRi5mb3JFYWNoKChmdW5jdGlvbihlKXthW2VdPW5bZV19KSksbyYmKGEub3B0aW9ucy5jb21wb25lbnRzW29dPWEpLGEuc3VwZXJPcHRpb25zPW4ub3B0aW9ucyxhLmV4dGVuZE9wdGlvbnM9ZSxhLnNlYWxlZE9wdGlvbnM9QSh7fSxhLm9wdGlvbnMpLHJbaV09YSxhfX1mdW5jdGlvbiBFaShlKXt2YXIgdD1lLm9wdGlvbnMucHJvcHM7Zm9yKHZhciBuIGluIHQpb2koZS5wcm90b3R5cGUsIl9wcm9wcyIsbil9ZnVuY3Rpb24gSWkoZSl7dmFyIHQ9ZS5vcHRpb25zLmNvbXB1dGVkO2Zvcih2YXIgbiBpbiB0KWRpKGUucHJvdG90eXBlLG4sdFtuXSl9ZnVuY3Rpb24gRGkoZSl7Ri5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG4/KCJjb21wb25lbnQiPT09dCYmdShuKSYmKG4ubmFtZT1uLm5hbWV8fGUsbj10aGlzLm9wdGlvbnMuX2Jhc2UuZXh0ZW5kKG4pKSwiZGlyZWN0aXZlIj09PXQmJiJmdW5jdGlvbiI9PT10eXBlb2YgbiYmKG49e2JpbmQ6bix1cGRhdGU6bn0pLHRoaXMub3B0aW9uc1t0KyJzIl1bZV09bixuKTp0aGlzLm9wdGlvbnNbdCsicyJdW2VdfX0pKX1mdW5jdGlvbiBBaShlKXtyZXR1cm4gZSYmKGUuQ3Rvci5vcHRpb25zLm5hbWV8fGUudGFnKX1mdW5jdGlvbiBPaShlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuaW5kZXhPZih0KT4tMToic3RyaW5nIj09PXR5cGVvZiBlP2Uuc3BsaXQoIiwiKS5pbmRleE9mKHQpPi0xOiEhaChlKSYmZS50ZXN0KHQpfWZ1bmN0aW9uIFBpKGUsdCl7dmFyIG49ZS5jYWNoZSxpPWUua2V5cyxyPWUuX3Zub2RlO2Zvcih2YXIgbyBpbiBuKXt2YXIgYT1uW29dO2lmKGEpe3ZhciBzPWEubmFtZTtzJiYhdChzKSYmTGkobixvLGkscil9fX1mdW5jdGlvbiBMaShlLHQsbixpKXt2YXIgcj1lW3RdOyFyfHxpJiZyLnRhZz09PWkudGFnfHxyLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCksZVt0XT1udWxsLHkobix0KX14aShDaSkseWkoQ2kpLERuKENpKSxMbihDaSkseG4oQ2kpO3ZhciBOaT1bU3RyaW5nLFJlZ0V4cCxBcnJheV0sUmk9e25hbWU6ImtlZXAtYWxpdmUiLGFic3RyYWN0OiEwLHByb3BzOntpbmNsdWRlOk5pLGV4Y2x1ZGU6TmksbWF4OltTdHJpbmcsTnVtYmVyXX0sbWV0aG9kczp7Y2FjaGVWTm9kZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLmNhY2hlLG49ZS5rZXlzLGk9ZS52bm9kZVRvQ2FjaGUscj1lLmtleVRvQ2FjaGU7aWYoaSl7dmFyIG89aS50YWcsYT1pLmNvbXBvbmVudEluc3RhbmNlLHM9aS5jb21wb25lbnRPcHRpb25zO3Rbcl09e25hbWU6QWkocyksdGFnOm8sY29tcG9uZW50SW5zdGFuY2U6YX0sbi5wdXNoKHIpLHRoaXMubWF4JiZuLmxlbmd0aD5wYXJzZUludCh0aGlzLm1heCkmJkxpKHQsblswXSxuLHRoaXMuX3Zub2RlKSx0aGlzLnZub2RlVG9DYWNoZT1udWxsfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5rZXlzPVtdfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5jYWNoZSlMaSh0aGlzLmNhY2hlLGUsdGhpcy5rZXlzKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jYWNoZVZOb2RlKCksdGhpcy4kd2F0Y2goImluY2x1ZGUiLChmdW5jdGlvbih0KXtQaShlLChmdW5jdGlvbihlKXtyZXR1cm4gT2kodCxlKX0pKX0pKSx0aGlzLiR3YXRjaCgiZXhjbHVkZSIsKGZ1bmN0aW9uKHQpe1BpKGUsKGZ1bmN0aW9uKGUpe3JldHVybiFPaSh0LGUpfSkpfSkpfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dGhpcy5jYWNoZVZOb2RlKCl9LHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNsb3RzLmRlZmF1bHQsdD1DbihlKSxuPXQmJnQuY29tcG9uZW50T3B0aW9ucztpZihuKXt2YXIgaT1BaShuKSxyPXRoaXMsbz1yLmluY2x1ZGUsYT1yLmV4Y2x1ZGU7aWYobyYmKCFpfHwhT2kobyxpKSl8fGEmJmkmJk9pKGEsaSkpcmV0dXJuIHQ7dmFyIHM9dGhpcyxsPXMuY2FjaGUsYz1zLmtleXMsdT1udWxsPT10LmtleT9uLkN0b3IuY2lkKyhuLnRhZz8iOjoiK24udGFnOiIiKTp0LmtleTtsW3VdPyh0LmNvbXBvbmVudEluc3RhbmNlPWxbdV0uY29tcG9uZW50SW5zdGFuY2UseShjLHUpLGMucHVzaCh1KSk6KHRoaXMudm5vZGVUb0NhY2hlPXQsdGhpcy5rZXlUb0NhY2hlPXUpLHQuZGF0YS5rZWVwQWxpdmU9ITB9cmV0dXJuIHR8fGUmJmVbMF19fSwkaT17S2VlcEFsaXZlOlJpfTtmdW5jdGlvbiB6aShlKXt2YXIgdD17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY29uZmlnIix0KSxlLnV0aWw9e3dhcm46ZmUsZXh0ZW5kOkEsbWVyZ2VPcHRpb25zOlllLGRlZmluZVJlYWN0aXZlOkxlfSxlLnNldD1OZSxlLmRlbGV0ZT1SZSxlLm5leHRUaWNrPW10LGUub2JzZXJ2YWJsZT1mdW5jdGlvbihlKXtyZXR1cm4gUGUoZSksZX0sZS5vcHRpb25zPU9iamVjdC5jcmVhdGUobnVsbCksRi5mb3JFYWNoKChmdW5jdGlvbih0KXtlLm9wdGlvbnNbdCsicyJdPU9iamVjdC5jcmVhdGUobnVsbCl9KSksZS5vcHRpb25zLl9iYXNlPWUsQShlLm9wdGlvbnMuY29tcG9uZW50cywkaSksa2koZSksVGkoZSksTWkoZSksRGkoZSl9emkoQ2kpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaS5wcm90b3R5cGUsIiRpc1NlcnZlciIse2dldDpsZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaS5wcm90b3R5cGUsIiRzc3JDb250ZXh0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaSwiRnVuY3Rpb25hbFJlbmRlckNvbnRleHQiLHt2YWx1ZTpRdH0pLENpLnZlcnNpb249IjIuNi4xNCI7dmFyIEJpPWcoInN0eWxlLGNsYXNzIiksRmk9ZygiaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcyIpLFZpPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4idmFsdWUiPT09biYmRmkoZSkmJiJidXR0b24iIT09dHx8InNlbGVjdGVkIj09PW4mJiJvcHRpb24iPT09ZXx8ImNoZWNrZWQiPT09biYmImlucHV0Ij09PWV8fCJtdXRlZCI9PT1uJiYidmlkZW8iPT09ZX0samk9ZygiY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrIiksSGk9ZygiZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seSIpLFdpPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFhpKHQpfHwiZmFsc2UiPT09dD8iZmFsc2UiOiJjb250ZW50ZWRpdGFibGUiPT09ZSYmSGkodCk/dDoidHJ1ZSJ9LEdpPWcoImFsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLGVuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSxyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJ1ZXNwZWVkLHR5cGVtdXN0bWF0Y2gsdmlzaWJsZSIpLFVpPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixxaT1mdW5jdGlvbihlKXtyZXR1cm4iOiI9PT1lLmNoYXJBdCg1KSYmInhsaW5rIj09PWUuc2xpY2UoMCw1KX0sWWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHFpKGUpP2Uuc2xpY2UoNixlLmxlbmd0aCk6IiJ9LFhpPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHwhMT09PWV9O2Z1bmN0aW9uIEtpKGUpe3ZhciB0PWUuZGF0YSxuPWUsaT1lO3doaWxlKHIoaS5jb21wb25lbnRJbnN0YW5jZSkpaT1pLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSxpJiZpLmRhdGEmJih0PVppKGkuZGF0YSx0KSk7d2hpbGUocihuPW4ucGFyZW50KSluJiZuLmRhdGEmJih0PVppKHQsbi5kYXRhKSk7cmV0dXJuIEppKHQuc3RhdGljQ2xhc3MsdC5jbGFzcyl9ZnVuY3Rpb24gWmkoZSx0KXtyZXR1cm57c3RhdGljQ2xhc3M6UWkoZS5zdGF0aWNDbGFzcyx0LnN0YXRpY0NsYXNzKSxjbGFzczpyKGUuY2xhc3MpP1tlLmNsYXNzLHQuY2xhc3NdOnQuY2xhc3N9fWZ1bmN0aW9uIEppKGUsdCl7cmV0dXJuIHIoZSl8fHIodCk/UWkoZSxlcih0KSk6IiJ9ZnVuY3Rpb24gUWkoZSx0KXtyZXR1cm4gZT90P2UrIiAiK3Q6ZTp0fHwiIn1mdW5jdGlvbiBlcihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT90cihlKTpsKGUpP25yKGUpOiJzdHJpbmciPT09dHlwZW9mIGU/ZToiIn1mdW5jdGlvbiB0cihlKXtmb3IodmFyIHQsbj0iIixpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXIodD1lcihlW2ldKSkmJiIiIT09dCYmKG4mJihuKz0iICIpLG4rPXQpO3JldHVybiBufWZ1bmN0aW9uIG5yKGUpe3ZhciB0PSIiO2Zvcih2YXIgbiBpbiBlKWVbbl0mJih0JiYodCs9IiAiKSx0Kz1uKTtyZXR1cm4gdH12YXIgaXI9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwifSxycj1nKCJodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSxhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sZGl2LGRkLGRsLGR0LGZpZ2NhcHRpb24sZmlndXJlLHBpY3R1cmUsaHIsaW1nLGxpLG1haW4sb2wscCxwcmUsdWwsYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLGVtYmVkLG9iamVjdCxwYXJhbSxzb3VyY2UsY2FudmFzLHNjcmlwdCxub3NjcmlwdCxkZWwsaW5zLGNhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLGJ1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sb3V0cHV0LHByb2dyZXNzLHNlbGVjdCx0ZXh0YXJlYSxkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCIpLG9yPWcoInN2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSxmb3JlaWdub2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybixwb2x5Z29uLHBvbHlsaW5lLHJlY3Qsc3dpdGNoLHN5bWJvbCx0ZXh0LHRleHRwYXRoLHRzcGFuLHVzZSx2aWV3IiwhMCksYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHJyKGUpfHxvcihlKX07ZnVuY3Rpb24gc3IoZSl7cmV0dXJuIG9yKGUpPyJzdmciOiJtYXRoIj09PWU/Im1hdGgiOnZvaWQgMH12YXIgbHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBjcihlKXtpZighSylyZXR1cm4hMDtpZihhcihlKSlyZXR1cm4hMTtpZihlPWUudG9Mb3dlckNhc2UoKSxudWxsIT1scltlXSlyZXR1cm4gbHJbZV07dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4gZS5pbmRleE9mKCItIik+LTE/bHJbZV09dC5jb25zdHJ1Y3Rvcj09PXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnR8fHQuY29uc3RydWN0b3I9PT13aW5kb3cuSFRNTEVsZW1lbnQ6bHJbZV09L0hUTUxVbmtub3duRWxlbWVudC8udGVzdCh0LnRvU3RyaW5nKCkpfXZhciB1cj1nKCJ0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCIpO2Z1bmN0aW9uIGhyKGUpe2lmKCJzdHJpbmciPT09dHlwZW9mIGUpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk7cmV0dXJuIHR8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfXJldHVybiBlfWZ1bmN0aW9uIGRyKGUsdCl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKTtyZXR1cm4ic2VsZWN0IiE9PWV8fHQuZGF0YSYmdC5kYXRhLmF0dHJzJiZ2b2lkIDAhPT10LmRhdGEuYXR0cnMubXVsdGlwbGUmJm4uc2V0QXR0cmlidXRlKCJtdWx0aXBsZSIsIm11bHRpcGxlIiksbn1mdW5jdGlvbiBmcihlLHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoaXJbZV0sdCl9ZnVuY3Rpb24gcHIoZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpfWZ1bmN0aW9uIG1yKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KGUpfWZ1bmN0aW9uIGdyKGUsdCxuKXtlLmluc2VydEJlZm9yZSh0LG4pfWZ1bmN0aW9uIHZyKGUsdCl7ZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiB5cihlLHQpe2UuYXBwZW5kQ2hpbGQodCl9ZnVuY3Rpb24gYnIoZSl7cmV0dXJuIGUucGFyZW50Tm9kZX1mdW5jdGlvbiB4cihlKXtyZXR1cm4gZS5uZXh0U2libGluZ31mdW5jdGlvbiBfcihlKXtyZXR1cm4gZS50YWdOYW1lfWZ1bmN0aW9uIHdyKGUsdCl7ZS50ZXh0Q29udGVudD10fWZ1bmN0aW9uIFNyKGUsdCl7ZS5zZXRBdHRyaWJ1dGUodCwiIil9dmFyIENyPU9iamVjdC5mcmVlemUoe2NyZWF0ZUVsZW1lbnQ6ZHIsY3JlYXRlRWxlbWVudE5TOmZyLGNyZWF0ZVRleHROb2RlOnByLGNyZWF0ZUNvbW1lbnQ6bXIsaW5zZXJ0QmVmb3JlOmdyLHJlbW92ZUNoaWxkOnZyLGFwcGVuZENoaWxkOnlyLHBhcmVudE5vZGU6YnIsbmV4dFNpYmxpbmc6eHIsdGFnTmFtZTpfcixzZXRUZXh0Q29udGVudDp3cixzZXRTdHlsZVNjb3BlOlNyfSksa3I9e2NyZWF0ZTpmdW5jdGlvbihlLHQpe1RyKHQpfSx1cGRhdGU6ZnVuY3Rpb24oZSx0KXtlLmRhdGEucmVmIT09dC5kYXRhLnJlZiYmKFRyKGUsITApLFRyKHQpKX0sZGVzdHJveTpmdW5jdGlvbihlKXtUcihlLCEwKX19O2Z1bmN0aW9uIFRyKGUsdCl7dmFyIG49ZS5kYXRhLnJlZjtpZihyKG4pKXt2YXIgaT1lLmNvbnRleHQsbz1lLmNvbXBvbmVudEluc3RhbmNlfHxlLmVsbSxhPWkuJHJlZnM7dD9BcnJheS5pc0FycmF5KGFbbl0pP3koYVtuXSxvKTphW25dPT09byYmKGFbbl09dm9pZCAwKTplLmRhdGEucmVmSW5Gb3I/QXJyYXkuaXNBcnJheShhW25dKT9hW25dLmluZGV4T2Yobyk8MCYmYVtuXS5wdXNoKG8pOmFbbl09W29dOmFbbl09b319dmFyIE1yPW5ldyBiZSgiIix7fSxbXSksRXI9WyJjcmVhdGUiLCJhY3RpdmF0ZSIsInVwZGF0ZSIsInJlbW92ZSIsImRlc3Ryb3kiXTtmdW5jdGlvbiBJcihlLHQpe3JldHVybiBlLmtleT09PXQua2V5JiZlLmFzeW5jRmFjdG9yeT09PXQuYXN5bmNGYWN0b3J5JiYoZS50YWc9PT10LnRhZyYmZS5pc0NvbW1lbnQ9PT10LmlzQ29tbWVudCYmcihlLmRhdGEpPT09cih0LmRhdGEpJiZEcihlLHQpfHxvKGUuaXNBc3luY1BsYWNlaG9sZGVyKSYmaSh0LmFzeW5jRmFjdG9yeS5lcnJvcikpfWZ1bmN0aW9uIERyKGUsdCl7aWYoImlucHV0IiE9PWUudGFnKXJldHVybiEwO3ZhciBuLGk9cihuPWUuZGF0YSkmJnIobj1uLmF0dHJzKSYmbi50eXBlLG89cihuPXQuZGF0YSkmJnIobj1uLmF0dHJzKSYmbi50eXBlO3JldHVybiBpPT09b3x8dXIoaSkmJnVyKG8pfWZ1bmN0aW9uIEFyKGUsdCxuKXt2YXIgaSxvLGE9e307Zm9yKGk9dDtpPD1uOysraSlvPWVbaV0ua2V5LHIobykmJihhW29dPWkpO3JldHVybiBhfWZ1bmN0aW9uIE9yKGUpe3ZhciB0LG4sYT17fSxsPWUubW9kdWxlcyxjPWUubm9kZU9wcztmb3IodD0wO3Q8RXIubGVuZ3RoOysrdClmb3IoYVtFclt0XV09W10sbj0wO248bC5sZW5ndGg7KytuKXIobFtuXVtFclt0XV0pJiZhW0VyW3RdXS5wdXNoKGxbbl1bRXJbdF1dKTtmdW5jdGlvbiB1KGUpe3JldHVybiBuZXcgYmUoYy50YWdOYW1lKGUpLnRvTG93ZXJDYXNlKCkse30sW10sdm9pZCAwLGUpfWZ1bmN0aW9uIGgoZSx0KXtmdW5jdGlvbiBuKCl7MD09PS0tbi5saXN0ZW5lcnMmJmQoZSl9cmV0dXJuIG4ubGlzdGVuZXJzPXQsbn1mdW5jdGlvbiBkKGUpe3ZhciB0PWMucGFyZW50Tm9kZShlKTtyKHQpJiZjLnJlbW92ZUNoaWxkKHQsZSl9ZnVuY3Rpb24gZihlLHQsbixpLGEscyxsKXtpZihyKGUuZWxtKSYmcihzKSYmKGU9c1tsXT1TZShlKSksZS5pc1Jvb3RJbnNlcnQ9IWEsIXAoZSx0LG4saSkpe3ZhciB1PWUuZGF0YSxoPWUuY2hpbGRyZW4sZD1lLnRhZztyKGQpPyhlLmVsbT1lLm5zP2MuY3JlYXRlRWxlbWVudE5TKGUubnMsZCk6Yy5jcmVhdGVFbGVtZW50KGQsZSksdyhlKSxiKGUsaCx0KSxyKHUpJiZfKGUsdCkseShuLGUuZWxtLGkpKTpvKGUuaXNDb21tZW50KT8oZS5lbG09Yy5jcmVhdGVDb21tZW50KGUudGV4dCkseShuLGUuZWxtLGkpKTooZS5lbG09Yy5jcmVhdGVUZXh0Tm9kZShlLnRleHQpLHkobixlLmVsbSxpKSl9fWZ1bmN0aW9uIHAoZSx0LG4saSl7dmFyIGE9ZS5kYXRhO2lmKHIoYSkpe3ZhciBzPXIoZS5jb21wb25lbnRJbnN0YW5jZSkmJmEua2VlcEFsaXZlO2lmKHIoYT1hLmhvb2spJiZyKGE9YS5pbml0KSYmYShlLCExKSxyKGUuY29tcG9uZW50SW5zdGFuY2UpKXJldHVybiBtKGUsdCkseShuLGUuZWxtLGkpLG8ocykmJnYoZSx0LG4saSksITB9fWZ1bmN0aW9uIG0oZSx0KXtyKGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSYmKHQucHVzaC5hcHBseSh0LGUuZGF0YS5wZW5kaW5nSW5zZXJ0KSxlLmRhdGEucGVuZGluZ0luc2VydD1udWxsKSxlLmVsbT1lLmNvbXBvbmVudEluc3RhbmNlLiRlbCx4KGUpPyhfKGUsdCksdyhlKSk6KFRyKGUpLHQucHVzaChlKSl9ZnVuY3Rpb24gdihlLHQsbixpKXt2YXIgbyxzPWU7d2hpbGUocy5jb21wb25lbnRJbnN0YW5jZSlpZihzPXMuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLHIobz1zLmRhdGEpJiZyKG89by50cmFuc2l0aW9uKSl7Zm9yKG89MDtvPGEuYWN0aXZhdGUubGVuZ3RoOysrbylhLmFjdGl2YXRlW29dKE1yLHMpO3QucHVzaChzKTticmVha315KG4sZS5lbG0saSl9ZnVuY3Rpb24geShlLHQsbil7cihlKSYmKHIobik/Yy5wYXJlbnROb2RlKG4pPT09ZSYmYy5pbnNlcnRCZWZvcmUoZSx0LG4pOmMuYXBwZW5kQ2hpbGQoZSx0KSl9ZnVuY3Rpb24gYihlLHQsbil7aWYoQXJyYXkuaXNBcnJheSh0KSl7MDtmb3IodmFyIGk9MDtpPHQubGVuZ3RoOysraSlmKHRbaV0sbixlLmVsbSxudWxsLCEwLHQsaSl9ZWxzZSBzKGUudGV4dCkmJmMuYXBwZW5kQ2hpbGQoZS5lbG0sYy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcoZS50ZXh0KSkpfWZ1bmN0aW9uIHgoZSl7d2hpbGUoZS5jb21wb25lbnRJbnN0YW5jZSllPWUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO3JldHVybiByKGUudGFnKX1mdW5jdGlvbiBfKGUsbil7Zm9yKHZhciBpPTA7aTxhLmNyZWF0ZS5sZW5ndGg7KytpKWEuY3JlYXRlW2ldKE1yLGUpO3Q9ZS5kYXRhLmhvb2sscih0KSYmKHIodC5jcmVhdGUpJiZ0LmNyZWF0ZShNcixlKSxyKHQuaW5zZXJ0KSYmbi5wdXNoKGUpKX1mdW5jdGlvbiB3KGUpe3ZhciB0O2lmKHIodD1lLmZuU2NvcGVJZCkpYy5zZXRTdHlsZVNjb3BlKGUuZWxtLHQpO2Vsc2V7dmFyIG49ZTt3aGlsZShuKXIodD1uLmNvbnRleHQpJiZyKHQ9dC4kb3B0aW9ucy5fc2NvcGVJZCkmJmMuc2V0U3R5bGVTY29wZShlLmVsbSx0KSxuPW4ucGFyZW50fXIodD1BbikmJnQhPT1lLmNvbnRleHQmJnQhPT1lLmZuQ29udGV4dCYmcih0PXQuJG9wdGlvbnMuX3Njb3BlSWQpJiZjLnNldFN0eWxlU2NvcGUoZS5lbG0sdCl9ZnVuY3Rpb24gUyhlLHQsbixpLHIsbyl7Zm9yKDtpPD1yOysraSlmKG5baV0sbyxlLHQsITEsbixpKX1mdW5jdGlvbiBDKGUpe3ZhciB0LG4saT1lLmRhdGE7aWYocihpKSlmb3Iocih0PWkuaG9vaykmJnIodD10LmRlc3Ryb3kpJiZ0KGUpLHQ9MDt0PGEuZGVzdHJveS5sZW5ndGg7Kyt0KWEuZGVzdHJveVt0XShlKTtpZihyKHQ9ZS5jaGlsZHJlbikpZm9yKG49MDtuPGUuY2hpbGRyZW4ubGVuZ3RoOysrbilDKGUuY2hpbGRyZW5bbl0pfWZ1bmN0aW9uIGsoZSx0LG4pe2Zvcig7dDw9bjsrK3Qpe3ZhciBpPWVbdF07cihpKSYmKHIoaS50YWcpPyhUKGkpLEMoaSkpOmQoaS5lbG0pKX19ZnVuY3Rpb24gVChlLHQpe2lmKHIodCl8fHIoZS5kYXRhKSl7dmFyIG4saT1hLnJlbW92ZS5sZW5ndGgrMTtmb3Iocih0KT90Lmxpc3RlbmVycys9aTp0PWgoZS5lbG0saSkscihuPWUuY29tcG9uZW50SW5zdGFuY2UpJiZyKG49bi5fdm5vZGUpJiZyKG4uZGF0YSkmJlQobix0KSxuPTA7bjxhLnJlbW92ZS5sZW5ndGg7KytuKWEucmVtb3ZlW25dKGUsdCk7cihuPWUuZGF0YS5ob29rKSYmcihuPW4ucmVtb3ZlKT9uKGUsdCk6dCgpfWVsc2UgZChlLmVsbSl9ZnVuY3Rpb24gTShlLHQsbixvLGEpe3ZhciBzLGwsdSxoLGQ9MCxwPTAsbT10Lmxlbmd0aC0xLGc9dFswXSx2PXRbbV0seT1uLmxlbmd0aC0xLGI9blswXSx4PW5beV0sXz0hYTt3aGlsZShkPD1tJiZwPD15KWkoZyk/Zz10WysrZF06aSh2KT92PXRbLS1tXTpJcihnLGIpPyhJKGcsYixvLG4scCksZz10WysrZF0sYj1uWysrcF0pOklyKHYseCk/KEkodix4LG8sbix5KSx2PXRbLS1tXSx4PW5bLS15XSk6SXIoZyx4KT8oSShnLHgsbyxuLHkpLF8mJmMuaW5zZXJ0QmVmb3JlKGUsZy5lbG0sYy5uZXh0U2libGluZyh2LmVsbSkpLGc9dFsrK2RdLHg9blstLXldKTpJcih2LGIpPyhJKHYsYixvLG4scCksXyYmYy5pbnNlcnRCZWZvcmUoZSx2LmVsbSxnLmVsbSksdj10Wy0tbV0sYj1uWysrcF0pOihpKHMpJiYocz1Bcih0LGQsbSkpLGw9cihiLmtleSk/c1tiLmtleV06RShiLHQsZCxtKSxpKGwpP2YoYixvLGUsZy5lbG0sITEsbixwKToodT10W2xdLElyKHUsYik/KEkodSxiLG8sbixwKSx0W2xdPXZvaWQgMCxfJiZjLmluc2VydEJlZm9yZShlLHUuZWxtLGcuZWxtKSk6ZihiLG8sZSxnLmVsbSwhMSxuLHApKSxiPW5bKytwXSk7ZD5tPyhoPWkoblt5KzFdKT9udWxsOm5beSsxXS5lbG0sUyhlLGgsbixwLHksbykpOnA+eSYmayh0LGQsbSl9ZnVuY3Rpb24gRShlLHQsbixpKXtmb3IodmFyIG89bjtvPGk7bysrKXt2YXIgYT10W29dO2lmKHIoYSkmJklyKGUsYSkpcmV0dXJuIG99fWZ1bmN0aW9uIEkoZSx0LG4scyxsLHUpe2lmKGUhPT10KXtyKHQuZWxtKSYmcihzKSYmKHQ9c1tsXT1TZSh0KSk7dmFyIGg9dC5lbG09ZS5lbG07aWYobyhlLmlzQXN5bmNQbGFjZWhvbGRlcikpcih0LmFzeW5jRmFjdG9yeS5yZXNvbHZlZCk/TyhlLmVsbSx0LG4pOnQuaXNBc3luY1BsYWNlaG9sZGVyPSEwO2Vsc2UgaWYobyh0LmlzU3RhdGljKSYmbyhlLmlzU3RhdGljKSYmdC5rZXk9PT1lLmtleSYmKG8odC5pc0Nsb25lZCl8fG8odC5pc09uY2UpKSl0LmNvbXBvbmVudEluc3RhbmNlPWUuY29tcG9uZW50SW5zdGFuY2U7ZWxzZXt2YXIgZCxmPXQuZGF0YTtyKGYpJiZyKGQ9Zi5ob29rKSYmcihkPWQucHJlcGF0Y2gpJiZkKGUsdCk7dmFyIHA9ZS5jaGlsZHJlbixtPXQuY2hpbGRyZW47aWYocihmKSYmeCh0KSl7Zm9yKGQ9MDtkPGEudXBkYXRlLmxlbmd0aDsrK2QpYS51cGRhdGVbZF0oZSx0KTtyKGQ9Zi5ob29rKSYmcihkPWQudXBkYXRlKSYmZChlLHQpfWkodC50ZXh0KT9yKHApJiZyKG0pP3AhPT1tJiZNKGgscCxtLG4sdSk6cihtKT8ocihlLnRleHQpJiZjLnNldFRleHRDb250ZW50KGgsIiIpLFMoaCxudWxsLG0sMCxtLmxlbmd0aC0xLG4pKTpyKHApP2socCwwLHAubGVuZ3RoLTEpOnIoZS50ZXh0KSYmYy5zZXRUZXh0Q29udGVudChoLCIiKTplLnRleHQhPT10LnRleHQmJmMuc2V0VGV4dENvbnRlbnQoaCx0LnRleHQpLHIoZikmJnIoZD1mLmhvb2spJiZyKGQ9ZC5wb3N0cGF0Y2gpJiZkKGUsdCl9fX1mdW5jdGlvbiBEKGUsdCxuKXtpZihvKG4pJiZyKGUucGFyZW50KSllLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQ9dDtlbHNlIGZvcih2YXIgaT0wO2k8dC5sZW5ndGg7KytpKXRbaV0uZGF0YS5ob29rLmluc2VydCh0W2ldKX12YXIgQT1nKCJhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXkiKTtmdW5jdGlvbiBPKGUsdCxuLGkpe3ZhciBhLHM9dC50YWcsbD10LmRhdGEsYz10LmNoaWxkcmVuO2lmKGk9aXx8bCYmbC5wcmUsdC5lbG09ZSxvKHQuaXNDb21tZW50KSYmcih0LmFzeW5jRmFjdG9yeSkpcmV0dXJuIHQuaXNBc3luY1BsYWNlaG9sZGVyPSEwLCEwO2lmKHIobCkmJihyKGE9bC5ob29rKSYmcihhPWEuaW5pdCkmJmEodCwhMCkscihhPXQuY29tcG9uZW50SW5zdGFuY2UpKSlyZXR1cm4gbSh0LG4pLCEwO2lmKHIocykpe2lmKHIoYykpaWYoZS5oYXNDaGlsZE5vZGVzKCkpaWYocihhPWwpJiZyKGE9YS5kb21Qcm9wcykmJnIoYT1hLmlubmVySFRNTCkpe2lmKGEhPT1lLmlubmVySFRNTClyZXR1cm4hMX1lbHNle2Zvcih2YXIgdT0hMCxoPWUuZmlyc3RDaGlsZCxkPTA7ZDxjLmxlbmd0aDtkKyspe2lmKCFofHwhTyhoLGNbZF0sbixpKSl7dT0hMTticmVha31oPWgubmV4dFNpYmxpbmd9aWYoIXV8fGgpcmV0dXJuITF9ZWxzZSBiKHQsYyxuKTtpZihyKGwpKXt2YXIgZj0hMTtmb3IodmFyIHAgaW4gbClpZighQShwKSl7Zj0hMCxfKHQsbik7YnJlYWt9IWYmJmxbImNsYXNzIl0mJnZ0KGxbImNsYXNzIl0pfX1lbHNlIGUuZGF0YSE9PXQudGV4dCYmKGUuZGF0YT10LnRleHQpO3JldHVybiEwfXJldHVybiBmdW5jdGlvbihlLHQsbixzKXtpZighaSh0KSl7dmFyIGw9ITEsaD1bXTtpZihpKGUpKWw9ITAsZih0LGgpO2Vsc2V7dmFyIGQ9cihlLm5vZGVUeXBlKTtpZighZCYmSXIoZSx0KSlJKGUsdCxoLG51bGwsbnVsbCxzKTtlbHNle2lmKGQpe2lmKDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZShCKSYmKGUucmVtb3ZlQXR0cmlidXRlKEIpLG49ITApLG8obikmJk8oZSx0LGgpKXJldHVybiBEKHQsaCwhMCksZTtlPXUoZSl9dmFyIHA9ZS5lbG0sbT1jLnBhcmVudE5vZGUocCk7aWYoZih0LGgscC5fbGVhdmVDYj9udWxsOm0sYy5uZXh0U2libGluZyhwKSkscih0LnBhcmVudCkpe3ZhciBnPXQucGFyZW50LHY9eCh0KTt3aGlsZShnKXtmb3IodmFyIHk9MDt5PGEuZGVzdHJveS5sZW5ndGg7Kyt5KWEuZGVzdHJveVt5XShnKTtpZihnLmVsbT10LmVsbSx2KXtmb3IodmFyIGI9MDtiPGEuY3JlYXRlLmxlbmd0aDsrK2IpYS5jcmVhdGVbYl0oTXIsZyk7dmFyIF89Zy5kYXRhLmhvb2suaW5zZXJ0O2lmKF8ubWVyZ2VkKWZvcih2YXIgdz0xO3c8Xy5mbnMubGVuZ3RoO3crKylfLmZuc1t3XSgpfWVsc2UgVHIoZyk7Zz1nLnBhcmVudH19cihtKT9rKFtlXSwwLDApOnIoZS50YWcpJiZDKGUpfX1yZXR1cm4gRCh0LGgsbCksdC5lbG19cihlKSYmQyhlKX19dmFyIFByPXtjcmVhdGU6THIsdXBkYXRlOkxyLGRlc3Ryb3k6ZnVuY3Rpb24oZSl7THIoZSxNcil9fTtmdW5jdGlvbiBMcihlLHQpeyhlLmRhdGEuZGlyZWN0aXZlc3x8dC5kYXRhLmRpcmVjdGl2ZXMpJiZOcihlLHQpfWZ1bmN0aW9uIE5yKGUsdCl7dmFyIG4saSxyLG89ZT09PU1yLGE9dD09PU1yLHM9JHIoZS5kYXRhLmRpcmVjdGl2ZXMsZS5jb250ZXh0KSxsPSRyKHQuZGF0YS5kaXJlY3RpdmVzLHQuY29udGV4dCksYz1bXSx1PVtdO2ZvcihuIGluIGwpaT1zW25dLHI9bFtuXSxpPyhyLm9sZFZhbHVlPWkudmFsdWUsci5vbGRBcmc9aS5hcmcsQnIociwidXBkYXRlIix0LGUpLHIuZGVmJiZyLmRlZi5jb21wb25lbnRVcGRhdGVkJiZ1LnB1c2gocikpOihCcihyLCJiaW5kIix0LGUpLHIuZGVmJiZyLmRlZi5pbnNlcnRlZCYmYy5wdXNoKHIpKTtpZihjLmxlbmd0aCl7dmFyIGg9ZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPGMubGVuZ3RoO24rKylCcihjW25dLCJpbnNlcnRlZCIsdCxlKX07bz93dCh0LCJpbnNlcnQiLGgpOmgoKX1pZih1Lmxlbmd0aCYmd3QodCwicG9zdHBhdGNoIiwoZnVuY3Rpb24oKXtmb3IodmFyIG49MDtuPHUubGVuZ3RoO24rKylCcih1W25dLCJjb21wb25lbnRVcGRhdGVkIix0LGUpfSkpLCFvKWZvcihuIGluIHMpbFtuXXx8QnIoc1tuXSwidW5iaW5kIixlLGUsYSl9dmFyIFJyPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gJHIoZSx0KXt2YXIgbixpLHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gcjtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWk9ZVtuXSxpLm1vZGlmaWVyc3x8KGkubW9kaWZpZXJzPVJyKSxyW3pyKGkpXT1pLGkuZGVmPVhlKHQuJG9wdGlvbnMsImRpcmVjdGl2ZXMiLGkubmFtZSwhMCk7cmV0dXJuIHJ9ZnVuY3Rpb24genIoZSl7cmV0dXJuIGUucmF3TmFtZXx8ZS5uYW1lKyIuIitPYmplY3Qua2V5cyhlLm1vZGlmaWVyc3x8e30pLmpvaW4oIi4iKX1mdW5jdGlvbiBCcihlLHQsbixpLHIpe3ZhciBvPWUuZGVmJiZlLmRlZlt0XTtpZihvKXRyeXtvKG4uZWxtLGUsbixpLHIpfWNhdGNoKENhKXtudChDYSxuLmNvbnRleHQsImRpcmVjdGl2ZSAiK2UubmFtZSsiICIrdCsiIGhvb2siKX19dmFyIEZyPVtrcixQcl07ZnVuY3Rpb24gVnIoZSx0KXt2YXIgbj10LmNvbXBvbmVudE9wdGlvbnM7aWYoKCFyKG4pfHwhMSE9PW4uQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycykmJighaShlLmRhdGEuYXR0cnMpfHwhaSh0LmRhdGEuYXR0cnMpKSl7dmFyIG8sYSxzLGw9dC5lbG0sYz1lLmRhdGEuYXR0cnN8fHt9LHU9dC5kYXRhLmF0dHJzfHx7fTtmb3IobyBpbiByKHUuX19vYl9fKSYmKHU9dC5kYXRhLmF0dHJzPUEoe30sdSkpLHUpYT11W29dLHM9Y1tvXSxzIT09YSYmanIobCxvLGEsdC5kYXRhLnByZSk7Zm9yKG8gaW4oZWV8fG5lKSYmdS52YWx1ZSE9PWMudmFsdWUmJmpyKGwsInZhbHVlIix1LnZhbHVlKSxjKWkodVtvXSkmJihxaShvKT9sLnJlbW92ZUF0dHJpYnV0ZU5TKFVpLFlpKG8pKTpqaShvKXx8bC5yZW1vdmVBdHRyaWJ1dGUobykpfX1mdW5jdGlvbiBqcihlLHQsbixpKXtpfHxlLnRhZ05hbWUuaW5kZXhPZigiLSIpPi0xP0hyKGUsdCxuKTpHaSh0KT9YaShuKT9lLnJlbW92ZUF0dHJpYnV0ZSh0KToobj0iYWxsb3dmdWxsc2NyZWVuIj09PXQmJiJFTUJFRCI9PT1lLnRhZ05hbWU/InRydWUiOnQsZS5zZXRBdHRyaWJ1dGUodCxuKSk6amkodCk/ZS5zZXRBdHRyaWJ1dGUodCxXaSh0LG4pKTpxaSh0KT9YaShuKT9lLnJlbW92ZUF0dHJpYnV0ZU5TKFVpLFlpKHQpKTplLnNldEF0dHJpYnV0ZU5TKFVpLHQsbik6SHIoZSx0LG4pfWZ1bmN0aW9uIEhyKGUsdCxuKXtpZihYaShuKSllLnJlbW92ZUF0dHJpYnV0ZSh0KTtlbHNle2lmKGVlJiYhdGUmJiJURVhUQVJFQSI9PT1lLnRhZ05hbWUmJiJwbGFjZWhvbGRlciI9PT10JiYiIiE9PW4mJiFlLl9faWVwaCl7dmFyIGk9ZnVuY3Rpb24odCl7dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImlucHV0IixpKX07ZS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsaSksZS5fX2llcGg9ITB9ZS5zZXRBdHRyaWJ1dGUodCxuKX19dmFyIFdyPXtjcmVhdGU6VnIsdXBkYXRlOlZyfTtmdW5jdGlvbiBHcihlLHQpe3ZhciBuPXQuZWxtLG89dC5kYXRhLGE9ZS5kYXRhO2lmKCEoaShvLnN0YXRpY0NsYXNzKSYmaShvLmNsYXNzKSYmKGkoYSl8fGkoYS5zdGF0aWNDbGFzcykmJmkoYS5jbGFzcykpKSl7dmFyIHM9S2kodCksbD1uLl90cmFuc2l0aW9uQ2xhc3NlcztyKGwpJiYocz1RaShzLGVyKGwpKSkscyE9PW4uX3ByZXZDbGFzcyYmKG4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyksbi5fcHJldkNsYXNzPXMpfX12YXIgVXIscXI9e2NyZWF0ZTpHcix1cGRhdGU6R3J9LFlyPSJfX3IiLFhyPSJfX2MiO2Z1bmN0aW9uIEtyKGUpe2lmKHIoZVtZcl0pKXt2YXIgdD1lZT8iY2hhbmdlIjoiaW5wdXQiO2VbdF09W10uY29uY2F0KGVbWXJdLGVbdF18fFtdKSxkZWxldGUgZVtZcl19cihlW1hyXSkmJihlLmNoYW5nZT1bXS5jb25jYXQoZVtYcl0sZS5jaGFuZ2V8fFtdKSxkZWxldGUgZVtYcl0pfWZ1bmN0aW9uIFpyKGUsdCxuKXt2YXIgaT1VcjtyZXR1cm4gZnVuY3Rpb24gcigpe3ZhciBvPXQuYXBwbHkobnVsbCxhcmd1bWVudHMpO251bGwhPT1vJiZlbyhlLHIsbixpKX19dmFyIEpyPXN0JiYhKHJlJiZOdW1iZXIocmVbMV0pPD01Myk7ZnVuY3Rpb24gUXIoZSx0LG4saSl7aWYoSnIpe3ZhciByPVluLG89dDt0PW8uX3dyYXBwZXI9ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXR8fGUudGltZVN0YW1wPj1yfHxlLnRpbWVTdGFtcDw9MHx8ZS50YXJnZXQub3duZXJEb2N1bWVudCE9PWRvY3VtZW50KXJldHVybiBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19VXIuYWRkRXZlbnRMaXN0ZW5lcihlLHQsYWU/e2NhcHR1cmU6bixwYXNzaXZlOml9Om4pfWZ1bmN0aW9uIGVvKGUsdCxuLGkpeyhpfHxVcikucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHQuX3dyYXBwZXJ8fHQsbil9ZnVuY3Rpb24gdG8oZSx0KXtpZighaShlLmRhdGEub24pfHwhaSh0LmRhdGEub24pKXt2YXIgbj10LmRhdGEub258fHt9LHI9ZS5kYXRhLm9ufHx7fTtVcj10LmVsbSxLcihuKSxfdChuLHIsUXIsZW8sWnIsdC5jb250ZXh0KSxVcj12b2lkIDB9fXZhciBubyxpbz17Y3JlYXRlOnRvLHVwZGF0ZTp0b307ZnVuY3Rpb24gcm8oZSx0KXtpZighaShlLmRhdGEuZG9tUHJvcHMpfHwhaSh0LmRhdGEuZG9tUHJvcHMpKXt2YXIgbixvLGE9dC5lbG0scz1lLmRhdGEuZG9tUHJvcHN8fHt9LGw9dC5kYXRhLmRvbVByb3BzfHx7fTtmb3IobiBpbiByKGwuX19vYl9fKSYmKGw9dC5kYXRhLmRvbVByb3BzPUEoe30sbCkpLHMpbiBpbiBsfHwoYVtuXT0iIik7Zm9yKG4gaW4gbCl7aWYobz1sW25dLCJ0ZXh0Q29udGVudCI9PT1ufHwiaW5uZXJIVE1MIj09PW4pe2lmKHQuY2hpbGRyZW4mJih0LmNoaWxkcmVuLmxlbmd0aD0wKSxvPT09c1tuXSljb250aW51ZTsxPT09YS5jaGlsZE5vZGVzLmxlbmd0aCYmYS5yZW1vdmVDaGlsZChhLmNoaWxkTm9kZXNbMF0pfWlmKCJ2YWx1ZSI9PT1uJiYiUFJPR1JFU1MiIT09YS50YWdOYW1lKXthLl92YWx1ZT1vO3ZhciBjPWkobyk/IiI6U3RyaW5nKG8pO29vKGEsYykmJihhLnZhbHVlPWMpfWVsc2UgaWYoImlubmVySFRNTCI9PT1uJiZvcihhLnRhZ05hbWUpJiZpKGEuaW5uZXJIVE1MKSl7bm89bm98fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG5vLmlubmVySFRNTD0iPHN2Zz4iK28rIjwvc3ZnPiI7dmFyIHU9bm8uZmlyc3RDaGlsZDt3aGlsZShhLmZpcnN0Q2hpbGQpYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpO3doaWxlKHUuZmlyc3RDaGlsZClhLmFwcGVuZENoaWxkKHUuZmlyc3RDaGlsZCl9ZWxzZSBpZihvIT09c1tuXSl0cnl7YVtuXT1vfWNhdGNoKENhKXt9fX19ZnVuY3Rpb24gb28oZSx0KXtyZXR1cm4hZS5jb21wb3NpbmcmJigiT1BUSU9OIj09PWUudGFnTmFtZXx8YW8oZSx0KXx8c28oZSx0KSl9ZnVuY3Rpb24gYW8oZSx0KXt2YXIgbj0hMDt0cnl7bj1kb2N1bWVudC5hY3RpdmVFbGVtZW50IT09ZX1jYXRjaChDYSl7fXJldHVybiBuJiZlLnZhbHVlIT09dH1mdW5jdGlvbiBzbyhlLHQpe3ZhciBuPWUudmFsdWUsaT1lLl92TW9kaWZpZXJzO2lmKHIoaSkpe2lmKGkubnVtYmVyKXJldHVybiBtKG4pIT09bSh0KTtpZihpLnRyaW0pcmV0dXJuIG4udHJpbSgpIT09dC50cmltKCl9cmV0dXJuIG4hPT10fXZhciBsbz17Y3JlYXRlOnJvLHVwZGF0ZTpyb30sY289XygoZnVuY3Rpb24oZSl7dmFyIHQ9e30sbj0vOyg/IVteKF0qXCkpL2csaT0vOiguKykvO3JldHVybiBlLnNwbGl0KG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUpe3ZhciBuPWUuc3BsaXQoaSk7bi5sZW5ndGg+MSYmKHRbblswXS50cmltKCldPW5bMV0udHJpbSgpKX19KSksdH0pKTtmdW5jdGlvbiB1byhlKXt2YXIgdD1obyhlLnN0eWxlKTtyZXR1cm4gZS5zdGF0aWNTdHlsZT9BKGUuc3RhdGljU3R5bGUsdCk6dH1mdW5jdGlvbiBobyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9PKGUpOiJzdHJpbmciPT09dHlwZW9mIGU/Y28oZSk6ZX1mdW5jdGlvbiBmbyhlLHQpe3ZhciBuLGk9e307aWYodCl7dmFyIHI9ZTt3aGlsZShyLmNvbXBvbmVudEluc3RhbmNlKXI9ci5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUsciYmci5kYXRhJiYobj11byhyLmRhdGEpKSYmQShpLG4pfShuPXVvKGUuZGF0YSkpJiZBKGksbik7dmFyIG89ZTt3aGlsZShvPW8ucGFyZW50KW8uZGF0YSYmKG49dW8oby5kYXRhKSkmJkEoaSxuKTtyZXR1cm4gaX12YXIgcG8sbW89L14tLS8sZ289L1xzKiFpbXBvcnRhbnQkLyx2bz1mdW5jdGlvbihlLHQsbil7aWYobW8udGVzdCh0KSllLnN0eWxlLnNldFByb3BlcnR5KHQsbik7ZWxzZSBpZihnby50ZXN0KG4pKWUuc3R5bGUuc2V0UHJvcGVydHkoVCh0KSxuLnJlcGxhY2UoZ28sIiIpLCJpbXBvcnRhbnQiKTtlbHNle3ZhciBpPWJvKHQpO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciByPTAsbz1uLmxlbmd0aDtyPG87cisrKWUuc3R5bGVbaV09bltyXTtlbHNlIGUuc3R5bGVbaV09bn19LHlvPVsiV2Via2l0IiwiTW96IiwibXMiXSxibz1fKChmdW5jdGlvbihlKXtpZihwbz1wb3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsZT1TKGUpLCJmaWx0ZXIiIT09ZSYmZSBpbiBwbylyZXR1cm4gZTtmb3IodmFyIHQ9ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49MDtuPHlvLmxlbmd0aDtuKyspe3ZhciBpPXlvW25dK3Q7aWYoaSBpbiBwbylyZXR1cm4gaX19KSk7ZnVuY3Rpb24geG8oZSx0KXt2YXIgbj10LmRhdGEsbz1lLmRhdGE7aWYoIShpKG4uc3RhdGljU3R5bGUpJiZpKG4uc3R5bGUpJiZpKG8uc3RhdGljU3R5bGUpJiZpKG8uc3R5bGUpKSl7dmFyIGEscyxsPXQuZWxtLGM9by5zdGF0aWNTdHlsZSx1PW8ubm9ybWFsaXplZFN0eWxlfHxvLnN0eWxlfHx7fSxoPWN8fHUsZD1obyh0LmRhdGEuc3R5bGUpfHx7fTt0LmRhdGEubm9ybWFsaXplZFN0eWxlPXIoZC5fX29iX18pP0Eoe30sZCk6ZDt2YXIgZj1mbyh0LCEwKTtmb3IocyBpbiBoKWkoZltzXSkmJnZvKGwscywiIik7Zm9yKHMgaW4gZilhPWZbc10sYSE9PWhbc10mJnZvKGwscyxudWxsPT1hPyIiOmEpfX12YXIgX289e2NyZWF0ZTp4byx1cGRhdGU6eG99LHdvPS9ccysvO2Z1bmN0aW9uIFNvKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZigiICIpPi0xP3Quc3BsaXQod28pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsYXNzTGlzdC5hZGQodCl9KSk6ZS5jbGFzc0xpc3QuYWRkKHQpO2Vsc2V7dmFyIG49IiAiKyhlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgIjtuLmluZGV4T2YoIiAiK3QrIiAiKTwwJiZlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLChuK3QpLnRyaW0oKSl9fWZ1bmN0aW9uIENvKGUsdCl7aWYodCYmKHQ9dC50cmltKCkpKWlmKGUuY2xhc3NMaXN0KXQuaW5kZXhPZigiICIpPi0xP3Quc3BsaXQod28pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiBlLmNsYXNzTGlzdC5yZW1vdmUodCl9KSk6ZS5jbGFzc0xpc3QucmVtb3ZlKHQpLGUuY2xhc3NMaXN0Lmxlbmd0aHx8ZS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7ZWxzZXt2YXIgbj0iICIrKGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIikrIiAiLGk9IiAiK3QrIiAiO3doaWxlKG4uaW5kZXhPZihpKT49MCluPW4ucmVwbGFjZShpLCIgIik7bj1uLnRyaW0oKSxuP2Uuc2V0QXR0cmlidXRlKCJjbGFzcyIsbik6ZS5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIil9fWZ1bmN0aW9uIGtvKGUpe2lmKGUpe2lmKCJvYmplY3QiPT09dHlwZW9mIGUpe3ZhciB0PXt9O3JldHVybiExIT09ZS5jc3MmJkEodCxUbyhlLm5hbWV8fCJ2IikpLEEodCxlKSx0fXJldHVybiJzdHJpbmciPT09dHlwZW9mIGU/VG8oZSk6dm9pZCAwfX12YXIgVG89XygoZnVuY3Rpb24oZSl7cmV0dXJue2VudGVyQ2xhc3M6ZSsiLWVudGVyIixlbnRlclRvQ2xhc3M6ZSsiLWVudGVyLXRvIixlbnRlckFjdGl2ZUNsYXNzOmUrIi1lbnRlci1hY3RpdmUiLGxlYXZlQ2xhc3M6ZSsiLWxlYXZlIixsZWF2ZVRvQ2xhc3M6ZSsiLWxlYXZlLXRvIixsZWF2ZUFjdGl2ZUNsYXNzOmUrIi1sZWF2ZS1hY3RpdmUifX0pKSxNbz1LJiYhdGUsRW89InRyYW5zaXRpb24iLElvPSJhbmltYXRpb24iLERvPSJ0cmFuc2l0aW9uIixBbz0idHJhbnNpdGlvbmVuZCIsT289ImFuaW1hdGlvbiIsUG89ImFuaW1hdGlvbmVuZCI7TW8mJih2b2lkIDA9PT13aW5kb3cub250cmFuc2l0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kJiYoRG89IldlYmtpdFRyYW5zaXRpb24iLEFvPSJ3ZWJraXRUcmFuc2l0aW9uRW5kIiksdm9pZCAwPT09d2luZG93Lm9uYW5pbWF0aW9uZW5kJiZ2b2lkIDAhPT13aW5kb3cub253ZWJraXRhbmltYXRpb25lbmQmJihPbz0iV2Via2l0QW5pbWF0aW9uIixQbz0id2Via2l0QW5pbWF0aW9uRW5kIikpO3ZhciBMbz1LP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6c2V0VGltZW91dDpmdW5jdGlvbihlKXtyZXR1cm4gZSgpfTtmdW5jdGlvbiBObyhlKXtMbygoZnVuY3Rpb24oKXtMbyhlKX0pKX1mdW5jdGlvbiBSbyhlLHQpe3ZhciBuPWUuX3RyYW5zaXRpb25DbGFzc2VzfHwoZS5fdHJhbnNpdGlvbkNsYXNzZXM9W10pO24uaW5kZXhPZih0KTwwJiYobi5wdXNoKHQpLFNvKGUsdCkpfWZ1bmN0aW9uICRvKGUsdCl7ZS5fdHJhbnNpdGlvbkNsYXNzZXMmJnkoZS5fdHJhbnNpdGlvbkNsYXNzZXMsdCksQ28oZSx0KX1mdW5jdGlvbiB6byhlLHQsbil7dmFyIGk9Rm8oZSx0KSxyPWkudHlwZSxvPWkudGltZW91dCxhPWkucHJvcENvdW50O2lmKCFyKXJldHVybiBuKCk7dmFyIHM9cj09PUVvP0FvOlBvLGw9MCxjPWZ1bmN0aW9uKCl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHMsdSksbigpfSx1PWZ1bmN0aW9uKHQpe3QudGFyZ2V0PT09ZSYmKytsPj1hJiZjKCl9O3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bDxhJiZjKCl9KSxvKzEpLGUuYWRkRXZlbnRMaXN0ZW5lcihzLHUpfXZhciBCbz0vXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87ZnVuY3Rpb24gRm8oZSx0KXt2YXIgbixpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLHI9KGlbRG8rIkRlbGF5Il18fCIiKS5zcGxpdCgiLCAiKSxvPShpW0RvKyJEdXJhdGlvbiJdfHwiIikuc3BsaXQoIiwgIiksYT1WbyhyLG8pLHM9KGlbT28rIkRlbGF5Il18fCIiKS5zcGxpdCgiLCAiKSxsPShpW09vKyJEdXJhdGlvbiJdfHwiIikuc3BsaXQoIiwgIiksYz1WbyhzLGwpLHU9MCxoPTA7dD09PUVvP2E+MCYmKG49RW8sdT1hLGg9by5sZW5ndGgpOnQ9PT1Jbz9jPjAmJihuPUlvLHU9YyxoPWwubGVuZ3RoKToodT1NYXRoLm1heChhLGMpLG49dT4wP2E+Yz9FbzpJbzpudWxsLGg9bj9uPT09RW8/by5sZW5ndGg6bC5sZW5ndGg6MCk7dmFyIGQ9bj09PUVvJiZCby50ZXN0KGlbRG8rIlByb3BlcnR5Il0pO3JldHVybnt0eXBlOm4sdGltZW91dDp1LHByb3BDb3VudDpoLGhhc1RyYW5zZm9ybTpkfX1mdW5jdGlvbiBWbyhlLHQpe3doaWxlKGUubGVuZ3RoPHQubGVuZ3RoKWU9ZS5jb25jYXQoZSk7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGpvKHQpK2pvKGVbbl0pfSkpKX1mdW5jdGlvbiBqbyhlKXtyZXR1cm4gMWUzKk51bWJlcihlLnNsaWNlKDAsLTEpLnJlcGxhY2UoIiwiLCIuIikpfWZ1bmN0aW9uIEhvKGUsdCl7dmFyIG49ZS5lbG07cihuLl9sZWF2ZUNiKSYmKG4uX2xlYXZlQ2IuY2FuY2VsbGVkPSEwLG4uX2xlYXZlQ2IoKSk7dmFyIG89a28oZS5kYXRhLnRyYW5zaXRpb24pO2lmKCFpKG8pJiYhcihuLl9lbnRlckNiKSYmMT09PW4ubm9kZVR5cGUpe3ZhciBhPW8uY3NzLHM9by50eXBlLGM9by5lbnRlckNsYXNzLHU9by5lbnRlclRvQ2xhc3MsaD1vLmVudGVyQWN0aXZlQ2xhc3MsZD1vLmFwcGVhckNsYXNzLGY9by5hcHBlYXJUb0NsYXNzLHA9by5hcHBlYXJBY3RpdmVDbGFzcyxnPW8uYmVmb3JlRW50ZXIsdj1vLmVudGVyLHk9by5hZnRlckVudGVyLGI9by5lbnRlckNhbmNlbGxlZCx4PW8uYmVmb3JlQXBwZWFyLF89by5hcHBlYXIsdz1vLmFmdGVyQXBwZWFyLFM9by5hcHBlYXJDYW5jZWxsZWQsQz1vLmR1cmF0aW9uLGs9QW4sVD1Bbi4kdm5vZGU7d2hpbGUoVCYmVC5wYXJlbnQpaz1ULmNvbnRleHQsVD1ULnBhcmVudDt2YXIgTT0hay5faXNNb3VudGVkfHwhZS5pc1Jvb3RJbnNlcnQ7aWYoIU18fF98fCIiPT09Xyl7dmFyIEU9TSYmZD9kOmMsST1NJiZwP3A6aCxEPU0mJmY/Zjp1LEE9TSYmeHx8ZyxPPU0mJiJmdW5jdGlvbiI9PT10eXBlb2YgXz9fOnYsUD1NJiZ3fHx5LEw9TSYmU3x8YixOPW0obChDKT9DLmVudGVyOkMpOzA7dmFyIFI9ITEhPT1hJiYhdGUsJD1VbyhPKSxCPW4uX2VudGVyQ2I9eigoZnVuY3Rpb24oKXtSJiYoJG8obixEKSwkbyhuLEkpKSxCLmNhbmNlbGxlZD8oUiYmJG8obixFKSxMJiZMKG4pKTpQJiZQKG4pLG4uX2VudGVyQ2I9bnVsbH0pKTtlLmRhdGEuc2hvd3x8d3QoZSwiaW5zZXJ0IiwoZnVuY3Rpb24oKXt2YXIgdD1uLnBhcmVudE5vZGUsaT10JiZ0Ll9wZW5kaW5nJiZ0Ll9wZW5kaW5nW2Uua2V5XTtpJiZpLnRhZz09PWUudGFnJiZpLmVsbS5fbGVhdmVDYiYmaS5lbG0uX2xlYXZlQ2IoKSxPJiZPKG4sQil9KSksQSYmQShuKSxSJiYoUm8obixFKSxSbyhuLEkpLE5vKChmdW5jdGlvbigpeyRvKG4sRSksQi5jYW5jZWxsZWR8fChSbyhuLEQpLCR8fChHbyhOKT9zZXRUaW1lb3V0KEIsTik6em8obixzLEIpKSl9KSkpLGUuZGF0YS5zaG93JiYodCYmdCgpLE8mJk8obixCKSksUnx8JHx8QigpfX19ZnVuY3Rpb24gV28oZSx0KXt2YXIgbj1lLmVsbTtyKG4uX2VudGVyQ2IpJiYobi5fZW50ZXJDYi5jYW5jZWxsZWQ9ITAsbi5fZW50ZXJDYigpKTt2YXIgbz1rbyhlLmRhdGEudHJhbnNpdGlvbik7aWYoaShvKXx8MSE9PW4ubm9kZVR5cGUpcmV0dXJuIHQoKTtpZighcihuLl9sZWF2ZUNiKSl7dmFyIGE9by5jc3Mscz1vLnR5cGUsYz1vLmxlYXZlQ2xhc3MsdT1vLmxlYXZlVG9DbGFzcyxoPW8ubGVhdmVBY3RpdmVDbGFzcyxkPW8uYmVmb3JlTGVhdmUsZj1vLmxlYXZlLHA9by5hZnRlckxlYXZlLGc9by5sZWF2ZUNhbmNlbGxlZCx2PW8uZGVsYXlMZWF2ZSx5PW8uZHVyYXRpb24sYj0hMSE9PWEmJiF0ZSx4PVVvKGYpLF89bShsKHkpP3kubGVhdmU6eSk7MDt2YXIgdz1uLl9sZWF2ZUNiPXooKGZ1bmN0aW9uKCl7bi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUuX3BlbmRpbmcmJihuLnBhcmVudE5vZGUuX3BlbmRpbmdbZS5rZXldPW51bGwpLGImJigkbyhuLHUpLCRvKG4saCkpLHcuY2FuY2VsbGVkPyhiJiYkbyhuLGMpLGcmJmcobikpOih0KCkscCYmcChuKSksbi5fbGVhdmVDYj1udWxsfSkpO3Y/dihTKTpTKCl9ZnVuY3Rpb24gUygpe3cuY2FuY2VsbGVkfHwoIWUuZGF0YS5zaG93JiZuLnBhcmVudE5vZGUmJigobi5wYXJlbnROb2RlLl9wZW5kaW5nfHwobi5wYXJlbnROb2RlLl9wZW5kaW5nPXt9KSlbZS5rZXldPWUpLGQmJmQobiksYiYmKFJvKG4sYyksUm8obixoKSxObygoZnVuY3Rpb24oKXskbyhuLGMpLHcuY2FuY2VsbGVkfHwoUm8obix1KSx4fHwoR28oXyk/c2V0VGltZW91dCh3LF8pOnpvKG4scyx3KSkpfSkpKSxmJiZmKG4sdyksYnx8eHx8dygpKX19ZnVuY3Rpb24gR28oZSl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgZSYmIWlzTmFOKGUpfWZ1bmN0aW9uIFVvKGUpe2lmKGkoZSkpcmV0dXJuITE7dmFyIHQ9ZS5mbnM7cmV0dXJuIHIodCk/VW8oQXJyYXkuaXNBcnJheSh0KT90WzBdOnQpOihlLl9sZW5ndGh8fGUubGVuZ3RoKT4xfWZ1bmN0aW9uIHFvKGUsdCl7ITAhPT10LmRhdGEuc2hvdyYmSG8odCl9dmFyIFlvPUs/e2NyZWF0ZTpxbyxhY3RpdmF0ZTpxbyxyZW1vdmU6ZnVuY3Rpb24oZSx0KXshMCE9PWUuZGF0YS5zaG93P1dvKGUsdCk6dCgpfX06e30sWG89W1dyLHFyLGlvLGxvLF9vLFlvXSxLbz1Yby5jb25jYXQoRnIpLFpvPU9yKHtub2RlT3BzOkNyLG1vZHVsZXM6S299KTt0ZSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwoZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UmJmUudm1vZGVsJiZvYShlLCJpbnB1dCIpfSkpO3ZhciBKbz17aW5zZXJ0ZWQ6ZnVuY3Rpb24oZSx0LG4saSl7InNlbGVjdCI9PT1uLnRhZz8oaS5lbG0mJiFpLmVsbS5fdk9wdGlvbnM/d3QobiwicG9zdHBhdGNoIiwoZnVuY3Rpb24oKXtKby5jb21wb25lbnRVcGRhdGVkKGUsdCxuKX0pKTpRbyhlLHQsbi5jb250ZXh0KSxlLl92T3B0aW9ucz1bXS5tYXAuY2FsbChlLm9wdGlvbnMsbmEpKTooInRleHRhcmVhIj09PW4udGFnfHx1cihlLnR5cGUpKSYmKGUuX3ZNb2RpZmllcnM9dC5tb2RpZmllcnMsdC5tb2RpZmllcnMubGF6eXx8KGUuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsaWEpLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLHJhKSxlLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIscmEpLHRlJiYoZS52bW9kZWw9ITApKSl9LGNvbXBvbmVudFVwZGF0ZWQ6ZnVuY3Rpb24oZSx0LG4pe2lmKCJzZWxlY3QiPT09bi50YWcpe1FvKGUsdCxuLmNvbnRleHQpO3ZhciBpPWUuX3ZPcHRpb25zLHI9ZS5fdk9wdGlvbnM9W10ubWFwLmNhbGwoZS5vcHRpb25zLG5hKTtpZihyLnNvbWUoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIVIoZSxpW3RdKX0pKSl7dmFyIG89ZS5tdWx0aXBsZT90LnZhbHVlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiB0YShlLHIpfSkpOnQudmFsdWUhPT10Lm9sZFZhbHVlJiZ0YSh0LnZhbHVlLHIpO28mJm9hKGUsImNoYW5nZSIpfX19fTtmdW5jdGlvbiBRbyhlLHQsbil7ZWEoZSx0LG4pLChlZXx8bmUpJiZzZXRUaW1lb3V0KChmdW5jdGlvbigpe2VhKGUsdCxuKX0pLDApfWZ1bmN0aW9uIGVhKGUsdCxuKXt2YXIgaT10LnZhbHVlLHI9ZS5tdWx0aXBsZTtpZighcnx8QXJyYXkuaXNBcnJheShpKSl7Zm9yKHZhciBvLGEscz0wLGw9ZS5vcHRpb25zLmxlbmd0aDtzPGw7cysrKWlmKGE9ZS5vcHRpb25zW3NdLHIpbz0kKGksbmEoYSkpPi0xLGEuc2VsZWN0ZWQhPT1vJiYoYS5zZWxlY3RlZD1vKTtlbHNlIGlmKFIobmEoYSksaSkpcmV0dXJuIHZvaWQoZS5zZWxlY3RlZEluZGV4IT09cyYmKGUuc2VsZWN0ZWRJbmRleD1zKSk7cnx8KGUuc2VsZWN0ZWRJbmRleD0tMSl9fWZ1bmN0aW9uIHRhKGUsdCl7cmV0dXJuIHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiFSKHQsZSl9KSl9ZnVuY3Rpb24gbmEoZSl7cmV0dXJuIl92YWx1ZSJpbiBlP2UuX3ZhbHVlOmUudmFsdWV9ZnVuY3Rpb24gaWEoZSl7ZS50YXJnZXQuY29tcG9zaW5nPSEwfWZ1bmN0aW9uIHJhKGUpe2UudGFyZ2V0LmNvbXBvc2luZyYmKGUudGFyZ2V0LmNvbXBvc2luZz0hMSxvYShlLnRhcmdldCwiaW5wdXQiKSl9ZnVuY3Rpb24gb2EoZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFdmVudCgiSFRNTEV2ZW50cyIpO24uaW5pdEV2ZW50KHQsITAsITApLGUuZGlzcGF0Y2hFdmVudChuKX1mdW5jdGlvbiBhYShlKXtyZXR1cm4hZS5jb21wb25lbnRJbnN0YW5jZXx8ZS5kYXRhJiZlLmRhdGEudHJhbnNpdGlvbj9lOmFhKGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlKX12YXIgc2E9e2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXQudmFsdWU7bj1hYShuKTt2YXIgcj1uLmRhdGEmJm4uZGF0YS50cmFuc2l0aW9uLG89ZS5fX3ZPcmlnaW5hbERpc3BsYXk9Im5vbmUiPT09ZS5zdHlsZS5kaXNwbGF5PyIiOmUuc3R5bGUuZGlzcGxheTtpJiZyPyhuLmRhdGEuc2hvdz0hMCxIbyhuLChmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1vfSkpKTplLnN0eWxlLmRpc3BsYXk9aT9vOiJub25lIn0sdXBkYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10LnZhbHVlLHI9dC5vbGRWYWx1ZTtpZighaSE9PSFyKXtuPWFhKG4pO3ZhciBvPW4uZGF0YSYmbi5kYXRhLnRyYW5zaXRpb247bz8obi5kYXRhLnNob3c9ITAsaT9IbyhuLChmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT1lLl9fdk9yaWdpbmFsRGlzcGxheX0pKTpXbyhuLChmdW5jdGlvbigpe2Uuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KSkpOmUuc3R5bGUuZGlzcGxheT1pP2UuX192T3JpZ2luYWxEaXNwbGF5OiJub25lIn19LHVuYmluZDpmdW5jdGlvbihlLHQsbixpLHIpe3J8fChlLnN0eWxlLmRpc3BsYXk9ZS5fX3ZPcmlnaW5hbERpc3BsYXkpfX0sbGE9e21vZGVsOkpvLHNob3c6c2F9LGNhPXtuYW1lOlN0cmluZyxhcHBlYXI6Qm9vbGVhbixjc3M6Qm9vbGVhbixtb2RlOlN0cmluZyx0eXBlOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxlbnRlclRvQ2xhc3M6U3RyaW5nLGxlYXZlVG9DbGFzczpTdHJpbmcsZW50ZXJBY3RpdmVDbGFzczpTdHJpbmcsbGVhdmVBY3RpdmVDbGFzczpTdHJpbmcsYXBwZWFyQ2xhc3M6U3RyaW5nLGFwcGVhckFjdGl2ZUNsYXNzOlN0cmluZyxhcHBlYXJUb0NsYXNzOlN0cmluZyxkdXJhdGlvbjpbTnVtYmVyLFN0cmluZyxPYmplY3RdfTtmdW5jdGlvbiB1YShlKXt2YXIgdD1lJiZlLmNvbXBvbmVudE9wdGlvbnM7cmV0dXJuIHQmJnQuQ3Rvci5vcHRpb25zLmFic3RyYWN0P3VhKENuKHQuY2hpbGRyZW4pKTplfWZ1bmN0aW9uIGhhKGUpe3ZhciB0PXt9LG49ZS4kb3B0aW9ucztmb3IodmFyIGkgaW4gbi5wcm9wc0RhdGEpdFtpXT1lW2ldO3ZhciByPW4uX3BhcmVudExpc3RlbmVycztmb3IodmFyIG8gaW4gcil0W1MobyldPXJbb107cmV0dXJuIHR9ZnVuY3Rpb24gZGEoZSx0KXtpZigvXGQta2VlcC1hbGl2ZSQvLnRlc3QodC50YWcpKXJldHVybiBlKCJrZWVwLWFsaXZlIix7cHJvcHM6dC5jb21wb25lbnRPcHRpb25zLnByb3BzRGF0YX0pfWZ1bmN0aW9uIGZhKGUpe3doaWxlKGU9ZS5wYXJlbnQpaWYoZS5kYXRhLnRyYW5zaXRpb24pcmV0dXJuITB9ZnVuY3Rpb24gcGEoZSx0KXtyZXR1cm4gdC5rZXk9PT1lLmtleSYmdC50YWc9PT1lLnRhZ312YXIgbWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFnfHxMdChlKX0sZ2E9ZnVuY3Rpb24oZSl7cmV0dXJuInNob3ciPT09ZS5uYW1lfSx2YT17bmFtZToidHJhbnNpdGlvbiIscHJvcHM6Y2EsYWJzdHJhY3Q6ITAscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLiRzbG90cy5kZWZhdWx0O2lmKG4mJihuPW4uZmlsdGVyKG1hKSxuLmxlbmd0aCkpezA7dmFyIGk9dGhpcy5tb2RlOzA7dmFyIHI9blswXTtpZihmYSh0aGlzLiR2bm9kZSkpcmV0dXJuIHI7dmFyIG89dWEocik7aWYoIW8pcmV0dXJuIHI7aWYodGhpcy5fbGVhdmluZylyZXR1cm4gZGEoZSxyKTt2YXIgYT0iX190cmFuc2l0aW9uLSIrdGhpcy5fdWlkKyItIjtvLmtleT1udWxsPT1vLmtleT9vLmlzQ29tbWVudD9hKyJjb21tZW50IjphK28udGFnOnMoby5rZXkpPzA9PT1TdHJpbmcoby5rZXkpLmluZGV4T2YoYSk/by5rZXk6YStvLmtleTpvLmtleTt2YXIgbD0oby5kYXRhfHwoby5kYXRhPXt9KSkudHJhbnNpdGlvbj1oYSh0aGlzKSxjPXRoaXMuX3Zub2RlLHU9dWEoYyk7aWYoby5kYXRhLmRpcmVjdGl2ZXMmJm8uZGF0YS5kaXJlY3RpdmVzLnNvbWUoZ2EpJiYoby5kYXRhLnNob3c9ITApLHUmJnUuZGF0YSYmIXBhKG8sdSkmJiFMdCh1KSYmKCF1LmNvbXBvbmVudEluc3RhbmNlfHwhdS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUuaXNDb21tZW50KSl7dmFyIGg9dS5kYXRhLnRyYW5zaXRpb249QSh7fSxsKTtpZigib3V0LWluIj09PWkpcmV0dXJuIHRoaXMuX2xlYXZpbmc9ITAsd3QoaCwiYWZ0ZXJMZWF2ZSIsKGZ1bmN0aW9uKCl7dC5fbGVhdmluZz0hMSx0LiRmb3JjZVVwZGF0ZSgpfSkpLGRhKGUscik7aWYoImluLW91dCI9PT1pKXtpZihMdChvKSlyZXR1cm4gYzt2YXIgZCxmPWZ1bmN0aW9uKCl7ZCgpfTt3dChsLCJhZnRlckVudGVyIixmKSx3dChsLCJlbnRlckNhbmNlbGxlZCIsZiksd3QoaCwiZGVsYXlMZWF2ZSIsKGZ1bmN0aW9uKGUpe2Q9ZX0pKX19cmV0dXJuIHJ9fX0seWE9QSh7dGFnOlN0cmluZyxtb3ZlQ2xhc3M6U3RyaW5nfSxjYSk7ZGVsZXRlIHlhLm1vZGU7dmFyIGJhPXtwcm9wczp5YSxiZWZvcmVNb3VudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLl91cGRhdGU7dGhpcy5fdXBkYXRlPWZ1bmN0aW9uKG4saSl7dmFyIHI9T24oZSk7ZS5fX3BhdGNoX18oZS5fdm5vZGUsZS5rZXB0LCExLCEwKSxlLl92bm9kZT1lLmtlcHQscigpLHQuY2FsbChlLG4saSl9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudGFnfHx0aGlzLiR2bm9kZS5kYXRhLnRhZ3x8InNwYW4iLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPXRoaXMucHJldkNoaWxkcmVuPXRoaXMuY2hpbGRyZW4scj10aGlzLiRzbG90cy5kZWZhdWx0fHxbXSxvPXRoaXMuY2hpbGRyZW49W10sYT1oYSh0aGlzKSxzPTA7czxyLmxlbmd0aDtzKyspe3ZhciBsPXJbc107aWYobC50YWcpaWYobnVsbCE9bC5rZXkmJjAhPT1TdHJpbmcobC5rZXkpLmluZGV4T2YoIl9fdmxpc3QiKSlvLnB1c2gobCksbltsLmtleV09bCwobC5kYXRhfHwobC5kYXRhPXt9KSkudHJhbnNpdGlvbj1hO2Vsc2U7fWlmKGkpe2Zvcih2YXIgYz1bXSx1PVtdLGg9MDtoPGkubGVuZ3RoO2grKyl7dmFyIGQ9aVtoXTtkLmRhdGEudHJhbnNpdGlvbj1hLGQuZGF0YS5wb3M9ZC5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbltkLmtleV0/Yy5wdXNoKGQpOnUucHVzaChkKX10aGlzLmtlcHQ9ZSh0LG51bGwsYyksdGhpcy5yZW1vdmVkPXV9cmV0dXJuIGUodCxudWxsLG8pfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcmV2Q2hpbGRyZW4sdD10aGlzLm1vdmVDbGFzc3x8KHRoaXMubmFtZXx8InYiKSsiLW1vdmUiO2UubGVuZ3RoJiZ0aGlzLmhhc01vdmUoZVswXS5lbG0sdCkmJihlLmZvckVhY2goeGEpLGUuZm9yRWFjaChfYSksZS5mb3JFYWNoKHdhKSx0aGlzLl9yZWZsb3c9ZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZS5mb3JFYWNoKChmdW5jdGlvbihlKXtpZihlLmRhdGEubW92ZWQpe3ZhciBuPWUuZWxtLGk9bi5zdHlsZTtSbyhuLHQpLGkudHJhbnNmb3JtPWkuV2Via2l0VHJhbnNmb3JtPWkudHJhbnNpdGlvbkR1cmF0aW9uPSIiLG4uYWRkRXZlbnRMaXN0ZW5lcihBbyxuLl9tb3ZlQ2I9ZnVuY3Rpb24gZShpKXtpJiZpLnRhcmdldCE9PW58fGkmJiEvdHJhbnNmb3JtJC8udGVzdChpLnByb3BlcnR5TmFtZSl8fChuLnJlbW92ZUV2ZW50TGlzdGVuZXIoQW8sZSksbi5fbW92ZUNiPW51bGwsJG8obix0KSl9KX19KSkpfSxtZXRob2RzOntoYXNNb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIU1vKXJldHVybiExO2lmKHRoaXMuX2hhc01vdmUpcmV0dXJuIHRoaXMuX2hhc01vdmU7dmFyIG49ZS5jbG9uZU5vZGUoKTtlLl90cmFuc2l0aW9uQ2xhc3NlcyYmZS5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Q28obixlKX0pKSxTbyhuLHQpLG4uc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZWwuYXBwZW5kQ2hpbGQobik7dmFyIGk9Rm8obik7cmV0dXJuIHRoaXMuJGVsLnJlbW92ZUNoaWxkKG4pLHRoaXMuX2hhc01vdmU9aS5oYXNUcmFuc2Zvcm19fX07ZnVuY3Rpb24geGEoZSl7ZS5lbG0uX21vdmVDYiYmZS5lbG0uX21vdmVDYigpLGUuZWxtLl9lbnRlckNiJiZlLmVsbS5fZW50ZXJDYigpfWZ1bmN0aW9uIF9hKGUpe2UuZGF0YS5uZXdQb3M9ZS5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZnVuY3Rpb24gd2EoZSl7dmFyIHQ9ZS5kYXRhLnBvcyxuPWUuZGF0YS5uZXdQb3MsaT10LmxlZnQtbi5sZWZ0LHI9dC50b3Atbi50b3A7aWYoaXx8cil7ZS5kYXRhLm1vdmVkPSEwO3ZhciBvPWUuZWxtLnN0eWxlO28udHJhbnNmb3JtPW8uV2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIitpKyJweCwiK3IrInB4KSIsby50cmFuc2l0aW9uRHVyYXRpb249IjBzIn19dmFyIFNhPXtUcmFuc2l0aW9uOnZhLFRyYW5zaXRpb25Hcm91cDpiYX07Q2kuY29uZmlnLm11c3RVc2VQcm9wPVZpLENpLmNvbmZpZy5pc1Jlc2VydmVkVGFnPWFyLENpLmNvbmZpZy5pc1Jlc2VydmVkQXR0cj1CaSxDaS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlPXNyLENpLmNvbmZpZy5pc1Vua25vd25FbGVtZW50PWNyLEEoQ2kub3B0aW9ucy5kaXJlY3RpdmVzLGxhKSxBKENpLm9wdGlvbnMuY29tcG9uZW50cyxTYSksQ2kucHJvdG90eXBlLl9fcGF0Y2hfXz1LP1pvOlAsQ2kucHJvdG90eXBlLiRtb3VudD1mdW5jdGlvbihlLHQpe3JldHVybiBlPWUmJks/aHIoZSk6dm9pZCAwLE5uKHRoaXMsZSx0KX0sSyYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXtqLmRldnRvb2xzJiZjZSYmY2UuZW1pdCgiaW5pdCIsQ2kpfSksMCksdFsiZGVmYXVsdCJdPUNpfS5jYWxsKHRoaXMsbigiYzhiYSIpKX0sIjJiMTciOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0ZTA4Iikscj0oaS5fX0RFVl9fLG4oIjZkOGIiKSksbz0oci5pc1R5cGVkQXJyYXksci5leHRlbmQpLGE9KHIuYXNzZXJ0LHIuZWFjaCkscz1yLmlzT2JqZWN0LGw9bigiZTBkMyIpLGM9bC5nZXREYXRhSXRlbVZhbHVlLHU9bC5pc0RhdGFJdGVtT3B0aW9uLGg9bigiMzg0MiIpLGQ9aC5wYXJzZURhdGUsZj1uKCJlYzZmIikscD1uKCI5M2QwIiksbT1wLlNPVVJDRV9GT1JNQVRfVFlQRURfQVJSQVksZz1wLlNPVVJDRV9GT1JNQVRfQVJSQVlfUk9XUyx2PXAuU09VUkNFX0ZPUk1BVF9PUklHSU5BTCx5PXAuU09VUkNFX0ZPUk1BVF9PQkpFQ1RfUk9XUztmdW5jdGlvbiBiKGUsdCl7Zi5pc0luc3RhbmNlKGUpfHwoZT1mLnNlcmllc0RhdGFUb1NvdXJjZShlKSksdGhpcy5fc291cmNlPWU7dmFyIG49dGhpcy5fZGF0YT1lLmRhdGEsaT1lLnNvdXJjZUZvcm1hdDtpPT09bSYmKHRoaXMuX29mZnNldD0wLHRoaXMuX2RpbVNpemU9dCx0aGlzLl9kYXRhPW4pO3ZhciByPV9baT09PWc/aSsiXyIrZS5zZXJpZXNMYXlvdXRCeTppXTtvKHRoaXMscil9dmFyIHg9Yi5wcm90b3R5cGU7eC5wdXJlPSExLHgucGVyc2lzdGVudD0hMCx4LmdldFNvdXJjZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3VyY2V9O3ZhciBfPXthcnJheVJvd3NfY29sdW1uOntwdXJlOiEwLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy5fZGF0YS5sZW5ndGgtdGhpcy5fc291cmNlLnN0YXJ0SW5kZXgpfSxnZXRJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9kYXRhW2UrdGhpcy5fc291cmNlLnN0YXJ0SW5kZXhdfSxhcHBlbmREYXRhOkN9LGFycmF5Um93c19yb3c6e3B1cmU6ITAsY291bnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhWzBdO3JldHVybiBlP01hdGgubWF4KDAsZS5sZW5ndGgtdGhpcy5fc291cmNlLnN0YXJ0SW5kZXgpOjB9LGdldEl0ZW06ZnVuY3Rpb24oZSl7ZSs9dGhpcy5fc291cmNlLnN0YXJ0SW5kZXg7Zm9yKHZhciB0PVtdLG49dGhpcy5fZGF0YSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPW5baV07dC5wdXNoKHI/cltlXTpudWxsKX1yZXR1cm4gdH0sYXBwZW5kRGF0YTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignRG8gbm90IHN1cHBvcnQgYXBwZW5kRGF0YSB3aGVuIHNldCBzZXJpZXNMYXlvdXRCeTogInJvdyIuJyl9fSxvYmplY3RSb3dzOntwdXJlOiEwLGNvdW50OncsZ2V0SXRlbTpTLGFwcGVuZERhdGE6Q30sa2V5ZWRDb2x1bW5zOntwdXJlOiEwLGNvdW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc291cmNlLmRpbWVuc2lvbnNEZWZpbmVbMF0ubmFtZSx0PXRoaXMuX2RhdGFbZV07cmV0dXJuIHQ/dC5sZW5ndGg6MH0sZ2V0SXRlbTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj10aGlzLl9zb3VyY2UuZGltZW5zaW9uc0RlZmluZSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciByPXRoaXMuX2RhdGFbbltpXS5uYW1lXTt0LnB1c2gocj9yW2VdOm51bGwpfXJldHVybiB0fSxhcHBlbmREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2RhdGE7YShlLChmdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10W25dfHwodFtuXT1bXSkscj0wO3I8KGV8fFtdKS5sZW5ndGg7cisrKWkucHVzaChlW3JdKX0pKX19LG9yaWdpbmFsOntjb3VudDp3LGdldEl0ZW06UyxhcHBlbmREYXRhOkN9LHR5cGVkQXJyYXk6e3BlcnNpc3RlbnQ6ITEscHVyZTohMCxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhP3RoaXMuX2RhdGEubGVuZ3RoL3RoaXMuX2RpbVNpemU6MH0sZ2V0SXRlbTpmdW5jdGlvbihlLHQpe2UtPXRoaXMuX29mZnNldCx0PXR8fFtdO2Zvcih2YXIgbj10aGlzLl9kaW1TaXplKmUsaT0wO2k8dGhpcy5fZGltU2l6ZTtpKyspdFtpXT10aGlzLl9kYXRhW24raV07cmV0dXJuIHR9LGFwcGVuZERhdGE6ZnVuY3Rpb24oZSl7dGhpcy5fZGF0YT1lfSxjbGVhbjpmdW5jdGlvbigpe3RoaXMuX29mZnNldCs9dGhpcy5jb3VudCgpLHRoaXMuX2RhdGE9bnVsbH19fTtmdW5jdGlvbiB3KCl7cmV0dXJuIHRoaXMuX2RhdGEubGVuZ3RofWZ1bmN0aW9uIFMoZSl7cmV0dXJuIHRoaXMuX2RhdGFbZV19ZnVuY3Rpb24gQyhlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl0aGlzLl9kYXRhLnB1c2goZVt0XSl9dmFyIGs9e2FycmF5Um93czpULG9iamVjdFJvd3M6ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIG51bGwhPW4/ZVtpXTplfSxrZXllZENvbHVtbnM6VCxvcmlnaW5hbDpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1jKGUpO3JldHVybiBudWxsIT1uJiZyIGluc3RhbmNlb2YgQXJyYXk/cltuXTpyfSx0eXBlZEFycmF5OlR9O2Z1bmN0aW9uIFQoZSx0LG4saSl7cmV0dXJuIG51bGwhPW4/ZVtuXTplfXZhciBNPXthcnJheVJvd3M6RSxvYmplY3RSb3dzOmZ1bmN0aW9uKGUsdCxuLGkpe3JldHVybiBJKGVbdF0sdGhpcy5fZGltZW5zaW9uSW5mb3NbdF0pfSxrZXllZENvbHVtbnM6RSxvcmlnaW5hbDpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1lJiYobnVsbD09ZS52YWx1ZT9lOmUudmFsdWUpO3JldHVybiF0aGlzLl9yYXdEYXRhLnB1cmUmJnUoZSkmJih0aGlzLmhhc0l0ZW1PcHRpb249ITApLEkociBpbnN0YW5jZW9mIEFycmF5P3JbaV06cix0aGlzLl9kaW1lbnNpb25JbmZvc1t0XSl9LHR5cGVkQXJyYXk6ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIGVbaV19fTtmdW5jdGlvbiBFKGUsdCxuLGkpe3JldHVybiBJKGVbaV0sdGhpcy5fZGltZW5zaW9uSW5mb3NbdF0pfWZ1bmN0aW9uIEkoZSx0KXt2YXIgbj10JiZ0LnR5cGU7aWYoIm9yZGluYWwiPT09bil7dmFyIGk9dCYmdC5vcmRpbmFsTWV0YTtyZXR1cm4gaT9pLnBhcnNlQW5kQ29sbGVjdChlKTplfXJldHVybiJ0aW1lIj09PW4mJiJudW1iZXIiIT09dHlwZW9mIGUmJm51bGwhPWUmJiItIiE9PWUmJihlPStkKGUpKSxudWxsPT1lfHwiIj09PWU/TmFOOitlfWZ1bmN0aW9uIEQoZSx0LG4pe2lmKGUpe3ZhciBpPWUuZ2V0UmF3RGF0YUl0ZW0odCk7aWYobnVsbCE9aSl7dmFyIHIsbyxhPWUuZ2V0UHJvdmlkZXIoKS5nZXRTb3VyY2UoKS5zb3VyY2VGb3JtYXQscz1lLmdldERpbWVuc2lvbkluZm8obik7cmV0dXJuIHMmJihyPXMubmFtZSxvPXMuaW5kZXgpLGtbYV0oaSx0LG8scil9fX1mdW5jdGlvbiBBKGUsdCxuKXtpZihlKXt2YXIgaT1lLmdldFByb3ZpZGVyKCkuZ2V0U291cmNlKCkuc291cmNlRm9ybWF0O2lmKGk9PT12fHxpPT09eSl7dmFyIHI9ZS5nZXRSYXdEYXRhSXRlbSh0KTtyZXR1cm4gaSE9PXZ8fHMocil8fChyPW51bGwpLHI/cltuXTp2b2lkIDB9fX10LkRlZmF1bHREYXRhUHJvdmlkZXI9Yix0LmRlZmF1bHREaW1WYWx1ZUdldHRlcnM9TSx0LnJldHJpZXZlUmF3VmFsdWU9RCx0LnJldHJpZXZlUmF3QXR0cj1BfSwiMmIyNyI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbigpe3ZhciB0PXtleHBpcmVzOiIxZCIscGF0aDoiOyBwYXRoPS8iLGRvbWFpbjoiIixzZWN1cmU6IiIsc2FtZVNpdGU6IjsgU2FtZVNpdGU9TGF4In0sbj17aW5zdGFsbDpmdW5jdGlvbihlKXtlLnByb3RvdHlwZS4kY29va2llcz10aGlzLGUuJGNvb2tpZXM9dGhpc30sY29uZmlnOmZ1bmN0aW9uKGUsbixpLHIsbyl7dC5leHBpcmVzPWV8fCIxZCIsdC5wYXRoPW4/IjsgcGF0aD0iK246IjsgcGF0aD0vIix0LmRvbWFpbj1pPyI7IGRvbWFpbj0iK2k6IiIsdC5zZWN1cmU9cj8iOyBTZWN1cmUiOiIiLHQuc2FtZVNpdGU9bz8iOyBTYW1lU2l0ZT0iK286IjsgU2FtZVNpdGU9TGF4In0sZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWRlY29kZVVSSUNvbXBvbmVudChkb2N1bWVudC5jb29raWUucmVwbGFjZShuZXcgUmVnRXhwKCIoPzooPzpefC4qOylcXHMqIitlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvW1wtXC5cK1wqXS9nLCJcXCQmIikrIlxccypcXD1cXHMqKFteO10qKS4qJCl8Xi4qJCIpLCIkMSIpKXx8bnVsbDtpZih0JiYieyI9PT10LnN1YnN0cmluZygwLDEpJiYifSI9PT10LnN1YnN0cmluZyh0Lmxlbmd0aC0xLHQubGVuZ3RoKSl0cnl7dD1KU09OLnBhcnNlKHQpfWNhdGNoKG4pe3JldHVybiB0fXJldHVybiB0fSxzZXQ6ZnVuY3Rpb24oZSxuLGkscixvLGEscyl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJDb29raWUgbmFtZSBpcyBub3QgZmluZCBpbiBmaXJzdCBhcmd1bWVudC4iKTtpZigvXig/OmV4cGlyZXN8bWF4XC1hZ2V8cGF0aHxkb21haW58c2VjdXJlfFNhbWVTaXRlKSQvaS50ZXN0KGUpKXRocm93IG5ldyBFcnJvcignQ29va2llIGtleSBuYW1lIGlsbGVnYWxpdHksIENhbm5vdCBiZSBzZXQgdG8gWyJleHBpcmVzIiwibWF4LWFnZSIsInBhdGgiLCJkb21haW4iLCJzZWN1cmUiLCJTYW1lU2l0ZSJdXHQgY3VycmVudCBrZXkgbmFtZTogJytlKTtuJiZuLmNvbnN0cnVjdG9yPT09T2JqZWN0JiYobj1KU09OLnN0cmluZ2lmeShuKSk7dmFyIGw9IiI7aWYoaT12b2lkIDA9PWk/dC5leHBpcmVzOmksaSYmMCE9aSlzd2l0Y2goaS5jb25zdHJ1Y3Rvcil7Y2FzZSBOdW1iZXI6bD1pPT09MS8wfHwtMT09PWk/IjsgZXhwaXJlcz1GcmksIDMxIERlYyA5OTk5IDIzOjU5OjU5IEdNVCI6IjsgbWF4LWFnZT0iK2k7YnJlYWs7Y2FzZSBTdHJpbmc6aWYoL14oPzpcZCsoeXxtfGR8aHxtaW58cykpJC9pLnRlc3QoaSkpe3ZhciBjPWkucmVwbGFjZSgvXihcZCspKD86eXxtfGR8aHxtaW58cykkL2ksIiQxIik7c3dpdGNoKGkucmVwbGFjZSgvXig/OlxkKykoeXxtfGR8aHxtaW58cykkL2ksIiQxIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJtIjpsPSI7IG1heC1hZ2U9IisyNTkyZTMqK2M7YnJlYWs7Y2FzZSJkIjpsPSI7IG1heC1hZ2U9Iis4NjQwMCorYzticmVhaztjYXNlImgiOmw9IjsgbWF4LWFnZT0iKzM2MDAqK2M7YnJlYWs7Y2FzZSJtaW4iOmw9IjsgbWF4LWFnZT0iKzYwKitjO2JyZWFrO2Nhc2UicyI6bD0iOyBtYXgtYWdlPSIrYzticmVhaztjYXNlInkiOmw9IjsgbWF4LWFnZT0iKzMxMTA0ZTMqK2M7YnJlYWs7ZGVmYXVsdDpuZXcgRXJyb3IoJ3Vua25vd24gZXhjZXB0aW9uIG9mICJzZXQgb3BlcmF0aW9uIicpfX1lbHNlIGw9IjsgZXhwaXJlcz0iK2k7YnJlYWs7Y2FzZSBEYXRlOmw9IjsgZXhwaXJlcz0iK2kudG9VVENTdHJpbmcoKTticmVha31yZXR1cm4gZG9jdW1lbnQuY29va2llPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG4pK2wrKG8/IjsgZG9tYWluPSIrbzp0LmRvbWFpbikrKHI/IjsgcGF0aD0iK3I6dC5wYXRoKSsodm9pZCAwPT1hP3Quc2VjdXJlOmE/IjsgU2VjdXJlIjoiIikrKHZvaWQgMD09cz90LnNhbWVTaXRlOnM/IjsgU2FtZVNpdGU9IitzOiIiKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSxuLGkpe3JldHVybiEoIWV8fCF0aGlzLmlzS2V5KGUpKSYmKGRvY3VtZW50LmNvb2tpZT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj07IGV4cGlyZXM9VGh1LCAwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQiKyhpPyI7IGRvbWFpbj0iK2k6dC5kb21haW4pKyhuPyI7IHBhdGg9IituOnQucGF0aCkrIjsgU2FtZVNpdGU9TGF4Iix0aGlzKX0saXNLZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58O1xccyopIitlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvW1wtXC5cK1wqXS9nLCJcXCQmIikrIlxccypcXD0iKS50ZXN0KGRvY3VtZW50LmNvb2tpZSl9LGtleXM6ZnVuY3Rpb24oKXtpZighZG9jdW1lbnQuY29va2llKXJldHVybltdO2Zvcih2YXIgZT1kb2N1bWVudC5jb29raWUucmVwbGFjZSgvKCg/Ol58XHMqOylbXlw9XSspKD89O3wkKXxeXHMqfFxzKig/Olw9W147XSopPyg/OlwxfCQpL2csIiIpLnNwbGl0KC9ccyooPzpcPVteO10qKT87XHMqLyksdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF09ZGVjb2RlVVJJQ29tcG9uZW50KGVbdF0pO3JldHVybiBlfX07ZS5leHBvcnRzPW4sInVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93JiYod2luZG93LiRjb29raWVzPW4pfSkoKX0sIjJiM2UiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI1ODVhIikscj0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLG89aXx8cnx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTtlLmV4cG9ydHM9b30sIjJiNjEiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI3ZDZkIikscj1uKCI4MmViIiksbz1yLkNvbnRleHRDYWNoZWRCeSxhPVtbInNoYWRvd0JsdXIiLDBdLFsic2hhZG93T2Zmc2V0WCIsMF0sWyJzaGFkb3dPZmZzZXRZIiwwXSxbInNoYWRvd0NvbG9yIiwiIzAwMCJdLFsibGluZUNhcCIsImJ1dHQiXSxbImxpbmVKb2luIiwibWl0ZXIiXSxbIm1pdGVyTGltaXQiLDEwXV0scz1mdW5jdGlvbihlKXt0aGlzLmV4dGVuZEZyb20oZSwhMSl9O2Z1bmN0aW9uIGwoZSx0LG4pe3ZhciBpPW51bGw9PXQueD8wOnQueCxyPW51bGw9PXQueDI/MTp0LngyLG89bnVsbD09dC55PzA6dC55LGE9bnVsbD09dC55Mj8wOnQueTI7dC5nbG9iYWx8fChpPWkqbi53aWR0aCtuLngscj1yKm4ud2lkdGgrbi54LG89bypuLmhlaWdodCtuLnksYT1hKm4uaGVpZ2h0K24ueSksaT1pc05hTihpKT8wOmkscj1pc05hTihyKT8xOnIsbz1pc05hTihvKT8wOm8sYT1pc05hTihhKT8wOmE7dmFyIHM9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudChpLG8scixhKTtyZXR1cm4gc31mdW5jdGlvbiBjKGUsdCxuKXt2YXIgaT1uLndpZHRoLHI9bi5oZWlnaHQsbz1NYXRoLm1pbihpLHIpLGE9bnVsbD09dC54Py41OnQueCxzPW51bGw9PXQueT8uNTp0LnksbD1udWxsPT10LnI/LjU6dC5yO3QuZ2xvYmFsfHwoYT1hKmkrbi54LHM9cypyK24ueSxsKj1vKTt2YXIgYz1lLmNyZWF0ZVJhZGlhbEdyYWRpZW50KGEscywwLGEscyxsKTtyZXR1cm4gY31zLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxmaWxsOiIjMDAwIixzdHJva2U6bnVsbCxvcGFjaXR5OjEsZmlsbE9wYWNpdHk6bnVsbCxzdHJva2VPcGFjaXR5Om51bGwsbGluZURhc2g6bnVsbCxsaW5lRGFzaE9mZnNldDowLHNoYWRvd0JsdXI6MCxzaGFkb3dPZmZzZXRYOjAsc2hhZG93T2Zmc2V0WTowLGxpbmVXaWR0aDoxLHN0cm9rZU5vU2NhbGU6ITEsdGV4dDpudWxsLGZvbnQ6bnVsbCx0ZXh0Rm9udDpudWxsLGZvbnRTdHlsZTpudWxsLGZvbnRXZWlnaHQ6bnVsbCxmb250U2l6ZTpudWxsLGZvbnRGYW1pbHk6bnVsbCx0ZXh0VGFnOm51bGwsdGV4dEZpbGw6IiMwMDAiLHRleHRTdHJva2U6bnVsbCx0ZXh0V2lkdGg6bnVsbCx0ZXh0SGVpZ2h0Om51bGwsdGV4dFN0cm9rZVdpZHRoOjAsdGV4dExpbmVIZWlnaHQ6bnVsbCx0ZXh0UG9zaXRpb246Imluc2lkZSIsdGV4dFJlY3Q6bnVsbCx0ZXh0T2Zmc2V0Om51bGwsdGV4dEFsaWduOm51bGwsdGV4dFZlcnRpY2FsQWxpZ246bnVsbCx0ZXh0RGlzdGFuY2U6NSx0ZXh0U2hhZG93Q29sb3I6InRyYW5zcGFyZW50Iix0ZXh0U2hhZG93Qmx1cjowLHRleHRTaGFkb3dPZmZzZXRYOjAsdGV4dFNoYWRvd09mZnNldFk6MCx0ZXh0Qm94U2hhZG93Q29sb3I6InRyYW5zcGFyZW50Iix0ZXh0Qm94U2hhZG93Qmx1cjowLHRleHRCb3hTaGFkb3dPZmZzZXRYOjAsdGV4dEJveFNoYWRvd09mZnNldFk6MCx0cmFuc2Zvcm1UZXh0OiExLHRleHRSb3RhdGlvbjowLHRleHRPcmlnaW46bnVsbCx0ZXh0QmFja2dyb3VuZENvbG9yOm51bGwsdGV4dEJvcmRlckNvbG9yOm51bGwsdGV4dEJvcmRlcldpZHRoOjAsdGV4dEJvcmRlclJhZGl1czowLHRleHRQYWRkaW5nOm51bGwscmljaDpudWxsLHRydW5jYXRlOm51bGwsYmxlbmQ6bnVsbCxiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLHM9biYmbi5zdHlsZSxsPSFzfHxlLl9fYXR0ckNhY2hlZEJ5IT09by5TVFlMRV9CSU5EO2UuX19hdHRyQ2FjaGVkQnk9by5TVFlMRV9CSU5EO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9dVswXTsobHx8cltoXSE9PXNbaF0pJiYoZVtoXT1pKGUsaCxyW2hdfHx1WzFdKSl9aWYoKGx8fHIuZmlsbCE9PXMuZmlsbCkmJihlLmZpbGxTdHlsZT1yLmZpbGwpLChsfHxyLnN0cm9rZSE9PXMuc3Ryb2tlKSYmKGUuc3Ryb2tlU3R5bGU9ci5zdHJva2UpLChsfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZS5nbG9iYWxBbHBoYT1udWxsPT1yLm9wYWNpdHk/MTpyLm9wYWNpdHkpLChsfHxyLmJsZW5kIT09cy5ibGVuZCkmJihlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1yLmJsZW5kfHwic291cmNlLW92ZXIiKSx0aGlzLmhhc1N0cm9rZSgpKXt2YXIgZD1yLmxpbmVXaWR0aDtlLmxpbmVXaWR0aD1kLyh0aGlzLnN0cm9rZU5vU2NhbGUmJnQmJnQuZ2V0TGluZVNjYWxlP3QuZ2V0TGluZVNjYWxlKCk6MSl9fSxoYXNGaWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5maWxsO3JldHVybiBudWxsIT1lJiYibm9uZSIhPT1lfSxoYXNTdHJva2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cm9rZTtyZXR1cm4gbnVsbCE9ZSYmIm5vbmUiIT09ZSYmdGhpcy5saW5lV2lkdGg+MH0sZXh0ZW5kRnJvbTpmdW5jdGlvbihlLHQpe2lmKGUpZm9yKHZhciBuIGluIGUpIWUuaGFzT3duUHJvcGVydHkobil8fCEwIT09dCYmKCExPT09dD90aGlzLmhhc093blByb3BlcnR5KG4pOm51bGw9PWVbbl0pfHwodGhpc1tuXT1lW25dKX0sc2V0OmZ1bmN0aW9uKGUsdCl7InN0cmluZyI9PT10eXBlb2YgZT90aGlzW2VdPXQ6dGhpcy5leHRlbmRGcm9tKGUsITApfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yO3JldHVybiBlLmV4dGVuZEZyb20odGhpcywhMCksZX0sZ2V0R3JhZGllbnQ6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT0icmFkaWFsIj09PXQudHlwZT9jOmwscj1pKGUsdCxuKSxvPXQuY29sb3JTdG9wcyxhPTA7YTxvLmxlbmd0aDthKyspci5hZGRDb2xvclN0b3Aob1thXS5vZmZzZXQsb1thXS5jb2xvcik7cmV0dXJuIHJ9fTtmb3IodmFyIHU9cy5wcm90b3R5cGUsaD0wO2g8YS5sZW5ndGg7aCsrKXt2YXIgZD1hW2hdO2RbMF1pbiB1fHwodVtkWzBdXT1kWzFdKX1zLmdldEdyYWRpZW50PXUuZ2V0R3JhZGllbnQ7dmFyIGY9cztlLmV4cG9ydHM9Zn0sIjJiOGMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI1ZjE0Iiksbz1pLmVhY2g7ZnVuY3Rpb24gYShlKXtpZihlKWZvcih2YXIgdCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuITB9ZnVuY3Rpb24gcyhlLHQsbil7dmFyIGE9e307cmV0dXJuIG8odCwoZnVuY3Rpb24odCl7dmFyIGw9YVt0XT1zKCk7byhlW3RdLChmdW5jdGlvbihlLG8pe2lmKHIuaXNWYWxpZFR5cGUobykpe3ZhciBhPXt0eXBlOm8sdmlzdWFsOmV9O24mJm4oYSx0KSxsW29dPW5ldyByKGEpLCJvcGFjaXR5Ij09PW8mJihhPWkuY2xvbmUoYSksYS50eXBlPSJjb2xvckFscGhhIixsLl9faGlkZGVuLl9fYWxwaGFGb3JPcGFjaXR5PW5ldyByKGEpKX19KSl9KSksYTtmdW5jdGlvbiBzKCl7dmFyIGU9ZnVuY3Rpb24oKXt9O2UucHJvdG90eXBlLl9faGlkZGVuPWUucHJvdG90eXBlO3ZhciB0PW5ldyBlO3JldHVybiB0fX1mdW5jdGlvbiBsKGUsdCxuKXt2YXIgcjtpLmVhY2gobiwoZnVuY3Rpb24oZSl7dC5oYXNPd25Qcm9wZXJ0eShlKSYmYSh0W2VdKSYmKHI9ITApfSkpLHImJmkuZWFjaChuLChmdW5jdGlvbihuKXt0Lmhhc093blByb3BlcnR5KG4pJiZhKHRbbl0pP2Vbbl09aS5jbG9uZSh0W25dKTpkZWxldGUgZVtuXX0pKX1mdW5jdGlvbiBjKGUsdCxuLG8sYSxzKXt2YXIgbCxjPXt9O2Z1bmN0aW9uIHUoZSl7cmV0dXJuIG4uZ2V0SXRlbVZpc3VhbChsLGUpfWZ1bmN0aW9uIGgoZSx0KXtuLnNldEl0ZW1WaXN1YWwobCxlLHQpfWZ1bmN0aW9uIGQoZSxpKXtsPW51bGw9PXM/ZTppO3ZhciByPW4uZ2V0UmF3RGF0YUl0ZW0obCk7aWYoIXJ8fCExIT09ci52aXN1YWxNYXApZm9yKHZhciBkPW8uY2FsbChhLGUpLGY9dFtkXSxwPWNbZF0sbT0wLGc9cC5sZW5ndGg7bTxnO20rKyl7dmFyIHY9cFttXTtmW3ZdJiZmW3ZdLmFwcGx5VmlzdWFsKGUsdSxoKX19aS5lYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXIucHJlcGFyZVZpc3VhbFR5cGVzKHRbZV0pO2NbZV09bn0pKSxudWxsPT1zP24uZWFjaChkKTpuLmVhY2goW3NdLGQpfWZ1bmN0aW9uIHUoZSx0LG4sbyl7dmFyIGE9e307ZnVuY3Rpb24gcyhlLGkpe2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGkuZ2V0SXRlbVZpc3VhbChsLGUpfWZ1bmN0aW9uIHMoZSx0KXtpLnNldEl0ZW1WaXN1YWwobCxlLHQpfXZhciBsO251bGwhPW8mJihvPWkuZ2V0RGltZW5zaW9uKG8pKTt3aGlsZShudWxsIT0obD1lLm5leHQoKSkpe3ZhciBjPWkuZ2V0UmF3RGF0YUl0ZW0obCk7aWYoIWN8fCExIT09Yy52aXN1YWxNYXApZm9yKHZhciB1PW51bGwhPW8/aS5nZXQobyxsLCEwKTpsLGg9bih1KSxkPXRbaF0sZj1hW2hdLHA9MCxtPWYubGVuZ3RoO3A8bTtwKyspe3ZhciBnPWZbcF07ZFtnXSYmZFtnXS5hcHBseVZpc3VhbCh1LHIscyl9fX1yZXR1cm4gaS5lYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXIucHJlcGFyZVZpc3VhbFR5cGVzKHRbZV0pO2FbZV09bn0pKSx7cHJvZ3Jlc3M6c319dC5jcmVhdGVWaXN1YWxNYXBwaW5ncz1zLHQucmVwbGFjZVZpc3VhbE9wdGlvbj1sLHQuYXBwbHlWaXN1YWw9Yyx0LmluY3JlbWVudGFsQXBwbHlWaXN1YWw9dX0sIjJiYjUiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO24oIjgxMjIiKTt0LmRlZmF1bHQ9e21vdW50ZWQ6ZnVuY3Rpb24oKXt9LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbigpe3JldHVybntwcm9wczp7fSxldmVudHM6e319fX19fSwiMmMxNyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKSxyPW4oIjZkOGIiKSxvPXIuY3JlYXRlSGFzaE1hcCxhPXIuZWFjaDtpLnJlZ2lzdGVyUHJvY2Vzc29yKHtnZXRUYXJnZXRTZXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9bygpO3JldHVybiBlLmVhY2hDb21wb25lbnQoImRhdGFab29tIiwoZnVuY3Rpb24oZSl7ZS5lYWNoVGFyZ2V0QXhpcygoZnVuY3Rpb24oZSxuLGkpe3ZhciByPWkuZ2V0QXhpc1Byb3h5KGUubmFtZSxuKTthKHIuZ2V0VGFyZ2V0U2VyaWVzTW9kZWxzKCksKGZ1bmN0aW9uKGUpe3Quc2V0KGUudWlkLGUpfSkpfSkpfSkpLHR9LG1vZGlmeU91dHB1dEVuZDohMCxvdmVyYWxsUmVzZXQ6ZnVuY3Rpb24oZSx0KXtlLmVhY2hDb21wb25lbnQoImRhdGFab29tIiwoZnVuY3Rpb24oZSl7ZS5lYWNoVGFyZ2V0QXhpcygoZnVuY3Rpb24oZSxuLGkpe2kuZ2V0QXhpc1Byb3h5KGUubmFtZSxuKS5yZXNldChpLHQpfSkpLGUuZWFjaFRhcmdldEF4aXMoKGZ1bmN0aW9uKGUsbixpKXtpLmdldEF4aXNQcm94eShlLm5hbWUsbikuZmlsdGVyRGF0YShpLHQpfSkpfSkpLGUuZWFjaENvbXBvbmVudCgiZGF0YVpvb20iLChmdW5jdGlvbihlKXt2YXIgdD1lLmZpbmRSZXByZXNlbnRhdGl2ZUF4aXNQcm94eSgpLG49dC5nZXREYXRhUGVyY2VudFdpbmRvdygpLGk9dC5nZXREYXRhVmFsdWVXaW5kb3coKTtlLnNldENhbGN1bGF0ZWRSYW5nZSh7c3RhcnQ6blswXSxlbmQ6blsxXSxzdGFydFZhbHVlOmlbMF0sZW5kVmFsdWU6aVsxXX0pfSkpfX0pfSwiMmNmNCI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0xOyJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmKG49TWF0aC5tYXgod2luZG93LmRldmljZVBpeGVsUmF0aW98fDEsMSkpO3ZhciBpPTAscj1uO3QuZGVidWdNb2RlPWksdC5kZXZpY2VQaXhlbFJhdGlvPXJ9LCIyY2Y0OSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHIsbyxhPW4oImRhODQiKSxzPW4oImQwMzkiKSxsPW4oIjAzNjYiKSxjPW4oIjFiZTQiKSx1PW4oImNjMTIiKSxoPW4oIjFjZGMiKSxkPW4oIjYwNWQiKSxmPWEubG9jYXRpb24scD1hLnNldEltbWVkaWF0ZSxtPWEuY2xlYXJJbW1lZGlhdGUsZz1hLnByb2Nlc3Msdj1hLk1lc3NhZ2VDaGFubmVsLHk9YS5EaXNwYXRjaCxiPTAseD17fSxfPSJvbnJlYWR5c3RhdGVjaGFuZ2UiLHc9ZnVuY3Rpb24oZSl7aWYoeC5oYXNPd25Qcm9wZXJ0eShlKSl7dmFyIHQ9eFtlXTtkZWxldGUgeFtlXSx0KCl9fSxTPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3coZSl9fSxDPWZ1bmN0aW9uKGUpe3coZS5kYXRhKX0saz1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUrIiIsZi5wcm90b2NvbCsiLy8iK2YuaG9zdCl9O3AmJm18fChwPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49MTt3aGlsZShhcmd1bWVudHMubGVuZ3RoPm4pdC5wdXNoKGFyZ3VtZW50c1tuKytdKTtyZXR1cm4geFsrK2JdPWZ1bmN0aW9uKCl7KCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSkpLmFwcGx5KHZvaWQgMCx0KX0saShiKSxifSxtPWZ1bmN0aW9uKGUpe2RlbGV0ZSB4W2VdfSxkP2k9ZnVuY3Rpb24oZSl7Zy5uZXh0VGljayhTKGUpKX06eSYmeS5ub3c/aT1mdW5jdGlvbihlKXt5Lm5vdyhTKGUpKX06diYmIWg/KHI9bmV3IHYsbz1yLnBvcnQyLHIucG9ydDEub25tZXNzYWdlPUMsaT1sKG8ucG9zdE1lc3NhZ2UsbywxKSk6YS5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgcG9zdE1lc3NhZ2UmJiFhLmltcG9ydFNjcmlwdHMmJmYmJiJmaWxlOiIhPT1mLnByb3RvY29sJiYhcyhrKT8oaT1rLGEuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsQywhMSkpOmk9XyBpbiB1KCJzY3JpcHQiKT9mdW5jdGlvbihlKXtjLmFwcGVuZENoaWxkKHUoInNjcmlwdCIpKVtfXT1mdW5jdGlvbigpe2MucmVtb3ZlQ2hpbGQodGhpcyksdyhlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoUyhlKSwwKX0pLGUuZXhwb3J0cz17c2V0OnAsY2xlYXI6bX19LCIyY2ZjIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpO24oIjQzMzgiKSxuKCJiY2JlIiksbigiYzYyYyIpLG4oImNiOGYiKSxuKCJmMTM4IiksaS5leHRlbmRDb21wb25lbnRWaWV3KHt0eXBlOiJzaW5nbGUifSl9LCIyZDAwIjpmdW5jdGlvbihlLHQsbil7dmFyIGkscixvPW4oImRhODQiKSxhPW4oIjM0MmYiKSxzPW8ucHJvY2VzcyxsPXMmJnMudmVyc2lvbnMsYz1sJiZsLnY4O2M/KGk9Yy5zcGxpdCgiLiIpLHI9aVswXTw0PzE6aVswXStpWzFdKTphJiYoaT1hLm1hdGNoKC9FZGdlXC8oXGQrKS8pLCghaXx8aVsxXT49NzQpJiYoaT1hLm1hdGNoKC9DaHJvbWVcLyhcZCspLyksaSYmKHI9aVsxXSkpKSxlLmV4cG9ydHM9ciYmK3J9LCIyZDgzIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIjM4N2YiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4scixvKXt2YXIgYT1uZXcgRXJyb3IoZSk7cmV0dXJuIGkoYSx0LG4scixvKX19LCIyZTY3IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hKCFlfHwhZS5fX0NBTkNFTF9fKX19LCIyZjMxIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiYWU3NSIpO24oIjEwY2MiKSxuKCJmMzFmIiksbigiYzJkZCIpLG4oImI4ZWMiKSxuKCJmZWNiIiksaS5yZWdpc3RlclByZXByb2Nlc3NvcihyKX0sIjJmNDUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1pLmVhY2gsbz1pLmNyZWF0ZUhhc2hNYXAsYT0oaS5hc3NlcnQsbigiNGUwOCIpKSxzPShhLl9fREVWX18sbyhbInRvb2x0aXAiLCJsYWJlbCIsIml0ZW1OYW1lIiwiaXRlbUlkIiwic2VyaWVzTmFtZSJdKSk7ZnVuY3Rpb24gbChlKXt2YXIgdD17fSxuPXQuZW5jb2RlPXt9LGk9bygpLGE9W10sbD1bXSx1PXQudXNlck91dHB1dD17ZGltZW5zaW9uTmFtZXM6ZS5kaW1lbnNpb25zLnNsaWNlKCksZW5jb2RlOnt9fTtyKGUuZGltZW5zaW9ucywoZnVuY3Rpb24odCl7dmFyIHI9ZS5nZXREaW1lbnNpb25JbmZvKHQpLG89ci5jb29yZERpbTtpZihvKXt2YXIgZD1yLmNvb3JkRGltSW5kZXg7YyhuLG8pW2RdPXQsci5pc0V4dHJhQ29vcmR8fChpLnNldChvLDEpLGgoci50eXBlKSYmKGFbMF09dCksYyh1LmVuY29kZSxvKVtkXT1yLmluZGV4KSxyLmRlZmF1bHRUb29sdGlwJiZsLnB1c2godCl9cy5lYWNoKChmdW5jdGlvbihlLHQpe3ZhciBpPWMobix0KSxvPXIub3RoZXJEaW1zW3RdO251bGwhPW8mJiExIT09byYmKGlbb109ci5uYW1lKX0pKX0pKTt2YXIgZD1bXSxmPXt9O2kuZWFjaCgoZnVuY3Rpb24oZSx0KXt2YXIgaT1uW3RdO2ZbdF09aVswXSxkPWQuY29uY2F0KGkpfSkpLHQuZGF0YURpbXNPbkNvb3JkPWQsdC5lbmNvZGVGaXJzdERpbU5vdEV4dHJhPWY7dmFyIHA9bi5sYWJlbDtwJiZwLmxlbmd0aCYmKGE9cC5zbGljZSgpKTt2YXIgbT1uLnRvb2x0aXA7cmV0dXJuIG0mJm0ubGVuZ3RoP2w9bS5zbGljZSgpOmwubGVuZ3RofHwobD1hLnNsaWNlKCkpLG4uZGVmYXVsdGVkTGFiZWw9YSxuLmRlZmF1bHRlZFRvb2x0aXA9bCx0fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSh0KXx8KGVbdF09W10pLGVbdF19ZnVuY3Rpb24gdShlKXtyZXR1cm4iY2F0ZWdvcnkiPT09ZT8ib3JkaW5hbCI6InRpbWUiPT09ZT8idGltZSI6ImZsb2F0In1mdW5jdGlvbiBoKGUpe3JldHVybiEoIm9yZGluYWwiPT09ZXx8InRpbWUiPT09ZSl9dC5PVEhFUl9ESU1FTlNJT05TPXMsdC5zdW1tYXJpemVEaW1lbnNpb25zPWwsdC5nZXREaW1lbnNpb25UeXBlQnlBeGlzPXV9LCIyZjYyIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXsKLyohCiAqIHZ1ZXggdjMuNi4yCiAqIChjKSAyMDIxIEV2YW4gWW91CiAqIEBsaWNlbnNlIE1JVAogKi8KZnVuY3Rpb24gbihlKXt2YXIgdD1OdW1iZXIoZS52ZXJzaW9uLnNwbGl0KCIuIilbMF0pO2lmKHQ+PTIpZS5taXhpbih7YmVmb3JlQ3JlYXRlOml9KTtlbHNle3ZhciBuPWUucHJvdG90eXBlLl9pbml0O2UucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPXt9KSxlLmluaXQ9ZS5pbml0P1tpXS5jb25jYXQoZS5pbml0KTppLG4uY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy4kb3B0aW9ucztlLnN0b3JlP3RoaXMuJHN0b3JlPSJmdW5jdGlvbiI9PT10eXBlb2YgZS5zdG9yZT9lLnN0b3JlKCk6ZS5zdG9yZTplLnBhcmVudCYmZS5wYXJlbnQuJHN0b3JlJiYodGhpcy4kc3RvcmU9ZS5wYXJlbnQuJHN0b3JlKX19dmFyIGk9InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9PXR5cGVvZiBlP2U6e30scj1pLl9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187ZnVuY3Rpb24gbyhlKXtyJiYoZS5fZGV2dG9vbEhvb2s9cixyLmVtaXQoInZ1ZXg6aW5pdCIsZSksci5vbigidnVleDp0cmF2ZWwtdG8tc3RhdGUiLChmdW5jdGlvbih0KXtlLnJlcGxhY2VTdGF0ZSh0KX0pKSxlLnN1YnNjcmliZSgoZnVuY3Rpb24oZSx0KXtyLmVtaXQoInZ1ZXg6bXV0YXRpb24iLGUsdCl9KSx7cHJlcGVuZDohMH0pLGUuc3Vic2NyaWJlQWN0aW9uKChmdW5jdGlvbihlLHQpe3IuZW1pdCgidnVleDphY3Rpb24iLGUsdCl9KSx7cHJlcGVuZDohMH0pKX1mdW5jdGlvbiBhKGUsdCl7cmV0dXJuIGUuZmlsdGVyKHQpWzBdfWZ1bmN0aW9uIHMoZSx0KXtpZih2b2lkIDA9PT10JiYodD1bXSksbnVsbD09PWV8fCJvYmplY3QiIT09dHlwZW9mIGUpcmV0dXJuIGU7dmFyIG49YSh0LChmdW5jdGlvbih0KXtyZXR1cm4gdC5vcmlnaW5hbD09PWV9KSk7aWYobilyZXR1cm4gbi5jb3B5O3ZhciBpPUFycmF5LmlzQXJyYXkoZSk/W106e307cmV0dXJuIHQucHVzaCh7b3JpZ2luYWw6ZSxjb3B5Oml9KSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtpW25dPXMoZVtuXSx0KX0pKSxpfWZ1bmN0aW9uIGwoZSx0KXtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdChlW25dLG4pfSkpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIG51bGwhPT1lJiYib2JqZWN0Ij09PXR5cGVvZiBlfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgZS50aGVufWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0KX19dmFyIGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnJ1bnRpbWU9dCx0aGlzLl9jaGlsZHJlbj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX3Jhd01vZHVsZT1lO3ZhciBuPWUuc3RhdGU7dGhpcy5zdGF0ZT0oImZ1bmN0aW9uIj09PXR5cGVvZiBuP24oKTpuKXx8e319LGY9e25hbWVzcGFjZWQ6e2NvbmZpZ3VyYWJsZTohMH19O2YubmFtZXNwYWNlZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Jhd01vZHVsZS5uYW1lc3BhY2VkfSxkLnByb3RvdHlwZS5hZGRDaGlsZD1mdW5jdGlvbihlLHQpe3RoaXMuX2NoaWxkcmVuW2VdPXR9LGQucHJvdG90eXBlLnJlbW92ZUNoaWxkPWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXX0sZC5wcm90b3R5cGUuZ2V0Q2hpbGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoaWxkcmVuW2VdfSxkLnByb3RvdHlwZS5oYXNDaGlsZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLl9jaGlsZHJlbn0sZC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX3Jhd01vZHVsZS5uYW1lc3BhY2VkPWUubmFtZXNwYWNlZCxlLmFjdGlvbnMmJih0aGlzLl9yYXdNb2R1bGUuYWN0aW9ucz1lLmFjdGlvbnMpLGUubXV0YXRpb25zJiYodGhpcy5fcmF3TW9kdWxlLm11dGF0aW9ucz1lLm11dGF0aW9ucyksZS5nZXR0ZXJzJiYodGhpcy5fcmF3TW9kdWxlLmdldHRlcnM9ZS5nZXR0ZXJzKX0sZC5wcm90b3R5cGUuZm9yRWFjaENoaWxkPWZ1bmN0aW9uKGUpe2wodGhpcy5fY2hpbGRyZW4sZSl9LGQucHJvdG90eXBlLmZvckVhY2hHZXR0ZXI9ZnVuY3Rpb24oZSl7dGhpcy5fcmF3TW9kdWxlLmdldHRlcnMmJmwodGhpcy5fcmF3TW9kdWxlLmdldHRlcnMsZSl9LGQucHJvdG90eXBlLmZvckVhY2hBY3Rpb249ZnVuY3Rpb24oZSl7dGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMmJmwodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMsZSl9LGQucHJvdG90eXBlLmZvckVhY2hNdXRhdGlvbj1mdW5jdGlvbihlKXt0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zJiZsKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMsZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQucHJvdG90eXBlLGYpO3ZhciBwPWZ1bmN0aW9uKGUpe3RoaXMucmVnaXN0ZXIoW10sZSwhMSl9O2Z1bmN0aW9uIG0oZSx0LG4pe2lmKHQudXBkYXRlKG4pLG4ubW9kdWxlcylmb3IodmFyIGkgaW4gbi5tb2R1bGVzKXtpZighdC5nZXRDaGlsZChpKSlyZXR1cm4gdm9pZCAwO20oZS5jb25jYXQoaSksdC5nZXRDaGlsZChpKSxuLm1vZHVsZXNbaV0pfX1wLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlLmdldENoaWxkKHQpfSksdGhpcy5yb290KX0scC5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucm9vdDtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQ9dC5nZXRDaGlsZChuKSxlKyh0Lm5hbWVzcGFjZWQ/bisiLyI6IiIpfSksIiIpfSxwLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7bShbXSx0aGlzLnJvb3QsZSl9LHAucHJvdG90eXBlLnJlZ2lzdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzO3ZvaWQgMD09PW4mJihuPSEwKTt2YXIgcj1uZXcgZCh0LG4pO2lmKDA9PT1lLmxlbmd0aCl0aGlzLnJvb3Q9cjtlbHNle3ZhciBvPXRoaXMuZ2V0KGUuc2xpY2UoMCwtMSkpO28uYWRkQ2hpbGQoZVtlLmxlbmd0aC0xXSxyKX10Lm1vZHVsZXMmJmwodC5tb2R1bGVzLChmdW5jdGlvbih0LHIpe2kucmVnaXN0ZXIoZS5jb25jYXQociksdCxuKX0pKX0scC5wcm90b3R5cGUudW5yZWdpc3Rlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldChlLnNsaWNlKDAsLTEpKSxuPWVbZS5sZW5ndGgtMV0saT10LmdldENoaWxkKG4pO2kmJmkucnVudGltZSYmdC5yZW1vdmVDaGlsZChuKX0scC5wcm90b3R5cGUuaXNSZWdpc3RlcmVkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0KGUuc2xpY2UoMCwtMSkpLG49ZVtlLmxlbmd0aC0xXTtyZXR1cm4hIXQmJnQuaGFzQ2hpbGQobil9O3ZhciBnO3ZhciB2PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dm9pZCAwPT09ZSYmKGU9e30pLCFnJiYidW5kZWZpbmVkIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5WdWUmJkEod2luZG93LlZ1ZSk7dmFyIG49ZS5wbHVnaW5zO3ZvaWQgMD09PW4mJihuPVtdKTt2YXIgaT1lLnN0cmljdDt2b2lkIDA9PT1pJiYoaT0hMSksdGhpcy5fY29tbWl0dGluZz0hMSx0aGlzLl9hY3Rpb25zPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnM9W10sdGhpcy5fbXV0YXRpb25zPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fd3JhcHBlZEdldHRlcnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9tb2R1bGVzPW5ldyBwKGUpLHRoaXMuX21vZHVsZXNOYW1lc3BhY2VNYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9zdWJzY3JpYmVycz1bXSx0aGlzLl93YXRjaGVyVk09bmV3IGcsdGhpcy5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIHI9dGhpcyxhPXRoaXMscz1hLmRpc3BhdGNoLGw9YS5jb21taXQ7dGhpcy5kaXNwYXRjaD1mdW5jdGlvbihlLHQpe3JldHVybiBzLmNhbGwocixlLHQpfSx0aGlzLmNvbW1pdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChyLGUsdCxuKX0sdGhpcy5zdHJpY3Q9aTt2YXIgYz10aGlzLl9tb2R1bGVzLnJvb3Quc3RhdGU7dyh0aGlzLGMsW10sdGhpcy5fbW9kdWxlcy5yb290KSxfKHRoaXMsYyksbi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pKTt2YXIgdT12b2lkIDAhPT1lLmRldnRvb2xzP2UuZGV2dG9vbHM6Zy5jb25maWcuZGV2dG9vbHM7dSYmbyh0aGlzKX0seT17c3RhdGU6e2NvbmZpZ3VyYWJsZTohMH19O2Z1bmN0aW9uIGIoZSx0LG4pe3JldHVybiB0LmluZGV4T2YoZSk8MCYmKG4mJm4ucHJlcGVuZD90LnVuc2hpZnQoZSk6dC5wdXNoKGUpKSxmdW5jdGlvbigpe3ZhciBuPXQuaW5kZXhPZihlKTtuPi0xJiZ0LnNwbGljZShuLDEpfX1mdW5jdGlvbiB4KGUsdCl7ZS5fYWN0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX211dGF0aW9ucz1PYmplY3QuY3JlYXRlKG51bGwpLGUuX3dyYXBwZWRHZXR0ZXJzPU9iamVjdC5jcmVhdGUobnVsbCksZS5fbW9kdWxlc05hbWVzcGFjZU1hcD1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBuPWUuc3RhdGU7dyhlLG4sW10sZS5fbW9kdWxlcy5yb290LCEwKSxfKGUsbix0KX1mdW5jdGlvbiBfKGUsdCxuKXt2YXIgaT1lLl92bTtlLmdldHRlcnM9e30sZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7dmFyIHI9ZS5fd3JhcHBlZEdldHRlcnMsbz17fTtsKHIsKGZ1bmN0aW9uKHQsbil7b1tuXT1oKHQsZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUuZ2V0dGVycyxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fdm1bbl19LGVudW1lcmFibGU6ITB9KX0pKTt2YXIgYT1nLmNvbmZpZy5zaWxlbnQ7Zy5jb25maWcuc2lsZW50PSEwLGUuX3ZtPW5ldyBnKHtkYXRhOnskJHN0YXRlOnR9LGNvbXB1dGVkOm99KSxnLmNvbmZpZy5zaWxlbnQ9YSxlLnN0cmljdCYmRShlKSxpJiYobiYmZS5fd2l0aENvbW1pdCgoZnVuY3Rpb24oKXtpLl9kYXRhLiQkc3RhdGU9bnVsbH0pKSxnLm5leHRUaWNrKChmdW5jdGlvbigpe3JldHVybiBpLiRkZXN0cm95KCl9KSkpfWZ1bmN0aW9uIHcoZSx0LG4saSxyKXt2YXIgbz0hbi5sZW5ndGgsYT1lLl9tb2R1bGVzLmdldE5hbWVzcGFjZShuKTtpZihpLm5hbWVzcGFjZWQmJihlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW2FdLGUuX21vZHVsZXNOYW1lc3BhY2VNYXBbYV09aSksIW8mJiFyKXt2YXIgcz1JKHQsbi5zbGljZSgwLC0xKSksbD1uW24ubGVuZ3RoLTFdO2UuX3dpdGhDb21taXQoKGZ1bmN0aW9uKCl7Zy5zZXQocyxsLGkuc3RhdGUpfSkpfXZhciBjPWkuY29udGV4dD1TKGUsYSxuKTtpLmZvckVhY2hNdXRhdGlvbigoZnVuY3Rpb24odCxuKXt2YXIgaT1hK247ayhlLGksdCxjKX0pKSxpLmZvckVhY2hBY3Rpb24oKGZ1bmN0aW9uKHQsbil7dmFyIGk9dC5yb290P246YStuLHI9dC5oYW5kbGVyfHx0O1QoZSxpLHIsYyl9KSksaS5mb3JFYWNoR2V0dGVyKChmdW5jdGlvbih0LG4pe3ZhciBpPWErbjtNKGUsaSx0LGMpfSkpLGkuZm9yRWFjaENoaWxkKChmdW5jdGlvbihpLG8pe3coZSx0LG4uY29uY2F0KG8pLGkscil9KSl9ZnVuY3Rpb24gUyhlLHQsbil7dmFyIGk9IiI9PT10LHI9e2Rpc3BhdGNoOmk/ZS5kaXNwYXRjaDpmdW5jdGlvbihuLGkscil7dmFyIG89RChuLGksciksYT1vLnBheWxvYWQscz1vLm9wdGlvbnMsbD1vLnR5cGU7cmV0dXJuIHMmJnMucm9vdHx8KGw9dCtsKSxlLmRpc3BhdGNoKGwsYSl9LGNvbW1pdDppP2UuY29tbWl0OmZ1bmN0aW9uKG4saSxyKXt2YXIgbz1EKG4saSxyKSxhPW8ucGF5bG9hZCxzPW8ub3B0aW9ucyxsPW8udHlwZTtzJiZzLnJvb3R8fChsPXQrbCksZS5jb21taXQobCxhLHMpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHIse2dldHRlcnM6e2dldDppP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0dGVyc306ZnVuY3Rpb24oKXtyZXR1cm4gQyhlLHQpfX0sc3RhdGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBJKGUuc3RhdGUsbil9fX0pLHJ9ZnVuY3Rpb24gQyhlLHQpe2lmKCFlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGVbdF0pe3ZhciBuPXt9LGk9dC5sZW5ndGg7T2JqZWN0LmtleXMoZS5nZXR0ZXJzKS5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyLnNsaWNlKDAsaSk9PT10KXt2YXIgbz1yLnNsaWNlKGkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLG8se2dldDpmdW5jdGlvbigpe3JldHVybiBlLmdldHRlcnNbcl19LGVudW1lcmFibGU6ITB9KX19KSksZS5fbWFrZUxvY2FsR2V0dGVyc0NhY2hlW3RdPW59cmV0dXJuIGUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVt0XX1mdW5jdGlvbiBrKGUsdCxuLGkpe3ZhciByPWUuX211dGF0aW9uc1t0XXx8KGUuX211dGF0aW9uc1t0XT1bXSk7ci5wdXNoKChmdW5jdGlvbih0KXtuLmNhbGwoZSxpLnN0YXRlLHQpfSkpfWZ1bmN0aW9uIFQoZSx0LG4saSl7dmFyIHI9ZS5fYWN0aW9uc1t0XXx8KGUuX2FjdGlvbnNbdF09W10pO3IucHVzaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5jYWxsKGUse2Rpc3BhdGNoOmkuZGlzcGF0Y2gsY29tbWl0OmkuY29tbWl0LGdldHRlcnM6aS5nZXR0ZXJzLHN0YXRlOmkuc3RhdGUscm9vdEdldHRlcnM6ZS5nZXR0ZXJzLHJvb3RTdGF0ZTplLnN0YXRlfSx0KTtyZXR1cm4gdShyKXx8KHI9UHJvbWlzZS5yZXNvbHZlKHIpKSxlLl9kZXZ0b29sSG9vaz9yLmNhdGNoKChmdW5jdGlvbih0KXt0aHJvdyBlLl9kZXZ0b29sSG9vay5lbWl0KCJ2dWV4OmVycm9yIix0KSx0fSkpOnJ9KSl9ZnVuY3Rpb24gTShlLHQsbixpKXtlLl93cmFwcGVkR2V0dGVyc1t0XXx8KGUuX3dyYXBwZWRHZXR0ZXJzW3RdPWZ1bmN0aW9uKGUpe3JldHVybiBuKGkuc3RhdGUsaS5nZXR0ZXJzLGUuc3RhdGUsZS5nZXR0ZXJzKX0pfWZ1bmN0aW9uIEUoZSl7ZS5fdm0uJHdhdGNoKChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhLiQkc3RhdGV9KSwoZnVuY3Rpb24oKXswfSkse2RlZXA6ITAsc3luYzohMH0pfWZ1bmN0aW9uIEkoZSx0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF19KSxlKX1mdW5jdGlvbiBEKGUsdCxuKXtyZXR1cm4gYyhlKSYmZS50eXBlJiYobj10LHQ9ZSxlPWUudHlwZSkse3R5cGU6ZSxwYXlsb2FkOnQsb3B0aW9uczpufX1mdW5jdGlvbiBBKGUpe2cmJmU9PT1nfHwoZz1lLG4oZykpfXkuc3RhdGUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZtLl9kYXRhLiQkc3RhdGV9LHkuc3RhdGUuc2V0PWZ1bmN0aW9uKGUpezB9LHYucHJvdG90eXBlLmNvbW1pdD1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcyxyPUQoZSx0LG4pLG89ci50eXBlLGE9ci5wYXlsb2FkLHM9KHIub3B0aW9ucyx7dHlwZTpvLHBheWxvYWQ6YX0pLGw9dGhpcy5fbXV0YXRpb25zW29dO2wmJih0aGlzLl93aXRoQ29tbWl0KChmdW5jdGlvbigpe2wuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZShhKX0pKX0pKSx0aGlzLl9zdWJzY3JpYmVycy5zbGljZSgpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlKHMsaS5zdGF0ZSl9KSkpfSx2LnByb3RvdHlwZS5kaXNwYXRjaD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMsaT1EKGUsdCkscj1pLnR5cGUsbz1pLnBheWxvYWQsYT17dHlwZTpyLHBheWxvYWQ6b30scz10aGlzLl9hY3Rpb25zW3JdO2lmKHMpe3RyeXt0aGlzLl9hY3Rpb25TdWJzY3JpYmVycy5zbGljZSgpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYmVmb3JlfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJlZm9yZShhLG4uc3RhdGUpfSkpfWNhdGNoKGMpezB9dmFyIGw9cy5sZW5ndGg+MT9Qcm9taXNlLmFsbChzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUobyl9KSkpOnNbMF0obyk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2wudGhlbigoZnVuY3Rpb24odCl7dHJ5e24uX2FjdGlvblN1YnNjcmliZXJzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWZ0ZXJ9KSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWZ0ZXIoYSxuLnN0YXRlKX0pKX1jYXRjaChjKXswfWUodCl9KSwoZnVuY3Rpb24oZSl7dHJ5e24uX2FjdGlvblN1YnNjcmliZXJzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3J9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZXJyb3IoYSxuLnN0YXRlLGUpfSkpfWNhdGNoKGMpezB9dChlKX0pKX0pKX19LHYucHJvdG90eXBlLnN1YnNjcmliZT1mdW5jdGlvbihlLHQpe3JldHVybiBiKGUsdGhpcy5fc3Vic2NyaWJlcnMsdCl9LHYucHJvdG90eXBlLnN1YnNjcmliZUFjdGlvbj1mdW5jdGlvbihlLHQpe3ZhciBuPSJmdW5jdGlvbiI9PT10eXBlb2YgZT97YmVmb3JlOmV9OmU7cmV0dXJuIGIobix0aGlzLl9hY3Rpb25TdWJzY3JpYmVycyx0KX0sdi5wcm90b3R5cGUud2F0Y2g9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXM7cmV0dXJuIHRoaXMuX3dhdGNoZXJWTS4kd2F0Y2goKGZ1bmN0aW9uKCl7cmV0dXJuIGUoaS5zdGF0ZSxpLmdldHRlcnMpfSksdCxuKX0sdi5wcm90b3R5cGUucmVwbGFjZVN0YXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5fd2l0aENvbW1pdCgoZnVuY3Rpb24oKXt0Ll92bS5fZGF0YS4kJHN0YXRlPWV9KSl9LHYucHJvdG90eXBlLnJlZ2lzdGVyTW9kdWxlPWZ1bmN0aW9uKGUsdCxuKXt2b2lkIDA9PT1uJiYobj17fSksInN0cmluZyI9PT10eXBlb2YgZSYmKGU9W2VdKSx0aGlzLl9tb2R1bGVzLnJlZ2lzdGVyKGUsdCksdyh0aGlzLHRoaXMuc3RhdGUsZSx0aGlzLl9tb2R1bGVzLmdldChlKSxuLnByZXNlcnZlU3RhdGUpLF8odGhpcyx0aGlzLnN0YXRlKX0sdi5wcm90b3R5cGUudW5yZWdpc3Rlck1vZHVsZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzOyJzdHJpbmciPT09dHlwZW9mIGUmJihlPVtlXSksdGhpcy5fbW9kdWxlcy51bnJlZ2lzdGVyKGUpLHRoaXMuX3dpdGhDb21taXQoKGZ1bmN0aW9uKCl7dmFyIG49SSh0LnN0YXRlLGUuc2xpY2UoMCwtMSkpO2cuZGVsZXRlKG4sZVtlLmxlbmd0aC0xXSl9KSkseCh0aGlzKX0sdi5wcm90b3R5cGUuaGFzTW9kdWxlPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGUmJihlPVtlXSksdGhpcy5fbW9kdWxlcy5pc1JlZ2lzdGVyZWQoZSl9LHYucHJvdG90eXBlLmhvdFVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9tb2R1bGVzLnVwZGF0ZShlKSx4KHRoaXMsITApfSx2LnByb3RvdHlwZS5fd2l0aENvbW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jb21taXR0aW5nO3RoaXMuX2NvbW1pdHRpbmc9ITAsZSgpLHRoaXMuX2NvbW1pdHRpbmc9dH0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXModi5wcm90b3R5cGUseSk7dmFyIE89QigoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gJCh0KS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmtleSxyPXQudmFsO25baV09ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRzdG9yZS5zdGF0ZSxuPXRoaXMuJHN0b3JlLmdldHRlcnM7aWYoZSl7dmFyIGk9Rih0aGlzLiRzdG9yZSwibWFwU3RhdGUiLGUpO2lmKCFpKXJldHVybjt0PWkuY29udGV4dC5zdGF0ZSxuPWkuY29udGV4dC5nZXR0ZXJzfXJldHVybiJmdW5jdGlvbiI9PT10eXBlb2Ygcj9yLmNhbGwodGhpcyx0LG4pOnRbcl19LG5baV0udnVleD0hMH0pKSxufSkpLFA9QigoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gJCh0KS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmtleSxyPXQudmFsO25baV09ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7d2hpbGUobi0tKXRbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuJHN0b3JlLmNvbW1pdDtpZihlKXt2YXIgbz1GKHRoaXMuJHN0b3JlLCJtYXBNdXRhdGlvbnMiLGUpO2lmKCFvKXJldHVybjtpPW8uY29udGV4dC5jb21taXR9cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiByP3IuYXBwbHkodGhpcyxbaV0uY29uY2F0KHQpKTppLmFwcGx5KHRoaXMuJHN0b3JlLFtyXS5jb25jYXQodCkpfX0pKSxufSkpLEw9QigoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gJCh0KS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmtleSxyPXQudmFsO3I9ZStyLG5baV09ZnVuY3Rpb24oKXtpZighZXx8Rih0aGlzLiRzdG9yZSwibWFwR2V0dGVycyIsZSkpcmV0dXJuIHRoaXMuJHN0b3JlLmdldHRlcnNbcl19LG5baV0udnVleD0hMH0pKSxufSkpLE49QigoZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4gJCh0KS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10LmtleSxyPXQudmFsO25baV09ZnVuY3Rpb24oKXt2YXIgdD1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7d2hpbGUobi0tKXRbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuJHN0b3JlLmRpc3BhdGNoO2lmKGUpe3ZhciBvPUYodGhpcy4kc3RvcmUsIm1hcEFjdGlvbnMiLGUpO2lmKCFvKXJldHVybjtpPW8uY29udGV4dC5kaXNwYXRjaH1yZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHI/ci5hcHBseSh0aGlzLFtpXS5jb25jYXQodCkpOmkuYXBwbHkodGhpcy4kc3RvcmUsW3JdLmNvbmNhdCh0KSl9fSkpLG59KSksUj1mdW5jdGlvbihlKXtyZXR1cm57bWFwU3RhdGU6Ty5iaW5kKG51bGwsZSksbWFwR2V0dGVyczpMLmJpbmQobnVsbCxlKSxtYXBNdXRhdGlvbnM6UC5iaW5kKG51bGwsZSksbWFwQWN0aW9uczpOLmJpbmQobnVsbCxlKX19O2Z1bmN0aW9uICQoZSl7cmV0dXJuIHooZSk/QXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue2tleTplLHZhbDplfX0pKTpPYmplY3Qua2V5cyhlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntrZXk6dCx2YWw6ZVt0XX19KSk6W119ZnVuY3Rpb24geihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKXx8YyhlKX1mdW5jdGlvbiBCKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiJzdHJpbmciIT09dHlwZW9mIHQ/KG49dCx0PSIiKToiLyIhPT10LmNoYXJBdCh0Lmxlbmd0aC0xKSYmKHQrPSIvIiksZSh0LG4pfX1mdW5jdGlvbiBGKGUsdCxuKXt2YXIgaT1lLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25dO3JldHVybiBpfWZ1bmN0aW9uIFYoZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciB0PWUuY29sbGFwc2VkO3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbj1lLmZpbHRlcjt2b2lkIDA9PT1uJiYobj1mdW5jdGlvbihlLHQsbil7cmV0dXJuITB9KTt2YXIgaT1lLnRyYW5zZm9ybWVyO3ZvaWQgMD09PWkmJihpPWZ1bmN0aW9uKGUpe3JldHVybiBlfSk7dmFyIHI9ZS5tdXRhdGlvblRyYW5zZm9ybWVyO3ZvaWQgMD09PXImJihyPWZ1bmN0aW9uKGUpe3JldHVybiBlfSk7dmFyIG89ZS5hY3Rpb25GaWx0ZXI7dm9pZCAwPT09byYmKG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4hMH0pO3ZhciBhPWUuYWN0aW9uVHJhbnNmb3JtZXI7dm9pZCAwPT09YSYmKGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTt2YXIgbD1lLmxvZ011dGF0aW9uczt2b2lkIDA9PT1sJiYobD0hMCk7dmFyIGM9ZS5sb2dBY3Rpb25zO3ZvaWQgMD09PWMmJihjPSEwKTt2YXIgdT1lLmxvZ2dlcjtyZXR1cm4gdm9pZCAwPT09dSYmKHU9Y29uc29sZSksZnVuY3Rpb24oZSl7dmFyIGg9cyhlLnN0YXRlKTsidW5kZWZpbmVkIiE9PXR5cGVvZiB1JiYobCYmZS5zdWJzY3JpYmUoKGZ1bmN0aW9uKGUsbyl7dmFyIGE9cyhvKTtpZihuKGUsaCxhKSl7dmFyIGw9VygpLGM9cihlKSxkPSJtdXRhdGlvbiAiK2UudHlwZStsO2oodSxkLHQpLHUubG9nKCIlYyBwcmV2IHN0YXRlIiwiY29sb3I6ICM5RTlFOUU7IGZvbnQtd2VpZ2h0OiBib2xkIixpKGgpKSx1LmxvZygiJWMgbXV0YXRpb24iLCJjb2xvcjogIzAzQTlGNDsgZm9udC13ZWlnaHQ6IGJvbGQiLGMpLHUubG9nKCIlYyBuZXh0IHN0YXRlIiwiY29sb3I6ICM0Q0FGNTA7IGZvbnQtd2VpZ2h0OiBib2xkIixpKGEpKSxIKHUpfWg9YX0pKSxjJiZlLnN1YnNjcmliZUFjdGlvbigoZnVuY3Rpb24oZSxuKXtpZihvKGUsbikpe3ZhciBpPVcoKSxyPWEoZSkscz0iYWN0aW9uICIrZS50eXBlK2k7aih1LHMsdCksdS5sb2coIiVjIGFjdGlvbiIsImNvbG9yOiAjMDNBOUY0OyBmb250LXdlaWdodDogYm9sZCIsciksSCh1KX19KSkpfX1mdW5jdGlvbiBqKGUsdCxuKXt2YXIgaT1uP2UuZ3JvdXBDb2xsYXBzZWQ6ZS5ncm91cDt0cnl7aS5jYWxsKGUsdCl9Y2F0Y2gocil7ZS5sb2codCl9fWZ1bmN0aW9uIEgoZSl7dHJ5e2UuZ3JvdXBFbmQoKX1jYXRjaCh0KXtlLmxvZygi4oCU4oCUIGxvZyBlbmQg4oCU4oCUIil9fWZ1bmN0aW9uIFcoKXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4iIEAgIitVKGUuZ2V0SG91cnMoKSwyKSsiOiIrVShlLmdldE1pbnV0ZXMoKSwyKSsiOiIrVShlLmdldFNlY29uZHMoKSwyKSsiLiIrVShlLmdldE1pbGxpc2Vjb25kcygpLDMpfWZ1bmN0aW9uIEcoZSx0KXtyZXR1cm4gbmV3IEFycmF5KHQrMSkuam9pbihlKX1mdW5jdGlvbiBVKGUsdCl7cmV0dXJuIEcoIjAiLHQtZS50b1N0cmluZygpLmxlbmd0aCkrZX12YXIgcT17U3RvcmU6dixpbnN0YWxsOkEsdmVyc2lvbjoiMy42LjIiLG1hcFN0YXRlOk8sbWFwTXV0YXRpb25zOlAsbWFwR2V0dGVyczpMLG1hcEFjdGlvbnM6TixjcmVhdGVOYW1lc3BhY2VkSGVscGVyczpSLGNyZWF0ZUxvZ2dlcjpWfTt0WyJhIl09cX0pLmNhbGwodGhpcyxuKCJjOGJhIikpfSwiMmY3MyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKSxyPW4oIjZkOGIiKSxvPW4oIjFlMzIiKTtuKCIxY2NmIiksbigiZjVlNiIpLG4oIjc5MmUiKSxuKCJjYjhmIiksbigiNmFjZiIpLGkucmVnaXN0ZXJMYXlvdXQoci5jdXJyeShvLCJiYXIiKSksaS5leHRlbmRDb21wb25lbnRWaWV3KHt0eXBlOiJwb2xhciJ9KX0sIjJmOTEiOmZ1bmN0aW9uKGUsdCl7dmFyIG49WyJpdGVtU3R5bGUiLCJib3JkZXJDb2xvciJdO2Z1bmN0aW9uIGkoZSx0KXt2YXIgaT1lLmdldCgiY29sb3IiKTtlLmVhY2hSYXdTZXJpZXNCeVR5cGUoImJveHBsb3QiLChmdW5jdGlvbih0KXt2YXIgcj1pW3Quc2VyaWVzSW5kZXglaS5sZW5ndGhdLG89dC5nZXREYXRhKCk7by5zZXRWaXN1YWwoe2xlZ2VuZFN5bWJvbDoicm91bmRSZWN0Iixjb2xvcjp0LmdldChuKXx8cn0pLGUuaXNTZXJpZXNGaWx0ZXJlZCh0KXx8by5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1vLmdldEl0ZW1Nb2RlbChlKTtvLnNldEl0ZW1WaXN1YWwoZSx7Y29sb3I6dC5nZXQobiwhMCl9KX0pKX0pKX1lLmV4cG9ydHM9aX0sIjJmOWEiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sMzAxNDpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNGY4NSIpLHI9bigiMzMwMSIpLG89aS5leHRlbmQoe3R5cGU6InNlcmllcy5fX2Jhc2VfYmFyX18iLGdldEluaXRpYWxEYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcy5nZXRTb3VyY2UoKSx0aGlzLHt1c2VFbmNvZGVEZWZhdWx0ZXI6ITB9KX0sZ2V0TWFya2VyUG9zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jb29yZGluYXRlU3lzdGVtO2lmKHQpe3ZhciBuPXQuZGF0YVRvUG9pbnQodC5jbGFtcERhdGEoZSkpLGk9dGhpcy5nZXREYXRhKCkscj1pLmdldExheW91dCgib2Zmc2V0Iiksbz1pLmdldExheW91dCgic2l6ZSIpLGE9dC5nZXRCYXNlQXhpcygpLmlzSG9yaXpvbnRhbCgpPzA6MTtyZXR1cm4gblthXSs9citvLzIsbn1yZXR1cm5bTmFOLE5hTl19LGRlZmF1bHRPcHRpb246e3psZXZlbDowLHo6Mixjb29yZGluYXRlU3lzdGVtOiJjYXJ0ZXNpYW4yZCIsbGVnZW5kSG92ZXJMaW5rOiEwLGJhck1pbkhlaWdodDowLGJhck1pbkFuZ2xlOjAsbGFyZ2U6ITEsbGFyZ2VUaHJlc2hvbGQ6NDAwLHByb2dyZXNzaXZlOjNlMyxwcm9ncmVzc2l2ZUNodW5rTW9kZToibW9kIixpdGVtU3R5bGU6e30sZW1waGFzaXM6e319fSk7ZS5leHBvcnRzPW99LCIzMDFjIjpmdW5jdGlvbihlLHQsbil7bigiZTE5OCIpKCJhc3luY0l0ZXJhdG9yIil9LDMwNDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImUxZmMiKSxyPW4oIjBkYTgiKSxvPW4oIjc2YTUiKSxhPW4oImQ5ZmMiKSxzPW4oImM3YTIiKSxsPW4oImFlNjkiKSxjPW4oImNiMTEiKSx1PW4oImNiZTUiKSxoPW4oIjg3YjEiKSxkPW4oImQ0OTgiKSxmPW4oIjQ4YTkiKSxwPW4oIjJiNjEiKSxtPW4oIjE2ODciKSxnPW4oIjM0MmQiKSx2PWcuY3JlYXRlRnJvbVN0cmluZyx5PW4oIjZkOGIiKSxiPXkuaXNTdHJpbmcseD15LmV4dGVuZCxfPXkuZGVmYXVsdHMsdz15LnRyaW0sUz15LmVhY2gsQz0vW1xzLF0rLztmdW5jdGlvbiBrKGUpe2lmKGIoZSkpe3ZhciB0PW5ldyBET01QYXJzZXI7ZT10LnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfTk9PT1lLm5vZGVUeXBlJiYoZT1lLmZpcnN0Q2hpbGQpO3doaWxlKCJzdmciIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfHwxIT09ZS5ub2RlVHlwZSllPWUubmV4dFNpYmxpbmc7cmV0dXJuIGV9ZnVuY3Rpb24gVCgpe3RoaXMuX2RlZnM9e30sdGhpcy5fcm9vdD1udWxsLHRoaXMuX2lzRGVmaW5lPSExLHRoaXMuX2lzVGV4dD0hMX1ULnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49ayhlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgc3ZnIik7dmFyIHI9bmV3IGk7dGhpcy5fcm9vdD1yO3ZhciBvPW4uZ2V0QXR0cmlidXRlKCJ2aWV3Qm94Iil8fCIiLGE9cGFyc2VGbG9hdChuLmdldEF0dHJpYnV0ZSgid2lkdGgiKXx8dC53aWR0aCksbD1wYXJzZUZsb2F0KG4uZ2V0QXR0cmlidXRlKCJoZWlnaHQiKXx8dC5oZWlnaHQpO2lzTmFOKGEpJiYoYT1udWxsKSxpc05hTihsKSYmKGw9bnVsbCksUChuLHIsbnVsbCwhMCk7dmFyIGMsdSxoPW4uZmlyc3RDaGlsZDt3aGlsZShoKXRoaXMuX3BhcnNlTm9kZShoLHIpLGg9aC5uZXh0U2libGluZztpZihvKXt2YXIgZD13KG8pLnNwbGl0KEMpO2QubGVuZ3RoPj00JiYoYz17eDpwYXJzZUZsb2F0KGRbMF18fDApLHk6cGFyc2VGbG9hdChkWzFdfHwwKSx3aWR0aDpwYXJzZUZsb2F0KGRbMl0pLGhlaWdodDpwYXJzZUZsb2F0KGRbM10pfSl9aWYoYyYmbnVsbCE9YSYmbnVsbCE9bCYmKHU9RihjLGEsbCksIXQuaWdub3JlVmlld0JveCkpe3ZhciBmPXI7cj1uZXcgaSxyLmFkZChmKSxmLnNjYWxlPXUuc2NhbGUuc2xpY2UoKSxmLnBvc2l0aW9uPXUucG9zaXRpb24uc2xpY2UoKX1yZXR1cm4gdC5pZ25vcmVSb290Q2xpcHx8bnVsbD09YXx8bnVsbD09bHx8ci5zZXRDbGlwUGF0aChuZXcgcyh7c2hhcGU6e3g6MCx5OjAsd2lkdGg6YSxoZWlnaHQ6bH19KSkse3Jvb3Q6cix3aWR0aDphLGhlaWdodDpsLHZpZXdCb3hSZWN0OmMsdmlld0JveFRyYW5zZm9ybTp1fX0sVC5wcm90b3R5cGUuX3BhcnNlTm9kZT1mdW5jdGlvbihlLHQpe3ZhciBuLGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCJkZWZzIj09PWk/dGhpcy5faXNEZWZpbmU9ITA6InRleHQiPT09aSYmKHRoaXMuX2lzVGV4dD0hMCksdGhpcy5faXNEZWZpbmUpe3ZhciByPUVbaV07aWYocil7dmFyIG89ci5jYWxsKHRoaXMsZSksYT1lLmdldEF0dHJpYnV0ZSgiaWQiKTthJiYodGhpcy5fZGVmc1thXT1vKX19ZWxzZXtyPU1baV07ciYmKG49ci5jYWxsKHRoaXMsZSx0KSx0LmFkZChuKSl9dmFyIHM9ZS5maXJzdENoaWxkO3doaWxlKHMpMT09PXMubm9kZVR5cGUmJnRoaXMuX3BhcnNlTm9kZShzLG4pLDM9PT1zLm5vZGVUeXBlJiZ0aGlzLl9pc1RleHQmJnRoaXMuX3BhcnNlVGV4dChzLG4pLHM9cy5uZXh0U2libGluZzsiZGVmcyI9PT1pP3RoaXMuX2lzRGVmaW5lPSExOiJ0ZXh0Ij09PWkmJih0aGlzLl9pc1RleHQ9ITEpfSxULnByb3RvdHlwZS5fcGFyc2VUZXh0PWZ1bmN0aW9uKGUsdCl7aWYoMT09PWUubm9kZVR5cGUpe3ZhciBuPWUuZ2V0QXR0cmlidXRlKCJkeCIpfHwwLGk9ZS5nZXRBdHRyaWJ1dGUoImR5Iil8fDA7dGhpcy5fdGV4dFgrPXBhcnNlRmxvYXQobiksdGhpcy5fdGV4dFkrPXBhcnNlRmxvYXQoaSl9dmFyIHI9bmV3IG8oe3N0eWxlOnt0ZXh0OmUudGV4dENvbnRlbnQsdHJhbnNmb3JtVGV4dDohMH0scG9zaXRpb246W3RoaXMuX3RleHRYfHwwLHRoaXMuX3RleHRZfHwwXX0pO0QodCxyKSxQKGUscix0aGlzLl9kZWZzKTt2YXIgYT1yLnN0eWxlLmZvbnRTaXplO2EmJmE8OSYmKHIuc3R5bGUuZm9udFNpemU9OSxyLnNjYWxlPXIuc2NhbGV8fFsxLDFdLHIuc2NhbGVbMF0qPWEvOSxyLnNjYWxlWzFdKj1hLzkpO3ZhciBzPXIuZ2V0Qm91bmRpbmdSZWN0KCk7cmV0dXJuIHRoaXMuX3RleHRYKz1zLndpZHRoLHQuYWRkKHIpLHJ9O3ZhciBNPXtnOmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IGk7cmV0dXJuIEQodCxuKSxQKGUsbix0aGlzLl9kZWZzKSxufSxyZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IHM7cmV0dXJuIEQodCxuKSxQKGUsbix0aGlzLl9kZWZzKSxuLnNldFNoYXBlKHt4OnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoIngiKXx8MCkseTpwYXJzZUZsb2F0KGUuZ2V0QXR0cmlidXRlKCJ5Iil8fDApLHdpZHRoOnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoIndpZHRoIil8fDApLGhlaWdodDpwYXJzZUZsb2F0KGUuZ2V0QXR0cmlidXRlKCJoZWlnaHQiKXx8MCl9KSxufSxjaXJjbGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgYTtyZXR1cm4gRCh0LG4pLFAoZSxuLHRoaXMuX2RlZnMpLG4uc2V0U2hhcGUoe2N4OnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoImN4Iil8fDApLGN5OnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoImN5Iil8fDApLHI6cGFyc2VGbG9hdChlLmdldEF0dHJpYnV0ZSgiciIpfHwwKX0pLG59LGxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgYztyZXR1cm4gRCh0LG4pLFAoZSxuLHRoaXMuX2RlZnMpLG4uc2V0U2hhcGUoe3gxOnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoIngxIil8fDApLHkxOnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoInkxIil8fDApLHgyOnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoIngyIil8fDApLHkyOnBhcnNlRmxvYXQoZS5nZXRBdHRyaWJ1dGUoInkyIil8fDApfSksbn0sZWxsaXBzZTpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBsO3JldHVybiBEKHQsbiksUChlLG4sdGhpcy5fZGVmcyksbi5zZXRTaGFwZSh7Y3g6cGFyc2VGbG9hdChlLmdldEF0dHJpYnV0ZSgiY3giKXx8MCksY3k6cGFyc2VGbG9hdChlLmdldEF0dHJpYnV0ZSgiY3kiKXx8MCkscng6cGFyc2VGbG9hdChlLmdldEF0dHJpYnV0ZSgicngiKXx8MCkscnk6cGFyc2VGbG9hdChlLmdldEF0dHJpYnV0ZSgicnkiKXx8MCl9KSxufSxwb2x5Z29uOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRBdHRyaWJ1dGUoInBvaW50cyIpO24mJihuPUEobikpO3ZhciBpPW5ldyBoKHtzaGFwZTp7cG9pbnRzOm58fFtdfX0pO3JldHVybiBEKHQsaSksUChlLGksdGhpcy5fZGVmcyksaX0scG9seWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgdTtEKHQsbiksUChlLG4sdGhpcy5fZGVmcyk7dmFyIGk9ZS5nZXRBdHRyaWJ1dGUoInBvaW50cyIpO2kmJihpPUEoaSkpO3ZhciByPW5ldyBkKHtzaGFwZTp7cG9pbnRzOml8fFtdfX0pO3JldHVybiByfSxpbWFnZTpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyByO3JldHVybiBEKHQsbiksUChlLG4sdGhpcy5fZGVmcyksbi5zZXRTdHlsZSh7aW1hZ2U6ZS5nZXRBdHRyaWJ1dGUoInhsaW5rOmhyZWYiKSx4OmUuZ2V0QXR0cmlidXRlKCJ4IikseTplLmdldEF0dHJpYnV0ZSgieSIpLHdpZHRoOmUuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpLGhlaWdodDplLmdldEF0dHJpYnV0ZSgiaGVpZ2h0Iil9KSxufSx0ZXh0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRBdHRyaWJ1dGUoIngiKXx8MCxyPWUuZ2V0QXR0cmlidXRlKCJ5Iil8fDAsbz1lLmdldEF0dHJpYnV0ZSgiZHgiKXx8MCxhPWUuZ2V0QXR0cmlidXRlKCJkeSIpfHwwO3RoaXMuX3RleHRYPXBhcnNlRmxvYXQobikrcGFyc2VGbG9hdChvKSx0aGlzLl90ZXh0WT1wYXJzZUZsb2F0KHIpK3BhcnNlRmxvYXQoYSk7dmFyIHM9bmV3IGk7cmV0dXJuIEQodCxzKSxQKGUscyx0aGlzLl9kZWZzKSxzfSx0c3BhbjpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0QXR0cmlidXRlKCJ4Iikscj1lLmdldEF0dHJpYnV0ZSgieSIpO251bGwhPW4mJih0aGlzLl90ZXh0WD1wYXJzZUZsb2F0KG4pKSxudWxsIT1yJiYodGhpcy5fdGV4dFk9cGFyc2VGbG9hdChyKSk7dmFyIG89ZS5nZXRBdHRyaWJ1dGUoImR4Iil8fDAsYT1lLmdldEF0dHJpYnV0ZSgiZHkiKXx8MCxzPW5ldyBpO3JldHVybiBEKHQscyksUChlLHMsdGhpcy5fZGVmcyksdGhpcy5fdGV4dFgrPW8sdGhpcy5fdGV4dFkrPWEsc30scGF0aDpmdW5jdGlvbihlLHQpe3ZhciBuPWUuZ2V0QXR0cmlidXRlKCJkIil8fCIiLGk9dihuKTtyZXR1cm4gRCh0LGkpLFAoZSxpLHRoaXMuX2RlZnMpLGl9fSxFPXtsaW5lYXJncmFkaWVudDpmdW5jdGlvbihlKXt2YXIgdD1wYXJzZUludChlLmdldEF0dHJpYnV0ZSgieDEiKXx8MCwxMCksbj1wYXJzZUludChlLmdldEF0dHJpYnV0ZSgieTEiKXx8MCwxMCksaT1wYXJzZUludChlLmdldEF0dHJpYnV0ZSgieDIiKXx8MTAsMTApLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoInkyIil8fDAsMTApLG89bmV3IGYodCxuLGkscik7cmV0dXJuIEkoZSxvKSxvfSxyYWRpYWxncmFkaWVudDpmdW5jdGlvbihlKXt9fTtmdW5jdGlvbiBJKGUsdCl7dmFyIG49ZS5maXJzdENoaWxkO3doaWxlKG4pe2lmKDE9PT1uLm5vZGVUeXBlKXt2YXIgaT1uLmdldEF0dHJpYnV0ZSgib2Zmc2V0Iik7aT1pLmluZGV4T2YoIiUiKT4wP3BhcnNlSW50KGksMTApLzEwMDppP3BhcnNlRmxvYXQoaSk6MDt2YXIgcj1uLmdldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIpfHwiIzAwMDAwMCI7dC5hZGRDb2xvclN0b3AoaSxyKX1uPW4ubmV4dFNpYmxpbmd9fWZ1bmN0aW9uIEQoZSx0KXtlJiZlLl9faW5oZXJpdGVkU3R5bGUmJih0Ll9faW5oZXJpdGVkU3R5bGV8fCh0Ll9faW5oZXJpdGVkU3R5bGU9e30pLF8odC5fX2luaGVyaXRlZFN0eWxlLGUuX19pbmhlcml0ZWRTdHlsZSkpfWZ1bmN0aW9uIEEoZSl7Zm9yKHZhciB0PXcoZSkuc3BsaXQoQyksbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKz0yKXt2YXIgcj1wYXJzZUZsb2F0KHRbaV0pLG89cGFyc2VGbG9hdCh0W2krMV0pO24ucHVzaChbcixvXSl9cmV0dXJuIG59dmFyIE89e2ZpbGw6ImZpbGwiLHN0cm9rZToic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIjoibGluZVdpZHRoIixvcGFjaXR5OiJvcGFjaXR5IiwiZmlsbC1vcGFjaXR5IjoiZmlsbE9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSI6InN0cm9rZU9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5IjoibGluZURhc2giLCJzdHJva2UtZGFzaG9mZnNldCI6ImxpbmVEYXNoT2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiOiJsaW5lQ2FwIiwic3Ryb2tlLWxpbmVqb2luIjoibGluZUpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCI6Im1pdGVyTGltaXQiLCJmb250LWZhbWlseSI6ImZvbnRGYW1pbHkiLCJmb250LXNpemUiOiJmb250U2l6ZSIsImZvbnQtc3R5bGUiOiJmb250U3R5bGUiLCJmb250LXdlaWdodCI6ImZvbnRXZWlnaHQiLCJ0ZXh0LWFsaWduIjoidGV4dEFsaWduIiwiYWxpZ25tZW50LWJhc2VsaW5lIjoidGV4dEJhc2VsaW5lIn07ZnVuY3Rpb24gUChlLHQsbixpKXt2YXIgcj10Ll9faW5oZXJpdGVkU3R5bGV8fHt9LG89InRleHQiPT09dC50eXBlO2lmKDE9PT1lLm5vZGVUeXBlJiYoJChlLHQpLHgocixCKGUpKSwhaSkpZm9yKHZhciBhIGluIE8paWYoTy5oYXNPd25Qcm9wZXJ0eShhKSl7dmFyIHM9ZS5nZXRBdHRyaWJ1dGUoYSk7bnVsbCE9cyYmKHJbT1thXV09cyl9dmFyIGw9bz8idGV4dEZpbGwiOiJmaWxsIixjPW8/InRleHRTdHJva2UiOiJzdHJva2UiO3Quc3R5bGU9dC5zdHlsZXx8bmV3IHA7dmFyIHU9dC5zdHlsZTtudWxsIT1yLmZpbGwmJnUuc2V0KGwsTihyLmZpbGwsbikpLG51bGwhPXIuc3Ryb2tlJiZ1LnNldChjLE4oci5zdHJva2UsbikpLFMoWyJsaW5lV2lkdGgiLCJvcGFjaXR5IiwiZmlsbE9wYWNpdHkiLCJzdHJva2VPcGFjaXR5IiwibWl0ZXJMaW1pdCIsImZvbnRTaXplIl0sKGZ1bmN0aW9uKGUpe3ZhciB0PSJsaW5lV2lkdGgiPT09ZSYmbz8idGV4dFN0cm9rZVdpZHRoIjplO251bGwhPXJbZV0mJnUuc2V0KHQscGFyc2VGbG9hdChyW2VdKSl9KSksci50ZXh0QmFzZWxpbmUmJiJhdXRvIiE9PXIudGV4dEJhc2VsaW5lfHwoci50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiKSwiYWxwaGFiZXRpYyI9PT1yLnRleHRCYXNlbGluZSYmKHIudGV4dEJhc2VsaW5lPSJib3R0b20iKSwic3RhcnQiPT09ci50ZXh0QWxpZ24mJihyLnRleHRBbGlnbj0ibGVmdCIpLCJlbmQiPT09ci50ZXh0QWxpZ24mJihyLnRleHRBbGlnbj0icmlnaHQiKSxTKFsibGluZURhc2hPZmZzZXQiLCJsaW5lQ2FwIiwibGluZUpvaW4iLCJmb250V2VpZ2h0IiwiZm9udEZhbWlseSIsImZvbnRTdHlsZSIsInRleHRBbGlnbiIsInRleHRCYXNlbGluZSJdLChmdW5jdGlvbihlKXtudWxsIT1yW2VdJiZ1LnNldChlLHJbZV0pfSkpLHIubGluZURhc2gmJih0LnN0eWxlLmxpbmVEYXNoPXcoci5saW5lRGFzaCkuc3BsaXQoQykpLHVbY10mJiJub25lIiE9PXVbY10mJih0W2NdPSEwKSx0Ll9faW5oZXJpdGVkU3R5bGU9cn12YXIgTD0vdXJsXChccyojKC4qPylcKS87ZnVuY3Rpb24gTihlLHQpe3ZhciBuPXQmJmUmJmUubWF0Y2goTCk7aWYobil7dmFyIGk9dyhuWzFdKSxyPXRbaV07cmV0dXJuIHJ9cmV0dXJuIGV9dmFyIFI9Lyh0cmFuc2xhdGV8c2NhbGV8cm90YXRlfHNrZXdYfHNrZXdZfG1hdHJpeClcKChbXC1cczAtOVwuZSxdKilcKS9nO2Z1bmN0aW9uICQoZSx0KXt2YXIgbj1lLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7aWYobil7bj1uLnJlcGxhY2UoLywvZywiICIpO3ZhciBpPW51bGwscj1bXTtuLnJlcGxhY2UoUiwoZnVuY3Rpb24oZSx0LG4pe3IucHVzaCh0LG4pfSkpO2Zvcih2YXIgbz1yLmxlbmd0aC0xO28+MDtvLT0yKXt2YXIgYT1yW29dLHM9cltvLTFdO3N3aXRjaChpPWl8fG0uY3JlYXRlKCkscyl7Y2FzZSJ0cmFuc2xhdGUiOmE9dyhhKS5zcGxpdChDKSxtLnRyYW5zbGF0ZShpLGksW3BhcnNlRmxvYXQoYVswXSkscGFyc2VGbG9hdChhWzFdfHwwKV0pO2JyZWFrO2Nhc2Uic2NhbGUiOmE9dyhhKS5zcGxpdChDKSxtLnNjYWxlKGksaSxbcGFyc2VGbG9hdChhWzBdKSxwYXJzZUZsb2F0KGFbMV18fGFbMF0pXSk7YnJlYWs7Y2FzZSJyb3RhdGUiOmE9dyhhKS5zcGxpdChDKSxtLnJvdGF0ZShpLGkscGFyc2VGbG9hdChhWzBdKSk7YnJlYWs7Y2FzZSJza2V3IjphPXcoYSkuc3BsaXQoQyksY29uc29sZS53YXJuKCJTa2V3IHRyYW5zZm9ybSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO2JyZWFrO2Nhc2UibWF0cml4IjphPXcoYSkuc3BsaXQoQyk7aVswXT1wYXJzZUZsb2F0KGFbMF0pLGlbMV09cGFyc2VGbG9hdChhWzFdKSxpWzJdPXBhcnNlRmxvYXQoYVsyXSksaVszXT1wYXJzZUZsb2F0KGFbM10pLGlbNF09cGFyc2VGbG9hdChhWzRdKSxpWzVdPXBhcnNlRmxvYXQoYVs1XSk7YnJlYWt9fXQuc2V0TG9jYWxUcmFuc2Zvcm0oaSl9fXZhciB6PS8oW15cczo7XSspXHMqOlxzKihbXjo7XSspL2c7ZnVuY3Rpb24gQihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZSgic3R5bGUiKSxuPXt9O2lmKCF0KXJldHVybiBuO3ZhciBpLHI9e307ei5sYXN0SW5kZXg9MDt3aGlsZShudWxsIT0oaT16LmV4ZWModCkpKXJbaVsxXV09aVsyXTtmb3IodmFyIG8gaW4gTylPLmhhc093blByb3BlcnR5KG8pJiZudWxsIT1yW29dJiYobltPW29dXT1yW29dKTtyZXR1cm4gbn1mdW5jdGlvbiBGKGUsdCxuKXt2YXIgaT10L2Uud2lkdGgscj1uL2UuaGVpZ2h0LG89TWF0aC5taW4oaSxyKSxhPVtvLG9dLHM9Wy0oZS54K2Uud2lkdGgvMikqbyt0LzIsLShlLnkrZS5oZWlnaHQvMikqbytuLzJdO3JldHVybntzY2FsZTphLHBvc2l0aW9uOnN9fWZ1bmN0aW9uIFYoZSx0KXt2YXIgbj1uZXcgVDtyZXR1cm4gbi5wYXJzZShlLHQpfXQucGFyc2VYTUw9ayx0Lm1ha2VWaWV3Qm94VHJhbnNmb3JtPUYsdC5wYXJzZVNWRz1WfSwiMzA3YSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oImVhZWEiKSxvPW4oIjM4NDIiKSxhPVsyMCwxNDBdLHM9ci5leHRlbmQoe3R5cGU6InZpc3VhbE1hcC5jb250aW51b3VzIixkZWZhdWx0T3B0aW9uOnthbGlnbjoiYXV0byIsY2FsY3VsYWJsZTohMSxyYW5nZTpudWxsLHJlYWx0aW1lOiEwLGl0ZW1IZWlnaHQ6bnVsbCxpdGVtV2lkdGg6bnVsbCxob3Zlckxpbms6ITAsaG92ZXJMaW5rRGF0YVNpemU6bnVsbCxob3ZlckxpbmtPbkhhbmRsZTpudWxsfSxvcHRpb25VcGRhdGVkOmZ1bmN0aW9uKGUsdCl7cy5zdXBlckFwcGx5KHRoaXMsIm9wdGlvblVwZGF0ZWQiLGFyZ3VtZW50cyksdGhpcy5yZXNldEV4dGVudCgpLHRoaXMucmVzZXRWaXN1YWwoKGZ1bmN0aW9uKGUpe2UubWFwcGluZ01ldGhvZD0ibGluZWFyIixlLmRhdGFFeHRlbnQ9dGhpcy5nZXRFeHRlbnQoKX0pKSx0aGlzLl9yZXNldFJhbmdlKCl9LHJlc2V0SXRlbVNpemU6ZnVuY3Rpb24oKXtzLnN1cGVyQXBwbHkodGhpcywicmVzZXRJdGVtU2l6ZSIsYXJndW1lbnRzKTt2YXIgZT10aGlzLml0ZW1TaXplOyJob3Jpem9udGFsIj09PXRoaXMuX29yaWVudCYmZS5yZXZlcnNlKCksKG51bGw9PWVbMF18fGlzTmFOKGVbMF0pKSYmKGVbMF09YVswXSksKG51bGw9PWVbMV18fGlzTmFOKGVbMV0pKSYmKGVbMV09YVsxXSl9LF9yZXNldFJhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRFeHRlbnQoKSx0PXRoaXMub3B0aW9uLnJhbmdlOyF0fHx0LmF1dG8/KGUuYXV0bz0xLHRoaXMub3B0aW9uLnJhbmdlPWUpOmkuaXNBcnJheSh0KSYmKHRbMF0+dFsxXSYmdC5yZXZlcnNlKCksdFswXT1NYXRoLm1heCh0WzBdLGVbMF0pLHRbMV09TWF0aC5taW4odFsxXSxlWzFdKSl9LGNvbXBsZXRlVmlzdWFsT3B0aW9uOmZ1bmN0aW9uKCl7ci5wcm90b3R5cGUuY29tcGxldGVWaXN1YWxPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuZWFjaCh0aGlzLnN0YXRlTGlzdCwoZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb24uY29udHJvbGxlcltlXS5zeW1ib2xTaXplO3QmJnRbMF0hPT10WzFdJiYodFswXT0wKX0pLHRoaXMpfSxzZXRTZWxlY3RlZDpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbi5yYW5nZT1lLnNsaWNlKCksdGhpcy5fcmVzZXRSYW5nZSgpfSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RXh0ZW50KCksdD1vLmFzYygodGhpcy5nZXQoInJhbmdlIil8fFtdKS5zbGljZSgpKTtyZXR1cm4gdFswXT5lWzFdJiYodFswXT1lWzFdKSx0WzFdPmVbMV0mJih0WzFdPWVbMV0pLHRbMF08ZVswXSYmKHRbMF09ZVswXSksdFsxXTxlWzBdJiYodFsxXT1lWzBdKSx0fSxnZXRWYWx1ZVN0YXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9uLnJhbmdlLG49dGhpcy5nZXRFeHRlbnQoKTtyZXR1cm4odFswXTw9blswXXx8dFswXTw9ZSkmJih0WzFdPj1uWzFdfHxlPD10WzFdKT8iaW5SYW5nZSI6Im91dE9mUmFuZ2UifSxmaW5kVGFyZ2V0RGF0YUluZGljZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaFRhcmdldFNlcmllcygoZnVuY3Rpb24obil7dmFyIGk9W10scj1uLmdldERhdGEoKTtyLmVhY2godGhpcy5nZXREYXRhRGltZW5zaW9uKHIpLChmdW5jdGlvbih0LG4pe2VbMF08PXQmJnQ8PWVbMV0mJmkucHVzaChuKX0pLHRoaXMpLHQucHVzaCh7c2VyaWVzSWQ6bi5pZCxkYXRhSW5kZXg6aX0pfSksdGhpcyksdH0sZ2V0VmlzdWFsTWV0YTpmdW5jdGlvbihlKXt2YXIgdD1sKHRoaXMsIm91dE9mUmFuZ2UiLHRoaXMuZ2V0RXh0ZW50KCkpLG49bCh0aGlzLCJpblJhbmdlIix0aGlzLm9wdGlvbi5yYW5nZS5zbGljZSgpKSxpPVtdO2Z1bmN0aW9uIHIodCxuKXtpLnB1c2goe3ZhbHVlOnQsY29sb3I6ZSh0LG4pfSl9Zm9yKHZhciBvPTAsYT0wLHM9bi5sZW5ndGgsYz10Lmxlbmd0aDthPGMmJighbi5sZW5ndGh8fHRbYV08PW5bMF0pO2ErKyl0W2FdPG5bb10mJnIodFthXSwib3V0T2ZSYW5nZSIpO2Zvcih2YXIgdT0xO288cztvKyssdT0wKXUmJmkubGVuZ3RoJiZyKG5bb10sIm91dE9mUmFuZ2UiKSxyKG5bb10sImluUmFuZ2UiKTtmb3IodT0xO2E8YzthKyspKCFuLmxlbmd0aHx8bltuLmxlbmd0aC0xXTx0W2FdKSYmKHUmJihpLmxlbmd0aCYmcihpW2kubGVuZ3RoLTFdLnZhbHVlLCJvdXRPZlJhbmdlIiksdT0wKSxyKHRbYV0sIm91dE9mUmFuZ2UiKSk7dmFyIGg9aS5sZW5ndGg7cmV0dXJue3N0b3BzOmksb3V0ZXJDb2xvcnM6W2g/aVswXS5jb2xvcjoidHJhbnNwYXJlbnQiLGg/aVtoLTFdLmNvbG9yOiJ0cmFuc3BhcmVudCJdfX19KTtmdW5jdGlvbiBsKGUsdCxuKXtpZihuWzBdPT09blsxXSlyZXR1cm4gbi5zbGljZSgpO2Zvcih2YXIgaT0yMDAscj0oblsxXS1uWzBdKS9pLG89blswXSxhPVtdLHM9MDtzPD1pJiZvPG5bMV07cysrKWEucHVzaChvKSxvKz1yO3JldHVybiBhLnB1c2goblsxXSksYX12YXIgYz1zO2UuZXhwb3J0cz1jfSwiMzA3YiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKTtmdW5jdGlvbiByKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzKCksaT10IGluc3RhbmNlb2YgQXJyYXk/dFswXTp0LHI9KGUgaW5zdGFuY2VvZiBBcnJheT9lWzBdOmUpLzI7cmV0dXJuImNhdGVnb3J5Ij09PW4udHlwZT9uLmdldEJhbmRXaWR0aCgpOk1hdGguYWJzKG4uZGF0YVRvQ29vcmQoaS1yKS1uLmRhdGFUb0Nvb3JkKGkrcikpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5nZXRSZWN0KCk7cmV0dXJue2Nvb3JkU3lzOnt0eXBlOiJzaW5nbGVBeGlzIix4OnQueCx5OnQueSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH0sYXBpOntjb29yZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5kYXRhVG9Qb2ludCh0KX0sc2l6ZTppLmJpbmQocixlKX19fWUuZXhwb3J0cz1vfSwiMzA3ZCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjYxNzkiKSxvPW4oIjM4NDIiKSxhPW4oIjkyM2QiKSxzPW4oIjczY2EiKSxsPW4oIjg4ZjAiKSxjPW4oImVlMWEiKSx1PWMuZ2V0U3RhY2tlZERpbWVuc2lvbixoPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWUuZ2V0RGF0YSgpLHM9ci50eXBlO2lmKCFpLmlzQXJyYXkocikmJigibWluIj09PXN8fCJtYXgiPT09c3x8ImF2ZXJhZ2UiPT09c3x8Im1lZGlhbiI9PT1zfHxudWxsIT1yLnhBeGlzfHxudWxsIT1yLnlBeGlzKSl7dmFyIGwsYztpZihudWxsIT1yLnlBeGlzfHxudWxsIT1yLnhBeGlzKWw9dC5nZXRBeGlzKG51bGwhPXIueUF4aXM/InkiOiJ4IiksYz1pLnJldHJpZXZlKHIueUF4aXMsci54QXhpcyk7ZWxzZXt2YXIgaD1hLmdldEF4aXNJbmZvKHIsbyx0LGUpO2w9aC52YWx1ZUF4aXM7dmFyIGQ9dShvLGgudmFsdWVEYXRhRGltKTtjPWEubnVtQ2FsY3VsYXRlKG8sZCxzKX12YXIgZj0ieCI9PT1sLmRpbT8wOjEscD0xLWYsbT1pLmNsb25lKHIpLGc9e307bS50eXBlPW51bGwsbS5jb29yZD1bXSxnLmNvb3JkPVtdLG0uY29vcmRbcF09LTEvMCxnLmNvb3JkW3BdPTEvMDt2YXIgdj1uLmdldCgicHJlY2lzaW9uIik7dj49MCYmIm51bWJlciI9PT10eXBlb2YgYyYmKGM9K2MudG9GaXhlZChNYXRoLm1pbih2LDIwKSkpLG0uY29vcmRbZl09Zy5jb29yZFtmXT1jLHI9W20sZyx7dHlwZTpzLHZhbHVlSW5kZXg6ci52YWx1ZUluZGV4LHZhbHVlOmN9XX1yZXR1cm4gcj1bYS5kYXRhVHJhbnNmb3JtKGUsclswXSksYS5kYXRhVHJhbnNmb3JtKGUsclsxXSksaS5leHRlbmQoe30sclsyXSldLHJbMl0udHlwZT1yWzJdLnR5cGV8fCIiLGkubWVyZ2UoclsyXSxyWzBdKSxpLm1lcmdlKHJbMl0sclsxXSkscn07ZnVuY3Rpb24gZChlKXtyZXR1cm4haXNOYU4oZSkmJiFpc0Zpbml0ZShlKX1mdW5jdGlvbiBmKGUsdCxuLGkpe3ZhciByPTEtZSxvPWkuZGltZW5zaW9uc1tlXTtyZXR1cm4gZCh0W3JdKSYmZChuW3JdKSYmdFtlXT09PW5bZV0mJmkuZ2V0QXhpcyhvKS5jb250YWluRGF0YSh0W2VdKX1mdW5jdGlvbiBwKGUsdCl7aWYoImNhcnRlc2lhbjJkIj09PWUudHlwZSl7dmFyIG49dFswXS5jb29yZCxpPXRbMV0uY29vcmQ7aWYobiYmaSYmKGYoMSxuLGksZSl8fGYoMCxuLGksZSkpKXJldHVybiEwfXJldHVybiBhLmRhdGFGaWx0ZXIoZSx0WzBdKSYmYS5kYXRhRmlsdGVyKGUsdFsxXSl9ZnVuY3Rpb24gbShlLHQsbixpLHIpe3ZhciBhLHM9aS5jb29yZGluYXRlU3lzdGVtLGw9ZS5nZXRJdGVtTW9kZWwodCksYz1vLnBhcnNlUGVyY2VudChsLmdldCgieCIpLHIuZ2V0V2lkdGgoKSksdT1vLnBhcnNlUGVyY2VudChsLmdldCgieSIpLHIuZ2V0SGVpZ2h0KCkpO2lmKGlzTmFOKGMpfHxpc05hTih1KSl7aWYoaS5nZXRNYXJrZXJQb3NpdGlvbilhPWkuZ2V0TWFya2VyUG9zaXRpb24oZS5nZXRWYWx1ZXMoZS5kaW1lbnNpb25zLHQpKTtlbHNle3ZhciBoPXMuZGltZW5zaW9ucyxmPWUuZ2V0KGhbMF0sdCkscD1lLmdldChoWzFdLHQpO2E9cy5kYXRhVG9Qb2ludChbZixwXSl9aWYoImNhcnRlc2lhbjJkIj09PXMudHlwZSl7dmFyIG09cy5nZXRBeGlzKCJ4IiksZz1zLmdldEF4aXMoInkiKTtoPXMuZGltZW5zaW9ucztkKGUuZ2V0KGhbMF0sdCkpP2FbMF09bS50b0dsb2JhbENvb3JkKG0uZ2V0RXh0ZW50KClbbj8wOjFdKTpkKGUuZ2V0KGhbMV0sdCkpJiYoYVsxXT1nLnRvR2xvYmFsQ29vcmQoZy5nZXRFeHRlbnQoKVtuPzA6MV0pKX1pc05hTihjKXx8KGFbMF09YyksaXNOYU4odSl8fChhWzFdPXUpfWVsc2UgYT1bYyx1XTtlLnNldEl0ZW1MYXlvdXQodCxhKX12YXIgZz1sLmV4dGVuZCh7dHlwZToibWFya0xpbmUiLHVwZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbil7dC5lYWNoU2VyaWVzKChmdW5jdGlvbihlKXt2YXIgdD1lLm1hcmtMaW5lTW9kZWw7aWYodCl7dmFyIGk9dC5nZXREYXRhKCkscj10Ll9fZnJvbSxvPXQuX190bztyLmVhY2goKGZ1bmN0aW9uKHQpe20ocix0LCEwLGUsbiksbShvLHQsITEsZSxuKX0pKSxpLmVhY2goKGZ1bmN0aW9uKGUpe2kuc2V0SXRlbUxheW91dChlLFtyLmdldEl0ZW1MYXlvdXQoZSksby5nZXRJdGVtTGF5b3V0KGUpXSl9KSksdGhpcy5tYXJrZXJHcm91cE1hcC5nZXQoZS5pZCkudXBkYXRlTGF5b3V0KCl9fSksdGhpcyl9LHJlbmRlclNlcmllczpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1lLmNvb3JkaW5hdGVTeXN0ZW0sYT1lLmlkLGw9ZS5nZXREYXRhKCksYz10aGlzLm1hcmtlckdyb3VwTWFwLHU9Yy5nZXQoYSl8fGMuc2V0KGEsbmV3IHMpO3RoaXMuZ3JvdXAuYWRkKHUuZ3JvdXApO3ZhciBoPXYobyxlLHQpLGQ9aC5mcm9tLGY9aC50byxwPWgubGluZTt0Ll9fZnJvbT1kLHQuX190bz1mLHQuc2V0RGF0YShwKTt2YXIgZz10LmdldCgic3ltYm9sIikseT10LmdldCgic3ltYm9sU2l6ZSIpO2Z1bmN0aW9uIGIodCxuLGkpe3ZhciBvPXQuZ2V0SXRlbU1vZGVsKG4pO20odCxuLGksZSxyKSx0LnNldEl0ZW1WaXN1YWwobix7c3ltYm9sUm90YXRlOm8uZ2V0KCJzeW1ib2xSb3RhdGUiKSxzeW1ib2xTaXplOm8uZ2V0KCJzeW1ib2xTaXplIil8fHlbaT8wOjFdLHN5bWJvbDpvLmdldCgic3ltYm9sIiwhMCl8fGdbaT8wOjFdLGNvbG9yOm8uZ2V0KCJpdGVtU3R5bGUuY29sb3IiKXx8bC5nZXRWaXN1YWwoImNvbG9yIil9KX1pLmlzQXJyYXkoZyl8fChnPVtnLGddKSwibnVtYmVyIj09PXR5cGVvZiB5JiYoeT1beSx5XSksaC5mcm9tLmVhY2goKGZ1bmN0aW9uKGUpe2IoZCxlLCEwKSxiKGYsZSwhMSl9KSkscC5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1wLmdldEl0ZW1Nb2RlbChlKS5nZXQoImxpbmVTdHlsZS5jb2xvciIpO3Auc2V0SXRlbVZpc3VhbChlLHtjb2xvcjp0fHxkLmdldEl0ZW1WaXN1YWwoZSwiY29sb3IiKX0pLHAuc2V0SXRlbUxheW91dChlLFtkLmdldEl0ZW1MYXlvdXQoZSksZi5nZXRJdGVtTGF5b3V0KGUpXSkscC5zZXRJdGVtVmlzdWFsKGUse2Zyb21TeW1ib2xSb3RhdGU6ZC5nZXRJdGVtVmlzdWFsKGUsInN5bWJvbFJvdGF0ZSIpLGZyb21TeW1ib2xTaXplOmQuZ2V0SXRlbVZpc3VhbChlLCJzeW1ib2xTaXplIiksZnJvbVN5bWJvbDpkLmdldEl0ZW1WaXN1YWwoZSwic3ltYm9sIiksdG9TeW1ib2xSb3RhdGU6Zi5nZXRJdGVtVmlzdWFsKGUsInN5bWJvbFJvdGF0ZSIpLHRvU3ltYm9sU2l6ZTpmLmdldEl0ZW1WaXN1YWwoZSwic3ltYm9sU2l6ZSIpLHRvU3ltYm9sOmYuZ2V0SXRlbVZpc3VhbChlLCJzeW1ib2wiKX0pfSkpLHUudXBkYXRlRGF0YShwKSxoLmxpbmUuZWFjaEl0ZW1HcmFwaGljRWwoKGZ1bmN0aW9uKGUsbil7ZS50cmF2ZXJzZSgoZnVuY3Rpb24oZSl7ZS5kYXRhTW9kZWw9dH0pKX0pKSx1Ll9fa2VlcD0hMCx1Lmdyb3VwLnNpbGVudD10LmdldCgic2lsZW50Iil8fGUuZ2V0KCJzaWxlbnQiKX19KTtmdW5jdGlvbiB2KGUsdCxuKXt2YXIgbztvPWU/aS5tYXAoZSYmZS5kaW1lbnNpb25zLChmdW5jdGlvbihlKXt2YXIgbj10LmdldERhdGEoKS5nZXREaW1lbnNpb25JbmZvKHQuZ2V0RGF0YSgpLm1hcERpbWVuc2lvbihlKSl8fHt9O3JldHVybiBpLmRlZmF1bHRzKHtuYW1lOmV9LG4pfSkpOlt7bmFtZToidmFsdWUiLHR5cGU6ImZsb2F0In1dO3ZhciBzPW5ldyByKG8sbiksbD1uZXcgcihvLG4pLGM9bmV3IHIoW10sbiksdT1pLm1hcChuLmdldCgiZGF0YSIpLGkuY3VycnkoaCx0LGUsbikpO2UmJih1PWkuZmlsdGVyKHUsaS5jdXJyeShwLGUpKSk7dmFyIGQ9ZT9hLmRpbVZhbHVlR2V0dGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfTtyZXR1cm4gcy5pbml0RGF0YShpLm1hcCh1LChmdW5jdGlvbihlKXtyZXR1cm4gZVswXX0pKSxudWxsLGQpLGwuaW5pdERhdGEoaS5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV19KSksbnVsbCxkKSxjLmluaXREYXRhKGkubWFwKHUsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzJdfSkpKSxjLmhhc0l0ZW1PcHRpb249ITAse2Zyb206cyx0bzpsLGxpbmU6Y319ZS5leHBvcnRzPWd9LCIzMGEzIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiNjA3ZCIpLG89ci5EaXNwYXRjaGVyLGE9bigiOThiNyIpLHM9bigiMDZhZCIpLGw9ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLnN0YWdlPWUuc3RhZ2V8fHt9LHRoaXMub25mcmFtZT1lLm9uZnJhbWV8fGZ1bmN0aW9uKCl7fSx0aGlzLl9jbGlwcz1bXSx0aGlzLl9ydW5uaW5nPSExLHRoaXMuX3RpbWUsdGhpcy5fcGF1c2VkVGltZSx0aGlzLl9wYXVzZVN0YXJ0LHRoaXMuX3BhdXNlZD0hMSxvLmNhbGwodGhpcyl9O2wucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpsLGFkZENsaXA6ZnVuY3Rpb24oZSl7dGhpcy5fY2xpcHMucHVzaChlKX0sYWRkQW5pbWF0b3I6ZnVuY3Rpb24oZSl7ZS5hbmltYXRpb249dGhpcztmb3IodmFyIHQ9ZS5nZXRDbGlwcygpLG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLmFkZENsaXAodFtuXSl9LHJlbW92ZUNsaXA6ZnVuY3Rpb24oZSl7dmFyIHQ9aS5pbmRleE9mKHRoaXMuX2NsaXBzLGUpO3Q+PTAmJnRoaXMuX2NsaXBzLnNwbGljZSh0LDEpfSxyZW1vdmVBbmltYXRvcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5nZXRDbGlwcygpLG49MDtuPHQubGVuZ3RoO24rKyl0aGlzLnJlbW92ZUNsaXAodFtuXSk7ZS5hbmltYXRpb249bnVsbH0sX3VwZGF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0obmV3IERhdGUpLmdldFRpbWUoKS10aGlzLl9wYXVzZWRUaW1lLHQ9ZS10aGlzLl90aW1lLG49dGhpcy5fY2xpcHMsaT1uLmxlbmd0aCxyPVtdLG89W10sYT0wO2E8aTthKyspe3ZhciBzPW5bYV0sbD1zLnN0ZXAoZSx0KTtsJiYoci5wdXNoKGwpLG8ucHVzaChzKSl9Zm9yKGE9MDthPGk7KW5bYV0uX25lZWRzUmVtb3ZlPyhuW2FdPW5baS0xXSxuLnBvcCgpLGktLSk6YSsrO2k9ci5sZW5ndGg7Zm9yKGE9MDthPGk7YSsrKW9bYV0uZmlyZShyW2FdKTt0aGlzLl90aW1lPWUsdGhpcy5vbmZyYW1lKHQpLHRoaXMudHJpZ2dlcigiZnJhbWUiLHQpLHRoaXMuc3RhZ2UudXBkYXRlJiZ0aGlzLnN0YWdlLnVwZGF0ZSgpfSxfc3RhcnRMb29wOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztmdW5jdGlvbiB0KCl7ZS5fcnVubmluZyYmKGEodCksIWUuX3BhdXNlZCYmZS5fdXBkYXRlKCkpfXRoaXMuX3J1bm5pbmc9ITAsYSh0KX0sc3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl90aW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHRoaXMuX3BhdXNlZFRpbWU9MCx0aGlzLl9zdGFydExvb3AoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX3J1bm5pbmc9ITF9LHBhdXNlOmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkfHwodGhpcy5fcGF1c2VTdGFydD0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLl9wYXVzZWQ9ITApfSxyZXN1bWU6ZnVuY3Rpb24oKXt0aGlzLl9wYXVzZWQmJih0aGlzLl9wYXVzZWRUaW1lKz0obmV3IERhdGUpLmdldFRpbWUoKS10aGlzLl9wYXVzZVN0YXJ0LHRoaXMuX3BhdXNlZD0hMSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5fY2xpcHM9W119LGlzRmluaXNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fY2xpcHMubGVuZ3RofSxhbmltYXRlOmZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj1uZXcgcyhlLHQubG9vcCx0LmdldHRlcix0LnNldHRlcik7cmV0dXJuIHRoaXMuYWRkQW5pbWF0b3Iobiksbn19LGkubWl4aW4obCxvKTt2YXIgYz1sO2UuZXhwb3J0cz1jfSwiMzBiNSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJjNTMyIik7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiBlO3ZhciBvO2lmKG4pbz1uKHQpO2Vsc2UgaWYoaS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlvPXQudG9TdHJpbmcoKTtlbHNle3ZhciBhPVtdO2kuZm9yRWFjaCh0LChmdW5jdGlvbihlLHQpe251bGwhPT1lJiYidW5kZWZpbmVkIiE9PXR5cGVvZiBlJiYoaS5pc0FycmF5KGUpP3QrPSJbXSI6ZT1bZV0saS5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe2kuaXNEYXRlKGUpP2U9ZS50b0lTT1N0cmluZygpOmkuaXNPYmplY3QoZSkmJihlPUpTT04uc3RyaW5naWZ5KGUpKSxhLnB1c2gocih0KSsiPSIrcihlKSl9KSkpfSkpLG89YS5qb2luKCImIil9aWYobyl7dmFyIHM9ZS5pbmRleE9mKCIjIik7LTEhPT1zJiYoZT1lLnNsaWNlKDAscykpLGUrPSgtMT09PWUuaW5kZXhPZigiPyIpPyI/IjoiJiIpK299cmV0dXJuIGV9fSwiMzExYSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKTtuKCJkMDFjIiksbigiNWI2OSIpLG4oImJkYzAiKTt2YXIgcj1uKCI4MWFjIiksbz1uKCIwZTBmIik7aS5yZWdpc3RlckxheW91dChyKSxpLnJlZ2lzdGVyVmlzdWFsKG8pfSwiMzEzZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKTsoZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gaSl7aWYobnVsbD09aXx8IWkuaGFzT3duUHJvcGVydHkoZSl8fCJkZWZhdWx0Ij09PWV8fCJfX2VzTW9kdWxlIj09PWUpcmV0dXJuO3RbZV09aVtlXX19KSgpO3ZhciByPW4oImI3MTkiKTsoZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gcil7aWYobnVsbD09cnx8IXIuaGFzT3duUHJvcGVydHkoZSl8fCJkZWZhdWx0Ij09PWV8fCJfX2VzTW9kdWxlIj09PWUpcmV0dXJuO3RbZV09cltlXX19KSgpLG4oIjAzNTIiKSxuKCJlZjk3IiksbigiOTRiMSIpLG4oImMwMzciKSxuKCIxNWFmIiksbigiOGRlYiIpLG4oIjY3NWMiKSxuKCJlZjk3YSIpLG4oImRhZTEiKSxuKCIyM2VlIiksbigiMDdlNiIpLG4oImE0YjEiKSxuKCIwODE3IiksbigiMzExYSIpLG4oImZhNTIiKSxuKCIwODVkIiksbigiMTExMSIpLG4oImE3ZTIiKSxuKCI1Y2UyIiksbigiYWFkZiIpLG4oIjZjMTJmIiksbigiZDcxNiIpLG4oImUwNTciKSxuKCJjZDEyIiksbigiMmY3MyIpLG4oImQwNzAiKSxuKCIyY2ZjIiksbigiZjMwNiIpLG4oIjkzOTAiKSxuKCI3ZjU5IiksbigiYjExYyIpLG4oIjAwN2QiKSxuKCJjYjhmIiksbigiMmYzMSIpLG4oIjYyN2MiKSxuKCJlZTk1IiksbigiZGIwZSIpLG4oIjk1YTgiKSxuKCI3ZTMyIiksbigiMGI0YiIpLG4oImQyOGYiKSxuKCIwYTZkIiksbigiN2Y3MiIpLG4oImU0ZDEiKSxuKCI1NDUwIiksbigiNzQxOSIpLG4oIjI5YTkiKSxuKCJmMTcwIiksbigiOGVlMCIpfSwiMzFkOSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPWkuZWFjaCxvPSJcMF9fbGlua19kYXRhcyIsYT0iXDBfX2xpbmtfbWFpbkRhdGEiO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9ZS5tYWluRGF0YSxuPWUuZGF0YXM7bnx8KG49e21haW46dH0sZS5kYXRhc0F0dHI9e21haW46ImRhdGEifSksZS5kYXRhcz1lLm1haW5EYXRhPW51bGwsZih0LG4sZSkscihuLChmdW5jdGlvbihuKXtyKHQuVFJBTlNGRVJBQkxFX01FVEhPRFMsKGZ1bmN0aW9uKHQpe24ud3JhcE1ldGhvZCh0LGkuY3VycnkobCxlKSl9KSl9KSksdC53cmFwTWV0aG9kKCJjbG9uZVNoYWxsb3ciLGkuY3VycnkodSxlKSkscih0LkNIQU5HQUJMRV9NRVRIT0RTLChmdW5jdGlvbihuKXt0LndyYXBNZXRob2QobixpLmN1cnJ5KGMsZSkpfSkpLGkuYXNzZXJ0KG5bdC5kYXRhVHlwZV09PT10KX1mdW5jdGlvbiBsKGUsdCl7aWYoZCh0aGlzKSl7dmFyIG49aS5leHRlbmQoe30sdGhpc1tvXSk7blt0aGlzLmRhdGFUeXBlXT10LGYodCxuLGUpfWVsc2UgcCh0LHRoaXMuZGF0YVR5cGUsdGhpc1thXSxlKTtyZXR1cm4gdH1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGUuc3RydWN0JiZlLnN0cnVjdC51cGRhdGUodGhpcyksdH1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIHIodFtvXSwoZnVuY3Rpb24obixpKXtuIT09dCYmcChuLmNsb25lU2hhbGxvdygpLGksdCxlKX0pKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIHQ9dGhpc1thXTtyZXR1cm4gbnVsbD09ZXx8bnVsbD09dD90OnRbb11bZV19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZVthXT09PWV9ZnVuY3Rpb24gZihlLHQsbil7ZVtvXT17fSxyKHQsKGZ1bmN0aW9uKHQsaSl7cCh0LGksZSxuKX0pKX1mdW5jdGlvbiBwKGUsdCxuLGkpe25bb11bdF09ZSxlW2FdPW4sZS5kYXRhVHlwZT10LGkuc3RydWN0JiYoZVtpLnN0cnVjdEF0dHJdPWkuc3RydWN0LGkuc3RydWN0W2kuZGF0YXNBdHRyW3RdXT1lKSxlLmdldExpbmtlZERhdGE9aH12YXIgbT1zO2UuZXhwb3J0cz1tfSwiMzIwYSI6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT1uKCI2ZDhiIikscj1uKCJmMjc5Iiksbz1bMTI2LDI1XSxhPVtbWzAsMy41XSxbNywxMS4yXSxbMTUsMTEuOV0sWzMwLDddLFs0MiwuN10sWzUyLC43XSxbNTYsNy43XSxbNTksLjddLFs2NCwuN10sWzY0LDBdLFs1LDBdLFswLDMuNV1dLFtbMTMsMTYuMV0sWzE5LDE0LjddLFsxNiwyMS43XSxbMTEsMjMuMV0sWzEzLDE2LjFdXSxbWzEyLDMyLjJdLFsxNCwzOC41XSxbMTUsMzguNV0sWzEzLDMyLjJdLFsxMiwzMi4yXV0sW1sxNiw0Ny42XSxbMTIsNTMuMl0sWzEzLDUzLjJdLFsxOCw0Ny42XSxbMTYsNDcuNl1dLFtbNiw2NC40XSxbOCw3MF0sWzksNzBdLFs4LDY0LjRdLFs2LDY0LjRdXSxbWzIzLDgyLjZdLFsyOSw3OS44XSxbMzAsNzkuOF0sWzI1LDgyLjZdLFsyMyw4Mi42XV0sW1szNyw3MC43XSxbNDMsNjIuM10sWzQ0LDYyLjNdLFszOSw3MC43XSxbMzcsNzAuN11dLFtbNDgsNTEuMV0sWzUxLDQ1LjVdLFs1Myw0NS41XSxbNTAsNTEuMV0sWzQ4LDUxLjFdXSxbWzUxLDM1XSxbNTEsMjguN10sWzUzLDI4LjddLFs1MywzNV0sWzUxLDM1XV0sW1s1MiwyMi40XSxbNTUsMTcuNV0sWzU2LDE3LjVdLFs1MywyMi40XSxbNTIsMjIuNF1dLFtbNTgsMTIuNl0sWzYyLDddLFs2Myw3XSxbNjAsMTIuNl0sWzU4LDEyLjZdXSxbWzAsMy41XSxbMCw5My4xXSxbNjQsOTMuMV0sWzY0LDBdLFs2MywwXSxbNjMsOTIuNF0sWzEsOTIuNF0sWzEsMy41XSxbMCwzLjVdXV0scz0wO3M8YS5sZW5ndGg7cysrKWZvcih2YXIgbD0wO2w8YVtzXS5sZW5ndGg7bCsrKWFbc11bbF1bMF0vPTEwLjUsYVtzXVtsXVsxXS89LTE0LGFbc11bbF1bMF0rPW9bMF0sYVtzXVtsXVsxXSs9b1sxXTtmdW5jdGlvbiBjKGUsdCl7ImNoaW5hIj09PWUmJnQucHVzaChuZXcgcigi5Y2X5rW36K+45bKbIixpLm1hcChhLChmdW5jdGlvbihlKXtyZXR1cm57dHlwZToicG9seWdvbiIsZXh0ZXJpb3I6ZX19KSksbykpfWUuZXhwb3J0cz1jfSwiMzJhMSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjdkY2YiKSxvPW4oImVmNmEiKSxhPW4oIjU1NzYiKSxzPWkuYmluZCxsPXIuZXh0ZW5kKHt0eXBlOiJkYXRhWm9vbS5pbnNpZGUiLGluaXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yYW5nZX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuLHIpe2wuc3VwZXJBcHBseSh0aGlzLCJyZW5kZXIiLGFyZ3VtZW50cyksdGhpcy5fcmFuZ2U9ZS5nZXRQZXJjZW50UmFuZ2UoKSxpLmVhY2godGhpcy5nZXRUYXJnZXRDb29yZEluZm8oKSwoZnVuY3Rpb24odCxyKXt2YXIgbz1pLm1hcCh0LChmdW5jdGlvbihlKXtyZXR1cm4gYS5nZW5lcmF0ZUNvb3JkSWQoZS5tb2RlbCl9KSk7aS5lYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBsPXQubW9kZWwsdT17fTtpLmVhY2goWyJwYW4iLCJ6b29tIiwic2Nyb2xsTW92ZSJdLChmdW5jdGlvbihlKXt1W2VdPXMoY1tlXSx0aGlzLHQscil9KSx0aGlzKSxhLnJlZ2lzdGVyKG4se2Nvb3JkSWQ6YS5nZW5lcmF0ZUNvb3JkSWQobCksYWxsQ29vcmRJZHM6byxjb250YWluc1BvaW50OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbC5jb29yZGluYXRlU3lzdGVtLmNvbnRhaW5Qb2ludChbdCxuXSl9LGRhdGFab29tSWQ6ZS5pZCxkYXRhWm9vbU1vZGVsOmUsZ2V0UmFuZ2U6dX0pfSksdGhpcyl9KSx0aGlzKX0sZGlzcG9zZTpmdW5jdGlvbigpe2EudW5yZWdpc3Rlcih0aGlzLmFwaSx0aGlzLmRhdGFab29tTW9kZWwuaWQpLGwuc3VwZXJBcHBseSh0aGlzLCJkaXNwb3NlIixhcmd1bWVudHMpLHRoaXMuX3JhbmdlPW51bGx9fSksYz17em9vbTpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj10aGlzLl9yYW5nZSxhPXIuc2xpY2UoKSxzPWUuYXhpc01vZGVsc1swXTtpZihzKXt2YXIgbD1oW3RdKG51bGwsW2kub3JpZ2luWCxpLm9yaWdpblldLHMsbixlKSxjPShsLnNpZ25hbD4wP2wucGl4ZWxTdGFydCtsLnBpeGVsTGVuZ3RoLWwucGl4ZWw6bC5waXhlbC1sLnBpeGVsU3RhcnQpL2wucGl4ZWxMZW5ndGgqKGFbMV0tYVswXSkrYVswXSx1PU1hdGgubWF4KDEvaS5zY2FsZSwwKTthWzBdPShhWzBdLWMpKnUrYyxhWzFdPShhWzFdLWMpKnUrYzt2YXIgZD10aGlzLmRhdGFab29tTW9kZWwuZmluZFJlcHJlc2VudGF0aXZlQXhpc1Byb3h5KCkuZ2V0TWluTWF4U3BhbigpO3JldHVybiBvKDAsYSxbMCwxMDBdLDAsZC5taW5TcGFuLGQubWF4U3BhbiksdGhpcy5fcmFuZ2U9YSxyWzBdIT09YVswXXx8clsxXSE9PWFbMV0/YTp2b2lkIDB9fSxwYW46dSgoZnVuY3Rpb24oZSx0LG4saSxyLG8pe3ZhciBhPWhbaV0oW28ub2xkWCxvLm9sZFldLFtvLm5ld1gsby5uZXdZXSx0LHIsbik7cmV0dXJuIGEuc2lnbmFsKihlWzFdLWVbMF0pKmEucGl4ZWwvYS5waXhlbExlbmd0aH0pKSxzY3JvbGxNb3ZlOnUoKGZ1bmN0aW9uKGUsdCxuLGkscixvKXt2YXIgYT1oW2ldKFswLDBdLFtvLnNjcm9sbERlbHRhLG8uc2Nyb2xsRGVsdGFdLHQscixuKTtyZXR1cm4gYS5zaWduYWwqKGVbMV0tZVswXSkqby5zY3JvbGxEZWx0YX0pKX07ZnVuY3Rpb24gdShlKXtyZXR1cm4gZnVuY3Rpb24odCxuLGkscil7dmFyIGE9dGhpcy5fcmFuZ2Uscz1hLnNsaWNlKCksbD10LmF4aXNNb2RlbHNbMF07aWYobCl7dmFyIGM9ZShzLGwsdCxuLGkscik7cmV0dXJuIG8oYyxzLFswLDEwMF0sImFsbCIpLHRoaXMuX3JhbmdlPXMsYVswXSE9PXNbMF18fGFbMV0hPT1zWzFdP3M6dm9pZCAwfX19dmFyIGg9e2dyaWQ6ZnVuY3Rpb24oZSx0LG4saSxyKXt2YXIgbz1uLmF4aXMsYT17fSxzPXIubW9kZWwuY29vcmRpbmF0ZVN5c3RlbS5nZXRSZWN0KCk7cmV0dXJuIGU9ZXx8WzAsMF0sIngiPT09by5kaW0/KGEucGl4ZWw9dFswXS1lWzBdLGEucGl4ZWxMZW5ndGg9cy53aWR0aCxhLnBpeGVsU3RhcnQ9cy54LGEuc2lnbmFsPW8uaW52ZXJzZT8xOi0xKTooYS5waXhlbD10WzFdLWVbMV0sYS5waXhlbExlbmd0aD1zLmhlaWdodCxhLnBpeGVsU3RhcnQ9cy55LGEuc2lnbmFsPW8uaW52ZXJzZT8tMToxKSxhfSxwb2xhcjpmdW5jdGlvbihlLHQsbixpLHIpe3ZhciBvPW4uYXhpcyxhPXt9LHM9ci5tb2RlbC5jb29yZGluYXRlU3lzdGVtLGw9cy5nZXRSYWRpdXNBeGlzKCkuZ2V0RXh0ZW50KCksYz1zLmdldEFuZ2xlQXhpcygpLmdldEV4dGVudCgpO3JldHVybiBlPWU/cy5wb2ludFRvQ29vcmQoZSk6WzAsMF0sdD1zLnBvaW50VG9Db29yZCh0KSwicmFkaXVzQXhpcyI9PT1uLm1haW5UeXBlPyhhLnBpeGVsPXRbMF0tZVswXSxhLnBpeGVsTGVuZ3RoPWxbMV0tbFswXSxhLnBpeGVsU3RhcnQ9bFswXSxhLnNpZ25hbD1vLmludmVyc2U/MTotMSk6KGEucGl4ZWw9dFsxXS1lWzFdLGEucGl4ZWxMZW5ndGg9Y1sxXS1jWzBdLGEucGl4ZWxTdGFydD1jWzBdLGEuc2lnbmFsPW8uaW52ZXJzZT8tMToxKSxhfSxzaW5nbGVBeGlzOmZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIG89bi5heGlzLGE9ci5tb2RlbC5jb29yZGluYXRlU3lzdGVtLmdldFJlY3QoKSxzPXt9O3JldHVybiBlPWV8fFswLDBdLCJob3Jpem9udGFsIj09PW8ub3JpZW50PyhzLnBpeGVsPXRbMF0tZVswXSxzLnBpeGVsTGVuZ3RoPWEud2lkdGgscy5waXhlbFN0YXJ0PWEueCxzLnNpZ25hbD1vLmludmVyc2U/MTotMSk6KHMucGl4ZWw9dFsxXS1lWzFdLHMucGl4ZWxMZW5ndGg9YS5oZWlnaHQscy5waXhlbFN0YXJ0PWEueSxzLnNpZ25hbD1vLmludmVyc2U/LTE6MSksc319LGQ9bDtlLmV4cG9ydHM9ZH0sMzMwMTpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiNjE3OSIpLG89bigiYjFkNCIpLGE9bigiOTNkMCIpLHM9YS5TT1VSQ0VfRk9STUFUX09SSUdJTkFMLGw9bigiMmY0NSIpLGM9bC5nZXREaW1lbnNpb25UeXBlQnlBeGlzLHU9bigiZTBkMyIpLGg9dS5nZXREYXRhSXRlbVZhbHVlLGQ9bigiMjAzOSIpLGY9bigiOGI3ZiIpLHA9Zi5nZXRDb29yZFN5c0luZm9CeVNlcmllcyxtPW4oImVjNmYiKSxnPW4oImVlMWEiKSx2PWcuZW5hYmxlRGF0YVN0YWNrLHk9bigiMGY5OSIpLGI9eS5tYWtlU2VyaWVzRW5jb2RlRm9yQXhpc0Nvb3JkU3lzO2Z1bmN0aW9uIHgoZSx0LG4pe249bnx8e30sbS5pc0luc3RhbmNlKGUpfHwoZT1tLnNlcmllc0RhdGFUb1NvdXJjZShlKSk7dmFyIGEscz10LmdldCgiY29vcmRpbmF0ZVN5c3RlbSIpLGw9ZC5nZXQocyksdT1wKHQpO3UmJihhPWkubWFwKHUuY29vcmRTeXNEaW1zLChmdW5jdGlvbihlKXt2YXIgdD17bmFtZTplfSxuPXUuYXhpc01hcC5nZXQoZSk7aWYobil7dmFyIGk9bi5nZXQoInR5cGUiKTt0LnR5cGU9YyhpKX1yZXR1cm4gdH0pKSksYXx8KGE9bCYmKGwuZ2V0RGltZW5zaW9uc0luZm8/bC5nZXREaW1lbnNpb25zSW5mbygpOmwuZGltZW5zaW9ucy5zbGljZSgpKXx8WyJ4IiwieSJdKTt2YXIgaCxmLGc9byhlLHtjb29yZERpbWVuc2lvbnM6YSxnZW5lcmF0ZUNvb3JkOm4uZ2VuZXJhdGVDb29yZCxlbmNvZGVEZWZhdWx0ZXI6bi51c2VFbmNvZGVEZWZhdWx0ZXI/aS5jdXJyeShiLGEsdCk6bnVsbH0pO3UmJmkuZWFjaChnLChmdW5jdGlvbihlLHQpe3ZhciBuPWUuY29vcmREaW0saT11LmNhdGVnb3J5QXhpc01hcC5nZXQobik7aSYmKG51bGw9PWgmJihoPXQpLGUub3JkaW5hbE1ldGE9aS5nZXRPcmRpbmFsTWV0YSgpKSxudWxsIT1lLm90aGVyRGltcy5pdGVtTmFtZSYmKGY9ITApfSkpLGZ8fG51bGw9PWh8fChnW2hdLm90aGVyRGltcy5pdGVtTmFtZT0wKTt2YXIgeT12KHQsZykseD1uZXcgcihnLHQpO3guc2V0Q2FsY3VsYXRpb25JbmZvKHkpO3ZhciB3PW51bGwhPWgmJl8oZSk/ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIGk9PT1oP246dGhpcy5kZWZhdWx0RGltVmFsdWVHZXR0ZXIoZSx0LG4saSl9Om51bGw7cmV0dXJuIHguaGFzSXRlbU9wdGlvbj0hMSx4LmluaXREYXRhKGUsbnVsbCx3KSx4fWZ1bmN0aW9uIF8oZSl7aWYoZS5zb3VyY2VGb3JtYXQ9PT1zKXt2YXIgdD13KGUuZGF0YXx8W10pO3JldHVybiBudWxsIT10JiYhaS5pc0FycmF5KGgodCkpfX1mdW5jdGlvbiB3KGUpe3ZhciB0PTA7d2hpbGUodDxlLmxlbmd0aCYmbnVsbD09ZVt0XSl0Kys7cmV0dXJuIGVbdF19dmFyIFM9eDtlLmV4cG9ydHM9U30sMzMyOTpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiNmQ4YiIpLG89bigiMjMwNiIpLGE9bigiYTE1YSIpLHM9YS5jcmVhdGVTeW1ib2wsbD1uKCIzODQyIiksYz1sLnBhcnNlUGVyY2VudCx1PWwuaXNOdW1lcmljLGg9bigiZTdhYSIpLGQ9aC5zZXRMYWJlbCxmPVsiaXRlbVN0eWxlIiwiYm9yZGVyV2lkdGgiXSxwPVt7eHk6IngiLHdoOiJ3aWR0aCIsaW5kZXg6MCxwb3NEZXNjOlsibGVmdCIsInJpZ2h0Il19LHt4eToieSIsd2g6ImhlaWdodCIsaW5kZXg6MSxwb3NEZXNjOlsidG9wIiwiYm90dG9tIl19XSxtPW5ldyBvLkNpcmNsZSxnPWkuZXh0ZW5kQ2hhcnRWaWV3KHt0eXBlOiJwaWN0b3JpYWxCYXIiLHJlbmRlcjpmdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5ncm91cCxyPWUuZ2V0RGF0YSgpLG89dGhpcy5fZGF0YSxhPWUuY29vcmRpbmF0ZVN5c3RlbSxzPWEuZ2V0QmFzZUF4aXMoKSxsPSEhcy5pc0hvcml6b250YWwoKSxjPWEuZ3JpZC5nZXRSZWN0KCksdT17ZWNTaXplOnt3aWR0aDpuLmdldFdpZHRoKCksaGVpZ2h0Om4uZ2V0SGVpZ2h0KCl9LHNlcmllc01vZGVsOmUsY29vcmRTeXM6YSxjb29yZFN5c0V4dGVudDpbW2MueCxjLngrYy53aWR0aF0sW2MueSxjLnkrYy5oZWlnaHRdXSxpc0hvcml6b250YWw6bCx2YWx1ZURpbTpwWytsXSxjYXRlZ29yeURpbTpwWzEtbF19O3JldHVybiByLmRpZmYobykuYWRkKChmdW5jdGlvbihlKXtpZihyLmhhc1ZhbHVlKGUpKXt2YXIgdD1FKHIsZSksbj12KHIsZSx0LHUpLG89TyhyLHUsbik7ci5zZXRJdGVtR3JhcGhpY0VsKGUsbyksaS5hZGQobykseihvLHUsbil9fSkpLnVwZGF0ZSgoZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmdldEl0ZW1HcmFwaGljRWwodCk7aWYoci5oYXNWYWx1ZShlKSl7dmFyIGE9RShyLGUpLHM9dihyLGUsYSx1KSxsPU4ocixzKTtuJiZsIT09bi5fX3BpY3RvcmlhbFNoYXBlU3RyJiYoaS5yZW1vdmUobiksci5zZXRJdGVtR3JhcGhpY0VsKGUsbnVsbCksbj1udWxsKSxuP1Aobix1LHMpOm49TyhyLHUscywhMCksci5zZXRJdGVtR3JhcGhpY0VsKGUsbiksbi5fX3BpY3RvcmlhbFN5bWJvbE1ldGE9cyxpLmFkZChuKSx6KG4sdSxzKX1lbHNlIGkucmVtb3ZlKG4pfSkpLnJlbW92ZSgoZnVuY3Rpb24oZSl7dmFyIHQ9by5nZXRJdGVtR3JhcGhpY0VsKGUpO3QmJkwobyxlLHQuX19waWN0b3JpYWxTeW1ib2xNZXRhLmFuaW1hdGlvbk1vZGVsLHQpfSkpLmV4ZWN1dGUoKSx0aGlzLl9kYXRhPXIsdGhpcy5ncm91cH0sZGlzcG9zZTpyLm5vb3AscmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5ncm91cCxpPXRoaXMuX2RhdGE7ZS5nZXQoImFuaW1hdGlvbiIpP2kmJmkuZWFjaEl0ZW1HcmFwaGljRWwoKGZ1bmN0aW9uKHQpe0woaSx0LmRhdGFJbmRleCxlLHQpfSkpOm4ucmVtb3ZlQWxsKCl9fSk7ZnVuY3Rpb24gdihlLHQsbixpKXt2YXIgbz1lLmdldEl0ZW1MYXlvdXQodCksYT1uLmdldCgic3ltYm9sUmVwZWF0Iikscz1uLmdldCgic3ltYm9sQ2xpcCIpLGw9bi5nZXQoInN5bWJvbFBvc2l0aW9uIil8fCJzdGFydCIsdT1uLmdldCgic3ltYm9sUm90YXRlIiksaD0odXx8MCkqTWF0aC5QSS8xODB8fDAsZD1uLmdldCgic3ltYm9sUGF0dGVyblNpemUiKXx8MixmPW4uaXNBbmltYXRpb25FbmFibGVkKCkscD17ZGF0YUluZGV4OnQsbGF5b3V0Om8saXRlbU1vZGVsOm4sc3ltYm9sVHlwZTplLmdldEl0ZW1WaXN1YWwodCwic3ltYm9sIil8fCJjaXJjbGUiLGNvbG9yOmUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpLHN5bWJvbENsaXA6cyxzeW1ib2xSZXBlYXQ6YSxzeW1ib2xSZXBlYXREaXJlY3Rpb246bi5nZXQoInN5bWJvbFJlcGVhdERpcmVjdGlvbiIpLHN5bWJvbFBhdHRlcm5TaXplOmQscm90YXRpb246aCxhbmltYXRpb25Nb2RlbDpmP246bnVsbCxob3ZlckFuaW1hdGlvbjpmJiZuLmdldCgiaG92ZXJBbmltYXRpb24iKSx6MjpuLmdldFNoYWxsb3coInoiLCEwKXx8MH07eShuLGEsbyxpLHApLHgoZSx0LG8sYSxzLHAuYm91bmRpbmdMZW5ndGgscC5weFNpZ24sZCxpLHApLF8obixwLnN5bWJvbFNjYWxlLGgsaSxwKTt2YXIgbT1wLnN5bWJvbFNpemUsZz1uLmdldCgic3ltYm9sT2Zmc2V0Iik7cmV0dXJuIHIuaXNBcnJheShnKSYmKGc9W2MoZ1swXSxtWzBdKSxjKGdbMV0sbVsxXSldKSx3KG4sbSxvLGEscyxnLGwscC52YWx1ZUxpbmVXaWR0aCxwLmJvdW5kaW5nTGVuZ3RoLHAucmVwZWF0Q3V0TGVuZ3RoLGkscCkscH1mdW5jdGlvbiB5KGUsdCxuLGksbyl7dmFyIGEscz1pLnZhbHVlRGltLGw9ZS5nZXQoInN5bWJvbEJvdW5kaW5nRGF0YSIpLGM9aS5jb29yZFN5cy5nZXRPdGhlckF4aXMoaS5jb29yZFN5cy5nZXRCYXNlQXhpcygpKSx1PWMudG9HbG9iYWxDb29yZChjLmRhdGFUb0Nvb3JkKDApKSxoPTEtKyhuW3Mud2hdPD0wKTtpZihyLmlzQXJyYXkobCkpe3ZhciBkPVtiKGMsbFswXSktdSxiKGMsbFsxXSktdV07ZFsxXTxkWzBdJiZkLnJldmVyc2UoKSxhPWRbaF19ZWxzZSBhPW51bGwhPWw/YihjLGwpLXU6dD9pLmNvb3JkU3lzRXh0ZW50W3MuaW5kZXhdW2hdLXU6bltzLndoXTtvLmJvdW5kaW5nTGVuZ3RoPWEsdCYmKG8ucmVwZWF0Q3V0TGVuZ3RoPW5bcy53aF0pLG8ucHhTaWduPWE+MD8xOmE8MD8tMTowfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gZS50b0dsb2JhbENvb3JkKGUuZGF0YVRvQ29vcmQoZS5zY2FsZS5wYXJzZSh0KSkpfWZ1bmN0aW9uIHgoZSx0LG4saSxvLGEscyxsLHUsaCl7dmFyIGQ9dS52YWx1ZURpbSxmPXUuY2F0ZWdvcnlEaW0scD1NYXRoLmFicyhuW2Yud2hdKSxtPWUuZ2V0SXRlbVZpc3VhbCh0LCJzeW1ib2xTaXplIik7ci5pc0FycmF5KG0pP209bS5zbGljZSgpOihudWxsPT1tJiYobT0iMTAwJSIpLG09W20sbV0pLG1bZi5pbmRleF09YyhtW2YuaW5kZXhdLHApLG1bZC5pbmRleF09YyhtW2QuaW5kZXhdLGk/cDpNYXRoLmFicyhhKSksaC5zeW1ib2xTaXplPW07dmFyIGc9aC5zeW1ib2xTY2FsZT1bbVswXS9sLG1bMV0vbF07Z1tkLmluZGV4XSo9KHUuaXNIb3Jpem9udGFsPy0xOjEpKnN9ZnVuY3Rpb24gXyhlLHQsbixpLHIpe3ZhciBvPWUuZ2V0KGYpfHwwO28mJihtLmF0dHIoe3NjYWxlOnQuc2xpY2UoKSxyb3RhdGlvbjpufSksbS51cGRhdGVUcmFuc2Zvcm0oKSxvLz1tLmdldExpbmVTY2FsZSgpLG8qPXRbaS52YWx1ZURpbS5pbmRleF0pLHIudmFsdWVMaW5lV2lkdGg9b31mdW5jdGlvbiB3KGUsdCxuLGksbyxhLHMsbCxoLGQsZixwKXt2YXIgbT1mLmNhdGVnb3J5RGltLGc9Zi52YWx1ZURpbSx2PXAucHhTaWduLHk9TWF0aC5tYXgodFtnLmluZGV4XStsLDApLGI9eTtpZihpKXt2YXIgeD1NYXRoLmFicyhoKSxfPXIucmV0cmlldmUoZS5nZXQoInN5bWJvbE1hcmdpbiIpLCIxNSUiKSsiIix3PSExO18ubGFzdEluZGV4T2YoIiEiKT09PV8ubGVuZ3RoLTEmJih3PSEwLF89Xy5zbGljZSgwLF8ubGVuZ3RoLTEpKSxfPWMoXyx0W2cuaW5kZXhdKTt2YXIgUz1NYXRoLm1heCh5KzIqXywwKSxDPXc/MDoyKl8saz11KGkpLFQ9az9pOkIoKHgrQykvUyksTT14LVQqeTtfPU0vMi8odz9UOlQtMSksUz15KzIqXyxDPXc/MDoyKl8sa3x8ImZpeGVkIj09PWl8fChUPWQ/QigoTWF0aC5hYnMoZCkrQykvUyk6MCksYj1UKlMtQyxwLnJlcGVhdFRpbWVzPVQscC5zeW1ib2xNYXJnaW49X312YXIgRT12KihiLzIpLEk9cC5wYXRoUG9zaXRpb249W107SVttLmluZGV4XT1uW20ud2hdLzIsSVtnLmluZGV4XT0ic3RhcnQiPT09cz9FOiJlbmQiPT09cz9oLUU6aC8yLGEmJihJWzBdKz1hWzBdLElbMV0rPWFbMV0pO3ZhciBEPXAuYnVuZGxlUG9zaXRpb249W107RFttLmluZGV4XT1uW20ueHldLERbZy5pbmRleF09bltnLnh5XTt2YXIgQT1wLmJhclJlY3RTaGFwZT1yLmV4dGVuZCh7fSxuKTtBW2cud2hdPXYqTWF0aC5tYXgoTWF0aC5hYnMobltnLndoXSksTWF0aC5hYnMoSVtnLmluZGV4XStFKSksQVttLndoXT1uW20ud2hdO3ZhciBPPXAuY2xpcFNoYXBlPXt9O09bbS54eV09LW5bbS54eV0sT1ttLndoXT1mLmVjU2l6ZVttLndoXSxPW2cueHldPTAsT1tnLndoXT1uW2cud2hdfWZ1bmN0aW9uIFMoZSl7dmFyIHQ9ZS5zeW1ib2xQYXR0ZXJuU2l6ZSxuPXMoZS5zeW1ib2xUeXBlLC10LzIsLXQvMix0LHQsZS5jb2xvcik7cmV0dXJuIG4uYXR0cih7Y3VsbGluZzohMH0pLCJpbWFnZSIhPT1uLnR5cGUmJm4uc2V0U3R5bGUoe3N0cm9rZU5vU2NhbGU6ITB9KSxufWZ1bmN0aW9uIEMoZSx0LG4saSl7dmFyIHI9ZS5fX3BpY3RvcmlhbEJ1bmRsZSxvPW4uc3ltYm9sU2l6ZSxhPW4udmFsdWVMaW5lV2lkdGgscz1uLnBhdGhQb3NpdGlvbixsPXQudmFsdWVEaW0sYz1uLnJlcGVhdFRpbWVzfHwwLHU9MCxoPW9bdC52YWx1ZURpbS5pbmRleF0rYSsyKm4uc3ltYm9sTWFyZ2luO2ZvcihSKGUsKGZ1bmN0aW9uKGUpe2UuX19waWN0b3JpYWxBbmltYXRpb25JbmRleD11LGUuX19waWN0b3JpYWxSZXBlYXRUaW1lcz1jLHU8Yz8kKGUsbnVsbCxwKHUpLG4saSk6JChlLG51bGwse3NjYWxlOlswLDBdfSxuLGksKGZ1bmN0aW9uKCl7ci5yZW1vdmUoZSl9KSksQShlLG4pLHUrK30pKTt1PGM7dSsrKXt2YXIgZD1TKG4pO2QuX19waWN0b3JpYWxBbmltYXRpb25JbmRleD11LGQuX19waWN0b3JpYWxSZXBlYXRUaW1lcz1jLHIuYWRkKGQpO3ZhciBmPXAodSk7JChkLHtwb3NpdGlvbjpmLnBvc2l0aW9uLHNjYWxlOlswLDBdfSx7c2NhbGU6Zi5zY2FsZSxyb3RhdGlvbjpmLnJvdGF0aW9ufSxuLGkpLGQub24oIm1vdXNlb3ZlciIsbSkub24oIm1vdXNlb3V0IixnKSxBKGQsbil9ZnVuY3Rpb24gcChlKXt2YXIgdD1zLnNsaWNlKCksaT1uLnB4U2lnbixyPWU7cmV0dXJuKCJzdGFydCI9PT1uLnN5bWJvbFJlcGVhdERpcmVjdGlvbj9pPjA6aTwwKSYmKHI9Yy0xLWUpLHRbbC5pbmRleF09aCooci1jLzIrLjUpK3NbbC5pbmRleF0se3Bvc2l0aW9uOnQsc2NhbGU6bi5zeW1ib2xTY2FsZS5zbGljZSgpLHJvdGF0aW9uOm4ucm90YXRpb259fWZ1bmN0aW9uIG0oKXtSKGUsKGZ1bmN0aW9uKGUpe2UudHJpZ2dlcigiZW1waGFzaXMiKX0pKX1mdW5jdGlvbiBnKCl7UihlLChmdW5jdGlvbihlKXtlLnRyaWdnZXIoIm5vcm1hbCIpfSkpfX1mdW5jdGlvbiBrKGUsdCxuLGkpe3ZhciByPWUuX19waWN0b3JpYWxCdW5kbGUsbz1lLl9fcGljdG9yaWFsTWFpblBhdGg7ZnVuY3Rpb24gYSgpe3RoaXMudHJpZ2dlcigiZW1waGFzaXMiKX1mdW5jdGlvbiBzKCl7dGhpcy50cmlnZ2VyKCJub3JtYWwiKX1vPyQobyxudWxsLHtwb3NpdGlvbjpuLnBhdGhQb3NpdGlvbi5zbGljZSgpLHNjYWxlOm4uc3ltYm9sU2NhbGUuc2xpY2UoKSxyb3RhdGlvbjpuLnJvdGF0aW9ufSxuLGkpOihvPWUuX19waWN0b3JpYWxNYWluUGF0aD1TKG4pLHIuYWRkKG8pLCQobyx7cG9zaXRpb246bi5wYXRoUG9zaXRpb24uc2xpY2UoKSxzY2FsZTpbMCwwXSxyb3RhdGlvbjpuLnJvdGF0aW9ufSx7c2NhbGU6bi5zeW1ib2xTY2FsZS5zbGljZSgpfSxuLGkpLG8ub24oIm1vdXNlb3ZlciIsYSkub24oIm1vdXNlb3V0IixzKSksQShvLG4pfWZ1bmN0aW9uIFQoZSx0LG4pe3ZhciBpPXIuZXh0ZW5kKHt9LHQuYmFyUmVjdFNoYXBlKSxhPWUuX19waWN0b3JpYWxCYXJSZWN0O2E/JChhLG51bGwse3NoYXBlOml9LHQsbik6KGE9ZS5fX3BpY3RvcmlhbEJhclJlY3Q9bmV3IG8uUmVjdCh7ejI6MixzaGFwZTppLHNpbGVudDohMCxzdHlsZTp7c3Ryb2tlOiJ0cmFuc3BhcmVudCIsZmlsbDoidHJhbnNwYXJlbnQiLGxpbmVXaWR0aDowfX0pLGUuYWRkKGEpKX1mdW5jdGlvbiBNKGUsdCxuLGkpe2lmKG4uc3ltYm9sQ2xpcCl7dmFyIGE9ZS5fX3BpY3RvcmlhbENsaXBQYXRoLHM9ci5leHRlbmQoe30sbi5jbGlwU2hhcGUpLGw9dC52YWx1ZURpbSxjPW4uYW5pbWF0aW9uTW9kZWwsdT1uLmRhdGFJbmRleDtpZihhKW8udXBkYXRlUHJvcHMoYSx7c2hhcGU6c30sYyx1KTtlbHNle3NbbC53aF09MCxhPW5ldyBvLlJlY3Qoe3NoYXBlOnN9KSxlLl9fcGljdG9yaWFsQnVuZGxlLnNldENsaXBQYXRoKGEpLGUuX19waWN0b3JpYWxDbGlwUGF0aD1hO3ZhciBoPXt9O2hbbC53aF09bi5jbGlwU2hhcGVbbC53aF0sb1tpPyJ1cGRhdGVQcm9wcyI6ImluaXRQcm9wcyJdKGEse3NoYXBlOmh9LGMsdSl9fX1mdW5jdGlvbiBFKGUsdCl7dmFyIG49ZS5nZXRJdGVtTW9kZWwodCk7cmV0dXJuIG4uZ2V0QW5pbWF0aW9uRGVsYXlQYXJhbXM9SSxuLmlzQW5pbWF0aW9uRW5hYmxlZD1ELG59ZnVuY3Rpb24gSShlKXtyZXR1cm57aW5kZXg6ZS5fX3BpY3RvcmlhbEFuaW1hdGlvbkluZGV4LGNvdW50OmUuX19waWN0b3JpYWxSZXBlYXRUaW1lc319ZnVuY3Rpb24gRCgpe3JldHVybiB0aGlzLnBhcmVudE1vZGVsLmlzQW5pbWF0aW9uRW5hYmxlZCgpJiYhIXRoaXMuZ2V0U2hhbGxvdygiYW5pbWF0aW9uIil9ZnVuY3Rpb24gQShlLHQpe2Uub2ZmKCJlbXBoYXNpcyIpLm9mZigibm9ybWFsIik7dmFyIG49dC5zeW1ib2xTY2FsZS5zbGljZSgpO3QuaG92ZXJBbmltYXRpb24mJmUub24oImVtcGhhc2lzIiwoZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGVUbyh7c2NhbGU6WzEuMSpuWzBdLDEuMSpuWzFdXX0sNDAwLCJlbGFzdGljT3V0Iil9KSkub24oIm5vcm1hbCIsKGZ1bmN0aW9uKCl7dGhpcy5hbmltYXRlVG8oe3NjYWxlOm4uc2xpY2UoKX0sNDAwLCJlbGFzdGljT3V0Iil9KSl9ZnVuY3Rpb24gTyhlLHQsbixpKXt2YXIgcj1uZXcgby5Hcm91cCxhPW5ldyBvLkdyb3VwO3JldHVybiByLmFkZChhKSxyLl9fcGljdG9yaWFsQnVuZGxlPWEsYS5hdHRyKCJwb3NpdGlvbiIsbi5idW5kbGVQb3NpdGlvbi5zbGljZSgpKSxuLnN5bWJvbFJlcGVhdD9DKHIsdCxuKTprKHIsdCxuKSxUKHIsbixpKSxNKHIsdCxuLGkpLHIuX19waWN0b3JpYWxTaGFwZVN0cj1OKGUsbiksci5fX3BpY3RvcmlhbFN5bWJvbE1ldGE9bixyfWZ1bmN0aW9uIFAoZSx0LG4pe3ZhciBpPW4uYW5pbWF0aW9uTW9kZWwscj1uLmRhdGFJbmRleCxhPWUuX19waWN0b3JpYWxCdW5kbGU7by51cGRhdGVQcm9wcyhhLHtwb3NpdGlvbjpuLmJ1bmRsZVBvc2l0aW9uLnNsaWNlKCl9LGksciksbi5zeW1ib2xSZXBlYXQ/QyhlLHQsbiwhMCk6ayhlLHQsbiwhMCksVChlLG4sITApLE0oZSx0LG4sITApfWZ1bmN0aW9uIEwoZSx0LG4saSl7dmFyIGE9aS5fX3BpY3RvcmlhbEJhclJlY3Q7YSYmKGEuc3R5bGUudGV4dD1udWxsKTt2YXIgcz1bXTtSKGksKGZ1bmN0aW9uKGUpe3MucHVzaChlKX0pKSxpLl9fcGljdG9yaWFsTWFpblBhdGgmJnMucHVzaChpLl9fcGljdG9yaWFsTWFpblBhdGgpLGkuX19waWN0b3JpYWxDbGlwUGF0aCYmKG49bnVsbCksci5lYWNoKHMsKGZ1bmN0aW9uKGUpe28udXBkYXRlUHJvcHMoZSx7c2NhbGU6WzAsMF19LG4sdCwoZnVuY3Rpb24oKXtpLnBhcmVudCYmaS5wYXJlbnQucmVtb3ZlKGkpfSkpfSkpLGUuc2V0SXRlbUdyYXBoaWNFbCh0LG51bGwpfWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm5bZS5nZXRJdGVtVmlzdWFsKHQuZGF0YUluZGV4LCJzeW1ib2wiKXx8Im5vbmUiLCEhdC5zeW1ib2xSZXBlYXQsISF0LnN5bWJvbENsaXBdLmpvaW4oIjoiKX1mdW5jdGlvbiBSKGUsdCxuKXtyLmVhY2goZS5fX3BpY3RvcmlhbEJ1bmRsZS5jaGlsZHJlbigpLChmdW5jdGlvbihpKXtpIT09ZS5fX3BpY3RvcmlhbEJhclJlY3QmJnQuY2FsbChuLGkpfSkpfWZ1bmN0aW9uICQoZSx0LG4saSxyLGEpe3QmJmUuYXR0cih0KSxpLnN5bWJvbENsaXAmJiFyP24mJmUuYXR0cihuKTpuJiZvW3I/InVwZGF0ZVByb3BzIjoiaW5pdFByb3BzIl0oZSxuLGkuYW5pbWF0aW9uTW9kZWwsaS5kYXRhSW5kZXgsYSl9ZnVuY3Rpb24geihlLHQsbil7dmFyIGk9bi5jb2xvcixhPW4uZGF0YUluZGV4LHM9bi5pdGVtTW9kZWwsbD1zLmdldE1vZGVsKCJpdGVtU3R5bGUiKS5nZXRJdGVtU3R5bGUoWyJjb2xvciJdKSxjPXMuZ2V0TW9kZWwoImVtcGhhc2lzLml0ZW1TdHlsZSIpLmdldEl0ZW1TdHlsZSgpLHU9cy5nZXRTaGFsbG93KCJjdXJzb3IiKTtSKGUsKGZ1bmN0aW9uKGUpe2Uuc2V0Q29sb3IoaSksZS5zZXRTdHlsZShyLmRlZmF1bHRzKHtmaWxsOmksb3BhY2l0eTpuLm9wYWNpdHl9LGwpKSxvLnNldEhvdmVyU3R5bGUoZSxjKSx1JiYoZS5jdXJzb3I9dSksZS56Mj1uLnoyfSkpO3ZhciBoPXt9LGY9dC52YWx1ZURpbS5wb3NEZXNjWysobi5ib3VuZGluZ0xlbmd0aD4wKV0scD1lLl9fcGljdG9yaWFsQmFyUmVjdDtkKHAuc3R5bGUsaCxzLGksdC5zZXJpZXNNb2RlbCxhLGYpLG8uc2V0SG92ZXJTdHlsZShwLGgpfWZ1bmN0aW9uIEIoZSl7dmFyIHQ9TWF0aC5yb3VuZChlKTtyZXR1cm4gTWF0aC5hYnMoZS10KTwxZS00P3Q6TWF0aC5jZWlsKGUpfXZhciBGPWc7ZS5leHBvcnRzPUZ9LDMzOTc6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjdhNDEiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighaShlKSlyZXR1cm4gZTt2YXIgbixyO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhaShyPW4uY2FsbChlKSkpcmV0dXJuIHI7aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIWkocj1uLmNhbGwoZSkpKXJldHVybiByO2lmKCF0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIWkocj1uLmNhbGwoZSkpKXJldHVybiByO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSwiMzQwZCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oImU4ODciKSxvPW4oIjRlNDciKSxhPW4oIjgwZjAiKSxzPW4oImVkYTIiKSxsPXMud2luZG93T3BlbixjPSJzdW5idXJzdFJvb3RUb05vZGUiLHU9ci5leHRlbmQoe3R5cGU6InN1bmJ1cnN0Iixpbml0OmZ1bmN0aW9uKCl7fSxyZW5kZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIHM9dGhpczt0aGlzLnNlcmllc01vZGVsPWUsdGhpcy5hcGk9bix0aGlzLmVjTW9kZWw9dDt2YXIgbD1lLmdldERhdGEoKSxjPWwudHJlZS5yb290LHU9ZS5nZXRWaWV3Um9vdCgpLGg9dGhpcy5ncm91cCxkPWUuZ2V0KCJyZW5kZXJMYWJlbEZvclplcm9EYXRhIiksZj1bXTt1LmVhY2hOb2RlKChmdW5jdGlvbihlKXtmLnB1c2goZSl9KSk7dmFyIHA9dGhpcy5fb2xkQ2hpbGRyZW58fFtdO2lmKHYoZixwKSx4KGMsdSksciYmci5oaWdobGlnaHQmJnIuaGlnaGxpZ2h0LnBpZWNlKXt2YXIgbT1lLmdldFNoYWxsb3coImhpZ2hsaWdodFBvbGljeSIpO3IuaGlnaGxpZ2h0LnBpZWNlLm9uRW1waGFzaXMobSl9ZWxzZSBpZihyJiZyLnVuaGlnaGxpZ2h0KXt2YXIgZz10aGlzLnZpcnR1YWxQaWVjZTshZyYmYy5jaGlsZHJlbi5sZW5ndGgmJihnPWMuY2hpbGRyZW5bMF0ucGllY2UpLGcmJmcub25Ob3JtYWwoKX1mdW5jdGlvbiB2KGUsdCl7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5nZXRJZCgpfWZ1bmN0aW9uIHIobixpKXt2YXIgcj1udWxsPT1uP251bGw6ZVtuXSxvPW51bGw9PWk/bnVsbDp0W2ldO3kocixvKX0wPT09ZS5sZW5ndGgmJjA9PT10Lmxlbmd0aHx8bmV3IGEodCxlLG4sbikuYWRkKHIpLnVwZGF0ZShyKS5yZW1vdmUoaS5jdXJyeShyLG51bGwpKS5leGVjdXRlKCl9ZnVuY3Rpb24geShuLGkpe2lmKGR8fCFufHxuLmdldFZhbHVlKCl8fChuPW51bGwpLG4hPT1jJiZpIT09YylpZihpJiZpLnBpZWNlKW4/KGkucGllY2UudXBkYXRlRGF0YSghMSxuLCJub3JtYWwiLGUsdCksbC5zZXRJdGVtR3JhcGhpY0VsKG4uZGF0YUluZGV4LGkucGllY2UpKTpiKGkpO2Vsc2UgaWYobil7dmFyIHI9bmV3IG8obixlLHQpO2guYWRkKHIpLGwuc2V0SXRlbUdyYXBoaWNFbChuLmRhdGFJbmRleCxyKX19ZnVuY3Rpb24gYihlKXtlJiZlLnBpZWNlJiYoaC5yZW1vdmUoZS5waWVjZSksZS5waWVjZT1udWxsKX1mdW5jdGlvbiB4KG4saSl7aWYoaS5kZXB0aD4wKXtzLnZpcnR1YWxQaWVjZT9zLnZpcnR1YWxQaWVjZS51cGRhdGVEYXRhKCExLG4sIm5vcm1hbCIsZSx0KToocy52aXJ0dWFsUGllY2U9bmV3IG8obixlLHQpLGguYWRkKHMudmlydHVhbFBpZWNlKSksaS5waWVjZS5fb25jbGlja0V2ZW50JiZpLnBpZWNlLm9mZigiY2xpY2siLGkucGllY2UuX29uY2xpY2tFdmVudCk7dmFyIHI9ZnVuY3Rpb24oZSl7cy5fcm9vdFRvTm9kZShpLnBhcmVudE5vZGUpfTtpLnBpZWNlLl9vbmNsaWNrRXZlbnQ9cixzLnZpcnR1YWxQaWVjZS5vbigiY2xpY2siLHIpfWVsc2Ugcy52aXJ0dWFsUGllY2UmJihoLnJlbW92ZShzLnZpcnR1YWxQaWVjZSkscy52aXJ0dWFsUGllY2U9bnVsbCl9dGhpcy5faW5pdEV2ZW50cygpLHRoaXMuX29sZENoaWxkcmVuPWZ9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKHQpe3ZhciBuPSExLGk9ZS5zZXJpZXNNb2RlbC5nZXRWaWV3Um9vdCgpO2kuZWFjaE5vZGUoKGZ1bmN0aW9uKGkpe2lmKCFuJiZpLnBpZWNlJiZpLnBpZWNlLmNoaWxkQXQoMCk9PT10LnRhcmdldCl7dmFyIHI9aS5nZXRNb2RlbCgpLmdldCgibm9kZUNsaWNrIik7aWYoInJvb3RUb05vZGUiPT09cillLl9yb290VG9Ob2RlKGkpO2Vsc2UgaWYoImxpbmsiPT09cil7dmFyIG89aS5nZXRNb2RlbCgpLGE9by5nZXQoImxpbmsiKTtpZihhKXt2YXIgcz1vLmdldCgidGFyZ2V0IiwhMCl8fCJfYmxhbmsiO2woYSxzKX19bj0hMH19KSl9O3RoaXMuZ3JvdXAuX29uY2xpY2tFdmVudCYmdGhpcy5ncm91cC5vZmYoImNsaWNrIix0aGlzLmdyb3VwLl9vbmNsaWNrRXZlbnQpLHRoaXMuZ3JvdXAub24oImNsaWNrIix0KSx0aGlzLmdyb3VwLl9vbmNsaWNrRXZlbnQ9dH0sX3Jvb3RUb05vZGU6ZnVuY3Rpb24oZSl7ZSE9PXRoaXMuc2VyaWVzTW9kZWwuZ2V0Vmlld1Jvb3QoKSYmdGhpcy5hcGkuZGlzcGF0Y2hBY3Rpb24oe3R5cGU6Yyxmcm9tOnRoaXMudWlkLHNlcmllc0lkOnRoaXMuc2VyaWVzTW9kZWwuaWQsdGFyZ2V0Tm9kZTplfSl9LGNvbnRhaW5Qb2ludDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuZ2V0RGF0YSgpLGk9bi5nZXRJdGVtTGF5b3V0KDApO2lmKGkpe3ZhciByPWVbMF0taS5jeCxvPWVbMV0taS5jeSxhPU1hdGguc3FydChyKnIrbypvKTtyZXR1cm4gYTw9aS5yJiZhPj1pLnIwfX19KSxoPXU7ZS5leHBvcnRzPWh9LDM0MTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjIzZTciKSxyPW4oImQwMzkiKSxvPW4oIjdiMGIiKSxhPW4oImUxNjMiKSxzPW4oImUxNzciKSxsPXIoKGZ1bmN0aW9uKCl7YSgxKX0pKTtpKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bCxzaGFtOiFzfSx7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGEobyhlKSl9fSl9LCIzNDJkIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiY2JlNSIpLHI9bigiMjBjOCIpLG89bigiZWU4NCIpLGE9TWF0aC5zcXJ0LHM9TWF0aC5zaW4sbD1NYXRoLmNvcyxjPU1hdGguUEksdT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5zcXJ0KGVbMF0qZVswXStlWzFdKmVbMV0pfSxoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGVbMF0qdFswXStlWzFdKnRbMV0pLyh1KGUpKnUodCkpfSxkPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGVbMF0qdFsxXTxlWzFdKnRbMF0/LTE6MSkqTWF0aC5hY29zKGgoZSx0KSl9O2Z1bmN0aW9uIGYoZSx0LG4saSxyLG8sdSxmLHAsbSxnKXt2YXIgdj1wKihjLzE4MCkseT1sKHYpKihlLW4pLzIrcyh2KSoodC1pKS8yLGI9LTEqcyh2KSooZS1uKS8yK2wodikqKHQtaSkvMix4PXkqeS8odSp1KStiKmIvKGYqZik7eD4xJiYodSo9YSh4KSxmKj1hKHgpKTt2YXIgXz0ocj09PW8/LTE6MSkqYSgodSp1KihmKmYpLXUqdSooYipiKS1mKmYqKHkqeSkpLyh1KnUqKGIqYikrZipmKih5KnkpKSl8fDAsdz1fKnUqYi9mLFM9XyotZip5L3UsQz0oZStuKS8yK2wodikqdy1zKHYpKlMsaz0odCtpKS8yK3ModikqdytsKHYpKlMsVD1kKFsxLDBdLFsoeS13KS91LChiLVMpL2ZdKSxNPVsoeS13KS91LChiLVMpL2ZdLEU9WygtMSp5LXcpL3UsKC0xKmItUykvZl0sST1kKE0sRSk7aChNLEUpPD0tMSYmKEk9YyksaChNLEUpPj0xJiYoST0wKSwwPT09byYmST4wJiYoSS09MipjKSwxPT09byYmSTwwJiYoSSs9MipjKSxnLmFkZERhdGEobSxDLGssdSxmLFQsSSx2LG8pfXZhciBwPS8oW21sdmh6Y3F0c2FdKShbXm1sdmh6Y3F0c2FdKikvZ2ksbT0vLT8oWzAtOV0qXC4pP1swLTldKyhbZUVdLT9bMC05XSspPy9nO2Z1bmN0aW9uIGcoZSl7aWYoIWUpcmV0dXJuIG5ldyByO2Zvcih2YXIgdCxuPTAsaT0wLG89bixhPWkscz1uZXcgcixsPXIuQ01ELGM9ZS5tYXRjaChwKSx1PTA7dTxjLmxlbmd0aDt1Kyspe2Zvcih2YXIgaCxkPWNbdV0sZz1kLmNoYXJBdCgwKSx2PWQubWF0Y2gobSl8fFtdLHk9di5sZW5ndGgsYj0wO2I8eTtiKyspdltiXT1wYXJzZUZsb2F0KHZbYl0pO3ZhciB4PTA7d2hpbGUoeDx5KXt2YXIgXyx3LFMsQyxrLFQsTSxFPW4sST1pO3N3aXRjaChnKXtjYXNlImwiOm4rPXZbeCsrXSxpKz12W3grK10saD1sLkwscy5hZGREYXRhKGgsbixpKTticmVhaztjYXNlIkwiOm49dlt4KytdLGk9dlt4KytdLGg9bC5MLHMuYWRkRGF0YShoLG4saSk7YnJlYWs7Y2FzZSJtIjpuKz12W3grK10saSs9dlt4KytdLGg9bC5NLHMuYWRkRGF0YShoLG4saSksbz1uLGE9aSxnPSJsIjticmVhaztjYXNlIk0iOm49dlt4KytdLGk9dlt4KytdLGg9bC5NLHMuYWRkRGF0YShoLG4saSksbz1uLGE9aSxnPSJMIjticmVhaztjYXNlImgiOm4rPXZbeCsrXSxoPWwuTCxzLmFkZERhdGEoaCxuLGkpO2JyZWFrO2Nhc2UiSCI6bj12W3grK10saD1sLkwscy5hZGREYXRhKGgsbixpKTticmVhaztjYXNlInYiOmkrPXZbeCsrXSxoPWwuTCxzLmFkZERhdGEoaCxuLGkpO2JyZWFrO2Nhc2UiViI6aT12W3grK10saD1sLkwscy5hZGREYXRhKGgsbixpKTticmVhaztjYXNlIkMiOmg9bC5DLHMuYWRkRGF0YShoLHZbeCsrXSx2W3grK10sdlt4KytdLHZbeCsrXSx2W3grK10sdlt4KytdKSxuPXZbeC0yXSxpPXZbeC0xXTticmVhaztjYXNlImMiOmg9bC5DLHMuYWRkRGF0YShoLHZbeCsrXStuLHZbeCsrXStpLHZbeCsrXStuLHZbeCsrXStpLHZbeCsrXStuLHZbeCsrXStpKSxuKz12W3gtMl0saSs9dlt4LTFdO2JyZWFrO2Nhc2UiUyI6Xz1uLHc9aTt2YXIgRD1zLmxlbigpLEE9cy5kYXRhO3Q9PT1sLkMmJihfKz1uLUFbRC00XSx3Kz1pLUFbRC0zXSksaD1sLkMsRT12W3grK10sST12W3grK10sbj12W3grK10saT12W3grK10scy5hZGREYXRhKGgsXyx3LEUsSSxuLGkpO2JyZWFrO2Nhc2UicyI6Xz1uLHc9aTtEPXMubGVuKCksQT1zLmRhdGE7dD09PWwuQyYmKF8rPW4tQVtELTRdLHcrPWktQVtELTNdKSxoPWwuQyxFPW4rdlt4KytdLEk9aSt2W3grK10sbis9dlt4KytdLGkrPXZbeCsrXSxzLmFkZERhdGEoaCxfLHcsRSxJLG4saSk7YnJlYWs7Y2FzZSJRIjpFPXZbeCsrXSxJPXZbeCsrXSxuPXZbeCsrXSxpPXZbeCsrXSxoPWwuUSxzLmFkZERhdGEoaCxFLEksbixpKTticmVhaztjYXNlInEiOkU9dlt4KytdK24sST12W3grK10raSxuKz12W3grK10saSs9dlt4KytdLGg9bC5RLHMuYWRkRGF0YShoLEUsSSxuLGkpO2JyZWFrO2Nhc2UiVCI6Xz1uLHc9aTtEPXMubGVuKCksQT1zLmRhdGE7dD09PWwuUSYmKF8rPW4tQVtELTRdLHcrPWktQVtELTNdKSxuPXZbeCsrXSxpPXZbeCsrXSxoPWwuUSxzLmFkZERhdGEoaCxfLHcsbixpKTticmVhaztjYXNlInQiOl89bix3PWk7RD1zLmxlbigpLEE9cy5kYXRhO3Q9PT1sLlEmJihfKz1uLUFbRC00XSx3Kz1pLUFbRC0zXSksbis9dlt4KytdLGkrPXZbeCsrXSxoPWwuUSxzLmFkZERhdGEoaCxfLHcsbixpKTticmVhaztjYXNlIkEiOlM9dlt4KytdLEM9dlt4KytdLGs9dlt4KytdLFQ9dlt4KytdLE09dlt4KytdLEU9bixJPWksbj12W3grK10saT12W3grK10saD1sLkEsZihFLEksbixpLFQsTSxTLEMsayxoLHMpO2JyZWFrO2Nhc2UiYSI6Uz12W3grK10sQz12W3grK10saz12W3grK10sVD12W3grK10sTT12W3grK10sRT1uLEk9aSxuKz12W3grK10saSs9dlt4KytdLGg9bC5BLGYoRSxJLG4saSxULE0sUyxDLGssaCxzKTticmVha319InoiIT09ZyYmIloiIT09Z3x8KGg9bC5aLHMuYWRkRGF0YShoKSxuPW8saT1hKSx0PWh9cmV0dXJuIHMudG9TdGF0aWMoKSxzfWZ1bmN0aW9uIHYoZSx0KXt2YXIgbj1nKGUpO3JldHVybiB0PXR8fHt9LHQuYnVpbGRQYXRoPWZ1bmN0aW9uKGUpe2lmKGUuc2V0RGF0YSl7ZS5zZXREYXRhKG4uZGF0YSk7dmFyIHQ9ZS5nZXRDb250ZXh0KCk7dCYmZS5yZWJ1aWxkUGF0aCh0KX1lbHNle3Q9ZTtuLnJlYnVpbGRQYXRoKHQpfX0sdC5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbihlKXtvKG4sZSksdGhpcy5kaXJ0eSghMCl9LHR9ZnVuY3Rpb24geShlLHQpe3JldHVybiBuZXcgaSh2KGUsdCkpfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gaS5leHRlbmQodihlLHQpKX1mdW5jdGlvbiB4KGUsdCl7Zm9yKHZhciBuPVtdLHI9ZS5sZW5ndGgsbz0wO288cjtvKyspe3ZhciBhPWVbb107YS5wYXRofHxhLmNyZWF0ZVBhdGhQcm94eSgpLGEuX19kaXJ0eVBhdGgmJmEuYnVpbGRQYXRoKGEucGF0aCxhLnNoYXBlLCEwKSxuLnB1c2goYS5wYXRoKX12YXIgcz1uZXcgaSh0KTtyZXR1cm4gcy5jcmVhdGVQYXRoUHJveHkoKSxzLmJ1aWxkUGF0aD1mdW5jdGlvbihlKXtlLmFwcGVuZFBhdGgobik7dmFyIHQ9ZS5nZXRDb250ZXh0KCk7dCYmZS5yZWJ1aWxkUGF0aCh0KX0sc310LmNyZWF0ZUZyb21TdHJpbmc9eSx0LmV4dGVuZEZyb21TdHJpbmc9Yix0Lm1lcmdlUGF0aD14fSwiMzQyZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImQwNjYiKTtlLmV4cG9ydHM9aSgibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIifSwiMzQ3ZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjk4NTAiKSxvPW4oIjE2ODciKSxhPW4oIjIzMDYiKSxzPW4oImY5MzQiKSxsPW4oIjkzM2IiKSxjPW4oIjA4YzMiKSx1PW4oImExNWEiKSxoPXUuY3JlYXRlU3ltYm9sLGQ9bigiNjk3ZSIpLGY9bigiMzg0MiIpLHA9bigiZWRhMiIpLG09cC5lbmNvZGVIVE1MLGc9aS5iaW5kLHY9aS5lYWNoLHk9TWF0aC5QSSxiPWwuZXh0ZW5kKHt0eXBlOiJ0aW1lbGluZS5zbGlkZXIiLGluaXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFwaT10LHRoaXMuX2F4aXMsdGhpcy5fdmlld1JlY3QsdGhpcy5fdGltZXIsdGhpcy5fY3VycmVudFBvaW50ZXIsdGhpcy5fbWFpbkdyb3VwLHRoaXMuX2xhYmVsR3JvdXB9LHJlbmRlcjpmdW5jdGlvbihlLHQsbixpKXtpZih0aGlzLm1vZGVsPWUsdGhpcy5hcGk9bix0aGlzLmVjTW9kZWw9dCx0aGlzLmdyb3VwLnJlbW92ZUFsbCgpLGUuZ2V0KCJzaG93IiwhMCkpe3ZhciByPXRoaXMuX2xheW91dChlLG4pLG89dGhpcy5fY3JlYXRlR3JvdXAoIm1haW5Hcm91cCIpLGE9dGhpcy5fY3JlYXRlR3JvdXAoImxhYmVsR3JvdXAiKSxzPXRoaXMuX2F4aXM9dGhpcy5fY3JlYXRlQXhpcyhyLGUpO2UuZm9ybWF0VG9vbHRpcD1mdW5jdGlvbihlKXtyZXR1cm4gbShzLnNjYWxlLmdldExhYmVsKGUpKX0sdihbIkF4aXNMaW5lIiwiQXhpc1RpY2siLCJDb250cm9sIiwiQ3VycmVudFBvaW50ZXIiXSwoZnVuY3Rpb24odCl7dGhpc1siX3JlbmRlciIrdF0ocixvLHMsZSl9KSx0aGlzKSx0aGlzLl9yZW5kZXJBeGlzTGFiZWwocixhLHMsZSksdGhpcy5fcG9zaXRpb24ocixlKX10aGlzLl9kb1BsYXlTdG9wKCl9LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX2NsZWFyVGltZXIoKSx0aGlzLmdyb3VwLnJlbW92ZUFsbCgpfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJUaW1lcigpfSxfbGF5b3V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXQoImxhYmVsLnBvc2l0aW9uIiksaT1lLmdldCgib3JpZW50Iikscj14KGUsdCk7bnVsbD09bnx8ImF1dG8iPT09bj9uPSJob3Jpem9udGFsIj09PWk/ci55K3IuaGVpZ2h0LzI8dC5nZXRIZWlnaHQoKS8yPyItIjoiKyI6ci54K3Iud2lkdGgvMjx0LmdldFdpZHRoKCkvMj8iKyI6Ii0iOmlzTmFOKG4pJiYobj17aG9yaXpvbnRhbDp7dG9wOiItIixib3R0b206IisifSx2ZXJ0aWNhbDp7bGVmdDoiLSIscmlnaHQ6IisifX1baV1bbl0pO3ZhciBvLGEscyxsLGM9e2hvcml6b250YWw6ImNlbnRlciIsdmVydGljYWw6bj49MHx8IisiPT09bj8ibGVmdCI6InJpZ2h0In0sdT17aG9yaXpvbnRhbDpuPj0wfHwiKyI9PT1uPyJ0b3AiOiJib3R0b20iLHZlcnRpY2FsOiJtaWRkbGUifSxoPXtob3Jpem9udGFsOjAsdmVydGljYWw6eS8yfSxkPSJ2ZXJ0aWNhbCI9PT1pP3IuaGVpZ2h0OnIud2lkdGgsZj1lLmdldE1vZGVsKCJjb250cm9sU3R5bGUiKSxwPWYuZ2V0KCJzaG93IiwhMCksbT1wP2YuZ2V0KCJpdGVtU2l6ZSIpOjAsZz1wP2YuZ2V0KCJpdGVtR2FwIik6MCx2PW0rZyxiPWUuZ2V0KCJsYWJlbC5yb3RhdGUiKXx8MDtiPWIqeS8xODA7dmFyIF89Zi5nZXQoInBvc2l0aW9uIiwhMCksdz1wJiZmLmdldCgic2hvd1BsYXlCdG4iLCEwKSxTPXAmJmYuZ2V0KCJzaG93UHJldkJ0biIsITApLEM9cCYmZi5nZXQoInNob3dOZXh0QnRuIiwhMCksaz0wLFQ9ZDtyZXR1cm4ibGVmdCI9PT1ffHwiYm90dG9tIj09PV8/KHcmJihvPVswLDBdLGsrPXYpLFMmJihhPVtrLDBdLGsrPXYpLEMmJihzPVtULW0sMF0sVC09dikpOih3JiYobz1bVC1tLDBdLFQtPXYpLFMmJihhPVswLDBdLGsrPXYpLEMmJihzPVtULW0sMF0sVC09dikpLGw9W2ssVF0sZS5nZXQoImludmVyc2UiKSYmbC5yZXZlcnNlKCkse3ZpZXdSZWN0OnIsbWFpbkxlbmd0aDpkLG9yaWVudDppLHJvdGF0aW9uOmhbaV0sbGFiZWxSb3RhdGlvbjpiLGxhYmVsUG9zT3B0Om4sbGFiZWxBbGlnbjplLmdldCgibGFiZWwuYWxpZ24iKXx8Y1tpXSxsYWJlbEJhc2VsaW5lOmUuZ2V0KCJsYWJlbC52ZXJ0aWNhbEFsaWduIil8fGUuZ2V0KCJsYWJlbC5iYXNlbGluZSIpfHx1W2ldLHBsYXlQb3NpdGlvbjpvLHByZXZCdG5Qb3NpdGlvbjphLG5leHRCdG5Qb3NpdGlvbjpzLGF4aXNFeHRlbnQ6bCxjb250cm9sU2l6ZTptLGNvbnRyb2xHYXA6Z319LF9wb3NpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX21haW5Hcm91cCxpPXRoaXMuX2xhYmVsR3JvdXAscj1lLnZpZXdSZWN0O2lmKCJ2ZXJ0aWNhbCI9PT1lLm9yaWVudCl7dmFyIGE9by5jcmVhdGUoKSxzPXIueCxsPXIueStyLmhlaWdodDtvLnRyYW5zbGF0ZShhLGEsWy1zLC1sXSksby5yb3RhdGUoYSxhLC15LzIpLG8udHJhbnNsYXRlKGEsYSxbcyxsXSkscj1yLmNsb25lKCksci5hcHBseVRyYW5zZm9ybShhKX12YXIgYz12KHIpLHU9dihuLmdldEJvdW5kaW5nUmVjdCgpKSxoPXYoaS5nZXRCb3VuZGluZ1JlY3QoKSksZD1uLnBvc2l0aW9uLGY9aS5wb3NpdGlvbjtmWzBdPWRbMF09Y1swXVswXTt2YXIgcD1lLmxhYmVsUG9zT3B0O2lmKGlzTmFOKHApKXt2YXIgbT0iKyI9PT1wPzA6MTtiKGQsdSxjLDEsbSksYihmLGgsYywxLDEtbSl9ZWxzZXttPXA+PTA/MDoxO2IoZCx1LGMsMSxtKSxmWzFdPWRbMV0rcH1mdW5jdGlvbiBnKGUpe3ZhciB0PWUucG9zaXRpb247ZS5vcmlnaW49W2NbMF1bMF0tdFswXSxjWzFdWzBdLXRbMV1dfWZ1bmN0aW9uIHYoZSl7cmV0dXJuW1tlLngsZS54K2Uud2lkdGhdLFtlLnksZS55K2UuaGVpZ2h0XV19ZnVuY3Rpb24gYihlLHQsbixpLHIpe2VbaV0rPW5baV1bcl0tdFtpXVtyXX1uLmF0dHIoInBvc2l0aW9uIixkKSxpLmF0dHIoInBvc2l0aW9uIixmKSxuLnJvdGF0aW9uPWkucm90YXRpb249ZS5yb3RhdGlvbixnKG4pLGcoaSl9LF9jcmVhdGVBeGlzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXREYXRhKCksaT10LmdldCgiYXhpc1R5cGUiKSxyPWQuY3JlYXRlU2NhbGVCeU1vZGVsKHQsaSk7ci5nZXRUaWNrcz1mdW5jdGlvbigpe3JldHVybiBuLm1hcEFycmF5KFsidmFsdWUiXSwoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSl9O3ZhciBvPW4uZ2V0RGF0YUV4dGVudCgidmFsdWUiKTtyLnNldEV4dGVudChvWzBdLG9bMV0pLHIubmljZVRpY2tzKCk7dmFyIGE9bmV3IGMoInZhbHVlIixyLGUuYXhpc0V4dGVudCxpKTtyZXR1cm4gYS5tb2RlbD10LGF9LF9jcmVhdGVHcm91cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzWyJfIitlXT1uZXcgYS5Hcm91cDtyZXR1cm4gdGhpcy5ncm91cC5hZGQodCksdH0sX3JlbmRlckF4aXNMaW5lOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPW4uZ2V0RXh0ZW50KCk7ci5nZXQoImxpbmVTdHlsZS5zaG93IikmJnQuYWRkKG5ldyBhLkxpbmUoe3NoYXBlOnt4MTpvWzBdLHkxOjAseDI6b1sxXSx5MjowfSxzdHlsZTppLmV4dGVuZCh7bGluZUNhcDoicm91bmQifSxyLmdldE1vZGVsKCJsaW5lU3R5bGUiKS5nZXRMaW5lU3R5bGUoKSksc2lsZW50OiEwLHoyOjF9KSl9LF9yZW5kZXJBeGlzVGljazpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1pLmdldERhdGEoKSxvPW4uc2NhbGUuZ2V0VGlja3MoKTt2KG8sKGZ1bmN0aW9uKGUpe3ZhciBvPW4uZGF0YVRvQ29vcmQoZSkscz1yLmdldEl0ZW1Nb2RlbChlKSxsPXMuZ2V0TW9kZWwoIml0ZW1TdHlsZSIpLGM9cy5nZXRNb2RlbCgiZW1waGFzaXMuaXRlbVN0eWxlIiksdT17cG9zaXRpb246W28sMF0sb25jbGljazpnKHRoaXMuX2NoYW5nZVRpbWVsaW5lLHRoaXMsZSl9LGg9dyhzLGwsdCx1KTthLnNldEhvdmVyU3R5bGUoaCxjLmdldEl0ZW1TdHlsZSgpKSxzLmdldCgidG9vbHRpcCIpPyhoLmRhdGFJbmRleD1lLGguZGF0YU1vZGVsPWkpOmguZGF0YUluZGV4PWguZGF0YU1vZGVsPW51bGx9KSx0aGlzKX0sX3JlbmRlckF4aXNMYWJlbDpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1uLmdldExhYmVsTW9kZWwoKTtpZihyLmdldCgic2hvdyIpKXt2YXIgbz1pLmdldERhdGEoKSxzPW4uZ2V0Vmlld0xhYmVscygpO3YocywoZnVuY3Rpb24oaSl7dmFyIHI9aS50aWNrVmFsdWUscz1vLmdldEl0ZW1Nb2RlbChyKSxsPXMuZ2V0TW9kZWwoImxhYmVsIiksYz1zLmdldE1vZGVsKCJlbXBoYXNpcy5sYWJlbCIpLHU9bi5kYXRhVG9Db29yZChpLnRpY2tWYWx1ZSksaD1uZXcgYS5UZXh0KHtwb3NpdGlvbjpbdSwwXSxyb3RhdGlvbjplLmxhYmVsUm90YXRpb24tZS5yb3RhdGlvbixvbmNsaWNrOmcodGhpcy5fY2hhbmdlVGltZWxpbmUsdGhpcyxyKSxzaWxlbnQ6ITF9KTthLnNldFRleHRTdHlsZShoLnN0eWxlLGwse3RleHQ6aS5mb3JtYXR0ZWRMYWJlbCx0ZXh0QWxpZ246ZS5sYWJlbEFsaWduLHRleHRWZXJ0aWNhbEFsaWduOmUubGFiZWxCYXNlbGluZX0pLHQuYWRkKGgpLGEuc2V0SG92ZXJTdHlsZShoLGEuc2V0VGV4dFN0eWxlKHt9LGMpKX0pLHRoaXMpfX0sX3JlbmRlckNvbnRyb2w6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9ZS5jb250cm9sU2l6ZSxvPWUucm90YXRpb24scz1pLmdldE1vZGVsKCJjb250cm9sU3R5bGUiKS5nZXRJdGVtU3R5bGUoKSxsPWkuZ2V0TW9kZWwoImVtcGhhc2lzLmNvbnRyb2xTdHlsZSIpLmdldEl0ZW1TdHlsZSgpLGM9WzAsLXIvMixyLHJdLHU9aS5nZXRQbGF5U3RhdGUoKSxoPWkuZ2V0KCJpbnZlcnNlIiwhMCk7ZnVuY3Rpb24gZChlLG4sdSxoKXtpZihlKXt2YXIgZD17cG9zaXRpb246ZSxvcmlnaW46W3IvMiwwXSxyb3RhdGlvbjpoPy1vOjAscmVjdEhvdmVyOiEwLHN0eWxlOnMsb25jbGljazp1fSxmPV8oaSxuLGMsZCk7dC5hZGQoZiksYS5zZXRIb3ZlclN0eWxlKGYsbCl9fWQoZS5uZXh0QnRuUG9zaXRpb24sImNvbnRyb2xTdHlsZS5uZXh0SWNvbiIsZyh0aGlzLl9jaGFuZ2VUaW1lbGluZSx0aGlzLGg/Ii0iOiIrIikpLGQoZS5wcmV2QnRuUG9zaXRpb24sImNvbnRyb2xTdHlsZS5wcmV2SWNvbiIsZyh0aGlzLl9jaGFuZ2VUaW1lbGluZSx0aGlzLGg/IisiOiItIikpLGQoZS5wbGF5UG9zaXRpb24sImNvbnRyb2xTdHlsZS4iKyh1PyJzdG9wSWNvbiI6InBsYXlJY29uIiksZyh0aGlzLl9oYW5kbGVQbGF5Q2xpY2ssdGhpcywhdSksITApfSxfcmVuZGVyQ3VycmVudFBvaW50ZXI6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9aS5nZXREYXRhKCksbz1pLmdldEN1cnJlbnRJbmRleCgpLGE9ci5nZXRJdGVtTW9kZWwobykuZ2V0TW9kZWwoImNoZWNrcG9pbnRTdHlsZSIpLHM9dGhpcyxsPXtvbkNyZWF0ZTpmdW5jdGlvbihlKXtlLmRyYWdnYWJsZT0hMCxlLmRyaWZ0PWcocy5faGFuZGxlUG9pbnRlckRyYWcscyksZS5vbmRyYWdlbmQ9ZyhzLl9oYW5kbGVQb2ludGVyRHJhZ2VuZCxzKSxTKGUsbyxuLGksITApfSxvblVwZGF0ZTpmdW5jdGlvbihlKXtTKGUsbyxuLGkpfX07dGhpcy5fY3VycmVudFBvaW50ZXI9dyhhLGEsdGhpcy5fbWFpbkdyb3VwLHt9LHRoaXMuX2N1cnJlbnRQb2ludGVyLGwpfSxfaGFuZGxlUGxheUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2NsZWFyVGltZXIoKSx0aGlzLmFwaS5kaXNwYXRjaEFjdGlvbih7dHlwZToidGltZWxpbmVQbGF5Q2hhbmdlIixwbGF5U3RhdGU6ZSxmcm9tOnRoaXMudWlkfSl9LF9oYW5kbGVQb2ludGVyRHJhZzpmdW5jdGlvbihlLHQsbil7dGhpcy5fY2xlYXJUaW1lcigpLHRoaXMuX3BvaW50ZXJDaGFuZ2VUaW1lbGluZShbbi5vZmZzZXRYLG4ub2Zmc2V0WV0pfSxfaGFuZGxlUG9pbnRlckRyYWdlbmQ6ZnVuY3Rpb24oZSl7dGhpcy5fcG9pbnRlckNoYW5nZVRpbWVsaW5lKFtlLm9mZnNldFgsZS5vZmZzZXRZXSwhMCl9LF9wb2ludGVyQ2hhbmdlVGltZWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90b0F4aXNDb29yZChlKVswXSxpPXRoaXMuX2F4aXMscj1mLmFzYyhpLmdldEV4dGVudCgpLnNsaWNlKCkpO24+clsxXSYmKG49clsxXSksbjxyWzBdJiYobj1yWzBdKSx0aGlzLl9jdXJyZW50UG9pbnRlci5wb3NpdGlvblswXT1uLHRoaXMuX2N1cnJlbnRQb2ludGVyLmRpcnR5KCk7dmFyIG89dGhpcy5fZmluZE5lYXJlc3RUaWNrKG4pLGE9dGhpcy5tb2RlbDsodHx8byE9PWEuZ2V0Q3VycmVudEluZGV4KCkmJmEuZ2V0KCJyZWFsdGltZSIpKSYmdGhpcy5fY2hhbmdlVGltZWxpbmUobyl9LF9kb1BsYXlTdG9wOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMubW9kZWw7dGhpcy5fY2hhbmdlVGltZWxpbmUoZS5nZXRDdXJyZW50SW5kZXgoKSsoZS5nZXQoInJld2luZCIsITApPy0xOjEpKX10aGlzLl9jbGVhclRpbWVyKCksdGhpcy5tb2RlbC5nZXRQbGF5U3RhdGUoKSYmKHRoaXMuX3RpbWVyPXNldFRpbWVvdXQoZyhlLHRoaXMpLHRoaXMubW9kZWwuZ2V0KCJwbGF5SW50ZXJ2YWwiKSkpfSxfdG9BeGlzQ29vcmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFpbkdyb3VwLmdldExvY2FsVHJhbnNmb3JtKCk7cmV0dXJuIGEuYXBwbHlUcmFuc2Zvcm0oZSx0LCEwKX0sX2ZpbmROZWFyZXN0VGljazpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMubW9kZWwuZ2V0RGF0YSgpLGk9MS8wLHI9dGhpcy5fYXhpcztyZXR1cm4gbi5lYWNoKFsidmFsdWUiXSwoZnVuY3Rpb24obixvKXt2YXIgYT1yLmRhdGFUb0Nvb3JkKG4pLHM9TWF0aC5hYnMoYS1lKTtzPGkmJihpPXMsdD1vKX0pKSx0fSxfY2xlYXJUaW1lcjpmdW5jdGlvbigpe3RoaXMuX3RpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLl90aW1lcj1udWxsKX0sX2NoYW5nZVRpbWVsaW5lOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubW9kZWwuZ2V0Q3VycmVudEluZGV4KCk7IisiPT09ZT9lPXQrMToiLSI9PT1lJiYoZT10LTEpLHRoaXMuYXBpLmRpc3BhdGNoQWN0aW9uKHt0eXBlOiJ0aW1lbGluZUNoYW5nZSIsY3VycmVudEluZGV4OmUsZnJvbTp0aGlzLnVpZH0pfX0pO2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gcy5nZXRMYXlvdXRSZWN0KGUuZ2V0Qm94TGF5b3V0UGFyYW1zKCkse3dpZHRoOnQuZ2V0V2lkdGgoKSxoZWlnaHQ6dC5nZXRIZWlnaHQoKX0sZS5nZXQoInBhZGRpbmciKSl9ZnVuY3Rpb24gXyhlLHQsbixpKXt2YXIgbz1pLnN0eWxlLHM9YS5jcmVhdGVJY29uKGUuZ2V0KHQpLGl8fHt9LG5ldyByKG5bMF0sblsxXSxuWzJdLG5bM10pKTtyZXR1cm4gbyYmcy5zZXRTdHlsZShvKSxzfWZ1bmN0aW9uIHcoZSx0LG4scixvLGEpe3ZhciBzPXQuZ2V0KCJjb2xvciIpO2lmKG8pby5zZXRDb2xvcihzKSxuLmFkZChvKSxhJiZhLm9uVXBkYXRlKG8pO2Vsc2V7dmFyIGw9ZS5nZXQoInN5bWJvbCIpO289aChsLC0xLC0xLDIsMixzKSxvLnNldFN0eWxlKCJzdHJva2VOb1NjYWxlIiwhMCksbi5hZGQobyksYSYmYS5vbkNyZWF0ZShvKX12YXIgYz10LmdldEl0ZW1TdHlsZShbImNvbG9yIiwic3ltYm9sIiwic3ltYm9sU2l6ZSJdKTtvLnNldFN0eWxlKGMpLHI9aS5tZXJnZSh7cmVjdEhvdmVyOiEwLHoyOjEwMH0sciwhMCk7dmFyIHU9ZS5nZXQoInN5bWJvbFNpemUiKTt1PXUgaW5zdGFuY2VvZiBBcnJheT91LnNsaWNlKCk6Wyt1LCt1XSx1WzBdLz0yLHVbMV0vPTIsci5zY2FsZT11O3ZhciBkPWUuZ2V0KCJzeW1ib2xPZmZzZXQiKTtpZihkKXt2YXIgcD1yLnBvc2l0aW9uPXIucG9zaXRpb258fFswLDBdO3BbMF0rPWYucGFyc2VQZXJjZW50KGRbMF0sdVswXSkscFsxXSs9Zi5wYXJzZVBlcmNlbnQoZFsxXSx1WzFdKX12YXIgbT1lLmdldCgic3ltYm9sUm90YXRlIik7cmV0dXJuIHIucm90YXRpb249KG18fDApKk1hdGguUEkvMTgwfHwwLG8uYXR0cihyKSxvLnVwZGF0ZVRyYW5zZm9ybSgpLG99ZnVuY3Rpb24gUyhlLHQsbixpLHIpe2lmKCFlLmRyYWdnaW5nKXt2YXIgbz1pLmdldE1vZGVsKCJjaGVja3BvaW50U3R5bGUiKSxhPW4uZGF0YVRvQ29vcmQoaS5nZXREYXRhKCkuZ2V0KFsidmFsdWUiXSx0KSk7cnx8IW8uZ2V0KCJhbmltYXRpb24iLCEwKT9lLmF0dHIoe3Bvc2l0aW9uOlthLDBdfSk6KGUuc3RvcEFuaW1hdGlvbighMCksZS5hbmltYXRlVG8oe3Bvc2l0aW9uOlthLDBdfSxvLmdldCgiYW5pbWF0aW9uRHVyYXRpb24iLCEwKSxvLmdldCgiYW5pbWF0aW9uRWFzaW5nIiwhMCkpKX19ZS5leHBvcnRzPWJ9LCIzNWExIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiZjVkZiIpLHI9bigiM2Y4YyIpLG89bigiYjYyMiIpLGE9bygiaXRlcmF0b3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT1lKXJldHVybiBlW2FdfHxlWyJAQGl0ZXJhdG9yIl18fHJbaShlKV19fSwzNzI5OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI5ZTY5Iikscj1uKCIwMGZkIiksbz1uKCIyOWYzIiksYT0iW29iamVjdCBOdWxsXSIscz0iW29iamVjdCBVbmRlZmluZWRdIixsPWk/aS50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA9PT1lP3M6YTpsJiZsIGluIE9iamVjdChlKT9yKGUpOm8oZSl9ZS5leHBvcnRzPWN9LDM3OTA6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNhNTYiKSxyPWkuZXh0ZW5kKHt0eXBlOiJkYXRhWm9vbS5zbGlkZXIiLGxheW91dE1vZGU6ImJveCIsZGVmYXVsdE9wdGlvbjp7c2hvdzohMCxyaWdodDoicGgiLHRvcDoicGgiLHdpZHRoOiJwaCIsaGVpZ2h0OiJwaCIsbGVmdDpudWxsLGJvdHRvbTpudWxsLGJhY2tncm91bmRDb2xvcjoicmdiYSg0Nyw2OSw4NCwwKSIsZGF0YUJhY2tncm91bmQ6e2xpbmVTdHlsZTp7Y29sb3I6IiMyZjQ1NTQiLHdpZHRoOi41LG9wYWNpdHk6LjN9LGFyZWFTdHlsZTp7Y29sb3I6InJnYmEoNDcsNjksODQsMC4zKSIsb3BhY2l0eTouM319LGJvcmRlckNvbG9yOiIjZGRkIixmaWxsZXJDb2xvcjoicmdiYSgxNjcsMTgzLDIwNCwwLjQpIixoYW5kbGVJY29uOiJNOC4yLDEzLjZWMy45SDYuM3Y5LjdIMy4xdjE0LjloMy4zdjkuN2gxLjh2LTkuN2gzLjNWMTMuNkg4LjJ6IE05LjcsMjQuNEg0Ljh2LTEuNGg0LjlWMjQuNHogTTkuNywxOS4xSDQuOHYtMS40aDQuOVYxOS4xeiIsaGFuZGxlU2l6ZToiMTAwJSIsaGFuZGxlU3R5bGU6e2NvbG9yOiIjYTdiN2NjIn0sbGFiZWxQcmVjaXNpb246bnVsbCxsYWJlbEZvcm1hdHRlcjpudWxsLHNob3dEZXRhaWw6ITAsc2hvd0RhdGFTaGFkb3c6ImF1dG8iLHJlYWx0aW1lOiEwLHpvb21Mb2NrOiExLHRleHRTdHlsZTp7Y29sb3I6IiMzMzMifX19KSxvPXI7ZS5leHBvcnRzPW99LCIzN2U4IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiODNhYiIpLHI9bigiOWJmMiIpLG89bigiODI1YSIpLGE9bigiZGY3NSIpO2UuZXhwb3J0cz1pP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7byhlKTt2YXIgbixpPWEodCkscz1pLmxlbmd0aCxsPTA7d2hpbGUocz5sKXIuZihlLG49aVtsKytdLHRbbl0pO3JldHVybiBlfX0sMzg0MjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9MWUtNDtmdW5jdGlvbiBvKGUpe3JldHVybiBlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX1mdW5jdGlvbiBhKGUsdCxuLGkpe3ZhciByPXRbMV0tdFswXSxvPW5bMV0tblswXTtpZigwPT09cilyZXR1cm4gMD09PW8/blswXTooblswXStuWzFdKS8yO2lmKGkpaWYocj4wKXtpZihlPD10WzBdKXJldHVybiBuWzBdO2lmKGU+PXRbMV0pcmV0dXJuIG5bMV19ZWxzZXtpZihlPj10WzBdKXJldHVybiBuWzBdO2lmKGU8PXRbMV0pcmV0dXJuIG5bMV19ZWxzZXtpZihlPT09dFswXSlyZXR1cm4gblswXTtpZihlPT09dFsxXSlyZXR1cm4gblsxXX1yZXR1cm4oZS10WzBdKS9yKm8rblswXX1mdW5jdGlvbiBzKGUsdCl7c3dpdGNoKGUpe2Nhc2UiY2VudGVyIjpjYXNlIm1pZGRsZSI6ZT0iNTAlIjticmVhaztjYXNlImxlZnQiOmNhc2UidG9wIjplPSIwJSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJib3R0b20iOmU9IjEwMCUiO2JyZWFrfXJldHVybiJzdHJpbmciPT09dHlwZW9mIGU/byhlKS5tYXRjaCgvJSQvKT9wYXJzZUZsb2F0KGUpLzEwMCp0OnBhcnNlRmxvYXQoZSk6bnVsbD09ZT9OYU46K2V9ZnVuY3Rpb24gbChlLHQsbil7cmV0dXJuIG51bGw9PXQmJih0PTEwKSx0PU1hdGgubWluKE1hdGgubWF4KDAsdCksMjApLGU9KCtlKS50b0ZpeGVkKHQpLG4/ZTorZX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSxlfWZ1bmN0aW9uIHUoZSl7aWYoZT0rZSxpc05hTihlKSlyZXR1cm4gMDt2YXIgdD0xLG49MDt3aGlsZShNYXRoLnJvdW5kKGUqdCkvdCE9PWUpdCo9MTAsbisrO3JldHVybiBufWZ1bmN0aW9uIGgoZSl7dmFyIHQ9ZS50b1N0cmluZygpLG49dC5pbmRleE9mKCJlIik7aWYobj4wKXt2YXIgaT0rdC5zbGljZShuKzEpO3JldHVybiBpPDA/LWk6MH12YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcjwwPzA6dC5sZW5ndGgtMS1yfWZ1bmN0aW9uIGQoZSx0KXt2YXIgbj1NYXRoLmxvZyxpPU1hdGguTE4xMCxyPU1hdGguZmxvb3IobihlWzFdLWVbMF0pL2kpLG89TWF0aC5yb3VuZChuKE1hdGguYWJzKHRbMV0tdFswXSkpL2kpLGE9TWF0aC5taW4oTWF0aC5tYXgoLXIrbywwKSwyMCk7cmV0dXJuIGlzRmluaXRlKGEpP2E6MjB9ZnVuY3Rpb24gZihlLHQsbil7aWYoIWVbdF0pcmV0dXJuIDA7dmFyIHI9aS5yZWR1Y2UoZSwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsoaXNOYU4odCk/MDp0KX0pLDApO2lmKDA9PT1yKXJldHVybiAwO3ZhciBvPU1hdGgucG93KDEwLG4pLGE9aS5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuKGlzTmFOKGUpPzA6ZSkvcipvKjEwMH0pKSxzPTEwMCpvLGw9aS5tYXAoYSwoZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZSl9KSksYz1pLnJlZHVjZShsLChmdW5jdGlvbihlLHQpe3JldHVybiBlK3R9KSwwKSx1PWkubWFwKGEsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtbFt0XX0pKTt3aGlsZShjPHMpe2Zvcih2YXIgaD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksZD1udWxsLGY9MCxwPXUubGVuZ3RoO2Y8cDsrK2YpdVtmXT5oJiYoaD11W2ZdLGQ9Zik7KytsW2RdLHVbZF09MCwrK2N9cmV0dXJuIGxbdF0vb312YXIgcD05MDA3MTk5MjU0NzQwOTkxO2Z1bmN0aW9uIG0oZSl7dmFyIHQ9MipNYXRoLlBJO3JldHVybihlJXQrdCkldH1mdW5jdGlvbiBnKGUpe3JldHVybiBlPi1yJiZlPHJ9dmFyIHY9L14oPzooXGR7NH0pKD86Wy1cL10oXGR7MSwyfSkoPzpbLVwvXShcZHsxLDJ9KSg/OltUIF0oXGR7MSwyfSkoPzo6KFxkXGQpKD86OihcZFxkKSg/OlsuLF0oXGQrKSk/KT8pPyhafFtcK1wtXVxkXGQ6P1xkXGQpPyk/KT8pPyk/JC87ZnVuY3Rpb24geShlKXtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZTtpZigic3RyaW5nIj09PXR5cGVvZiBlKXt2YXIgdD12LmV4ZWMoZSk7aWYoIXQpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYodFs4XSl7dmFyIG49K3RbNF18fDA7cmV0dXJuIloiIT09dFs4XS50b1VwcGVyQ2FzZSgpJiYobi09dFs4XS5zbGljZSgwLDMpKSxuZXcgRGF0ZShEYXRlLlVUQygrdFsxXSwrKHRbMl18fDEpLTEsK3RbM118fDEsbiwrKHRbNV18fDApLCt0WzZdfHwwLCt0WzddfHwwKSl9cmV0dXJuIG5ldyBEYXRlKCt0WzFdLCsodFsyXXx8MSktMSwrdFszXXx8MSwrdFs0XXx8MCwrKHRbNV18fDApLCt0WzZdfHwwLCt0WzddfHwwKX1yZXR1cm4gbnVsbD09ZT9uZXcgRGF0ZShOYU4pOm5ldyBEYXRlKE1hdGgucm91bmQoZSkpfWZ1bmN0aW9uIGIoZSl7cmV0dXJuIE1hdGgucG93KDEwLHgoZSkpfWZ1bmN0aW9uIHgoZSl7aWYoMD09PWUpcmV0dXJuIDA7dmFyIHQ9TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMTApO3JldHVybiBlL01hdGgucG93KDEwLHQpPj0xMCYmdCsrLHR9ZnVuY3Rpb24gXyhlLHQpe3ZhciBuLGk9eChlKSxyPU1hdGgucG93KDEwLGkpLG89ZS9yO3JldHVybiBuPXQ/bzwxLjU/MTpvPDIuNT8yOm88ND8zOm88Nz81OjEwOm88MT8xOm88Mj8yOm88Mz8zOm88NT81OjEwLGU9bipyLGk+PS0yMD8rZS50b0ZpeGVkKGk8MD8taTowKTplfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbj0oZS5sZW5ndGgtMSkqdCsxLGk9TWF0aC5mbG9vcihuKSxyPStlW2ktMV0sbz1uLWk7cmV0dXJuIG8/citvKihlW2ldLXIpOnJ9ZnVuY3Rpb24gUyhlKXtlLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoZSx0LDApPy0xOjF9KSk7Zm9yKHZhciB0PS0xLzAsbj0xLGk9MDtpPGUubGVuZ3RoOyl7Zm9yKHZhciByPWVbaV0uaW50ZXJ2YWwsbz1lW2ldLmNsb3NlLGE9MDthPDI7YSsrKXJbYV08PXQmJihyW2FdPXQsb1thXT1hPzE6MS1uKSx0PXJbYV0sbj1vW2FdO3JbMF09PT1yWzFdJiZvWzBdKm9bMV0hPT0xP2Uuc3BsaWNlKGksMSk6aSsrfXJldHVybiBlO2Z1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBlLmludGVydmFsW25dPHQuaW50ZXJ2YWxbbl18fGUuaW50ZXJ2YWxbbl09PT10LmludGVydmFsW25dJiYoZS5jbG9zZVtuXS10LmNsb3NlW25dPT09KG4/LTE6MSl8fCFuJiZzKGUsdCwxKSl9fWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGUtcGFyc2VGbG9hdChlKT49MH10LmxpbmVhck1hcD1hLHQucGFyc2VQZXJjZW50PXMsdC5yb3VuZD1sLHQuYXNjPWMsdC5nZXRQcmVjaXNpb249dSx0LmdldFByZWNpc2lvblNhZmU9aCx0LmdldFBpeGVsUHJlY2lzaW9uPWQsdC5nZXRQZXJjZW50V2l0aFByZWNpc2lvbj1mLHQuTUFYX1NBRkVfSU5URUdFUj1wLHQucmVtUmFkaWFuPW0sdC5pc1JhZGlhbkFyb3VuZFplcm89Zyx0LnBhcnNlRGF0ZT15LHQucXVhbnRpdHk9Yix0LnF1YW50aXR5RXhwb25lbnQ9eCx0Lm5pY2U9Xyx0LnF1YW50aWxlPXcsdC5yZWZvcm1JbnRlcnZhbHM9Uyx0LmlzTnVtZXJpYz1DfSwiMzg3ZiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSxyKXtyZXR1cm4gZS5jb25maWc9dCxuJiYoZS5jb2RlPW4pLGUucmVxdWVzdD1pLGUucmVzcG9uc2U9cixlLmlzQXhpb3NFcnJvcj0hMCxlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzp0aGlzLmNvbmZpZyxjb2RlOnRoaXMuY29kZX19LGV9fSwiMzhhMiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjJiMTciKSxyPWkucmV0cmlldmVSYXdWYWx1ZSxvPW4oImVkYTIiKSxhPW8uZ2V0VG9vbHRpcE1hcmtlcixzPW8uZm9ybWF0VHBsLGw9bigiZTBkMyIpLGM9bC5nZXRUb29sdGlwUmVuZGVyTW9kZSx1PS9ce0AoLis/KVx9L2csaD17Z2V0RGF0YVBhcmFtczpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0RGF0YSh0KSxpPXRoaXMuZ2V0UmF3VmFsdWUoZSx0KSxyPW4uZ2V0UmF3SW5kZXgoZSksbz1uLmdldE5hbWUoZSkscz1uLmdldFJhd0RhdGFJdGVtKGUpLGw9bi5nZXRJdGVtVmlzdWFsKGUsImNvbG9yIiksdT1uLmdldEl0ZW1WaXN1YWwoZSwiYm9yZGVyQ29sb3IiKSxoPXRoaXMuZWNNb2RlbC5nZXRDb21wb25lbnQoInRvb2x0aXAiKSxkPWgmJmguZ2V0KCJyZW5kZXJNb2RlIiksZj1jKGQpLHA9dGhpcy5tYWluVHlwZSxtPSJzZXJpZXMiPT09cCxnPW4udXNlck91dHB1dDtyZXR1cm57Y29tcG9uZW50VHlwZTpwLGNvbXBvbmVudFN1YlR5cGU6dGhpcy5zdWJUeXBlLGNvbXBvbmVudEluZGV4OnRoaXMuY29tcG9uZW50SW5kZXgsc2VyaWVzVHlwZTptP3RoaXMuc3ViVHlwZTpudWxsLHNlcmllc0luZGV4OnRoaXMuc2VyaWVzSW5kZXgsc2VyaWVzSWQ6bT90aGlzLmlkOm51bGwsc2VyaWVzTmFtZTptP3RoaXMubmFtZTpudWxsLG5hbWU6byxkYXRhSW5kZXg6cixkYXRhOnMsZGF0YVR5cGU6dCx2YWx1ZTppLGNvbG9yOmwsYm9yZGVyQ29sb3I6dSxkaW1lbnNpb25OYW1lczpnP2cuZGltZW5zaW9uTmFtZXM6bnVsbCxlbmNvZGU6Zz9nLmVuY29kZTpudWxsLG1hcmtlcjphKHtjb2xvcjpsLHJlbmRlck1vZGU6Zn0pLCR2YXJzOlsic2VyaWVzTmFtZSIsIm5hbWUiLCJ2YWx1ZSJdfX0sZ2V0Rm9ybWF0dGVkTGFiZWw6ZnVuY3Rpb24oZSx0LG4saSxvKXt0PXR8fCJub3JtYWwiO3ZhciBhPXRoaXMuZ2V0RGF0YShuKSxsPWEuZ2V0SXRlbU1vZGVsKGUpLGM9dGhpcy5nZXREYXRhUGFyYW1zKGUsbik7bnVsbCE9aSYmYy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoYy52YWx1ZT1jLnZhbHVlW2ldKTt2YXIgaD1sLmdldCgibm9ybWFsIj09PXQ/W298fCJsYWJlbCIsImZvcm1hdHRlciJdOlt0LG98fCJsYWJlbCIsImZvcm1hdHRlciJdKTtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGgpcmV0dXJuIGMuc3RhdHVzPXQsYy5kaW1lbnNpb25JbmRleD1pLGgoYyk7aWYoInN0cmluZyI9PT10eXBlb2YgaCl7dmFyIGQ9cyhoLGMpO3JldHVybiBkLnJlcGxhY2UodSwoZnVuY3Rpb24odCxuKXt2YXIgaT1uLmxlbmd0aDtyZXR1cm4iWyI9PT1uLmNoYXJBdCgwKSYmIl0iPT09bi5jaGFyQXQoaS0xKSYmKG49K24uc2xpY2UoMSxpLTEpKSxyKGEsZSxuKX0pKX19LGdldFJhd1ZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIodGhpcy5nZXREYXRhKHQpLGUpfSxmb3JtYXRUb29sdGlwOmZ1bmN0aW9uKCl7fX07ZS5leHBvcnRzPWh9LDM5MDE6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjI4MmIiKSxyPWkoW1sibGluZVdpZHRoIiwid2lkdGgiXSxbInN0cm9rZSIsImNvbG9yIl0sWyJvcGFjaXR5Il0sWyJzaGFkb3dCbHVyIl0sWyJzaGFkb3dPZmZzZXRYIl0sWyJzaGFkb3dPZmZzZXRZIl0sWyJzaGFkb3dDb2xvciJdXSksbz17Z2V0TGluZVN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXIodGhpcyxlKTtyZXR1cm4gdC5saW5lRGFzaD10aGlzLmdldExpbmVEYXNoKHQubGluZVdpZHRoKSx0fSxnZXRMaW5lRGFzaDpmdW5jdGlvbihlKXtudWxsPT1lJiYoZT0xKTt2YXIgdD10aGlzLmdldCgidHlwZSIpLG49TWF0aC5tYXgoZSwyKSxpPTQqZTtyZXR1cm4ic29saWQiIT09dCYmbnVsbCE9dCYmKCJkYXNoZWQiPT09dD9baSxpXTpbbixuXSl9fTtlLmV4cG9ydHM9b30sIjM5MmYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1pLmluaGVyaXRzLG89bigiMTllYiIpLGE9bigiOTg1MCIpO2Z1bmN0aW9uIHMoZSl7by5jYWxsKHRoaXMsZSksdGhpcy5fZGlzcGxheWFibGVzPVtdLHRoaXMuX3RlbXBvcmFyeURpc3BsYXlhYmxlcz1bXSx0aGlzLl9jdXJzb3I9MCx0aGlzLm5vdENsZWFyPSEwfXMucHJvdG90eXBlLmluY3JlbWVudGFsPSEwLHMucHJvdG90eXBlLmNsZWFyRGlzcGxheWJsZXM9ZnVuY3Rpb24oKXt0aGlzLl9kaXNwbGF5YWJsZXM9W10sdGhpcy5fdGVtcG9yYXJ5RGlzcGxheWFibGVzPVtdLHRoaXMuX2N1cnNvcj0wLHRoaXMuZGlydHkoKSx0aGlzLm5vdENsZWFyPSExfSxzLnByb3RvdHlwZS5hZGREaXNwbGF5YWJsZT1mdW5jdGlvbihlLHQpe3Q/dGhpcy5fdGVtcG9yYXJ5RGlzcGxheWFibGVzLnB1c2goZSk6dGhpcy5fZGlzcGxheWFibGVzLnB1c2goZSksdGhpcy5kaXJ0eSgpfSxzLnByb3RvdHlwZS5hZGREaXNwbGF5YWJsZXM9ZnVuY3Rpb24oZSx0KXt0PXR8fCExO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMuYWRkRGlzcGxheWFibGUoZVtuXSx0KX0scy5wcm90b3R5cGUuZWFjaFBlbmRpbmdEaXNwbGF5YWJsZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fY3Vyc29yO3Q8dGhpcy5fZGlzcGxheWFibGVzLmxlbmd0aDt0KyspZSYmZSh0aGlzLl9kaXNwbGF5YWJsZXNbdF0pO2Zvcih0PTA7dDx0aGlzLl90ZW1wb3JhcnlEaXNwbGF5YWJsZXMubGVuZ3RoO3QrKyllJiZlKHRoaXMuX3RlbXBvcmFyeURpc3BsYXlhYmxlc1t0XSl9LHMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3RoaXMudXBkYXRlVHJhbnNmb3JtKCk7Zm9yKHZhciBlPXRoaXMuX2N1cnNvcjtlPHRoaXMuX2Rpc3BsYXlhYmxlcy5sZW5ndGg7ZSsrKXt2YXIgdD10aGlzLl9kaXNwbGF5YWJsZXNbZV07dC5wYXJlbnQ9dGhpcyx0LnVwZGF0ZSgpLHQucGFyZW50PW51bGx9Zm9yKGU9MDtlPHRoaXMuX3RlbXBvcmFyeURpc3BsYXlhYmxlcy5sZW5ndGg7ZSsrKXt0PXRoaXMuX3RlbXBvcmFyeURpc3BsYXlhYmxlc1tlXTt0LnBhcmVudD10aGlzLHQudXBkYXRlKCksdC5wYXJlbnQ9bnVsbH19LHMucHJvdG90eXBlLmJydXNoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMuX2N1cnNvcjtuPHRoaXMuX2Rpc3BsYXlhYmxlcy5sZW5ndGg7bisrKXt2YXIgaT10aGlzLl9kaXNwbGF5YWJsZXNbbl07aS5iZWZvcmVCcnVzaCYmaS5iZWZvcmVCcnVzaChlKSxpLmJydXNoKGUsbj09PXRoaXMuX2N1cnNvcj9udWxsOnRoaXMuX2Rpc3BsYXlhYmxlc1tuLTFdKSxpLmFmdGVyQnJ1c2gmJmkuYWZ0ZXJCcnVzaChlKX10aGlzLl9jdXJzb3I9bjtmb3Iobj0wO248dGhpcy5fdGVtcG9yYXJ5RGlzcGxheWFibGVzLmxlbmd0aDtuKyspe2k9dGhpcy5fdGVtcG9yYXJ5RGlzcGxheWFibGVzW25dO2kuYmVmb3JlQnJ1c2gmJmkuYmVmb3JlQnJ1c2goZSksaS5icnVzaChlLDA9PT1uP251bGw6dGhpcy5fdGVtcG9yYXJ5RGlzcGxheWFibGVzW24tMV0pLGkuYWZ0ZXJCcnVzaCYmaS5hZnRlckJydXNoKGUpfXRoaXMuX3RlbXBvcmFyeURpc3BsYXlhYmxlcz1bXSx0aGlzLm5vdENsZWFyPSEwfTt2YXIgbD1bXTtzLnByb3RvdHlwZS5nZXRCb3VuZGluZ1JlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5fcmVjdCl7Zm9yKHZhciBlPW5ldyBhKDEvMCwxLzAsLTEvMCwtMS8wKSx0PTA7dDx0aGlzLl9kaXNwbGF5YWJsZXMubGVuZ3RoO3QrKyl7dmFyIG49dGhpcy5fZGlzcGxheWFibGVzW3RdLGk9bi5nZXRCb3VuZGluZ1JlY3QoKS5jbG9uZSgpO24ubmVlZExvY2FsVHJhbnNmb3JtKCkmJmkuYXBwbHlUcmFuc2Zvcm0obi5nZXRMb2NhbFRyYW5zZm9ybShsKSksZS51bmlvbihpKX10aGlzLl9yZWN0PWV9cmV0dXJuIHRoaXMuX3JlY3R9LHMucHJvdG90eXBlLmNvbnRhaW49ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnRyYW5zZm9ybUNvb3JkVG9Mb2NhbChlLHQpLGk9dGhpcy5nZXRCb3VuZGluZ1JlY3QoKTtpZihpLmNvbnRhaW4oblswXSxuWzFdKSlmb3IodmFyIHI9MDtyPHRoaXMuX2Rpc3BsYXlhYmxlcy5sZW5ndGg7cisrKXt2YXIgbz10aGlzLl9kaXNwbGF5YWJsZXNbcl07aWYoby5jb250YWluKGUsdCkpcmV0dXJuITB9cmV0dXJuITF9LHIocyxvKTt2YXIgYz1zO2UuZXhwb3J0cz1jfSwzOTM0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiYzUzMiIpO2UuZXhwb3J0cz1pLmlzU3RhbmRhcmRCcm93c2VyRW52KCk/ZnVuY3Rpb24oKXt2YXIgZSx0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gcihlKXt2YXIgaT1lO3JldHVybiB0JiYobi5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9bi5ocmVmKSxuLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6bi5ocmVmLHByb3RvY29sOm4ucHJvdG9jb2w/bi5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6bi5ob3N0LHNlYXJjaDpuLnNlYXJjaD9uLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOm4uaGFzaD9uLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpuLmhvc3RuYW1lLHBvcnQ6bi5wb3J0LHBhdGhuYW1lOiIvIj09PW4ucGF0aG5hbWUuY2hhckF0KDApP24ucGF0aG5hbWU6Ii8iK24ucGF0aG5hbWV9fXJldHVybiBlPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKHQpe3ZhciBuPWkuaXNTdHJpbmcodCk/cih0KTp0O3JldHVybiBuLnByb3RvY29sPT09ZS5wcm90b2NvbCYmbi5ob3N0PT09ZS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKX0sIjM5M2EiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiZTQ0NCIpLHI9bigiNTEyYyIpLG89bigiYmEwMSIpLGE9bigiMDUxYiIpLHM9bigiOGEwZCIpLGw9bigiMjZkZCIpLGM9bigiOTJmMCIpLHU9bigiY2U3YSIpLGg9bigiY2MxNSIpKCJpdGVyYXRvciIpLGQ9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSksZj0iQEBpdGVyYXRvciIscD0ia2V5cyIsbT0idmFsdWVzIixnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbix2LHksYix4KXtsKG4sdCx2KTt2YXIgXyx3LFMsQz1mdW5jdGlvbihlKXtpZighZCYmZSBpbiBFKXJldHVybiBFW2VdO3N3aXRjaChlKXtjYXNlIHA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9O2Nhc2UgbTpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxrPXQrIiBJdGVyYXRvciIsVD15PT1tLE09ITEsRT1lLnByb3RvdHlwZSxJPUVbaF18fEVbZl18fHkmJkVbeV0sRD1JfHxDKHkpLEE9eT9UP0MoImVudHJpZXMiKTpEOnZvaWQgMCxPPSJBcnJheSI9PXQmJkUuZW50cmllc3x8STtpZihPJiYoUz11KE8uY2FsbChuZXcgZSkpLFMhPT1PYmplY3QucHJvdG90eXBlJiZTLm5leHQmJihjKFMsaywhMCksaXx8ImZ1bmN0aW9uIj09dHlwZW9mIFNbaF18fGEoUyxoLGcpKSksVCYmSSYmSS5uYW1lIT09bSYmKE09ITAsRD1mdW5jdGlvbigpe3JldHVybiBJLmNhbGwodGhpcyl9KSxpJiYheHx8IWQmJiFNJiZFW2hdfHxhKEUsaCxEKSxzW3RdPUQsc1trXT1nLHkpaWYoXz17dmFsdWVzOlQ/RDpDKG0pLGtleXM6Yj9EOkMocCksZW50cmllczpBfSx4KWZvcih3IGluIF8pdyBpbiBFfHxvKEUsdyxfW3ddKTtlbHNlIHIoci5QK3IuRiooZHx8TSksdCxfKTtyZXR1cm4gX319LDM5NDI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNlYmEiKSxyPW4oIjZkOGIiKTtpLnJlZ2lzdGVyQWN0aW9uKHt0eXBlOiJ0aW1lbGluZUNoYW5nZSIsZXZlbnQ6InRpbWVsaW5lQ2hhbmdlZCIsdXBkYXRlOiJwcmVwYXJlQW5kVXBkYXRlIn0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRDb21wb25lbnQoInRpbWVsaW5lIik7cmV0dXJuIG4mJm51bGwhPWUuY3VycmVudEluZGV4JiYobi5zZXRDdXJyZW50SW5kZXgoZS5jdXJyZW50SW5kZXgpLCFuLmdldCgibG9vcCIsITApJiZuLmlzSW5kZXhNYXgoKSYmbi5zZXRQbGF5U3RhdGUoITEpKSx0LnJlc2V0T3B0aW9uKCJ0aW1lbGluZSIpLHIuZGVmYXVsdHMoe2N1cnJlbnRJbmRleDpuLm9wdGlvbi5jdXJyZW50SW5kZXh9LGUpfSkpLGkucmVnaXN0ZXJBY3Rpb24oe3R5cGU6InRpbWVsaW5lUGxheUNoYW5nZSIsZXZlbnQ6InRpbWVsaW5lUGxheUNoYW5nZWQiLHVwZGF0ZToidXBkYXRlIn0sKGZ1bmN0aW9uKGUsdCl7dmFyIG49dC5nZXRDb21wb25lbnQoInRpbWVsaW5lIik7biYmbnVsbCE9ZS5wbGF5U3RhdGUmJm4uc2V0UGxheVN0YXRlKGUucGxheVN0YXRlKX0pKX0sMzk3MDpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNGY4NSIpLHI9bigiMzMwMSIpLG89bigiMjAzOSIpLGE9aS5leHRlbmQoe3R5cGU6InNlcmllcy5oZWF0bWFwIixnZXRJbml0aWFsRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiByKHRoaXMuZ2V0U291cmNlKCksdGhpcyx7Z2VuZXJhdGVDb29yZDoidmFsdWUifSl9LHByZXZlbnRJbmNyZW1lbnRhbDpmdW5jdGlvbigpe3ZhciBlPW8uZ2V0KHRoaXMuZ2V0KCJjb29yZGluYXRlU3lzdGVtIikpO2lmKGUmJmUuZGltZW5zaW9ucylyZXR1cm4ibG5nIj09PWUuZGltZW5zaW9uc1swXSYmImxhdCI9PT1lLmRpbWVuc2lvbnNbMV19LGRlZmF1bHRPcHRpb246e2Nvb3JkaW5hdGVTeXN0ZW06ImNhcnRlc2lhbjJkIix6bGV2ZWw6MCx6OjIsZ2VvSW5kZXg6MCxibHVyU2l6ZTozMCxwb2ludFNpemU6MjAsbWF4T3BhY2l0eToxLG1pbk9wYWNpdHk6MH19KTtlLmV4cG9ydHM9YX0sIjM5YWQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2Y2ExIikscj1uKCJkMTZhIiksbz1uKCI5ZDExIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LG4sYSl7dmFyIHMsbD1pKHQpLGM9cihsLmxlbmd0aCksdT1vKGEsYyk7aWYoZSYmbiE9bil7d2hpbGUoYz51KWlmKHM9bFt1KytdLHMhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO2M+dTt1KyspaWYoKGV8fHUgaW4gbCkmJmxbdV09PT1uKXJldHVybiBlfHx1fHwwO3JldHVybiFlJiYtMX19fSwiM2E1NiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjRlMDgiKSxyPShpLl9fREVWX18sbigiM2ViYSIpKSxvPW4oIjZkOGIiKSxhPW4oIjIyZDEiKSxzPW4oImUwZDMiKSxsPW4oIjUwZTUiKSxjPW4oImNjMzkiKSx1PW8uZWFjaCxoPWwuZWFjaEF4aXNEaW0sZD1yLmV4dGVuZENvbXBvbmVudE1vZGVsKHt0eXBlOiJkYXRhWm9vbSIsZGVwZW5kZW5jaWVzOlsieEF4aXMiLCJ5QXhpcyIsInpBeGlzIiwicmFkaXVzQXhpcyIsImFuZ2xlQXhpcyIsInNpbmdsZUF4aXMiLCJzZXJpZXMiXSxkZWZhdWx0T3B0aW9uOnt6bGV2ZWw6MCx6OjQsb3JpZW50Om51bGwseEF4aXNJbmRleDpudWxsLHlBeGlzSW5kZXg6bnVsbCxmaWx0ZXJNb2RlOiJmaWx0ZXIiLHRocm90dGxlOm51bGwsc3RhcnQ6MCxlbmQ6MTAwLHN0YXJ0VmFsdWU6bnVsbCxlbmRWYWx1ZTpudWxsLG1pblNwYW46bnVsbCxtYXhTcGFuOm51bGwsbWluVmFsdWVTcGFuOm51bGwsbWF4VmFsdWVTcGFuOm51bGwscmFuZ2VNb2RlOm51bGx9LGluaXQ6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuX2RhdGFJbnRlcnZhbEJ5QXhpcz17fSx0aGlzLl9kYXRhSW5mbz17fSx0aGlzLl9heGlzUHJveGllcz17fSx0aGlzLnRleHRTdHlsZU1vZGVsLHRoaXMuX2F1dG9UaHJvdHRsZT0hMCx0aGlzLl9yYW5nZVByb3BNb2RlPVsicGVyY2VudCIsInBlcmNlbnQiXTt2YXIgaT1mKGUpO3RoaXMuc2V0dGxlZE9wdGlvbj1pLHRoaXMubWVyZ2VEZWZhdWx0QW5kVGhlbWUoZSxuKSx0aGlzLmRvSW5pdChpKX0sbWVyZ2VPcHRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9ZihlKTtvLm1lcmdlKHRoaXMub3B0aW9uLGUsITApLG8ubWVyZ2UodGhpcy5zZXR0bGVkT3B0aW9uLHQsITApLHRoaXMuZG9Jbml0KHQpfSxkb0luaXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb247YS5jYW52YXNTdXBwb3J0ZWR8fCh0LnJlYWx0aW1lPSExKSx0aGlzLl9zZXREZWZhdWx0VGhyb3R0bGUoZSkscCh0aGlzLGUpO3ZhciBuPXRoaXMuc2V0dGxlZE9wdGlvbjt1KFtbInN0YXJ0Iiwic3RhcnRWYWx1ZSJdLFsiZW5kIiwiZW5kVmFsdWUiXV0sKGZ1bmN0aW9uKGUsaSl7InZhbHVlIj09PXRoaXMuX3JhbmdlUHJvcE1vZGVbaV0mJih0W2VbMF1dPW5bZVswXV09bnVsbCl9KSx0aGlzKSx0aGlzLnRleHRTdHlsZU1vZGVsPXRoaXMuZ2V0TW9kZWwoInRleHRTdHlsZSIpLHRoaXMuX3Jlc2V0VGFyZ2V0KCksdGhpcy5fZ2l2ZUF4aXNQcm94aWVzKCl9LF9naXZlQXhpc1Byb3hpZXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9heGlzUHJveGllczt0aGlzLmVhY2hUYXJnZXRBeGlzKChmdW5jdGlvbih0LG4saSxyKXt2YXIgbz10aGlzLmRlcGVuZGVudE1vZGVsc1t0LmF4aXNdW25dLGE9by5fX2R6QXhpc1Byb3h5fHwoby5fX2R6QXhpc1Byb3h5PW5ldyBjKHQubmFtZSxuLHRoaXMscikpO2VbdC5uYW1lKyJfIituXT1hfSksdGhpcyl9LF9yZXNldFRhcmdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uLHQ9dGhpcy5fanVkZ2VBdXRvTW9kZSgpO2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQuYXhpc0luZGV4O2Vbbl09cy5ub3JtYWxpemVUb0FycmF5KGVbbl0pfSksdGhpcyksImF4aXNJbmRleCI9PT10P3RoaXMuX2F1dG9TZXRBeGlzSW5kZXgoKToib3JpZW50Ij09PXQmJnRoaXMuX2F1dG9TZXRPcmllbnQoKX0sX2p1ZGdlQXV0b01vZGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbix0PSExO2goKGZ1bmN0aW9uKG4pe251bGwhPWVbbi5heGlzSW5kZXhdJiYodD0hMCl9KSx0aGlzKTt2YXIgbj1lLm9yaWVudDtyZXR1cm4gbnVsbD09biYmdD8ib3JpZW50Ijp0P3ZvaWQgMDoobnVsbD09biYmKGUub3JpZW50PSJob3Jpem9udGFsIiksImF4aXNJbmRleCIpfSxfYXV0b1NldEF4aXNJbmRleDpmdW5jdGlvbigpe3ZhciBlPSEwLHQ9dGhpcy5nZXQoIm9yaWVudCIsITApLG49dGhpcy5vcHRpb24saT10aGlzLmRlcGVuZGVudE1vZGVscztpZihlKXt2YXIgcj0idmVydGljYWwiPT09dD8ieSI6IngiO2lbcisiQXhpcyJdLmxlbmd0aD8obltyKyJBeGlzSW5kZXgiXT1bMF0sZT0hMSk6dShpLnNpbmdsZUF4aXMsKGZ1bmN0aW9uKGkpe2UmJmkuZ2V0KCJvcmllbnQiLCEwKT09PXQmJihuLnNpbmdsZUF4aXNJbmRleD1baS5jb21wb25lbnRJbmRleF0sZT0hMSl9KSl9ZSYmaCgoZnVuY3Rpb24odCl7aWYoZSl7dmFyIGk9W10scj10aGlzLmRlcGVuZGVudE1vZGVsc1t0LmF4aXNdO2lmKHIubGVuZ3RoJiYhaS5sZW5ndGgpZm9yKHZhciBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKSJjYXRlZ29yeSI9PT1yW29dLmdldCgidHlwZSIpJiZpLnB1c2gobyk7blt0LmF4aXNJbmRleF09aSxpLmxlbmd0aCYmKGU9ITEpfX0pLHRoaXMpLGUmJnRoaXMuZWNNb2RlbC5lYWNoU2VyaWVzKChmdW5jdGlvbihlKXt0aGlzLl9pc1Nlcmllc0hhc0FsbEF4ZXNUeXBlT2YoZSwidmFsdWUiKSYmaCgoZnVuY3Rpb24odCl7dmFyIGk9blt0LmF4aXNJbmRleF0scj1lLmdldCh0LmF4aXNJbmRleCksYT1lLmdldCh0LmF4aXNJZCkscz1lLmVjTW9kZWwucXVlcnlDb21wb25lbnRzKHttYWluVHlwZTp0LmF4aXMsaW5kZXg6cixpZDphfSlbMF07cj1zLmNvbXBvbmVudEluZGV4LG8uaW5kZXhPZihpLHIpPDAmJmkucHVzaChyKX0pKX0pLHRoaXMpfSxfYXV0b1NldE9yaWVudDpmdW5jdGlvbigpe3ZhciBlO3RoaXMuZWFjaFRhcmdldEF4aXMoKGZ1bmN0aW9uKHQpeyFlJiYoZT10Lm5hbWUpfSksdGhpcyksdGhpcy5vcHRpb24ub3JpZW50PSJ5Ij09PWU/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LF9pc1Nlcmllc0hhc0FsbEF4ZXNUeXBlT2Y6ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMDtyZXR1cm4gaCgoZnVuY3Rpb24oaSl7dmFyIHI9ZS5nZXQoaS5heGlzSW5kZXgpLG89dGhpcy5kZXBlbmRlbnRNb2RlbHNbaS5heGlzXVtyXTtvJiZvLmdldCgidHlwZSIpPT09dHx8KG49ITEpfSksdGhpcyksbn0sX3NldERlZmF1bHRUaHJvdHRsZTpmdW5jdGlvbihlKXtpZihlLmhhc093blByb3BlcnR5KCJ0aHJvdHRsZSIpJiYodGhpcy5fYXV0b1Rocm90dGxlPSExKSx0aGlzLl9hdXRvVGhyb3R0bGUpe3ZhciB0PXRoaXMuZWNNb2RlbC5vcHRpb247dGhpcy5vcHRpb24udGhyb3R0bGU9dC5hbmltYXRpb24mJnQuYW5pbWF0aW9uRHVyYXRpb25VcGRhdGU+MD8xMDA6MjB9fSxnZXRGaXJzdFRhcmdldEF4aXNNb2RlbDpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBoKChmdW5jdGlvbih0KXtpZihudWxsPT1lKXt2YXIgbj10aGlzLmdldCh0LmF4aXNJbmRleCk7bi5sZW5ndGgmJihlPXRoaXMuZGVwZW5kZW50TW9kZWxzW3QuYXhpc11bblswXV0pfX0pLHRoaXMpLGV9LGVhY2hUYXJnZXRBeGlzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5lY01vZGVsO2goKGZ1bmN0aW9uKGkpe3UodGhpcy5nZXQoaS5heGlzSW5kZXgpLChmdW5jdGlvbihyKXtlLmNhbGwodCxpLHIsdGhpcyxuKX0pLHRoaXMpfSksdGhpcyl9LGdldEF4aXNQcm94eTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9heGlzUHJveGllc1tlKyJfIit0XX0sZ2V0QXhpc01vZGVsOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRBeGlzUHJveHkoZSx0KTtyZXR1cm4gbiYmbi5nZXRBeGlzTW9kZWwoKX0sc2V0UmF3UmFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb24sbj10aGlzLnNldHRsZWRPcHRpb247dShbWyJzdGFydCIsInN0YXJ0VmFsdWUiXSxbImVuZCIsImVuZFZhbHVlIl1dLChmdW5jdGlvbihpKXtudWxsPT1lW2lbMF1dJiZudWxsPT1lW2lbMV1dfHwodFtpWzBdXT1uW2lbMF1dPWVbaVswXV0sdFtpWzFdXT1uW2lbMV1dPWVbaVsxXV0pfSksdGhpcykscCh0aGlzLGUpfSxzZXRDYWxjdWxhdGVkUmFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb247dShbInN0YXJ0Iiwic3RhcnRWYWx1ZSIsImVuZCIsImVuZFZhbHVlIl0sKGZ1bmN0aW9uKG4pe3Rbbl09ZVtuXX0pKX0sZ2V0UGVyY2VudFJhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5maW5kUmVwcmVzZW50YXRpdmVBeGlzUHJveHkoKTtpZihlKXJldHVybiBlLmdldERhdGFQZXJjZW50V2luZG93KCl9LGdldFZhbHVlUmFuZ2U6ZnVuY3Rpb24oZSx0KXtpZihudWxsIT1lfHxudWxsIT10KXJldHVybiB0aGlzLmdldEF4aXNQcm94eShlLHQpLmdldERhdGFWYWx1ZVdpbmRvdygpO3ZhciBuPXRoaXMuZmluZFJlcHJlc2VudGF0aXZlQXhpc1Byb3h5KCk7cmV0dXJuIG4/bi5nZXREYXRhVmFsdWVXaW5kb3coKTp2b2lkIDB9LGZpbmRSZXByZXNlbnRhdGl2ZUF4aXNQcm94eTpmdW5jdGlvbihlKXtpZihlKXJldHVybiBlLl9fZHpBeGlzUHJveHk7dmFyIHQ9dGhpcy5fYXhpc1Byb3hpZXM7Zm9yKHZhciBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmdFtuXS5ob3N0ZWRCeSh0aGlzKSlyZXR1cm4gdFtuXTtmb3IodmFyIG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pJiYhdFtuXS5ob3N0ZWRCeSh0aGlzKSlyZXR1cm4gdFtuXX0sZ2V0UmFuZ2VQcm9wTW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZVByb3BNb2RlLnNsaWNlKCl9fSk7ZnVuY3Rpb24gZihlKXt2YXIgdD17fTtyZXR1cm4gdShbInN0YXJ0IiwiZW5kIiwic3RhcnRWYWx1ZSIsImVuZFZhbHVlIiwidGhyb3R0bGUiXSwoZnVuY3Rpb24obil7ZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSl9KSksdH1mdW5jdGlvbiBwKGUsdCl7dmFyIG49ZS5fcmFuZ2VQcm9wTW9kZSxpPWUuZ2V0KCJyYW5nZU1vZGUiKTt1KFtbInN0YXJ0Iiwic3RhcnRWYWx1ZSJdLFsiZW5kIiwiZW5kVmFsdWUiXV0sKGZ1bmN0aW9uKGUscil7dmFyIG89bnVsbCE9dFtlWzBdXSxhPW51bGwhPXRbZVsxXV07byYmIWE/bltyXT0icGVyY2VudCI6IW8mJmE/bltyXT0idmFsdWUiOmk/bltyXT1pW3JdOm8mJihuW3JdPSJwZXJjZW50Iil9KSl9dmFyIG09ZDtlLmV4cG9ydHM9bX0sIjNiYmUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI4NjFkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpJiZudWxsIT09ZSl0aHJvdyBUeXBlRXJyb3IoIkNhbid0IHNldCAiK1N0cmluZyhlKSsiIGFzIGEgcHJvdG90eXBlIik7cmV0dXJuIGV9fSwiM2MzNSI6ZnVuY3Rpb24oZSx0KXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPXR9KS5jYWxsKHRoaXMse30pfSwiM2M0ZSI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1mdW5jdGlvbihlKXtyZXR1cm4gcihlKSYmIW8oZSl9O2Z1bmN0aW9uIHIoZSl7cmV0dXJuISFlJiYib2JqZWN0Ij09PXR5cGVvZiBlfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpO3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09dHx8IltvYmplY3QgRGF0ZV0iPT09dHx8bChlKX12YXIgYT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmZvcixzPWE/U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpOjYwMTAzO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUuJCR0eXBlb2Y9PT1zfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W106e319ZnVuY3Rpb24gdShlLHQpe3ZhciBuPXQmJiEwPT09dC5jbG9uZTtyZXR1cm4gbiYmaShlKT9mKGMoZSksZSx0KTplfWZ1bmN0aW9uIGgoZSx0LG4pe3ZhciByPWUuc2xpY2UoKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LG8peyJ1bmRlZmluZWQiPT09dHlwZW9mIHJbb10/cltvXT11KHQsbik6aSh0KT9yW29dPWYoZVtvXSx0LG4pOi0xPT09ZS5pbmRleE9mKHQpJiZyLnB1c2godSh0LG4pKX0pKSxyfWZ1bmN0aW9uIGQoZSx0LG4pe3ZhciByPXt9O3JldHVybiBpKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPXUoZVt0XSxuKX0pKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihvKXtpKHRbb10pJiZlW29dP3Jbb109ZihlW29dLHRbb10sbik6cltvXT11KHRbb10sbil9KSkscn1mdW5jdGlvbiBmKGUsdCxuKXt2YXIgaT1BcnJheS5pc0FycmF5KHQpLHI9QXJyYXkuaXNBcnJheShlKSxvPW58fHthcnJheU1lcmdlOmh9LGE9aT09PXI7aWYoYSl7aWYoaSl7dmFyIHM9by5hcnJheU1lcmdlfHxoO3JldHVybiBzKGUsdCxuKX1yZXR1cm4gZChlLHQsbil9cmV0dXJuIHUodCxuKX1mLmFsbD1mdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpfHxlLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiZmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIGFuIGFycmF5IHdpdGggYXQgbGVhc3QgdHdvIGVsZW1lbnRzIik7cmV0dXJuIGUucmVkdWNlKChmdW5jdGlvbihlLG4pe3JldHVybiBmKGUsbix0KX0pKX07dmFyIHA9ZjtlLmV4cG9ydHM9cH0sIjNjYTMiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiNjU0NyIpLmNoYXJBdCxyPW4oIjY5ZjMiKSxvPW4oIjdkZDAiKSxhPSJTdHJpbmcgSXRlcmF0b3IiLHM9ci5zZXQsbD1yLmdldHRlckZvcihhKTtvKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24oZSl7cyh0aGlzLHt0eXBlOmEsc3RyaW5nOlN0cmluZyhlKSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgZSx0PWwodGhpcyksbj10LnN0cmluZyxyPXQuaW5kZXg7cmV0dXJuIHI+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9aShuLHIpLHQuaW5kZXgrPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pKX0sIjNjZDYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI0OGE5Iiksbz1uKCI2MDdkIiksYT1uKCI3MmI2Iikscz1uKCIyMzA2IiksbD1uKCIzODQyIiksYz1uKCJlZjZhIiksdT1uKCJjYmIwIiksaD1uKCJlMGQzIiksZD1sLmxpbmVhck1hcCxmPWkuZWFjaCxwPU1hdGgubWluLG09TWF0aC5tYXgsZz0xMix2PTYseT1hLmV4dGVuZCh7dHlwZToidmlzdWFsTWFwLmNvbnRpbnVvdXMiLGluaXQ6ZnVuY3Rpb24oKXt5LnN1cGVyQXBwbHkodGhpcywiaW5pdCIsYXJndW1lbnRzKSx0aGlzLl9zaGFwZXM9e30sdGhpcy5fZGF0YUludGVydmFsPVtdLHRoaXMuX2hhbmRsZUVuZHM9W10sdGhpcy5fb3JpZW50LHRoaXMuX3VzZUhhbmRsZSx0aGlzLl9ob3ZlckxpbmtEYXRhSW5kaWNlcz1bXSx0aGlzLl9kcmFnZ2luZyx0aGlzLl9ob3ZlcmluZ30sZG9SZW5kZXI6ZnVuY3Rpb24oZSx0LG4saSl7aSYmInNlbGVjdERhdGFSYW5nZSI9PT1pLnR5cGUmJmkuZnJvbT09PXRoaXMudWlkfHx0aGlzLl9idWlsZFZpZXcoKX0sX2J1aWxkVmlldzpmdW5jdGlvbigpe3RoaXMuZ3JvdXAucmVtb3ZlQWxsKCk7dmFyIGU9dGhpcy52aXN1YWxNYXBNb2RlbCx0PXRoaXMuZ3JvdXA7dGhpcy5fb3JpZW50PWUuZ2V0KCJvcmllbnQiKSx0aGlzLl91c2VIYW5kbGU9ZS5nZXQoImNhbGN1bGFibGUiKSx0aGlzLl9yZXNldEludGVydmFsKCksdGhpcy5fcmVuZGVyQmFyKHQpO3ZhciBuPWUuZ2V0KCJ0ZXh0Iik7dGhpcy5fcmVuZGVyRW5kc1RleHQodCxuLDApLHRoaXMuX3JlbmRlckVuZHNUZXh0KHQsbiwxKSx0aGlzLl91cGRhdGVWaWV3KCEwKSx0aGlzLnJlbmRlckJhY2tncm91bmQodCksdGhpcy5fdXBkYXRlVmlldygpLHRoaXMuX2VuYWJsZUhvdmVyTGlua1RvU2VyaWVzKCksdGhpcy5fZW5hYmxlSG92ZXJMaW5rRnJvbVNlcmllcygpLHRoaXMucG9zaXRpb25Hcm91cCh0KX0sX3JlbmRlckVuZHNUZXh0OmZ1bmN0aW9uKGUsdCxuKXtpZih0KXt2YXIgaT10WzEtbl07aT1udWxsIT1pP2krIiI6IiI7dmFyIHI9dGhpcy52aXN1YWxNYXBNb2RlbCxvPXIuZ2V0KCJ0ZXh0R2FwIiksYT1yLml0ZW1TaXplLGw9dGhpcy5fc2hhcGVzLmJhckdyb3VwLGM9dGhpcy5fYXBwbHlUcmFuc2Zvcm0oW2FbMF0vMiwwPT09bj8tbzphWzFdK29dLGwpLHU9dGhpcy5fYXBwbHlUcmFuc2Zvcm0oMD09PW4/ImJvdHRvbSI6InRvcCIsbCksaD10aGlzLl9vcmllbnQsZD10aGlzLnZpc3VhbE1hcE1vZGVsLnRleHRTdHlsZU1vZGVsO3RoaXMuZ3JvdXAuYWRkKG5ldyBzLlRleHQoe3N0eWxlOnt4OmNbMF0seTpjWzFdLHRleHRWZXJ0aWNhbEFsaWduOiJob3Jpem9udGFsIj09PWg/Im1pZGRsZSI6dSx0ZXh0QWxpZ246Imhvcml6b250YWwiPT09aD91OiJjZW50ZXIiLHRleHQ6aSx0ZXh0Rm9udDpkLmdldEZvbnQoKSx0ZXh0RmlsbDpkLmdldFRleHRDb2xvcigpfX0pKX19LF9yZW5kZXJCYXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy52aXN1YWxNYXBNb2RlbCxuPXRoaXMuX3NoYXBlcyxyPXQuaXRlbVNpemUsbz10aGlzLl9vcmllbnQsYT10aGlzLl91c2VIYW5kbGUscz11LmdldEl0ZW1BbGlnbih0LHRoaXMuYXBpLHIpLGw9bi5iYXJHcm91cD10aGlzLl9jcmVhdGVCYXJHcm91cChzKTtsLmFkZChuLm91dE9mUmFuZ2U9YigpKSxsLmFkZChuLmluUmFuZ2U9YihudWxsLGE/Qyh0aGlzLl9vcmllbnQpOm51bGwsaS5iaW5kKHRoaXMuX2RyYWdIYW5kbGUsdGhpcywiYWxsIiwhMSksaS5iaW5kKHRoaXMuX2RyYWdIYW5kbGUsdGhpcywiYWxsIiwhMCkpKTt2YXIgYz10LnRleHRTdHlsZU1vZGVsLmdldFRleHRSZWN0KCLlm70iKSxoPW0oYy53aWR0aCxjLmhlaWdodCk7YSYmKG4uaGFuZGxlVGh1bWJzPVtdLG4uaGFuZGxlTGFiZWxzPVtdLG4uaGFuZGxlTGFiZWxQb2ludHM9W10sdGhpcy5fY3JlYXRlSGFuZGxlKGwsMCxyLGgsbyxzKSx0aGlzLl9jcmVhdGVIYW5kbGUobCwxLHIsaCxvLHMpKSx0aGlzLl9jcmVhdGVJbmRpY2F0b3IobCxyLGgsbyksZS5hZGQobCl9LF9jcmVhdGVIYW5kbGU6ZnVuY3Rpb24oZSx0LG4scixhKXt2YXIgbD1pLmJpbmQodGhpcy5fZHJhZ0hhbmRsZSx0aGlzLHQsITEpLGM9aS5iaW5kKHRoaXMuX2RyYWdIYW5kbGUsdGhpcyx0LCEwKSx1PWIoeCh0LHIpLEModGhpcy5fb3JpZW50KSxsLGMpO3UucG9zaXRpb25bMF09blswXSxlLmFkZCh1KTt2YXIgaD10aGlzLnZpc3VhbE1hcE1vZGVsLnRleHRTdHlsZU1vZGVsLGQ9bmV3IHMuVGV4dCh7ZHJhZ2dhYmxlOiEwLGRyaWZ0Omwsb25tb3VzZW1vdmU6ZnVuY3Rpb24oZSl7by5zdG9wKGUuZXZlbnQpfSxvbmRyYWdlbmQ6YyxzdHlsZTp7eDowLHk6MCx0ZXh0OiIiLHRleHRGb250OmguZ2V0Rm9udCgpLHRleHRGaWxsOmguZ2V0VGV4dENvbG9yKCl9fSk7dGhpcy5ncm91cC5hZGQoZCk7dmFyIGY9WyJob3Jpem9udGFsIj09PWE/ci8yOjEuNSpyLCJob3Jpem9udGFsIj09PWE/MD09PXQ/LTEuNSpyOjEuNSpyOjA9PT10Py1yLzI6ci8yXSxwPXRoaXMuX3NoYXBlcztwLmhhbmRsZVRodW1ic1t0XT11LHAuaGFuZGxlTGFiZWxQb2ludHNbdF09ZixwLmhhbmRsZUxhYmVsc1t0XT1kfSxfY3JlYXRlSW5kaWNhdG9yOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPWIoW1swLDBdXSwibW92ZSIpO3IucG9zaXRpb25bMF09dFswXSxyLmF0dHIoe2ludmlzaWJsZTohMCxzaWxlbnQ6ITB9KSxlLmFkZChyKTt2YXIgbz10aGlzLnZpc3VhbE1hcE1vZGVsLnRleHRTdHlsZU1vZGVsLGE9bmV3IHMuVGV4dCh7c2lsZW50OiEwLGludmlzaWJsZTohMCxzdHlsZTp7eDowLHk6MCx0ZXh0OiIiLHRleHRGb250Om8uZ2V0Rm9udCgpLHRleHRGaWxsOm8uZ2V0VGV4dENvbG9yKCl9fSk7dGhpcy5ncm91cC5hZGQoYSk7dmFyIGw9WyJob3Jpem9udGFsIj09PWk/bi8yOnYrMywwXSxjPXRoaXMuX3NoYXBlcztjLmluZGljYXRvcj1yLGMuaW5kaWNhdG9yTGFiZWw9YSxjLmluZGljYXRvckxhYmVsUG9pbnQ9bH0sX2RyYWdIYW5kbGU6ZnVuY3Rpb24oZSx0LG4saSl7aWYodGhpcy5fdXNlSGFuZGxlKXtpZih0aGlzLl9kcmFnZ2luZz0hdCwhdCl7dmFyIHI9dGhpcy5fYXBwbHlUcmFuc2Zvcm0oW24saV0sdGhpcy5fc2hhcGVzLmJhckdyb3VwLCEwKTt0aGlzLl91cGRhdGVJbnRlcnZhbChlLHJbMV0pLHRoaXMuX3VwZGF0ZVZpZXcoKX10PT09IXRoaXMudmlzdWFsTWFwTW9kZWwuZ2V0KCJyZWFsdGltZSIpJiZ0aGlzLmFwaS5kaXNwYXRjaEFjdGlvbih7dHlwZToic2VsZWN0RGF0YVJhbmdlIixmcm9tOnRoaXMudWlkLHZpc3VhbE1hcElkOnRoaXMudmlzdWFsTWFwTW9kZWwuaWQsc2VsZWN0ZWQ6dGhpcy5fZGF0YUludGVydmFsLnNsaWNlKCl9KSx0PyF0aGlzLl9ob3ZlcmluZyYmdGhpcy5fY2xlYXJIb3ZlckxpbmtUb1NlcmllcygpOlModGhpcy52aXN1YWxNYXBNb2RlbCkmJnRoaXMuX2RvSG92ZXJMaW5rVG9TZXJpZXModGhpcy5faGFuZGxlRW5kc1tlXSwhMSl9fSxfcmVzZXRJbnRlcnZhbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmlzdWFsTWFwTW9kZWwsdD10aGlzLl9kYXRhSW50ZXJ2YWw9ZS5nZXRTZWxlY3RlZCgpLG49ZS5nZXRFeHRlbnQoKSxpPVswLGUuaXRlbVNpemVbMV1dO3RoaXMuX2hhbmRsZUVuZHM9W2QodFswXSxuLGksITApLGQodFsxXSxuLGksITApXX0sX3VwZGF0ZUludGVydmFsOmZ1bmN0aW9uKGUsdCl7dD10fHwwO3ZhciBuPXRoaXMudmlzdWFsTWFwTW9kZWwsaT10aGlzLl9oYW5kbGVFbmRzLHI9WzAsbi5pdGVtU2l6ZVsxXV07Yyh0LGkscixlLDApO3ZhciBvPW4uZ2V0RXh0ZW50KCk7dGhpcy5fZGF0YUludGVydmFsPVtkKGlbMF0scixvLCEwKSxkKGlbMV0scixvLCEwKV19LF91cGRhdGVWaWV3OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudmlzdWFsTWFwTW9kZWwsbj10LmdldEV4dGVudCgpLGk9dGhpcy5fc2hhcGVzLHI9WzAsdC5pdGVtU2l6ZVsxXV0sbz1lP3I6dGhpcy5faGFuZGxlRW5kcyxhPXRoaXMuX2NyZWF0ZUJhclZpc3VhbCh0aGlzLl9kYXRhSW50ZXJ2YWwsbixvLCJpblJhbmdlIikscz10aGlzLl9jcmVhdGVCYXJWaXN1YWwobixuLHIsIm91dE9mUmFuZ2UiKTtpLmluUmFuZ2Uuc2V0U3R5bGUoe2ZpbGw6YS5iYXJDb2xvcixvcGFjaXR5OmEub3BhY2l0eX0pLnNldFNoYXBlKCJwb2ludHMiLGEuYmFyUG9pbnRzKSxpLm91dE9mUmFuZ2Uuc2V0U3R5bGUoe2ZpbGw6cy5iYXJDb2xvcixvcGFjaXR5OnMub3BhY2l0eX0pLnNldFNoYXBlKCJwb2ludHMiLHMuYmFyUG9pbnRzKSx0aGlzLl91cGRhdGVIYW5kbGUobyxhKX0sX2NyZWF0ZUJhclZpc3VhbDpmdW5jdGlvbihlLHQsbixpKXt2YXIgbz17Zm9yY2VTdGF0ZTppLGNvbnZlcnRPcGFjaXR5VG9BbHBoYTohMH0sYT10aGlzLl9tYWtlQ29sb3JHcmFkaWVudChlLG8pLHM9W3RoaXMuZ2V0Q29udHJvbGxlclZpc3VhbChlWzBdLCJzeW1ib2xTaXplIixvKSx0aGlzLmdldENvbnRyb2xsZXJWaXN1YWwoZVsxXSwic3ltYm9sU2l6ZSIsbyldLGw9dGhpcy5fY3JlYXRlQmFyUG9pbnRzKG4scyk7cmV0dXJue2JhckNvbG9yOm5ldyByKDAsMCwwLDEsYSksYmFyUG9pbnRzOmwsaGFuZGxlc0NvbG9yOlthWzBdLmNvbG9yLGFbYS5sZW5ndGgtMV0uY29sb3JdfX0sX21ha2VDb2xvckdyYWRpZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG49MTAwLGk9W10scj0oZVsxXS1lWzBdKS9uO2kucHVzaCh7Y29sb3I6dGhpcy5nZXRDb250cm9sbGVyVmlzdWFsKGVbMF0sImNvbG9yIix0KSxvZmZzZXQ6MH0pO2Zvcih2YXIgbz0xO288bjtvKyspe3ZhciBhPWVbMF0rcipvO2lmKGE+ZVsxXSlicmVhaztpLnB1c2goe2NvbG9yOnRoaXMuZ2V0Q29udHJvbGxlclZpc3VhbChhLCJjb2xvciIsdCksb2Zmc2V0Om8vbn0pfXJldHVybiBpLnB1c2goe2NvbG9yOnRoaXMuZ2V0Q29udHJvbGxlclZpc3VhbChlWzFdLCJjb2xvciIsdCksb2Zmc2V0OjF9KSxpfSxfY3JlYXRlQmFyUG9pbnRzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy52aXN1YWxNYXBNb2RlbC5pdGVtU2l6ZTtyZXR1cm5bW25bMF0tdFswXSxlWzBdXSxbblswXSxlWzBdXSxbblswXSxlWzFdXSxbblswXS10WzFdLGVbMV1dXX0sX2NyZWF0ZUJhckdyb3VwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX29yaWVudCxuPXRoaXMudmlzdWFsTWFwTW9kZWwuZ2V0KCJpbnZlcnNlIik7cmV0dXJuIG5ldyBzLkdyb3VwKCJob3Jpem9udGFsIiE9PXR8fG4/Imhvcml6b250YWwiPT09dCYmbj97c2NhbGU6ImJvdHRvbSI9PT1lP1stMSwxXTpbMSwxXSxyb3RhdGlvbjotTWF0aC5QSS8yfToidmVydGljYWwiIT09dHx8bj97c2NhbGU6ImxlZnQiPT09ZT9bMSwxXTpbLTEsMV19OntzY2FsZToibGVmdCI9PT1lP1sxLC0xXTpbLTEsLTFdfTp7c2NhbGU6ImJvdHRvbSI9PT1lP1sxLDFdOlstMSwxXSxyb3RhdGlvbjpNYXRoLlBJLzJ9KX0sX3VwZGF0ZUhhbmRsZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3VzZUhhbmRsZSl7dmFyIG49dGhpcy5fc2hhcGVzLGk9dGhpcy52aXN1YWxNYXBNb2RlbCxyPW4uaGFuZGxlVGh1bWJzLG89bi5oYW5kbGVMYWJlbHM7ZihbMCwxXSwoZnVuY3Rpb24oYSl7dmFyIGw9clthXTtsLnNldFN0eWxlKCJmaWxsIix0LmhhbmRsZXNDb2xvclthXSksbC5wb3NpdGlvblsxXT1lW2FdO3ZhciBjPXMuYXBwbHlUcmFuc2Zvcm0obi5oYW5kbGVMYWJlbFBvaW50c1thXSxzLmdldFRyYW5zZm9ybShsLHRoaXMuZ3JvdXApKTtvW2FdLnNldFN0eWxlKHt4OmNbMF0seTpjWzFdLHRleHQ6aS5mb3JtYXRWYWx1ZVRleHQodGhpcy5fZGF0YUludGVydmFsW2FdKSx0ZXh0VmVydGljYWxBbGlnbjoibWlkZGxlIix0ZXh0QWxpZ246dGhpcy5fYXBwbHlUcmFuc2Zvcm0oImhvcml6b250YWwiPT09dGhpcy5fb3JpZW50PzA9PT1hPyJib3R0b20iOiJ0b3AiOiJsZWZ0IixuLmJhckdyb3VwKX0pfSksdGhpcyl9fSxfc2hvd0luZGljYXRvcjpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj10aGlzLnZpc3VhbE1hcE1vZGVsLG89ci5nZXRFeHRlbnQoKSxhPXIuaXRlbVNpemUsbD1bMCxhWzFdXSxjPWQoZSxvLGwsITApLHU9dGhpcy5fc2hhcGVzLGg9dS5pbmRpY2F0b3I7aWYoaCl7aC5wb3NpdGlvblsxXT1jLGguYXR0cigiaW52aXNpYmxlIiwhMSksaC5zZXRTaGFwZSgicG9pbnRzIixfKCEhbixpLGMsYVsxXSkpO3ZhciBmPXtjb252ZXJ0T3BhY2l0eVRvQWxwaGE6ITB9LHA9dGhpcy5nZXRDb250cm9sbGVyVmlzdWFsKGUsImNvbG9yIixmKTtoLnNldFN0eWxlKCJmaWxsIixwKTt2YXIgbT1zLmFwcGx5VHJhbnNmb3JtKHUuaW5kaWNhdG9yTGFiZWxQb2ludCxzLmdldFRyYW5zZm9ybShoLHRoaXMuZ3JvdXApKSxnPXUuaW5kaWNhdG9yTGFiZWw7Zy5hdHRyKCJpbnZpc2libGUiLCExKTt2YXIgdj10aGlzLl9hcHBseVRyYW5zZm9ybSgibGVmdCIsdS5iYXJHcm91cCkseT10aGlzLl9vcmllbnQ7Zy5zZXRTdHlsZSh7dGV4dDoobnx8IiIpK3IuZm9ybWF0VmFsdWVUZXh0KHQpLHRleHRWZXJ0aWNhbEFsaWduOiJob3Jpem9udGFsIj09PXk/djoibWlkZGxlIix0ZXh0QWxpZ246Imhvcml6b250YWwiPT09eT8iY2VudGVyIjp2LHg6bVswXSx5Om1bMV19KX19LF9lbmFibGVIb3ZlckxpbmtUb1NlcmllczpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fc2hhcGVzLmJhckdyb3VwLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXtpZihlLl9ob3ZlcmluZz0hMCwhZS5fZHJhZ2dpbmcpe3ZhciBuPWUudmlzdWFsTWFwTW9kZWwuaXRlbVNpemUsaT1lLl9hcHBseVRyYW5zZm9ybShbdC5vZmZzZXRYLHQub2Zmc2V0WV0sZS5fc2hhcGVzLmJhckdyb3VwLCEwLCEwKTtpWzFdPXAobSgwLGlbMV0pLG5bMV0pLGUuX2RvSG92ZXJMaW5rVG9TZXJpZXMoaVsxXSwwPD1pWzBdJiZpWzBdPD1uWzBdKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLl9ob3ZlcmluZz0hMSwhZS5fZHJhZ2dpbmcmJmUuX2NsZWFySG92ZXJMaW5rVG9TZXJpZXMoKX0pKX0sX2VuYWJsZUhvdmVyTGlua0Zyb21TZXJpZXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmFwaS5nZXRacigpO3RoaXMudmlzdWFsTWFwTW9kZWwub3B0aW9uLmhvdmVyTGluaz8oZS5vbigibW91c2VvdmVyIix0aGlzLl9ob3ZlckxpbmtGcm9tU2VyaWVzTW91c2VPdmVyLHRoaXMpLGUub24oIm1vdXNlb3V0Iix0aGlzLl9oaWRlSW5kaWNhdG9yLHRoaXMpKTp0aGlzLl9jbGVhckhvdmVyTGlua0Zyb21TZXJpZXMoKX0sX2RvSG92ZXJMaW5rVG9TZXJpZXM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnZpc3VhbE1hcE1vZGVsLGk9bi5pdGVtU2l6ZTtpZihuLm9wdGlvbi5ob3Zlckxpbmspe3ZhciByPVswLGlbMV1dLG89bi5nZXRFeHRlbnQoKTtlPXAobShyWzBdLGUpLHJbMV0pO3ZhciBhPXcobixvLHIpLHM9W2UtYSxlK2FdLGw9ZChlLHIsbywhMCksYz1bZChzWzBdLHIsbywhMCksZChzWzFdLHIsbywhMCldO3NbMF08clswXSYmKGNbMF09LTEvMCksc1sxXT5yWzFdJiYoY1sxXT0xLzApLHQmJihjWzBdPT09LTEvMD90aGlzLl9zaG93SW5kaWNhdG9yKGwsY1sxXSwiPCAiLGEpOmNbMV09PT0xLzA/dGhpcy5fc2hvd0luZGljYXRvcihsLGNbMF0sIj4gIixhKTp0aGlzLl9zaG93SW5kaWNhdG9yKGwsbCwi4omIICIsYSkpO3ZhciBmPXRoaXMuX2hvdmVyTGlua0RhdGFJbmRpY2VzLGc9W107KHR8fFMobikpJiYoZz10aGlzLl9ob3ZlckxpbmtEYXRhSW5kaWNlcz1uLmZpbmRUYXJnZXREYXRhSW5kaWNlcyhjKSk7dmFyIHY9aC5jb21wcmVzc0JhdGNoZXMoZixnKTt0aGlzLl9kaXNwYXRjaEhpZ2hEb3duKCJkb3ducGxheSIsdS5tYWtlSGlnaERvd25CYXRjaCh2WzBdLG4pKSx0aGlzLl9kaXNwYXRjaEhpZ2hEb3duKCJoaWdobGlnaHQiLHUubWFrZUhpZ2hEb3duQmF0Y2godlsxXSxuKSl9fSxfaG92ZXJMaW5rRnJvbVNlcmllc01vdXNlT3ZlcjpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldCxuPXRoaXMudmlzdWFsTWFwTW9kZWw7aWYodCYmbnVsbCE9dC5kYXRhSW5kZXgpe3ZhciBpPXRoaXMuZWNNb2RlbC5nZXRTZXJpZXNCeUluZGV4KHQuc2VyaWVzSW5kZXgpO2lmKG4uaXNUYXJnZXRTZXJpZXMoaSkpe3ZhciByPWkuZ2V0RGF0YSh0LmRhdGFUeXBlKSxvPXIuZ2V0KG4uZ2V0RGF0YURpbWVuc2lvbihyKSx0LmRhdGFJbmRleCwhMCk7aXNOYU4obyl8fHRoaXMuX3Nob3dJbmRpY2F0b3IobyxvKX19fSxfaGlkZUluZGljYXRvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3NoYXBlcztlLmluZGljYXRvciYmZS5pbmRpY2F0b3IuYXR0cigiaW52aXNpYmxlIiwhMCksZS5pbmRpY2F0b3JMYWJlbCYmZS5pbmRpY2F0b3JMYWJlbC5hdHRyKCJpbnZpc2libGUiLCEwKX0sX2NsZWFySG92ZXJMaW5rVG9TZXJpZXM6ZnVuY3Rpb24oKXt0aGlzLl9oaWRlSW5kaWNhdG9yKCk7dmFyIGU9dGhpcy5faG92ZXJMaW5rRGF0YUluZGljZXM7dGhpcy5fZGlzcGF0Y2hIaWdoRG93bigiZG93bnBsYXkiLHUubWFrZUhpZ2hEb3duQmF0Y2goZSx0aGlzLnZpc3VhbE1hcE1vZGVsKSksZS5sZW5ndGg9MH0sX2NsZWFySG92ZXJMaW5rRnJvbVNlcmllczpmdW5jdGlvbigpe3RoaXMuX2hpZGVJbmRpY2F0b3IoKTt2YXIgZT10aGlzLmFwaS5nZXRacigpO2Uub2ZmKCJtb3VzZW92ZXIiLHRoaXMuX2hvdmVyTGlua0Zyb21TZXJpZXNNb3VzZU92ZXIpLGUub2ZmKCJtb3VzZW91dCIsdGhpcy5faGlkZUluZGljYXRvcil9LF9hcHBseVRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz1zLmdldFRyYW5zZm9ybSh0LHI/bnVsbDp0aGlzLmdyb3VwKTtyZXR1cm4gc1tpLmlzQXJyYXkoZSk/ImFwcGx5VHJhbnNmb3JtIjoidHJhbnNmb3JtRGlyZWN0aW9uIl0oZSxvLG4pfSxfZGlzcGF0Y2hIaWdoRG93bjpmdW5jdGlvbihlLHQpe3QmJnQubGVuZ3RoJiZ0aGlzLmFwaS5kaXNwYXRjaEFjdGlvbih7dHlwZTplLGJhdGNoOnR9KX0sZGlzcG9zZTpmdW5jdGlvbigpe3RoaXMuX2NsZWFySG92ZXJMaW5rRnJvbVNlcmllcygpLHRoaXMuX2NsZWFySG92ZXJMaW5rVG9TZXJpZXMoKX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJIb3ZlckxpbmtGcm9tU2VyaWVzKCksdGhpcy5fY2xlYXJIb3ZlckxpbmtUb1NlcmllcygpfX0pO2Z1bmN0aW9uIGIoZSx0LG4saSl7cmV0dXJuIG5ldyBzLlBvbHlnb24oe3NoYXBlOntwb2ludHM6ZX0sZHJhZ2dhYmxlOiEhbixjdXJzb3I6dCxkcmlmdDpuLG9ubW91c2Vtb3ZlOmZ1bmN0aW9uKGUpe28uc3RvcChlLmV2ZW50KX0sb25kcmFnZW5kOml9KX1mdW5jdGlvbiB4KGUsdCl7cmV0dXJuIDA9PT1lP1tbMCwwXSxbdCwwXSxbdCwtdF1dOltbMCwwXSxbdCwwXSxbdCx0XV19ZnVuY3Rpb24gXyhlLHQsbixpKXtyZXR1cm4gZT9bWzAsLXAodCxtKG4sMCkpXSxbdiwwXSxbMCxwKHQsbShpLW4sMCkpXV06W1swLDBdLFs1LC01XSxbNSw1XV19ZnVuY3Rpb24gdyhlLHQsbil7dmFyIGk9Zy8yLHI9ZS5nZXQoImhvdmVyTGlua0RhdGFTaXplIik7cmV0dXJuIHImJihpPWQocix0LG4sITApLzIpLGl9ZnVuY3Rpb24gUyhlKXt2YXIgdD1lLmdldCgiaG92ZXJMaW5rT25IYW5kbGUiKTtyZXR1cm4hIShudWxsPT10P2UuZ2V0KCJyZWFsdGltZSIpOnQpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuInZlcnRpY2FsIj09PWU/Im5zLXJlc2l6ZSI6ImV3LXJlc2l6ZSJ9dmFyIGs9eTtlLmV4cG9ydHM9a30sIjNlYmEiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0ZTA4Iikscj0oaS5fX0RFVl9fLG4oIjY5N2U3IikpLG89bigiNmQ4YiIpLGE9bigiNDFlZiIpLHM9bigiMjJkMSIpLGw9bigiMDRmNiIpLGM9bigiMWZhYiIpLHU9bigiN2U2MyIpLGg9bigiODQzZSIpLGQ9bigiMjAzOSIpLGY9bigiY2E5OCIpLHA9bigiZmIwNSIpLG09bigiZDE1ZCIpLGc9bigiNmNiNyIpLHY9bigiNGY4NSIpLHk9bigiYjEyZiIpLGI9bigiZTg4NyIpLHg9bigiMjMwNiIpLF89bigiZTBkMyIpLHc9bigiODhiMyIpLFM9dy50aHJvdHRsZSxDPW4oImZkNjMiKSxrPW4oImI4MDkiKSxUPW4oIjk5OGMiKSxNPW4oIjY5ZmYiKSxFPW4oImM1MzMiKSxJPW4oImYyMTkiKTtuKCIwMzUyIik7dmFyIEQ9bigiZWMzNCIpLEE9by5hc3NlcnQsTz1vLmVhY2gsUD1vLmlzRnVuY3Rpb24sTD1vLmlzT2JqZWN0LE49Zy5wYXJzZUNsYXNzVHlwZSxSPSI0LjkuMCIsJD17enJlbmRlcjoiNC4zLjIifSx6PTEsQj0xZTMsRj04MDAsVj05MDAsaj01ZTMsSD0xZTMsVz0xMTAwLEc9MmUzLFU9M2UzLHE9MzUwMCxZPTRlMyxYPTVlMyxLPXtQUk9DRVNTT1I6e0ZJTFRFUjpCLFNFUklFU19GSUxURVI6RixTVEFUSVNUSUM6an0sVklTVUFMOntMQVlPVVQ6SCxQUk9HUkVTU0lWRV9MQVlPVVQ6VyxHTE9CQUw6RyxDSEFSVDpVLFBPU1RfQ0hBUlRfTEFZT1VUOnEsQ09NUE9ORU5UOlksQlJVU0g6WH19LFo9Il9fZmxhZ0luTWFpblByb2Nlc3MiLEo9Il9fb3B0aW9uVXBkYXRlZCIsUT0vXlthLXpBLVowLTlfXSskLztmdW5jdGlvbiBlZShlLHQpe3JldHVybiBmdW5jdGlvbihuLGkscil7dHx8IXRoaXMuX2Rpc3Bvc2VkPyhuPW4mJm4udG9Mb3dlckNhc2UoKSxjLnByb3RvdHlwZVtlXS5jYWxsKHRoaXMsbixpLHIpKTp4ZSh0aGlzLmlkKX19ZnVuY3Rpb24gdGUoKXtjLmNhbGwodGhpcyl9ZnVuY3Rpb24gbmUoZSx0LG4pe249bnx8e30sInN0cmluZyI9PT10eXBlb2YgdCYmKHQ9T2VbdF0pLHRoaXMuaWQsdGhpcy5ncm91cCx0aGlzLl9kb209ZTt2YXIgaT0iY2FudmFzIixhPXRoaXMuX3pyPXIuaW5pdChlLHtyZW5kZXJlcjpuLnJlbmRlcmVyfHxpLGRldmljZVBpeGVsUmF0aW86bi5kZXZpY2VQaXhlbFJhdGlvLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fSk7dGhpcy5fdGhyb3R0bGVkWnJGbHVzaD1TKG8uYmluZChhLmZsdXNoLGEpLDE3KTt0PW8uY2xvbmUodCk7dCYmcCh0LCEwKSx0aGlzLl90aGVtZT10LHRoaXMuX2NoYXJ0c1ZpZXdzPVtdLHRoaXMuX2NoYXJ0c01hcD17fSx0aGlzLl9jb21wb25lbnRzVmlld3M9W10sdGhpcy5fY29tcG9uZW50c01hcD17fSx0aGlzLl9jb29yZFN5c01ncj1uZXcgZDt2YXIgcz10aGlzLl9hcGk9Q2UodGhpcyk7ZnVuY3Rpb24gdShlLHQpe3JldHVybiBlLl9fcHJpby10Ll9fcHJpb31sKEFlLHUpLGwoRWUsdSksdGhpcy5fc2NoZWR1bGVyPW5ldyBNKHRoaXMscyxFZSxBZSksYy5jYWxsKHRoaXMsdGhpcy5fZWNFdmVudFByb2Nlc3Nvcj1uZXcga2UpLHRoaXMuX21lc3NhZ2VDZW50ZXI9bmV3IHRlLHRoaXMuX2luaXRFdmVudHMoKSx0aGlzLnJlc2l6ZT1vLmJpbmQodGhpcy5yZXNpemUsdGhpcyksdGhpcy5fcGVuZGluZ0FjdGlvbnM9W10sYS5hbmltYXRpb24ub24oImZyYW1lIix0aGlzLl9vbmZyYW1lLHRoaXMpLGRlKGEsdGhpcyksby5zZXRBc1ByaW1pdGl2ZSh0aGlzKX10ZS5wcm90b3R5cGUub249ZWUoIm9uIiwhMCksdGUucHJvdG90eXBlLm9mZj1lZSgib2ZmIiwhMCksdGUucHJvdG90eXBlLm9uZT1lZSgib25lIiwhMCksby5taXhpbih0ZSxjKTt2YXIgaWU9bmUucHJvdG90eXBlO2Z1bmN0aW9uIHJlKGUsdCxuKXtpZih0aGlzLl9kaXNwb3NlZCl4ZSh0aGlzLmlkKTtlbHNle3ZhciBpLHI9dGhpcy5fbW9kZWwsbz10aGlzLl9jb29yZFN5c01nci5nZXRDb29yZGluYXRlU3lzdGVtcygpO3Q9Xy5wYXJzZUZpbmRlcihyLHQpO2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO2lmKHNbZV0mJm51bGwhPShpPXNbZV0ocix0LG4pKSlyZXR1cm4gaX19fWllLl9vbmZyYW1lPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rpc3Bvc2VkKXt2YXIgZT10aGlzLl9zY2hlZHVsZXI7aWYodGhpc1tKXSl7dmFyIHQ9dGhpc1tKXS5zaWxlbnQ7dGhpc1taXT0hMCxhZSh0aGlzKSxvZS51cGRhdGUuY2FsbCh0aGlzKSx0aGlzW1pdPSExLHRoaXNbSl09ITEsdWUuY2FsbCh0aGlzLHQpLGhlLmNhbGwodGhpcyx0KX1lbHNlIGlmKGUudW5maW5pc2hlZCl7dmFyIG49eixpPXRoaXMuX21vZGVsLHI9dGhpcy5fYXBpO2UudW5maW5pc2hlZD0hMTtkb3t2YXIgbz0rbmV3IERhdGU7ZS5wZXJmb3JtU2VyaWVzVGFza3MoaSksZS5wZXJmb3JtRGF0YVByb2Nlc3NvclRhc2tzKGkpLGxlKHRoaXMsaSksZS5wZXJmb3JtVmlzdWFsVGFza3MoaSksdmUodGhpcyx0aGlzLl9tb2RlbCxyLCJyZW1haW4iKSxuLT0rbmV3IERhdGUtb313aGlsZShuPjAmJmUudW5maW5pc2hlZCk7ZS51bmZpbmlzaGVkfHx0aGlzLl96ci5mbHVzaCgpfX19LGllLmdldERvbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb219LGllLmdldFpyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pyfSxpZS5zZXRPcHRpb249ZnVuY3Rpb24oZSx0LG4pe2lmKHRoaXMuX2Rpc3Bvc2VkKXhlKHRoaXMuaWQpO2Vsc2V7dmFyIGk7aWYoTCh0KSYmKG49dC5sYXp5VXBkYXRlLGk9dC5zaWxlbnQsdD10Lm5vdE1lcmdlKSx0aGlzW1pdPSEwLCF0aGlzLl9tb2RlbHx8dCl7dmFyIHI9bmV3IGYodGhpcy5fYXBpKSxvPXRoaXMuX3RoZW1lLGE9dGhpcy5fbW9kZWw9bmV3IHU7YS5zY2hlZHVsZXI9dGhpcy5fc2NoZWR1bGVyLGEuaW5pdChudWxsLG51bGwsbyxyKX10aGlzLl9tb2RlbC5zZXRPcHRpb24oZSxJZSksbj8odGhpc1tKXT17c2lsZW50Oml9LHRoaXNbWl09ITEpOihhZSh0aGlzKSxvZS51cGRhdGUuY2FsbCh0aGlzKSx0aGlzLl96ci5mbHVzaCgpLHRoaXNbSl09ITEsdGhpc1taXT0hMSx1ZS5jYWxsKHRoaXMsaSksaGUuY2FsbCh0aGlzLGkpKX19LGllLnNldFRoZW1lPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiRUNoYXJ0cyNzZXRUaGVtZSgpIGlzIERFUFJFQ0FURUQgaW4gRUNoYXJ0cyAzLjAiKX0saWUuZ2V0TW9kZWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9kZWx9LGllLmdldE9wdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb2RlbCYmdGhpcy5fbW9kZWwuZ2V0T3B0aW9uKCl9LGllLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pyLmdldFdpZHRoKCl9LGllLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96ci5nZXRIZWlnaHQoKX0saWUuZ2V0RGV2aWNlUGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl96ci5wYWludGVyLmRwcnx8d2luZG93LmRldmljZVBpeGVsUmF0aW98fDF9LGllLmdldFJlbmRlcmVkQ2FudmFzPWZ1bmN0aW9uKGUpe2lmKHMuY2FudmFzU3VwcG9ydGVkKXtlPWV8fHt9LGUucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW98fDEsZS5iYWNrZ3JvdW5kQ29sb3I9ZS5iYWNrZ3JvdW5kQ29sb3J8fHRoaXMuX21vZGVsLmdldCgiYmFja2dyb3VuZENvbG9yIik7dmFyIHQ9dGhpcy5fenI7cmV0dXJuIHQucGFpbnRlci5nZXRSZW5kZXJlZENhbnZhcyhlKX19LGllLmdldFN2Z0RhdGFVUkw9ZnVuY3Rpb24oKXtpZihzLnN2Z1N1cHBvcnRlZCl7dmFyIGU9dGhpcy5fenIsdD1lLnN0b3JhZ2UuZ2V0RGlzcGxheUxpc3QoKTtyZXR1cm4gby5lYWNoKHQsKGZ1bmN0aW9uKGUpe2Uuc3RvcEFuaW1hdGlvbighMCl9KSksZS5wYWludGVyLnRvRGF0YVVSTCgpfX0saWUuZ2V0RGF0YVVSTD1mdW5jdGlvbihlKXtpZighdGhpcy5fZGlzcG9zZWQpe2U9ZXx8e307dmFyIHQ9ZS5leGNsdWRlQ29tcG9uZW50cyxuPXRoaXMuX21vZGVsLGk9W10scj10aGlzO08odCwoZnVuY3Rpb24oZSl7bi5lYWNoQ29tcG9uZW50KHttYWluVHlwZTplfSwoZnVuY3Rpb24oZSl7dmFyIHQ9ci5fY29tcG9uZW50c01hcFtlLl9fdmlld0lkXTt0Lmdyb3VwLmlnbm9yZXx8KGkucHVzaCh0KSx0Lmdyb3VwLmlnbm9yZT0hMCl9KSl9KSk7dmFyIG89InN2ZyI9PT10aGlzLl96ci5wYWludGVyLmdldFR5cGUoKT90aGlzLmdldFN2Z0RhdGFVUkwoKTp0aGlzLmdldFJlbmRlcmVkQ2FudmFzKGUpLnRvRGF0YVVSTCgiaW1hZ2UvIisoZSYmZS50eXBlfHwicG5nIikpO3JldHVybiBPKGksKGZ1bmN0aW9uKGUpe2UuZ3JvdXAuaWdub3JlPSExfSkpLG99eGUodGhpcy5pZCl9LGllLmdldENvbm5lY3RlZERhdGFVUkw9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGlzcG9zZWQpeGUodGhpcy5pZCk7ZWxzZSBpZihzLmNhbnZhc1N1cHBvcnRlZCl7dmFyIHQ9InN2ZyI9PT1lLnR5cGUsbj10aGlzLmdyb3VwLGk9TWF0aC5taW4sYT1NYXRoLm1heCxsPTEvMDtpZihOZVtuXSl7dmFyIGM9bCx1PWwsaD0tbCxkPS1sLGY9W10scD1lJiZlLnBpeGVsUmF0aW98fDE7by5lYWNoKExlLChmdW5jdGlvbihyLHMpe2lmKHIuZ3JvdXA9PT1uKXt2YXIgbD10P3IuZ2V0WnIoKS5wYWludGVyLmdldFN2Z0RvbSgpLmlubmVySFRNTDpyLmdldFJlbmRlcmVkQ2FudmFzKG8uY2xvbmUoZSkpLHA9ci5nZXREb20oKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjPWkocC5sZWZ0LGMpLHU9aShwLnRvcCx1KSxoPWEocC5yaWdodCxoKSxkPWEocC5ib3R0b20sZCksZi5wdXNoKHtkb206bCxsZWZ0OnAubGVmdCx0b3A6cC50b3B9KX19KSksYyo9cCx1Kj1wLGgqPXAsZCo9cDt2YXIgbT1oLWMsZz1kLXUsdj1vLmNyZWF0ZUNhbnZhcygpLHk9ci5pbml0KHYse3JlbmRlcmVyOnQ/InN2ZyI6ImNhbnZhcyJ9KTtpZih5LnJlc2l6ZSh7d2lkdGg6bSxoZWlnaHQ6Z30pLHQpe3ZhciBiPSIiO3JldHVybiBPKGYsKGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVmdC1jLG49ZS50b3AtdTtiKz0nPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoJyt0KyIsIituKycpIj4nK2UuZG9tKyI8L2c+In0pKSx5LnBhaW50ZXIuZ2V0U3ZnUm9vdCgpLmlubmVySFRNTD1iLGUuY29ubmVjdGVkQmFja2dyb3VuZENvbG9yJiZ5LnBhaW50ZXIuc2V0QmFja2dyb3VuZENvbG9yKGUuY29ubmVjdGVkQmFja2dyb3VuZENvbG9yKSx5LnJlZnJlc2hJbW1lZGlhdGVseSgpLHkucGFpbnRlci50b0RhdGFVUkwoKX1yZXR1cm4gZS5jb25uZWN0ZWRCYWNrZ3JvdW5kQ29sb3ImJnkuYWRkKG5ldyB4LlJlY3Qoe3NoYXBlOnt4OjAseTowLHdpZHRoOm0saGVpZ2h0Omd9LHN0eWxlOntmaWxsOmUuY29ubmVjdGVkQmFja2dyb3VuZENvbG9yfX0pKSxPKGYsKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB4LkltYWdlKHtzdHlsZTp7eDplLmxlZnQqcC1jLHk6ZS50b3AqcC11LGltYWdlOmUuZG9tfX0pO3kuYWRkKHQpfSkpLHkucmVmcmVzaEltbWVkaWF0ZWx5KCksdi50b0RhdGFVUkwoImltYWdlLyIrKGUmJmUudHlwZXx8InBuZyIpKX1yZXR1cm4gdGhpcy5nZXREYXRhVVJMKGUpfX0saWUuY29udmVydFRvUGl4ZWw9by5jdXJyeShyZSwiY29udmVydFRvUGl4ZWwiKSxpZS5jb252ZXJ0RnJvbVBpeGVsPW8uY3VycnkocmUsImNvbnZlcnRGcm9tUGl4ZWwiKSxpZS5jb250YWluUGl4ZWw9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fZGlzcG9zZWQpe3ZhciBuLGk9dGhpcy5fbW9kZWw7cmV0dXJuIGU9Xy5wYXJzZUZpbmRlcihpLGUpLG8uZWFjaChlLChmdW5jdGlvbihlLGkpe2kuaW5kZXhPZigiTW9kZWxzIik+PTAmJm8uZWFjaChlLChmdW5jdGlvbihlKXt2YXIgcj1lLmNvb3JkaW5hdGVTeXN0ZW07aWYociYmci5jb250YWluUG9pbnQpbnw9ISFyLmNvbnRhaW5Qb2ludCh0KTtlbHNlIGlmKCJzZXJpZXNNb2RlbHMiPT09aSl7dmFyIG89dGhpcy5fY2hhcnRzTWFwW2UuX192aWV3SWRdO28mJm8uY29udGFpblBvaW50JiYobnw9by5jb250YWluUG9pbnQodCxlKSl9fSksdGhpcyl9KSx0aGlzKSwhIW59eGUodGhpcy5pZCl9LGllLmdldFZpc3VhbD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX21vZGVsO2U9Xy5wYXJzZUZpbmRlcihuLGUse2RlZmF1bHRNYWluVHlwZToic2VyaWVzIn0pO3ZhciBpPWUuc2VyaWVzTW9kZWwscj1pLmdldERhdGEoKSxvPWUuaGFzT3duUHJvcGVydHkoImRhdGFJbmRleEluc2lkZSIpP2UuZGF0YUluZGV4SW5zaWRlOmUuaGFzT3duUHJvcGVydHkoImRhdGFJbmRleCIpP3IuaW5kZXhPZlJhd0luZGV4KGUuZGF0YUluZGV4KTpudWxsO3JldHVybiBudWxsIT1vP3IuZ2V0SXRlbVZpc3VhbChvLHQpOnIuZ2V0VmlzdWFsKHQpfSxpZS5nZXRWaWV3T2ZDb21wb25lbnRNb2RlbD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50c01hcFtlLl9fdmlld0lkXX0saWUuZ2V0Vmlld09mU2VyaWVzTW9kZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NoYXJ0c01hcFtlLl9fdmlld0lkXX07dmFyIG9lPXtwcmVwYXJlQW5kVXBkYXRlOmZ1bmN0aW9uKGUpe2FlKHRoaXMpLG9lLnVwZGF0ZS5jYWxsKHRoaXMsZSl9LHVwZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9tb2RlbCxuPXRoaXMuX2FwaSxpPXRoaXMuX3pyLHI9dGhpcy5fY29vcmRTeXNNZ3Isbz10aGlzLl9zY2hlZHVsZXI7aWYodCl7by5yZXN0b3JlRGF0YSh0LGUpLG8ucGVyZm9ybVNlcmllc1Rhc2tzKHQpLHIuY3JlYXRlKHQsbiksby5wZXJmb3JtRGF0YVByb2Nlc3NvclRhc2tzKHQsZSksbGUodGhpcyx0KSxyLnVwZGF0ZSh0LG4pLHBlKHQpLG8ucGVyZm9ybVZpc3VhbFRhc2tzKHQsZSksbWUodGhpcyx0LG4sZSk7dmFyIGw9dC5nZXQoImJhY2tncm91bmRDb2xvciIpfHwidHJhbnNwYXJlbnQiO2lmKHMuY2FudmFzU3VwcG9ydGVkKWkuc2V0QmFja2dyb3VuZENvbG9yKGwpO2Vsc2V7dmFyIGM9YS5wYXJzZShsKTtsPWEuc3RyaW5naWZ5KGMsInJnYiIpLDA9PT1jWzNdJiYobD0idHJhbnNwYXJlbnQiKX15ZSh0LG4pfX0sdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21vZGVsLG49dGhpcyxpPXRoaXMuX2FwaTtpZih0KXt2YXIgcj1bXTt0LmVhY2hDb21wb25lbnQoKGZ1bmN0aW9uKG8sYSl7dmFyIHM9bi5nZXRWaWV3T2ZDb21wb25lbnRNb2RlbChhKTtpZihzJiZzLl9fYWxpdmUpaWYocy51cGRhdGVUcmFuc2Zvcm0pe3ZhciBsPXMudXBkYXRlVHJhbnNmb3JtKGEsdCxpLGUpO2wmJmwudXBkYXRlJiZyLnB1c2gocyl9ZWxzZSByLnB1c2gocyl9KSk7dmFyIGE9by5jcmVhdGVIYXNoTWFwKCk7dC5lYWNoU2VyaWVzKChmdW5jdGlvbihyKXt2YXIgbz1uLl9jaGFydHNNYXBbci5fX3ZpZXdJZF07aWYoby51cGRhdGVUcmFuc2Zvcm0pe3ZhciBzPW8udXBkYXRlVHJhbnNmb3JtKHIsdCxpLGUpO3MmJnMudXBkYXRlJiZhLnNldChyLnVpZCwxKX1lbHNlIGEuc2V0KHIudWlkLDEpfSkpLHBlKHQpLHRoaXMuX3NjaGVkdWxlci5wZXJmb3JtVmlzdWFsVGFza3ModCxlLHtzZXREaXJ0eTohMCxkaXJ0eU1hcDphfSksdmUobix0LGksZSxhKSx5ZSh0LHRoaXMuX2FwaSl9fSx1cGRhdGVWaWV3OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21vZGVsO3QmJihiLm1hcmtVcGRhdGVNZXRob2QoZSwidXBkYXRlVmlldyIpLHBlKHQpLHRoaXMuX3NjaGVkdWxlci5wZXJmb3JtVmlzdWFsVGFza3ModCxlLHtzZXREaXJ0eTohMH0pLG1lKHRoaXMsdGhpcy5fbW9kZWwsdGhpcy5fYXBpLGUpLHllKHQsdGhpcy5fYXBpKSl9LHVwZGF0ZVZpc3VhbDpmdW5jdGlvbihlKXtvZS51cGRhdGUuY2FsbCh0aGlzLGUpfSx1cGRhdGVMYXlvdXQ6ZnVuY3Rpb24oZSl7b2UudXBkYXRlLmNhbGwodGhpcyxlKX19O2Z1bmN0aW9uIGFlKGUpe3ZhciB0PWUuX21vZGVsLG49ZS5fc2NoZWR1bGVyO24ucmVzdG9yZVBpcGVsaW5lcyh0KSxuLnByZXBhcmVTdGFnZVRhc2tzKCksZmUoZSwiY29tcG9uZW50Iix0LG4pLGZlKGUsImNoYXJ0Iix0LG4pLG4ucGxhbigpfWZ1bmN0aW9uIHNlKGUsdCxuLGkscil7dmFyIGE9ZS5fbW9kZWw7aWYoaSl7dmFyIHM9e307c1tpKyJJZCJdPW5baSsiSWQiXSxzW2krIkluZGV4Il09bltpKyJJbmRleCJdLHNbaSsiTmFtZSJdPW5baSsiTmFtZSJdO3ZhciBsPXttYWluVHlwZTppLHF1ZXJ5OnN9O3ImJihsLnN1YlR5cGU9cik7dmFyIGM9bi5leGNsdWRlU2VyaWVzSWQ7bnVsbCE9YyYmKGM9by5jcmVhdGVIYXNoTWFwKF8ubm9ybWFsaXplVG9BcnJheShjKSkpLGEmJmEuZWFjaENvbXBvbmVudChsLChmdW5jdGlvbih0KXtjJiZudWxsIT1jLmdldCh0LmlkKXx8dShlWyJzZXJpZXMiPT09aT8iX2NoYXJ0c01hcCI6Il9jb21wb25lbnRzTWFwIl1bdC5fX3ZpZXdJZF0pfSksZSl9ZWxzZSBPKGUuX2NvbXBvbmVudHNWaWV3cy5jb25jYXQoZS5fY2hhcnRzVmlld3MpLHUpO2Z1bmN0aW9uIHUoaSl7aSYmaS5fX2FsaXZlJiZpW3RdJiZpW3RdKGkuX19tb2RlbCxhLGUuX2FwaSxuKX19ZnVuY3Rpb24gbGUoZSx0KXt2YXIgbj1lLl9jaGFydHNNYXAsaT1lLl9zY2hlZHVsZXI7dC5lYWNoU2VyaWVzKChmdW5jdGlvbihlKXtpLnVwZGF0ZVN0cmVhbU1vZGVzKGUsbltlLl9fdmlld0lkXSl9KSl9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbj1lLnR5cGUsaT1lLmVzY2FwZUNvbm5lY3Qscj1UZVtuXSxhPXIuYWN0aW9uSW5mbyxzPShhLnVwZGF0ZXx8InVwZGF0ZSIpLnNwbGl0KCI6IiksbD1zLnBvcCgpO3M9bnVsbCE9c1swXSYmTihzWzBdKSx0aGlzW1pdPSEwO3ZhciBjPVtlXSx1PSExO2UuYmF0Y2gmJih1PSEwLGM9by5tYXAoZS5iYXRjaCwoZnVuY3Rpb24odCl7cmV0dXJuIHQ9by5kZWZhdWx0cyhvLmV4dGVuZCh7fSx0KSxlKSx0LmJhdGNoPW51bGwsdH0pKSk7dmFyIGgsZD1bXSxmPSJoaWdobGlnaHQiPT09bnx8ImRvd25wbGF5Ij09PW47TyhjLChmdW5jdGlvbihlKXtoPXIuYWN0aW9uKGUsdGhpcy5fbW9kZWwsdGhpcy5fYXBpKSxoPWh8fG8uZXh0ZW5kKHt9LGUpLGgudHlwZT1hLmV2ZW50fHxoLnR5cGUsZC5wdXNoKGgpLGY/c2UodGhpcyxsLGUsInNlcmllcyIpOnMmJnNlKHRoaXMsbCxlLHMubWFpbixzLnN1Yil9KSx0aGlzKSwibm9uZSI9PT1sfHxmfHxzfHwodGhpc1tKXT8oYWUodGhpcyksb2UudXBkYXRlLmNhbGwodGhpcyxlKSx0aGlzW0pdPSExKTpvZVtsXS5jYWxsKHRoaXMsZSkpLGg9dT97dHlwZTphLmV2ZW50fHxuLGVzY2FwZUNvbm5lY3Q6aSxiYXRjaDpkfTpkWzBdLHRoaXNbWl09ITEsIXQmJnRoaXMuX21lc3NhZ2VDZW50ZXIudHJpZ2dlcihoLnR5cGUsaCl9ZnVuY3Rpb24gdWUoZSl7dmFyIHQ9dGhpcy5fcGVuZGluZ0FjdGlvbnM7d2hpbGUodC5sZW5ndGgpe3ZhciBuPXQuc2hpZnQoKTtjZS5jYWxsKHRoaXMsbixlKX19ZnVuY3Rpb24gaGUoZSl7IWUmJnRoaXMudHJpZ2dlcigidXBkYXRlZCIpfWZ1bmN0aW9uIGRlKGUsdCl7ZS5vbigicmVuZGVyZWQiLChmdW5jdGlvbigpe3QudHJpZ2dlcigicmVuZGVyZWQiKSwhZS5hbmltYXRpb24uaXNGaW5pc2hlZCgpfHx0W0pdfHx0Ll9zY2hlZHVsZXIudW5maW5pc2hlZHx8dC5fcGVuZGluZ0FjdGlvbnMubGVuZ3RofHx0LnRyaWdnZXIoImZpbmlzaGVkIil9KSl9ZnVuY3Rpb24gZmUoZSx0LG4saSl7Zm9yKHZhciByPSJjb21wb25lbnQiPT09dCxvPXI/ZS5fY29tcG9uZW50c1ZpZXdzOmUuX2NoYXJ0c1ZpZXdzLGE9cj9lLl9jb21wb25lbnRzTWFwOmUuX2NoYXJ0c01hcCxzPWUuX3pyLGw9ZS5fYXBpLGM9MDtjPG8ubGVuZ3RoO2MrKylvW2NdLl9fYWxpdmU9ITE7ZnVuY3Rpb24gdShlKXt2YXIgdD0iX2VjXyIrZS5pZCsiXyIrZS50eXBlLGM9YVt0XTtpZighYyl7dmFyIHU9TihlLnR5cGUpLGg9cj95LmdldENsYXNzKHUubWFpbix1LnN1Yik6Yi5nZXRDbGFzcyh1LnN1Yik7Yz1uZXcgaCxjLmluaXQobixsKSxhW3RdPWMsby5wdXNoKGMpLHMuYWRkKGMuZ3JvdXApfWUuX192aWV3SWQ9Yy5fX2lkPXQsYy5fX2FsaXZlPSEwLGMuX19tb2RlbD1lLGMuZ3JvdXAuX19lY0NvbXBvbmVudEluZm89e21haW5UeXBlOmUubWFpblR5cGUsaW5kZXg6ZS5jb21wb25lbnRJbmRleH0sIXImJmkucHJlcGFyZVZpZXcoYyxlLG4sbCl9cj9uLmVhY2hDb21wb25lbnQoKGZ1bmN0aW9uKGUsdCl7InNlcmllcyIhPT1lJiZ1KHQpfSkpOm4uZWFjaFNlcmllcyh1KTtmb3IoYz0wO2M8by5sZW5ndGg7KXt2YXIgaD1vW2NdO2guX19hbGl2ZT9jKys6KCFyJiZoLnJlbmRlclRhc2suZGlzcG9zZSgpLHMucmVtb3ZlKGguZ3JvdXApLGguZGlzcG9zZShuLGwpLG8uc3BsaWNlKGMsMSksZGVsZXRlIGFbaC5fX2lkXSxoLl9faWQ9aC5ncm91cC5fX2VjQ29tcG9uZW50SW5mbz1udWxsKX19ZnVuY3Rpb24gcGUoZSl7ZS5jbGVhckNvbG9yUGFsZXR0ZSgpLGUuZWFjaFNlcmllcygoZnVuY3Rpb24oZSl7ZS5jbGVhckNvbG9yUGFsZXR0ZSgpfSkpfWZ1bmN0aW9uIG1lKGUsdCxuLGkpe2dlKGUsdCxuLGkpLE8oZS5fY2hhcnRzVmlld3MsKGZ1bmN0aW9uKGUpe2UuX19hbGl2ZT0hMX0pKSx2ZShlLHQsbixpKSxPKGUuX2NoYXJ0c1ZpZXdzLChmdW5jdGlvbihlKXtlLl9fYWxpdmV8fGUucmVtb3ZlKHQsbil9KSl9ZnVuY3Rpb24gZ2UoZSx0LG4saSxyKXtPKHJ8fGUuX2NvbXBvbmVudHNWaWV3cywoZnVuY3Rpb24oZSl7dmFyIHI9ZS5fX21vZGVsO2UucmVuZGVyKHIsdCxuLGkpLFNlKHIsZSl9KSl9ZnVuY3Rpb24gdmUoZSx0LG4saSxyKXt2YXIgbyxhPWUuX3NjaGVkdWxlcjt0LmVhY2hTZXJpZXMoKGZ1bmN0aW9uKHQpe3ZhciBuPWUuX2NoYXJ0c01hcFt0Ll9fdmlld0lkXTtuLl9fYWxpdmU9ITA7dmFyIHM9bi5yZW5kZXJUYXNrO2EudXBkYXRlUGF5bG9hZChzLGkpLHImJnIuZ2V0KHQudWlkKSYmcy5kaXJ0eSgpLG98PXMucGVyZm9ybShhLmdldFBlcmZvcm1BcmdzKHMpKSxuLmdyb3VwLnNpbGVudD0hIXQuZ2V0KCJzaWxlbnQiKSxTZSh0LG4pLHdlKHQsbil9KSksYS51bmZpbmlzaGVkfD1vLF9lKGUsdCksayhlLl96ci5kb20sdCl9ZnVuY3Rpb24geWUoZSx0KXtPKERlLChmdW5jdGlvbihuKXtuKGUsdCl9KSl9aWUucmVzaXplPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2Rpc3Bvc2VkKXhlKHRoaXMuaWQpO2Vsc2V7dGhpcy5fenIucmVzaXplKGUpO3ZhciB0PXRoaXMuX21vZGVsO2lmKHRoaXMuX2xvYWRpbmdGWCYmdGhpcy5fbG9hZGluZ0ZYLnJlc2l6ZSgpLHQpe3ZhciBuPXQucmVzZXRPcHRpb24oIm1lZGlhIiksaT1lJiZlLnNpbGVudDt0aGlzW1pdPSEwLG4mJmFlKHRoaXMpLG9lLnVwZGF0ZS5jYWxsKHRoaXMpLHRoaXNbWl09ITEsdWUuY2FsbCh0aGlzLGkpLGhlLmNhbGwodGhpcyxpKX19fSxpZS5zaG93TG9hZGluZz1mdW5jdGlvbihlLHQpe2lmKHRoaXMuX2Rpc3Bvc2VkKXhlKHRoaXMuaWQpO2Vsc2UgaWYoTChlKSYmKHQ9ZSxlPSIiKSxlPWV8fCJkZWZhdWx0Iix0aGlzLmhpZGVMb2FkaW5nKCksUGVbZV0pe3ZhciBuPVBlW2VdKHRoaXMuX2FwaSx0KSxpPXRoaXMuX3pyO3RoaXMuX2xvYWRpbmdGWD1uLGkuYWRkKG4pfX0saWUuaGlkZUxvYWRpbmc9ZnVuY3Rpb24oKXt0aGlzLl9kaXNwb3NlZD94ZSh0aGlzLmlkKToodGhpcy5fbG9hZGluZ0ZYJiZ0aGlzLl96ci5yZW1vdmUodGhpcy5fbG9hZGluZ0ZYKSx0aGlzLl9sb2FkaW5nRlg9bnVsbCl9LGllLm1ha2VBY3Rpb25Gcm9tRXZlbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9by5leHRlbmQoe30sZSk7cmV0dXJuIHQudHlwZT1NZVtlLnR5cGVdLHR9LGllLmRpc3BhdGNoQWN0aW9uPWZ1bmN0aW9uKGUsdCl7dGhpcy5fZGlzcG9zZWQ/eGUodGhpcy5pZCk6KEwodCl8fCh0PXtzaWxlbnQ6ISF0fSksVGVbZS50eXBlXSYmdGhpcy5fbW9kZWwmJih0aGlzW1pdP3RoaXMuX3BlbmRpbmdBY3Rpb25zLnB1c2goZSk6KGNlLmNhbGwodGhpcyxlLHQuc2lsZW50KSx0LmZsdXNoP3RoaXMuX3pyLmZsdXNoKCEwKTohMSE9PXQuZmx1c2gmJnMuYnJvd3Nlci53ZUNoYXQmJnRoaXMuX3Rocm90dGxlZFpyRmx1c2goKSx1ZS5jYWxsKHRoaXMsdC5zaWxlbnQpLGhlLmNhbGwodGhpcyx0LnNpbGVudCkpKSl9LGllLmFwcGVuZERhdGE9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGlzcG9zZWQpeGUodGhpcy5pZCk7ZWxzZXt2YXIgdD1lLnNlcmllc0luZGV4LG49dGhpcy5nZXRNb2RlbCgpLGk9bi5nZXRTZXJpZXNCeUluZGV4KHQpO2kuYXBwZW5kRGF0YShlKSx0aGlzLl9zY2hlZHVsZXIudW5maW5pc2hlZD0hMH19LGllLm9uPWVlKCJvbiIsITEpLGllLm9mZj1lZSgib2ZmIiwhMSksaWUub25lPWVlKCJvbmUiLCExKTt2YXIgYmU9WyJjbGljayIsImRibGNsaWNrIiwibW91c2VvdmVyIiwibW91c2VvdXQiLCJtb3VzZW1vdmUiLCJtb3VzZWRvd24iLCJtb3VzZXVwIiwiZ2xvYmFsb3V0IiwiY29udGV4dG1lbnUiXTtmdW5jdGlvbiB4ZShlKXt9ZnVuY3Rpb24gX2UoZSx0KXt2YXIgbj1lLl96cixpPW4uc3RvcmFnZSxyPTA7aS50cmF2ZXJzZSgoZnVuY3Rpb24oZSl7cisrfSkpLHI+dC5nZXQoImhvdmVyTGF5ZXJUaHJlc2hvbGQiKSYmIXMubm9kZSYmdC5lYWNoU2VyaWVzKChmdW5jdGlvbih0KXtpZighdC5wcmV2ZW50VXNpbmdIb3ZlckxheWVyKXt2YXIgbj1lLl9jaGFydHNNYXBbdC5fX3ZpZXdJZF07bi5fX2FsaXZlJiZuLmdyb3VwLnRyYXZlcnNlKChmdW5jdGlvbihlKXtlLnVzZUhvdmVyTGF5ZXI9ITB9KSl9fSkpfWZ1bmN0aW9uIHdlKGUsdCl7dmFyIG49ZS5nZXQoImJsZW5kTW9kZSIpfHxudWxsO3QuZ3JvdXAudHJhdmVyc2UoKGZ1bmN0aW9uKGUpe2UuaXNHcm91cHx8ZS5zdHlsZS5ibGVuZCE9PW4mJmUuc2V0U3R5bGUoImJsZW5kIixuKSxlLmVhY2hQZW5kaW5nRGlzcGxheWFibGUmJmUuZWFjaFBlbmRpbmdEaXNwbGF5YWJsZSgoZnVuY3Rpb24oZSl7ZS5zZXRTdHlsZSgiYmxlbmQiLG4pfSkpfSkpfWZ1bmN0aW9uIFNlKGUsdCl7dmFyIG49ZS5nZXQoInoiKSxpPWUuZ2V0KCJ6bGV2ZWwiKTt0Lmdyb3VwLnRyYXZlcnNlKChmdW5jdGlvbihlKXsiZ3JvdXAiIT09ZS50eXBlJiYobnVsbCE9biYmKGUuej1uKSxudWxsIT1pJiYoZS56bGV2ZWw9aSkpfSkpfWZ1bmN0aW9uIENlKGUpe3ZhciB0PWUuX2Nvb3JkU3lzTWdyO3JldHVybiBvLmV4dGVuZChuZXcgaChlKSx7Z2V0Q29vcmRpbmF0ZVN5c3RlbXM6by5iaW5kKHQuZ2V0Q29vcmRpbmF0ZVN5c3RlbXMsdCksZ2V0Q29tcG9uZW50QnlFbGVtZW50OmZ1bmN0aW9uKHQpe3doaWxlKHQpe3ZhciBuPXQuX19lY0NvbXBvbmVudEluZm87aWYobnVsbCE9bilyZXR1cm4gZS5fbW9kZWwuZ2V0Q29tcG9uZW50KG4ubWFpblR5cGUsbi5pbmRleCk7dD10LnBhcmVudH19fSl9ZnVuY3Rpb24ga2UoKXt0aGlzLmV2ZW50SW5mb31pZS5faW5pdEV2ZW50cz1mdW5jdGlvbigpe08oYmUsKGZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKHQpe3ZhciBuLGk9dGhpcy5nZXRNb2RlbCgpLHI9dC50YXJnZXQsYT0iZ2xvYmFsb3V0Ij09PWU7aWYoYSluPXt9O2Vsc2UgaWYociYmbnVsbCE9ci5kYXRhSW5kZXgpe3ZhciBzPXIuZGF0YU1vZGVsfHxpLmdldFNlcmllc0J5SW5kZXgoci5zZXJpZXNJbmRleCk7bj1zJiZzLmdldERhdGFQYXJhbXMoci5kYXRhSW5kZXgsci5kYXRhVHlwZSxyKXx8e319ZWxzZSByJiZyLmV2ZW50RGF0YSYmKG49by5leHRlbmQoe30sci5ldmVudERhdGEpKTtpZihuKXt2YXIgbD1uLmNvbXBvbmVudFR5cGUsYz1uLmNvbXBvbmVudEluZGV4OyJtYXJrTGluZSIhPT1sJiYibWFya1BvaW50IiE9PWwmJiJtYXJrQXJlYSIhPT1sfHwobD0ic2VyaWVzIixjPW4uc2VyaWVzSW5kZXgpO3ZhciB1PWwmJm51bGwhPWMmJmkuZ2V0Q29tcG9uZW50KGwsYyksaD11JiZ0aGlzWyJzZXJpZXMiPT09dS5tYWluVHlwZT8iX2NoYXJ0c01hcCI6Il9jb21wb25lbnRzTWFwIl1bdS5fX3ZpZXdJZF07bi5ldmVudD10LG4udHlwZT1lLHRoaXMuX2VjRXZlbnRQcm9jZXNzb3IuZXZlbnRJbmZvPXt0YXJnZXRFbDpyLHBhY2tlZEV2ZW50Om4sbW9kZWw6dSx2aWV3Omh9LHRoaXMudHJpZ2dlcihlLG4pfX07dC56ckV2ZW50ZnVsQ2FsbEF0TGFzdD0hMCx0aGlzLl96ci5vbihlLHQsdGhpcyl9KSx0aGlzKSxPKE1lLChmdW5jdGlvbihlLHQpe3RoaXMuX21lc3NhZ2VDZW50ZXIub24odCwoZnVuY3Rpb24oZSl7dGhpcy50cmlnZ2VyKHQsZSl9KSx0aGlzKX0pLHRoaXMpfSxpZS5pc0Rpc3Bvc2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc3Bvc2VkfSxpZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuX2Rpc3Bvc2VkP3hlKHRoaXMuaWQpOnRoaXMuc2V0T3B0aW9uKHtzZXJpZXM6W119LCEwKX0saWUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKHRoaXMuX2Rpc3Bvc2VkKXhlKHRoaXMuaWQpO2Vsc2V7dGhpcy5fZGlzcG9zZWQ9ITAsXy5zZXRBdHRyaWJ1dGUodGhpcy5nZXREb20oKSx6ZSwiIik7dmFyIGU9dGhpcy5fYXBpLHQ9dGhpcy5fbW9kZWw7Tyh0aGlzLl9jb21wb25lbnRzVmlld3MsKGZ1bmN0aW9uKG4pe24uZGlzcG9zZSh0LGUpfSkpLE8odGhpcy5fY2hhcnRzVmlld3MsKGZ1bmN0aW9uKG4pe24uZGlzcG9zZSh0LGUpfSkpLHRoaXMuX3pyLmRpc3Bvc2UoKSxkZWxldGUgTGVbdGhpcy5pZF19fSxvLm1peGluKG5lLGMpLGtlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6a2Usbm9ybWFsaXplUXVlcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9e30sbj17fSxpPXt9O2lmKG8uaXNTdHJpbmcoZSkpe3ZhciByPU4oZSk7dC5tYWluVHlwZT1yLm1haW58fG51bGwsdC5zdWJUeXBlPXIuc3VifHxudWxsfWVsc2V7dmFyIGE9WyJJbmRleCIsIk5hbWUiLCJJZCJdLHM9e25hbWU6MSxkYXRhSW5kZXg6MSxkYXRhVHlwZToxfTtvLmVhY2goZSwoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG89ITEsbD0wO2w8YS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdLHU9ci5sYXN0SW5kZXhPZihjKTtpZih1PjAmJnU9PT1yLmxlbmd0aC1jLmxlbmd0aCl7dmFyIGg9ci5zbGljZSgwLHUpOyJkYXRhIiE9PWgmJih0Lm1haW5UeXBlPWgsdFtjLnRvTG93ZXJDYXNlKCldPWUsbz0hMCl9fXMuaGFzT3duUHJvcGVydHkocikmJihuW3JdPWUsbz0hMCksb3x8KGlbcl09ZSl9KSl9cmV0dXJue2NwdFF1ZXJ5OnQsZGF0YVF1ZXJ5Om4sb3RoZXJRdWVyeTppfX0sZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLmV2ZW50SW5mbztpZighaSlyZXR1cm4hMDt2YXIgcj1pLnRhcmdldEVsLG89aS5wYWNrZWRFdmVudCxhPWkubW9kZWwscz1pLnZpZXc7aWYoIWF8fCFzKXJldHVybiEwO3ZhciBsPXQuY3B0UXVlcnksYz10LmRhdGFRdWVyeTtyZXR1cm4gdShsLGEsIm1haW5UeXBlIikmJnUobCxhLCJzdWJUeXBlIikmJnUobCxhLCJpbmRleCIsImNvbXBvbmVudEluZGV4IikmJnUobCxhLCJuYW1lIikmJnUobCxhLCJpZCIpJiZ1KGMsbywibmFtZSIpJiZ1KGMsbywiZGF0YUluZGV4IikmJnUoYyxvLCJkYXRhVHlwZSIpJiYoIXMuZmlsdGVyRm9yRXhwb3NlZEV2ZW50fHxzLmZpbHRlckZvckV4cG9zZWRFdmVudChlLHQub3RoZXJRdWVyeSxyLG8pKTtmdW5jdGlvbiB1KGUsdCxuLGkpe3JldHVybiBudWxsPT1lW25dfHx0W2l8fG5dPT09ZVtuXX19LGFmdGVyVHJpZ2dlcjpmdW5jdGlvbigpe3RoaXMuZXZlbnRJbmZvPW51bGx9fTt2YXIgVGU9e30sTWU9e30sRWU9W10sSWU9W10sRGU9W10sQWU9W10sT2U9e30sUGU9e30sTGU9e30sTmU9e30sUmU9bmV3IERhdGUtMCwkZT1uZXcgRGF0ZS0wLHplPSJfZWNoYXJ0c19pbnN0YW5jZV8iO2Z1bmN0aW9uIEJlKGUpe3ZhciB0PTAsbj0xLGk9MixyPSJfX2Nvbm5lY3RVcGRhdGVTdGF0dXMiO2Z1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZVtuXTtpW3JdPXR9fU8oTWUsKGZ1bmN0aW9uKGEscyl7ZS5fbWVzc2FnZUNlbnRlci5vbihzLChmdW5jdGlvbihhKXtpZihOZVtlLmdyb3VwXSYmZVtyXSE9PXQpe2lmKGEmJmEuZXNjYXBlQ29ubmVjdClyZXR1cm47dmFyIHM9ZS5tYWtlQWN0aW9uRnJvbUV2ZW50KGEpLGw9W107TyhMZSwoZnVuY3Rpb24odCl7dCE9PWUmJnQuZ3JvdXA9PT1lLmdyb3VwJiZsLnB1c2godCl9KSksbyhsLHQpLE8obCwoZnVuY3Rpb24oZSl7ZVtyXSE9PW4mJmUuZGlzcGF0Y2hBY3Rpb24ocyl9KSksbyhsLGkpfX0pKX0pKX1mdW5jdGlvbiBGZShlLHQsbil7dmFyIGk9R2UoZSk7aWYoaSlyZXR1cm4gaTt2YXIgcj1uZXcgbmUoZSx0LG4pO3JldHVybiByLmlkPSJlY18iK1JlKyssTGVbci5pZF09cixfLnNldEF0dHJpYnV0ZShlLHplLHIuaWQpLEJlKHIpLHJ9ZnVuY3Rpb24gVmUoZSl7aWYoby5pc0FycmF5KGUpKXt2YXIgdD1lO2U9bnVsbCxPKHQsKGZ1bmN0aW9uKHQpe251bGwhPXQuZ3JvdXAmJihlPXQuZ3JvdXApfSkpLGU9ZXx8ImdfIiskZSsrLE8odCwoZnVuY3Rpb24odCl7dC5ncm91cD1lfSkpfXJldHVybiBOZVtlXT0hMCxlfWZ1bmN0aW9uIGplKGUpe05lW2VdPSExfXZhciBIZT1qZTtmdW5jdGlvbiBXZShlKXsic3RyaW5nIj09PXR5cGVvZiBlP2U9TGVbZV06ZSBpbnN0YW5jZW9mIG5lfHwoZT1HZShlKSksZSBpbnN0YW5jZW9mIG5lJiYhZS5pc0Rpc3Bvc2VkKCkmJmUuZGlzcG9zZSgpfWZ1bmN0aW9uIEdlKGUpe3JldHVybiBMZVtfLmdldEF0dHJpYnV0ZShlLHplKV19ZnVuY3Rpb24gVWUoZSl7cmV0dXJuIExlW2VdfWZ1bmN0aW9uIHFlKGUsdCl7T2VbZV09dH1mdW5jdGlvbiBZZShlKXtJZS5wdXNoKGUpfWZ1bmN0aW9uIFhlKGUsdCl7bnQoRWUsZSx0LEIpfWZ1bmN0aW9uIEtlKGUpe0RlLnB1c2goZSl9ZnVuY3Rpb24gWmUoZSx0LG4peyJmdW5jdGlvbiI9PT10eXBlb2YgdCYmKG49dCx0PSIiKTt2YXIgaT1MKGUpP2UudHlwZTpbZSxlPXtldmVudDp0fV1bMF07ZS5ldmVudD0oZS5ldmVudHx8aSkudG9Mb3dlckNhc2UoKSx0PWUuZXZlbnQsQShRLnRlc3QoaSkmJlEudGVzdCh0KSksVGVbaV18fChUZVtpXT17YWN0aW9uOm4sYWN0aW9uSW5mbzplfSksTWVbdF09aX1mdW5jdGlvbiBKZShlLHQpe2QucmVnaXN0ZXIoZSx0KX1mdW5jdGlvbiBRZShlKXt2YXIgdD1kLmdldChlKTtpZih0KXJldHVybiB0LmdldERpbWVuc2lvbnNJbmZvP3QuZ2V0RGltZW5zaW9uc0luZm8oKTp0LmRpbWVuc2lvbnMuc2xpY2UoKX1mdW5jdGlvbiBldChlLHQpe250KEFlLGUsdCxILCJsYXlvdXQiKX1mdW5jdGlvbiB0dChlLHQpe250KEFlLGUsdCxVLCJ2aXN1YWwiKX1mdW5jdGlvbiBudChlLHQsbixpLHIpeyhQKHQpfHxMKHQpKSYmKG49dCx0PWkpO3ZhciBvPU0ud3JhcFN0YWdlSGFuZGxlcihuLHIpO3JldHVybiBvLl9fcHJpbz10LG8uX19yYXc9bixlLnB1c2gobyksb31mdW5jdGlvbiBpdChlLHQpe1BlW2VdPXR9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGcuZXh0ZW5kKGUpfWZ1bmN0aW9uIG90KGUpe3JldHVybiB5LmV4dGVuZChlKX1mdW5jdGlvbiBhdChlKXtyZXR1cm4gdi5leHRlbmQoZSl9ZnVuY3Rpb24gc3QoZSl7cmV0dXJuIGIuZXh0ZW5kKGUpfWZ1bmN0aW9uIGx0KGUpe28uJG92ZXJyaWRlKCJjcmVhdGVDYW52YXMiLGUpfWZ1bmN0aW9uIGN0KGUsdCxuKXtELnJlZ2lzdGVyTWFwKGUsdCxuKX1mdW5jdGlvbiB1dChlKXt2YXIgdD1ELnJldHJpZXZlTWFwKGUpO3JldHVybiB0JiZ0WzBdJiZ7Z2VvSnNvbjp0WzBdLmdlb0pTT04sc3BlY2lhbEFyZWFzOnRbMF0uc3BlY2lhbEFyZWFzfX10dChHLEMpLFllKHApLFhlKFYsbSksaXQoImRlZmF1bHQiLFQpLFplKHt0eXBlOiJoaWdobGlnaHQiLGV2ZW50OiJoaWdobGlnaHQiLHVwZGF0ZToiaGlnaGxpZ2h0In0sby5ub29wKSxaZSh7dHlwZToiZG93bnBsYXkiLGV2ZW50OiJkb3ducGxheSIsdXBkYXRlOiJkb3ducGxheSJ9LG8ubm9vcCkscWUoImxpZ2h0IixFKSxxZSgiZGFyayIsSSk7dmFyIGh0PXt9O3QudmVyc2lvbj1SLHQuZGVwZW5kZW5jaWVzPSQsdC5QUklPUklUWT1LLHQuaW5pdD1GZSx0LmNvbm5lY3Q9VmUsdC5kaXNDb25uZWN0PWplLHQuZGlzY29ubmVjdD1IZSx0LmRpc3Bvc2U9V2UsdC5nZXRJbnN0YW5jZUJ5RG9tPUdlLHQuZ2V0SW5zdGFuY2VCeUlkPVVlLHQucmVnaXN0ZXJUaGVtZT1xZSx0LnJlZ2lzdGVyUHJlcHJvY2Vzc29yPVllLHQucmVnaXN0ZXJQcm9jZXNzb3I9WGUsdC5yZWdpc3RlclBvc3RVcGRhdGU9S2UsdC5yZWdpc3RlckFjdGlvbj1aZSx0LnJlZ2lzdGVyQ29vcmRpbmF0ZVN5c3RlbT1KZSx0LmdldENvb3JkaW5hdGVTeXN0ZW1EaW1lbnNpb25zPVFlLHQucmVnaXN0ZXJMYXlvdXQ9ZXQsdC5yZWdpc3RlclZpc3VhbD10dCx0LnJlZ2lzdGVyTG9hZGluZz1pdCx0LmV4dGVuZENvbXBvbmVudE1vZGVsPXJ0LHQuZXh0ZW5kQ29tcG9uZW50Vmlldz1vdCx0LmV4dGVuZFNlcmllc01vZGVsPWF0LHQuZXh0ZW5kQ2hhcnRWaWV3PXN0LHQuc2V0Q2FudmFzQ3JlYXRvcj1sdCx0LnJlZ2lzdGVyTWFwPWN0LHQuZ2V0TWFwPXV0LHQuZGF0YVRvb2w9aHQ7dmFyIGR0PW4oImI3MTkiKTsoZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gZHQpZHQuaGFzT3duUHJvcGVydHkoZSkmJih0W2VdPWR0W2VdKX0pKCl9LCIzZjZiIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oImI5YzciKSxfX2VzTW9kdWxlOiEwfX0sIjNmOGMiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPXt9fSwiM2Y4ZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjg3MjciKSxyPWkuY3JlYXRlRWxlbWVudCxvPW4oIjIwYzgiKSxhPW4oIjk4NTAiKSxzPW4oIjE2ODciKSxsPW4oImU4NmEiKSxjPW4oImE3M2MiKSx1PW4oIjc2YTUiKSxoPW8uQ01ELGQ9QXJyYXkucHJvdG90eXBlLmpvaW4sZj0ibm9uZSIscD1NYXRoLnJvdW5kLG09TWF0aC5zaW4sZz1NYXRoLmNvcyx2PU1hdGguUEkseT0yKk1hdGguUEksYj0xODAvdix4PTFlLTQ7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gcCgxZTQqZSkvMWU0fWZ1bmN0aW9uIHcoZSl7cmV0dXJuIGU8eCYmZT4teH1mdW5jdGlvbiBTKGUsdCl7dmFyIG49dD9lLnRleHRGaWxsOmUuZmlsbDtyZXR1cm4gbnVsbCE9biYmbiE9PWZ9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPXQ/ZS50ZXh0U3Ryb2tlOmUuc3Ryb2tlO3JldHVybiBudWxsIT1uJiZuIT09Zn1mdW5jdGlvbiBrKGUsdCl7dCYmVChlLCJ0cmFuc2Zvcm0iLCJtYXRyaXgoIitkLmNhbGwodCwiLCIpKyIpIil9ZnVuY3Rpb24gVChlLHQsbil7KCFufHwibGluZWFyIiE9PW4udHlwZSYmInJhZGlhbCIhPT1uLnR5cGUpJiZlLnNldEF0dHJpYnV0ZSh0LG4pfWZ1bmN0aW9uIE0oZSx0LG4pe2Uuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHQsbil9ZnVuY3Rpb24gRShlLHQsbixpKXtpZihTKHQsbikpe3ZhciByPW4/dC50ZXh0RmlsbDp0LmZpbGw7cj0idHJhbnNwYXJlbnQiPT09cj9mOnIsVChlLCJmaWxsIixyKSxUKGUsImZpbGwtb3BhY2l0eSIsbnVsbCE9dC5maWxsT3BhY2l0eT90LmZpbGxPcGFjaXR5KnQub3BhY2l0eTp0Lm9wYWNpdHkpfWVsc2UgVChlLCJmaWxsIixmKTtpZihDKHQsbikpe3ZhciBvPW4/dC50ZXh0U3Ryb2tlOnQuc3Ryb2tlO289InRyYW5zcGFyZW50Ij09PW8/ZjpvLFQoZSwic3Ryb2tlIixvKTt2YXIgYT1uP3QudGV4dFN0cm9rZVdpZHRoOnQubGluZVdpZHRoLHM9IW4mJnQuc3Ryb2tlTm9TY2FsZT9pLmdldExpbmVTY2FsZSgpOjE7VChlLCJzdHJva2Utd2lkdGgiLGEvcyksVChlLCJwYWludC1vcmRlciIsbj8ic3Ryb2tlIjoiZmlsbCIpLFQoZSwic3Ryb2tlLW9wYWNpdHkiLG51bGwhPXQuc3Ryb2tlT3BhY2l0eT90LnN0cm9rZU9wYWNpdHk6dC5vcGFjaXR5KTt2YXIgbD10LmxpbmVEYXNoO2w/KFQoZSwic3Ryb2tlLWRhc2hhcnJheSIsdC5saW5lRGFzaC5qb2luKCIsIikpLFQoZSwic3Ryb2tlLWRhc2hvZmZzZXQiLHAodC5saW5lRGFzaE9mZnNldHx8MCkpKTpUKGUsInN0cm9rZS1kYXNoYXJyYXkiLCIiKSx0LmxpbmVDYXAmJlQoZSwic3Ryb2tlLWxpbmVjYXAiLHQubGluZUNhcCksdC5saW5lSm9pbiYmVChlLCJzdHJva2UtbGluZWpvaW4iLHQubGluZUpvaW4pLHQubWl0ZXJMaW1pdCYmVChlLCJzdHJva2UtbWl0ZXJsaW1pdCIsdC5taXRlckxpbWl0KX1lbHNlIFQoZSwic3Ryb2tlIixmKX1mdW5jdGlvbiBJKGUpe2Zvcih2YXIgdD1bXSxuPWUuZGF0YSxpPWUubGVuKCkscj0wO3I8aTspe3ZhciBvPW5bcisrXSxhPSIiLHM9MDtzd2l0Y2gobyl7Y2FzZSBoLk06YT0iTSIscz0yO2JyZWFrO2Nhc2UgaC5MOmE9IkwiLHM9MjticmVhaztjYXNlIGguUTphPSJRIixzPTQ7YnJlYWs7Y2FzZSBoLkM6YT0iQyIscz02O2JyZWFrO2Nhc2UgaC5BOnZhciBsPW5bcisrXSxjPW5bcisrXSx1PW5bcisrXSxkPW5bcisrXSxmPW5bcisrXSx4PW5bcisrXSxTPW5bcisrXSxDPW5bcisrXSxrPU1hdGguYWJzKHgpLFQ9dyhrLXkpfHwoQz94Pj15Oi14Pj15KSxNPXg+MD94JXk6eCV5K3ksRT0hMTtFPSEhVHx8IXcoaykmJk0+PXY9PT0hIUM7dmFyIEk9XyhsK3UqZyhmKSksRD1fKGMrZCptKGYpKTtUJiYoeD1DP3ktMWUtNDoxZS00LXksRT0hMCw5PT09ciYmdC5wdXNoKCJNIixJLEQpKTt2YXIgQT1fKGwrdSpnKGYreCkpLE89XyhjK2QqbShmK3gpKTt0LnB1c2goIkEiLF8odSksXyhkKSxwKFMqYiksK0UsK0MsQSxPKTticmVhaztjYXNlIGguWjphPSJaIjticmVhaztjYXNlIGguUjpBPV8obltyKytdKSxPPV8obltyKytdKTt2YXIgUD1fKG5bcisrXSksTD1fKG5bcisrXSk7dC5wdXNoKCJNIixBLE8sIkwiLEErUCxPLCJMIixBK1AsTytMLCJMIixBLE8rTCwiTCIsQSxPKTticmVha31hJiZ0LnB1c2goYSk7Zm9yKHZhciBOPTA7TjxzO04rKyl0LnB1c2goXyhuW3IrK10pKX1yZXR1cm4gdC5qb2luKCIgIil9dmFyIEQ9e2JydXNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3R5bGUsbj1lLl9fc3ZnRWw7bnx8KG49cigicGF0aCIpLGUuX19zdmdFbD1uKSxlLnBhdGh8fGUuY3JlYXRlUGF0aFByb3h5KCk7dmFyIGk9ZS5wYXRoO2lmKGUuX19kaXJ0eVBhdGgpe2kuYmVnaW5QYXRoKCksaS5zdWJQaXhlbE9wdGltaXplPSExLGUuYnVpbGRQYXRoKGksZS5zaGFwZSksZS5fX2RpcnR5UGF0aD0hMTt2YXIgbz1JKGkpO28uaW5kZXhPZigiTmFOIik8MCYmVChuLCJkIixvKX1FKG4sdCwhMSxlKSxrKG4sZS50cmFuc2Zvcm0pLG51bGwhPXQudGV4dD8kKGUsZS5nZXRCb3VuZGluZ1JlY3QoKSk6VihlKX19LEE9e2JydXNoOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3R5bGUsbj10LmltYWdlO2lmKG4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KXt2YXIgaT1uLnNyYztuPWl9aWYobil7dmFyIG89dC54fHwwLGE9dC55fHwwLHM9dC53aWR0aCxsPXQuaGVpZ2h0LGM9ZS5fX3N2Z0VsO2N8fChjPXIoImltYWdlIiksZS5fX3N2Z0VsPWMpLG4hPT1lLl9faW1hZ2VTcmMmJihNKGMsImhyZWYiLG4pLGUuX19pbWFnZVNyYz1uKSxUKGMsIndpZHRoIixzKSxUKGMsImhlaWdodCIsbCksVChjLCJ4IixvKSxUKGMsInkiLGEpLGsoYyxlLnRyYW5zZm9ybSksbnVsbCE9dC50ZXh0PyQoZSxlLmdldEJvdW5kaW5nUmVjdCgpKTpWKGUpfX19LE89e30sUD1uZXcgYSxMPXt9LE49W10sUj17bGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQiLGNlbnRlcjoibWlkZGxlIixtaWRkbGU6Im1pZGRsZSJ9LCQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLGk9ZS50cmFuc2Zvcm0sbz1lIGluc3RhbmNlb2YgdXx8bi50cmFuc2Zvcm1UZXh0O2UuX19kaXJ0eSYmYy5ub3JtYWxpemVUZXh0U3R5bGUobiwhMCk7dmFyIGE9bi50ZXh0O2lmKG51bGwhPWEmJihhKz0iIiksYy5uZWVkRHJhd1RleHQoYSxuKSl7bnVsbD09YSYmKGE9IiIpLCFvJiZpJiYoUC5jb3B5KHQpLFAuYXBwbHlUcmFuc2Zvcm0oaSksdD1QKTt2YXIgcz1lLl9fdGV4dFN2Z0VsO3N8fChzPXIoInRleHQiKSxlLl9fdGV4dFN2Z0VsPXMpO3ZhciBoPXMuc3R5bGUsZD1uLmZvbnR8fGwuREVGQVVMVF9GT05ULGY9cy5fX2NvbXB1dGVkRm9udDtkIT09cy5fX3N0eWxlRm9udCYmKGguZm9udD1zLl9fc3R5bGVGb250PWQsZj1zLl9fY29tcHV0ZWRGb250PWguZm9udCk7dmFyIHA9bi50ZXh0UGFkZGluZyxtPW4udGV4dExpbmVIZWlnaHQsZz1lLl9fdGV4dENvdGVudEJsb2NrO2cmJiFlLl9fZGlydHlUZXh0fHwoZz1lLl9fdGV4dENvdGVudEJsb2NrPWwucGFyc2VQbGFpblRleHQoYSxmLHAsbSxuLnRydW5jYXRlKSk7dmFyIHY9Zy5vdXRlckhlaWdodCx5PWcubGluZUhlaWdodDtjLmdldEJveFBvc2l0aW9uKEwsZSxuLHQpO3ZhciBiPUwuYmFzZVgseD1MLmJhc2VZLF89TC50ZXh0QWxpZ258fCJsZWZ0Iix3PUwudGV4dFZlcnRpY2FsQWxpZ247eihzLG8saSxuLHQsYix4KTt2YXIgUz1sLmFkanVzdFRleHRZKHgsdix3KSxDPWIsaz1TO3AmJihDPUIoYixfLHApLGsrPXBbMF0pLGsrPXkvMixFKHMsbiwhMCxlKTt2YXIgVD1nLmNhbkNhY2hlQnlUZXh0U3RyaW5nLE09ZS5fX3RzcGFuTGlzdHx8KGUuX190c3Bhbkxpc3Q9W10pLEk9TS5sZW5ndGg7aWYoVCYmZS5fX2NhbkNhY2hlQnlUZXh0U3RyaW5nJiZlLl9fdGV4dD09PWEpe2lmKGUuX19kaXJ0eVRleHQmJkkpZm9yKHZhciBEPTA7RDxJOysrRClGKE1bRF0sXyxDLGsrRCp5KX1lbHNle2UuX190ZXh0PWEsZS5fX2NhbkNhY2hlQnlUZXh0U3RyaW5nPVQ7dmFyIEE9Zy5saW5lcyxPPUEubGVuZ3RoO2ZvcihEPTA7RDxPO0QrKyl7dmFyIE49TVtEXSxSPUFbRF07Tj9OLl9fenJUZXh0IT09UiYmKE4uaW5uZXJIVE1MPSIiLE4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoUikpKTooTj1NW0RdPXIoInRzcGFuIikscy5hcHBlbmRDaGlsZChOKSxOLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFIpKSksRihOLF8sQyxrK0QqeSl9aWYoST5PKXtmb3IoO0Q8STtEKyspcy5yZW1vdmVDaGlsZChNW0RdKTtNLmxlbmd0aD1PfX19fTtmdW5jdGlvbiB6KGUsdCxuLGkscixvLGEpe3MuaWRlbnRpdHkoTiksdCYmbiYmcy5jb3B5KE4sbik7dmFyIGw9aS50ZXh0Um90YXRpb247aWYociYmbCl7dmFyIGM9aS50ZXh0T3JpZ2luOyJjZW50ZXIiPT09Yz8obz1yLndpZHRoLzIrci54LGE9ci5oZWlnaHQvMityLnkpOmMmJihvPWNbMF0rci54LGE9Y1sxXStyLnkpLE5bNF0tPW8sTls1XS09YSxzLnJvdGF0ZShOLE4sbCksTls0XSs9byxOWzVdKz1hfWsoZSxOKX1mdW5jdGlvbiBCKGUsdCxuKXtyZXR1cm4icmlnaHQiPT09dD9lLW5bMV06ImNlbnRlciI9PT10P2UrblszXS8yLW5bMV0vMjplK25bM119ZnVuY3Rpb24gRihlLHQsbixpKXtUKGUsImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIiksVChlLCJ0ZXh0LWFuY2hvciIsUlt0XSksVChlLCJ4IixuKSxUKGUsInkiLGkpfWZ1bmN0aW9uIFYoZSl7ZSYmZS5fX3RleHRTdmdFbCYmKGUuX190ZXh0U3ZnRWwucGFyZW50Tm9kZSYmZS5fX3RleHRTdmdFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUuX190ZXh0U3ZnRWwpLGUuX190ZXh0U3ZnRWw9bnVsbCxlLl9fdHNwYW5MaXN0PVtdLGUuX190ZXh0PW51bGwpfU8uZHJhd1JlY3RUZXh0PSQsTy5icnVzaD1mdW5jdGlvbihlKXt2YXIgdD1lLnN0eWxlO251bGwhPXQudGV4dD8kKGUsITEpOlYoZSl9LHQucGF0aD1ELHQuaW1hZ2U9QSx0LnRleHQ9T30sNDAxMDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LnJlbW92ZVJlc2l6ZUxpc3RlbmVyPXQuYWRkUmVzaXplTGlzdGVuZXI9dm9pZCAwO3ZhciBpPW4oIjZkZDgiKSxyPW8oaSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIGE9InVuZGVmaW5lZCI9PT10eXBlb2Ygd2luZG93LHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxuPUFycmF5LmlzQXJyYXkodCksaT0wO2Zvcih0PW4/dDp0W1N5bWJvbC5pdGVyYXRvcl0oKTs7KXt2YXIgcjtpZihuKXtpZihpPj10Lmxlbmd0aClicmVhaztyPXRbaSsrXX1lbHNle2lmKGk9dC5uZXh0KCksaS5kb25lKWJyZWFrO3I9aS52YWx1ZX12YXIgbz1yLGE9by50YXJnZXQuX19yZXNpemVMaXN0ZW5lcnNfX3x8W107YS5sZW5ndGgmJmEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSgpfSkpfX07dC5hZGRSZXNpemVMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe2F8fChlLl9fcmVzaXplTGlzdGVuZXJzX198fChlLl9fcmVzaXplTGlzdGVuZXJzX189W10sZS5fX3JvX189bmV3IHIuZGVmYXVsdChzKSxlLl9fcm9fXy5vYnNlcnZlKGUpKSxlLl9fcmVzaXplTGlzdGVuZXJzX18ucHVzaCh0KSl9LHQucmVtb3ZlUmVzaXplTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtlJiZlLl9fcmVzaXplTGlzdGVuZXJzX18mJihlLl9fcmVzaXplTGlzdGVuZXJzX18uc3BsaWNlKGUuX19yZXNpemVMaXN0ZW5lcnNfXy5pbmRleE9mKHQpLDEpLGUuX19yZXNpemVMaXN0ZW5lcnNfXy5sZW5ndGh8fGUuX19yb19fLmRpc2Nvbm5lY3QoKSl9fSwiNDAxYiI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0idW5kZWZpbmVkIj09PXR5cGVvZiBGbG9hdDMyQXJyYXk/QXJyYXk6RmxvYXQzMkFycmF5O2Z1bmN0aW9uIGkoZSx0KXt2YXIgaT1uZXcgbigyKTtyZXR1cm4gbnVsbD09ZSYmKGU9MCksbnVsbD09dCYmKHQ9MCksaVswXT1lLGlbMV09dCxpfWZ1bmN0aW9uIHIoZSx0KXtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9bmV3IG4oMik7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdH1mdW5jdGlvbiBhKGUsdCxuKXtyZXR1cm4gZVswXT10LGVbMV09bixlfWZ1bmN0aW9uIHMoZSx0LG4pe3JldHVybiBlWzBdPXRbMF0rblswXSxlWzFdPXRbMV0rblsxXSxlfWZ1bmN0aW9uIGwoZSx0LG4saSl7cmV0dXJuIGVbMF09dFswXStuWzBdKmksZVsxXT10WzFdK25bMV0qaSxlfWZ1bmN0aW9uIGMoZSx0LG4pe3JldHVybiBlWzBdPXRbMF0tblswXSxlWzFdPXRbMV0tblsxXSxlfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIE1hdGguc3FydChkKGUpKX12YXIgaD11O2Z1bmN0aW9uIGQoZSl7cmV0dXJuIGVbMF0qZVswXStlWzFdKmVbMV19dmFyIGY9ZDtmdW5jdGlvbiBwKGUsdCxuKXtyZXR1cm4gZVswXT10WzBdKm5bMF0sZVsxXT10WzFdKm5bMV0sZX1mdW5jdGlvbiBtKGUsdCxuKXtyZXR1cm4gZVswXT10WzBdL25bMF0sZVsxXT10WzFdL25bMV0sZX1mdW5jdGlvbiBnKGUsdCl7cmV0dXJuIGVbMF0qdFswXStlWzFdKnRbMV19ZnVuY3Rpb24gdihlLHQsbil7cmV0dXJuIGVbMF09dFswXSpuLGVbMV09dFsxXSpuLGV9ZnVuY3Rpb24geShlLHQpe3ZhciBuPXUodCk7cmV0dXJuIDA9PT1uPyhlWzBdPTAsZVsxXT0wKTooZVswXT10WzBdL24sZVsxXT10WzFdL24pLGV9ZnVuY3Rpb24gYihlLHQpe3JldHVybiBNYXRoLnNxcnQoKGVbMF0tdFswXSkqKGVbMF0tdFswXSkrKGVbMV0tdFsxXSkqKGVbMV0tdFsxXSkpfXZhciB4PWI7ZnVuY3Rpb24gXyhlLHQpe3JldHVybihlWzBdLXRbMF0pKihlWzBdLXRbMF0pKyhlWzFdLXRbMV0pKihlWzFdLXRbMV0pfXZhciB3PV87ZnVuY3Rpb24gUyhlLHQpe3JldHVybiBlWzBdPS10WzBdLGVbMV09LXRbMV0sZX1mdW5jdGlvbiBDKGUsdCxuLGkpe3JldHVybiBlWzBdPXRbMF0raSooblswXS10WzBdKSxlWzFdPXRbMV0raSooblsxXS10WzFdKSxlfWZ1bmN0aW9uIGsoZSx0LG4pe3ZhciBpPXRbMF0scj10WzFdO3JldHVybiBlWzBdPW5bMF0qaStuWzJdKnIrbls0XSxlWzFdPW5bMV0qaStuWzNdKnIrbls1XSxlfWZ1bmN0aW9uIFQoZSx0LG4pe3JldHVybiBlWzBdPU1hdGgubWluKHRbMF0sblswXSksZVsxXT1NYXRoLm1pbih0WzFdLG5bMV0pLGV9ZnVuY3Rpb24gTShlLHQsbil7cmV0dXJuIGVbMF09TWF0aC5tYXgodFswXSxuWzBdKSxlWzFdPU1hdGgubWF4KHRbMV0sblsxXSksZX10LmNyZWF0ZT1pLHQuY29weT1yLHQuY2xvbmU9byx0LnNldD1hLHQuYWRkPXMsdC5zY2FsZUFuZEFkZD1sLHQuc3ViPWMsdC5sZW49dSx0Lmxlbmd0aD1oLHQubGVuU3F1YXJlPWQsdC5sZW5ndGhTcXVhcmU9Zix0Lm11bD1wLHQuZGl2PW0sdC5kb3Q9Zyx0LnNjYWxlPXYsdC5ub3JtYWxpemU9eSx0LmRpc3RhbmNlPWIsdC5kaXN0PXgsdC5kaXN0YW5jZVNxdWFyZT1fLHQuZGlzdFNxdWFyZT13LHQubmVnYXRlPVMsdC5sZXJwPUMsdC5hcHBseVRyYW5zZm9ybT1rLHQubWluPVQsdC5tYXg9TX0sIjQwOGEiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJjNmI2Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmIk51bWJlciIhPWkoZSkpdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpO3JldHVybitlfX0sIjQwOGMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIyYjNlIikscj1mdW5jdGlvbigpe3JldHVybiBpLkRhdGUubm93KCl9O2UuZXhwb3J0cz1yfSw0MTI3OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiZDIzMyIpLHI9bigiYjMxMyIpLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPXticmFja2V0czpmdW5jdGlvbihlKXtyZXR1cm4gZSsiW10ifSxjb21tYToiY29tbWEiLGluZGljZXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSsiWyIrdCsiXSJ9LHJlcGVhdDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LHM9QXJyYXkuaXNBcnJheSxsPUFycmF5LnByb3RvdHlwZS5wdXNoLGM9ZnVuY3Rpb24oZSx0KXtsLmFwcGx5KGUscyh0KT90Olt0XSl9LHU9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsaD17YWRkUXVlcnlQcmVmaXg6ITEsYWxsb3dEb3RzOiExLGNoYXJzZXQ6InV0Zi04IixjaGFyc2V0U2VudGluZWw6ITEsZGVsaW1pdGVyOiImIixlbmNvZGU6ITAsZW5jb2RlcjppLmVuY29kZSxlbmNvZGVWYWx1ZXNPbmx5OiExLGZvcm1hdHRlcjpyLmZvcm1hdHRlcnNbclsiZGVmYXVsdCJdXSxpbmRpY2VzOiExLHNlcmlhbGl6ZURhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbChlKX0sc2tpcE51bGxzOiExLHN0cmljdE51bGxIYW5kbGluZzohMX0sZD1mdW5jdGlvbiBlKHQsbixyLG8sYSxsLHUsZCxmLHAsbSxnLHYpe3ZhciB5PXQ7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB1P3k9dShuLHkpOnkgaW5zdGFuY2VvZiBEYXRlP3k9cCh5KToiY29tbWEiPT09ciYmcyh5KSYmKHk9eS5qb2luKCIsIikpLG51bGw9PT15KXtpZihvKXJldHVybiBsJiYhZz9sKG4saC5lbmNvZGVyLHYpOm47eT0iIn1pZigic3RyaW5nIj09PXR5cGVvZiB5fHwibnVtYmVyIj09PXR5cGVvZiB5fHwiYm9vbGVhbiI9PT10eXBlb2YgeXx8aS5pc0J1ZmZlcih5KSl7aWYobCl7dmFyIGI9Zz9uOmwobixoLmVuY29kZXIsdik7cmV0dXJuW20oYikrIj0iK20obCh5LGguZW5jb2Rlcix2KSldfXJldHVyblttKG4pKyI9IittKFN0cmluZyh5KSldfXZhciB4LF89W107aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgeSlyZXR1cm4gXztpZihzKHUpKXg9dTtlbHNle3ZhciB3PU9iamVjdC5rZXlzKHkpO3g9ZD93LnNvcnQoZCk6d31mb3IodmFyIFM9MDtTPHgubGVuZ3RoOysrUyl7dmFyIEM9eFtTXTthJiZudWxsPT09eVtDXXx8KHMoeSk/YyhfLGUoeVtDXSwiZnVuY3Rpb24iPT09dHlwZW9mIHI/cihuLEMpOm4scixvLGEsbCx1LGQsZixwLG0sZyx2KSk6YyhfLGUoeVtDXSxuKyhmPyIuIitDOiJbIitDKyJdIikscixvLGEsbCx1LGQsZixwLG0sZyx2KSkpfXJldHVybiBffSxmPWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBoO2lmKG51bGwhPT1lLmVuY29kZXImJnZvaWQgMCE9PWUuZW5jb2RlciYmImZ1bmN0aW9uIiE9PXR5cGVvZiBlLmVuY29kZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4iKTt2YXIgdD1lLmNoYXJzZXR8fGguY2hhcnNldDtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBlLmNoYXJzZXQmJiJ1dGYtOCIhPT1lLmNoYXJzZXQmJiJpc28tODg1OS0xIiE9PWUuY2hhcnNldCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCIpO3ZhciBuPXJbImRlZmF1bHQiXTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBlLmZvcm1hdCl7aWYoIW8uY2FsbChyLmZvcm1hdHRlcnMsZS5mb3JtYXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4iKTtuPWUuZm9ybWF0fXZhciBpPXIuZm9ybWF0dGVyc1tuXSxhPWguZmlsdGVyO3JldHVybigiZnVuY3Rpb24iPT09dHlwZW9mIGUuZmlsdGVyfHxzKGUuZmlsdGVyKSkmJihhPWUuZmlsdGVyKSx7YWRkUXVlcnlQcmVmaXg6ImJvb2xlYW4iPT09dHlwZW9mIGUuYWRkUXVlcnlQcmVmaXg/ZS5hZGRRdWVyeVByZWZpeDpoLmFkZFF1ZXJ5UHJlZml4LGFsbG93RG90czoidW5kZWZpbmVkIj09PXR5cGVvZiBlLmFsbG93RG90cz9oLmFsbG93RG90czohIWUuYWxsb3dEb3RzLGNoYXJzZXQ6dCxjaGFyc2V0U2VudGluZWw6ImJvb2xlYW4iPT09dHlwZW9mIGUuY2hhcnNldFNlbnRpbmVsP2UuY2hhcnNldFNlbnRpbmVsOmguY2hhcnNldFNlbnRpbmVsLGRlbGltaXRlcjoidW5kZWZpbmVkIj09PXR5cGVvZiBlLmRlbGltaXRlcj9oLmRlbGltaXRlcjplLmRlbGltaXRlcixlbmNvZGU6ImJvb2xlYW4iPT09dHlwZW9mIGUuZW5jb2RlP2UuZW5jb2RlOmguZW5jb2RlLGVuY29kZXI6ImZ1bmN0aW9uIj09PXR5cGVvZiBlLmVuY29kZXI/ZS5lbmNvZGVyOmguZW5jb2RlcixlbmNvZGVWYWx1ZXNPbmx5OiJib29sZWFuIj09PXR5cGVvZiBlLmVuY29kZVZhbHVlc09ubHk/ZS5lbmNvZGVWYWx1ZXNPbmx5OmguZW5jb2RlVmFsdWVzT25seSxmaWx0ZXI6YSxmb3JtYXR0ZXI6aSxzZXJpYWxpemVEYXRlOiJmdW5jdGlvbiI9PT10eXBlb2YgZS5zZXJpYWxpemVEYXRlP2Uuc2VyaWFsaXplRGF0ZTpoLnNlcmlhbGl6ZURhdGUsc2tpcE51bGxzOiJib29sZWFuIj09PXR5cGVvZiBlLnNraXBOdWxscz9lLnNraXBOdWxsczpoLnNraXBOdWxscyxzb3J0OiJmdW5jdGlvbiI9PT10eXBlb2YgZS5zb3J0P2Uuc29ydDpudWxsLHN0cmljdE51bGxIYW5kbGluZzoiYm9vbGVhbiI9PT10eXBlb2YgZS5zdHJpY3ROdWxsSGFuZGxpbmc/ZS5zdHJpY3ROdWxsSGFuZGxpbmc6aC5zdHJpY3ROdWxsSGFuZGxpbmd9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixpLHI9ZSxvPWYodCk7ImZ1bmN0aW9uIj09PXR5cGVvZiBvLmZpbHRlcj8oaT1vLmZpbHRlcixyPWkoIiIscikpOnMoby5maWx0ZXIpJiYoaT1vLmZpbHRlcixuPWkpO3ZhciBsLHU9W107aWYoIm9iamVjdCIhPT10eXBlb2Ygcnx8bnVsbD09PXIpcmV0dXJuIiI7bD10JiZ0LmFycmF5Rm9ybWF0IGluIGE/dC5hcnJheUZvcm1hdDp0JiYiaW5kaWNlcyJpbiB0P3QuaW5kaWNlcz8iaW5kaWNlcyI6InJlcGVhdCI6ImluZGljZXMiO3ZhciBoPWFbbF07bnx8KG49T2JqZWN0LmtleXMocikpLG8uc29ydCYmbi5zb3J0KG8uc29ydCk7Zm9yKHZhciBwPTA7cDxuLmxlbmd0aDsrK3Ape3ZhciBtPW5bcF07by5za2lwTnVsbHMmJm51bGw9PT1yW21dfHxjKHUsZChyW21dLG0saCxvLnN0cmljdE51bGxIYW5kbGluZyxvLnNraXBOdWxscyxvLmVuY29kZT9vLmVuY29kZXI6bnVsbCxvLmZpbHRlcixvLnNvcnQsby5hbGxvd0RvdHMsby5zZXJpYWxpemVEYXRlLG8uZm9ybWF0dGVyLG8uZW5jb2RlVmFsdWVzT25seSxvLmNoYXJzZXQpKX12YXIgZz11LmpvaW4oby5kZWxpbWl0ZXIpLHY9ITA9PT1vLmFkZFF1ZXJ5UHJlZml4PyI/IjoiIjtyZXR1cm4gby5jaGFyc2V0U2VudGluZWwmJigiaXNvLTg4NTktMSI9PT1vLmNoYXJzZXQ/dis9InV0Zjg9JTI2JTIzMTAwMDMlM0ImIjp2Kz0idXRmOD0lRTIlOUMlOTMmIiksZy5sZW5ndGg+MD92K2c6IiJ9fSwiNDE0YyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjNhNTYiKSxyPWkuZXh0ZW5kKHt0eXBlOiJkYXRhWm9vbS5zZWxlY3QifSk7ZS5leHBvcnRzPXJ9LCI0MTdmIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgaT1uKCIyYjBlIikscj1hKGkpLG89bigiNTkyNCIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPVtdLGw9IkBAY2xpY2tvdXRzaWRlQ29udGV4dCIsYz12b2lkIDAsdT0wO2Z1bmN0aW9uIGgoZSx0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTshKG4mJm4uY29udGV4dCYmaS50YXJnZXQmJnIudGFyZ2V0KXx8ZS5jb250YWlucyhpLnRhcmdldCl8fGUuY29udGFpbnMoci50YXJnZXQpfHxlPT09aS50YXJnZXR8fG4uY29udGV4dC5wb3BwZXJFbG0mJihuLmNvbnRleHQucG9wcGVyRWxtLmNvbnRhaW5zKGkudGFyZ2V0KXx8bi5jb250ZXh0LnBvcHBlckVsbS5jb250YWlucyhyLnRhcmdldCkpfHwodC5leHByZXNzaW9uJiZlW2xdLm1ldGhvZE5hbWUmJm4uY29udGV4dFtlW2xdLm1ldGhvZE5hbWVdP24uY29udGV4dFtlW2xdLm1ldGhvZE5hbWVdKCk6ZVtsXS5iaW5kaW5nRm4mJmVbbF0uYmluZGluZ0ZuKCkpfX0hci5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXImJigwLG8ub24pKGRvY3VtZW50LCJtb3VzZWRvd24iLChmdW5jdGlvbihlKXtyZXR1cm4gYz1lfSkpLCFyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciYmKDAsby5vbikoZG9jdW1lbnQsIm1vdXNldXAiLChmdW5jdGlvbihlKXtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JldHVybiB0W2xdLmRvY3VtZW50SGFuZGxlcihlLGMpfSkpfSkpLHQuZGVmYXVsdD17YmluZDpmdW5jdGlvbihlLHQsbil7cy5wdXNoKGUpO3ZhciBpPXUrKztlW2xdPXtpZDppLGRvY3VtZW50SGFuZGxlcjpoKGUsdCxuKSxtZXRob2ROYW1lOnQuZXhwcmVzc2lvbixiaW5kaW5nRm46dC52YWx1ZX19LHVwZGF0ZTpmdW5jdGlvbihlLHQsbil7ZVtsXS5kb2N1bWVudEhhbmRsZXI9aChlLHQsbiksZVtsXS5tZXRob2ROYW1lPXQuZXhwcmVzc2lvbixlW2xdLmJpbmRpbmdGbj10LnZhbHVlfSx1bmJpbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXMubGVuZ3RoLG49MDtuPHQ7bisrKWlmKHNbbl1bbF0uaWQ9PT1lW2xdLmlkKXtzLnNwbGljZShuLDEpO2JyZWFrfWRlbGV0ZSBlW2xdfX19LCI0MWIyIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgaT1uKCIzZjZiIikscj1vKGkpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXQuZGVmYXVsdD1yLmRlZmF1bHR8fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIGkgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKSYmKGVbaV09bltpXSl9cmV0dXJuIGV9fSwiNDFlZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImQ1MWIiKSxyPXt0cmFuc3BhcmVudDpbMCwwLDAsMF0sYWxpY2VibHVlOlsyNDAsMjQ4LDI1NSwxXSxhbnRpcXVld2hpdGU6WzI1MCwyMzUsMjE1LDFdLGFxdWE6WzAsMjU1LDI1NSwxXSxhcXVhbWFyaW5lOlsxMjcsMjU1LDIxMiwxXSxhenVyZTpbMjQwLDI1NSwyNTUsMV0sYmVpZ2U6WzI0NSwyNDUsMjIwLDFdLGJpc3F1ZTpbMjU1LDIyOCwxOTYsMV0sYmxhY2s6WzAsMCwwLDFdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNSwxXSxibHVlOlswLDAsMjU1LDFdLGJsdWV2aW9sZXQ6WzEzOCw0MywyMjYsMV0sYnJvd246WzE2NSw0Miw0MiwxXSxidXJseXdvb2Q6WzIyMiwxODQsMTM1LDFdLGNhZGV0Ymx1ZTpbOTUsMTU4LDE2MCwxXSxjaGFydHJldXNlOlsxMjcsMjU1LDAsMV0sY2hvY29sYXRlOlsyMTAsMTA1LDMwLDFdLGNvcmFsOlsyNTUsMTI3LDgwLDFdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzNywxXSxjb3Juc2lsazpbMjU1LDI0OCwyMjAsMV0sY3JpbXNvbjpbMjIwLDIwLDYwLDFdLGN5YW46WzAsMjU1LDI1NSwxXSxkYXJrYmx1ZTpbMCwwLDEzOSwxXSxkYXJrY3lhbjpbMCwxMzksMTM5LDFdLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTEsMV0sZGFya2dyYXk6WzE2OSwxNjksMTY5LDFdLGRhcmtncmVlbjpbMCwxMDAsMCwxXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjksMV0sZGFya2toYWtpOlsxODksMTgzLDEwNywxXSxkYXJrbWFnZW50YTpbMTM5LDAsMTM5LDFdLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDcsMV0sZGFya29yYW5nZTpbMjU1LDE0MCwwLDFdLGRhcmtvcmNoaWQ6WzE1Myw1MCwyMDQsMV0sZGFya3JlZDpbMTM5LDAsMCwxXSxkYXJrc2FsbW9uOlsyMzMsMTUwLDEyMiwxXSxkYXJrc2VhZ3JlZW46WzE0MywxODgsMTQzLDFdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOSwxXSxkYXJrc2xhdGVncmF5Ols0Nyw3OSw3OSwxXSxkYXJrc2xhdGVncmV5Ols0Nyw3OSw3OSwxXSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDksMV0sZGFya3Zpb2xldDpbMTQ4LDAsMjExLDFdLGRlZXBwaW5rOlsyNTUsMjAsMTQ3LDFdLGRlZXBza3libHVlOlswLDE5MSwyNTUsMV0sZGltZ3JheTpbMTA1LDEwNSwxMDUsMV0sZGltZ3JleTpbMTA1LDEwNSwxMDUsMV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NSwxXSxmaXJlYnJpY2s6WzE3OCwzNCwzNCwxXSxmbG9yYWx3aGl0ZTpbMjU1LDI1MCwyNDAsMV0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNCwxXSxmdWNoc2lhOlsyNTUsMCwyNTUsMV0sZ2FpbnNib3JvOlsyMjAsMjIwLDIyMCwxXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NSwxXSxnb2xkOlsyNTUsMjE1LDAsMV0sZ29sZGVucm9kOlsyMTgsMTY1LDMyLDFdLGdyYXk6WzEyOCwxMjgsMTI4LDFdLGdyZWVuOlswLDEyOCwwLDFdLGdyZWVueWVsbG93OlsxNzMsMjU1LDQ3LDFdLGdyZXk6WzEyOCwxMjgsMTI4LDFdLGhvbmV5ZGV3OlsyNDAsMjU1LDI0MCwxXSxob3RwaW5rOlsyNTUsMTA1LDE4MCwxXSxpbmRpYW5yZWQ6WzIwNSw5Miw5MiwxXSxpbmRpZ286Wzc1LDAsMTMwLDFdLGl2b3J5OlsyNTUsMjU1LDI0MCwxXSxraGFraTpbMjQwLDIzMCwxNDAsMV0sbGF2ZW5kZXI6WzIzMCwyMzAsMjUwLDFdLGxhdmVuZGVyYmx1c2g6WzI1NSwyNDAsMjQ1LDFdLGxhd25ncmVlbjpbMTI0LDI1MiwwLDFdLGxlbW9uY2hpZmZvbjpbMjU1LDI1MCwyMDUsMV0sbGlnaHRibHVlOlsxNzMsMjE2LDIzMCwxXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOCwxXSxsaWdodGN5YW46WzIyNCwyNTUsMjU1LDFdLGxpZ2h0Z29sZGVucm9keWVsbG93OlsyNTAsMjUwLDIxMCwxXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0Z3JlZW46WzE0NCwyMzgsMTQ0LDFdLGxpZ2h0Z3JleTpbMjExLDIxMSwyMTEsMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5MywxXSxsaWdodHNhbG1vbjpbMjU1LDE2MCwxMjIsMV0sbGlnaHRzZWFncmVlbjpbMzIsMTc4LDE3MCwxXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwLDFdLGxpZ2h0c2xhdGVncmF5OlsxMTksMTM2LDE1MywxXSxsaWdodHNsYXRlZ3JleTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyLDFdLGxpZ2h0eWVsbG93OlsyNTUsMjU1LDIyNCwxXSxsaW1lOlswLDI1NSwwLDFdLGxpbWVncmVlbjpbNTAsMjA1LDUwLDFdLGxpbmVuOlsyNTAsMjQwLDIzMCwxXSxtYWdlbnRhOlsyNTUsMCwyNTUsMV0sbWFyb29uOlsxMjgsMCwwLDFdLG1lZGl1bWFxdWFtYXJpbmU6WzEwMiwyMDUsMTcwLDFdLG1lZGl1bWJsdWU6WzAsMCwyMDUsMV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExLDFdLG1lZGl1bXB1cnBsZTpbMTQ3LDExMiwyMTksMV0sbWVkaXVtc2VhZ3JlZW46WzYwLDE3OSwxMTMsMV0sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOCwxXSxtZWRpdW1zcHJpbmdncmVlbjpbMCwyNTAsMTU0LDFdLG1lZGl1bXR1cnF1b2lzZTpbNzIsMjA5LDIwNCwxXSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzMsMV0sbWlkbmlnaHRibHVlOlsyNSwyNSwxMTIsMV0sbWludGNyZWFtOlsyNDUsMjU1LDI1MCwxXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1LDFdLG1vY2Nhc2luOlsyNTUsMjI4LDE4MSwxXSxuYXZham93aGl0ZTpbMjU1LDIyMiwxNzMsMV0sbmF2eTpbMCwwLDEyOCwxXSxvbGRsYWNlOlsyNTMsMjQ1LDIzMCwxXSxvbGl2ZTpbMTI4LDEyOCwwLDFdLG9saXZlZHJhYjpbMTA3LDE0MiwzNSwxXSxvcmFuZ2U6WzI1NSwxNjUsMCwxXSxvcmFuZ2VyZWQ6WzI1NSw2OSwwLDFdLG9yY2hpZDpbMjE4LDExMiwyMTQsMV0scGFsZWdvbGRlbnJvZDpbMjM4LDIzMiwxNzAsMV0scGFsZWdyZWVuOlsxNTIsMjUxLDE1MiwxXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOCwxXSxwYWxldmlvbGV0cmVkOlsyMTksMTEyLDE0NywxXSxwYXBheWF3aGlwOlsyNTUsMjM5LDIxMywxXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1LDFdLHBlcnU6WzIwNSwxMzMsNjMsMV0scGluazpbMjU1LDE5MiwyMDMsMV0scGx1bTpbMjIxLDE2MCwyMjEsMV0scG93ZGVyYmx1ZTpbMTc2LDIyNCwyMzAsMV0scHVycGxlOlsxMjgsMCwxMjgsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBvKGUpe3JldHVybiBlPU1hdGgucm91bmQoZSksZTwwPzA6ZT4yNTU/MjU1OmV9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT1NYXRoLnJvdW5kKGUpLGU8MD8wOmU+MzYwPzM2MDplfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIGU8MD8wOmU+MT8xOmV9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZS5sZW5ndGgmJiIlIj09PWUuY2hhckF0KGUubGVuZ3RoLTEpP28ocGFyc2VGbG9hdChlKS8xMDAqMjU1KTpvKHBhcnNlSW50KGUsMTApKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLmxlbmd0aCYmIiUiPT09ZS5jaGFyQXQoZS5sZW5ndGgtMSk/cyhwYXJzZUZsb2F0KGUpLzEwMCk6cyhwYXJzZUZsb2F0KGUpKX1mdW5jdGlvbiB1KGUsdCxuKXtyZXR1cm4gbjwwP24rPTE6bj4xJiYobi09MSksNipuPDE/ZSsodC1lKSpuKjY6MipuPDE/dDozKm48Mj9lKyh0LWUpKigyLzMtbikqNjplfWZ1bmN0aW9uIGgoZSx0LG4pe3JldHVybiBlKyh0LWUpKm59ZnVuY3Rpb24gZChlLHQsbixpLHIpe3JldHVybiBlWzBdPXQsZVsxXT1uLGVbMl09aSxlWzNdPXIsZX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlfXZhciBwPW5ldyBpKDIwKSxtPW51bGw7ZnVuY3Rpb24gZyhlLHQpe20mJmYobSx0KSxtPXAucHV0KGUsbXx8dC5zbGljZSgpKX1mdW5jdGlvbiB2KGUsdCl7aWYoZSl7dD10fHxbXTt2YXIgbj1wLmdldChlKTtpZihuKXJldHVybiBmKHQsbik7ZSs9IiI7dmFyIGk9ZS5yZXBsYWNlKC8gL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiByKXJldHVybiBmKHQscltpXSksZyhlLHQpLHQ7aWYoIiMiIT09aS5jaGFyQXQoMCkpe3ZhciBvPWkuaW5kZXhPZigiKCIpLGE9aS5pbmRleE9mKCIpIik7aWYoLTEhPT1vJiZhKzE9PT1pLmxlbmd0aCl7dmFyIHM9aS5zdWJzdHIoMCxvKSx1PWkuc3Vic3RyKG8rMSxhLShvKzEpKS5zcGxpdCgiLCIpLGg9MTtzd2l0Y2gocyl7Y2FzZSJyZ2JhIjppZig0IT09dS5sZW5ndGgpcmV0dXJuIHZvaWQgZCh0LDAsMCwwLDEpO2g9Yyh1LnBvcCgpKTtjYXNlInJnYiI6cmV0dXJuIDMhPT11Lmxlbmd0aD92b2lkIGQodCwwLDAsMCwxKTooZCh0LGwodVswXSksbCh1WzFdKSxsKHVbMl0pLGgpLGcoZSx0KSx0KTtjYXNlImhzbGEiOnJldHVybiA0IT09dS5sZW5ndGg/dm9pZCBkKHQsMCwwLDAsMSk6KHVbM109Yyh1WzNdKSx5KHUsdCksZyhlLHQpLHQpO2Nhc2UiaHNsIjpyZXR1cm4gMyE9PXUubGVuZ3RoP3ZvaWQgZCh0LDAsMCwwLDEpOih5KHUsdCksZyhlLHQpLHQpO2RlZmF1bHQ6cmV0dXJufX1kKHQsMCwwLDAsMSl9ZWxzZXtpZig0PT09aS5sZW5ndGgpe3ZhciBtPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KTtyZXR1cm4gbT49MCYmbTw9NDA5NT8oZCh0LCgzODQwJm0pPj40fCgzODQwJm0pPj44LDI0MCZtfCgyNDAmbSk+PjQsMTUmbXwoMTUmbSk8PDQsMSksZyhlLHQpLHQpOnZvaWQgZCh0LDAsMCwwLDEpfWlmKDc9PT1pLmxlbmd0aCl7bT1wYXJzZUludChpLnN1YnN0cigxKSwxNik7cmV0dXJuIG0+PTAmJm08PTE2Nzc3MjE1PyhkKHQsKDE2NzExNjgwJm0pPj4xNiwoNjUyODAmbSk+PjgsMjU1Jm0sMSksZyhlLHQpLHQpOnZvaWQgZCh0LDAsMCwwLDEpfX19fWZ1bmN0aW9uIHkoZSx0KXt2YXIgbj0ocGFyc2VGbG9hdChlWzBdKSUzNjArMzYwKSUzNjAvMzYwLGk9YyhlWzFdKSxyPWMoZVsyXSksYT1yPD0uNT9yKihpKzEpOnIraS1yKmkscz0yKnItYTtyZXR1cm4gdD10fHxbXSxkKHQsbygyNTUqdShzLGEsbisxLzMpKSxvKDI1NSp1KHMsYSxuKSksbygyNTUqdShzLGEsbi0xLzMpKSwxKSw0PT09ZS5sZW5ndGgmJih0WzNdPWVbM10pLHR9ZnVuY3Rpb24gYihlKXtpZihlKXt2YXIgdCxuLGk9ZVswXS8yNTUscj1lWzFdLzI1NSxvPWVbMl0vMjU1LGE9TWF0aC5taW4oaSxyLG8pLHM9TWF0aC5tYXgoaSxyLG8pLGw9cy1hLGM9KHMrYSkvMjtpZigwPT09bCl0PTAsbj0wO2Vsc2V7bj1jPC41P2wvKHMrYSk6bC8oMi1zLWEpO3ZhciB1PSgocy1pKS82K2wvMikvbCxoPSgocy1yKS82K2wvMikvbCxkPSgocy1vKS82K2wvMikvbDtpPT09cz90PWQtaDpyPT09cz90PTEvMyt1LWQ6bz09PXMmJih0PTIvMytoLXUpLHQ8MCYmKHQrPTEpLHQ+MSYmKHQtPTEpfXZhciBmPVszNjAqdCxuLGNdO3JldHVybiBudWxsIT1lWzNdJiZmLnB1c2goZVszXSksZn19ZnVuY3Rpb24geChlLHQpe3ZhciBuPXYoZSk7aWYobil7Zm9yKHZhciBpPTA7aTwzO2krKyluW2ldPXQ8MD9uW2ldKigxLXQpfDA6KDI1NS1uW2ldKSp0K25baV18MCxuW2ldPjI1NT9uW2ldPTI1NTplW2ldPDAmJihuW2ldPTApO3JldHVybiBFKG4sND09PW4ubGVuZ3RoPyJyZ2JhIjoicmdiIil9fWZ1bmN0aW9uIF8oZSl7dmFyIHQ9dihlKTtpZih0KXJldHVybigoMTw8MjQpKyh0WzBdPDwxNikrKHRbMV08PDgpKyArdFsyXSkudG9TdHJpbmcoMTYpLnNsaWNlKDEpfWZ1bmN0aW9uIHcoZSx0LG4pe2lmKHQmJnQubGVuZ3RoJiZlPj0wJiZlPD0xKXtuPW58fFtdO3ZhciBpPWUqKHQubGVuZ3RoLTEpLHI9TWF0aC5mbG9vcihpKSxhPU1hdGguY2VpbChpKSxsPXRbcl0sYz10W2FdLHU9aS1yO3JldHVybiBuWzBdPW8oaChsWzBdLGNbMF0sdSkpLG5bMV09byhoKGxbMV0sY1sxXSx1KSksblsyXT1vKGgobFsyXSxjWzJdLHUpKSxuWzNdPXMoaChsWzNdLGNbM10sdSkpLG59fXZhciBTPXc7ZnVuY3Rpb24gQyhlLHQsbil7aWYodCYmdC5sZW5ndGgmJmU+PTAmJmU8PTEpe3ZhciBpPWUqKHQubGVuZ3RoLTEpLHI9TWF0aC5mbG9vcihpKSxhPU1hdGguY2VpbChpKSxsPXYodFtyXSksYz12KHRbYV0pLHU9aS1yLGQ9RShbbyhoKGxbMF0sY1swXSx1KSksbyhoKGxbMV0sY1sxXSx1KSksbyhoKGxbMl0sY1syXSx1KSkscyhoKGxbM10sY1szXSx1KSldLCJyZ2JhIik7cmV0dXJuIG4/e2NvbG9yOmQsbGVmdEluZGV4OnIscmlnaHRJbmRleDphLHZhbHVlOml9OmR9fXZhciBrPUM7ZnVuY3Rpb24gVChlLHQsbixpKXtpZihlPXYoZSksZSlyZXR1cm4gZT1iKGUpLG51bGwhPXQmJihlWzBdPWEodCkpLG51bGwhPW4mJihlWzFdPWMobikpLG51bGwhPWkmJihlWzJdPWMoaSkpLEUoeShlKSwicmdiYSIpfWZ1bmN0aW9uIE0oZSx0KXtpZihlPXYoZSksZSYmbnVsbCE9dClyZXR1cm4gZVszXT1zKHQpLEUoZSwicmdiYSIpfWZ1bmN0aW9uIEUoZSx0KXtpZihlJiZlLmxlbmd0aCl7dmFyIG49ZVswXSsiLCIrZVsxXSsiLCIrZVsyXTtyZXR1cm4icmdiYSIhPT10JiYiaHN2YSIhPT10JiYiaHNsYSIhPT10fHwobis9IiwiK2VbM10pLHQrIigiK24rIikifX10LnBhcnNlPXYsdC5saWZ0PXgsdC50b0hleD1fLHQuZmFzdExlcnA9dyx0LmZhc3RNYXBUb0NvbG9yPVMsdC5sZXJwPUMsdC5tYXBUb0NvbG9yPWssdC5tb2RpZnlIU0w9VCx0Lm1vZGlmeUFscGhhPU0sdC5zdHJpbmdpZnk9RX0sIjQxZjgiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0LmlzVk5vZGU9bzt2YXIgcj1uKCI4MTIyIik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gbnVsbCE9PWUmJiJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT09dHlwZW9mIGU/InVuZGVmaW5lZCI6aShlKSkmJigwLHIuaGFzT3duKShlLCJjb21wb25lbnRPcHRpb25zIil9fSwiNDI4ZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImRhODQiKTtlLmV4cG9ydHM9aX0sIjQyZTUiOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7dGhpcy5jb2xvclN0b3BzPWV8fFtdfTtuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bixhZGRDb2xvclN0b3A6ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbG9yU3RvcHMucHVzaCh7b2Zmc2V0OmUsY29sb3I6dH0pfX07dmFyIGk9bjtlLmV4cG9ydHM9aX0sIjQyZjYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIikscj1uKCI2ZDhiIiksbz1uKCIyMmQxIiksYT1uKCIwN2Q3Iikscz1uKCI4MmY5IiksbD1uKCJlZGEyIiksYz1uKCIzODQyIiksdT1uKCIyMzA2IiksaD1uKCIxMzNkIiksZD1uKCJmOTM0IiksZj1uKCI0MzE5IikscD1uKCIxN2Q2IiksbT1uKCI2OTdlIiksZz1uKCJmZjJlIiksdj1uKCJlMGQzIikseT12LmdldFRvb2x0aXBSZW5kZXJNb2RlLGI9ci5iaW5kLHg9ci5lYWNoLF89Yy5wYXJzZVBlcmNlbnQsdz1uZXcgdS5SZWN0KHtzaGFwZTp7eDotMSx5Oi0xLHdpZHRoOjIsaGVpZ2h0OjJ9fSksUz1pLmV4dGVuZENvbXBvbmVudFZpZXcoe3R5cGU6InRvb2x0aXAiLGluaXQ6ZnVuY3Rpb24oZSx0KXtpZighby5ub2RlKXt2YXIgbixpPWUuZ2V0Q29tcG9uZW50KCJ0b29sdGlwIikscj1pLmdldCgicmVuZGVyTW9kZSIpO3RoaXMuX3JlbmRlck1vZGU9eShyKSwiaHRtbCI9PT10aGlzLl9yZW5kZXJNb2RlPyhuPW5ldyBhKHQuZ2V0RG9tKCksdCx7YXBwZW5kVG9Cb2R5OmkuZ2V0KCJhcHBlbmRUb0JvZHkiLCEwKX0pLHRoaXMuX25ld0xpbmU9Ijxici8+Iik6KG49bmV3IHModCksdGhpcy5fbmV3TGluZT0iXG4iKSx0aGlzLl90b29sdGlwQ29udGVudD1ufX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXtpZighby5ub2RlKXt0aGlzLmdyb3VwLnJlbW92ZUFsbCgpLHRoaXMuX3Rvb2x0aXBNb2RlbD1lLHRoaXMuX2VjTW9kZWw9dCx0aGlzLl9hcGk9bix0aGlzLl9sYXN0RGF0YUJ5Q29vcmRTeXM9bnVsbCx0aGlzLl9hbHdheXNTaG93Q29udGVudD1lLmdldCgiYWx3YXlzU2hvd0NvbnRlbnQiKTt2YXIgaT10aGlzLl90b29sdGlwQ29udGVudDtpLnVwZGF0ZShlKSxpLnNldEVudGVyYWJsZShlLmdldCgiZW50ZXJhYmxlIikpLHRoaXMuX2luaXRHbG9iYWxMaXN0ZW5lcigpLHRoaXMuX2tlZXBTaG93KCl9fSxfaW5pdEdsb2JhbExpc3RlbmVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdG9vbHRpcE1vZGVsLHQ9ZS5nZXQoInRyaWdnZXJPbiIpO3AucmVnaXN0ZXIoIml0ZW1Ub29sdGlwIix0aGlzLl9hcGksYigoZnVuY3Rpb24oZSxuLGkpeyJub25lIiE9PXQmJih0LmluZGV4T2YoZSk+PTA/dGhpcy5fdHJ5U2hvdyhuLGkpOiJsZWF2ZSI9PT1lJiZ0aGlzLl9oaWRlKGkpKX0pLHRoaXMpKX0sX2tlZXBTaG93OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdG9vbHRpcE1vZGVsLHQ9dGhpcy5fZWNNb2RlbCxuPXRoaXMuX2FwaTtpZihudWxsIT10aGlzLl9sYXN0WCYmbnVsbCE9dGhpcy5fbGFzdFkmJiJub25lIiE9PWUuZ2V0KCJ0cmlnZ2VyT24iKSl7dmFyIGk9dGhpcztjbGVhclRpbWVvdXQodGhpcy5fcmVmcmVzaFVwZGF0ZVRpbWVvdXQpLHRoaXMuX3JlZnJlc2hVcGRhdGVUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7IW4uaXNEaXNwb3NlZCgpJiZpLm1hbnVhbGx5U2hvd1RpcChlLHQsbix7eDppLl9sYXN0WCx5OmkuX2xhc3RZfSl9KSl9fSxtYW51YWxseVNob3dUaXA6ZnVuY3Rpb24oZSx0LG4saSl7aWYoaS5mcm9tIT09dGhpcy51aWQmJiFvLm5vZGUpe3ZhciByPWsoaSxuKTt0aGlzLl90aWNrZXQ9IiI7dmFyIGE9aS5kYXRhQnlDb29yZFN5cztpZihpLnRvb2x0aXAmJm51bGwhPWkueCYmbnVsbCE9aS55KXt2YXIgcz13O3MucG9zaXRpb249W2kueCxpLnldLHMudXBkYXRlKCkscy50b29sdGlwPWkudG9vbHRpcCx0aGlzLl90cnlTaG93KHtvZmZzZXRYOmkueCxvZmZzZXRZOmkueSx0YXJnZXQ6c30scil9ZWxzZSBpZihhKXRoaXMuX3RyeVNob3coe29mZnNldFg6aS54LG9mZnNldFk6aS55LHBvc2l0aW9uOmkucG9zaXRpb24sZGF0YUJ5Q29vcmRTeXM6aS5kYXRhQnlDb29yZFN5cyx0b29sdGlwT3B0aW9uOmkudG9vbHRpcE9wdGlvbn0scik7ZWxzZSBpZihudWxsIT1pLnNlcmllc0luZGV4KXtpZih0aGlzLl9tYW51YWxseUF4aXNTaG93VGlwKGUsdCxuLGkpKXJldHVybjt2YXIgbD1oKGksdCksYz1sLnBvaW50WzBdLHU9bC5wb2ludFsxXTtudWxsIT1jJiZudWxsIT11JiZ0aGlzLl90cnlTaG93KHtvZmZzZXRYOmMsb2Zmc2V0WTp1LHBvc2l0aW9uOmkucG9zaXRpb24sdGFyZ2V0OmwuZWx9LHIpfWVsc2UgbnVsbCE9aS54JiZudWxsIT1pLnkmJihuLmRpc3BhdGNoQWN0aW9uKHt0eXBlOiJ1cGRhdGVBeGlzUG9pbnRlciIseDppLngseTppLnl9KSx0aGlzLl90cnlTaG93KHtvZmZzZXRYOmkueCxvZmZzZXRZOmkueSxwb3NpdGlvbjppLnBvc2l0aW9uLHRhcmdldDpuLmdldFpyKCkuZmluZEhvdmVyKGkueCxpLnkpLnRhcmdldH0scikpfX0sbWFudWFsbHlIaWRlVGlwOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXRoaXMuX3Rvb2x0aXBDb250ZW50OyF0aGlzLl9hbHdheXNTaG93Q29udGVudCYmdGhpcy5fdG9vbHRpcE1vZGVsJiZyLmhpZGVMYXRlcih0aGlzLl90b29sdGlwTW9kZWwuZ2V0KCJoaWRlRGVsYXkiKSksdGhpcy5fbGFzdFg9dGhpcy5fbGFzdFk9bnVsbCxpLmZyb20hPT10aGlzLnVpZCYmdGhpcy5faGlkZShrKGksbikpfSxfbWFudWFsbHlBeGlzU2hvd1RpcDpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1pLnNlcmllc0luZGV4LG89aS5kYXRhSW5kZXgsYT10LmdldENvbXBvbmVudCgiYXhpc1BvaW50ZXIiKS5jb29yZFN5c0F4ZXNJbmZvO2lmKG51bGwhPXImJm51bGwhPW8mJm51bGwhPWEpe3ZhciBzPXQuZ2V0U2VyaWVzQnlJbmRleChyKTtpZihzKXt2YXIgbD1zLmdldERhdGEoKTtlPUMoW2wuZ2V0SXRlbU1vZGVsKG8pLHMsKHMuY29vcmRpbmF0ZVN5c3RlbXx8e30pLm1vZGVsLGVdKTtpZigiYXhpcyI9PT1lLmdldCgidHJpZ2dlciIpKXJldHVybiBuLmRpc3BhdGNoQWN0aW9uKHt0eXBlOiJ1cGRhdGVBeGlzUG9pbnRlciIsc2VyaWVzSW5kZXg6cixkYXRhSW5kZXg6byxwb3NpdGlvbjppLnBvc2l0aW9ufSksITB9fX0sX3RyeVNob3c6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRhcmdldCxpPXRoaXMuX3Rvb2x0aXBNb2RlbDtpZihpKXt0aGlzLl9sYXN0WD1lLm9mZnNldFgsdGhpcy5fbGFzdFk9ZS5vZmZzZXRZO3ZhciByPWUuZGF0YUJ5Q29vcmRTeXM7ciYmci5sZW5ndGg/dGhpcy5fc2hvd0F4aXNUb29sdGlwKHIsZSk6biYmbnVsbCE9bi5kYXRhSW5kZXg/KHRoaXMuX2xhc3REYXRhQnlDb29yZFN5cz1udWxsLHRoaXMuX3Nob3dTZXJpZXNJdGVtVG9vbHRpcChlLG4sdCkpOm4mJm4udG9vbHRpcD8odGhpcy5fbGFzdERhdGFCeUNvb3JkU3lzPW51bGwsdGhpcy5fc2hvd0NvbXBvbmVudEl0ZW1Ub29sdGlwKGUsbix0KSk6KHRoaXMuX2xhc3REYXRhQnlDb29yZFN5cz1udWxsLHRoaXMuX2hpZGUodCkpfX0sX3Nob3dPck1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldCgic2hvd0RlbGF5Iik7dD1yLmJpbmQodCx0aGlzKSxjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbW91dCksbj4wP3RoaXMuX3Nob3dUaW1vdXQ9c2V0VGltZW91dCh0LG4pOnQoKX0sX3Nob3dBeGlzVG9vbHRpcDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2VjTW9kZWwsaT10aGlzLl90b29sdGlwTW9kZWwsbz1bdC5vZmZzZXRYLHQub2Zmc2V0WV0sYT1bXSxzPVtdLGM9QyhbdC50b29sdGlwT3B0aW9uLGldKSx1PXRoaXMuX3JlbmRlck1vZGUsaD10aGlzLl9uZXdMaW5lLGQ9e307eChlLChmdW5jdGlvbihlKXt4KGUuZGF0YUJ5QXhpcywoZnVuY3Rpb24oZSl7dmFyIHQ9bi5nZXRDb21wb25lbnQoZS5heGlzRGltKyJBeGlzIixlLmF4aXNJbmRleCksaT1lLnZhbHVlLG89W107aWYodCYmbnVsbCE9aSl7dmFyIGM9Zy5nZXRWYWx1ZUxhYmVsKGksdC5heGlzLG4sZS5zZXJpZXNEYXRhSW5kaWNlcyxlLnZhbHVlTGFiZWxPcHQpO3IuZWFjaChlLnNlcmllc0RhdGFJbmRpY2VzLChmdW5jdGlvbihhKXt2YXIgbD1uLmdldFNlcmllc0J5SW5kZXgoYS5zZXJpZXNJbmRleCksaD1hLmRhdGFJbmRleEluc2lkZSxmPWwmJmwuZ2V0RGF0YVBhcmFtcyhoKTtpZihmLmF4aXNEaW09ZS5heGlzRGltLGYuYXhpc0luZGV4PWUuYXhpc0luZGV4LGYuYXhpc1R5cGU9ZS5heGlzVHlwZSxmLmF4aXNJZD1lLmF4aXNJZCxmLmF4aXNWYWx1ZT1tLmdldEF4aXNSYXdWYWx1ZSh0LmF4aXMsaSksZi5heGlzVmFsdWVMYWJlbD1jLGYpe3MucHVzaChmKTt2YXIgcCxnPWwuZm9ybWF0VG9vbHRpcChoLCEwLG51bGwsdSk7aWYoci5pc09iamVjdChnKSl7cD1nLmh0bWw7dmFyIHY9Zy5tYXJrZXJzO3IubWVyZ2UoZCx2KX1lbHNlIHA9ZztvLnB1c2gocCl9fSkpO3ZhciBmPWM7Imh0bWwiIT09dT9hLnB1c2goby5qb2luKGgpKTphLnB1c2goKGY/bC5lbmNvZGVIVE1MKGYpK2g6IiIpK28uam9pbihoKSl9fSkpfSksdGhpcyksYS5yZXZlcnNlKCksYT1hLmpvaW4odGhpcy5fbmV3TGluZSt0aGlzLl9uZXdMaW5lKTt2YXIgZj10LnBvc2l0aW9uO3RoaXMuX3Nob3dPck1vdmUoYywoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDb250ZW50Tm90Q2hhbmdlZE9uQXhpcyhlKT90aGlzLl91cGRhdGVQb3NpdGlvbihjLGYsb1swXSxvWzFdLHRoaXMuX3Rvb2x0aXBDb250ZW50LHMpOnRoaXMuX3Nob3dUb29sdGlwQ29udGVudChjLGEscyxNYXRoLnJhbmRvbSgpLG9bMF0sb1sxXSxmLHZvaWQgMCxkKX0pKX0sX3Nob3dTZXJpZXNJdGVtVG9vbHRpcDpmdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5fZWNNb2RlbCxvPXQuc2VyaWVzSW5kZXgsYT1pLmdldFNlcmllc0J5SW5kZXgobykscz10LmRhdGFNb2RlbHx8YSxsPXQuZGF0YUluZGV4LGM9dC5kYXRhVHlwZSx1PXMuZ2V0RGF0YShjKSxoPUMoW3UuZ2V0SXRlbU1vZGVsKGwpLHMsYSYmKGEuY29vcmRpbmF0ZVN5c3RlbXx8e30pLm1vZGVsLHRoaXMuX3Rvb2x0aXBNb2RlbF0pLGQ9aC5nZXQoInRyaWdnZXIiKTtpZihudWxsPT1kfHwiaXRlbSI9PT1kKXt2YXIgZixwLG09cy5nZXREYXRhUGFyYW1zKGwsYyksZz1zLmZvcm1hdFRvb2x0aXAobCwhMSxjLHRoaXMuX3JlbmRlck1vZGUpO3IuaXNPYmplY3QoZyk/KGY9Zy5odG1sLHA9Zy5tYXJrZXJzKTooZj1nLHA9bnVsbCk7dmFyIHY9Iml0ZW1fIitzLm5hbWUrIl8iK2w7dGhpcy5fc2hvd09yTW92ZShoLChmdW5jdGlvbigpe3RoaXMuX3Nob3dUb29sdGlwQ29udGVudChoLGYsbSx2LGUub2Zmc2V0WCxlLm9mZnNldFksZS5wb3NpdGlvbixlLnRhcmdldCxwKX0pKSxuKHt0eXBlOiJzaG93VGlwIixkYXRhSW5kZXhJbnNpZGU6bCxkYXRhSW5kZXg6dS5nZXRSYXdJbmRleChsKSxzZXJpZXNJbmRleDpvLGZyb206dGhpcy51aWR9KX19LF9zaG93Q29tcG9uZW50SXRlbVRvb2x0aXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXQudG9vbHRpcDtpZigic3RyaW5nIj09PXR5cGVvZiBpKXt2YXIgcj1pO2k9e2NvbnRlbnQ6cixmb3JtYXR0ZXI6cn19dmFyIG89bmV3IGYoaSx0aGlzLl90b29sdGlwTW9kZWwsdGhpcy5fZWNNb2RlbCksYT1vLmdldCgiY29udGVudCIpLHM9TWF0aC5yYW5kb20oKTt0aGlzLl9zaG93T3JNb3ZlKG8sKGZ1bmN0aW9uKCl7dGhpcy5fc2hvd1Rvb2x0aXBDb250ZW50KG8sYSxvLmdldCgiZm9ybWF0dGVyUGFyYW1zIil8fHt9LHMsZS5vZmZzZXRYLGUub2Zmc2V0WSxlLnBvc2l0aW9uLHQpfSkpLG4oe3R5cGU6InNob3dUaXAiLGZyb206dGhpcy51aWR9KX0sX3Nob3dUb29sdGlwQ29udGVudDpmdW5jdGlvbihlLHQsbixpLHIsbyxhLHMsYyl7aWYodGhpcy5fdGlja2V0PSIiLGUuZ2V0KCJzaG93Q29udGVudCIpJiZlLmdldCgic2hvdyIpKXt2YXIgdT10aGlzLl90b29sdGlwQ29udGVudCxoPWUuZ2V0KCJmb3JtYXR0ZXIiKTthPWF8fGUuZ2V0KCJwb3NpdGlvbiIpO3ZhciBkPXQ7aWYoaCYmInN0cmluZyI9PT10eXBlb2YgaClkPWwuZm9ybWF0VHBsKGgsbiwhMCk7ZWxzZSBpZigiZnVuY3Rpb24iPT09dHlwZW9mIGgpe3ZhciBmPWIoKGZ1bmN0aW9uKHQsaSl7dD09PXRoaXMuX3RpY2tldCYmKHUuc2V0Q29udGVudChpLGMsZSksdGhpcy5fdXBkYXRlUG9zaXRpb24oZSxhLHIsbyx1LG4scykpfSksdGhpcyk7dGhpcy5fdGlja2V0PWksZD1oKG4saSxmKX11LnNldENvbnRlbnQoZCxjLGUpLHUuc2hvdyhlKSx0aGlzLl91cGRhdGVQb3NpdGlvbihlLGEscixvLHUsbixzKX19LF91cGRhdGVQb3NpdGlvbjpmdW5jdGlvbihlLHQsbixpLG8sYSxzKXt2YXIgbD10aGlzLl9hcGkuZ2V0V2lkdGgoKSxjPXRoaXMuX2FwaS5nZXRIZWlnaHQoKTt0PXR8fGUuZ2V0KCJwb3NpdGlvbiIpO3ZhciB1PW8uZ2V0U2l6ZSgpLGg9ZS5nZXQoImFsaWduIiksZj1lLmdldCgidmVydGljYWxBbGlnbiIpLHA9cyYmcy5nZXRCb3VuZGluZ1JlY3QoKS5jbG9uZSgpO2lmKHMmJnAuYXBwbHlUcmFuc2Zvcm0ocy50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PT10eXBlb2YgdCYmKHQ9dChbbixpXSxhLG8uZWwscCx7dmlld1NpemU6W2wsY10sY29udGVudFNpemU6dS5zbGljZSgpfSkpLHIuaXNBcnJheSh0KSluPV8odFswXSxsKSxpPV8odFsxXSxjKTtlbHNlIGlmKHIuaXNPYmplY3QodCkpe3Qud2lkdGg9dVswXSx0LmhlaWdodD11WzFdO3ZhciBtPWQuZ2V0TGF5b3V0UmVjdCh0LHt3aWR0aDpsLGhlaWdodDpjfSk7bj1tLngsaT1tLnksaD1udWxsLGY9bnVsbH1lbHNlIGlmKCJzdHJpbmciPT09dHlwZW9mIHQmJnMpe3ZhciBnPUUodCxwLHUpO249Z1swXSxpPWdbMV19ZWxzZXtnPVQobixpLG8sbCxjLGg/bnVsbDoyMCxmP251bGw6MjApO249Z1swXSxpPWdbMV19aWYoaCYmKG4tPUkoaCk/dVswXS8yOiJyaWdodCI9PT1oP3VbMF06MCksZiYmKGktPUkoZik/dVsxXS8yOiJib3R0b20iPT09Zj91WzFdOjApLGUuZ2V0KCJjb25maW5lIikpe2c9TShuLGksbyxsLGMpO249Z1swXSxpPWdbMV19by5tb3ZlVG8obixpKX0sX3VwZGF0ZUNvbnRlbnROb3RDaGFuZ2VkT25BeGlzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xhc3REYXRhQnlDb29yZFN5cyxuPSEhdCYmdC5sZW5ndGg9PT1lLmxlbmd0aDtyZXR1cm4gbiYmeCh0LChmdW5jdGlvbih0LGkpe3ZhciByPXQuZGF0YUJ5QXhpc3x8e30sbz1lW2ldfHx7fSxhPW8uZGF0YUJ5QXhpc3x8W107biY9ci5sZW5ndGg9PT1hLmxlbmd0aCxuJiZ4KHIsKGZ1bmN0aW9uKGUsdCl7dmFyIGk9YVt0XXx8e30scj1lLnNlcmllc0RhdGFJbmRpY2VzfHxbXSxvPWkuc2VyaWVzRGF0YUluZGljZXN8fFtdO24mPWUudmFsdWU9PT1pLnZhbHVlJiZlLmF4aXNUeXBlPT09aS5heGlzVHlwZSYmZS5heGlzSWQ9PT1pLmF4aXNJZCYmci5sZW5ndGg9PT1vLmxlbmd0aCxuJiZ4KHIsKGZ1bmN0aW9uKGUsdCl7dmFyIGk9b1t0XTtuJj1lLnNlcmllc0luZGV4PT09aS5zZXJpZXNJbmRleCYmZS5kYXRhSW5kZXg9PT1pLmRhdGFJbmRleH0pKX0pKX0pKSx0aGlzLl9sYXN0RGF0YUJ5Q29vcmRTeXM9ZSwhIW59LF9oaWRlOmZ1bmN0aW9uKGUpe3RoaXMuX2xhc3REYXRhQnlDb29yZFN5cz1udWxsLGUoe3R5cGU6ImhpZGVUaXAiLGZyb206dGhpcy51aWR9KX0sZGlzcG9zZTpmdW5jdGlvbihlLHQpe28ubm9kZXx8KHRoaXMuX3Rvb2x0aXBDb250ZW50LmRpc3Bvc2UoKSxwLnVucmVnaXN0ZXIoIml0ZW1Ub29sdGlwIix0KSl9fSk7ZnVuY3Rpb24gQyhlKXt2YXIgdD1lLnBvcCgpO3doaWxlKGUubGVuZ3RoKXt2YXIgbj1lLnBvcCgpO24mJihmLmlzSW5zdGFuY2UobikmJihuPW4uZ2V0KCJ0b29sdGlwIiwhMCkpLCJzdHJpbmciPT09dHlwZW9mIG4mJihuPXtmb3JtYXR0ZXI6bn0pLHQ9bmV3IGYobix0LHQuZWNNb2RlbCkpfXJldHVybiB0fWZ1bmN0aW9uIGsoZSx0KXtyZXR1cm4gZS5kaXNwYXRjaEFjdGlvbnx8ci5iaW5kKHQuZGlzcGF0Y2hBY3Rpb24sdCl9ZnVuY3Rpb24gVChlLHQsbixpLHIsbyxhKXt2YXIgcz1uLmdldE91dGVyU2l6ZSgpLGw9cy53aWR0aCxjPXMuaGVpZ2h0O3JldHVybiBudWxsIT1vJiYoZStsK28+aT9lLT1sK286ZSs9byksbnVsbCE9YSYmKHQrYythPnI/dC09YythOnQrPWEpLFtlLHRdfWZ1bmN0aW9uIE0oZSx0LG4saSxyKXt2YXIgbz1uLmdldE91dGVyU2l6ZSgpLGE9by53aWR0aCxzPW8uaGVpZ2h0O3JldHVybiBlPU1hdGgubWluKGUrYSxpKS1hLHQ9TWF0aC5taW4odCtzLHIpLXMsZT1NYXRoLm1heChlLDApLHQ9TWF0aC5tYXgodCwwKSxbZSx0XX1mdW5jdGlvbiBFKGUsdCxuKXt2YXIgaT1uWzBdLHI9blsxXSxvPTUsYT0wLHM9MCxsPXQud2lkdGgsYz10LmhlaWdodDtzd2l0Y2goZSl7Y2FzZSJpbnNpZGUiOmE9dC54K2wvMi1pLzIscz10LnkrYy8yLXIvMjticmVhaztjYXNlInRvcCI6YT10LngrbC8yLWkvMixzPXQueS1yLW87YnJlYWs7Y2FzZSJib3R0b20iOmE9dC54K2wvMi1pLzIscz10LnkrYytvO2JyZWFrO2Nhc2UibGVmdCI6YT10LngtaS1vLHM9dC55K2MvMi1yLzI7YnJlYWs7Y2FzZSJyaWdodCI6YT10LngrbCtvLHM9dC55K2MvMi1yLzJ9cmV0dXJuW2Esc119ZnVuY3Rpb24gSShlKXtyZXR1cm4iY2VudGVyIj09PWV8fCJtaWRkbGUiPT09ZX1lLmV4cG9ydHM9U30sNDMxOTpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMjJkMSIpLG89bigiZTBkMyIpLGE9by5tYWtlSW5uZXIscz1uKCI2MjVlIiksbD1zLmVuYWJsZUNsYXNzRXh0ZW5kLGM9cy5lbmFibGVDbGFzc0NoZWNrLHU9bigiMzkwMSIpLGg9bigiOWJkYiIpLGQ9bigiZmUyMSIpLGY9bigiNTUxZiIpLHA9aS5taXhpbixtPWEoKTtmdW5jdGlvbiBnKGUsdCxuKXt0aGlzLnBhcmVudE1vZGVsPXQsdGhpcy5lY01vZGVsPW4sdGhpcy5vcHRpb249ZX1mdW5jdGlvbiB2KGUsdCxuKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldJiYoZT1lJiYib2JqZWN0Ij09PXR5cGVvZiBlP2VbdFtpXV06bnVsbCxudWxsPT1lKSlicmVhaztyZXR1cm4gbnVsbD09ZSYmbiYmKGU9bi5nZXQodCkpLGV9ZnVuY3Rpb24geShlLHQpe3ZhciBuPW0oZSkuZ2V0UGFyZW50O3JldHVybiBuP24uY2FsbChlLHQpOmUucGFyZW50TW9kZWx9Zy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmcsaW5pdDpudWxsLG1lcmdlT3B0aW9uOmZ1bmN0aW9uKGUpe2kubWVyZ2UodGhpcy5vcHRpb24sZSwhMCl9LGdldDpmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3RoaXMub3B0aW9uOnYodGhpcy5vcHRpb24sdGhpcy5wYXJzZVBhdGgoZSksIXQmJnkodGhpcyxlKSl9LGdldFNoYWxsb3c6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wdGlvbixpPW51bGw9PW4/bjpuW2VdLHI9IXQmJnkodGhpcyxlKTtyZXR1cm4gbnVsbD09aSYmciYmKGk9ci5nZXRTaGFsbG93KGUpKSxpfSxnZXRNb2RlbDpmdW5jdGlvbihlLHQpe3ZhciBuLGk9bnVsbD09ZT90aGlzLm9wdGlvbjp2KHRoaXMub3B0aW9uLGU9dGhpcy5wYXJzZVBhdGgoZSkpO3JldHVybiB0PXR8fChuPXkodGhpcyxlKSkmJm4uZ2V0TW9kZWwoZSksbmV3IGcoaSx0LHRoaXMuZWNNb2RlbCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5vcHRpb259LHJlc3RvcmVEYXRhOmZ1bmN0aW9uKCl7fSxjbG9uZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBlKGkuY2xvbmUodGhpcy5vcHRpb24pKX0sc2V0UmVhZE9ubHk6ZnVuY3Rpb24oZSl7fSxwYXJzZVBhdGg6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZSYmKGU9ZS5zcGxpdCgiLiIpKSxlfSxjdXN0b21pemVHZXRQYXJlbnQ6ZnVuY3Rpb24oZSl7bSh0aGlzKS5nZXRQYXJlbnQ9ZX0saXNBbmltYXRpb25FbmFibGVkOmZ1bmN0aW9uKCl7aWYoIXIubm9kZSl7aWYobnVsbCE9dGhpcy5vcHRpb24uYW5pbWF0aW9uKXJldHVybiEhdGhpcy5vcHRpb24uYW5pbWF0aW9uO2lmKHRoaXMucGFyZW50TW9kZWwpcmV0dXJuIHRoaXMucGFyZW50TW9kZWwuaXNBbmltYXRpb25FbmFibGVkKCl9fX0sbChnKSxjKGcpLHAoZyx1KSxwKGcsaCkscChnLGQpLHAoZyxmKTt2YXIgYj1nO2UuZXhwb3J0cz1ifSw0MzI4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiNDEyNyIpLHI9bigiOWU2YSIpLG89bigiYjMxMyIpO2UuZXhwb3J0cz17Zm9ybWF0czpvLHBhcnNlOnIsc3RyaW5naWZ5Oml9fSw0MzM4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0YmY2Iikscj1uKCIyMDM5Iik7ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPVtdO3JldHVybiBlLmVhY2hDb21wb25lbnQoInNpbmdsZUF4aXMiLChmdW5jdGlvbihyLG8pe3ZhciBhPW5ldyBpKHIsZSx0KTthLm5hbWU9InNpbmdsZV8iK28sYS5yZXNpemUocix0KSxyLmNvb3JkaW5hdGVTeXN0ZW09YSxuLnB1c2goYSl9KSksZS5lYWNoU2VyaWVzKChmdW5jdGlvbih0KXtpZigic2luZ2xlQXhpcyI9PT10LmdldCgiY29vcmRpbmF0ZVN5c3RlbSIpKXt2YXIgbj1lLnF1ZXJ5Q29tcG9uZW50cyh7bWFpblR5cGU6InNpbmdsZUF4aXMiLGluZGV4OnQuZ2V0KCJzaW5nbGVBeGlzSW5kZXgiKSxpZDp0LmdldCgic2luZ2xlQXhpc0lkIil9KVswXTt0LmNvb3JkaW5hdGVTeXN0ZW09biYmbi5jb29yZGluYXRlU3lzdGVtfX0pKSxufXIucmVnaXN0ZXIoInNpbmdsZSIse2NyZWF0ZTpvLGRpbWVuc2lvbnM6aS5wcm90b3R5cGUuZGltZW5zaW9uc30pfSw0MzYyOmZ1bmN0aW9uKGUsdCxuKXt0Lm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dC5zaGlmdCgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5hcHBseShudWxsLHQpfSksMCl9LHQucGxhdGZvcm09dC5hcmNoPXQuZXhlY1BhdGg9dC50aXRsZT0iYnJvd3NlciIsdC5waWQ9MSx0LmJyb3dzZXI9ITAsdC5lbnY9e30sdC5hcmd2PVtdLHQuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIk5vIHN1Y2ggbW9kdWxlLiAoUG9zc2libHkgbm90IHlldCBsb2FkZWQpIil9LGZ1bmN0aW9uKCl7dmFyIGUsaT0iLyI7dC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdC5jaGRpcj1mdW5jdGlvbih0KXtlfHwoZT1uKCJkZjdjIikpLGk9ZS5yZXNvbHZlKHQsaSl9fSgpLHQuZXhpdD10LmtpbGw9dC51bWFzaz10LmRsb3Blbj10LnVwdGltZT10Lm1lbW9yeVVzYWdlPXQudXZDb3VudGVycz1mdW5jdGlvbigpe30sdC5mZWF0dXJlcz17fX0sIjQzYjgiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIyNDQ5Iikscj1pLmV4dGVuZCh7dHlwZToibWFya0FyZWEiLGRlZmF1bHRPcHRpb246e3psZXZlbDowLHo6MSx0b29sdGlwOnt0cmlnZ2VyOiJpdGVtIn0sYW5pbWF0aW9uOiExLGxhYmVsOntzaG93OiEwLHBvc2l0aW9uOiJ0b3AifSxpdGVtU3R5bGU6e2JvcmRlcldpZHRoOjB9LGVtcGhhc2lzOntsYWJlbDp7c2hvdzohMCxwb3NpdGlvbjoidG9wIn19fX0pO2UuZXhwb3J0cz1yfSw0NDExOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIGk9bigiM2ViYSIpLHI9bigiNTVhYyIpLG89ZnVuY3Rpb24oKXt9LGE9WyJ0cmVlbWFwWm9vbVRvTm9kZSIsInRyZWVtYXBSZW5kZXIiLCJ0cmVlbWFwTW92ZSJdLHM9MDtzPGEubGVuZ3RoO3MrKylpLnJlZ2lzdGVyQWN0aW9uKHt0eXBlOmFbc10sdXBkYXRlOiJ1cGRhdGVWaWV3In0sbyk7aS5yZWdpc3RlckFjdGlvbih7dHlwZToidHJlZW1hcFJvb3RUb05vZGUiLHVwZGF0ZToidXBkYXRlVmlldyJ9LChmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4odCxuKXt2YXIgaT1bInRyZWVtYXBab29tVG9Ob2RlIiwidHJlZW1hcFJvb3RUb05vZGUiXSxvPXIucmV0cmlldmVUYXJnZXRJbmZvKGUsaSx0KTtpZihvKXt2YXIgYT10LmdldFZpZXdSb290KCk7YSYmKGUuZGlyZWN0aW9uPXIuYWJvdmVWaWV3Um9vdChhLG8ubm9kZSk/InJvbGxVcCI6ImRyaWxsRG93biIpLHQucmVzZXRWaWV3Um9vdChvLm5vZGUpfX10LmVhY2hDb21wb25lbnQoe21haW5UeXBlOiJzZXJpZXMiLHN1YlR5cGU6InRyZWVtYXAiLHF1ZXJ5OmV9LG4pfSkpfSw0NDM2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI3NGNiIik7ZnVuY3Rpb24gcihlKXt0aGlzLl90YXJnZXQ9ZS50YXJnZXQsdGhpcy5fbGlmZT1lLmxpZmV8fDFlMyx0aGlzLl9kZWxheT1lLmRlbGF5fHwwLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMubG9vcD1udWxsIT1lLmxvb3AmJmUubG9vcCx0aGlzLmdhcD1lLmdhcHx8MCx0aGlzLmVhc2luZz1lLmVhc2luZ3x8IkxpbmVhciIsdGhpcy5vbmZyYW1lPWUub25mcmFtZSx0aGlzLm9uZGVzdHJveT1lLm9uZGVzdHJveSx0aGlzLm9ucmVzdGFydD1lLm9ucmVzdGFydCx0aGlzLl9wYXVzZWRUaW1lPTAsdGhpcy5fcGF1c2VkPSExfXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLHN0ZXA6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9pbml0aWFsaXplZHx8KHRoaXMuX3N0YXJ0VGltZT1lK3RoaXMuX2RlbGF5LHRoaXMuX2luaXRpYWxpemVkPSEwKSx0aGlzLl9wYXVzZWQpdGhpcy5fcGF1c2VkVGltZSs9dDtlbHNle3ZhciBuPShlLXRoaXMuX3N0YXJ0VGltZS10aGlzLl9wYXVzZWRUaW1lKS90aGlzLl9saWZlO2lmKCEobjwwKSl7bj1NYXRoLm1pbihuLDEpO3ZhciByPXRoaXMuZWFzaW5nLG89InN0cmluZyI9PT10eXBlb2Ygcj9pW3JdOnIsYT0iZnVuY3Rpb24iPT09dHlwZW9mIG8/byhuKTpuO3JldHVybiB0aGlzLmZpcmUoImZyYW1lIixhKSwxPT09bj90aGlzLmxvb3A/KHRoaXMucmVzdGFydChlKSwicmVzdGFydCIpOih0aGlzLl9uZWVkc1JlbW92ZT0hMCwiZGVzdHJveSIpOm51bGx9fX0scmVzdGFydDpmdW5jdGlvbihlKXt2YXIgdD0oZS10aGlzLl9zdGFydFRpbWUtdGhpcy5fcGF1c2VkVGltZSkldGhpcy5fbGlmZTt0aGlzLl9zdGFydFRpbWU9ZS10K3RoaXMuZ2FwLHRoaXMuX3BhdXNlZFRpbWU9MCx0aGlzLl9uZWVkc1JlbW92ZT0hMX0sZmlyZTpmdW5jdGlvbihlLHQpe2U9Im9uIitlLHRoaXNbZV0mJnRoaXNbZV0odGhpcy5fdGFyZ2V0LHQpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0scmVzdW1lOmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExfX07dmFyIG89cjtlLmV4cG9ydHM9b30sIjQ0YWQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJkMDM5Iikscj1uKCJjNmI2Iiksbz0iIi5zcGxpdDtlLmV4cG9ydHM9aSgoZnVuY3Rpb24oKXtyZXR1cm4hT2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PXIoZSk/by5jYWxsKGUsIiIpOk9iamVjdChlKX06T2JqZWN0fSwiNDRkMiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImI2MjIiKSxyPW4oIjdjNzMiKSxvPW4oIjliZjIiKSxhPWkoInVuc2NvcGFibGVzIikscz1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1zW2FdJiZvLmYocyxhLHtjb25maWd1cmFibGU6ITAsdmFsdWU6cihudWxsKX0pLGUuZXhwb3J0cz1mdW5jdGlvbihlKXtzW2FdW2VdPSEwfX0sIjQ0ZGUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJkYTg0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49aS5jb25zb2xlO24mJm4uZXJyb3ImJigxPT09YXJndW1lbnRzLmxlbmd0aD9uLmVycm9yKGUpOm4uZXJyb3IoZSx0KSl9fSwiNDRlNyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjg2MWQiKSxyPW4oImM2YjYiKSxvPW4oImI2MjIiKSxhPW8oIm1hdGNoIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBpKGUpJiYodm9pZCAwIT09KHQ9ZVthXSk/ISF0OiJSZWdFeHAiPT1yKGUpKX19LCI0NGZiIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiNTVhYyIpLG89InN1bmJ1cnN0Um9vdFRvTm9kZSI7aS5yZWdpc3RlckFjdGlvbih7dHlwZTpvLHVwZGF0ZToidXBkYXRlVmlldyJ9LChmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4odCxuKXt2YXIgaT1yLnJldHJpZXZlVGFyZ2V0SW5mbyhlLFtvXSx0KTtpZihpKXt2YXIgYT10LmdldFZpZXdSb290KCk7YSYmKGUuZGlyZWN0aW9uPXIuYWJvdmVWaWV3Um9vdChhLGkubm9kZSk/InJvbGxVcCI6ImRyaWxsRG93biIpLHQucmVzZXRWaWV3Um9vdChpLm5vZGUpfX10LmVhY2hDb21wb25lbnQoe21haW5UeXBlOiJzZXJpZXMiLHN1YlR5cGU6InN1bmJ1cnN0IixxdWVyeTplfSxuKX0pKTt2YXIgYT0ic3VuYnVyc3RIaWdobGlnaHQiO2kucmVnaXN0ZXJBY3Rpb24oe3R5cGU6YSx1cGRhdGU6InVwZGF0ZVZpZXcifSwoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ci5yZXRyaWV2ZVRhcmdldEluZm8oZSxbYV0sdCk7aSYmKGUuaGlnaGxpZ2h0PWkubm9kZSl9dC5lYWNoQ29tcG9uZW50KHttYWluVHlwZToic2VyaWVzIixzdWJUeXBlOiJzdW5idXJzdCIscXVlcnk6ZX0sbil9KSk7dmFyIHM9InN1bmJ1cnN0VW5oaWdobGlnaHQiO2kucmVnaXN0ZXJBY3Rpb24oe3R5cGU6cyx1cGRhdGU6InVwZGF0ZVZpZXcifSwoZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKHQsbil7ZS51bmhpZ2hsaWdodD0hMH10LmVhY2hDb21wb25lbnQoe21haW5UeXBlOiJzZXJpZXMiLHN1YlR5cGU6InN1bmJ1cnN0IixxdWVyeTplfSxuKX0pKX0sNDUyNzpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMjMwNiIpLHI9bigiNmQ4YiIpO2Z1bmN0aW9uIG8oZSx0LG4pe2kuR3JvdXAuY2FsbCh0aGlzKSx0aGlzLl9jcmVhdGVQb2x5bGluZShlLHQsbil9dmFyIGE9by5wcm90b3R5cGU7YS5fY3JlYXRlUG9seWxpbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0SXRlbUxheW91dCh0KSxvPW5ldyBpLlBvbHlsaW5lKHtzaGFwZTp7cG9pbnRzOnJ9fSk7dGhpcy5hZGQobyksdGhpcy5fdXBkYXRlQ29tbW9uU3RsKGUsdCxuKX0sYS51cGRhdGVEYXRhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmhvc3RNb2RlbCxvPXRoaXMuY2hpbGRBdCgwKSxhPXtzaGFwZTp7cG9pbnRzOmUuZ2V0SXRlbUxheW91dCh0KX19O2kudXBkYXRlUHJvcHMobyxhLHIsdCksdGhpcy5fdXBkYXRlQ29tbW9uU3RsKGUsdCxuKX0sYS5fdXBkYXRlQ29tbW9uU3RsPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzLmNoaWxkQXQoMCksYT1lLmdldEl0ZW1Nb2RlbCh0KSxzPWUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpLGw9biYmbi5saW5lU3R5bGUsYz1uJiZuLmhvdmVyTGluZVN0eWxlO24mJiFlLmhhc0l0ZW1PcHRpb258fChsPWEuZ2V0TW9kZWwoImxpbmVTdHlsZSIpLmdldExpbmVTdHlsZSgpLGM9YS5nZXRNb2RlbCgiZW1waGFzaXMubGluZVN0eWxlIikuZ2V0TGluZVN0eWxlKCkpLG8udXNlU3R5bGUoci5kZWZhdWx0cyh7c3Ryb2tlTm9TY2FsZTohMCxmaWxsOiJub25lIixzdHJva2U6c30sbCkpLG8uaG92ZXJTdHlsZT1jLGkuc2V0SG92ZXJTdHlsZSh0aGlzKX0sYS51cGRhdGVMYXlvdXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNoaWxkQXQoMCk7bi5zZXRTaGFwZSgicG9pbnRzIixlLmdldEl0ZW1MYXlvdXQodCkpfSxyLmluaGVyaXRzKG8saS5Hcm91cCk7dmFyIHM9bztlLmV4cG9ydHM9c30sNDU3MzpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiY2JlNSIpLHI9aS5leHRlbmQoe3R5cGU6InJpbmciLHNoYXBlOntjeDowLGN5OjAscjowLHIwOjB9LGJ1aWxkUGF0aDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuY3gsaT10LmN5LHI9MipNYXRoLlBJO2UubW92ZVRvKG4rdC5yLGkpLGUuYXJjKG4saSx0LnIsMCxyLCExKSxlLm1vdmVUbyhuK3QucjAsaSksZS5hcmMobixpLHQucjAsMCxyLCEwKX19KTtlLmV4cG9ydHM9cn0sNDY1MDpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiNmQ4YiIpO2Z1bmN0aW9uIG8oZSx0LG4pe3ZhciBpLG89e30sYT0idG9nZ2xlU2VsZWN0ZWQiPT09ZTtyZXR1cm4gbi5lYWNoQ29tcG9uZW50KCJsZWdlbmQiLChmdW5jdGlvbihuKXthJiZudWxsIT1pP25baT8ic2VsZWN0IjoidW5TZWxlY3QiXSh0Lm5hbWUpOiJhbGxTZWxlY3QiPT09ZXx8ImludmVyc2VTZWxlY3QiPT09ZT9uW2VdKCk6KG5bZV0odC5uYW1lKSxpPW4uaXNTZWxlY3RlZCh0Lm5hbWUpKTt2YXIgcz1uLmdldERhdGEoKTtyLmVhY2gocywoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXQoIm5hbWUiKTtpZigiXG4iIT09dCYmIiIhPT10KXt2YXIgaT1uLmlzU2VsZWN0ZWQodCk7by5oYXNPd25Qcm9wZXJ0eSh0KT9vW3RdPW9bdF0mJmk6b1t0XT1pfX0pKX0pKSwiYWxsU2VsZWN0Ij09PWV8fCJpbnZlcnNlU2VsZWN0Ij09PWU/e3NlbGVjdGVkOm99OntuYW1lOnQubmFtZSxzZWxlY3RlZDpvfX1pLnJlZ2lzdGVyQWN0aW9uKCJsZWdlbmRUb2dnbGVTZWxlY3QiLCJsZWdlbmRzZWxlY3RjaGFuZ2VkIixyLmN1cnJ5KG8sInRvZ2dsZVNlbGVjdGVkIikpLGkucmVnaXN0ZXJBY3Rpb24oImxlZ2VuZEFsbFNlbGVjdCIsImxlZ2VuZHNlbGVjdGFsbCIsci5jdXJyeShvLCJhbGxTZWxlY3QiKSksaS5yZWdpc3RlckFjdGlvbigibGVnZW5kSW52ZXJzZVNlbGVjdCIsImxlZ2VuZGludmVyc2VzZWxlY3QiLHIuY3VycnkobywiaW52ZXJzZVNlbGVjdCIpKSxpLnJlZ2lzdGVyQWN0aW9uKCJsZWdlbmRTZWxlY3QiLCJsZWdlbmRzZWxlY3RlZCIsci5jdXJyeShvLCJzZWxlY3QiKSksaS5yZWdpc3RlckFjdGlvbigibGVnZW5kVW5TZWxlY3QiLCJsZWdlbmR1bnNlbGVjdGVkIixyLmN1cnJ5KG8sInVuU2VsZWN0IikpfSwiNDY3ZiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCIyZDgzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztuLnN0YXR1cyYmciYmIXIobi5zdGF0dXMpP3QoaSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK24uc3RhdHVzLG4uY29uZmlnLG51bGwsbi5yZXF1ZXN0LG4pKTplKG4pfX0sIjQ3MWUiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lLmdldFJlY3QoKSxuPWUuZ2V0UmFuZ2VJbmZvKCk7cmV0dXJue2Nvb3JkU3lzOnt0eXBlOiJjYWxlbmRhciIseDp0LngseTp0Lnksd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsY2VsbFdpZHRoOmUuZ2V0Q2VsbFdpZHRoKCksY2VsbEhlaWdodDplLmdldENlbGxIZWlnaHQoKSxyYW5nZUluZm86e3N0YXJ0Om4uc3RhcnQsZW5kOm4uZW5kLHdlZWtzOm4ud2Vla3MsZGF5Q291bnQ6bi5hbGxEYXl9fSxhcGk6e2Nvb3JkOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuZGF0YVRvUG9pbnQodCxuKX19fX1lLmV4cG9ydHM9bn0sNDcyNjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4oaSl7aWYodFtpXSlyZXR1cm4gdFtpXS5leHBvcnRzO3ZhciByPXRbaV09e2k6aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoci5leHBvcnRzLHIsci5leHBvcnRzLG4pLHIubD0hMCxyLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQsaSl7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Oml9KX0sbi5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmInN0cmluZyIhPXR5cGVvZiBlKWZvcih2YXIgciBpbiBlKW4uZChpLHIsZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxyKSk7cmV0dXJuIGl9LG4ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gbi5kKHQsImEiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPSIvZGlzdC8iLG4obi5zPTU4KX0oezA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUsdCxuLGkscixvLGEscyl7dmFyIGwsYz0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZS5vcHRpb25zOmU7aWYodCYmKGMucmVuZGVyPXQsYy5zdGF0aWNSZW5kZXJGbnM9bixjLl9jb21waWxlZD0hMCksaSYmKGMuZnVuY3Rpb25hbD0hMCksbyYmKGMuX3Njb3BlSWQ9ImRhdGEtdi0iK28pLGE/KGw9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQsZXx8InVuZGVmaW5lZCI9PT10eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfX3x8KGU9X19WVUVfU1NSX0NPTlRFWFRfXyksciYmci5jYWxsKHRoaXMsZSksZSYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChhKX0sYy5fc3NyUmVnaXN0ZXI9bCk6ciYmKGw9cz9mdW5jdGlvbigpe3IuY2FsbCh0aGlzLHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCl9OnIpLGwpaWYoYy5mdW5jdGlvbmFsKXtjLl9pbmplY3RTdHlsZXM9bDt2YXIgdT1jLnJlbmRlcjtjLnJlbmRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBsLmNhbGwodCksdShlLHQpfX1lbHNle3ZhciBoPWMuYmVmb3JlQ3JlYXRlO2MuYmVmb3JlQ3JlYXRlPWg/W10uY29uY2F0KGgsbCk6W2xdfXJldHVybntleHBvcnRzOmUsb3B0aW9uczpjfX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSl9LDE1OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjE0ZTkiKX0sMTg6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiZGNkYyIpfSwyMTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJkMzk3Iil9LDI2OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjkyZmEiKX0sMzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI4MTIyIil9LDMxOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjJhNWUiKX0sNDA6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiZTQ1MiIpfSw1MTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJmNDk0Iil9LDU4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bi5yKHQpO3ZhciBpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtjbGFzczpbImVsLWNhc2NhZGVyLXBhbmVsIixlLmJvcmRlciYmImlzLWJvcmRlcmVkIl0sb246e2tleWRvd246ZS5oYW5kbGVLZXlEb3dufX0sZS5fbChlLm1lbnVzLChmdW5jdGlvbihlLHQpe3JldHVybiBuKCJjYXNjYWRlci1tZW51Iix7a2V5OnQscmVmOiJtZW51IixyZWZJbkZvcjohMCxhdHRyczp7aW5kZXg6dCxub2RlczplfX0pfSkpLDEpfSxyPVtdO2kuX3dpdGhTdHJpcHBlZD0hMDt2YXIgbyxhLHM9bigyNiksbD1uLm4ocyksYz1uKDE1KSx1PW4ubihjKSxoPW4oMTgpLGQ9bi5uKGgpLGY9big1MSkscD1uLm4oZiksbT1uKDMpLGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCl9LHY9e2luamVjdDpbInBhbmVsIl0sY29tcG9uZW50czp7RWxDaGVja2JveDpkLmEsRWxSYWRpbzpwLmF9LHByb3BzOntub2RlOntyZXF1aXJlZDohMH0sbm9kZUlkOlN0cmluZ30sY29tcHV0ZWQ6e2NvbmZpZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmNvbmZpZ30saXNMZWFmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5pc0xlYWZ9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLmlzRGlzYWJsZWR9LGNoZWNrZWRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhbmVsLmNoZWNrZWRWYWx1ZX0saXNDaGVja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5pc1NhbWVOb2RlKHRoaXMuY2hlY2tlZFZhbHVlKX0saW5BY3RpdmVQYXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJblBhdGgodGhpcy5wYW5lbC5hY3RpdmVQYXRoKX0saW5DaGVja2VkUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuISF0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5JiZ0aGlzLnBhbmVsLmNoZWNrZWROb2RlUGF0aHMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIGUuaXNJblBhdGgodCl9KSl9LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5nZXRWYWx1ZUJ5T3B0aW9uKCl9fSxtZXRob2RzOntoYW5kbGVFeHBhbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wYW5lbCxuPXRoaXMubm9kZSxpPXRoaXMuaXNEaXNhYmxlZCxyPXRoaXMuY29uZmlnLG89ci5tdWx0aXBsZSxhPXIuY2hlY2tTdHJpY3RseTshYSYmaXx8bi5sb2FkaW5nfHwoci5sYXp5JiYhbi5sb2FkZWQ/dC5sYXp5TG9hZChuLChmdW5jdGlvbigpe3ZhciB0PWUuaXNMZWFmO2lmKHR8fGUuaGFuZGxlRXhwYW5kKCksbyl7dmFyIGk9ISF0JiZuLmNoZWNrZWQ7ZS5oYW5kbGVNdWx0aUNoZWNrQ2hhbmdlKGkpfX0pKTp0LmhhbmRsZUV4cGFuZChuKSl9LGhhbmRsZUNoZWNrQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYW5lbCx0PXRoaXMudmFsdWUsbj10aGlzLm5vZGU7ZS5oYW5kbGVDaGVja0NoYW5nZSh0KSxlLmhhbmRsZUV4cGFuZChuKX0saGFuZGxlTXVsdGlDaGVja0NoYW5nZTpmdW5jdGlvbihlKXt0aGlzLm5vZGUuZG9DaGVjayhlKSx0aGlzLnBhbmVsLmNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCl9LGlzSW5QYXRoOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubm9kZSxuPWVbdC5sZXZlbC0xXXx8e307cmV0dXJuIG4udWlkPT09dC51aWR9LHJlbmRlclByZWZpeDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmlzTGVhZixuPXRoaXMuaXNDaGVja2VkLGk9dGhpcy5jb25maWcscj1pLmNoZWNrU3RyaWN0bHksbz1pLm11bHRpcGxlO3JldHVybiBvP3RoaXMucmVuZGVyQ2hlY2tib3goZSk6cj90aGlzLnJlbmRlclJhZGlvKGUpOnQmJm4/dGhpcy5yZW5kZXJDaGVja0ljb24oZSk6bnVsbH0scmVuZGVyUG9zdGZpeDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm5vZGUsbj10aGlzLmlzTGVhZjtyZXR1cm4gdC5sb2FkaW5nP3RoaXMucmVuZGVyTG9hZGluZ0ljb24oZSk6bj9udWxsOnRoaXMucmVuZGVyRXhwYW5kSWNvbihlKX0scmVuZGVyQ2hlY2tib3g6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5ub2RlLG49dGhpcy5jb25maWcsaT10aGlzLmlzRGlzYWJsZWQscj17b246e2NoYW5nZTp0aGlzLmhhbmRsZU11bHRpQ2hlY2tDaGFuZ2V9LG5hdGl2ZU9uOnt9fTtyZXR1cm4gbi5jaGVja1N0cmljdGx5JiYoci5uYXRpdmVPbi5jbGljaz1nKSxlKCJlbC1jaGVja2JveCIsbCgpKFt7YXR0cnM6e3ZhbHVlOnQuY2hlY2tlZCxpbmRldGVybWluYXRlOnQuaW5kZXRlcm1pbmF0ZSxkaXNhYmxlZDppfX0scl0pKX0scmVuZGVyUmFkaW86ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jaGVja2VkVmFsdWUsbj10aGlzLnZhbHVlLGk9dGhpcy5pc0Rpc2FibGVkO3JldHVybiBPYmplY3QobVsiaXNFcXVhbCJdKShuLHQpJiYobj10KSxlKCJlbC1yYWRpbyIse2F0dHJzOnt2YWx1ZTp0LGxhYmVsOm4sZGlzYWJsZWQ6aX0sb246e2NoYW5nZTp0aGlzLmhhbmRsZUNoZWNrQ2hhbmdlfSxuYXRpdmVPbjp7Y2xpY2s6Z319LFtlKCJzcGFuIildKX0scmVuZGVyQ2hlY2tJY29uOmZ1bmN0aW9uKGUpe3JldHVybiBlKCJpIix7Y2xhc3M6ImVsLWljb24tY2hlY2sgZWwtY2FzY2FkZXItbm9kZV9fcHJlZml4In0pfSxyZW5kZXJMb2FkaW5nSWNvbjpmdW5jdGlvbihlKXtyZXR1cm4gZSgiaSIse2NsYXNzOiJlbC1pY29uLWxvYWRpbmcgZWwtY2FzY2FkZXItbm9kZV9fcG9zdGZpeCJ9KX0scmVuZGVyRXhwYW5kSWNvbjpmdW5jdGlvbihlKXtyZXR1cm4gZSgiaSIse2NsYXNzOiJlbC1pY29uLWFycm93LXJpZ2h0IGVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXgifSl9LHJlbmRlckNvbnRlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYW5lbCxuPXRoaXMubm9kZSxpPXQucmVuZGVyTGFiZWxGbixyPWk/aSh7bm9kZTpuLGRhdGE6bi5kYXRhfSk6bnVsbDtyZXR1cm4gZSgic3BhbiIse2NsYXNzOiJlbC1jYXNjYWRlci1ub2RlX19sYWJlbCJ9LFtyfHxuLmxhYmVsXSl9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuaW5BY3RpdmVQYXRoLGk9dGhpcy5pbkNoZWNrZWRQYXRoLHI9dGhpcy5pc0NoZWNrZWQsbz10aGlzLmlzTGVhZixhPXRoaXMuaXNEaXNhYmxlZCxzPXRoaXMuY29uZmlnLGM9dGhpcy5ub2RlSWQsdT1zLmV4cGFuZFRyaWdnZXIsaD1zLmNoZWNrU3RyaWN0bHksZD1zLm11bHRpcGxlLGY9IWgmJmEscD17b246e319O3JldHVybiJjbGljayI9PT11P3Aub24uY2xpY2s9dGhpcy5oYW5kbGVFeHBhbmQ6KHAub24ubW91c2VlbnRlcj1mdW5jdGlvbihlKXt0LmhhbmRsZUV4cGFuZCgpLHQuJGVtaXQoImV4cGFuZCIsZSl9LHAub24uZm9jdXM9ZnVuY3Rpb24oZSl7dC5oYW5kbGVFeHBhbmQoKSx0LiRlbWl0KCJleHBhbmQiLGUpfSksIW98fGF8fGh8fGR8fChwLm9uLmNsaWNrPXRoaXMuaGFuZGxlQ2hlY2tDaGFuZ2UpLGUoImxpIixsKCkoW3thdHRyczp7cm9sZToibWVudWl0ZW0iLGlkOmMsImFyaWEtZXhwYW5kZWQiOm4sdGFiaW5kZXg6Zj9udWxsOi0xfSxjbGFzczp7ImVsLWNhc2NhZGVyLW5vZGUiOiEwLCJpcy1zZWxlY3RhYmxlIjpoLCJpbi1hY3RpdmUtcGF0aCI6biwiaW4tY2hlY2tlZC1wYXRoIjppLCJpcy1hY3RpdmUiOnIsImlzLWRpc2FibGVkIjpmfX0scF0pLFt0aGlzLnJlbmRlclByZWZpeChlKSx0aGlzLnJlbmRlckNvbnRlbnQoZSksdGhpcy5yZW5kZXJQb3N0Zml4KGUpXSl9fSx5PXYsYj1uKDApLHg9T2JqZWN0KGJbImEiXSkoeSxvLGEsITEsbnVsbCxudWxsLG51bGwpO3gub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZSI7dmFyIF8sdyxTPXguZXhwb3J0cyxDPW4oNiksaz1uLm4oQyksVD17bmFtZToiRWxDYXNjYWRlck1lbnUiLG1peGluczpbay5hXSxpbmplY3Q6WyJwYW5lbCJdLGNvbXBvbmVudHM6e0VsU2Nyb2xsYmFyOnUuYSxDYXNjYWRlck5vZGU6U30scHJvcHM6e25vZGVzOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSxpbmRleDpOdW1iZXJ9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57YWN0aXZlTm9kZTpudWxsLGhvdmVyVGltZXI6bnVsbCxpZDpPYmplY3QobVsiZ2VuZXJhdGVJZCJdKSgpfX0sY29tcHV0ZWQ6e2lzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2Rlcy5sZW5ndGh9LG1lbnVJZDpmdW5jdGlvbigpe3JldHVybiJjYXNjYWRlci1tZW51LSIrdGhpcy5pZCsiLSIrdGhpcy5pbmRleH19LG1ldGhvZHM6e2hhbmRsZUV4cGFuZDpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZU5vZGU9ZS50YXJnZXR9LGhhbmRsZU1vdXNlTW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZU5vZGUsbj10aGlzLmhvdmVyVGltZXIsaT10aGlzLiRyZWZzLmhvdmVyWm9uZTtpZih0JiZpKWlmKHQuY29udGFpbnMoZS50YXJnZXQpKXtjbGVhclRpbWVvdXQobik7dmFyIHI9dGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLmxlZnQsYT1lLmNsaWVudFgtbyxzPXRoaXMuJGVsLGw9cy5vZmZzZXRXaWR0aCxjPXMub2Zmc2V0SGVpZ2h0LHU9dC5vZmZzZXRUb3AsaD11K3Qub2Zmc2V0SGVpZ2h0O2kuaW5uZXJIVE1MPSdcbiAgICAgICAgICA8cGF0aCBzdHlsZT0icG9pbnRlci1ldmVudHM6IGF1dG87IiBmaWxsPSJ0cmFuc3BhcmVudCIgZD0iTScrYSsiICIrdSsiIEwiK2wrIiAwIFYiK3UrJyBaIiAvPlxuICAgICAgICAgIDxwYXRoIHN0eWxlPSJwb2ludGVyLWV2ZW50czogYXV0bzsiIGZpbGw9InRyYW5zcGFyZW50IiBkPSJNJythKyIgIitoKyIgTCIrbCsiICIrYysiIFYiK2grJyBaIiAvPlxuICAgICAgICAnfWVsc2Ugbnx8KHRoaXMuaG92ZXJUaW1lcj1zZXRUaW1lb3V0KHRoaXMuY2xlYXJIb3ZlclpvbmUsdGhpcy5wYW5lbC5jb25maWcuaG92ZXJUaHJlc2hvbGQpKX0sY2xlYXJIb3ZlclpvbmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRyZWZzLmhvdmVyWm9uZTtlJiYoZS5pbm5lckhUTUw9IiIpfSxyZW5kZXJFbXB0eVRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoImRpdiIse2NsYXNzOiJlbC1jYXNjYWRlci1tZW51X19lbXB0eS10ZXh0In0sW3RoaXMudCgiZWwuY2FzY2FkZXIubm9EYXRhIildKX0scmVuZGVyTm9kZUxpc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tZW51SWQsbj10aGlzLnBhbmVsLmlzSG92ZXJNZW51LGk9e29uOnt9fTtuJiYoaS5vbi5leHBhbmQ9dGhpcy5oYW5kbGVFeHBhbmQpO3ZhciByPXRoaXMubm9kZXMubWFwKChmdW5jdGlvbihuLHIpe3ZhciBvPW4uaGFzQ2hpbGRyZW47cmV0dXJuIGUoImNhc2NhZGVyLW5vZGUiLGwoKShbe2tleTpuLnVpZCxhdHRyczp7bm9kZTpuLCJub2RlLWlkIjp0KyItIityLCJhcmlhLWhhc3BvcHVwIjpvLCJhcmlhLW93bnMiOm8/dDpudWxsfX0saV0pKX0pKTtyZXR1cm5bXS5jb25jYXQocixbbj9lKCJzdmciLHtyZWY6ImhvdmVyWm9uZSIsY2xhc3M6ImVsLWNhc2NhZGVyLW1lbnVfX2hvdmVyLXpvbmUifSk6bnVsbF0pfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaXNFbXB0eSxuPXRoaXMubWVudUlkLGk9e25hdGl2ZU9uOnt9fTtyZXR1cm4gdGhpcy5wYW5lbC5pc0hvdmVyTWVudSYmKGkubmF0aXZlT24ubW91c2Vtb3ZlPXRoaXMuaGFuZGxlTW91c2VNb3ZlKSxlKCJlbC1zY3JvbGxiYXIiLGwoKShbe2F0dHJzOnt0YWc6InVsIixyb2xlOiJtZW51IixpZDpuLCJ3cmFwLWNsYXNzIjoiZWwtY2FzY2FkZXItbWVudV9fd3JhcCIsInZpZXctY2xhc3MiOnsiZWwtY2FzY2FkZXItbWVudV9fbGlzdCI6ITAsImlzLWVtcHR5Ijp0fX0sY2xhc3M6ImVsLWNhc2NhZGVyLW1lbnUifSxpXSksW3Q/dGhpcy5yZW5kZXJFbXB0eVRleHQoZSk6dGhpcy5yZW5kZXJOb2RlTGlzdChlKV0pfX0sTT1ULEU9T2JqZWN0KGJbImEiXSkoTSxfLHcsITEsbnVsbCxudWxsLG51bGwpO0Uub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1tZW51LnZ1ZSI7dmFyIEk9RS5leHBvcnRzLEQ9bigyMSksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkua2V5LGkpfX1yZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLGkmJmUodCxpKSx0fX0oKTtmdW5jdGlvbiBPKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIFA9MCxMPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4saSl7Tyh0aGlzLGUpLHRoaXMuZGF0YT10LHRoaXMuY29uZmlnPW4sdGhpcy5wYXJlbnQ9aXx8bnVsbCx0aGlzLmxldmVsPXRoaXMucGFyZW50P3RoaXMucGFyZW50LmxldmVsKzE6MSx0aGlzLnVpZD1QKyssdGhpcy5pbml0U3RhdGUoKSx0aGlzLmluaXRDaGlsZHJlbigpfXJldHVybiBlLnByb3RvdHlwZS5pbml0U3RhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbmZpZyx0PWUudmFsdWUsbj1lLmxhYmVsO3RoaXMudmFsdWU9dGhpcy5kYXRhW3RdLHRoaXMubGFiZWw9dGhpcy5kYXRhW25dLHRoaXMucGF0aE5vZGVzPXRoaXMuY2FsY3VsYXRlUGF0aE5vZGVzKCksdGhpcy5wYXRoPXRoaXMucGF0aE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KSksdGhpcy5wYXRoTGFiZWxzPXRoaXMucGF0aE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubGFiZWx9KSksdGhpcy5sb2FkaW5nPSExLHRoaXMubG9hZGVkPSExfSxlLnByb3RvdHlwZS5pbml0Q2hpbGRyZW49ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49dGhpcy5jb25maWcsaT1uLmNoaWxkcmVuLHI9dGhpcy5kYXRhW2ldO3RoaXMuaGFzQ2hpbGRyZW49QXJyYXkuaXNBcnJheShyKSx0aGlzLmNoaWxkcmVuPShyfHxbXSkubWFwKChmdW5jdGlvbihpKXtyZXR1cm4gbmV3IGUoaSxuLHQpfSkpfSxlLnByb3RvdHlwZS5jYWxjdWxhdGVQYXRoTm9kZXM9ZnVuY3Rpb24oKXt2YXIgZT1bdGhpc10sdD10aGlzLnBhcmVudDt3aGlsZSh0KWUudW5zaGlmdCh0KSx0PXQucGFyZW50O3JldHVybiBlfSxlLnByb3RvdHlwZS5nZXRQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGF0aH0sZS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZX0sZS5wcm90b3R5cGUuZ2V0VmFsdWVCeU9wdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmZpZy5lbWl0UGF0aD90aGlzLmdldFBhdGgoKTp0aGlzLmdldFZhbHVlKCl9LGUucHJvdG90eXBlLmdldFRleHQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT90aGlzLnBhdGhMYWJlbHMuam9pbih0KTp0aGlzLmxhYmVsfSxlLnByb3RvdHlwZS5pc1NhbWVOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0VmFsdWVCeU9wdGlvbigpO3JldHVybiB0aGlzLmNvbmZpZy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShlKT9lLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QobVsiaXNFcXVhbCJdKShlLHQpfSkpOk9iamVjdChtWyJpc0VxdWFsIl0pKGUsdCl9LGUucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQ+MT90LTE6MCksaT0xO2k8dDtpKyspbltpLTFdPWFyZ3VtZW50c1tpXTt2YXIgcj0ib25QYXJlbnQiK09iamVjdChtWyJjYXBpdGFsaXplIl0pKGUpO3RoaXMuY2hpbGRyZW4uZm9yRWFjaCgoZnVuY3Rpb24odCl7dCYmKHQuYnJvYWRjYXN0LmFwcGx5KHQsW2VdLmNvbmNhdChuKSksdFtyXSYmdFtyXS5hcHBseSh0LG4pKX0pKX0sZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcmVudCxuPSJvbkNoaWxkIitPYmplY3QobVsiY2FwaXRhbGl6ZSJdKShlKTtpZih0KXtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KGk+MT9pLTE6MCksbz0xO288aTtvKyspcltvLTFdPWFyZ3VtZW50c1tvXTt0W25dJiZ0W25dLmFwcGx5KHQsciksdC5lbWl0LmFwcGx5KHQsW2VdLmNvbmNhdChyKSl9fSxlLnByb3RvdHlwZS5vblBhcmVudENoZWNrPWZ1bmN0aW9uKGUpe3RoaXMuaXNEaXNhYmxlZHx8dGhpcy5zZXRDaGVja1N0YXRlKGUpfSxlLnByb3RvdHlwZS5vbkNoaWxkQ2hlY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNoaWxkcmVuLHQ9ZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmlzRGlzYWJsZWR9KSksbj0hIXQubGVuZ3RoJiZ0LmV2ZXJ5KChmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGVja2VkfSkpO3RoaXMuc2V0Q2hlY2tTdGF0ZShuKX0sZS5wcm90b3R5cGUuc2V0Q2hlY2tTdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmNoaWxkcmVuLmxlbmd0aCxuPXRoaXMuY2hpbGRyZW4ucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuPXQuY2hlY2tlZD8xOnQuaW5kZXRlcm1pbmF0ZT8uNTowO3JldHVybiBlK259KSwwKTt0aGlzLmNoZWNrZWQ9ZSx0aGlzLmluZGV0ZXJtaW5hdGU9biE9PXQmJm4+MH0sZS5wcm90b3R5cGUuc3luY0NoZWNrU3RhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRWYWx1ZUJ5T3B0aW9uKCksbj10aGlzLmlzU2FtZU5vZGUoZSx0KTt0aGlzLmRvQ2hlY2sobil9LGUucHJvdG90eXBlLmRvQ2hlY2s9ZnVuY3Rpb24oZSl7dGhpcy5jaGVja2VkIT09ZSYmKHRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHk/dGhpcy5jaGVja2VkPWU6KHRoaXMuYnJvYWRjYXN0KCJjaGVjayIsZSksdGhpcy5zZXRDaGVja1N0YXRlKGUpLHRoaXMuZW1pdCgiY2hlY2siKSkpfSxBKGUsW3trZXk6ImlzRGlzYWJsZWQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMucGFyZW50LG49dGhpcy5jb25maWcsaT1uLmRpc2FibGVkLHI9bi5jaGVja1N0cmljdGx5O3JldHVybiBlW2ldfHwhciYmdCYmdC5pc0Rpc2FibGVkfX0se2tleToiaXNMZWFmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEsdD10aGlzLmxvYWRlZCxuPXRoaXMuaGFzQ2hpbGRyZW4saT10aGlzLmNoaWxkcmVuLHI9dGhpcy5jb25maWcsbz1yLmxhenksYT1yLmxlYWY7aWYobyl7dmFyIHM9T2JqZWN0KERbImlzRGVmIl0pKGVbYV0pP2VbYV06ISF0JiYhaS5sZW5ndGg7cmV0dXJuIHRoaXMuaGFzQ2hpbGRyZW49IXMsc31yZXR1cm4hbn19XSksZX0oKSxOPUw7ZnVuY3Rpb24gUihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciAkPWZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGkuaXNMZWFmP3QucHVzaChpKTooIW4mJnQucHVzaChpKSx0PXQuY29uY2F0KGUoaS5jaGlsZHJlbixuKSkpLHR9KSxbXSl9LHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsbil7Uih0aGlzLGUpLHRoaXMuY29uZmlnPW4sdGhpcy5pbml0Tm9kZXModCl9cmV0dXJuIGUucHJvdG90eXBlLmluaXROb2Rlcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2U9T2JqZWN0KG1bImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSJdKShlKSx0aGlzLm5vZGVzPWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE4oZSx0LmNvbmZpZyl9KSksdGhpcy5mbGF0dGVkTm9kZXM9dGhpcy5nZXRGbGF0dGVkTm9kZXMoITEsITEpLHRoaXMubGVhZk5vZGVzPXRoaXMuZ2V0RmxhdHRlZE5vZGVzKCEwLCExKX0sZS5wcm90b3R5cGUuYXBwZW5kTm9kZT1mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBOKGUsdGhpcy5jb25maWcsdCksaT10P3QuY2hpbGRyZW46dGhpcy5ub2RlcztpLnB1c2gobil9LGUucHJvdG90eXBlLmFwcGVuZE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztlPU9iamVjdChtWyJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkiXSkoZSksZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gbi5hcHBlbmROb2RlKGUsdCl9KSl9LGUucHJvdG90eXBlLmdldE5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZXN9LGUucHJvdG90eXBlLmdldEZsYXR0ZWROb2Rlcz1mdW5jdGlvbihlKXt2YXIgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLG49ZT90aGlzLmxlYWZOb2Rlczp0aGlzLmZsYXR0ZWROb2RlcztyZXR1cm4gdD9uOiQodGhpcy5ub2RlcyxlKX0sZS5wcm90b3R5cGUuZ2V0Tm9kZUJ5VmFsdWU9ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9dGhpcy5nZXRGbGF0dGVkTm9kZXMoITEsIXRoaXMuY29uZmlnLmxhenkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChtWyJ2YWx1ZUVxdWFscyJdKSh0LnBhdGgsZSl8fHQudmFsdWU9PT1lfSkpO3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOm51bGx9cmV0dXJuIG51bGx9LGV9KCksQj16LEY9big5KSxWPW4ubihGKSxqPW4oNDApLEg9bi5uKGopLFc9bigzMSksRz1uLm4oVyksVT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJihlW2ldPW5baV0pfXJldHVybiBlfSxxPUguYS5rZXlzLFk9e2V4cGFuZFRyaWdnZXI6ImNsaWNrIixtdWx0aXBsZTohMSxjaGVja1N0cmljdGx5OiExLGVtaXRQYXRoOiEwLGxhenk6ITEsbGF6eUxvYWQ6bVsibm9vcCJdLHZhbHVlOiJ2YWx1ZSIsbGFiZWw6ImxhYmVsIixjaGlsZHJlbjoiY2hpbGRyZW4iLGxlYWY6ImxlYWYiLGRpc2FibGVkOiJkaXNhYmxlZCIsaG92ZXJUaHJlc2hvbGQ6NTAwfSxYPWZ1bmN0aW9uKGUpe3JldHVybiFlLmdldEF0dHJpYnV0ZSgiYXJpYS1vd25zIil9LEs9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnBhcmVudE5vZGU7aWYobil7dmFyIGk9bi5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtY2FzY2FkZXItbm9kZVt0YWJpbmRleD0iLTEiXScpLHI9QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChpLGUpO3JldHVybiBpW3IrdF18fG51bGx9cmV0dXJuIG51bGx9LFo9ZnVuY3Rpb24oZSx0KXtpZihlKXt2YXIgbj1lLmlkLnNwbGl0KCItIik7cmV0dXJuIE51bWJlcihuW24ubGVuZ3RoLTJdKX19LEo9ZnVuY3Rpb24oZSl7ZSYmKGUuZm9jdXMoKSwhWChlKSYmZS5jbGljaygpKX0sUT1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7dD90LmNsaWNrKCk6WChlKSYmZS5jbGljaygpfX0sZWU9e25hbWU6IkVsQ2FzY2FkZXJQYW5lbCIsY29tcG9uZW50czp7Q2FzY2FkZXJNZW51Okl9LHByb3BzOnt2YWx1ZTp7fSxvcHRpb25zOkFycmF5LHByb3BzOk9iamVjdCxib3JkZXI6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxyZW5kZXJMYWJlbDpGdW5jdGlvbn0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntwYW5lbDp0aGlzfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjaGVja2VkVmFsdWU6bnVsbCxjaGVja2VkTm9kZVBhdGhzOltdLHN0b3JlOltdLG1lbnVzOltdLGFjdGl2ZVBhdGg6W10sbG9hZENvdW50OjB9fSxjb21wdXRlZDp7Y29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIFYoKShVKHt9LFkpLHRoaXMucHJvcHN8fHt9KX0sbXVsdGlwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGV9LGNoZWNrU3RyaWN0bHk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25maWcuY2hlY2tTdHJpY3RseX0sbGVhZk9ubHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5jaGVja1N0cmljdGx5fSxpc0hvdmVyTWVudTpmdW5jdGlvbigpe3JldHVybiJob3ZlciI9PT10aGlzLmNvbmZpZy5leHBhbmRUcmlnZ2VyfSxyZW5kZXJMYWJlbEZuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyTGFiZWx8fHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHR9fSx3YXRjaDp7b3B0aW9uczp7aGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuaW5pdFN0b3JlKCl9LGltbWVkaWF0ZTohMCxkZWVwOiEwfSx2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3luY0NoZWNrZWRWYWx1ZSgpLHRoaXMuY2hlY2tTdHJpY3RseSYmdGhpcy5jYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzKCl9LGNoZWNrZWRWYWx1ZTpmdW5jdGlvbihlKXtPYmplY3QobVsiaXNFcXVhbCJdKShlLHRoaXMudmFsdWUpfHwodGhpcy5jaGVja1N0cmljdGx5JiZ0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKSx0aGlzLiRlbWl0KCJpbnB1dCIsZSksdGhpcy4kZW1pdCgiY2hhbmdlIixlKSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7T2JqZWN0KG1bImlzRW1wdHkiXSkodGhpcy52YWx1ZSl8fHRoaXMuc3luY0NoZWNrZWRWYWx1ZSgpfSxtZXRob2RzOntpbml0U3RvcmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbmZpZyx0PXRoaXMub3B0aW9ucztlLmxhenkmJk9iamVjdChtWyJpc0VtcHR5Il0pKHQpP3RoaXMubGF6eUxvYWQoKToodGhpcy5zdG9yZT1uZXcgQih0LGUpLHRoaXMubWVudXM9W3RoaXMuc3RvcmUuZ2V0Tm9kZXMoKV0sdGhpcy5zeW5jTWVudVN0YXRlKCkpfSxzeW5jQ2hlY2tlZFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZSx0PXRoaXMuY2hlY2tlZFZhbHVlO09iamVjdChtWyJpc0VxdWFsIl0pKGUsdCl8fCh0aGlzLmFjdGl2ZVBhdGg9W10sdGhpcy5jaGVja2VkVmFsdWU9ZSx0aGlzLnN5bmNNZW51U3RhdGUoKSl9LHN5bmNNZW51U3RhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm11bHRpcGxlLHQ9dGhpcy5jaGVja1N0cmljdGx5O3RoaXMuc3luY0FjdGl2ZVBhdGgoKSxlJiZ0aGlzLnN5bmNNdWx0aUNoZWNrU3RhdGUoKSx0JiZ0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKSx0aGlzLiRuZXh0VGljayh0aGlzLnNjcm9sbEludG9WaWV3KX0sc3luY011bHRpQ2hlY2tTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldEZsYXR0ZWROb2Rlcyh0aGlzLmxlYWZPbmx5KTt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc3luY0NoZWNrU3RhdGUoZS5jaGVja2VkVmFsdWUpfSkpfSxzeW5jQWN0aXZlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnN0b3JlLG49dGhpcy5tdWx0aXBsZSxpPXRoaXMuYWN0aXZlUGF0aCxyPXRoaXMuY2hlY2tlZFZhbHVlO2lmKE9iamVjdChtWyJpc0VtcHR5Il0pKGkpKWlmKE9iamVjdChtWyJpc0VtcHR5Il0pKHIpKXRoaXMuYWN0aXZlUGF0aD1bXSx0aGlzLm1lbnVzPVt0LmdldE5vZGVzKCldO2Vsc2V7dmFyIG89bj9yWzBdOnIsYT10aGlzLmdldE5vZGVCeVZhbHVlKG8pfHx7fSxzPShhLnBhdGhOb2Rlc3x8W10pLnNsaWNlKDAsLTEpO3RoaXMuZXhwYW5kTm9kZXMocyl9ZWxzZXt2YXIgbD1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuZ2V0Tm9kZUJ5VmFsdWUodC5nZXRWYWx1ZSgpKX0pKTt0aGlzLmV4cGFuZE5vZGVzKGwpfX0sZXhwYW5kTm9kZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZUV4cGFuZChlLCEwKX0pKX0sY2FsY3VsYXRlQ2hlY2tlZE5vZGVQYXRoczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmNoZWNrZWRWYWx1ZSxuPXRoaXMubXVsdGlwbGUsaT1uP09iamVjdChtWyJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkiXSkodCk6W3RdO3RoaXMuY2hlY2tlZE5vZGVQYXRocz1pLm1hcCgoZnVuY3Rpb24odCl7dmFyIG49ZS5nZXROb2RlQnlWYWx1ZSh0KTtyZXR1cm4gbj9uLnBhdGhOb2RlczpbXX0pKX0saGFuZGxlS2V5RG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldCxuPWUua2V5Q29kZTtzd2l0Y2gobil7Y2FzZSBxLnVwOnZhciBpPUsodCwtMSk7SihpKTticmVhaztjYXNlIHEuZG93bjp2YXIgcj1LKHQsMSk7SihyKTticmVhaztjYXNlIHEubGVmdDp2YXIgbz10aGlzLiRyZWZzLm1lbnVbWih0KS0xXTtpZihvKXt2YXIgYT1vLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0nKTtKKGEpfWJyZWFrO2Nhc2UgcS5yaWdodDp2YXIgcz10aGlzLiRyZWZzLm1lbnVbWih0KSsxXTtpZihzKXt2YXIgbD1zLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZVt0YWJpbmRleD0iLTEiXScpO0oobCl9YnJlYWs7Y2FzZSBxLmVudGVyOlEodCk7YnJlYWs7Y2FzZSBxLmVzYzpjYXNlIHEudGFiOnRoaXMuJGVtaXQoImNsb3NlIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fSxoYW5kbGVFeHBhbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmFjdGl2ZVBhdGgsaT1lLmxldmVsLHI9bi5zbGljZSgwLGktMSksbz10aGlzLm1lbnVzLnNsaWNlKDAsaSk7aWYoZS5pc0xlYWZ8fChyLnB1c2goZSksby5wdXNoKGUuY2hpbGRyZW4pKSx0aGlzLmFjdGl2ZVBhdGg9cix0aGlzLm1lbnVzPW8sIXQpe3ZhciBhPXIubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRWYWx1ZSgpfSkpLHM9bi5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFZhbHVlKCl9KSk7T2JqZWN0KG1bInZhbHVlRXF1YWxzIl0pKGEscyl8fCh0aGlzLiRlbWl0KCJhY3RpdmUtaXRlbS1jaGFuZ2UiLGEpLHRoaXMuJGVtaXQoImV4cGFuZC1jaGFuZ2UiLGEpKX19LGhhbmRsZUNoZWNrQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tlZFZhbHVlPWV9LGxhenlMb2FkOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxpPXRoaXMuY29uZmlnO2V8fChlPWV8fHtyb290OiEwLGxldmVsOjB9LHRoaXMuc3RvcmU9bmV3IEIoW10saSksdGhpcy5tZW51cz1bdGhpcy5zdG9yZS5nZXROb2RlcygpXSksZS5sb2FkaW5nPSEwO3ZhciByPWZ1bmN0aW9uKGkpe3ZhciByPWUucm9vdD9udWxsOmU7aWYoaSYmaS5sZW5ndGgmJm4uc3RvcmUuYXBwZW5kTm9kZXMoaSxyKSxlLmxvYWRpbmc9ITEsZS5sb2FkZWQ9ITAsQXJyYXkuaXNBcnJheShuLmNoZWNrZWRWYWx1ZSkpe3ZhciBvPW4uY2hlY2tlZFZhbHVlW24ubG9hZENvdW50KytdLGE9bi5jb25maWcudmFsdWUscz1uLmNvbmZpZy5sZWFmO2lmKEFycmF5LmlzQXJyYXkoaSkmJmkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZVthXT09PW99KSkubGVuZ3RoPjApe3ZhciBsPW4uc3RvcmUuZ2V0Tm9kZUJ5VmFsdWUobyk7bC5kYXRhW3NdfHxuLmxhenlMb2FkKGwsKGZ1bmN0aW9uKCl7bi5oYW5kbGVFeHBhbmQobCl9KSksbi5sb2FkQ291bnQ9PT1uLmNoZWNrZWRWYWx1ZS5sZW5ndGgmJm4uJHBhcmVudC5jb21wdXRlUHJlc2VudFRleHQoKX19dCYmdChpKX07aS5sYXp5TG9hZChlLHIpfSxjYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZTpmdW5jdGlvbigpe3RoaXMuY2hlY2tlZFZhbHVlPXRoaXMuZ2V0Q2hlY2tlZE5vZGVzKHRoaXMubGVhZk9ubHkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VmFsdWVCeU9wdGlvbigpfSkpfSxzY3JvbGxJbnRvVmlldzpmdW5jdGlvbigpe2lmKCF0aGlzLiRpc1NlcnZlcil7dmFyIGU9dGhpcy4kcmVmcy5tZW51fHxbXTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuJGVsO2lmKHQpe3ZhciBuPXQucXVlcnlTZWxlY3RvcigiLmVsLXNjcm9sbGJhcl9fd3JhcCIpLGk9dC5xdWVyeVNlbGVjdG9yKCIuZWwtY2FzY2FkZXItbm9kZS5pcy1hY3RpdmUiKXx8dC5xdWVyeVNlbGVjdG9yKCIuZWwtY2FzY2FkZXItbm9kZS5pbi1hY3RpdmUtcGF0aCIpO0coKShuLGkpfX0pKX19LGdldE5vZGVCeVZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0b3JlLmdldE5vZGVCeVZhbHVlKGUpfSxnZXRGbGF0dGVkTm9kZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9IXRoaXMuY29uZmlnLmxhenk7cmV0dXJuIHRoaXMuc3RvcmUuZ2V0RmxhdHRlZE5vZGVzKGUsdCl9LGdldENoZWNrZWROb2RlczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNoZWNrZWRWYWx1ZSxuPXRoaXMubXVsdGlwbGU7aWYobil7dmFyIGk9dGhpcy5nZXRGbGF0dGVkTm9kZXMoZSk7cmV0dXJuIGkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGVja2VkfSkpfXJldHVybiBPYmplY3QobVsiaXNFbXB0eSJdKSh0KT9bXTpbdGhpcy5nZXROb2RlQnlWYWx1ZSh0KV19LGNsZWFyQ2hlY2tlZE5vZGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb25maWcsdD10aGlzLmxlYWZPbmx5LG49ZS5tdWx0aXBsZSxpPWUuZW1pdFBhdGg7bj8odGhpcy5nZXRDaGVja2VkTm9kZXModCkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5pc0Rpc2FibGVkfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvQ2hlY2soITEpfSkpLHRoaXMuY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWUoKSk6dGhpcy5jaGVja2VkVmFsdWU9aT9bXTpudWxsfX19LHRlPWVlLG5lPU9iamVjdChiWyJhIl0pKHRlLGksciwhMSxudWxsLG51bGwsbnVsbCk7bmUub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWUiO3ZhciBpZT1uZS5leHBvcnRzO2llLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoaWUubmFtZSxpZSl9O3RbImRlZmF1bHQiXT1pZX0sNjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI2YjdjIil9LDk6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiN2Y0ZCIpfX0pfSw0Nzg0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIzZWJhIikscj1uKCJmNzA2Iiksbz1uKCJjOGVmIiksYT1uKCIxNjg3Iikscz1uKCI4N2MzIiksbD1pLmV4dGVuZENoYXJ0Vmlldyh7dHlwZToiZWZmZWN0U2NhdHRlciIsaW5pdDpmdW5jdGlvbigpe3RoaXMuX3N5bWJvbERyYXc9bmV3IHIobyl9LHJlbmRlcjpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5nZXREYXRhKCkscj10aGlzLl9zeW1ib2xEcmF3O3IudXBkYXRlRGF0YShpKSx0aGlzLmdyb3VwLmFkZChyLmdyb3VwKX0sdXBkYXRlVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1lLmdldERhdGEoKTt0aGlzLmdyb3VwLmRpcnR5KCk7dmFyIHI9cygpLnJlc2V0KGUpO3IucHJvZ3Jlc3MmJnIucHJvZ3Jlc3Moe3N0YXJ0OjAsZW5kOmkuY291bnQoKX0saSksdGhpcy5fc3ltYm9sRHJhdy51cGRhdGVMYXlvdXQoaSl9LF91cGRhdGVHcm91cFRyYW5zZm9ybTpmdW5jdGlvbihlKXt2YXIgdD1lLmNvb3JkaW5hdGVTeXN0ZW07dCYmdC5nZXRSb2FtVHJhbnNmb3JtJiYodGhpcy5ncm91cC50cmFuc2Zvcm09YS5jbG9uZSh0LmdldFJvYW1UcmFuc2Zvcm0oKSksdGhpcy5ncm91cC5kZWNvbXBvc2VUcmFuc2Zvcm0oKSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3RoaXMuX3N5bWJvbERyYXcmJnRoaXMuX3N5bWJvbERyYXcucmVtb3ZlKHQpfSxkaXNwb3NlOmZ1bmN0aW9uKCl7fX0pO2UuZXhwb3J0cz1sfSwiNDgwZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjRlMDgiKSxyPShpLl9fREVWX18sbigiM2ViYSIpKSxvPW4oIjIzMDYiKSxhPW4oImNkODQiKSxzPW4oIjZkOGIiKTtmdW5jdGlvbiBsKGUsdCxuKXt2YXIgaT1lWzFdLWVbMF07dD1zLm1hcCh0LChmdW5jdGlvbih0KXtyZXR1cm57aW50ZXJ2YWw6Wyh0LmludGVydmFsWzBdLWVbMF0pL2ksKHQuaW50ZXJ2YWxbMV0tZVswXSkvaV19fSkpO3ZhciByPXQubGVuZ3RoLG89MDtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciBpPW87aTxyO2krKyl7dmFyIGE9dFtpXS5pbnRlcnZhbDtpZihhWzBdPD1lJiZlPD1hWzFdKXtvPWk7YnJlYWt9fWlmKGk9PT1yKWZvcihpPW8tMTtpPj0wO2ktLSl7YT10W2ldLmludGVydmFsO2lmKGFbMF08PWUmJmU8PWFbMV0pe289aTticmVha319cmV0dXJuIGk+PTAmJmk8ciYmbltpXX19ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPWVbMV0tZVswXTtyZXR1cm4gdD1bKHRbMF0tZVswXSkvbiwodFsxXS1lWzBdKS9uXSxmdW5jdGlvbihlKXtyZXR1cm4gZT49dFswXSYmZTw9dFsxXX19ZnVuY3Rpb24gdShlKXt2YXIgdD1lLmRpbWVuc2lvbnM7cmV0dXJuImxuZyI9PT10WzBdJiYibGF0Ij09PXRbMV19dmFyIGg9ci5leHRlbmRDaGFydFZpZXcoe3R5cGU6ImhlYXRtYXAiLHJlbmRlcjpmdW5jdGlvbihlLHQsbil7dmFyIGk7dC5lYWNoQ29tcG9uZW50KCJ2aXN1YWxNYXAiLChmdW5jdGlvbih0KXt0LmVhY2hUYXJnZXRTZXJpZXMoKGZ1bmN0aW9uKG4pe249PT1lJiYoaT10KX0pKX0pKSx0aGlzLmdyb3VwLnJlbW92ZUFsbCgpLHRoaXMuX2luY3JlbWVudGFsRGlzcGxheWFibGU9bnVsbDt2YXIgcj1lLmNvb3JkaW5hdGVTeXN0ZW07ImNhcnRlc2lhbjJkIj09PXIudHlwZXx8ImNhbGVuZGFyIj09PXIudHlwZT90aGlzLl9yZW5kZXJPbkNhcnRlc2lhbkFuZENhbGVuZGFyKGUsbiwwLGUuZ2V0RGF0YSgpLmNvdW50KCkpOnUocikmJnRoaXMuX3JlbmRlck9uR2VvKHIsZSxpLG4pfSxpbmNyZW1lbnRhbFByZXBhcmVSZW5kZXI6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuZ3JvdXAucmVtb3ZlQWxsKCl9LGluY3JlbWVudGFsUmVuZGVyOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXQuY29vcmRpbmF0ZVN5c3RlbTtyJiZ0aGlzLl9yZW5kZXJPbkNhcnRlc2lhbkFuZENhbGVuZGFyKHQsaSxlLnN0YXJ0LGUuZW5kLCEwKX0sX3JlbmRlck9uQ2FydGVzaWFuQW5kQ2FsZW5kYXI6ZnVuY3Rpb24oZSx0LG4saSxyKXt2YXIgYSxsLGM9ZS5jb29yZGluYXRlU3lzdGVtO2lmKCJjYXJ0ZXNpYW4yZCI9PT1jLnR5cGUpe3ZhciB1PWMuZ2V0QXhpcygieCIpLGg9Yy5nZXRBeGlzKCJ5Iik7YT11LmdldEJhbmRXaWR0aCgpLGw9aC5nZXRCYW5kV2lkdGgoKX1mb3IodmFyIGQ9dGhpcy5ncm91cCxmPWUuZ2V0RGF0YSgpLHA9Iml0ZW1TdHlsZSIsbT0iZW1waGFzaXMuaXRlbVN0eWxlIixnPSJsYWJlbCIsdj0iZW1waGFzaXMubGFiZWwiLHk9ZS5nZXRNb2RlbChwKS5nZXRJdGVtU3R5bGUoWyJjb2xvciJdKSxiPWUuZ2V0TW9kZWwobSkuZ2V0SXRlbVN0eWxlKCkseD1lLmdldE1vZGVsKGcpLF89ZS5nZXRNb2RlbCh2KSx3PWMudHlwZSxTPSJjYXJ0ZXNpYW4yZCI9PT13P1tmLm1hcERpbWVuc2lvbigieCIpLGYubWFwRGltZW5zaW9uKCJ5IiksZi5tYXBEaW1lbnNpb24oInZhbHVlIildOltmLm1hcERpbWVuc2lvbigidGltZSIpLGYubWFwRGltZW5zaW9uKCJ2YWx1ZSIpXSxDPW47QzxpO0MrKyl7dmFyIGs7aWYoImNhcnRlc2lhbjJkIj09PXcpe2lmKGlzTmFOKGYuZ2V0KFNbMl0sQykpKWNvbnRpbnVlO3ZhciBUPWMuZGF0YVRvUG9pbnQoW2YuZ2V0KFNbMF0sQyksZi5nZXQoU1sxXSxDKV0pO2s9bmV3IG8uUmVjdCh7c2hhcGU6e3g6TWF0aC5mbG9vcihNYXRoLnJvdW5kKFRbMF0pLWEvMikseTpNYXRoLmZsb29yKE1hdGgucm91bmQoVFsxXSktbC8yKSx3aWR0aDpNYXRoLmNlaWwoYSksaGVpZ2h0Ok1hdGguY2VpbChsKX0sc3R5bGU6e2ZpbGw6Zi5nZXRJdGVtVmlzdWFsKEMsImNvbG9yIiksb3BhY2l0eTpmLmdldEl0ZW1WaXN1YWwoQywib3BhY2l0eSIpfX0pfWVsc2V7aWYoaXNOYU4oZi5nZXQoU1sxXSxDKSkpY29udGludWU7az1uZXcgby5SZWN0KHt6MjoxLHNoYXBlOmMuZGF0YVRvUmVjdChbZi5nZXQoU1swXSxDKV0pLmNvbnRlbnRTaGFwZSxzdHlsZTp7ZmlsbDpmLmdldEl0ZW1WaXN1YWwoQywiY29sb3IiKSxvcGFjaXR5OmYuZ2V0SXRlbVZpc3VhbChDLCJvcGFjaXR5Iil9fSl9dmFyIE09Zi5nZXRJdGVtTW9kZWwoQyk7Zi5oYXNJdGVtT3B0aW9uJiYoeT1NLmdldE1vZGVsKHApLmdldEl0ZW1TdHlsZShbImNvbG9yIl0pLGI9TS5nZXRNb2RlbChtKS5nZXRJdGVtU3R5bGUoKSx4PU0uZ2V0TW9kZWwoZyksXz1NLmdldE1vZGVsKHYpKTt2YXIgRT1lLmdldFJhd1ZhbHVlKEMpLEk9Ii0iO0UmJm51bGwhPUVbMl0mJihJPUVbMl0pLG8uc2V0TGFiZWxTdHlsZSh5LGIseCxfLHtsYWJlbEZldGNoZXI6ZSxsYWJlbERhdGFJbmRleDpDLGRlZmF1bHRUZXh0OkksaXNSZWN0VGV4dDohMH0pLGsuc2V0U3R5bGUoeSksby5zZXRIb3ZlclN0eWxlKGssZi5oYXNJdGVtT3B0aW9uP2I6cy5leHRlbmQoe30sYikpLGsuaW5jcmVtZW50YWw9cixyJiYoay51c2VIb3ZlckxheWVyPSEwKSxkLmFkZChrKSxmLnNldEl0ZW1HcmFwaGljRWwoQyxrKX19LF9yZW5kZXJPbkdlbzpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1uLnRhcmdldFZpc3VhbHMuaW5SYW5nZSxzPW4udGFyZ2V0VmlzdWFscy5vdXRPZlJhbmdlLHU9dC5nZXREYXRhKCksaD10aGlzLl9obUxheWVyfHx0aGlzLl9obUxheWVyfHxuZXcgYTtoLmJsdXJTaXplPXQuZ2V0KCJibHVyU2l6ZSIpLGgucG9pbnRTaXplPXQuZ2V0KCJwb2ludFNpemUiKSxoLm1pbk9wYWNpdHk9dC5nZXQoIm1pbk9wYWNpdHkiKSxoLm1heE9wYWNpdHk9dC5nZXQoIm1heE9wYWNpdHkiKTt2YXIgZD1lLmdldFZpZXdSZWN0KCkuY2xvbmUoKSxmPWUuZ2V0Um9hbVRyYW5zZm9ybSgpO2QuYXBwbHlUcmFuc2Zvcm0oZik7dmFyIHA9TWF0aC5tYXgoZC54LDApLG09TWF0aC5tYXgoZC55LDApLGc9TWF0aC5taW4oZC53aWR0aCtkLngsaS5nZXRXaWR0aCgpKSx2PU1hdGgubWluKGQuaGVpZ2h0K2QueSxpLmdldEhlaWdodCgpKSx5PWctcCxiPXYtbSx4PVt1Lm1hcERpbWVuc2lvbigibG5nIiksdS5tYXBEaW1lbnNpb24oImxhdCIpLHUubWFwRGltZW5zaW9uKCJ2YWx1ZSIpXSxfPXUubWFwQXJyYXkoeCwoZnVuY3Rpb24odCxuLGkpe3ZhciByPWUuZGF0YVRvUG9pbnQoW3Qsbl0pO3JldHVybiByWzBdLT1wLHJbMV0tPW0sci5wdXNoKGkpLHJ9KSksdz1uLmdldEV4dGVudCgpLFM9InZpc3VhbE1hcC5jb250aW51b3VzIj09PW4udHlwZT9jKHcsbi5vcHRpb24ucmFuZ2UpOmwodyxuLmdldFBpZWNlTGlzdCgpLG4ub3B0aW9uLnNlbGVjdGVkKTtoLnVwZGF0ZShfLHksYixyLmNvbG9yLmdldE5vcm1hbGl6ZXIoKSx7aW5SYW5nZTpyLmNvbG9yLmdldENvbG9yTWFwcGVyKCksb3V0T2ZSYW5nZTpzLmNvbG9yLmdldENvbG9yTWFwcGVyKCl9LFMpO3ZhciBDPW5ldyBvLkltYWdlKHtzdHlsZTp7d2lkdGg6eSxoZWlnaHQ6Yix4OnAseTptLGltYWdlOmguY2FudmFzfSxzaWxlbnQ6ITB9KTt0aGlzLmdyb3VwLmFkZChDKX0sZGlzcG9zZTpmdW5jdGlvbigpe319KTtlLmV4cG9ydHM9aH0sIjQ4MGYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0YTNmIikscj1uKCI0MDFiIiksbz1uKCI1M2YzIiksYT1vLmdldFN5bWJvbFNpemUscz1bXSxsPVtdLGM9W10sdT1pLnF1YWRyYXRpY0F0LGg9ci5kaXN0U3F1YXJlLGQ9TWF0aC5hYnM7ZnVuY3Rpb24gZihlLHQsbil7Zm9yKHZhciBpLHI9ZVswXSxvPWVbMV0sYT1lWzJdLGY9MS8wLHA9bipuLG09LjEsZz0uMTtnPD0uOTtnKz0uMSl7c1swXT11KHJbMF0sb1swXSxhWzBdLGcpLHNbMV09dShyWzFdLG9bMV0sYVsxXSxnKTt2YXIgdj1kKGgocyx0KS1wKTt2PGYmJihmPXYsaT1nKX1mb3IodmFyIHk9MDt5PDMyO3krKyl7dmFyIGI9aSttO2xbMF09dShyWzBdLG9bMF0sYVswXSxpKSxsWzFdPXUoclsxXSxvWzFdLGFbMV0saSksY1swXT11KHJbMF0sb1swXSxhWzBdLGIpLGNbMV09dShyWzFdLG9bMV0sYVsxXSxiKTt2PWgobCx0KS1wO2lmKGQodik8LjAxKWJyZWFrO3ZhciB4PWgoYyx0KS1wO20vPTIsdjwwP3g+PTA/aSs9bTppLT1tOng+PTA/aS09bTppKz1tfXJldHVybiBpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgbj1bXSxvPWkucXVhZHJhdGljU3ViZGl2aWRlLHM9W1tdLFtdLFtdXSxsPVtbXSxbXV0sYz1bXTt0Lz0yLGUuZWFjaEVkZ2UoKGZ1bmN0aW9uKGUsaSl7dmFyIHU9ZS5nZXRMYXlvdXQoKSxoPWUuZ2V0VmlzdWFsKCJmcm9tU3ltYm9sIiksZD1lLmdldFZpc3VhbCgidG9TeW1ib2wiKTt1Ll9fb3JpZ2luYWx8fCh1Ll9fb3JpZ2luYWw9W3IuY2xvbmUodVswXSksci5jbG9uZSh1WzFdKV0sdVsyXSYmdS5fX29yaWdpbmFsLnB1c2goci5jbG9uZSh1WzJdKSkpO3ZhciBwPXUuX19vcmlnaW5hbDtpZihudWxsIT11WzJdKXtpZihyLmNvcHkoc1swXSxwWzBdKSxyLmNvcHkoc1sxXSxwWzJdKSxyLmNvcHkoc1syXSxwWzFdKSxoJiYibm9uZSIhPT1oKXt2YXIgbT1hKGUubm9kZTEpLGc9ZihzLHBbMF0sbSp0KTtvKHNbMF1bMF0sc1sxXVswXSxzWzJdWzBdLGcsbiksc1swXVswXT1uWzNdLHNbMV1bMF09bls0XSxvKHNbMF1bMV0sc1sxXVsxXSxzWzJdWzFdLGcsbiksc1swXVsxXT1uWzNdLHNbMV1bMV09bls0XX1pZihkJiYibm9uZSIhPT1kKXttPWEoZS5ub2RlMiksZz1mKHMscFsxXSxtKnQpO28oc1swXVswXSxzWzFdWzBdLHNbMl1bMF0sZyxuKSxzWzFdWzBdPW5bMV0sc1syXVswXT1uWzJdLG8oc1swXVsxXSxzWzFdWzFdLHNbMl1bMV0sZyxuKSxzWzFdWzFdPW5bMV0sc1syXVsxXT1uWzJdfXIuY29weSh1WzBdLHNbMF0pLHIuY29weSh1WzFdLHNbMl0pLHIuY29weSh1WzJdLHNbMV0pfWVsc2V7aWYoci5jb3B5KGxbMF0scFswXSksci5jb3B5KGxbMV0scFsxXSksci5zdWIoYyxsWzFdLGxbMF0pLHIubm9ybWFsaXplKGMsYyksaCYmIm5vbmUiIT09aCl7bT1hKGUubm9kZTEpO3Iuc2NhbGVBbmRBZGQobFswXSxsWzBdLGMsbSp0KX1pZihkJiYibm9uZSIhPT1kKXttPWEoZS5ub2RlMik7ci5zY2FsZUFuZEFkZChsWzFdLGxbMV0sYywtbSp0KX1yLmNvcHkodVswXSxsWzBdKSxyLmNvcHkodVsxXSxsWzFdKX19KSl9ZS5leHBvcnRzPXB9LDQ4NDA6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjgyNWEiKSxyPW4oIjFjMGIiKSxvPW4oImI2MjIiKSxhPW8oInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPWkoZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PW98fHZvaWQgMD09KG49aShvKVthXSk/dDpyKG4pfX0sNDg5NzpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmkxOG49dC51c2U9dC50PXZvaWQgMDt2YXIgaT1uKCJmMGQ5Iikscj1oKGkpLG89bigiMmIwZSIpLGE9aChvKSxzPW4oIjNjNGUiKSxsPWgocyksYz1uKCI5ZDdlIiksdT1oKGMpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBkPSgwLHUuZGVmYXVsdCkoYS5kZWZhdWx0KSxmPXIuZGVmYXVsdCxwPSExLG09ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpc3x8YS5kZWZhdWx0KS4kdDtpZigiZnVuY3Rpb24iPT09dHlwZW9mIGUmJmEuZGVmYXVsdC5sb2NhbGUpcmV0dXJuIHB8fChwPSEwLGEuZGVmYXVsdC5sb2NhbGUoYS5kZWZhdWx0LmNvbmZpZy5sYW5nLCgwLGwuZGVmYXVsdCkoZixhLmRlZmF1bHQubG9jYWxlKGEuZGVmYXVsdC5jb25maWcubGFuZyl8fHt9LHtjbG9uZTohMH0pKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGc9dC50PWZ1bmN0aW9uKGUsdCl7dmFyIG49bS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYobnVsbCE9PW4mJnZvaWQgMCE9PW4pcmV0dXJuIG47Zm9yKHZhciBpPWUuc3BsaXQoIi4iKSxyPWYsbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7dmFyIHM9aVtvXTtpZihuPXJbc10sbz09PWEtMSlyZXR1cm4gZChuLHQpO2lmKCFuKXJldHVybiIiO3I9bn1yZXR1cm4iIn0sdj10LnVzZT1mdW5jdGlvbihlKXtmPWV8fGZ9LHk9dC5pMThuPWZ1bmN0aW9uKGUpe209ZXx8bX07dC5kZWZhdWx0PXt1c2U6dix0OmcsaTE4bjp5fX0sIjQ4YTkiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI0MmU1Iiksbz1mdW5jdGlvbihlLHQsbixpLG8sYSl7dGhpcy54PW51bGw9PWU/MDplLHRoaXMueT1udWxsPT10PzA6dCx0aGlzLngyPW51bGw9PW4/MTpuLHRoaXMueTI9bnVsbD09aT8wOmksdGhpcy50eXBlPSJsaW5lYXIiLHRoaXMuZ2xvYmFsPWF8fCExLHIuY2FsbCh0aGlzLG8pfTtvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6b30saS5pbmhlcml0cyhvLHIpO3ZhciBhPW87ZS5leHBvcnRzPWF9LCI0OGFjIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9aS5leHRlbmRDb21wb25lbnRNb2RlbCh7dHlwZToiYXhpc1BvaW50ZXIiLGNvb3JkU3lzQXhlc0luZm86bnVsbCxkZWZhdWx0T3B0aW9uOntzaG93OiJhdXRvIix0cmlnZ2VyT246bnVsbCx6bGV2ZWw6MCx6OjUwLHR5cGU6ImxpbmUiLHNuYXA6ITEsdHJpZ2dlclRvb2x0aXA6ITAsdmFsdWU6bnVsbCxzdGF0dXM6bnVsbCxsaW5rOltdLGFuaW1hdGlvbjpudWxsLGFuaW1hdGlvbkR1cmF0aW9uVXBkYXRlOjIwMCxsaW5lU3R5bGU6e2NvbG9yOiIjYWFhIix3aWR0aDoxLHR5cGU6InNvbGlkIn0sc2hhZG93U3R5bGU6e2NvbG9yOiJyZ2JhKDE1MCwxNTAsMTUwLDAuMykifSxsYWJlbDp7c2hvdzohMCxmb3JtYXR0ZXI6bnVsbCxwcmVjaXNpb246ImF1dG8iLG1hcmdpbjozLGNvbG9yOiIjZmZmIixwYWRkaW5nOls1LDcsNSw3XSxiYWNrZ3JvdW5kQ29sb3I6ImF1dG8iLGJvcmRlckNvbG9yOm51bGwsYm9yZGVyV2lkdGg6MCxzaGFkb3dCbHVyOjMsc2hhZG93Q29sb3I6IiNhYWEifSxoYW5kbGU6e3Nob3c6ITEsaWNvbjoiTTEwLjcsMTEuOXYtMS4zSDkuM3YxLjNjLTQuOSwwLjMtOC44LDQuNC04LjgsOS40YzAsNSwzLjksOS4xLDguOCw5LjRoMS4zYzQuOS0wLjMsOC44LTQuNCw4LjgtOS40QzE5LjUsMTYuMywxNS42LDEyLjIsMTAuNywxMS45eiBNMTMuMywyNC40SDYuN3YtMS4yaDYuNnogTTEzLjMsMjJINi43di0xLjJoNi42eiBNMTMuMywxOS42SDYuN3YtMS4yaDYuNnoiLHNpemU6NDUsbWFyZ2luOjUwLGNvbG9yOiIjMzMzIixzaGFkb3dCbHVyOjMsc2hhZG93Q29sb3I6IiNhYWEiLHNoYWRvd09mZnNldFg6MCxzaGFkb3dPZmZzZXRZOjIsdGhyb3R0bGU6NDB9fX0pLG89cjtlLmV4cG9ydHM9b30sIjQ4YzciOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI2Y2I3Iiksbz1uKCI5ZTQ3IiksYT1uKCIyMDIzIikscz1yLmV4dGVuZCh7dHlwZToiY2FydGVzaWFuMmRBeGlzIixheGlzOm51bGwsaW5pdDpmdW5jdGlvbigpe3Muc3VwZXJBcHBseSh0aGlzLCJpbml0Iixhcmd1bWVudHMpLHRoaXMucmVzZXRSYW5nZSgpfSxtZXJnZU9wdGlvbjpmdW5jdGlvbigpe3Muc3VwZXJBcHBseSh0aGlzLCJtZXJnZU9wdGlvbiIsYXJndW1lbnRzKSx0aGlzLnJlc2V0UmFuZ2UoKX0scmVzdG9yZURhdGE6ZnVuY3Rpb24oKXtzLnN1cGVyQXBwbHkodGhpcywicmVzdG9yZURhdGEiLGFyZ3VtZW50cyksdGhpcy5yZXNldFJhbmdlKCl9LGdldENvb3JkU3lzTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lY01vZGVsLnF1ZXJ5Q29tcG9uZW50cyh7bWFpblR5cGU6ImdyaWQiLGluZGV4OnRoaXMub3B0aW9uLmdyaWRJbmRleCxpZDp0aGlzLm9wdGlvbi5ncmlkSWR9KVswXX19KTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIHQudHlwZXx8KHQuZGF0YT8iY2F0ZWdvcnkiOiJ2YWx1ZSIpfWkubWVyZ2Uocy5wcm90b3R5cGUsYSk7dmFyIGM9e29mZnNldDowfTtvKCJ4IixzLGwsYyksbygieSIscyxsLGMpO3ZhciB1PXM7ZS5leHBvcnRzPXV9LDQ5MzA6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjJkMDAiKSxyPW4oImQwMzkiKTtlLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhcigoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZpJiZpPDQxfSkpfSw0OTQyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIyY2Y0Iikscj1pLmRlYnVnTW9kZSxvPWZ1bmN0aW9uKCl7fTsxPT09ciYmKG89Y29uc29sZS5lcnJvcik7dmFyIGE9bztlLmV4cG9ydHM9YX0sIjQ5OGEiOmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigiMjNlNyIpLHI9bigiNThhOCIpLnRyaW0sbz1uKCJjOGQyIik7aSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpvKCJ0cmltIil9LHt0cmltOmZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcyl9fSl9LCI0OWU4IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiM2ViYSIpLHI9bigiNmQ4YiIpLG89bigiZDgxZSIpLGE9by51cGRhdGVDZW50ZXJBbmRab29tO2kucmVnaXN0ZXJBY3Rpb24oe3R5cGU6Imdlb1JvYW0iLGV2ZW50OiJnZW9Sb2FtIix1cGRhdGU6InVwZGF0ZVRyYW5zZm9ybSJ9LChmdW5jdGlvbihlLHQpe3ZhciBuPWUuY29tcG9uZW50VHlwZXx8InNlcmllcyI7dC5lYWNoQ29tcG9uZW50KHttYWluVHlwZTpuLHF1ZXJ5OmV9LChmdW5jdGlvbih0KXt2YXIgaT10LmNvb3JkaW5hdGVTeXN0ZW07aWYoImdlbyI9PT1pLnR5cGUpe3ZhciBvPWEoaSxlLHQuZ2V0KCJzY2FsZUxpbWl0IikpO3Quc2V0Q2VudGVyJiZ0LnNldENlbnRlcihvLmNlbnRlciksdC5zZXRab29tJiZ0LnNldFpvb20oby56b29tKSwic2VyaWVzIj09PW4mJnIuZWFjaCh0LnNlcmllc0dyb3VwLChmdW5jdGlvbihlKXtlLnNldENlbnRlcihvLmNlbnRlciksZS5zZXRab29tKG8uem9vbSl9KSl9fSkpfSkpfSwiNGEwMSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjFmYWIiKSxvPW4oIjYwN2QiKSxhPW4oImE0ZmUiKTtmdW5jdGlvbiBzKGUpe3RoaXMucG9pbnRlckNoZWNrZXIsdGhpcy5fenI9ZSx0aGlzLl9vcHQ9e307dmFyIHQ9aS5iaW5kLG49dChsLHRoaXMpLG89dChjLHRoaXMpLGE9dCh1LHRoaXMpLHM9dChoLHRoaXMpLGY9dChkLHRoaXMpO3IuY2FsbCh0aGlzKSx0aGlzLnNldFBvaW50ZXJDaGVja2VyPWZ1bmN0aW9uKGUpe3RoaXMucG9pbnRlckNoZWNrZXI9ZX0sdGhpcy5lbmFibGU9ZnVuY3Rpb24odCxyKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vcHQ9aS5kZWZhdWx0cyhpLmNsb25lKHIpfHx7fSx7em9vbU9uTW91c2VXaGVlbDohMCxtb3ZlT25Nb3VzZU1vdmU6ITAsbW92ZU9uTW91c2VXaGVlbDohMSxwcmV2ZW50RGVmYXVsdE1vdXNlTW92ZTohMH0pLG51bGw9PXQmJih0PSEwKSwhMCE9PXQmJiJtb3ZlIiE9PXQmJiJwYW4iIT09dHx8KGUub24oIm1vdXNlZG93biIsbiksZS5vbigibW91c2Vtb3ZlIixvKSxlLm9uKCJtb3VzZXVwIixhKSksITAhPT10JiYic2NhbGUiIT09dCYmInpvb20iIT09dHx8KGUub24oIm1vdXNld2hlZWwiLHMpLGUub24oInBpbmNoIixmKSl9LHRoaXMuZGlzYWJsZT1mdW5jdGlvbigpe2Uub2ZmKCJtb3VzZWRvd24iLG4pLGUub2ZmKCJtb3VzZW1vdmUiLG8pLGUub2ZmKCJtb3VzZXVwIixhKSxlLm9mZigibW91c2V3aGVlbCIscyksZS5vZmYoInBpbmNoIixmKX0sdGhpcy5kaXNwb3NlPXRoaXMuZGlzYWJsZSx0aGlzLmlzRHJhZ2dpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ2dpbmd9LHRoaXMuaXNQaW5jaGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9waW5jaGluZ319ZnVuY3Rpb24gbChlKXtpZighKG8uaXNNaWRkbGVPclJpZ2h0QnV0dG9uT25Nb3VzZVVwRG93bihlKXx8ZS50YXJnZXQmJmUudGFyZ2V0LmRyYWdnYWJsZSkpe3ZhciB0PWUub2Zmc2V0WCxuPWUub2Zmc2V0WTt0aGlzLnBvaW50ZXJDaGVja2VyJiZ0aGlzLnBvaW50ZXJDaGVja2VyKGUsdCxuKSYmKHRoaXMuX3g9dCx0aGlzLl95PW4sdGhpcy5fZHJhZ2dpbmc9ITApfX1mdW5jdGlvbiBjKGUpe2lmKHRoaXMuX2RyYWdnaW5nJiZtKCJtb3ZlT25Nb3VzZU1vdmUiLGUsdGhpcy5fb3B0KSYmInBpbmNoIiE9PWUuZ2VzdHVyZUV2ZW50JiYhYS5pc1Rha2VuKHRoaXMuX3pyLCJnbG9iYWxQYW4iKSl7dmFyIHQ9ZS5vZmZzZXRYLG49ZS5vZmZzZXRZLGk9dGhpcy5feCxyPXRoaXMuX3kscz10LWksbD1uLXI7dGhpcy5feD10LHRoaXMuX3k9bix0aGlzLl9vcHQucHJldmVudERlZmF1bHRNb3VzZU1vdmUmJm8uc3RvcChlLmV2ZW50KSxwKHRoaXMsInBhbiIsIm1vdmVPbk1vdXNlTW92ZSIsZSx7ZHg6cyxkeTpsLG9sZFg6aSxvbGRZOnIsbmV3WDp0LG5ld1k6bn0pfX1mdW5jdGlvbiB1KGUpe28uaXNNaWRkbGVPclJpZ2h0QnV0dG9uT25Nb3VzZVVwRG93bihlKXx8KHRoaXMuX2RyYWdnaW5nPSExKX1mdW5jdGlvbiBoKGUpe3ZhciB0PW0oInpvb21Pbk1vdXNlV2hlZWwiLGUsdGhpcy5fb3B0KSxuPW0oIm1vdmVPbk1vdXNlV2hlZWwiLGUsdGhpcy5fb3B0KSxpPWUud2hlZWxEZWx0YSxyPU1hdGguYWJzKGkpLG89ZS5vZmZzZXRYLGE9ZS5vZmZzZXRZO2lmKDAhPT1pJiYodHx8bikpe2lmKHQpe3ZhciBzPXI+Mz8xLjQ6cj4xPzEuMjoxLjEsbD1pPjA/czoxL3M7Zih0aGlzLCJ6b29tIiwiem9vbU9uTW91c2VXaGVlbCIsZSx7c2NhbGU6bCxvcmlnaW5YOm8sb3JpZ2luWTphfSl9aWYobil7dmFyIGM9TWF0aC5hYnMoaSksdT0oaT4wPzE6LTEpKihjPjM/LjQ6Yz4xPy4xNTouMDUpO2YodGhpcywic2Nyb2xsTW92ZSIsIm1vdmVPbk1vdXNlV2hlZWwiLGUse3Njcm9sbERlbHRhOnUsb3JpZ2luWDpvLG9yaWdpblk6YX0pfX19ZnVuY3Rpb24gZChlKXtpZighYS5pc1Rha2VuKHRoaXMuX3pyLCJnbG9iYWxQYW4iKSl7dmFyIHQ9ZS5waW5jaFNjYWxlPjE/MS4xOjEvMS4xO2YodGhpcywiem9vbSIsbnVsbCxlLHtzY2FsZTp0LG9yaWdpblg6ZS5waW5jaFgsb3JpZ2luWTplLnBpbmNoWX0pfX1mdW5jdGlvbiBmKGUsdCxuLGkscil7ZS5wb2ludGVyQ2hlY2tlciYmZS5wb2ludGVyQ2hlY2tlcihpLHIub3JpZ2luWCxyLm9yaWdpblkpJiYoby5zdG9wKGkuZXZlbnQpLHAoZSx0LG4saSxyKSl9ZnVuY3Rpb24gcChlLHQsbixyLG8pe28uaXNBdmFpbGFibGVCZWhhdmlvcj1pLmJpbmQobSxudWxsLG4sciksZS50cmlnZ2VyKHQsbyl9ZnVuY3Rpb24gbShlLHQsbil7dmFyIHI9bltlXTtyZXR1cm4hZXx8ciYmKCFpLmlzU3RyaW5nKHIpfHx0LmV2ZW50W3IrIktleSJdKX1pLm1peGluKHMscik7dmFyIGc9cztlLmV4cG9ydHM9Z30sIjRhM2YiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0MDFiIikscj1pLmNyZWF0ZSxvPWkuZGlzdFNxdWFyZSxhPU1hdGgucG93LHM9TWF0aC5zcXJ0LGw9MWUtOCxjPTFlLTQsdT1zKDMpLGg9MS8zLGQ9cigpLGY9cigpLHA9cigpO2Z1bmN0aW9uIG0oZSl7cmV0dXJuIGU+LWwmJmU8bH1mdW5jdGlvbiBnKGUpe3JldHVybiBlPmx8fGU8LWx9ZnVuY3Rpb24gdihlLHQsbixpLHIpe3ZhciBvPTEtcjtyZXR1cm4gbypvKihvKmUrMypyKnQpK3IqcioocippKzMqbypuKX1mdW5jdGlvbiB5KGUsdCxuLGkscil7dmFyIG89MS1yO3JldHVybiAzKigoKHQtZSkqbysyKihuLXQpKnIpKm8rKGktbikqcipyKX1mdW5jdGlvbiBiKGUsdCxuLGkscixvKXt2YXIgbD1pKzMqKHQtbiktZSxjPTMqKG4tMip0K2UpLGQ9MyoodC1lKSxmPWUtcixwPWMqYy0zKmwqZCxnPWMqZC05KmwqZix2PWQqZC0zKmMqZix5PTA7aWYobShwKSYmbShnKSlpZihtKGMpKW9bMF09MDtlbHNle3ZhciBiPS1kL2M7Yj49MCYmYjw9MSYmKG9beSsrXT1iKX1lbHNle3ZhciB4PWcqZy00KnAqdjtpZihtKHgpKXt2YXIgXz1nL3Asdz0oYj0tYy9sK18sLV8vMik7Yj49MCYmYjw9MSYmKG9beSsrXT1iKSx3Pj0wJiZ3PD0xJiYob1t5KytdPXcpfWVsc2UgaWYoeD4wKXt2YXIgUz1zKHgpLEM9cCpjKzEuNSpsKigtZytTKSxrPXAqYysxLjUqbCooLWctUyk7Qz1DPDA/LWEoLUMsaCk6YShDLGgpLGs9azwwPy1hKC1rLGgpOmEoayxoKTtiPSgtYy0oQytrKSkvKDMqbCk7Yj49MCYmYjw9MSYmKG9beSsrXT1iKX1lbHNle3ZhciBUPSgyKnAqYy0zKmwqZykvKDIqcyhwKnAqcCkpLE09TWF0aC5hY29zKFQpLzMsRT1zKHApLEk9TWF0aC5jb3MoTSksRD0oYj0oLWMtMipFKkkpLygzKmwpLHc9KC1jK0UqKEkrdSpNYXRoLnNpbihNKSkpLygzKmwpLCgtYytFKihJLXUqTWF0aC5zaW4oTSkpKS8oMypsKSk7Yj49MCYmYjw9MSYmKG9beSsrXT1iKSx3Pj0wJiZ3PD0xJiYob1t5KytdPXcpLEQ+PTAmJkQ8PTEmJihvW3krK109RCl9fXJldHVybiB5fWZ1bmN0aW9uIHgoZSx0LG4saSxyKXt2YXIgbz02Km4tMTIqdCs2KmUsYT05KnQrMyppLTMqZS05Km4sbD0zKnQtMyplLGM9MDtpZihtKGEpKXtpZihnKG8pKXt2YXIgdT0tbC9vO3U+PTAmJnU8PTEmJihyW2MrK109dSl9fWVsc2V7dmFyIGg9bypvLTQqYSpsO2lmKG0oaCkpclswXT0tby8oMiphKTtlbHNlIGlmKGg+MCl7dmFyIGQ9cyhoKSxmPSh1PSgtbytkKS8oMiphKSwoLW8tZCkvKDIqYSkpO3U+PTAmJnU8PTEmJihyW2MrK109dSksZj49MCYmZjw9MSYmKHJbYysrXT1mKX19cmV0dXJuIGN9ZnVuY3Rpb24gXyhlLHQsbixpLHIsbyl7dmFyIGE9KHQtZSkqcitlLHM9KG4tdCkqcit0LGw9KGktbikqcituLGM9KHMtYSkqcithLHU9KGwtcykqcitzLGg9KHUtYykqcitjO29bMF09ZSxvWzFdPWEsb1syXT1jLG9bM109aCxvWzRdPWgsb1s1XT11LG9bNl09bCxvWzddPWl9ZnVuY3Rpb24gdyhlLHQsbixpLHIsYSxsLHUsaCxtLGcpe3ZhciB5LGIseCxfLHcsUz0uMDA1LEM9MS8wO2RbMF09aCxkWzFdPW07Zm9yKHZhciBrPTA7azwxO2srPS4wNSlmWzBdPXYoZSxuLHIsbCxrKSxmWzFdPXYodCxpLGEsdSxrKSxfPW8oZCxmKSxfPEMmJih5PWssQz1fKTtDPTEvMDtmb3IodmFyIFQ9MDtUPDMyO1QrKyl7aWYoUzxjKWJyZWFrO2I9eS1TLHg9eStTLGZbMF09dihlLG4scixsLGIpLGZbMV09dih0LGksYSx1LGIpLF89byhmLGQpLGI+PTAmJl88Qz8oeT1iLEM9Xyk6KHBbMF09dihlLG4scixsLHgpLHBbMV09dih0LGksYSx1LHgpLHc9byhwLGQpLHg8PTEmJnc8Qz8oeT14LEM9dyk6Uyo9LjUpfXJldHVybiBnJiYoZ1swXT12KGUsbixyLGwseSksZ1sxXT12KHQsaSxhLHUseSkpLHMoQyl9ZnVuY3Rpb24gUyhlLHQsbixpKXt2YXIgcj0xLWk7cmV0dXJuIHIqKHIqZSsyKmkqdCkraSppKm59ZnVuY3Rpb24gQyhlLHQsbixpKXtyZXR1cm4gMiooKDEtaSkqKHQtZSkraSoobi10KSl9ZnVuY3Rpb24gayhlLHQsbixpLHIpe3ZhciBvPWUtMip0K24sYT0yKih0LWUpLGw9ZS1pLGM9MDtpZihtKG8pKXtpZihnKGEpKXt2YXIgdT0tbC9hO3U+PTAmJnU8PTEmJihyW2MrK109dSl9fWVsc2V7dmFyIGg9YSphLTQqbypsO2lmKG0oaCkpe3U9LWEvKDIqbyk7dT49MCYmdTw9MSYmKHJbYysrXT11KX1lbHNlIGlmKGg+MCl7dmFyIGQ9cyhoKSxmPSh1PSgtYStkKS8oMipvKSwoLWEtZCkvKDIqbykpO3U+PTAmJnU8PTEmJihyW2MrK109dSksZj49MCYmZjw9MSYmKHJbYysrXT1mKX19cmV0dXJuIGN9ZnVuY3Rpb24gVChlLHQsbil7dmFyIGk9ZStuLTIqdDtyZXR1cm4gMD09PWk/LjU6KGUtdCkvaX1mdW5jdGlvbiBNKGUsdCxuLGkscil7dmFyIG89KHQtZSkqaStlLGE9KG4tdCkqaSt0LHM9KGEtbykqaStvO3JbMF09ZSxyWzFdPW8sclsyXT1zLHJbM109cyxyWzRdPWEscls1XT1ufWZ1bmN0aW9uIEUoZSx0LG4saSxyLGEsbCx1LGgpe3ZhciBtLGc9LjAwNSx2PTEvMDtkWzBdPWwsZFsxXT11O2Zvcih2YXIgeT0wO3k8MTt5Kz0uMDUpe2ZbMF09UyhlLG4scix5KSxmWzFdPVModCxpLGEseSk7dmFyIGI9byhkLGYpO2I8diYmKG09eSx2PWIpfXY9MS8wO2Zvcih2YXIgeD0wO3g8MzI7eCsrKXtpZihnPGMpYnJlYWs7dmFyIF89bS1nLHc9bStnO2ZbMF09UyhlLG4scixfKSxmWzFdPVModCxpLGEsXyk7Yj1vKGYsZCk7aWYoXz49MCYmYjx2KW09Xyx2PWI7ZWxzZXtwWzBdPVMoZSxuLHIsdykscFsxXT1TKHQsaSxhLHcpO3ZhciBDPW8ocCxkKTt3PD0xJiZDPHY/KG09dyx2PUMpOmcqPS41fX1yZXR1cm4gaCYmKGhbMF09UyhlLG4scixtKSxoWzFdPVModCxpLGEsbSkpLHModil9dC5jdWJpY0F0PXYsdC5jdWJpY0Rlcml2YXRpdmVBdD15LHQuY3ViaWNSb290QXQ9Yix0LmN1YmljRXh0cmVtYT14LHQuY3ViaWNTdWJkaXZpZGU9Xyx0LmN1YmljUHJvamVjdFBvaW50PXcsdC5xdWFkcmF0aWNBdD1TLHQucXVhZHJhdGljRGVyaXZhdGl2ZUF0PUMsdC5xdWFkcmF0aWNSb290QXQ9ayx0LnF1YWRyYXRpY0V4dHJlbXVtPVQsdC5xdWFkcmF0aWNTdWJkaXZpZGU9TSx0LnF1YWRyYXRpY1Byb2plY3RQb2ludD1FfSwiNGE3YiI6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKCJjNTMyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dD10fHx7fTt2YXIgbj17fSxyPVsidXJsIiwibWV0aG9kIiwiZGF0YSJdLG89WyJoZWFkZXJzIiwiYXV0aCIsInByb3h5IiwicGFyYW1zIl0sYT1bImJhc2VVUkwiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwidHJhbnNmb3JtUmVzcG9uc2UiLCJwYXJhbXNTZXJpYWxpemVyIiwidGltZW91dCIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwiYWRhcHRlciIsInJlc3BvbnNlVHlwZSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwiZGVjb21wcmVzcyIsIm1heENvbnRlbnRMZW5ndGgiLCJtYXhCb2R5TGVuZ3RoIiwibWF4UmVkaXJlY3RzIiwidHJhbnNwb3J0IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImNhbmNlbFRva2VuIiwic29ja2V0UGF0aCIsInJlc3BvbnNlRW5jb2RpbmciXSxzPVsidmFsaWRhdGVTdGF0dXMiXTtmdW5jdGlvbiBsKGUsdCl7cmV0dXJuIGkuaXNQbGFpbk9iamVjdChlKSYmaS5pc1BsYWluT2JqZWN0KHQpP2kubWVyZ2UoZSx0KTppLmlzUGxhaW5PYmplY3QodCk/aS5tZXJnZSh7fSx0KTppLmlzQXJyYXkodCk/dC5zbGljZSgpOnR9ZnVuY3Rpb24gYyhyKXtpLmlzVW5kZWZpbmVkKHRbcl0pP2kuaXNVbmRlZmluZWQoZVtyXSl8fChuW3JdPWwodm9pZCAwLGVbcl0pKTpuW3JdPWwoZVtyXSx0W3JdKX1pLmZvckVhY2gociwoZnVuY3Rpb24oZSl7aS5pc1VuZGVmaW5lZCh0W2VdKXx8KG5bZV09bCh2b2lkIDAsdFtlXSkpfSkpLGkuZm9yRWFjaChvLGMpLGkuZm9yRWFjaChhLChmdW5jdGlvbihyKXtpLmlzVW5kZWZpbmVkKHRbcl0pP2kuaXNVbmRlZmluZWQoZVtyXSl8fChuW3JdPWwodm9pZCAwLGVbcl0pKTpuW3JdPWwodm9pZCAwLHRbcl0pfSkpLGkuZm9yRWFjaChzLChmdW5jdGlvbihpKXtpIGluIHQ/bltpXT1sKGVbaV0sdFtpXSk6aSBpbiBlJiYobltpXT1sKHZvaWQgMCxlW2ldKSl9KSk7dmFyIHU9ci5jb25jYXQobykuY29uY2F0KGEpLmNvbmNhdChzKSxoPU9iamVjdC5rZXlzKGUpLmNvbmNhdChPYmplY3Qua2V5cyh0KSkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4tMT09PXUuaW5kZXhPZihlKX0pKTtyZXR1cm4gaS5mb3JFYWNoKGgsYyksbn19LCI0YTlkIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiZGNiMyIpLHI9bigiZmYyZSIpLG89bigiMDE1NiIpLGE9bigiNjY3OSIpLHM9aS5leHRlbmQoe21ha2VFbE9wdGlvbjpmdW5jdGlvbihlLHQsbixpLGEpe3ZhciBzPW4uYXhpcyx1PXMuZ3JpZCxoPWkuZ2V0KCJ0eXBlIiksZD1sKHUscykuZ2V0T3RoZXJBeGlzKHMpLmdldEdsb2JhbEV4dGVudCgpLGY9cy50b0dsb2JhbENvb3JkKHMuZGF0YVRvQ29vcmQodCwhMCkpO2lmKGgmJiJub25lIiE9PWgpe3ZhciBwPXIuYnVpbGRFbFN0eWxlKGkpLG09Y1toXShzLGYsZCk7bS5zdHlsZT1wLGUuZ3JhcGhpY0tleT1tLnR5cGUsZS5wb2ludGVyPW19dmFyIGc9by5sYXlvdXQodS5tb2RlbCxuKTtyLmJ1aWxkQ2FydGVzaWFuU2luZ2xlTGFiZWxFbE9wdGlvbih0LGUsZyxuLGksYSl9LGdldEhhbmRsZVRyYW5zZm9ybTpmdW5jdGlvbihlLHQsbil7dmFyIGk9by5sYXlvdXQodC5heGlzLmdyaWQubW9kZWwsdCx7bGFiZWxJbnNpZGU6ITF9KTtyZXR1cm4gaS5sYWJlbE1hcmdpbj1uLmdldCgiaGFuZGxlLm1hcmdpbiIpLHtwb3NpdGlvbjpyLmdldFRyYW5zZm9ybWVkUG9zaXRpb24odC5heGlzLGUsaSkscm90YXRpb246aS5yb3RhdGlvbisoaS5sYWJlbERpcmVjdGlvbjwwP01hdGguUEk6MCl9fSx1cGRhdGVIYW5kbGVUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9bi5heGlzLG89ci5ncmlkLGE9ci5nZXRHbG9iYWxFeHRlbnQoITApLHM9bChvLHIpLmdldE90aGVyQXhpcyhyKS5nZXRHbG9iYWxFeHRlbnQoKSxjPSJ4Ij09PXIuZGltPzA6MSx1PWUucG9zaXRpb247dVtjXSs9dFtjXSx1W2NdPU1hdGgubWluKGFbMV0sdVtjXSksdVtjXT1NYXRoLm1heChhWzBdLHVbY10pO3ZhciBoPShzWzFdK3NbMF0pLzIsZD1baCxoXTtkW2NdPXVbY107dmFyIGY9W3t2ZXJ0aWNhbEFsaWduOiJtaWRkbGUifSx7YWxpZ246ImNlbnRlciJ9XTtyZXR1cm57cG9zaXRpb246dSxyb3RhdGlvbjplLnJvdGF0aW9uLGN1cnNvclBvaW50OmQsdG9vbHRpcE9wdGlvbjpmW2NdfX19KTtmdW5jdGlvbiBsKGUsdCl7dmFyIG49e307cmV0dXJuIG5bdC5kaW0rIkF4aXNJbmRleCJdPXQuaW5kZXgsZS5nZXRDYXJ0ZXNpYW4obil9dmFyIGM9e2xpbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXIubWFrZUxpbmVTaGFwZShbdCxuWzBdXSxbdCxuWzFdXSx1KGUpKTtyZXR1cm57dHlwZToiTGluZSIsc3ViUGl4ZWxPcHRpbWl6ZTohMCxzaGFwZTppfX0sc2hhZG93OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1NYXRoLm1heCgxLGUuZ2V0QmFuZFdpZHRoKCkpLG89blsxXS1uWzBdO3JldHVybnt0eXBlOiJSZWN0IixzaGFwZTpyLm1ha2VSZWN0U2hhcGUoW3QtaS8yLG5bMF1dLFtpLG9dLHUoZSkpfX19O2Z1bmN0aW9uIHUoZSl7cmV0dXJuIngiPT09ZS5kaW0/MDoxfWEucmVnaXN0ZXJBeGlzUG9pbnRlckNsYXNzKCJDYXJ0ZXNpYW5BeGlzUG9pbnRlciIscyk7dmFyIGg9cztlLmV4cG9ydHM9aH0sIjRhYTIiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJjYmU1Iikscj1uKCI4OTdhIiksbz1pLmV4dGVuZCh7dHlwZToic2VjdG9yIixzaGFwZTp7Y3g6MCxjeTowLHIwOjAscjowLHN0YXJ0QW5nbGU6MCxlbmRBbmdsZToyKk1hdGguUEksY2xvY2t3aXNlOiEwfSxicnVzaDpyKGkucHJvdG90eXBlLmJydXNoKSxidWlsZFBhdGg6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmN4LGk9dC5jeSxyPU1hdGgubWF4KHQucjB8fDAsMCksbz1NYXRoLm1heCh0LnIsMCksYT10LnN0YXJ0QW5nbGUscz10LmVuZEFuZ2xlLGw9dC5jbG9ja3dpc2UsYz1NYXRoLmNvcyhhKSx1PU1hdGguc2luKGEpO2UubW92ZVRvKGMqcituLHUqcitpKSxlLmxpbmVUbyhjKm8rbix1Km8raSksZS5hcmMobixpLG8sYSxzLCFsKSxlLmxpbmVUbyhNYXRoLmNvcyhzKSpyK24sTWF0aC5zaW4ocykqcitpKSwwIT09ciYmZS5hcmMobixpLHIscyxhLGwpLGUuY2xvc2VQYXRoKCl9fSk7ZS5leHBvcnRzPW99LCI0YWIxIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiODcyNyIpLHI9aS5jcmVhdGVFbGVtZW50LG89bigiNmQ4YiIpLGE9bigiY2JlNSIpLHM9bigiMGRhOCIpLGw9bigiNzZhNSIpLGM9bigiM2Y4ZSIpLHU9Yy5wYXRoLGg9Yy5pbWFnZSxkPWMudGV4dCxmPSIwIixwPSIxIjtmdW5jdGlvbiBtKGUsdCxuLGkscil7dGhpcy5fenJJZD1lLHRoaXMuX3N2Z1Jvb3Q9dCx0aGlzLl90YWdOYW1lcz0ic3RyaW5nIj09PXR5cGVvZiBuP1tuXTpuLHRoaXMuX21hcmtMYWJlbD1pLHRoaXMuX2RvbU5hbWU9cnx8Il9kb20iLHRoaXMubmV4dElkPTB9bS5wcm90b3R5cGUuY3JlYXRlRWxlbWVudD1yLG0ucHJvdG90eXBlLmdldERlZnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc3ZnUm9vdCxuPXRoaXMuX3N2Z1Jvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRlZnMiKTtyZXR1cm4gMD09PW4ubGVuZ3RoP2U/KG49dC5pbnNlcnRCZWZvcmUodGhpcy5jcmVhdGVFbGVtZW50KCJkZWZzIiksdC5maXJzdENoaWxkKSxuLmNvbnRhaW5zfHwobi5jb250YWlucz1mdW5jdGlvbihlKXt2YXIgdD1uLmNoaWxkcmVuO2lmKCF0KXJldHVybiExO2Zvcih2YXIgaT10Lmxlbmd0aC0xO2k+PTA7LS1pKWlmKHRbaV09PT1lKXJldHVybiEwO3JldHVybiExfSksbik6bnVsbDpuWzBdfSxtLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZihlKXt2YXIgbj10aGlzLmdldERlZnMoITEpO2lmKGVbdGhpcy5fZG9tTmFtZV0mJm4uY29udGFpbnMoZVt0aGlzLl9kb21OYW1lXSkpImZ1bmN0aW9uIj09PXR5cGVvZiB0JiZ0KGUpO2Vsc2V7dmFyIGk9dGhpcy5hZGQoZSk7aSYmKGVbdGhpcy5fZG9tTmFtZV09aSl9fX0sbS5wcm90b3R5cGUuYWRkRG9tPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RGVmcyghMCk7dC5hcHBlbmRDaGlsZChlKX0sbS5wcm90b3R5cGUucmVtb3ZlRG9tPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RGVmcyghMSk7dCYmZVt0aGlzLl9kb21OYW1lXSYmKHQucmVtb3ZlQ2hpbGQoZVt0aGlzLl9kb21OYW1lXSksZVt0aGlzLl9kb21OYW1lXT1udWxsKX0sbS5wcm90b3R5cGUuZ2V0RG9tcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0RGVmcyghMSk7aWYoIWUpcmV0dXJuW107dmFyIHQ9W107cmV0dXJuIG8uZWFjaCh0aGlzLl90YWdOYW1lcywoZnVuY3Rpb24obil7dmFyIGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShuKTt0PXQuY29uY2F0KFtdLnNsaWNlLmNhbGwoaSkpfSkpLHR9LG0ucHJvdG90eXBlLm1hcmtBbGxVbnVzZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldERvbXMoKSx0PXRoaXM7by5lYWNoKGUsKGZ1bmN0aW9uKGUpe2VbdC5fbWFya0xhYmVsXT1mfSkpfSxtLnByb3RvdHlwZS5tYXJrVXNlZD1mdW5jdGlvbihlKXtlJiYoZVt0aGlzLl9tYXJrTGFiZWxdPXApfSxtLnByb3RvdHlwZS5yZW1vdmVVbnVzZWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldERlZnMoITEpO2lmKGUpe3ZhciB0PXRoaXMuZ2V0RG9tcygpLG49dGhpcztvLmVhY2godCwoZnVuY3Rpb24odCl7dFtuLl9tYXJrTGFiZWxdIT09cCYmZS5yZW1vdmVDaGlsZCh0KX0pKX19LG0ucHJvdG90eXBlLmdldFN2Z1Byb3h5PWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYT91OmUgaW5zdGFuY2VvZiBzP2g6ZSBpbnN0YW5jZW9mIGw/ZDp1fSxtLnByb3RvdHlwZS5nZXRUZXh0U3ZnRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3RleHRTdmdFbH0sbS5wcm90b3R5cGUuZ2V0U3ZnRWxlbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3N2Z0VsfTt2YXIgZz1tO2UuZXhwb3J0cz1nfSwiNGIwOCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjdkY2YiKSxyPWkuZXh0ZW5kKHt0eXBlOiJkYXRhWm9vbS5zZWxlY3QifSk7ZS5leHBvcnRzPXJ9LCI0YjI2IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgaT1uKCIyYjBlIikscj1hKGkpLG89bigiNTkyNCIpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPSExLGw9ITEsYz12b2lkIDAsdT1mdW5jdGlvbigpe2lmKCFyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcil7dmFyIGU9ZC5tb2RhbERvbTtyZXR1cm4gZT9zPSEwOihzPSExLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5tb2RhbERvbT1lLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIiwoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9KSksZS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZC5kb09uTW9kYWxDbGljayYmZC5kb09uTW9kYWxDbGljaygpfSkpKSxlfX0saD17fSxkPXttb2RhbEZhZGU6ITAsZ2V0SW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGhbZV19LHJlZ2lzdGVyOmZ1bmN0aW9uKGUsdCl7ZSYmdCYmKGhbZV09dCl9LGRlcmVnaXN0ZXI6ZnVuY3Rpb24oZSl7ZSYmKGhbZV09bnVsbCxkZWxldGUgaFtlXSl9LG5leHRaSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gZC56SW5kZXgrK30sbW9kYWxTdGFjazpbXSxkb09uTW9kYWxDbGljazpmdW5jdGlvbigpe3ZhciBlPWQubW9kYWxTdGFja1tkLm1vZGFsU3RhY2subGVuZ3RoLTFdO2lmKGUpe3ZhciB0PWQuZ2V0SW5zdGFuY2UoZS5pZCk7dCYmdC5jbG9zZU9uQ2xpY2tNb2RhbCYmdC5jbG9zZSgpfX0sb3Blbk1vZGFsOmZ1bmN0aW9uKGUsdCxuLGksYSl7aWYoIXIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyJiZlJiZ2b2lkIDAhPT10KXt0aGlzLm1vZGFsRmFkZT1hO2Zvcih2YXIgbD10aGlzLm1vZGFsU3RhY2ssYz0wLGg9bC5sZW5ndGg7YzxoO2MrKyl7dmFyIGQ9bFtjXTtpZihkLmlkPT09ZSlyZXR1cm59dmFyIGY9dSgpO2lmKCgwLG8uYWRkQ2xhc3MpKGYsInYtbW9kYWwiKSx0aGlzLm1vZGFsRmFkZSYmIXMmJigwLG8uYWRkQ2xhc3MpKGYsInYtbW9kYWwtZW50ZXIiKSxpKXt2YXIgcD1pLnRyaW0oKS5zcGxpdCgvXHMrLyk7cC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxvLmFkZENsYXNzKShmLGUpfSkpfXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7KDAsby5yZW1vdmVDbGFzcykoZiwidi1tb2RhbC1lbnRlciIpfSksMjAwKSxuJiZuLnBhcmVudE5vZGUmJjExIT09bi5wYXJlbnROb2RlLm5vZGVUeXBlP24ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChmKTpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYpLHQmJihmLnN0eWxlLnpJbmRleD10KSxmLnRhYkluZGV4PTAsZi5zdHlsZS5kaXNwbGF5PSIiLHRoaXMubW9kYWxTdGFjay5wdXNoKHtpZDplLHpJbmRleDp0LG1vZGFsQ2xhc3M6aX0pfX0sY2xvc2VNb2RhbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGFsU3RhY2ssbj11KCk7aWYodC5sZW5ndGg+MCl7dmFyIGk9dFt0Lmxlbmd0aC0xXTtpZihpLmlkPT09ZSl7aWYoaS5tb2RhbENsYXNzKXt2YXIgcj1pLm1vZGFsQ2xhc3MudHJpbSgpLnNwbGl0KC9ccysvKTtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybigwLG8ucmVtb3ZlQ2xhc3MpKG4sZSl9KSl9dC5wb3AoKSx0Lmxlbmd0aD4wJiYobi5zdHlsZS56SW5kZXg9dFt0Lmxlbmd0aC0xXS56SW5kZXgpfWVsc2UgZm9yKHZhciBhPXQubGVuZ3RoLTE7YT49MDthLS0paWYodFthXS5pZD09PWUpe3Quc3BsaWNlKGEsMSk7YnJlYWt9fTA9PT10Lmxlbmd0aCYmKHRoaXMubW9kYWxGYWRlJiYoMCxvLmFkZENsYXNzKShuLCJ2LW1vZGFsLWxlYXZlIiksc2V0VGltZW91dCgoZnVuY3Rpb24oKXswPT09dC5sZW5ndGgmJihuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSxuLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGQubW9kYWxEb209dm9pZCAwKSwoMCxvLnJlbW92ZUNsYXNzKShuLCJ2LW1vZGFsLWxlYXZlIil9KSwyMDApKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLCJ6SW5kZXgiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx8fChjPWN8fChyLmRlZmF1bHQucHJvdG90eXBlLiRFTEVNRU5UfHx7fSkuekluZGV4fHwyZTMsbD0hMCksY30sc2V0OmZ1bmN0aW9uKGUpe2M9ZX19KTt2YXIgZj1mdW5jdGlvbigpe2lmKCFyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciYmZC5tb2RhbFN0YWNrLmxlbmd0aD4wKXt2YXIgZT1kLm1vZGFsU3RhY2tbZC5tb2RhbFN0YWNrLmxlbmd0aC0xXTtpZighZSlyZXR1cm47dmFyIHQ9ZC5nZXRJbnN0YW5jZShlLmlkKTtyZXR1cm4gdH19O3IuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyfHx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKGZ1bmN0aW9uKGUpe2lmKDI3PT09ZS5rZXlDb2RlKXt2YXIgdD1mKCk7dCYmdC5jbG9zZU9uUHJlc3NFc2NhcGUmJih0LmhhbmRsZUNsb3NlP3QuaGFuZGxlQ2xvc2UoKTp0LmhhbmRsZUFjdGlvbj90LmhhbmRsZUFjdGlvbigiY2FuY2VsIik6dC5jbG9zZSgpKX19KSksdC5kZWZhdWx0PWR9LCI0YjhiIjpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sIjRiZjYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2NmZjIikscj1uKCI2OTdlIiksbz1uKCJmOTM0IiksYT1vLmdldExheW91dFJlY3Qscz1uKCI2ZDhiIiksbD1zLmVhY2g7ZnVuY3Rpb24gYyhlLHQsbil7dGhpcy5kaW1lbnNpb249InNpbmdsZSIsdGhpcy5kaW1lbnNpb25zPVsic2luZ2xlIl0sdGhpcy5fYXhpcz1udWxsLHRoaXMuX3JlY3QsdGhpcy5faW5pdChlLHQsbiksdGhpcy5tb2RlbD1lfWMucHJvdG90eXBlPXt0eXBlOiJzaW5nbGVBeGlzIixheGlzUG9pbnRlckVuYWJsZWQ6ITAsY29uc3RydWN0b3I6YyxfaW5pdDpmdW5jdGlvbihlLHQsbil7dmFyIG89dGhpcy5kaW1lbnNpb24sYT1uZXcgaShvLHIuY3JlYXRlU2NhbGVCeU1vZGVsKGUpLFswLDBdLGUuZ2V0KCJ0eXBlIiksZS5nZXQoInBvc2l0aW9uIikpLHM9ImNhdGVnb3J5Ij09PWEudHlwZTthLm9uQmFuZD1zJiZlLmdldCgiYm91bmRhcnlHYXAiKSxhLmludmVyc2U9ZS5nZXQoImludmVyc2UiKSxhLm9yaWVudD1lLmdldCgib3JpZW50IiksZS5heGlzPWEsYS5tb2RlbD1lLGEuY29vcmRpbmF0ZVN5c3RlbT10aGlzLHRoaXMuX2F4aXM9YX0sdXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZS5lYWNoU2VyaWVzKChmdW5jdGlvbihlKXtpZihlLmNvb3JkaW5hdGVTeXN0ZW09PT10aGlzKXt2YXIgdD1lLmdldERhdGEoKTtsKHQubWFwRGltZW5zaW9uKHRoaXMuZGltZW5zaW9uLCEwKSwoZnVuY3Rpb24oZSl7dGhpcy5fYXhpcy5zY2FsZS51bmlvbkV4dGVudEZyb21EYXRhKHQsZSl9KSx0aGlzKSxyLm5pY2VTY2FsZUV4dGVudCh0aGlzLl9heGlzLnNjYWxlLHRoaXMuX2F4aXMubW9kZWwpfX0pLHRoaXMpfSxyZXNpemU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZWN0PWEoe2xlZnQ6ZS5nZXQoImxlZnQiKSx0b3A6ZS5nZXQoInRvcCIpLHJpZ2h0OmUuZ2V0KCJyaWdodCIpLGJvdHRvbTplLmdldCgiYm90dG9tIiksd2lkdGg6ZS5nZXQoIndpZHRoIiksaGVpZ2h0OmUuZ2V0KCJoZWlnaHQiKX0se3dpZHRoOnQuZ2V0V2lkdGgoKSxoZWlnaHQ6dC5nZXRIZWlnaHQoKX0pLHRoaXMuX2FkanVzdEF4aXMoKX0sZ2V0UmVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWN0fSxfYWRqdXN0QXhpczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3JlY3QsdD10aGlzLl9heGlzLG49dC5pc0hvcml6b250YWwoKSxpPW4/WzAsZS53aWR0aF06WzAsZS5oZWlnaHRdLHI9dC5yZXZlcnNlPzE6MDt0LnNldEV4dGVudChpW3JdLGlbMS1yXSksdGhpcy5fdXBkYXRlQXhpc1RyYW5zZm9ybSh0LG4/ZS54OmUueSl9LF91cGRhdGVBeGlzVHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5nZXRFeHRlbnQoKSxpPW5bMF0rblsxXSxyPWUuaXNIb3Jpem9udGFsKCk7ZS50b0dsb2JhbENvb3JkPXI/ZnVuY3Rpb24oZSl7cmV0dXJuIGUrdH06ZnVuY3Rpb24oZSl7cmV0dXJuIGktZSt0fSxlLnRvTG9jYWxDb29yZD1yP2Z1bmN0aW9uKGUpe3JldHVybiBlLXR9OmZ1bmN0aW9uKGUpe3JldHVybiBpLWUrdH19LGdldEF4aXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXhpc30sZ2V0QmFzZUF4aXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXhpc30sZ2V0QXhlczpmdW5jdGlvbigpe3JldHVyblt0aGlzLl9heGlzXX0sZ2V0VG9vbHRpcEF4ZXM6ZnVuY3Rpb24oKXtyZXR1cm57YmFzZUF4ZXM6W3RoaXMuZ2V0QXhpcygpXX19LGNvbnRhaW5Qb2ludDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldFJlY3QoKSxuPXRoaXMuZ2V0QXhpcygpLGk9bi5vcmllbnQ7cmV0dXJuImhvcml6b250YWwiPT09aT9uLmNvbnRhaW4obi50b0xvY2FsQ29vcmQoZVswXSkpJiZlWzFdPj10LnkmJmVbMV08PXQueSt0LmhlaWdodDpuLmNvbnRhaW4obi50b0xvY2FsQ29vcmQoZVsxXSkpJiZlWzBdPj10LnkmJmVbMF08PXQueSt0LmhlaWdodH0scG9pbnRUb0RhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBeGlzKCk7cmV0dXJuW3QuY29vcmRUb0RhdGEodC50b0xvY2FsQ29vcmQoZVsiaG9yaXpvbnRhbCI9PT10Lm9yaWVudD8wOjFdKSldfSxkYXRhVG9Qb2ludDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF4aXMoKSxuPXRoaXMuZ2V0UmVjdCgpLGk9W10scj0iaG9yaXpvbnRhbCI9PT10Lm9yaWVudD8wOjE7cmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheSYmKGU9ZVswXSksaVtyXT10LnRvR2xvYmFsQ29vcmQodC5kYXRhVG9Db29yZCgrZSkpLGlbMS1yXT0wPT09cj9uLnkrbi5oZWlnaHQvMjpuLngrbi53aWR0aC8yLGl9fTt2YXIgdT1jO2UuZXhwb3J0cz11fSwiNGM4NiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPWkuZWFjaCxvPW4oImJkYTciKSxhPW4oImUwZDMiKSxzPWEubWFrZUlubmVyLGw9bigiMzIwYSIpLGM9bigiMTc5MiIpLHU9bigiNmJkNCIpLGg9bigiYTdmMiIpLGQ9cygpLGY9e2xvYWQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWQodCkucGFyc2VkO2lmKGkpcmV0dXJuIGk7dmFyIGEscz10LnNwZWNpYWxBcmVhc3x8e30sZj10Lmdlb0pTT047dHJ5e2E9Zj9vKGYsbik6W119Y2F0Y2gobSl7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGdlb0pzb24gZm9ybWF0XG4iK20ubWVzc2FnZSl9cmV0dXJuIGwoZSxhKSxyKGEsKGZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZTtjKGUsdCksdShlLHQpLGgoZSx0KTt2YXIgaT1zW25dO2kmJnQudHJhbnNmb3JtVG8oaS5sZWZ0LGkudG9wLGkud2lkdGgsaS5oZWlnaHQpfSkpLGQodCkucGFyc2VkPXtyZWdpb25zOmEsYm91bmRpbmdSZWN0OnAoYSl9fX07ZnVuY3Rpb24gcChlKXtmb3IodmFyIHQsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dLmdldEJvdW5kaW5nUmVjdCgpO3Q9dHx8aS5jbG9uZSgpLHQudW5pb24oaSl9cmV0dXJuIHR9ZS5leHBvcnRzPWZ9LCI0Yzk5IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiY2NjZCIpLHI9WyJpdGVtU3R5bGUiLCJib3JkZXJDb2xvciJdLG89WyJpdGVtU3R5bGUiLCJib3JkZXJDb2xvcjAiXSxhPVsiaXRlbVN0eWxlIiwiY29sb3IiXSxzPVsiaXRlbVN0eWxlIiwiY29sb3IwIl0sbD17c2VyaWVzVHlwZToiY2FuZGxlc3RpY2siLHBsYW46aSgpLHBlcmZvcm1SYXdTZXJpZXM6ITAscmVzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmdldERhdGEoKTtpZihuLnNldFZpc3VhbCh7bGVnZW5kU3ltYm9sOiJyb3VuZFJlY3QiLGNvbG9yUDpjKDEsZSksY29sb3JOOmMoLTEsZSksYm9yZGVyQ29sb3JQOnUoMSxlKSxib3JkZXJDb2xvck46dSgtMSxlKX0pLCF0LmlzU2VyaWVzRmlsdGVyZWQoZSkpe3ZhciBpPWUucGlwZWxpbmVDb250ZXh0LmxhcmdlO3JldHVybiFpJiZ7cHJvZ3Jlc3M6bH19ZnVuY3Rpb24gbChlLHQpe3ZhciBuO3doaWxlKG51bGwhPShuPWUubmV4dCgpKSl7dmFyIGk9dC5nZXRJdGVtTW9kZWwobikscj10LmdldEl0ZW1MYXlvdXQobikuc2lnbjt0LnNldEl0ZW1WaXN1YWwobix7Y29sb3I6YyhyLGkpLGJvcmRlckNvbG9yOnUocixpKX0pfX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIHQuZ2V0KGU+MD9hOnMpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gdC5nZXQoZT4wP3I6byl9fX07ZS5leHBvcnRzPWx9LCI0Y2VmMiI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0vXHMvO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5sZW5ndGg7d2hpbGUodC0tJiZuLnRlc3QoZS5jaGFyQXQodCkpKTtyZXR1cm4gdH1lLmV4cG9ydHM9aX0sIjRkMjAiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIxOTE3Iikscj1uKCIxMGRiIiksbz1uKCI2Y2ExIiksYT1uKCIzMzk3Iikscz1uKCI5YzBlIiksbD1uKCJmYWY1IiksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1uKCIwYmFkIik/YzpmdW5jdGlvbihlLHQpe2lmKGU9byhlKSx0PWEodCwhMCksbCl0cnl7cmV0dXJuIGMoZSx0KX1jYXRjaChuKXt9aWYocyhlLHQpKXJldHVybiByKCFpLmYuY2FsbChlLHQpLGVbdF0pfX0sIjRkNjIiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIyMzA2Iikscj1uKCI2ZDhiIiksbz1uKCJlODg3Iik7ZnVuY3Rpb24gYShlLHQpe2kuR3JvdXAuY2FsbCh0aGlzKTt2YXIgbj1uZXcgaS5Qb2x5Z29uLHI9bmV3IGkuUG9seWxpbmUsbz1uZXcgaS5UZXh0O3RoaXMuYWRkKG4pLHRoaXMuYWRkKHIpLHRoaXMuYWRkKG8pLHRoaXMuaGlnaERvd25PblVwZGF0ZT1mdW5jdGlvbihlLHQpeyJlbXBoYXNpcyI9PT10PyhyLmlnbm9yZT1yLmhvdmVySWdub3JlLG8uaWdub3JlPW8uaG92ZXJJZ25vcmUpOihyLmlnbm9yZT1yLm5vcm1hbElnbm9yZSxvLmlnbm9yZT1vLm5vcm1hbElnbm9yZSl9LHRoaXMudXBkYXRlRGF0YShlLHQsITApfXZhciBzPWEucHJvdG90eXBlLGw9WyJpdGVtU3R5bGUiLCJvcGFjaXR5Il07cy51cGRhdGVEYXRhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzLmNoaWxkQXQoMCksYT1lLmhvc3RNb2RlbCxzPWUuZ2V0SXRlbU1vZGVsKHQpLGM9ZS5nZXRJdGVtTGF5b3V0KHQpLHU9ZS5nZXRJdGVtTW9kZWwodCkuZ2V0KGwpO3U9bnVsbD09dT8xOnUsby51c2VTdHlsZSh7fSksbj8oby5zZXRTaGFwZSh7cG9pbnRzOmMucG9pbnRzfSksby5zZXRTdHlsZSh7b3BhY2l0eTowfSksaS5pbml0UHJvcHMobyx7c3R5bGU6e29wYWNpdHk6dX19LGEsdCkpOmkudXBkYXRlUHJvcHMobyx7c3R5bGU6e29wYWNpdHk6dX0sc2hhcGU6e3BvaW50czpjLnBvaW50c319LGEsdCk7dmFyIGg9cy5nZXRNb2RlbCgiaXRlbVN0eWxlIiksZD1lLmdldEl0ZW1WaXN1YWwodCwiY29sb3IiKTtvLnNldFN0eWxlKHIuZGVmYXVsdHMoe2xpbmVKb2luOiJyb3VuZCIsZmlsbDpkfSxoLmdldEl0ZW1TdHlsZShbIm9wYWNpdHkiXSkpKSxvLmhvdmVyU3R5bGU9aC5nZXRNb2RlbCgiZW1waGFzaXMiKS5nZXRJdGVtU3R5bGUoKSx0aGlzLl91cGRhdGVMYWJlbChlLHQpLGkuc2V0SG92ZXJTdHlsZSh0aGlzKX0scy5fdXBkYXRlTGFiZWw9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNoaWxkQXQoMSkscj10aGlzLmNoaWxkQXQoMiksbz1lLmhvc3RNb2RlbCxhPWUuZ2V0SXRlbU1vZGVsKHQpLHM9ZS5nZXRJdGVtTGF5b3V0KHQpLGw9cy5sYWJlbCxjPWUuZ2V0SXRlbVZpc3VhbCh0LCJjb2xvciIpO2kudXBkYXRlUHJvcHMobix7c2hhcGU6e3BvaW50czpsLmxpbmVQb2ludHN8fGwubGluZVBvaW50c319LG8sdCksaS51cGRhdGVQcm9wcyhyLHtzdHlsZTp7eDpsLngseTpsLnl9fSxvLHQpLHIuYXR0cih7cm90YXRpb246bC5yb3RhdGlvbixvcmlnaW46W2wueCxsLnldLHoyOjEwfSk7dmFyIHU9YS5nZXRNb2RlbCgibGFiZWwiKSxoPWEuZ2V0TW9kZWwoImVtcGhhc2lzLmxhYmVsIiksZD1hLmdldE1vZGVsKCJsYWJlbExpbmUiKSxmPWEuZ2V0TW9kZWwoImVtcGhhc2lzLmxhYmVsTGluZSIpO2M9ZS5nZXRJdGVtVmlzdWFsKHQsImNvbG9yIik7aS5zZXRMYWJlbFN0eWxlKHIuc3R5bGUsci5ob3ZlclN0eWxlPXt9LHUsaCx7bGFiZWxGZXRjaGVyOmUuaG9zdE1vZGVsLGxhYmVsRGF0YUluZGV4OnQsZGVmYXVsdFRleHQ6ZS5nZXROYW1lKHQpLGF1dG9Db2xvcjpjLHVzZUluc2lkZVN0eWxlOiEhbC5pbnNpZGV9LHt0ZXh0QWxpZ246bC50ZXh0QWxpZ24sdGV4dFZlcnRpY2FsQWxpZ246bC52ZXJ0aWNhbEFsaWdufSksci5pZ25vcmU9ci5ub3JtYWxJZ25vcmU9IXUuZ2V0KCJzaG93Iiksci5ob3Zlcklnbm9yZT0haC5nZXQoInNob3ciKSxuLmlnbm9yZT1uLm5vcm1hbElnbm9yZT0hZC5nZXQoInNob3ciKSxuLmhvdmVySWdub3JlPSFmLmdldCgic2hvdyIpLG4uc2V0U3R5bGUoe3N0cm9rZTpjfSksbi5zZXRTdHlsZShkLmdldE1vZGVsKCJsaW5lU3R5bGUiKS5nZXRMaW5lU3R5bGUoKSksbi5ob3ZlclN0eWxlPWYuZ2V0TW9kZWwoImxpbmVTdHlsZSIpLmdldExpbmVTdHlsZSgpfSxyLmluaGVyaXRzKGEsaS5Hcm91cCk7dmFyIGM9by5leHRlbmQoe3R5cGU6ImZ1bm5lbCIscmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1lLmdldERhdGEoKSxyPXRoaXMuX2RhdGEsbz10aGlzLmdyb3VwO2kuZGlmZihyKS5hZGQoKGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBhKGksZSk7aS5zZXRJdGVtR3JhcGhpY0VsKGUsdCksby5hZGQodCl9KSkudXBkYXRlKChmdW5jdGlvbihlLHQpe3ZhciBuPXIuZ2V0SXRlbUdyYXBoaWNFbCh0KTtuLnVwZGF0ZURhdGEoaSxlKSxvLmFkZChuKSxpLnNldEl0ZW1HcmFwaGljRWwoZSxuKX0pKS5yZW1vdmUoKGZ1bmN0aW9uKGUpe3ZhciB0PXIuZ2V0SXRlbUdyYXBoaWNFbChlKTtvLnJlbW92ZSh0KX0pKS5leGVjdXRlKCksdGhpcy5fZGF0YT1pfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLmdyb3VwLnJlbW92ZUFsbCgpLHRoaXMuX2RhdGE9bnVsbH0sZGlzcG9zZTpmdW5jdGlvbigpe319KSx1PWM7ZS5leHBvcnRzPXV9LCI0ZDY0IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiZmM2YSIpLHI9bigiNTBjNCIpLG89bigiMjNjYiIpLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXt2YXIgcyxsPWkodCksYz1yKGwubGVuZ3RoKSx1PW8oYSxjKTtpZihlJiZuIT1uKXt3aGlsZShjPnUpaWYocz1sW3UrK10scyE9cylyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigoZXx8dSBpbiBsKSYmbFt1XT09PW4pcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczphKCEwKSxpbmRleE9mOmEoITEpfX0sIjRkODUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJlNDZiIikscj1uKCI0Zjg1Iiksbz1yLmV4dGVuZCh7dHlwZToic2VyaWVzLmdhdWdlIixnZXRJbml0aWFsRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBpKHRoaXMsWyJ2YWx1ZSJdKX0sZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejoyLGNlbnRlcjpbIjUwJSIsIjUwJSJdLGxlZ2VuZEhvdmVyTGluazohMCxyYWRpdXM6Ijc1JSIsc3RhcnRBbmdsZToyMjUsZW5kQW5nbGU6LTQ1LGNsb2Nrd2lzZTohMCxtaW46MCxtYXg6MTAwLHNwbGl0TnVtYmVyOjEwLGF4aXNMaW5lOntzaG93OiEwLGxpbmVTdHlsZTp7Y29sb3I6W1suMiwiIzkxYzdhZSJdLFsuOCwiIzYzODY5ZSJdLFsxLCIjYzIzNTMxIl1dLHdpZHRoOjMwfX0sc3BsaXRMaW5lOntzaG93OiEwLGxlbmd0aDozMCxsaW5lU3R5bGU6e2NvbG9yOiIjZWVlIix3aWR0aDoyLHR5cGU6InNvbGlkIn19LGF4aXNUaWNrOntzaG93OiEwLHNwbGl0TnVtYmVyOjUsbGVuZ3RoOjgsbGluZVN0eWxlOntjb2xvcjoiI2VlZSIsd2lkdGg6MSx0eXBlOiJzb2xpZCJ9fSxheGlzTGFiZWw6e3Nob3c6ITAsZGlzdGFuY2U6NSxjb2xvcjoiYXV0byJ9LHBvaW50ZXI6e3Nob3c6ITAsbGVuZ3RoOiI4MCUiLHdpZHRoOjh9LGl0ZW1TdHlsZTp7Y29sb3I6ImF1dG8ifSx0aXRsZTp7c2hvdzohMCxvZmZzZXRDZW50ZXI6WzAsIi00MCUiXSxjb2xvcjoiIzMzMyIsZm9udFNpemU6MTV9LGRldGFpbDp7c2hvdzohMCxiYWNrZ3JvdW5kQ29sb3I6InJnYmEoMCwwLDAsMCkiLGJvcmRlcldpZHRoOjAsYm9yZGVyQ29sb3I6IiNjY2MiLHdpZHRoOjEwMCxoZWlnaHQ6bnVsbCxwYWRkaW5nOls1LDEwXSxvZmZzZXRDZW50ZXI6WzAsIjQwJSJdLGNvbG9yOiJhdXRvIixmb250U2l6ZTozMH19fSksYT1vO2UuZXhwb3J0cz1hfSwiNGQ4OCI6ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LCI0ZGU0IjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oIjIzZTciKSxyPW4oImI3MjciKS5maWx0ZXIsbz1uKCIxZGRlIiksYT1vKCJmaWx0ZXIiKTtpKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IWF9LHtmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sIjRlMDgiOmZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24oZSl7dmFyIG47InVuZGVmaW5lZCIhPT10eXBlb2Ygd2luZG93P249d2luZG93Ll9fREVWX186InVuZGVmaW5lZCIhPT10eXBlb2YgZSYmKG49ZS5fX0RFVl9fKSwidW5kZWZpbmVkIj09PXR5cGVvZiBuJiYobj0hMCk7dmFyIGk9bjt0Ll9fREVWX189aX0pLmNhbGwodGhpcyxuKCJjOGJhIikpfSwiNGUxMCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oImU0NmIiKSxvPW4oIjRmODUiKSxhPW4oImVkYTIiKSxzPWEuZW5jb2RlSFRNTCxsPWEuYWRkQ29tbWFzLGM9bigiNzAyMyIpLHU9bigiMmIxNyIpLGg9dS5yZXRyaWV2ZVJhd0F0dHIsZD1uKCI1Yjg3IiksZj1uKCIwZjk5IikscD1mLm1ha2VTZXJpZXNFbmNvZGVGb3JOYW1lQmFzZWQsbT1vLmV4dGVuZCh7dHlwZToic2VyaWVzLm1hcCIsZGVwZW5kZW5jaWVzOlsiZ2VvIl0sbGF5b3V0TW9kZToiYm94IixuZWVkc0RyYXdNYXA6ITEsc2VyaWVzR3JvdXA6W10sZ2V0SW5pdGlhbERhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXIodGhpcyx7Y29vcmREaW1lbnNpb25zOlsidmFsdWUiXSxlbmNvZGVEZWZhdWx0ZXI6aS5jdXJyeShwLHRoaXMpfSksbj10Lm1hcERpbWVuc2lvbigidmFsdWUiKSxvPWkuY3JlYXRlSGFzaE1hcCgpLGE9W10scz1bXSxsPTAsYz10LmNvdW50KCk7bDxjO2wrKyl7dmFyIHU9dC5nZXROYW1lKGwpO28uc2V0KHUsITApLGEucHVzaCh7bmFtZTp1LHZhbHVlOnQuZ2V0KG4sbCksc2VsZWN0ZWQ6aCh0LGwsInNlbGVjdGVkIil9KX12YXIgZj1kLmxvYWQodGhpcy5nZXRNYXBUeXBlKCksdGhpcy5vcHRpb24ubmFtZU1hcCx0aGlzLm9wdGlvbi5uYW1lUHJvcGVydHkpO3JldHVybiBpLmVhY2goZi5yZWdpb25zLChmdW5jdGlvbihlKXt2YXIgdD1lLm5hbWU7by5nZXQodCl8fChhLnB1c2goe25hbWU6dH0pLHMucHVzaCh0KSl9KSksdGhpcy51cGRhdGVTZWxlY3RlZE1hcChhKSx0LmFwcGVuZFZhbHVlcyhbXSxzKSx0fSxnZXRIb3N0R2VvTW9kZWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbi5nZW9JbmRleDtyZXR1cm4gbnVsbCE9ZT90aGlzLmRlcGVuZGVudE1vZGVscy5nZW9bZV06bnVsbH0sZ2V0TWFwVHlwZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmdldEhvc3RHZW9Nb2RlbCgpfHx0aGlzKS5vcHRpb24ubWFwfSxnZXRSYXdWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldERhdGEoKTtyZXR1cm4gdC5nZXQodC5tYXBEaW1lbnNpb24oInZhbHVlIiksZSl9LGdldFJlZ2lvbk1vZGVsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0RGF0YSgpO3JldHVybiB0LmdldEl0ZW1Nb2RlbCh0LmluZGV4T2ZOYW1lKGUpKX0sZm9ybWF0VG9vbHRpcDpmdW5jdGlvbihlLHQsbixpKXtmb3IodmFyIHI9dGhpcy5nZXREYXRhKCksbz1sKHRoaXMuZ2V0UmF3VmFsdWUoZSkpLGE9ci5nZXROYW1lKGUpLGM9dGhpcy5zZXJpZXNHcm91cCx1PVtdLGg9MDtoPGMubGVuZ3RoO2grKyl7dmFyIGQ9Y1toXS5vcmlnaW5hbERhdGEuaW5kZXhPZk5hbWUoYSksZj1yLm1hcERpbWVuc2lvbigidmFsdWUiKTtpc05hTihjW2hdLm9yaWdpbmFsRGF0YS5nZXQoZixkKSl8fHUucHVzaChzKGNbaF0ubmFtZSkpfXZhciBwPSJodG1sIj09PWk/Ijxici8+IjoiXG4iO3JldHVybiB1LmpvaW4oIiwgIikrcCtzKGErIiA6ICIrbyl9LGdldFRvb2x0aXBQb3NpdGlvbjpmdW5jdGlvbihlKXtpZihudWxsIT1lKXt2YXIgdD10aGlzLmdldERhdGEoKS5nZXROYW1lKGUpLG49dGhpcy5jb29yZGluYXRlU3lzdGVtLGk9bi5nZXRSZWdpb24odCk7cmV0dXJuIGkmJm4uZGF0YVRvUG9pbnQoaS5jZW50ZXIpfX0sc2V0Wm9vbTpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbi56b29tPWV9LHNldENlbnRlcjpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbi5jZW50ZXI9ZX0sZGVmYXVsdE9wdGlvbjp7emxldmVsOjAsejoyLGNvb3JkaW5hdGVTeXN0ZW06ImdlbyIsbWFwOiIiLGxlZnQ6ImNlbnRlciIsdG9wOiJjZW50ZXIiLGFzcGVjdFNjYWxlOi43NSxzaG93TGVnZW5kU3ltYm9sOiEwLGRhdGFSYW5nZUhvdmVyTGluazohMCxib3VuZGluZ0Nvb3JkczpudWxsLGNlbnRlcjpudWxsLHpvb206MSxzY2FsZUxpbWl0Om51bGwsbGFiZWw6e3Nob3c6ITEsY29sb3I6IiMwMDAifSxpdGVtU3R5bGU6e2JvcmRlcldpZHRoOi41LGJvcmRlckNvbG9yOiIjNDQ0IixhcmVhQ29sb3I6IiNlZWUifSxlbXBoYXNpczp7bGFiZWw6e3Nob3c6ITAsY29sb3I6InJnYigxMDAsMCwwKSJ9LGl0ZW1TdHlsZTp7YXJlYUNvbG9yOiJyZ2JhKDI1NSwyMTUsMCwwLjgpIn19LG5hbWVQcm9wZXJ0eToibmFtZSJ9fSk7aS5taXhpbihtLGMpO3ZhciBnPW07ZS5leHBvcnRzPWd9LCI0ZTQ3IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiMjMwNiIpLG89e05PTkU6Im5vbmUiLERFU0NFTkRBTlQ6ImRlc2NlbmRhbnQiLEFOQ0VTVE9SOiJhbmNlc3RvciIsU0VMRjoic2VsZiJ9LGE9MixzPTQ7ZnVuY3Rpb24gbChlLHQsbil7ci5Hcm91cC5jYWxsKHRoaXMpO3ZhciBpPW5ldyByLlNlY3Rvcih7ejI6YX0pO2kuc2VyaWVzSW5kZXg9dC5zZXJpZXNJbmRleDt2YXIgbz1uZXcgci5UZXh0KHt6MjpzLHNpbGVudDplLmdldE1vZGVsKCJsYWJlbCIpLmdldCgic2lsZW50Iil9KTtmdW5jdGlvbiBsKCl7by5pZ25vcmU9by5ob3Zlcklnbm9yZX1mdW5jdGlvbiBjKCl7by5pZ25vcmU9by5ub3JtYWxJZ25vcmV9dGhpcy5hZGQoaSksdGhpcy5hZGQobyksdGhpcy51cGRhdGVEYXRhKCEwLGUsIm5vcm1hbCIsdCxuKSx0aGlzLm9uKCJlbXBoYXNpcyIsbCkub24oIm5vcm1hbCIsYykub24oIm1vdXNlb3ZlciIsbCkub24oIm1vdXNlb3V0IixjKX12YXIgYz1sLnByb3RvdHlwZTtjLnVwZGF0ZURhdGE9ZnVuY3Rpb24oZSx0LG4sbyxhKXt0aGlzLm5vZGU9dCx0LnBpZWNlPXRoaXMsbz1vfHx0aGlzLl9zZXJpZXNNb2RlbCxhPWF8fHRoaXMuX2VjTW9kZWw7dmFyIHM9dGhpcy5jaGlsZEF0KDApO3MuZGF0YUluZGV4PXQuZGF0YUluZGV4O3ZhciBsPXQuZ2V0TW9kZWwoKSxjPXQuZ2V0TGF5b3V0KCksdT1pLmV4dGVuZCh7fSxjKTt1LmxhYmVsPW51bGw7dmFyIGQ9aCh0LG8sYSk7cCh0LG8sZCk7dmFyIGYsbT1sLmdldE1vZGVsKCJpdGVtU3R5bGUiKS5nZXRJdGVtU3R5bGUoKTtpZigibm9ybWFsIj09PW4pZj1tO2Vsc2V7dmFyIGc9bC5nZXRNb2RlbChuKyIuaXRlbVN0eWxlIikuZ2V0SXRlbVN0eWxlKCk7Zj1pLm1lcmdlKGcsbSl9Zj1pLmRlZmF1bHRzKHtsaW5lSm9pbjoiYmV2ZWwiLGZpbGw6Zi5maWxsfHxkfSxmKSxlPyhzLnNldFNoYXBlKHUpLHMuc2hhcGUucj1jLnIwLHIudXBkYXRlUHJvcHMocyx7c2hhcGU6e3I6Yy5yfX0sbyx0LmRhdGFJbmRleCkscy51c2VTdHlsZShmKSk6Im9iamVjdCI9PT10eXBlb2YgZi5maWxsJiZmLmZpbGwudHlwZXx8Im9iamVjdCI9PT10eXBlb2Ygcy5zdHlsZS5maWxsJiZzLnN0eWxlLmZpbGwudHlwZT8oci51cGRhdGVQcm9wcyhzLHtzaGFwZTp1fSxvKSxzLnVzZVN0eWxlKGYpKTpyLnVwZGF0ZVByb3BzKHMse3NoYXBlOnUsc3R5bGU6Zn0sbyksdGhpcy5fdXBkYXRlTGFiZWwobyxkLG4pO3ZhciB2PWwuZ2V0U2hhbGxvdygiY3Vyc29yIik7aWYodiYmcy5hdHRyKCJjdXJzb3IiLHYpLGUpe3ZhciB5PW8uZ2V0U2hhbGxvdygiaGlnaGxpZ2h0UG9saWN5Iik7dGhpcy5faW5pdEV2ZW50cyhzLHQsbyx5KX10aGlzLl9zZXJpZXNNb2RlbD1vfHx0aGlzLl9zZXJpZXNNb2RlbCx0aGlzLl9lY01vZGVsPWF8fHRoaXMuX2VjTW9kZWwsci5zZXRIb3ZlclN0eWxlKHRoaXMpfSxjLm9uRW1waGFzaXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLm5vZGUuaG9zdFRyZWUucm9vdC5lYWNoTm9kZSgoZnVuY3Rpb24obil7bi5waWVjZSYmKHQubm9kZT09PW4/bi5waWVjZS51cGRhdGVEYXRhKCExLG4sImVtcGhhc2lzIik6ZihuLHQubm9kZSxlKT9uLnBpZWNlLmNoaWxkQXQoMCkudHJpZ2dlcigiaGlnaGxpZ2h0Iik6ZSE9PW8uTk9ORSYmbi5waWVjZS5jaGlsZEF0KDApLnRyaWdnZXIoImRvd25wbGF5IikpfSkpfSxjLm9uTm9ybWFsPWZ1bmN0aW9uKCl7dGhpcy5ub2RlLmhvc3RUcmVlLnJvb3QuZWFjaE5vZGUoKGZ1bmN0aW9uKGUpe2UucGllY2UmJmUucGllY2UudXBkYXRlRGF0YSghMSxlLCJub3JtYWwiKX0pKX0sYy5vbkhpZ2hsaWdodD1mdW5jdGlvbigpe3RoaXMudXBkYXRlRGF0YSghMSx0aGlzLm5vZGUsImhpZ2hsaWdodCIpfSxjLm9uRG93bnBsYXk9ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZURhdGEoITEsdGhpcy5ub2RlLCJkb3ducGxheSIpfSxjLl91cGRhdGVMYWJlbD1mdW5jdGlvbihlLHQsbil7dmFyIG89dGhpcy5ub2RlLmdldE1vZGVsKCksYT1vLmdldE1vZGVsKCJsYWJlbCIpLHM9Im5vcm1hbCI9PT1ufHwiZW1waGFzaXMiPT09bj9hOm8uZ2V0TW9kZWwobisiLmxhYmVsIiksbD1vLmdldE1vZGVsKCJlbXBoYXNpcy5sYWJlbCIpLGM9cy5nZXQoImZvcm1hdHRlciIpLHU9Yz9uOiJub3JtYWwiLGg9aS5yZXRyaWV2ZShlLmdldEZvcm1hdHRlZExhYmVsKHRoaXMubm9kZS5kYXRhSW5kZXgsdSxudWxsLG51bGwsImxhYmVsIiksdGhpcy5ub2RlLm5hbWUpOyExPT09TSgic2hvdyIpJiYoaD0iIik7dmFyIGQ9dGhpcy5ub2RlLmdldExheW91dCgpLGY9cy5nZXQoIm1pbkFuZ2xlIik7bnVsbD09ZiYmKGY9YS5nZXQoIm1pbkFuZ2xlIikpLGY9Zi8xODAqTWF0aC5QSTt2YXIgcD1kLmVuZEFuZ2xlLWQuc3RhcnRBbmdsZTtudWxsIT1mJiZNYXRoLmFicyhwKTxmJiYoaD0iIik7dmFyIG09dGhpcy5jaGlsZEF0KDEpO3Iuc2V0TGFiZWxTdHlsZShtLnN0eWxlLG0uaG92ZXJTdHlsZXx8e30sYSxsLHtkZWZhdWx0VGV4dDpzLmdldFNoYWxsb3coInNob3ciKT9oOm51bGwsYXV0b0NvbG9yOnQsdXNlSW5zaWRlU3R5bGU6ITB9KTt2YXIgZyx2PShkLnN0YXJ0QW5nbGUrZC5lbmRBbmdsZSkvMix5PU1hdGguY29zKHYpLGI9TWF0aC5zaW4odikseD1NKCJwb3NpdGlvbiIpLF89TSgiZGlzdGFuY2UiKXx8MCx3PU0oImFsaWduIik7Im91dHNpZGUiPT09eD8oZz1kLnIrXyx3PXY+TWF0aC5QSS8yPyJyaWdodCI6ImxlZnQiKTp3JiYiY2VudGVyIiE9PXc/ImxlZnQiPT09dz8oZz1kLnIwK18sdj5NYXRoLlBJLzImJih3PSJyaWdodCIpKToicmlnaHQiPT09dyYmKGc9ZC5yLV8sdj5NYXRoLlBJLzImJih3PSJsZWZ0IikpOihnPShkLnIrZC5yMCkvMix3PSJjZW50ZXIiKSxtLmF0dHIoInN0eWxlIix7dGV4dDpoLHRleHRBbGlnbjp3LHRleHRWZXJ0aWNhbEFsaWduOk0oInZlcnRpY2FsQWxpZ24iKXx8Im1pZGRsZSIsb3BhY2l0eTpNKCJvcGFjaXR5Iil9KTt2YXIgUz1nKnkrZC5jeCxDPWcqYitkLmN5O20uYXR0cigicG9zaXRpb24iLFtTLENdKTt2YXIgaz1NKCJyb3RhdGUiKSxUPTA7ZnVuY3Rpb24gTShlKXt2YXIgdD1zLmdldChlKTtyZXR1cm4gbnVsbD09dD9hLmdldChlKTp0fSJyYWRpYWwiPT09az8oVD0tdixUPC1NYXRoLlBJLzImJihUKz1NYXRoLlBJKSk6InRhbmdlbnRpYWwiPT09az8oVD1NYXRoLlBJLzItdixUPk1hdGguUEkvMj9ULT1NYXRoLlBJOlQ8LU1hdGguUEkvMiYmKFQrPU1hdGguUEkpKToibnVtYmVyIj09PXR5cGVvZiBrJiYoVD1rKk1hdGguUEkvMTgwKSxtLmF0dHIoInJvdGF0aW9uIixUKX0sYy5faW5pdEV2ZW50cz1mdW5jdGlvbihlLHQsbixpKXtlLm9mZigibW91c2VvdmVyIikub2ZmKCJtb3VzZW91dCIpLm9mZigiZW1waGFzaXMiKS5vZmYoIm5vcm1hbCIpO3ZhciByPXRoaXMsbz1mdW5jdGlvbigpe3Iub25FbXBoYXNpcyhpKX0sYT1mdW5jdGlvbigpe3Iub25Ob3JtYWwoKX0scz1mdW5jdGlvbigpe3Iub25Eb3ducGxheSgpfSxsPWZ1bmN0aW9uKCl7ci5vbkhpZ2hsaWdodCgpfTtuLmlzQW5pbWF0aW9uRW5hYmxlZCgpJiZlLm9uKCJtb3VzZW92ZXIiLG8pLm9uKCJtb3VzZW91dCIsYSkub24oImVtcGhhc2lzIixvKS5vbigibm9ybWFsIixhKS5vbigiZG93bnBsYXkiLHMpLm9uKCJoaWdobGlnaHQiLGwpfSxpLmluaGVyaXRzKGwsci5Hcm91cCk7dmFyIHU9bDtmdW5jdGlvbiBoKGUsdCxuKXt2YXIgaT1lLmdldFZpc3VhbCgiY29sb3IiKSxyPWUuZ2V0VmlzdWFsKCJ2aXN1YWxNZXRhIik7ciYmMCE9PXIubGVuZ3RofHwoaT1udWxsKTt2YXIgbz1lLmdldE1vZGVsKCJpdGVtU3R5bGUiKS5nZXQoImNvbG9yIik7aWYobylyZXR1cm4gbztpZihpKXJldHVybiBpO2lmKDA9PT1lLmRlcHRoKXJldHVybiBuLm9wdGlvbi5jb2xvclswXTt2YXIgYT1uLm9wdGlvbi5jb2xvci5sZW5ndGg7cmV0dXJuIG89bi5vcHRpb24uY29sb3JbZChlKSVhXSxvfWZ1bmN0aW9uIGQoZSl7dmFyIHQ9ZTt3aGlsZSh0LmRlcHRoPjEpdD10LnBhcmVudE5vZGU7dmFyIG49ZS5nZXRBbmNlc3RvcnMoKVswXTtyZXR1cm4gaS5pbmRleE9mKG4uY2hpbGRyZW4sdCl9ZnVuY3Rpb24gZihlLHQsbil7cmV0dXJuIG4hPT1vLk5PTkUmJihuPT09by5TRUxGP2U9PT10Om49PT1vLkFOQ0VTVE9SP2U9PT10fHxlLmlzQW5jZXN0b3JPZih0KTplPT09dHx8ZS5pc0Rlc2NlbmRhbnRPZih0KSl9ZnVuY3Rpb24gcChlLHQsbil7dmFyIGk9dC5nZXREYXRhKCk7aS5zZXRJdGVtVmlzdWFsKGUuZGF0YUluZGV4LCJjb2xvciIsbil9ZS5leHBvcnRzPXV9LCI0ZTRiIjpmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4oaSl7aWYodFtpXSlyZXR1cm4gdFtpXS5leHBvcnRzO3ZhciByPXRbaV09e2k6aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoci5leHBvcnRzLHIsci5leHBvcnRzLG4pLHIubD0hMCxyLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQsaSl7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Oml9KX0sbi5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxuLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPW4oZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT09dHlwZW9mIGUmJmUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgaT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6ZX0pLDImdCYmInN0cmluZyIhPXR5cGVvZiBlKWZvcih2YXIgciBpbiBlKW4uZChpLHIsZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxyKSk7cmV0dXJuIGl9LG4ubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZVsiZGVmYXVsdCJdfTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gbi5kKHQsImEiLHQpLHR9LG4ubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sbi5wPSIvZGlzdC8iLG4obi5zPTYwKX0oezA6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKGUsdCxuLGkscixvLGEscyl7dmFyIGwsYz0iZnVuY3Rpb24iPT09dHlwZW9mIGU/ZS5vcHRpb25zOmU7aWYodCYmKGMucmVuZGVyPXQsYy5zdGF0aWNSZW5kZXJGbnM9bixjLl9jb21waWxlZD0hMCksaSYmKGMuZnVuY3Rpb25hbD0hMCksbyYmKGMuX3Njb3BlSWQ9ImRhdGEtdi0iK28pLGE/KGw9ZnVuY3Rpb24oZSl7ZT1lfHx0aGlzLiR2bm9kZSYmdGhpcy4kdm5vZGUuc3NyQ29udGV4dHx8dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50LiR2bm9kZSYmdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQsZXx8InVuZGVmaW5lZCI9PT10eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfX3x8KGU9X19WVUVfU1NSX0NPTlRFWFRfXyksciYmci5jYWxsKHRoaXMsZSksZSYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMmJmUuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChhKX0sYy5fc3NyUmVnaXN0ZXI9bCk6ciYmKGw9cz9mdW5jdGlvbigpe3IuY2FsbCh0aGlzLHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCl9OnIpLGwpaWYoYy5mdW5jdGlvbmFsKXtjLl9pbmplY3RTdHlsZXM9bDt2YXIgdT1jLnJlbmRlcjtjLnJlbmRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBsLmNhbGwodCksdShlLHQpfX1lbHNle3ZhciBoPWMuYmVmb3JlQ3JlYXRlO2MuYmVmb3JlQ3JlYXRlPWg/W10uY29uY2F0KGgsbCk6W2xdfXJldHVybntleHBvcnRzOmUsb3B0aW9uczpjfX1uLmQodCwiYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSl9LDEwOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImYzYWQiKX0sMTI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNDE3ZiIpfSwxNTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIxNGU5Iil9LDE2OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjQwMTAiKX0sMTc6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiMGUxNSIpfSwyMTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJkMzk3Iil9LDIyOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjEyZjIiKX0sMzpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI4MTIyIil9LDMxOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjJhNWUiKX0sMzM6ZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigibGkiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtIixjbGFzczp7c2VsZWN0ZWQ6ZS5pdGVtU2VsZWN0ZWQsImlzLWRpc2FibGVkIjplLmRpc2FibGVkfHxlLmdyb3VwRGlzYWJsZWR8fGUubGltaXRSZWFjaGVkLGhvdmVyOmUuaG92ZXJ9LG9uOnttb3VzZWVudGVyOmUuaG92ZXJJdGVtLGNsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbigpLGUuc2VsZWN0T3B0aW9uQ2xpY2sodCl9fX0sW2UuX3QoImRlZmF1bHQiLFtuKCJzcGFuIixbZS5fdihlLl9zKGUuY3VycmVudExhYmVsKSldKV0pXSwyKX0scj1bXTtpLl93aXRoU3RyaXBwZWQ9ITA7dmFyIG89big0KSxhPW4ubihvKSxzPW4oMyksbD0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sYz17bWl4aW5zOlthLmFdLG5hbWU6IkVsT3B0aW9uIixjb21wb25lbnROYW1lOiJFbE9wdGlvbiIsaW5qZWN0Olsic2VsZWN0Il0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sbGFiZWw6W1N0cmluZyxOdW1iZXJdLGNyZWF0ZWQ6Qm9vbGVhbixkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luZGV4Oi0xLGdyb3VwRGlzYWJsZWQ6ITEsdmlzaWJsZTohMCxoaXRTdGF0ZTohMSxob3ZlcjohMX19LGNvbXB1dGVkOntpc09iamVjdDpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IG9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMudmFsdWUpLnRvTG93ZXJDYXNlKCl9LGN1cnJlbnRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsfHwodGhpcy5pc09iamVjdD8iIjp0aGlzLnZhbHVlKX0sY3VycmVudFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV8fHRoaXMubGFiZWx8fCIifSxpdGVtU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3QubXVsdGlwbGU/dGhpcy5jb250YWlucyh0aGlzLnNlbGVjdC52YWx1ZSx0aGlzLnZhbHVlKTp0aGlzLmlzRXF1YWwodGhpcy52YWx1ZSx0aGlzLnNlbGVjdC52YWx1ZSl9LGxpbWl0UmVhY2hlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5zZWxlY3QubXVsdGlwbGUmJighdGhpcy5pdGVtU2VsZWN0ZWQmJih0aGlzLnNlbGVjdC52YWx1ZXx8W10pLmxlbmd0aD49dGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdCYmdGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdD4wKX19LHdhdGNoOntjdXJyZW50TGFiZWw6ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZWR8fHRoaXMuc2VsZWN0LnJlbW90ZXx8dGhpcy5kaXNwYXRjaCgiRWxTZWxlY3QiLCJzZXRTZWxlY3RlZCIpfSx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2VsZWN0LGk9bi5yZW1vdGUscj1uLnZhbHVlS2V5O2lmKCF0aGlzLmNyZWF0ZWQmJiFpKXtpZihyJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOmwoZSkpJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiB0PyJ1bmRlZmluZWQiOmwodCkpJiZlW3JdPT09dFtyXSlyZXR1cm47dGhpcy5kaXNwYXRjaCgiRWxTZWxlY3QiLCJzZXRTZWxlY3RlZCIpfX19LG1ldGhvZHM6e2lzRXF1YWw6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmlzT2JqZWN0KXt2YXIgbj10aGlzLnNlbGVjdC52YWx1ZUtleTtyZXR1cm4gT2JqZWN0KHNbImdldFZhbHVlQnlQYXRoIl0pKGUsbik9PT1PYmplY3Qoc1siZ2V0VmFsdWVCeVBhdGgiXSkodCxuKX1yZXR1cm4gZT09PXR9LGNvbnRhaW5zOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHQ9YXJndW1lbnRzWzFdO2lmKHRoaXMuaXNPYmplY3Qpe3ZhciBuPXRoaXMuc2VsZWN0LnZhbHVlS2V5O3JldHVybiBlJiZlLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qoc1siZ2V0VmFsdWVCeVBhdGgiXSkoZSxuKT09PU9iamVjdChzWyJnZXRWYWx1ZUJ5UGF0aCJdKSh0LG4pfSkpfXJldHVybiBlJiZlLmluZGV4T2YodCk+LTF9LGhhbmRsZUdyb3VwRGlzYWJsZWQ6ZnVuY3Rpb24oZSl7dGhpcy5ncm91cERpc2FibGVkPWV9LGhvdmVySXRlbTpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuZ3JvdXBEaXNhYmxlZHx8KHRoaXMuc2VsZWN0LmhvdmVySW5kZXg9dGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpKX0sc2VsZWN0T3B0aW9uQ2xpY2s6ZnVuY3Rpb24oKXshMCE9PXRoaXMuZGlzYWJsZWQmJiEwIT09dGhpcy5ncm91cERpc2FibGVkJiZ0aGlzLmRpc3BhdGNoKCJFbFNlbGVjdCIsImhhbmRsZU9wdGlvbkNsaWNrIixbdGhpcywhMF0pfSxxdWVyeUNoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnZpc2libGU9bmV3IFJlZ0V4cChPYmplY3Qoc1siZXNjYXBlUmVnZXhwU3RyaW5nIl0pKGUpLCJpIikudGVzdCh0aGlzLmN1cnJlbnRMYWJlbCl8fHRoaXMuY3JlYXRlZCx0aGlzLnZpc2libGV8fHRoaXMuc2VsZWN0LmZpbHRlcmVkT3B0aW9uc0NvdW50LS19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3Qub3B0aW9ucy5wdXNoKHRoaXMpLHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMucHVzaCh0aGlzKSx0aGlzLnNlbGVjdC5vcHRpb25zQ291bnQrKyx0aGlzLnNlbGVjdC5maWx0ZXJlZE9wdGlvbnNDb3VudCsrLHRoaXMuJG9uKCJxdWVyeUNoYW5nZSIsdGhpcy5xdWVyeUNoYW5nZSksdGhpcy4kb24oImhhbmRsZUdyb3VwRGlzYWJsZWQiLHRoaXMuaGFuZGxlR3JvdXBEaXNhYmxlZCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlbGVjdCx0PWUuc2VsZWN0ZWQsbj1lLm11bHRpcGxlLGk9bj90Olt0XSxyPXRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuaW5kZXhPZih0aGlzKSxvPWkuaW5kZXhPZih0aGlzKTtyPi0xJiZvPDAmJnRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuc3BsaWNlKHIsMSksdGhpcy5zZWxlY3Qub25PcHRpb25EZXN0cm95KHRoaXMuc2VsZWN0Lm9wdGlvbnMuaW5kZXhPZih0aGlzKSl9fSx1PWMsaD1uKDApLGQ9T2JqZWN0KGhbImEiXSkodSxpLHIsITEsbnVsbCxudWxsLG51bGwpO2Qub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZSI7dFsiYSJdPWQuZXhwb3J0c30sMzc6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiOGJiYyIpfSw0OmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImQwMTAiKX0sNTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJlOTc0Iil9LDY6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNmI3YyIpfSw2MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KTt2YXIgaT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOmUuaGFuZGxlQ2xvc2UsZXhwcmVzc2lvbjoiaGFuZGxlQ2xvc2UifV0sc3RhdGljQ2xhc3M6ImVsLXNlbGVjdCIsY2xhc3M6W2Uuc2VsZWN0U2l6ZT8iZWwtc2VsZWN0LS0iK2Uuc2VsZWN0U2l6ZToiIl0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbigpLGUudG9nZ2xlTWVudSh0KX19fSxbZS5tdWx0aXBsZT9uKCJkaXYiLHtyZWY6InRhZ3MiLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3RfX3RhZ3MiLHN0eWxlOnsibWF4LXdpZHRoIjplLmlucHV0V2lkdGgtMzIrInB4Iix3aWR0aDoiMTAwJSJ9fSxbZS5jb2xsYXBzZVRhZ3MmJmUuc2VsZWN0ZWQubGVuZ3RoP24oInNwYW4iLFtuKCJlbC10YWciLHthdHRyczp7Y2xvc2FibGU6IWUuc2VsZWN0RGlzYWJsZWQsc2l6ZTplLmNvbGxhcHNlVGFnU2l6ZSxoaXQ6ZS5zZWxlY3RlZFswXS5oaXRTdGF0ZSx0eXBlOiJpbmZvIiwiZGlzYWJsZS10cmFuc2l0aW9ucyI6IiJ9LG9uOntjbG9zZTpmdW5jdGlvbih0KXtlLmRlbGV0ZVRhZyh0LGUuc2VsZWN0ZWRbMF0pfX19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW2UuX3YoZS5fcyhlLnNlbGVjdGVkWzBdLmN1cnJlbnRMYWJlbCkpXSldKSxlLnNlbGVjdGVkLmxlbmd0aD4xP24oImVsLXRhZyIse2F0dHJzOntjbG9zYWJsZTohMSxzaXplOmUuY29sbGFwc2VUYWdTaXplLHR5cGU6ImluZm8iLCJkaXNhYmxlLXRyYW5zaXRpb25zIjoiIn19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW2UuX3YoIisgIitlLl9zKGUuc2VsZWN0ZWQubGVuZ3RoLTEpKV0pXSk6ZS5fZSgpXSwxKTplLl9lKCksZS5jb2xsYXBzZVRhZ3M/ZS5fZSgpOm4oInRyYW5zaXRpb24tZ3JvdXAiLHtvbjp7ImFmdGVyLWxlYXZlIjplLnJlc2V0SW5wdXRIZWlnaHR9fSxlLl9sKGUuc2VsZWN0ZWQsKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJlbC10YWciLHtrZXk6ZS5nZXRWYWx1ZUtleSh0KSxhdHRyczp7Y2xvc2FibGU6IWUuc2VsZWN0RGlzYWJsZWQsc2l6ZTplLmNvbGxhcHNlVGFnU2l6ZSxoaXQ6dC5oaXRTdGF0ZSx0eXBlOiJpbmZvIiwiZGlzYWJsZS10cmFuc2l0aW9ucyI6IiJ9LG9uOntjbG9zZTpmdW5jdGlvbihuKXtlLmRlbGV0ZVRhZyhuLHQpfX19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW2UuX3YoZS5fcyh0LmN1cnJlbnRMYWJlbCkpXSldKX0pKSwxKSxlLmZpbHRlcmFibGU/bigiaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUucXVlcnksZXhwcmVzc2lvbjoicXVlcnkifV0scmVmOiJpbnB1dCIsc3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9faW5wdXQiLGNsYXNzOltlLnNlbGVjdFNpemU/ImlzLSIrZS5zZWxlY3RTaXplOiIiXSxzdHlsZTp7ImZsZXgtZ3JvdyI6IjEiLHdpZHRoOmUuaW5wdXRMZW5ndGgvKGUuaW5wdXRXaWR0aC0zMikrIiUiLCJtYXgtd2lkdGgiOmUuaW5wdXRXaWR0aC00MisicHgifSxhdHRyczp7dHlwZToidGV4dCIsZGlzYWJsZWQ6ZS5zZWxlY3REaXNhYmxlZCxhdXRvY29tcGxldGU6ZS5hdXRvQ29tcGxldGV8fGUuYXV0b2NvbXBsZXRlfSxkb21Qcm9wczp7dmFsdWU6ZS5xdWVyeX0sb246e2ZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjpmdW5jdGlvbih0KXtlLnNvZnRGb2N1cz0hMX0sa2V5dXA6ZS5tYW5hZ2VQbGFjZWhvbGRlcixrZXlkb3duOltlLnJlc2V0SW5wdXRTdGF0ZSxmdW5jdGlvbih0KXtpZighKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJkb3duIiw0MCx0LmtleSxbIkRvd24iLCJBcnJvd0Rvd24iXSkpcmV0dXJuIG51bGw7dC5wcmV2ZW50RGVmYXVsdCgpLGUubmF2aWdhdGVPcHRpb25zKCJuZXh0Iil9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInVwIiwzOCx0LmtleSxbIlVwIiwiQXJyb3dVcCJdKSlyZXR1cm4gbnVsbDt0LnByZXZlbnREZWZhdWx0KCksZS5uYXZpZ2F0ZU9wdGlvbnMoInByZXYiKX0sZnVuY3Rpb24odCl7cmV0dXJuISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZW50ZXIiLDEzLHQua2V5LCJFbnRlciIpP251bGw6KHQucHJldmVudERlZmF1bHQoKSxlLnNlbGVjdE9wdGlvbih0KSl9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVzYyIsMjcsdC5rZXksWyJFc2MiLCJFc2NhcGUiXSkpcmV0dXJuIG51bGw7dC5zdG9wUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCksZS52aXNpYmxlPSExfSxmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJkZWxldGUiLFs4LDQ2XSx0LmtleSxbIkJhY2tzcGFjZSIsIkRlbGV0ZSIsIkRlbCJdKT9udWxsOmUuZGVsZXRlUHJldlRhZyh0KX0sZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwidGFiIiw5LHQua2V5LCJUYWIiKSlyZXR1cm4gbnVsbDtlLnZpc2libGU9ITF9XSxjb21wb3NpdGlvbnN0YXJ0OmUuaGFuZGxlQ29tcG9zaXRpb24sY29tcG9zaXRpb251cGRhdGU6ZS5oYW5kbGVDb21wb3NpdGlvbixjb21wb3NpdGlvbmVuZDplLmhhbmRsZUNvbXBvc2l0aW9uLGlucHV0OltmdW5jdGlvbih0KXt0LnRhcmdldC5jb21wb3Npbmd8fChlLnF1ZXJ5PXQudGFyZ2V0LnZhbHVlKX0sZS5kZWJvdW5jZWRRdWVyeUNoYW5nZV19fSk6ZS5fZSgpXSwxKTplLl9lKCksbigiZWwtaW5wdXQiLHtyZWY6InJlZmVyZW5jZSIsY2xhc3M6eyJpcy1mb2N1cyI6ZS52aXNpYmxlfSxhdHRyczp7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6ZS5jdXJyZW50UGxhY2Vob2xkZXIsbmFtZTplLm5hbWUsaWQ6ZS5pZCxhdXRvY29tcGxldGU6ZS5hdXRvQ29tcGxldGV8fGUuYXV0b2NvbXBsZXRlLHNpemU6ZS5zZWxlY3RTaXplLGRpc2FibGVkOmUuc2VsZWN0RGlzYWJsZWQscmVhZG9ubHk6ZS5yZWFkb25seSwidmFsaWRhdGUtZXZlbnQiOiExLHRhYmluZGV4OmUubXVsdGlwbGUmJmUuZmlsdGVyYWJsZT8iLTEiOm51bGx9LG9uOntmb2N1czplLmhhbmRsZUZvY3VzLGJsdXI6ZS5oYW5kbGVCbHVyfSxuYXRpdmVPbjp7a2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVib3VuY2VkT25JbnB1dENoYW5nZSh0KX0sa2V5ZG93bjpbZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZG93biIsNDAsdC5rZXksWyJEb3duIiwiQXJyb3dEb3duIl0pKXJldHVybiBudWxsO3Quc3RvcFByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpLGUubmF2aWdhdGVPcHRpb25zKCJuZXh0Iil9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInVwIiwzOCx0LmtleSxbIlVwIiwiQXJyb3dVcCJdKSlyZXR1cm4gbnVsbDt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSxlLm5hdmlnYXRlT3B0aW9ucygicHJldiIpfSxmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMsdC5rZXksIkVudGVyIik/bnVsbDoodC5wcmV2ZW50RGVmYXVsdCgpLGUuc2VsZWN0T3B0aW9uKHQpKX0sZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZXNjIiwyNyx0LmtleSxbIkVzYyIsIkVzY2FwZSJdKSlyZXR1cm4gbnVsbDt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSxlLnZpc2libGU9ITF9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInRhYiIsOSx0LmtleSwiVGFiIikpcmV0dXJuIG51bGw7ZS52aXNpYmxlPSExfV0scGFzdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVib3VuY2VkT25JbnB1dENoYW5nZSh0KX0sbW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmlucHV0SG92ZXJpbmc9ITB9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZS5pbnB1dEhvdmVyaW5nPSExfX0sbW9kZWw6e3ZhbHVlOmUuc2VsZWN0ZWRMYWJlbCxjYWxsYmFjazpmdW5jdGlvbih0KXtlLnNlbGVjdGVkTGFiZWw9dH0sZXhwcmVzc2lvbjoic2VsZWN0ZWRMYWJlbCJ9fSxbZS4kc2xvdHMucHJlZml4P24oInRlbXBsYXRlIix7c2xvdDoicHJlZml4In0sW2UuX3QoInByZWZpeCIpXSwyKTplLl9lKCksbigidGVtcGxhdGUiLHtzbG90OiJzdWZmaXgifSxbbigiaSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiFlLnNob3dDbG9zZSxleHByZXNzaW9uOiIhc2hvd0Nsb3NlIn1dLGNsYXNzOlsiZWwtc2VsZWN0X19jYXJldCIsImVsLWlucHV0X19pY29uIiwiZWwtaWNvbi0iK2UuaWNvbkNsYXNzXX0pLGUuc2hvd0Nsb3NlP24oImkiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0X19jYXJldCBlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZSIsb246e2NsaWNrOmUuaGFuZGxlQ2xlYXJDbGlja319KTplLl9lKCldKV0sMiksbigidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYmVmb3JlLWVudGVyIjplLmhhbmRsZU1lbnVFbnRlciwiYWZ0ZXItbGVhdmUiOmUuZG9EZXN0cm95fX0sW24oImVsLXNlbGVjdC1tZW51Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlJiYhMSE9PWUuZW1wdHlUZXh0LGV4cHJlc3Npb246InZpc2libGUgJiYgZW1wdHlUZXh0ICE9PSBmYWxzZSJ9XSxyZWY6InBvcHBlciIsYXR0cnM6eyJhcHBlbmQtdG8tYm9keSI6ZS5wb3BwZXJBcHBlbmRUb0JvZHl9fSxbbigiZWwtc2Nyb2xsYmFyIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5vcHRpb25zLmxlbmd0aD4wJiYhZS5sb2FkaW5nLGV4cHJlc3Npb246Im9wdGlvbnMubGVuZ3RoID4gMCAmJiAhbG9hZGluZyJ9XSxyZWY6InNjcm9sbGJhciIsY2xhc3M6eyJpcy1lbXB0eSI6IWUuYWxsb3dDcmVhdGUmJmUucXVlcnkmJjA9PT1lLmZpbHRlcmVkT3B0aW9uc0NvdW50fSxhdHRyczp7dGFnOiJ1bCIsIndyYXAtY2xhc3MiOiJlbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAiLCJ2aWV3LWNsYXNzIjoiZWwtc2VsZWN0LWRyb3Bkb3duX19saXN0In19LFtlLnNob3dOZXdPcHRpb24/bigiZWwtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOmUucXVlcnksY3JlYXRlZDoiIn19KTplLl9lKCksZS5fdCgiZGVmYXVsdCIpXSwyKSxlLmVtcHR5VGV4dCYmKCFlLmFsbG93Q3JlYXRlfHxlLmxvYWRpbmd8fGUuYWxsb3dDcmVhdGUmJjA9PT1lLm9wdGlvbnMubGVuZ3RoKT9bZS4kc2xvdHMuZW1wdHk/ZS5fdCgiZW1wdHkiKTpuKCJwIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHkifSxbZS5fdigiXG4gICAgICAgICAgIitlLl9zKGUuZW1wdHlUZXh0KSsiXG4gICAgICAgICIpXSldOmUuX2UoKV0sMildLDEpXSwxKX0scj1bXTtpLl93aXRoU3RyaXBwZWQ9ITA7dmFyIG89big0KSxhPW4ubihvKSxzPW4oMjIpLGw9bi5uKHMpLGM9big2KSx1PW4ubihjKSxoPW4oMTApLGQ9bi5uKGgpLGY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZHJvcGRvd24gZWwtcG9wcGVyIixjbGFzczpbeyJpcy1tdWx0aXBsZSI6ZS4kcGFyZW50Lm11bHRpcGxlfSxlLnBvcHBlckNsYXNzXSxzdHlsZTp7bWluV2lkdGg6ZS5taW5XaWR0aH19LFtlLl90KCJkZWZhdWx0IildLDIpfSxwPVtdO2YuX3dpdGhTdHJpcHBlZD0hMDt2YXIgbT1uKDUpLGc9bi5uKG0pLHY9e25hbWU6IkVsU2VsZWN0RHJvcGRvd24iLGNvbXBvbmVudE5hbWU6IkVsU2VsZWN0RHJvcGRvd24iLG1peGluczpbZy5hXSxwcm9wczp7cGxhY2VtZW50OntkZWZhdWx0OiJib3R0b20tc3RhcnQifSxib3VuZGFyaWVzUGFkZGluZzp7ZGVmYXVsdDowfSxwb3BwZXJPcHRpb25zOntkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue2dwdUFjY2VsZXJhdGlvbjohMX19fSx2aXNpYmxlQXJyb3c6e2RlZmF1bHQ6ITB9LGFwcGVuZFRvQm9keTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21pbldpZHRoOiIifX0sY29tcHV0ZWQ6e3BvcHBlckNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5wb3BwZXJDbGFzc319LHdhdGNoOnsiJHBhcmVudC5pbnB1dFdpZHRoIjpmdW5jdGlvbigpe3RoaXMubWluV2lkdGg9dGhpcy4kcGFyZW50LiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCsicHgifX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kcGFyZW50LiRyZWZzLnJlZmVyZW5jZS4kZWwsdGhpcy4kcGFyZW50LnBvcHBlckVsbT10aGlzLnBvcHBlckVsbT10aGlzLiRlbCx0aGlzLiRvbigidXBkYXRlUG9wcGVyIiwoZnVuY3Rpb24oKXtlLiRwYXJlbnQudmlzaWJsZSYmZS51cGRhdGVQb3BwZXIoKX0pKSx0aGlzLiRvbigiZGVzdHJveVBvcHBlciIsdGhpcy5kZXN0cm95UG9wcGVyKX19LHk9dixiPW4oMCkseD1PYmplY3QoYlsiYSJdKSh5LGYscCwhMSxudWxsLG51bGwsbnVsbCk7eC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlIjt2YXIgXz14LmV4cG9ydHMsdz1uKDMzKSxTPW4oMzcpLEM9bi5uKFMpLGs9bigxNSksVD1uLm4oayksTT1uKDE3KSxFPW4ubihNKSxJPW4oMTIpLEQ9bi5uKEkpLEE9bigxNiksTz1uKDMxKSxQPW4ubihPKSxMPW4oMyksTj17ZGF0YTpmdW5jdGlvbigpe3JldHVybntob3Zlck9wdGlvbjotMX19LGNvbXB1dGVkOntvcHRpb25zQWxsRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmlzaWJsZX0pKS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWR9KSl9fSx3YXRjaDp7aG92ZXJJbmRleDpmdW5jdGlvbihlKXt2YXIgdD10aGlzOyJudW1iZXIiPT09dHlwZW9mIGUmJmU+LTEmJih0aGlzLmhvdmVyT3B0aW9uPXRoaXMub3B0aW9uc1tlXXx8e30pLHRoaXMub3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmhvdmVyPXQuaG92ZXJPcHRpb249PT1lfSkpfX0sbWV0aG9kczp7bmF2aWdhdGVPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy52aXNpYmxlKXtpZigwIT09dGhpcy5vcHRpb25zLmxlbmd0aCYmMCE9PXRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQmJiF0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCl7Im5leHQiPT09ZT8odGhpcy5ob3ZlckluZGV4KyssdGhpcy5ob3ZlckluZGV4PT09dGhpcy5vcHRpb25zLmxlbmd0aCYmKHRoaXMuaG92ZXJJbmRleD0wKSk6InByZXYiPT09ZSYmKHRoaXMuaG92ZXJJbmRleC0tLHRoaXMuaG92ZXJJbmRleDwwJiYodGhpcy5ob3ZlckluZGV4PXRoaXMub3B0aW9ucy5sZW5ndGgtMSkpO3ZhciBuPXRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdOyEwIT09bi5kaXNhYmxlZCYmITAhPT1uLmdyb3VwRGlzYWJsZWQmJm4udmlzaWJsZXx8dGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZSksdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsVG9PcHRpb24odC5ob3Zlck9wdGlvbil9KSl9fWVsc2UgdGhpcy52aXNpYmxlPSEwfX19LFI9bigyMSksJD17bWl4aW5zOlthLmEsdS5hLGwoKSgicmVmZXJlbmNlIiksTl0sbmFtZToiRWxTZWxlY3QiLGNvbXBvbmVudE5hbWU6IkVsU2VsZWN0IixpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDoiIn0sZWxGb3JtSXRlbTp7ZGVmYXVsdDoiIn19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57c2VsZWN0OnRoaXN9fSxjb21wdXRlZDp7X2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplfSxyZWFkb25seTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmZpbHRlcmFibGV8fHRoaXMubXVsdGlwbGV8fCFPYmplY3QoTFsiaXNJRSJdKSgpJiYhT2JqZWN0KExbImlzRWRnZSJdKSgpJiYhdGhpcy52aXNpYmxlfSxzaG93Q2xvc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm11bHRpcGxlP0FycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUubGVuZ3RoPjA6dm9pZCAwIT09dGhpcy52YWx1ZSYmbnVsbCE9PXRoaXMudmFsdWUmJiIiIT09dGhpcy52YWx1ZSx0PXRoaXMuY2xlYXJhYmxlJiYhdGhpcy5zZWxlY3REaXNhYmxlZCYmdGhpcy5pbnB1dEhvdmVyaW5nJiZlO3JldHVybiB0fSxpY29uQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdGUmJnRoaXMuZmlsdGVyYWJsZT8iIjp0aGlzLnZpc2libGU/ImFycm93LXVwIGlzLXJldmVyc2UiOiJhcnJvdy11cCJ9LGRlYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3RlPzMwMDowfSxlbXB0eVRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkaW5nP3RoaXMubG9hZGluZ1RleHR8fHRoaXMudCgiZWwuc2VsZWN0LmxvYWRpbmciKTooIXRoaXMucmVtb3RlfHwiIiE9PXRoaXMucXVlcnl8fDAhPT10aGlzLm9wdGlvbnMubGVuZ3RoKSYmKHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5xdWVyeSYmdGhpcy5vcHRpb25zLmxlbmd0aD4wJiYwPT09dGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudD90aGlzLm5vTWF0Y2hUZXh0fHx0aGlzLnQoImVsLnNlbGVjdC5ub01hdGNoIik6MD09PXRoaXMub3B0aW9ucy5sZW5ndGg/dGhpcy5ub0RhdGFUZXh0fHx0aGlzLnQoImVsLnNlbGVjdC5ub0RhdGEiKTpudWxsKX0sc2hvd05ld09wdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLm9wdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5jcmVhdGVkfSkpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmN1cnJlbnRMYWJlbD09PWUucXVlcnl9KSk7cmV0dXJuIHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5hbGxvd0NyZWF0ZSYmIiIhPT10aGlzLnF1ZXJ5JiYhdH0sc2VsZWN0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemV9LHNlbGVjdERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfSxjb2xsYXBzZVRhZ1NpemU6ZnVuY3Rpb24oKXtyZXR1cm5bInNtYWxsIiwibWluaSJdLmluZGV4T2YodGhpcy5zZWxlY3RTaXplKT4tMT8ibWluaSI6InNtYWxsIn0scHJvcFBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPT10eXBlb2YgdGhpcy5wbGFjZWhvbGRlcj90aGlzLnBsYWNlaG9sZGVyOnRoaXMudCgiZWwuc2VsZWN0LnBsYWNlaG9sZGVyIil9fSxjb21wb25lbnRzOntFbElucHV0OmQuYSxFbFNlbGVjdE1lbnU6XyxFbE9wdGlvbjp3WyJhIl0sRWxUYWc6Qy5hLEVsU2Nyb2xsYmFyOlQuYX0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOkQuYX0scHJvcHM6e25hbWU6U3RyaW5nLGlkOlN0cmluZyx2YWx1ZTp7cmVxdWlyZWQ6ITB9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoib2ZmIn0sYXV0b0NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuITB9fSxhdXRvbWF0aWNEcm9wZG93bjpCb29sZWFuLHNpemU6U3RyaW5nLGRpc2FibGVkOkJvb2xlYW4sY2xlYXJhYmxlOkJvb2xlYW4sZmlsdGVyYWJsZTpCb29sZWFuLGFsbG93Q3JlYXRlOkJvb2xlYW4sbG9hZGluZzpCb29sZWFuLHBvcHBlckNsYXNzOlN0cmluZyxyZW1vdGU6Qm9vbGVhbixsb2FkaW5nVGV4dDpTdHJpbmcsbm9NYXRjaFRleHQ6U3RyaW5nLG5vRGF0YVRleHQ6U3RyaW5nLHJlbW90ZU1ldGhvZDpGdW5jdGlvbixmaWx0ZXJNZXRob2Q6RnVuY3Rpb24sbXVsdGlwbGU6Qm9vbGVhbixtdWx0aXBsZUxpbWl0Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMX0sZGVmYXVsdEZpcnN0T3B0aW9uOkJvb2xlYW4scmVzZXJ2ZUtleXdvcmQ6Qm9vbGVhbix2YWx1ZUtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoidmFsdWUifSxjb2xsYXBzZVRhZ3M6Qm9vbGVhbixwb3BwZXJBcHBlbmRUb0JvZHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntvcHRpb25zOltdLGNhY2hlZE9wdGlvbnM6W10sY3JlYXRlZExhYmVsOm51bGwsY3JlYXRlZFNlbGVjdGVkOiExLHNlbGVjdGVkOnRoaXMubXVsdGlwbGU/W106e30saW5wdXRMZW5ndGg6MjAsaW5wdXRXaWR0aDowLGluaXRpYWxJbnB1dEhlaWdodDowLGNhY2hlZFBsYWNlSG9sZGVyOiIiLG9wdGlvbnNDb3VudDowLGZpbHRlcmVkT3B0aW9uc0NvdW50OjAsdmlzaWJsZTohMSxzb2Z0Rm9jdXM6ITEsc2VsZWN0ZWRMYWJlbDoiIixob3ZlckluZGV4Oi0xLHF1ZXJ5OiIiLHByZXZpb3VzUXVlcnk6bnVsbCxpbnB1dEhvdmVyaW5nOiExLGN1cnJlbnRQbGFjZWhvbGRlcjoiIixtZW51VmlzaWJsZU9uRm9jdXM6ITEsaXNPbkNvbXBvc2l0aW9uOiExLGlzU2lsZW50Qmx1cjohMX19LHdhdGNoOntzZWxlY3REaXNhYmxlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7ZS5yZXNldElucHV0SGVpZ2h0KCl9KSl9LHByb3BQbGFjZWhvbGRlcjpmdW5jdGlvbihlKXt0aGlzLmNhY2hlZFBsYWNlSG9sZGVyPXRoaXMuY3VycmVudFBsYWNlaG9sZGVyPWV9LHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5tdWx0aXBsZSYmKHRoaXMucmVzZXRJbnB1dEhlaWdodCgpLGUmJmUubGVuZ3RoPjB8fHRoaXMuJHJlZnMuaW5wdXQmJiIiIT09dGhpcy5xdWVyeT90aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj0iIjp0aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj10aGlzLmNhY2hlZFBsYWNlSG9sZGVyLHRoaXMuZmlsdGVyYWJsZSYmIXRoaXMucmVzZXJ2ZUtleXdvcmQmJih0aGlzLnF1ZXJ5PSIiLHRoaXMuaGFuZGxlUXVlcnlDaGFuZ2UodGhpcy5xdWVyeSkpKSx0aGlzLnNldFNlbGVjdGVkKCksdGhpcy5maWx0ZXJhYmxlJiYhdGhpcy5tdWx0aXBsZSYmKHRoaXMuaW5wdXRMZW5ndGg9MjApLE9iamVjdChMWyJ2YWx1ZUVxdWFscyJdKShlLHQpfHx0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLGUpfSx2aXNpYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZT8odGhpcy5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKSx0aGlzLmZpbHRlcmFibGUmJih0aGlzLnF1ZXJ5PXRoaXMucmVtb3RlPyIiOnRoaXMuc2VsZWN0ZWRMYWJlbCx0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKHRoaXMucXVlcnkpLHRoaXMubXVsdGlwbGU/dGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpOih0aGlzLnJlbW90ZXx8KHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbiIsInF1ZXJ5Q2hhbmdlIiwiIiksdGhpcy5icm9hZGNhc3QoIkVsT3B0aW9uR3JvdXAiLCJxdWVyeUNoYW5nZSIpKSx0aGlzLnNlbGVjdGVkTGFiZWwmJih0aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj10aGlzLnNlbGVjdGVkTGFiZWwsdGhpcy5zZWxlY3RlZExhYmVsPSIiKSkpKToodGhpcy5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJkZXN0cm95UG9wcGVyIiksdGhpcy4kcmVmcy5pbnB1dCYmdGhpcy4kcmVmcy5pbnB1dC5ibHVyKCksdGhpcy5xdWVyeT0iIix0aGlzLnByZXZpb3VzUXVlcnk9bnVsbCx0aGlzLnNlbGVjdGVkTGFiZWw9IiIsdGhpcy5pbnB1dExlbmd0aD0yMCx0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cz0hMSx0aGlzLnJlc2V0SG92ZXJJbmRleCgpLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3QuJHJlZnMuaW5wdXQmJiIiPT09dC4kcmVmcy5pbnB1dC52YWx1ZSYmMD09PXQuc2VsZWN0ZWQubGVuZ3RoJiYodC5jdXJyZW50UGxhY2Vob2xkZXI9dC5jYWNoZWRQbGFjZUhvbGRlcil9KSksdGhpcy5tdWx0aXBsZXx8KHRoaXMuc2VsZWN0ZWQmJih0aGlzLmZpbHRlcmFibGUmJnRoaXMuYWxsb3dDcmVhdGUmJnRoaXMuY3JlYXRlZFNlbGVjdGVkJiZ0aGlzLmNyZWF0ZWRMYWJlbD90aGlzLnNlbGVjdGVkTGFiZWw9dGhpcy5jcmVhdGVkTGFiZWw6dGhpcy5zZWxlY3RlZExhYmVsPXRoaXMuc2VsZWN0ZWQuY3VycmVudExhYmVsLHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsKSksdGhpcy5maWx0ZXJhYmxlJiYodGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9dGhpcy5jYWNoZWRQbGFjZUhvbGRlcikpKSx0aGlzLiRlbWl0KCJ2aXNpYmxlLWNoYW5nZSIsZSl9LG9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLiRpc1NlcnZlcil7dGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7ZS5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKX0pKSx0aGlzLm11bHRpcGxlJiZ0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTt2YXIgdD10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpOy0xPT09W10uaW5kZXhPZi5jYWxsKHQsZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJnRoaXMuc2V0U2VsZWN0ZWQoKSx0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiYmKHRoaXMuZmlsdGVyYWJsZXx8dGhpcy5yZW1vdGUpJiZ0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50JiZ0aGlzLmNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCl9fX0sbWV0aG9kczp7aGFuZGxlQ29tcG9zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUudGFyZ2V0LnZhbHVlO2lmKCJjb21wb3NpdGlvbmVuZCI9PT1lLnR5cGUpdGhpcy5pc09uQ29tcG9zaXRpb249ITEsdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZVF1ZXJ5Q2hhbmdlKG4pfSkpO2Vsc2V7dmFyIGk9bltuLmxlbmd0aC0xXXx8IiI7dGhpcy5pc09uQ29tcG9zaXRpb249IU9iamVjdChSWyJpc0tvcmVhbiJdKShpKX19LGhhbmRsZVF1ZXJ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5wcmV2aW91c1F1ZXJ5PT09ZXx8dGhpcy5pc09uQ29tcG9zaXRpb258fChudWxsIT09dGhpcy5wcmV2aW91c1F1ZXJ5fHwiZnVuY3Rpb24iIT09dHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kJiYiZnVuY3Rpb24iIT09dHlwZW9mIHRoaXMucmVtb3RlTWV0aG9kPyh0aGlzLnByZXZpb3VzUXVlcnk9ZSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0LnZpc2libGUmJnQuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwidXBkYXRlUG9wcGVyIil9KSksdGhpcy5ob3ZlckluZGV4PS0xLHRoaXMubXVsdGlwbGUmJnRoaXMuZmlsdGVyYWJsZSYmdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7dmFyIGU9MTUqdC4kcmVmcy5pbnB1dC52YWx1ZS5sZW5ndGgrMjA7dC5pbnB1dExlbmd0aD10LmNvbGxhcHNlVGFncz9NYXRoLm1pbig1MCxlKTplLHQubWFuYWdlUGxhY2Vob2xkZXIoKSx0LnJlc2V0SW5wdXRIZWlnaHQoKX0pKSx0aGlzLnJlbW90ZSYmImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnJlbW90ZU1ldGhvZD8odGhpcy5ob3ZlckluZGV4PS0xLHRoaXMucmVtb3RlTWV0aG9kKGUpKToiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kPyh0aGlzLmZpbHRlck1ldGhvZChlKSx0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb25Hcm91cCIsInF1ZXJ5Q2hhbmdlIikpOih0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50PXRoaXMub3B0aW9uc0NvdW50LHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbiIsInF1ZXJ5Q2hhbmdlIixlKSx0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb25Hcm91cCIsInF1ZXJ5Q2hhbmdlIikpLHRoaXMuZGVmYXVsdEZpcnN0T3B0aW9uJiYodGhpcy5maWx0ZXJhYmxlfHx0aGlzLnJlbW90ZSkmJnRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQmJnRoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKSk6dGhpcy5wcmV2aW91c1F1ZXJ5PWUpfSxzY3JvbGxUb09wdGlvbjpmdW5jdGlvbihlKXt2YXIgdD1BcnJheS5pc0FycmF5KGUpJiZlWzBdP2VbMF0uJGVsOmUuJGVsO2lmKHRoaXMuJHJlZnMucG9wcGVyJiZ0KXt2YXIgbj10aGlzLiRyZWZzLnBvcHBlci4kZWwucXVlcnlTZWxlY3RvcigiLmVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcCIpO1AoKShuLHQpfXRoaXMuJHJlZnMuc2Nyb2xsYmFyJiZ0aGlzLiRyZWZzLnNjcm9sbGJhci5oYW5kbGVTY3JvbGwoKX0saGFuZGxlTWVudUVudGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gZS5zY3JvbGxUb09wdGlvbihlLnNlbGVjdGVkKX0pKX0sZW1pdENoYW5nZTpmdW5jdGlvbihlKXtPYmplY3QoTFsidmFsdWVFcXVhbHMiXSkodGhpcy52YWx1ZSxlKXx8dGhpcy4kZW1pdCgiY2hhbmdlIixlKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0iW29iamVjdCBvYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS50b0xvd2VyQ2FzZSgpLGk9IltvYmplY3QgbnVsbF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnRvTG93ZXJDYXNlKCkscj0iW29iamVjdCB1bmRlZmluZWRdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS50b0xvd2VyQ2FzZSgpLG89dGhpcy5jYWNoZWRPcHRpb25zLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYT10aGlzLmNhY2hlZE9wdGlvbnNbb10scz1uP09iamVjdChMWyJnZXRWYWx1ZUJ5UGF0aCJdKShhLnZhbHVlLHRoaXMudmFsdWVLZXkpPT09T2JqZWN0KExbImdldFZhbHVlQnlQYXRoIl0pKGUsdGhpcy52YWx1ZUtleSk6YS52YWx1ZT09PWU7aWYocyl7dD1hO2JyZWFrfX1pZih0KXJldHVybiB0O3ZhciBsPW58fGl8fHI/IiI6U3RyaW5nKGUpLGM9e3ZhbHVlOmUsY3VycmVudExhYmVsOmx9O3JldHVybiB0aGlzLm11bHRpcGxlJiYoYy5oaXRTdGF0ZT0hMSksY30sc2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLm11bHRpcGxlKXt2YXIgdD10aGlzLmdldE9wdGlvbih0aGlzLnZhbHVlKTtyZXR1cm4gdC5jcmVhdGVkPyh0aGlzLmNyZWF0ZWRMYWJlbD10LmN1cnJlbnRMYWJlbCx0aGlzLmNyZWF0ZWRTZWxlY3RlZD0hMCk6dGhpcy5jcmVhdGVkU2VsZWN0ZWQ9ITEsdGhpcy5zZWxlY3RlZExhYmVsPXQuY3VycmVudExhYmVsLHRoaXMuc2VsZWN0ZWQ9dCx2b2lkKHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsKSl9dmFyIG49W107QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnB1c2goZS5nZXRPcHRpb24odCkpfSkpLHRoaXMuc2VsZWN0ZWQ9bix0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtlLnJlc2V0SW5wdXRIZWlnaHQoKX0pKX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24oZSl7dGhpcy5zb2Z0Rm9jdXM/dGhpcy5zb2Z0Rm9jdXM9ITE6KCh0aGlzLmF1dG9tYXRpY0Ryb3Bkb3dufHx0aGlzLmZpbHRlcmFibGUpJiYodGhpcy52aXNpYmxlPSEwLHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMubWVudVZpc2libGVPbkZvY3VzPSEwKSksdGhpcy4kZW1pdCgiZm9jdXMiLGUpKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMudmlzaWJsZT0hMSx0aGlzLiRyZWZzLnJlZmVyZW5jZS5ibHVyKCl9LGhhbmRsZUJsdXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuaXNTaWxlbnRCbHVyP3QuaXNTaWxlbnRCbHVyPSExOnQuJGVtaXQoImJsdXIiLGUpfSksNTApLHRoaXMuc29mdEZvY3VzPSExfSxoYW5kbGVDbGVhckNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuZGVsZXRlU2VsZWN0ZWQoZSl9LGRvRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJHJlZnMucG9wcGVyJiZ0aGlzLiRyZWZzLnBvcHBlci5kb0Rlc3Ryb3koKX0saGFuZGxlQ2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU9ITF9LHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZTpmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKXt2YXIgdD10aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoLTFdO2lmKHQpcmV0dXJuITA9PT1lfHwhMT09PWU/KHQuaGl0U3RhdGU9ZSxlKToodC5oaXRTdGF0ZT0hdC5oaXRTdGF0ZSx0LmhpdFN0YXRlKX19LGRlbGV0ZVByZXZUYWc6ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQudmFsdWUubGVuZ3RoPD0wJiYhdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoKSl7dmFyIHQ9dGhpcy52YWx1ZS5zbGljZSgpO3QucG9wKCksdGhpcy4kZW1pdCgiaW5wdXQiLHQpLHRoaXMuZW1pdENoYW5nZSh0KX19LG1hbmFnZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7IiIhPT10aGlzLmN1cnJlbnRQbGFjZWhvbGRlciYmKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMuJHJlZnMuaW5wdXQudmFsdWU/IiI6dGhpcy5jYWNoZWRQbGFjZUhvbGRlcil9LHJlc2V0SW5wdXRTdGF0ZTpmdW5jdGlvbihlKXs4IT09ZS5rZXlDb2RlJiZ0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSghMSksdGhpcy5pbnB1dExlbmd0aD0xNSp0aGlzLiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCsyMCx0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKX0scmVzZXRJbnB1dEhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb2xsYXBzZVRhZ3MmJiF0aGlzLmZpbHRlcmFibGV8fHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe2lmKGUuJHJlZnMucmVmZXJlbmNlKXt2YXIgdD1lLiRyZWZzLnJlZmVyZW5jZS4kZWwuY2hpbGROb2RlcyxuPVtdLmZpbHRlci5jYWxsKHQsKGZ1bmN0aW9uKGUpe3JldHVybiJJTlBVVCI9PT1lLnRhZ05hbWV9KSlbMF0saT1lLiRyZWZzLnRhZ3Mscj1lLmluaXRpYWxJbnB1dEhlaWdodHx8NDA7bi5zdHlsZS5oZWlnaHQ9MD09PWUuc2VsZWN0ZWQubGVuZ3RoP3IrInB4IjpNYXRoLm1heChpP2kuY2xpZW50SGVpZ2h0KyhpLmNsaWVudEhlaWdodD5yPzY6MCk6MCxyKSsicHgiLGUudmlzaWJsZSYmITEhPT1lLmVtcHR5VGV4dCYmZS5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKX19KSl9LHJlc2V0SG92ZXJJbmRleDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLm11bHRpcGxlP2Uuc2VsZWN0ZWQubGVuZ3RoPjA/ZS5ob3ZlckluZGV4PU1hdGgubWluLmFwcGx5KG51bGwsZS5zZWxlY3RlZC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLm9wdGlvbnMuaW5kZXhPZih0KX0pKSk6ZS5ob3ZlckluZGV4PS0xOmUuaG92ZXJJbmRleD1lLm9wdGlvbnMuaW5kZXhPZihlLnNlbGVjdGVkKX0pLDMwMCl9LGhhbmRsZU9wdGlvblNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5tdWx0aXBsZSl7dmFyIGk9KHRoaXMudmFsdWV8fFtdKS5zbGljZSgpLHI9dGhpcy5nZXRWYWx1ZUluZGV4KGksZS52YWx1ZSk7cj4tMT9pLnNwbGljZShyLDEpOih0aGlzLm11bHRpcGxlTGltaXQ8PTB8fGkubGVuZ3RoPHRoaXMubXVsdGlwbGVMaW1pdCkmJmkucHVzaChlLnZhbHVlKSx0aGlzLiRlbWl0KCJpbnB1dCIsaSksdGhpcy5lbWl0Q2hhbmdlKGkpLGUuY3JlYXRlZCYmKHRoaXMucXVlcnk9IiIsdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSgiIiksdGhpcy5pbnB1dExlbmd0aD0yMCksdGhpcy5maWx0ZXJhYmxlJiZ0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCl9ZWxzZSB0aGlzLiRlbWl0KCJpbnB1dCIsZS52YWx1ZSksdGhpcy5lbWl0Q2hhbmdlKGUudmFsdWUpLHRoaXMudmlzaWJsZT0hMTt0aGlzLmlzU2lsZW50Qmx1cj10LHRoaXMuc2V0U29mdEZvY3VzKCksdGhpcy52aXNpYmxlfHx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtuLnNjcm9sbFRvT3B0aW9uKGUpfSkpfSxzZXRTb2Z0Rm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNvZnRGb2N1cz0hMDt2YXIgZT10aGlzLiRyZWZzLmlucHV0fHx0aGlzLiRyZWZzLnJlZmVyZW5jZTtlJiZlLmZvY3VzKCl9LGdldFZhbHVlSW5kZXg6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV0sbj0iW29iamVjdCBvYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS50b0xvd2VyQ2FzZSgpO2lmKG4pe3ZhciBpPXRoaXMudmFsdWVLZXkscj0tMTtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlLG4pe3JldHVybiBPYmplY3QoTFsiZ2V0VmFsdWVCeVBhdGgiXSkoZSxpKT09PU9iamVjdChMWyJnZXRWYWx1ZUJ5UGF0aCJdKSh0LGkpJiYocj1uLCEwKX0pKSxyfXJldHVybiBlLmluZGV4T2YodCl9LHRvZ2dsZU1lbnU6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdERpc2FibGVkfHwodGhpcy5tZW51VmlzaWJsZU9uRm9jdXM/dGhpcy5tZW51VmlzaWJsZU9uRm9jdXM9ITE6dGhpcy52aXNpYmxlPSF0aGlzLnZpc2libGUsdGhpcy52aXNpYmxlJiYodGhpcy4kcmVmcy5pbnB1dHx8dGhpcy4kcmVmcy5yZWZlcmVuY2UpLmZvY3VzKCkpfSxzZWxlY3RPcHRpb246ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU/dGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0mJnRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKTp0aGlzLnRvZ2dsZU1lbnUoKX0sZGVsZXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgdD10aGlzLm11bHRpcGxlP1tdOiIiO3RoaXMuJGVtaXQoImlucHV0Iix0KSx0aGlzLmVtaXRDaGFuZ2UodCksdGhpcy52aXNpYmxlPSExLHRoaXMuJGVtaXQoImNsZWFyIil9LGRlbGV0ZVRhZzpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2VsZWN0ZWQuaW5kZXhPZih0KTtpZihuPi0xJiYhdGhpcy5zZWxlY3REaXNhYmxlZCl7dmFyIGk9dGhpcy52YWx1ZS5zbGljZSgpO2kuc3BsaWNlKG4sMSksdGhpcy4kZW1pdCgiaW5wdXQiLGkpLHRoaXMuZW1pdENoYW5nZShpKSx0aGlzLiRlbWl0KCJyZW1vdmUtdGFnIix0LnZhbHVlKX1lLnN0b3BQcm9wYWdhdGlvbigpfSxvbklucHV0Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5maWx0ZXJhYmxlJiZ0aGlzLnF1ZXJ5IT09dGhpcy5zZWxlY3RlZExhYmVsJiYodGhpcy5xdWVyeT10aGlzLnNlbGVjdGVkTGFiZWwsdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KSl9LG9uT3B0aW9uRGVzdHJveTpmdW5jdGlvbihlKXtlPi0xJiYodGhpcy5vcHRpb25zQ291bnQtLSx0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50LS0sdGhpcy5vcHRpb25zLnNwbGljZShlLDEpKX0scmVzZXRJbnB1dFdpZHRoOmZ1bmN0aW9uKCl7dGhpcy5pbnB1dFdpZHRoPXRoaXMuJHJlZnMucmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH0saGFuZGxlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5yZXNldElucHV0V2lkdGgoKSx0aGlzLm11bHRpcGxlJiZ0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKX0sY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb246ZnVuY3Rpb24oKXt0aGlzLmhvdmVySW5kZXg9LTE7Zm9yKHZhciBlPSExLHQ9dGhpcy5vcHRpb25zLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMub3B0aW9uc1t0XS5jcmVhdGVkKXtlPSEwLHRoaXMuaG92ZXJJbmRleD10O2JyZWFrfWlmKCFlKWZvcih2YXIgbj0wO24hPT10aGlzLm9wdGlvbnMubGVuZ3RoOysrbil7dmFyIGk9dGhpcy5vcHRpb25zW25dO2lmKHRoaXMucXVlcnkpe2lmKCFpLmRpc2FibGVkJiYhaS5ncm91cERpc2FibGVkJiZpLnZpc2libGUpe3RoaXMuaG92ZXJJbmRleD1uO2JyZWFrfX1lbHNlIGlmKGkuaXRlbVNlbGVjdGVkKXt0aGlzLmhvdmVySW5kZXg9bjticmVha319fSxnZXRWYWx1ZUtleTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBvYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnZhbHVlKS50b0xvd2VyQ2FzZSgpP2UudmFsdWU6T2JqZWN0KExbImdldFZhbHVlQnlQYXRoIl0pKGUudmFsdWUsdGhpcy52YWx1ZUtleSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNhY2hlZFBsYWNlSG9sZGVyPXRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMucHJvcFBsYWNlaG9sZGVyLHRoaXMubXVsdGlwbGUmJiFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLiRlbWl0KCJpbnB1dCIsW10pLCF0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLiRlbWl0KCJpbnB1dCIsIiIpLHRoaXMuZGVib3VuY2VkT25JbnB1dENoYW5nZT1FKCkodGhpcy5kZWJvdW5jZSwoZnVuY3Rpb24oKXtlLm9uSW5wdXRDaGFuZ2UoKX0pKSx0aGlzLmRlYm91bmNlZFF1ZXJ5Q2hhbmdlPUUoKSh0aGlzLmRlYm91bmNlLChmdW5jdGlvbih0KXtlLmhhbmRsZVF1ZXJ5Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0pKSx0aGlzLiRvbigiaGFuZGxlT3B0aW9uQ2xpY2siLHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KSx0aGlzLiRvbigic2V0U2VsZWN0ZWQiLHRoaXMuc2V0U2VsZWN0ZWQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmxlbmd0aD4wJiYodGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9IiIpLE9iamVjdChBWyJhZGRSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLmhhbmRsZVJlc2l6ZSk7dmFyIHQ9dGhpcy4kcmVmcy5yZWZlcmVuY2U7aWYodCYmdC4kZWwpe3ZhciBuPXttZWRpdW06MzYsc21hbGw6MzIsbWluaToyOH0saT10LiRlbC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpO3RoaXMuaW5pdGlhbElucHV0SGVpZ2h0PWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fHxuW3RoaXMuc2VsZWN0U2l6ZV19dGhpcy5yZW1vdGUmJnRoaXMubXVsdGlwbGUmJnRoaXMucmVzZXRJbnB1dEhlaWdodCgpLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3QmJnQuJGVsJiYoZS5pbnB1dFdpZHRoPXQuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKX0pKSx0aGlzLnNldFNlbGVjdGVkKCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRlbCYmdGhpcy5oYW5kbGVSZXNpemUmJk9iamVjdChBWyJyZW1vdmVSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLmhhbmRsZVJlc2l6ZSl9fSx6PSQsQj1PYmplY3QoYlsiYSJdKSh6LGksciwhMSxudWxsLG51bGwsbnVsbCk7Qi5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlIjt2YXIgRj1CLmV4cG9ydHM7Ri5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KEYubmFtZSxGKX07dFsiZGVmYXVsdCJdPUZ9fSl9LCI0ZTcxIjpmdW5jdGlvbihlLHQsbil7bigiZTE5OCIpKCJvYnNlcnZhYmxlIil9LCI0ZTlmIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMjJkMSIpLHI9bigiMjlhOCIpLG89bigiMjE0NSIpLGE9ci50b29sYm94LnNhdmVBc0ltYWdlO2Z1bmN0aW9uIHMoZSl7dGhpcy5tb2RlbD1lfXMuZGVmYXVsdE9wdGlvbj17c2hvdzohMCxpY29uOiJNNC43LDIyLjlMMjkuMyw0NS41TDU0LjcsMjMuNE00LjYsNDMuNkw0LjYsNThMNTMuOCw1OEw1My44LDQzLjZNMjkuMiw0NS4xTDI5LjIsMCIsdGl0bGU6YS50aXRsZSx0eXBlOiJwbmciLGNvbm5lY3RlZEJhY2tncm91bmRDb2xvcjoiI2ZmZiIsbmFtZToiIixleGNsdWRlQ29tcG9uZW50czpbInRvb2xib3giXSxwaXhlbFJhdGlvOjEsbGFuZzphLmxhbmcuc2xpY2UoKX0scy5wcm90b3R5cGUudW51c2FibGU9IWkuY2FudmFzU3VwcG9ydGVkO3ZhciBsPXMucHJvdG90eXBlO2wub25jbGljaz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubW9kZWwscj1uLmdldCgibmFtZSIpfHxlLmdldCgidGl0bGUuMC50ZXh0Iil8fCJlY2hhcnRzIixvPSJzdmciPT09dC5nZXRacigpLnBhaW50ZXIuZ2V0VHlwZSgpLGE9bz8ic3ZnIjpuLmdldCgidHlwZSIsITApfHwicG5nIixzPXQuZ2V0Q29ubmVjdGVkRGF0YVVSTCh7dHlwZTphLGJhY2tncm91bmRDb2xvcjpuLmdldCgiYmFja2dyb3VuZENvbG9yIiwhMCl8fGUuZ2V0KCJiYWNrZ3JvdW5kQ29sb3IiKXx8IiNmZmYiLGNvbm5lY3RlZEJhY2tncm91bmRDb2xvcjpuLmdldCgiY29ubmVjdGVkQmFja2dyb3VuZENvbG9yIiksZXhjbHVkZUNvbXBvbmVudHM6bi5nZXQoImV4Y2x1ZGVDb21wb25lbnRzIikscGl4ZWxSYXRpbzpuLmdldCgicGl4ZWxSYXRpbyIpfSk7aWYoImZ1bmN0aW9uIiE9PXR5cGVvZiBNb3VzZUV2ZW50fHxpLmJyb3dzZXIuaWV8fGkuYnJvd3Nlci5lZGdlKWlmKHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYil7dmFyIGw9YXRvYihzLnNwbGl0KCIsIilbMV0pLGM9bC5sZW5ndGgsdT1uZXcgVWludDhBcnJheShjKTt3aGlsZShjLS0pdVtjXT1sLmNoYXJDb2RlQXQoYyk7dmFyIGg9bmV3IEJsb2IoW3VdKTt3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoaCxyKyIuIithKX1lbHNle3ZhciBkPW4uZ2V0KCJsYW5nIiksZj0nPGJvZHkgc3R5bGU9Im1hcmdpbjowOyI+PGltZyBzcmM9IicrcysnIiBzdHlsZT0ibWF4LXdpZHRoOjEwMCU7IiB0aXRsZT0iJysoZCYmZFswXXx8IiIpKyciIC8+PC9ib2R5PicscD13aW5kb3cub3BlbigpO3AuZG9jdW1lbnQud3JpdGUoZil9ZWxzZXt2YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7bS5kb3dubG9hZD1yKyIuIithLG0udGFyZ2V0PSJfYmxhbmsiLG0uaHJlZj1zO3ZhciBnPW5ldyBNb3VzZUV2ZW50KCJjbGljayIse3ZpZXc6ZG9jdW1lbnQuZGVmYXVsdFZpZXcsYnViYmxlczohMCxjYW5jZWxhYmxlOiExfSk7bS5kaXNwYXRjaEV2ZW50KGcpfX0sby5yZWdpc3Rlcigic2F2ZUFzSW1hZ2UiLHMpO3ZhciBjPXM7ZS5leHBvcnRzPWN9LCI0ZWJjIjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNGQ4OCIpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1pKGUpfX0sIjRmODUiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0ZTA4Iikscj0oaS5fX0RFVl9fLG4oIjZkOGIiKSksbz1uKCIyMmQxIiksYT1uKCJlZGEyIikscz1hLmZvcm1hdFRpbWUsbD1hLmVuY29kZUhUTUwsYz1hLmFkZENvbW1hcyx1PWEuZ2V0VG9vbHRpcE1hcmtlcixoPW4oImUwZDMiKSxkPW4oIjZjYjciKSxmPW4oImU0N2IiKSxwPW4oIjM4YTIiKSxtPW4oImY5MzQiKSxnPW0uZ2V0TGF5b3V0UGFyYW1zLHY9bS5tZXJnZUxheW91dFBhcmFtLHk9bigiZjQ3ZCIpLGI9eS5jcmVhdGVUYXNrLHg9bigiMGY5OSIpLF89eC5wcmVwYXJlU291cmNlLHc9eC5nZXRTb3VyY2UsUz1uKCIyYjE3IiksQz1TLnJldHJpZXZlUmF3VmFsdWUsaz1oLm1ha2VJbm5lcigpLFQ9ZC5leHRlbmQoe3R5cGU6InNlcmllcy5fX2Jhc2VfXyIsc2VyaWVzSW5kZXg6MCxjb29yZGluYXRlU3lzdGVtOm51bGwsZGVmYXVsdE9wdGlvbjpudWxsLGxlZ2VuZFZpc3VhbFByb3ZpZGVyOm51bGwsdmlzdWFsQ29sb3JBY2Nlc3NQYXRoOiJpdGVtU3R5bGUuY29sb3IiLHZpc3VhbEJvcmRlckNvbG9yQWNjZXNzUGF0aDoiaXRlbVN0eWxlLmJvcmRlckNvbG9yIixsYXlvdXRNb2RlOm51bGwsaW5pdDpmdW5jdGlvbihlLHQsbixpKXt0aGlzLnNlcmllc0luZGV4PXRoaXMuY29tcG9uZW50SW5kZXgsdGhpcy5kYXRhVGFzaz1iKHtjb3VudDpJLHJlc2V0OkR9KSx0aGlzLmRhdGFUYXNrLmNvbnRleHQ9e21vZGVsOnRoaXN9LHRoaXMubWVyZ2VEZWZhdWx0QW5kVGhlbWUoZSxuKSxfKHRoaXMpO3ZhciByPXRoaXMuZ2V0SW5pdGlhbERhdGEoZSxuKTtPKHIsdGhpcyksdGhpcy5kYXRhVGFzay5jb250ZXh0LmRhdGE9cixrKHRoaXMpLmRhdGFCZWZvcmVQcm9jZXNzZWQ9cixNKHRoaXMpfSxtZXJnZURlZmF1bHRBbmRUaGVtZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubGF5b3V0TW9kZSxpPW4/ZyhlKTp7fSxvPXRoaXMuc3ViVHlwZTtkLmhhc0NsYXNzKG8pJiYobys9IlNlcmllcyIpLHIubWVyZ2UoZSx0LmdldFRoZW1lKCkuZ2V0KHRoaXMuc3ViVHlwZSkpLHIubWVyZ2UoZSx0aGlzLmdldERlZmF1bHRPcHRpb24oKSksaC5kZWZhdWx0RW1waGFzaXMoZSwibGFiZWwiLFsic2hvdyJdKSx0aGlzLmZpbGxEYXRhVGV4dFN0eWxlKGUuZGF0YSksbiYmdihlLGksbil9LG1lcmdlT3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT1yLm1lcmdlKHRoaXMub3B0aW9uLGUsITApLHRoaXMuZmlsbERhdGFUZXh0U3R5bGUoZS5kYXRhKTt2YXIgbj10aGlzLmxheW91dE1vZGU7biYmdih0aGlzLm9wdGlvbixlLG4pLF8odGhpcyk7dmFyIGk9dGhpcy5nZXRJbml0aWFsRGF0YShlLHQpO08oaSx0aGlzKSx0aGlzLmRhdGFUYXNrLmRpcnR5KCksdGhpcy5kYXRhVGFzay5jb250ZXh0LmRhdGE9aSxrKHRoaXMpLmRhdGFCZWZvcmVQcm9jZXNzZWQ9aSxNKHRoaXMpfSxmaWxsRGF0YVRleHRTdHlsZTpmdW5jdGlvbihlKXtpZihlJiYhci5pc1R5cGVkQXJyYXkoZSkpZm9yKHZhciB0PVsic2hvdyJdLG49MDtuPGUubGVuZ3RoO24rKyllW25dJiZlW25dLmxhYmVsJiZoLmRlZmF1bHRFbXBoYXNpcyhlW25dLCJsYWJlbCIsdCl9LGdldEluaXRpYWxEYXRhOmZ1bmN0aW9uKCl7fSxhcHBlbmREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0UmF3RGF0YSgpO3QuYXBwZW5kRGF0YShlLmRhdGEpfSxnZXREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PUwodGhpcyk7aWYodCl7dmFyIG49dC5jb250ZXh0LmRhdGE7cmV0dXJuIG51bGw9PWU/bjpuLmdldExpbmtlZERhdGEoZSl9cmV0dXJuIGsodGhpcykuZGF0YX0sc2V0RGF0YTpmdW5jdGlvbihlKXt2YXIgdD1MKHRoaXMpO2lmKHQpe3ZhciBuPXQuY29udGV4dDtuLmRhdGEhPT1lJiZ0Lm1vZGlmeU91dHB1dEVuZCYmdC5zZXRPdXRwdXRFbmQoZS5jb3VudCgpKSxuLm91dHB1dERhdGE9ZSx0IT09dGhpcy5kYXRhVGFzayYmKG4uZGF0YT1lKX1rKHRoaXMpLmRhdGE9ZX0sZ2V0U291cmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHcodGhpcyl9LGdldFJhd0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzKS5kYXRhQmVmb3JlUHJvY2Vzc2VkfSxnZXRCYXNlQXhpczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29vcmRpbmF0ZVN5c3RlbTtyZXR1cm4gZSYmZS5nZXRCYXNlQXhpcyYmZS5nZXRCYXNlQXhpcygpfSxmb3JtYXRUb29sdGlwOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvPXRoaXM7aT1pfHwiaHRtbCI7dmFyIGE9Imh0bWwiPT09aT8iPGJyLz4iOiJcbiIsZD0icmljaFRleHQiPT09aSxmPXt9LHA9MDtmdW5jdGlvbiBtKG4pe3ZhciBhPXIucmVkdWNlKG4sKGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT12LmdldERpbWVuc2lvbkluZm8obik7cmV0dXJuIGV8KGkmJiExIT09aS50b29sdGlwJiZudWxsIT1pLmRpc3BsYXlOYW1lKX0pLDApLGg9W107ZnVuY3Rpb24gbShlLG4pe3ZhciByPXYuZ2V0RGltZW5zaW9uSW5mbyhuKTtpZihyJiYhMSE9PXIub3RoZXJEaW1zLnRvb2x0aXApe3ZhciBtPXIudHlwZSxnPSJzdWIiK28uc2VyaWVzSW5kZXgrImF0IitwLHk9dSh7Y29sb3I6dyx0eXBlOiJzdWJJdGVtIixyZW5kZXJNb2RlOmksbWFya2VySWQ6Z30pLGI9InN0cmluZyI9PT10eXBlb2YgeT95OnkuY29udGVudCx4PShhP2IrbChyLmRpc3BsYXlOYW1lfHwiLSIpKyI6ICI6IiIpK2woIm9yZGluYWwiPT09bT9lKyIiOiJ0aW1lIj09PW0/dD8iIjpzKCJ5eXl5L01NL2RkIGhoOm1tOnNzIixlKTpjKGUpKTt4JiZoLnB1c2goeCksZCYmKGZbZ109dywrK3ApfX15Lmxlbmd0aD9yLmVhY2goeSwoZnVuY3Rpb24odCl7bShDKHYsZSx0KSx0KX0pKTpyLmVhY2gobixtKTt2YXIgZz1hP2Q/IlxuIjoiPGJyLz4iOiIiLGI9ZytoLmpvaW4oZ3x8IiwgIik7cmV0dXJue3JlbmRlck1vZGU6aSxjb250ZW50OmIsc3R5bGU6Zn19ZnVuY3Rpb24gZyhlKXtyZXR1cm57cmVuZGVyTW9kZTppLGNvbnRlbnQ6bChjKGUpKSxzdHlsZTpmfX12YXIgdj10aGlzLmdldERhdGEoKSx5PXYubWFwRGltZW5zaW9uKCJkZWZhdWx0ZWRUb29sdGlwIiwhMCksYj15Lmxlbmd0aCx4PXRoaXMuZ2V0UmF3VmFsdWUoZSksXz1yLmlzQXJyYXkoeCksdz12LmdldEl0ZW1WaXN1YWwoZSwiY29sb3IiKTtyLmlzT2JqZWN0KHcpJiZ3LmNvbG9yU3RvcHMmJih3PSh3LmNvbG9yU3RvcHNbMF18fHt9KS5jb2xvciksdz13fHwidHJhbnNwYXJlbnQiO3ZhciBTPWI+MXx8XyYmIWI/bSh4KTpnKGI/Qyh2LGUseVswXSk6Xz94WzBdOngpLGs9Uy5jb250ZW50LFQ9by5zZXJpZXNJbmRleCsiYXQiK3AsTT11KHtjb2xvcjp3LHR5cGU6Iml0ZW0iLHJlbmRlck1vZGU6aSxtYXJrZXJJZDpUfSk7ZltUXT13LCsrcDt2YXIgRT12LmdldE5hbWUoZSksST10aGlzLm5hbWU7aC5pc05hbWVTcGVjaWZpZWQodGhpcyl8fChJPSIiKSxJPUk/bChJKSsodD8iOiAiOmEpOiIiO3ZhciBEPSJzdHJpbmciPT09dHlwZW9mIE0/TTpNLmNvbnRlbnQsQT10P0QrSStrOkkrRCsoRT9sKEUpKyI6ICIrazprKTtyZXR1cm57aHRtbDpBLG1hcmtlcnM6Zn19LGlzQW5pbWF0aW9uRW5hYmxlZDpmdW5jdGlvbigpe2lmKG8ubm9kZSlyZXR1cm4hMTt2YXIgZT10aGlzLmdldFNoYWxsb3coImFuaW1hdGlvbiIpO3JldHVybiBlJiZ0aGlzLmdldERhdGEoKS5jb3VudCgpPnRoaXMuZ2V0U2hhbGxvdygiYW5pbWF0aW9uVGhyZXNob2xkIikmJihlPSExKSxlfSxyZXN0b3JlRGF0YTpmdW5jdGlvbigpe3RoaXMuZGF0YVRhc2suZGlydHkoKX0sZ2V0Q29sb3JGcm9tUGFsZXR0ZTpmdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5lY01vZGVsLHI9Zi5nZXRDb2xvckZyb21QYWxldHRlLmNhbGwodGhpcyxlLHQsbik7cmV0dXJuIHJ8fChyPWkuZ2V0Q29sb3JGcm9tUGFsZXR0ZShlLHQsbikpLHJ9LGNvb3JkRGltVG9EYXRhRGltOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldFJhd0RhdGEoKS5tYXBEaW1lbnNpb24oZSwhMCl9LGdldFByb2dyZXNzaXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJwcm9ncmVzc2l2ZSIpfSxnZXRQcm9ncmVzc2l2ZVRocmVzaG9sZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldCgicHJvZ3Jlc3NpdmVUaHJlc2hvbGQiKX0sZ2V0QXhpc1Rvb2x0aXBEYXRhOm51bGwsZ2V0VG9vbHRpcFBvc2l0aW9uOm51bGwscGlwZVRhc2s6bnVsbCxwcmV2ZW50SW5jcmVtZW50YWw6bnVsbCxwaXBlbGluZUNvbnRleHQ6bnVsbH0pO2Z1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5uYW1lO2guaXNOYW1lU3BlY2lmaWVkKGUpfHwoZS5uYW1lPUUoZSl8fHQpfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9ZS5nZXRSYXdEYXRhKCksbj10Lm1hcERpbWVuc2lvbigic2VyaWVzTmFtZSIsITApLGk9W107cmV0dXJuIHIuZWFjaChuLChmdW5jdGlvbihlKXt2YXIgbj10LmdldERpbWVuc2lvbkluZm8oZSk7bi5kaXNwbGF5TmFtZSYmaS5wdXNoKG4uZGlzcGxheU5hbWUpfSkpLGkuam9pbigiICIpfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIGUubW9kZWwuZ2V0UmF3RGF0YSgpLmNvdW50KCl9ZnVuY3Rpb24gRChlKXt2YXIgdD1lLm1vZGVsO3JldHVybiB0LnNldERhdGEodC5nZXRSYXdEYXRhKCkuY2xvbmVTaGFsbG93KCkpLEF9ZnVuY3Rpb24gQShlLHQpe3Qub3V0cHV0RGF0YSYmZS5lbmQ+dC5vdXRwdXREYXRhLmNvdW50KCkmJnQubW9kZWwuZ2V0UmF3RGF0YSgpLmNsb25lU2hhbGxvdyh0Lm91dHB1dERhdGEpfWZ1bmN0aW9uIE8oZSx0KXtyLmVhY2goZS5DSEFOR0FCTEVfTUVUSE9EUywoZnVuY3Rpb24obil7ZS53cmFwTWV0aG9kKG4sci5jdXJyeShQLHQpKX0pKX1mdW5jdGlvbiBQKGUpe3ZhciB0PUwoZSk7dCYmdC5zZXRPdXRwdXRFbmQodGhpcy5jb3VudCgpKX1mdW5jdGlvbiBMKGUpe3ZhciB0PShlLmVjTW9kZWx8fHt9KS5zY2hlZHVsZXIsbj10JiZ0LmdldFBpcGVsaW5lKGUudWlkKTtpZihuKXt2YXIgaT1uLmN1cnJlbnRUYXNrO2lmKGkpe3ZhciByPWkuYWdlbnRTdHViTWFwO3ImJihpPXIuZ2V0KGUudWlkKSl9cmV0dXJuIGl9fXIubWl4aW4oVCxwKSxyLm1peGluKFQsZik7dmFyIE49VDtlLmV4cG9ydHM9Tn0sIjRmYWMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2MjBiIikscj1uKCI5YzJjIik7ZnVuY3Rpb24gbyhlLHQsbil7dmFyIG89dC5wb2ludHMsYT10LnNtb290aDtpZihvJiZvLmxlbmd0aD49Mil7aWYoYSYmInNwbGluZSIhPT1hKXt2YXIgcz1yKG8sYSxuLHQuc21vb3RoQ29uc3RyYWludCk7ZS5tb3ZlVG8ob1swXVswXSxvWzBdWzFdKTtmb3IodmFyIGw9by5sZW5ndGgsYz0wO2M8KG4/bDpsLTEpO2MrKyl7dmFyIHU9c1syKmNdLGg9c1syKmMrMV0sZD1vWyhjKzEpJWxdO2UuYmV6aWVyQ3VydmVUbyh1WzBdLHVbMV0saFswXSxoWzFdLGRbMF0sZFsxXSl9fWVsc2V7InNwbGluZSI9PT1hJiYobz1pKG8sbikpLGUubW92ZVRvKG9bMF1bMF0sb1swXVsxXSk7Yz0xO2Zvcih2YXIgZj1vLmxlbmd0aDtjPGY7YysrKWUubGluZVRvKG9bY11bMF0sb1tjXVsxXSl9biYmZS5jbG9zZVBhdGgoKX19dC5idWlsZFBhdGg9b30sIjUwYzQiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJhNjkxIikscj1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9yKGkoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LCI1MGU1IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNmQ4YiIpLHI9bigiZWRhMiIpLG89WyJ4IiwieSIsInoiLCJyYWRpdXMiLCJhbmdsZSIsInNpbmdsZSJdLGE9WyJjYXJ0ZXNpYW4yZCIsInBvbGFyIiwic2luZ2xlQXhpcyJdO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGkuaW5kZXhPZihhLGUpPj0wfWZ1bmN0aW9uIGwoZSx0KXtlPWUuc2xpY2UoKTt2YXIgbj1pLm1hcChlLHIuY2FwaXRhbEZpcnN0KTt0PSh0fHxbXSkuc2xpY2UoKTt2YXIgbz1pLm1hcCh0LHIuY2FwaXRhbEZpcnN0KTtyZXR1cm4gZnVuY3Rpb24ocixhKXtpLmVhY2goZSwoZnVuY3Rpb24oZSxpKXtmb3IodmFyIHM9e25hbWU6ZSxjYXBpdGFsOm5baV19LGw9MDtsPHQubGVuZ3RoO2wrKylzW3RbbF1dPWUrb1tsXTtyLmNhbGwoYSxzKX0pKX19dmFyIGM9bChvLFsiYXhpc0luZGV4IiwiYXhpcyIsImluZGV4IiwiaWQiXSk7ZnVuY3Rpb24gdShlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLHM9e25vZGVzOltdLHJlY29yZHM6e319O2lmKHQoKGZ1bmN0aW9uKGUpe3MucmVjb3Jkc1tlLm5hbWVdPXt9fSkpLCFuKXJldHVybiBzO2EobixzKTtkb3tpPSExLGUobCl9d2hpbGUoaSk7ZnVuY3Rpb24gbChlKXshcihlLHMpJiZvKGUscykmJihhKGUscyksaT0hMCl9cmV0dXJuIHN9O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gaS5pbmRleE9mKHQubm9kZXMsZSk+PTB9ZnVuY3Rpb24gbyhlLHIpe3ZhciBvPSExO3JldHVybiB0KChmdW5jdGlvbih0KXtpLmVhY2gobihlLHQpfHxbXSwoZnVuY3Rpb24oZSl7ci5yZWNvcmRzW3QubmFtZV1bZV0mJihvPSEwKX0pKX0pKSxvfWZ1bmN0aW9uIGEoZSxyKXtyLm5vZGVzLnB1c2goZSksdCgoZnVuY3Rpb24odCl7aS5lYWNoKG4oZSx0KXx8W10sKGZ1bmN0aW9uKGUpe3IucmVjb3Jkc1t0Lm5hbWVdW2VdPSEwfSkpfSkpfX10LmlzQ29vcmRTdXBwb3J0ZWQ9cyx0LmNyZWF0ZU5hbWVFYWNoPWwsdC5lYWNoQXhpc0RpbT1jLHQuY3JlYXRlTGlua2VkTm9kZXNGaW5kZXI9dX0sIjUxMWYiOmZ1bmN0aW9uKGUsdCxuKXtuKCIwYjk5IiksbigiNjU4ZiIpLGUuZXhwb3J0cz1uKCJmY2Q0IikuZigiaXRlcmF0b3IiKX0sNTEyODpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LlBvcHVwTWFuYWdlcj12b2lkIDA7dmFyIGk9bigiMmIwZSIpLHI9ZChpKSxvPW4oIjdmNGQiKSxhPWQobykscz1uKCI0YjI2IiksbD1kKHMpLGM9bigiZTYyZCIpLHU9ZChjKSxoPW4oIjU5MjQiKTtmdW5jdGlvbiBkKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgZj0xLHA9dm9pZCAwO3QuZGVmYXVsdD17cHJvcHM6e3Zpc2libGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxvcGVuRGVsYXk6e30sY2xvc2VEZWxheTp7fSx6SW5kZXg6e30sbW9kYWw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxtb2RhbEZhZGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxtb2RhbENsYXNzOnt9LG1vZGFsQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbG9ja1Njcm9sbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlT25QcmVzc0VzY2FwZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGNsb3NlT25DbGlja01vZGFsOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fcG9wdXBJZD0icG9wdXAtIitmKyssbC5kZWZhdWx0LnJlZ2lzdGVyKHRoaXMuX3BvcHVwSWQsdGhpcyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtsLmRlZmF1bHQuZGVyZWdpc3Rlcih0aGlzLl9wb3B1cElkKSxsLmRlZmF1bHQuY2xvc2VNb2RhbCh0aGlzLl9wb3B1cElkKSx0aGlzLnJlc3RvcmVCb2R5U3R5bGUoKX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntvcGVuZWQ6ITEsYm9keVBhZGRpbmdSaWdodDpudWxsLGNvbXB1dGVkQm9keVBhZGRpbmdSaWdodDowLHdpdGhvdXRIaWRkZW5DbGFzczohMCxyZW5kZXJlZDohMX19LHdhdGNoOnt2aXNpYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZSl7aWYodGhpcy5fb3BlbmluZylyZXR1cm47dGhpcy5yZW5kZXJlZD90aGlzLm9wZW4oKToodGhpcy5yZW5kZXJlZD0hMCxyLmRlZmF1bHQubmV4dFRpY2soKGZ1bmN0aW9uKCl7dC5vcGVuKCl9KSkpfWVsc2UgdGhpcy5jbG9zZSgpfX0sbWV0aG9kczp7b3BlbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucmVuZGVyZWR8fCh0aGlzLnJlbmRlcmVkPSEwKTt2YXIgbj0oMCxhLmRlZmF1bHQpKHt9LHRoaXMuJHByb3BzfHx0aGlzLGUpO3RoaXMuX2Nsb3NlVGltZXImJihjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lciksdGhpcy5fY2xvc2VUaW1lcj1udWxsKSxjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVyKTt2YXIgaT1OdW1iZXIobi5vcGVuRGVsYXkpO2k+MD90aGlzLl9vcGVuVGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9vcGVuVGltZXI9bnVsbCx0LmRvT3BlbihuKX0pLGkpOnRoaXMuZG9PcGVuKG4pfSxkb09wZW46ZnVuY3Rpb24oZSl7aWYoIXRoaXMuJGlzU2VydmVyJiYoIXRoaXMud2lsbE9wZW58fHRoaXMud2lsbE9wZW4oKSkmJiF0aGlzLm9wZW5lZCl7dGhpcy5fb3BlbmluZz0hMDt2YXIgdD10aGlzLiRlbCxuPWUubW9kYWwsaT1lLnpJbmRleDtpZihpJiYobC5kZWZhdWx0LnpJbmRleD1pKSxuJiYodGhpcy5fY2xvc2luZyYmKGwuZGVmYXVsdC5jbG9zZU1vZGFsKHRoaXMuX3BvcHVwSWQpLHRoaXMuX2Nsb3Npbmc9ITEpLGwuZGVmYXVsdC5vcGVuTW9kYWwodGhpcy5fcG9wdXBJZCxsLmRlZmF1bHQubmV4dFpJbmRleCgpLHRoaXMubW9kYWxBcHBlbmRUb0JvZHk/dm9pZCAwOnQsZS5tb2RhbENsYXNzLGUubW9kYWxGYWRlKSxlLmxvY2tTY3JvbGwpKXt0aGlzLndpdGhvdXRIaWRkZW5DbGFzcz0hKDAsaC5oYXNDbGFzcykoZG9jdW1lbnQuYm9keSwiZWwtcG9wdXAtcGFyZW50LS1oaWRkZW4iKSx0aGlzLndpdGhvdXRIaWRkZW5DbGFzcyYmKHRoaXMuYm9keVBhZGRpbmdSaWdodD1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCx0aGlzLmNvbXB1dGVkQm9keVBhZGRpbmdSaWdodD1wYXJzZUludCgoMCxoLmdldFN0eWxlKShkb2N1bWVudC5ib2R5LCJwYWRkaW5nUmlnaHQiKSwxMCkpLHA9KDAsdS5kZWZhdWx0KSgpO3ZhciByPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ8ZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsbz0oMCxoLmdldFN0eWxlKShkb2N1bWVudC5ib2R5LCJvdmVyZmxvd1kiKTtwPjAmJihyfHwic2Nyb2xsIj09PW8pJiZ0aGlzLndpdGhvdXRIaWRkZW5DbGFzcyYmKGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0PXRoaXMuY29tcHV0ZWRCb2R5UGFkZGluZ1JpZ2h0K3ArInB4IiksKDAsaC5hZGRDbGFzcykoZG9jdW1lbnQuYm9keSwiZWwtcG9wdXAtcGFyZW50LS1oaWRkZW4iKX0ic3RhdGljIj09PWdldENvbXB1dGVkU3R5bGUodCkucG9zaXRpb24mJih0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIpLHQuc3R5bGUuekluZGV4PWwuZGVmYXVsdC5uZXh0WkluZGV4KCksdGhpcy5vcGVuZWQ9ITAsdGhpcy5vbk9wZW4mJnRoaXMub25PcGVuKCksdGhpcy5kb0FmdGVyT3BlbigpfX0sZG9BZnRlck9wZW46ZnVuY3Rpb24oKXt0aGlzLl9vcGVuaW5nPSExfSxjbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMud2lsbENsb3NlfHx0aGlzLndpbGxDbG9zZSgpKXtudWxsIT09dGhpcy5fb3BlblRpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lciksdGhpcy5fb3BlblRpbWVyPW51bGwpLGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVyKTt2YXIgdD1OdW1iZXIodGhpcy5jbG9zZURlbGF5KTt0PjA/dGhpcy5fY2xvc2VUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuX2Nsb3NlVGltZXI9bnVsbCxlLmRvQ2xvc2UoKX0pLHQpOnRoaXMuZG9DbG9zZSgpfX0sZG9DbG9zZTpmdW5jdGlvbigpe3RoaXMuX2Nsb3Npbmc9ITAsdGhpcy5vbkNsb3NlJiZ0aGlzLm9uQ2xvc2UoKSx0aGlzLmxvY2tTY3JvbGwmJnNldFRpbWVvdXQodGhpcy5yZXN0b3JlQm9keVN0eWxlLDIwMCksdGhpcy5vcGVuZWQ9ITEsdGhpcy5kb0FmdGVyQ2xvc2UoKX0sZG9BZnRlckNsb3NlOmZ1bmN0aW9uKCl7bC5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCksdGhpcy5fY2xvc2luZz0hMX0scmVzdG9yZUJvZHlTdHlsZTpmdW5jdGlvbigpe3RoaXMubW9kYWwmJnRoaXMud2l0aG91dEhpZGRlbkNsYXNzJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ9dGhpcy5ib2R5UGFkZGluZ1JpZ2h0LCgwLGgucmVtb3ZlQ2xhc3MpKGRvY3VtZW50LmJvZHksImVsLXBvcHVwLXBhcmVudC0taGlkZGVuIikpLHRoaXMud2l0aG91dEhpZGRlbkNsYXNzPSEwfX19LHQuUG9wdXBNYW5hZ2VyPWwuZGVmYXVsdH0sIjUxMmMiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCJlZjA4Iikscj1uKCI1NTI0Iiksbz1uKCI5YzBjNyIpLGE9bigiMDUxYiIpLHM9bigiOWMwZSIpLGw9InByb3RvdHlwZSIsYz1mdW5jdGlvbihlLHQsbil7dmFyIHUsaCxkLGY9ZSZjLkYscD1lJmMuRyxtPWUmYy5TLGc9ZSZjLlAsdj1lJmMuQix5PWUmYy5XLGI9cD9yOnJbdF18fChyW3RdPXt9KSx4PWJbbF0sXz1wP2k6bT9pW3RdOihpW3RdfHx7fSlbbF07Zm9yKHUgaW4gcCYmKG49dCksbiloPSFmJiZfJiZ2b2lkIDAhPT1fW3VdLGgmJnMoYix1KXx8KGQ9aD9fW3VdOm5bdV0sYlt1XT1wJiYiZnVuY3Rpb24iIT10eXBlb2YgX1t1XT9uW3VdOnYmJmg/byhkLGkpOnkmJl9bdV09PWQ/ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24odCxuLGkpe2lmKHRoaXMgaW5zdGFuY2VvZiBlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgZTtjYXNlIDE6cmV0dXJuIG5ldyBlKHQpO2Nhc2UgMjpyZXR1cm4gbmV3IGUodCxuKX1yZXR1cm4gbmV3IGUodCxuLGkpfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIHRbbF09ZVtsXSx0fShkKTpnJiYiZnVuY3Rpb24iPT10eXBlb2YgZD9vKEZ1bmN0aW9uLmNhbGwsZCk6ZCxnJiYoKGIudmlydHVhbHx8KGIudmlydHVhbD17fSkpW3VdPWQsZSZjLlImJngmJiF4W3VdJiZhKHgsdSxkKSkpfTtjLkY9MSxjLkc9MixjLlM9NCxjLlA9OCxjLkI9MTYsYy5XPTMyLGMuVT02NCxjLlI9MTI4LGUuZXhwb3J0cz1jfSw1MTMyOmZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24odCxuKXtlLmV4cG9ydHM9bigpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIG4oaSl7aWYodFtpXSlyZXR1cm4gdFtpXS5leHBvcnRzO3ZhciByPXRbaV09e2k6aSxsOiExLGV4cG9ydHM6e319O3JldHVybiBlW2ldLmNhbGwoci5leHBvcnRzLHIsci5leHBvcnRzLG4pLHIubD0hMCxyLmV4cG9ydHN9cmV0dXJuIG4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQsaSl7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0Oml9KX0sbi5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9bihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJiJzdHJpbmciIT10eXBlb2YgZSlmb3IodmFyIHIgaW4gZSluLmQoaSxyLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwscikpO3JldHVybiBpfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LCJhIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD0iIixuKG4ucz0yMyl9KFtmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIHIoKXt2YXIgZTt0cnl7ZT10LnN0b3JhZ2UuZGVidWd9Y2F0Y2goZSl7fXJldHVybiFlJiZ2b2lkIDAhPT1pJiYiZW52ImluIGkmJihlPWkuZW52LkRFQlVHKSxlfSh0PWUuZXhwb3J0cz1uKDI2KSkubG9nPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLmxvZyYmRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZS5sb2csY29uc29sZSxhcmd1bWVudHMpfSx0LmZvcm1hdEFyZ3M9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy51c2VDb2xvcnM7aWYoZVswXT0obj8iJWMiOiIiKSt0aGlzLm5hbWVzcGFjZSsobj8iICVjIjoiICIpK2VbMF0rKG4/IiVjICI6IiAiKSsiKyIrdC5odW1hbml6ZSh0aGlzLmRpZmYpLG4pe3ZhciBpPSJjb2xvcjogIit0aGlzLmNvbG9yO2Uuc3BsaWNlKDEsMCxpLCJjb2xvcjogaW5oZXJpdCIpO3ZhciByPTAsbz0wO2VbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLChmdW5jdGlvbihlKXsiJSUiIT09ZSYmKHIrKywiJWMiPT09ZSYmKG89cikpfSkpLGUuc3BsaWNlKG8sMCxpKX19LHQuc2F2ZT1mdW5jdGlvbihlKXt0cnl7bnVsbD09ZT90LnN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVidWciKTp0LnN0b3JhZ2UuZGVidWc9ZX1jYXRjaChlKXt9fSx0LmxvYWQ9cix0LnVzZUNvbG9ycz1mdW5jdGlvbigpe3JldHVybiEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cucHJvY2Vzc3x8InJlbmRlcmVyIiE9PXdpbmRvdy5wcm9jZXNzLnR5cGUpfHwoInVuZGVmaW5lZCI9PXR5cGVvZiBuYXZpZ2F0b3J8fCFuYXZpZ2F0b3IudXNlckFnZW50fHwhbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVwvKFxkKykvKSkmJigidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLykpfSx0LnN0b3JhZ2U9InVuZGVmaW5lZCIhPXR5cGVvZiBjaHJvbWUmJnZvaWQgMCE9PWNocm9tZS5zdG9yYWdlP2Nocm9tZS5zdG9yYWdlLmxvY2FsOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlfWNhdGNoKGUpe319KCksdC5jb2xvcnM9WyIjMDAwMENDIiwiIzAwMDBGRiIsIiMwMDMzQ0MiLCIjMDAzM0ZGIiwiIzAwNjZDQyIsIiMwMDY2RkYiLCIjMDA5OUNDIiwiIzAwOTlGRiIsIiMwMENDMDAiLCIjMDBDQzMzIiwiIzAwQ0M2NiIsIiMwMENDOTkiLCIjMDBDQ0NDIiwiIzAwQ0NGRiIsIiMzMzAwQ0MiLCIjMzMwMEZGIiwiIzMzMzNDQyIsIiMzMzMzRkYiLCIjMzM2NkNDIiwiIzMzNjZGRiIsIiMzMzk5Q0MiLCIjMzM5OUZGIiwiIzMzQ0MwMCIsIiMzM0NDMzMiLCIjMzNDQzY2IiwiIzMzQ0M5OSIsIiMzM0NDQ0MiLCIjMzNDQ0ZGIiwiIzY2MDBDQyIsIiM2NjAwRkYiLCIjNjYzM0NDIiwiIzY2MzNGRiIsIiM2NkNDMDAiLCIjNjZDQzMzIiwiIzk5MDBDQyIsIiM5OTAwRkYiLCIjOTkzM0NDIiwiIzk5MzNGRiIsIiM5OUNDMDAiLCIjOTlDQzMzIiwiI0NDMDAwMCIsIiNDQzAwMzMiLCIjQ0MwMDY2IiwiI0NDMDA5OSIsIiNDQzAwQ0MiLCIjQ0MwMEZGIiwiI0NDMzMwMCIsIiNDQzMzMzMiLCIjQ0MzMzY2IiwiI0NDMzM5OSIsIiNDQzMzQ0MiLCIjQ0MzM0ZGIiwiI0NDNjYwMCIsIiNDQzY2MzMiLCIjQ0M5OTAwIiwiI0NDOTkzMyIsIiNDQ0NDMDAiLCIjQ0NDQzMzIiwiI0ZGMDAwMCIsIiNGRjAwMzMiLCIjRkYwMDY2IiwiI0ZGMDA5OSIsIiNGRjAwQ0MiLCIjRkYwMEZGIiwiI0ZGMzMwMCIsIiNGRjMzMzMiLCIjRkYzMzY2IiwiI0ZGMzM5OSIsIiNGRjMzQ0MiLCIjRkYzM0ZGIiwiI0ZGNjYwMCIsIiNGRjY2MzMiLCIjRkY5OTAwIiwiI0ZGOTkzMyIsIiNGRkNDMDAiLCIjRkZDQzMzIl0sdC5mb3JtYXR0ZXJzLmo9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1jYXRjaChlKXtyZXR1cm4iW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICIrZS5tZXNzYWdlfX0sdC5lbmFibGUocigpKX0pLmNhbGwodGhpcyxuKDI1KSl9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBpKGUpe2lmKGUpcmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBpLnByb3RvdHlwZSllW3RdPWkucHJvdG90eXBlW3RdO3JldHVybiBlfShlKX1lLmV4cG9ydHM9aSxpLnByb3RvdHlwZS5vbj1pLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LCh0aGlzLl9jYWxsYmFja3NbIiQiK2VdPXRoaXMuX2NhbGxiYWNrc1siJCIrZV18fFtdKS5wdXNoKHQpLHRoaXN9LGkucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5vZmYoZSxuKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbi5mbj10LHRoaXMub24oZSxuKSx0aGlzfSxpLnByb3RvdHlwZS5vZmY9aS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9aS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWkucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzfHx7fSwwPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jYWxsYmFja3M9e30sdGhpczt2YXIgbixpPXRoaXMuX2NhbGxiYWNrc1siJCIrZV07aWYoIWkpcmV0dXJuIHRoaXM7aWYoMT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1siJCIrZV0sdGhpcztmb3IodmFyIHI9MDtyPGkubGVuZ3RoO3IrKylpZigobj1pW3JdKT09PXR8fG4uZm49PT10KXtpLnNwbGljZShyLDEpO2JyZWFrfXJldHVybiB0aGlzfSxpLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9O3ZhciB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLG49dGhpcy5fY2FsbGJhY2tzWyIkIitlXTtpZihuKWZvcih2YXIgaT0wLHI9KG49bi5zbGljZSgwKSkubGVuZ3RoO2k8cjsrK2kpbltpXS5hcHBseSh0aGlzLHQpO3JldHVybiB0aGlzfSxpLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3N8fHt9LHRoaXMuX2NhbGxiYWNrc1siJCIrZV18fFtdfSxpLnByb3RvdHlwZS5oYXNMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxpc3RlbmVycyhlKS5sZW5ndGh9fSxmdW5jdGlvbihlLHQsbil7dmFyIGkscj1uKDM2KSxvPW4oMTYpLGE9bigzNykscz1uKDM4KSxsPW4oMzkpOyJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJihpPW4oNDApKTt2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmL0FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHU9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9QaGFudG9tSlMvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGg9Y3x8dTt0LnByb3RvY29sPTM7dmFyIGQ9dC5wYWNrZXRzPXtvcGVuOjAsY2xvc2U6MSxwaW5nOjIscG9uZzozLG1lc3NhZ2U6NCx1cGdyYWRlOjUsbm9vcDo2fSxmPXIoZCkscD17dHlwZToiZXJyb3IiLGRhdGE6InBhcnNlciBlcnJvciJ9LG09big0MSk7ZnVuY3Rpb24gZyhlLHQsbil7Zm9yKHZhciBpPW5ldyBBcnJheShlLmxlbmd0aCkscj1zKGUubGVuZ3RoLG4pLG89ZnVuY3Rpb24oZSxuLHIpe3QobiwoZnVuY3Rpb24odCxuKXtpW2VdPW4scih0LGkpfSkpfSxhPTA7YTxlLmxlbmd0aDthKyspbyhhLGVbYV0scil9dC5lbmNvZGVQYWNrZXQ9ZnVuY3Rpb24oZSxuLGkscil7ImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj0hMSksImZ1bmN0aW9uIj09dHlwZW9mIGkmJihyPWksaT1udWxsKTt2YXIgbz12b2lkIDA9PT1lLmRhdGE/dm9pZCAwOmUuZGF0YS5idWZmZXJ8fGUuZGF0YTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZvIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtpZighbilyZXR1cm4gdC5lbmNvZGVCYXNlNjRQYWNrZXQoZSxpKTt2YXIgcj1lLmRhdGEsbz1uZXcgVWludDhBcnJheShyKSxhPW5ldyBVaW50OEFycmF5KDErci5ieXRlTGVuZ3RoKTthWzBdPWRbZS50eXBlXTtmb3IodmFyIHM9MDtzPG8ubGVuZ3RoO3MrKylhW3MrMV09b1tzXTtyZXR1cm4gaShhLmJ1ZmZlcil9KGUsbixyKTtpZih2b2lkIDAhPT1tJiZvIGluc3RhbmNlb2YgbSlyZXR1cm4gZnVuY3Rpb24oZSxuLGkpe2lmKCFuKXJldHVybiB0LmVuY29kZUJhc2U2NFBhY2tldChlLGkpO2lmKGgpcmV0dXJuIGZ1bmN0aW9uKGUsbixpKXtpZighbilyZXR1cm4gdC5lbmNvZGVCYXNlNjRQYWNrZXQoZSxpKTt2YXIgcj1uZXcgRmlsZVJlYWRlcjtyZXR1cm4gci5vbmxvYWQ9ZnVuY3Rpb24oKXt0LmVuY29kZVBhY2tldCh7dHlwZTplLnR5cGUsZGF0YTpyLnJlc3VsdH0sbiwhMCxpKX0sci5yZWFkQXNBcnJheUJ1ZmZlcihlLmRhdGEpfShlLG4saSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoMSk7clswXT1kW2UudHlwZV07dmFyIG89bmV3IG0oW3IuYnVmZmVyLGUuZGF0YV0pO3JldHVybiBpKG8pfShlLG4scik7aWYobyYmby5iYXNlNjQpcmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIGk9ImIiK3QucGFja2V0c1tlLnR5cGVdK2UuZGF0YS5kYXRhO3JldHVybiBuKGkpfShlLHIpO3ZhciBhPWRbZS50eXBlXTtyZXR1cm4gdm9pZCAwIT09ZS5kYXRhJiYoYSs9aT9sLmVuY29kZShTdHJpbmcoZS5kYXRhKSx7c3RyaWN0OiExfSk6U3RyaW5nKGUuZGF0YSkpLHIoIiIrYSl9LHQuZW5jb2RlQmFzZTY0UGFja2V0PWZ1bmN0aW9uKGUsbil7dmFyIGkscj0iYiIrdC5wYWNrZXRzW2UudHlwZV07aWYodm9pZCAwIT09bSYmZS5kYXRhIGluc3RhbmNlb2YgbSl7dmFyIG89bmV3IEZpbGVSZWFkZXI7cmV0dXJuIG8ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9by5yZXN1bHQuc3BsaXQoIiwiKVsxXTtuKHIrZSl9LG8ucmVhZEFzRGF0YVVSTChlLmRhdGEpfXRyeXtpPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheShlLmRhdGEpKX1jYXRjaCh0KXtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhKSxzPW5ldyBBcnJheShhLmxlbmd0aCksbD0wO2w8YS5sZW5ndGg7bCsrKXNbbF09YVtsXTtpPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKX1yZXR1cm4gcis9YnRvYShpKSxuKHIpfSx0LmRlY29kZVBhY2tldD1mdW5jdGlvbihlLG4saSl7aWYodm9pZCAwPT09ZSlyZXR1cm4gcDtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKCJiIj09PWUuY2hhckF0KDApKXJldHVybiB0LmRlY29kZUJhc2U2NFBhY2tldChlLnN1YnN0cigxKSxuKTtpZihpJiYhMT09PShlPWZ1bmN0aW9uKGUpe3RyeXtlPWwuZGVjb2RlKGUse3N0cmljdDohMX0pfWNhdGNoKGUpe3JldHVybiExfXJldHVybiBlfShlKSkpcmV0dXJuIHA7dmFyIHI9ZS5jaGFyQXQoMCk7cmV0dXJuIE51bWJlcihyKT09ciYmZltyXT9lLmxlbmd0aD4xP3t0eXBlOmZbcl0sZGF0YTplLnN1YnN0cmluZygxKX06e3R5cGU6ZltyXX06cH1yPW5ldyBVaW50OEFycmF5KGUpWzBdO3ZhciBvPWEoZSwxKTtyZXR1cm4gbSYmImJsb2IiPT09biYmKG89bmV3IG0oW29dKSkse3R5cGU6ZltyXSxkYXRhOm99fSx0LmRlY29kZUJhc2U2NFBhY2tldD1mdW5jdGlvbihlLHQpe3ZhciBuPWZbZS5jaGFyQXQoMCldO2lmKCFpKXJldHVybnt0eXBlOm4sZGF0YTp7YmFzZTY0OiEwLGRhdGE6ZS5zdWJzdHIoMSl9fTt2YXIgcj1pLmRlY29kZShlLnN1YnN0cigxKSk7cmV0dXJuImJsb2IiPT09dCYmbSYmKHI9bmV3IG0oW3JdKSkse3R5cGU6bixkYXRhOnJ9fSx0LmVuY29kZVBheWxvYWQ9ZnVuY3Rpb24oZSxuLGkpeyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCk7dmFyIHI9byhlKTtyZXR1cm4gbiYmcj9tJiYhaD90LmVuY29kZVBheWxvYWRBc0Jsb2IoZSxpKTp0LmVuY29kZVBheWxvYWRBc0FycmF5QnVmZmVyKGUsaSk6ZS5sZW5ndGg/dm9pZCBnKGUsKGZ1bmN0aW9uKGUsaSl7dC5lbmNvZGVQYWNrZXQoZSwhIXImJm4sITEsKGZ1bmN0aW9uKGUpe2kobnVsbCxmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGgrIjoiK2V9KGUpKX0pKX0pLChmdW5jdGlvbihlLHQpe3JldHVybiBpKHQuam9pbigiIikpfSkpOmkoIjA6Iil9LHQuZGVjb2RlUGF5bG9hZD1mdW5jdGlvbihlLG4saSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0LmRlY29kZVBheWxvYWRBc0JpbmFyeShlLG4saSk7dmFyIHI7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj1udWxsKSwiIj09PWUpcmV0dXJuIGkocCwwLDEpO2Zvcih2YXIgbyxhLHM9IiIsbD0wLGM9ZS5sZW5ndGg7bDxjO2wrKyl7dmFyIHU9ZS5jaGFyQXQobCk7aWYoIjoiPT09dSl7aWYoIiI9PT1zfHxzIT0obz1OdW1iZXIocykpKXJldHVybiBpKHAsMCwxKTtpZihzIT0oYT1lLnN1YnN0cihsKzEsbykpLmxlbmd0aClyZXR1cm4gaShwLDAsMSk7aWYoYS5sZW5ndGgpe2lmKHI9dC5kZWNvZGVQYWNrZXQoYSxuLCExKSxwLnR5cGU9PT1yLnR5cGUmJnAuZGF0YT09PXIuZGF0YSlyZXR1cm4gaShwLDAsMSk7aWYoITE9PT1pKHIsbCtvLGMpKXJldHVybn1sKz1vLHM9IiJ9ZWxzZSBzKz11fXJldHVybiIiIT09cz9pKHAsMCwxKTp2b2lkIDB9LHQuZW5jb2RlUGF5bG9hZEFzQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSxuKXtpZighZS5sZW5ndGgpcmV0dXJuIG4obmV3IEFycmF5QnVmZmVyKDApKTtnKGUsKGZ1bmN0aW9uKGUsbil7dC5lbmNvZGVQYWNrZXQoZSwhMCwhMCwoZnVuY3Rpb24oZSl7cmV0dXJuIG4obnVsbCxlKX0pKX0pLChmdW5jdGlvbihlLHQpe3ZhciBpPXQucmVkdWNlKChmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBlKyhuPSJzdHJpbmciPT10eXBlb2YgdD90Lmxlbmd0aDp0LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCkubGVuZ3RoK24rMn0pLDApLHI9bmV3IFVpbnQ4QXJyYXkoaSksbz0wO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PSJzdHJpbmciPT10eXBlb2YgZSxuPWU7aWYodCl7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDthKyspaVthXT1lLmNoYXJDb2RlQXQoYSk7bj1pLmJ1ZmZlcn1yW28rK109dD8wOjE7dmFyIHM9bi5ieXRlTGVuZ3RoLnRvU3RyaW5nKCk7Zm9yKGE9MDthPHMubGVuZ3RoO2ErKylyW28rK109cGFyc2VJbnQoc1thXSk7Zm9yKHJbbysrXT0yNTUsaT1uZXcgVWludDhBcnJheShuKSxhPTA7YTxpLmxlbmd0aDthKyspcltvKytdPWlbYV19KSksbihyLmJ1ZmZlcil9KSl9LHQuZW5jb2RlUGF5bG9hZEFzQmxvYj1mdW5jdGlvbihlLG4pe2coZSwoZnVuY3Rpb24oZSxuKXt0LmVuY29kZVBhY2tldChlLCEwLCEwLChmdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtpZih0WzBdPTEsInN0cmluZyI9PXR5cGVvZiBlKXtmb3IodmFyIGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoO3IrKylpW3JdPWUuY2hhckNvZGVBdChyKTtlPWkuYnVmZmVyLHRbMF09MH12YXIgbz0oZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2UuYnl0ZUxlbmd0aDplLnNpemUpLnRvU3RyaW5nKCksYT1uZXcgVWludDhBcnJheShvLmxlbmd0aCsxKTtmb3Iocj0wO3I8by5sZW5ndGg7cisrKWFbcl09cGFyc2VJbnQob1tyXSk7aWYoYVtvLmxlbmd0aF09MjU1LG0pe3ZhciBzPW5ldyBtKFt0LmJ1ZmZlcixhLmJ1ZmZlcixlXSk7bihudWxsLHMpfX0pKX0pLChmdW5jdGlvbihlLHQpe3JldHVybiBuKG5ldyBtKHQpKX0pKX0sdC5kZWNvZGVQYXlsb2FkQXNCaW5hcnk9ZnVuY3Rpb24oZSxuLGkpeyJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCk7Zm9yKHZhciByPWUsbz1bXTtyLmJ5dGVMZW5ndGg+MDspe2Zvcih2YXIgcz1uZXcgVWludDhBcnJheShyKSxsPTA9PT1zWzBdLGM9IiIsdT0xOzI1NSE9PXNbdV07dSsrKXtpZihjLmxlbmd0aD4zMTApcmV0dXJuIGkocCwwLDEpO2MrPXNbdV19cj1hKHIsMitjLmxlbmd0aCksYz1wYXJzZUludChjKTt2YXIgaD1hKHIsMCxjKTtpZihsKXRyeXtoPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheShoKSl9Y2F0Y2goZSl7dmFyIGQ9bmV3IFVpbnQ4QXJyYXkoaCk7Zm9yKGg9IiIsdT0wO3U8ZC5sZW5ndGg7dSsrKWgrPVN0cmluZy5mcm9tQ2hhckNvZGUoZFt1XSl9by5wdXNoKGgpLHI9YShyLGMpfXZhciBmPW8ubGVuZ3RoO28uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtpKHQuZGVjb2RlUGFja2V0KGUsbiwhMCkscixmKX0pKX19LGZ1bmN0aW9uKGUsdCl7dC5lbmNvZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHQubGVuZ3RoJiYodCs9IiYiKSx0Kz1lbmNvZGVVUklDb21wb25lbnQobikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChlW25dKSk7cmV0dXJuIHR9LHQuZGVjb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD17fSxuPWUuc3BsaXQoIiYiKSxpPTAscj1uLmxlbmd0aDtpPHI7aSsrKXt2YXIgbz1uW2ldLnNwbGl0KCI9Iik7dFtkZWNvZGVVUklDb21wb25lbnQob1swXSldPWRlY29kZVVSSUNvbXBvbmVudChvWzFdKX1yZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oKXt9O24ucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyBuLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigwKSgic29ja2V0LmlvLXBhcnNlciIpLHI9bigxKSxvPW4oMjgpLGE9big2KSxzPW4oMTEpO2Z1bmN0aW9uIGwoKXt9dC5wcm90b2NvbD00LHQudHlwZXM9WyJDT05ORUNUIiwiRElTQ09OTkVDVCIsIkVWRU5UIiwiQUNLIiwiRVJST1IiLCJCSU5BUllfRVZFTlQiLCJCSU5BUllfQUNLIl0sdC5DT05ORUNUPTAsdC5ESVNDT05ORUNUPTEsdC5FVkVOVD0yLHQuQUNLPTMsdC5FUlJPUj00LHQuQklOQVJZX0VWRU5UPTUsdC5CSU5BUllfQUNLPTYsdC5FbmNvZGVyPWwsdC5EZWNvZGVyPWg7dmFyIGM9dC5FUlJPUisnImVuY29kZSBlcnJvciInO2Z1bmN0aW9uIHUoZSl7dmFyIG49IiIrZS50eXBlO2lmKHQuQklOQVJZX0VWRU5UIT09ZS50eXBlJiZ0LkJJTkFSWV9BQ0shPT1lLnR5cGV8fChuKz1lLmF0dGFjaG1lbnRzKyItIiksZS5uc3AmJiIvIiE9PWUubnNwJiYobis9ZS5uc3ArIiwiKSxudWxsIT1lLmlkJiYobis9ZS5pZCksbnVsbCE9ZS5kYXRhKXt2YXIgcj1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWNhdGNoKGUpe3JldHVybiExfX0oZS5kYXRhKTtpZighMT09PXIpcmV0dXJuIGM7bis9cn1yZXR1cm4gaSgiZW5jb2RlZCAlaiBhcyAlcyIsZSxuKSxufWZ1bmN0aW9uIGgoKXt0aGlzLnJlY29uc3RydWN0b3I9bnVsbH1mdW5jdGlvbiBkKGUpe3RoaXMucmVjb25QYWNrPWUsdGhpcy5idWZmZXJzPVtdfWZ1bmN0aW9uIGYoZSl7cmV0dXJue3R5cGU6dC5FUlJPUixkYXRhOiJwYXJzZXIgZXJyb3I6ICIrZX19bC5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsbil7aSgiZW5jb2RpbmcgcGFja2V0ICVqIixlKSx0LkJJTkFSWV9FVkVOVD09PWUudHlwZXx8dC5CSU5BUllfQUNLPT09ZS50eXBlP2Z1bmN0aW9uKGUsdCl7by5yZW1vdmVCbG9icyhlLChmdW5jdGlvbihlKXt2YXIgbj1vLmRlY29uc3RydWN0UGFja2V0KGUpLGk9dShuLnBhY2tldCkscj1uLmJ1ZmZlcnM7ci51bnNoaWZ0KGkpLHQocil9KSl9KGUsbik6bihbdShlKV0pfSxyKGgucHJvdG90eXBlKSxoLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIG47aWYoInN0cmluZyI9PXR5cGVvZiBlKW49ZnVuY3Rpb24oZSl7dmFyIG49MCxyPXt0eXBlOk51bWJlcihlLmNoYXJBdCgwKSl9O2lmKG51bGw9PXQudHlwZXNbci50eXBlXSlyZXR1cm4gZigidW5rbm93biBwYWNrZXQgdHlwZSAiK3IudHlwZSk7aWYodC5CSU5BUllfRVZFTlQ9PT1yLnR5cGV8fHQuQklOQVJZX0FDSz09PXIudHlwZSl7Zm9yKHZhciBvPSIiOyItIiE9PWUuY2hhckF0KCsrbikmJihvKz1lLmNoYXJBdChuKSxuIT1lLmxlbmd0aCk7KTtpZihvIT1OdW1iZXIobyl8fCItIiE9PWUuY2hhckF0KG4pKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBhdHRhY2htZW50cyIpO3IuYXR0YWNobWVudHM9TnVtYmVyKG8pfWlmKCIvIj09PWUuY2hhckF0KG4rMSkpZm9yKHIubnNwPSIiOysrbjspe3ZhciBzPWUuY2hhckF0KG4pO2lmKCIsIj09PXMpYnJlYWs7aWYoci5uc3ArPXMsbj09PWUubGVuZ3RoKWJyZWFrfWVsc2Ugci5uc3A9Ii8iO3ZhciBsPWUuY2hhckF0KG4rMSk7aWYoIiIhPT1sJiZOdW1iZXIobCk9PWwpe2ZvcihyLmlkPSIiOysrbjspe3M9ZS5jaGFyQXQobik7aWYobnVsbD09c3x8TnVtYmVyKHMpIT1zKXstLW47YnJlYWt9aWYoci5pZCs9ZS5jaGFyQXQobiksbj09PWUubGVuZ3RoKWJyZWFrfXIuaWQ9TnVtYmVyKHIuaWQpfWlmKGUuY2hhckF0KCsrbikpe3ZhciBjPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChlKXtyZXR1cm4hMX19KGUuc3Vic3RyKG4pKSx1PSExIT09YyYmKHIudHlwZT09PXQuRVJST1J8fGEoYykpO2lmKCF1KXJldHVybiBmKCJpbnZhbGlkIHBheWxvYWQiKTtyLmRhdGE9Y31yZXR1cm4gaSgiZGVjb2RlZCAlcyBhcyAlaiIsZSxyKSxyfShlKSx0LkJJTkFSWV9FVkVOVD09PW4udHlwZXx8dC5CSU5BUllfQUNLPT09bi50eXBlPyh0aGlzLnJlY29uc3RydWN0b3I9bmV3IGQobiksMD09PXRoaXMucmVjb25zdHJ1Y3Rvci5yZWNvblBhY2suYXR0YWNobWVudHMmJnRoaXMuZW1pdCgiZGVjb2RlZCIsbikpOnRoaXMuZW1pdCgiZGVjb2RlZCIsbik7ZWxzZXtpZighcyhlKSYmIWUuYmFzZTY0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biB0eXBlOiAiK2UpO2lmKCF0aGlzLnJlY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJnb3QgYmluYXJ5IGRhdGEgd2hlbiBub3QgcmVjb25zdHJ1Y3RpbmcgYSBwYWNrZXQiKTsobj10aGlzLnJlY29uc3RydWN0b3IudGFrZUJpbmFyeURhdGEoZSkpJiYodGhpcy5yZWNvbnN0cnVjdG9yPW51bGwsdGhpcy5lbWl0KCJkZWNvZGVkIixuKSl9fSxoLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5yZWNvbnN0cnVjdG9yJiZ0aGlzLnJlY29uc3RydWN0b3IuZmluaXNoZWRSZWNvbnN0cnVjdGlvbigpfSxkLnByb3RvdHlwZS50YWtlQmluYXJ5RGF0YT1mdW5jdGlvbihlKXtpZih0aGlzLmJ1ZmZlcnMucHVzaChlKSx0aGlzLmJ1ZmZlcnMubGVuZ3RoPT09dGhpcy5yZWNvblBhY2suYXR0YWNobWVudHMpe3ZhciB0PW8ucmVjb25zdHJ1Y3RQYWNrZXQodGhpcy5yZWNvblBhY2ssdGhpcy5idWZmZXJzKTtyZXR1cm4gdGhpcy5maW5pc2hlZFJlY29uc3RydWN0aW9uKCksdH1yZXR1cm4gbnVsbH0sZC5wcm90b3R5cGUuZmluaXNoZWRSZWNvbnN0cnVjdGlvbj1mdW5jdGlvbigpe3RoaXMucmVjb25QYWNrPW51bGwsdGhpcy5idWZmZXJzPVtdfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09bi5jYWxsKGUpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCnZhciBpPW4oMjkpLHI9bigzMCksbz1uKDMxKTtmdW5jdGlvbiBhKCl7cmV0dXJuIGwuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gcyhlLHQpe2lmKGEoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiBsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz1sLnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyBsKHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIGwoZSx0LG4pe2lmKCEobC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgbCkpcmV0dXJuIG5ldyBsKGUsdCxuKTtpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGgodGhpcyxlKX1yZXR1cm4gYyh0aGlzLGUsdCxuKX1mdW5jdGlvbiBjKGUsdCxuLGkpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2Z1bmN0aW9uKGUsdCxuLGkpe2lmKHQuYnl0ZUxlbmd0aCxuPDB8fHQuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzIik7aWYodC5ieXRlTGVuZ3RoPG4rKGl8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzIik7cmV0dXJuIHQ9dm9pZCAwPT09biYmdm9pZCAwPT09aT9uZXcgVWludDhBcnJheSh0KTp2b2lkIDA9PT1pP25ldyBVaW50OEFycmF5KHQsbik6bmV3IFVpbnQ4QXJyYXkodCxuLGkpLGwuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT10KS5fX3Byb3RvX189bC5wcm90b3R5cGU6ZT1kKGUsdCksZX0oZSx0LG4saSk6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxuKXtpZigic3RyaW5nIj09dHlwZW9mIG4mJiIiIT09bnx8KG49InV0ZjgiKSwhbC5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoJyJlbmNvZGluZyIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBpPTB8cCh0LG4pLHI9KGU9cyhlLGkpKS53cml0ZSh0LG4pO3JldHVybiByIT09aSYmKGU9ZS5zbGljZSgwLHIpKSxlfShlLHQsbik6ZnVuY3Rpb24oZSx0KXtpZihsLmlzQnVmZmVyKHQpKXt2YXIgbj0wfGYodC5sZW5ndGgpO3JldHVybiAwPT09KGU9cyhlLG4pKS5sZW5ndGh8fHQuY29weShlLDAsMCxuKSxlfWlmKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fCJsZW5ndGgiaW4gdClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHwoaT10Lmxlbmd0aCkhPWk/cyhlLDApOmQoZSx0KTtpZigiQnVmZmVyIj09PXQudHlwZSYmbyh0LmRhdGEpKXJldHVybiBkKGUsdC5kYXRhKX12YXIgaTt0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuIil9KGUsdCl9ZnVuY3Rpb24gdShlKXtpZigibnVtYmVyIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIGgoZSx0KXtpZih1KHQpLGU9cyhlLHQ8MD8wOjB8Zih0KSksIWwuVFlQRURfQVJSQVlfU1VQUE9SVClmb3IodmFyIG49MDtuPHQ7KytuKWVbbl09MDtyZXR1cm4gZX1mdW5jdGlvbiBkKGUsdCl7dmFyIG49dC5sZW5ndGg8MD8wOjB8Zih0Lmxlbmd0aCk7ZT1zKGUsbik7Zm9yKHZhciBpPTA7aTxuO2krPTEpZVtpXT0yNTUmdFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBmKGUpe2lmKGU+PWEoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweCIrYSgpLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBwKGUsdCl7aWYobC5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyYmKEFycmF5QnVmZmVyLmlzVmlldyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSlyZXR1cm4gZS5ieXRlTGVuZ3RoOyJzdHJpbmciIT10eXBlb2YgZSYmKGU9IiIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKHQpe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIG47Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlIHZvaWQgMDpyZXR1cm4gRihlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKm47Y2FzZSJoZXgiOnJldHVybiBuPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFYoZSkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gRihlKS5sZW5ndGg7dD0oIiIrdCkudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBtKGUsdCxuKXt2YXIgaT1lW3RdO2VbdF09ZVtuXSxlW25dPWl9ZnVuY3Rpb24gZyhlLHQsbixpLHIpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIG4/KGk9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPXI/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihyKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIXIpcmV0dXJuLTE7bj0wfWlmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bC5mcm9tKHQsaSkpLGwuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTp2KGUsdCxuLGkscik7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0Jj0yNTUsbC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9yP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQsbik6dihlLFt0XSxuLGkscik7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdihlLHQsbixpLHIpe3ZhciBvLGE9MSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYodm9pZCAwIT09aSYmKCJ1Y3MyIj09PShpPVN0cmluZyhpKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PWl8fCJ1dGYxNmxlIj09PWl8fCJ1dGYtMTZsZSI9PT1pKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89MixsLz0yLG4vPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYocil7dmFyIHU9LTE7Zm9yKG89bjtvPHM7bysrKWlmKGMoZSxvKT09PWModCwtMT09PXU/MDpvLXUpKXtpZigtMT09PXUmJih1PW8pLG8tdSsxPT09bClyZXR1cm4gdSphfWVsc2UtMSE9PXUmJihvLT1vLXUpLHU9LTF9ZWxzZSBmb3IobitsPnMmJihuPXMtbCksbz1uO28+PTA7by0tKXtmb3IodmFyIGg9ITAsZD0wO2Q8bDtkKyspaWYoYyhlLG8rZCkhPT1jKHQsZCkpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiB5KGUsdCxuLGkpe249TnVtYmVyKG4pfHwwO3ZhciByPWUubGVuZ3RoLW47aT8oaT1OdW1iZXIoaSkpPnImJihpPXIpOmk9cjt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPTApdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBoZXggc3RyaW5nIik7aT5vLzImJihpPW8vMik7Zm9yKHZhciBhPTA7YTxpOysrYSl7dmFyIHM9cGFyc2VJbnQodC5zdWJzdHIoMiphLDIpLDE2KTtpZihpc05hTihzKSlyZXR1cm4gYTtlW24rYV09c31yZXR1cm4gYX1mdW5jdGlvbiBiKGUsdCxuLGkpe3JldHVybiBqKEYodCxlLmxlbmd0aC1uKSxlLG4saSl9ZnVuY3Rpb24geChlLHQsbixpKXtyZXR1cm4gaihmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wO248ZS5sZW5ndGg7KytuKXQucHVzaCgyNTUmZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0odCksZSxuLGkpfWZ1bmN0aW9uIF8oZSx0LG4saSl7cmV0dXJuIHgoZSx0LG4saSl9ZnVuY3Rpb24gdyhlLHQsbixpKXtyZXR1cm4gaihWKHQpLGUsbixpKX1mdW5jdGlvbiBTKGUsdCxuLGkpe3JldHVybiBqKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLGkscixvPVtdLGE9MDthPGUubGVuZ3RoJiYhKCh0LT0yKTwwKTsrK2Epbj1lLmNoYXJDb2RlQXQoYSksaT1uPj44LHI9biUyNTYsby5wdXNoKHIpLG8ucHVzaChpKTtyZXR1cm4gb30odCxlLmxlbmd0aC1uKSxlLG4saSl9ZnVuY3Rpb24gQyhlLHQsbil7cmV0dXJuIDA9PT10JiZuPT09ZS5sZW5ndGg/aS5mcm9tQnl0ZUFycmF5KGUpOmkuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHQsbikpfWZ1bmN0aW9uIGsoZSx0LG4pe249TWF0aC5taW4oZS5sZW5ndGgsbik7Zm9yKHZhciBpPVtdLHI9dDtyPG47KXt2YXIgbyxhLHMsbCxjPWVbcl0sdT1udWxsLGg9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihyK2g8PW4pc3dpdGNoKGgpe2Nhc2UgMTpjPDEyOCYmKHU9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYobz1lW3IrMV0pKSYmKGw9KDMxJmMpPDw2fDYzJm8pPjEyNyYmKHU9bCk7YnJlYWs7Y2FzZSAzOm89ZVtyKzFdLGE9ZVtyKzJdLDEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJmEpJiYobD0oMTUmYyk8PDEyfCg2MyZvKTw8Nnw2MyZhKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJih1PWwpO2JyZWFrO2Nhc2UgNDpvPWVbcisxXSxhPWVbcisyXSxzPWVbciszXSwxMjg9PSgxOTImbykmJjEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJnMpJiYobD0oMTUmYyk8PDE4fCg2MyZvKTw8MTJ8KDYzJmEpPDw2fDYzJnMpPjY1NTM1JiZsPDExMTQxMTImJih1PWwpfW51bGw9PT11Pyh1PTY1NTMzLGg9MSk6dT42NTUzNSYmKHUtPTY1NTM2LGkucHVzaCh1Pj4+MTAmMTAyM3w1NTI5NiksdT01NjMyMHwxMDIzJnUpLGkucHVzaCh1KSxyKz1ofXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmxlbmd0aDtpZih0PD1UKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlKTtmb3IodmFyIG49IiIsaT0wO2k8dDspbis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShpLGkrPVQpKTtyZXR1cm4gbn0oaSl9dC5CdWZmZXI9bCx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuK2UhPWUmJihlPTApLGwuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLGwuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmImZ1bmN0aW9uIj09dHlwZW9mIGUuc3ViYXJyYXkmJjA9PT1lLnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCksdC5rTWF4TGVuZ3RoPWEoKSxsLnBvb2xTaXplPTgxOTIsbC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189bC5wcm90b3R5cGUsZX0sbC5mcm9tPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYyhudWxsLGUsdCxuKX0sbC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYobC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLGwuX19wcm90b19fPVVpbnQ4QXJyYXksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZsW1N5bWJvbC5zcGVjaWVzXT09PWwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH0pKSxsLmFsbG9jPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIHUodCksdDw9MD9zKGUsdCk6dm9pZCAwIT09bj8ic3RyaW5nIj09dHlwZW9mIGk/cyhlLHQpLmZpbGwobixpKTpzKGUsdCkuZmlsbChuKTpzKGUsdCl9KG51bGwsZSx0LG4pfSxsLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBoKG51bGwsZSl9LGwuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBoKG51bGwsZSl9LGwuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSxsLmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighbC5pc0J1ZmZlcihlKXx8IWwuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLHI9MCxvPU1hdGgubWluKG4saSk7cjxvOysrcilpZihlW3JdIT09dFtyXSl7bj1lW3JdLGk9dFtyXTticmVha31yZXR1cm4gbjxpPy0xOmk8bj8xOjB9LGwuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sbC5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighbyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBsLmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxuPTA7bjxlLmxlbmd0aDsrK24pdCs9ZVtuXS5sZW5ndGg7dmFyIGk9bC5hbGxvY1Vuc2FmZSh0KSxyPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGE9ZVtuXTtpZighbC5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KGkscikscis9YS5sZW5ndGh9cmV0dXJuIGl9LGwuYnl0ZUxlbmd0aD1wLGwucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxsLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTIpbSh0aGlzLHQsdCsxKTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz00KW0odGhpcyx0LHQrMyksbSh0aGlzLHQrMSx0KzIpO3JldHVybiB0aGlzfSxsLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpbSh0aGlzLHQsdCs3KSxtKHRoaXMsdCsxLHQrNiksbSh0aGlzLHQrMix0KzUpLG0odGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9rKHRoaXMsMCxlKTpmdW5jdGlvbihlLHQsbil7dmFyIGk9ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PW58fG4+dGhpcy5sZW5ndGgpJiYobj10aGlzLmxlbmd0aCksbjw9MClyZXR1cm4iIjtpZigobj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBJKHRoaXMsdCxuKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBrKHRoaXMsdCxuKTtjYXNlImFzY2lpIjpyZXR1cm4gTSh0aGlzLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gRSh0aGlzLHQsbik7Y2FzZSJiYXNlNjQiOnJldHVybiBDKHRoaXMsdCxuKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEQodGhpcyx0LG4pO2RlZmF1bHQ6aWYoaSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksaT0hMH19LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sbC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFsLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT1sLmNvbXBhcmUodGhpcyxlKX0sbC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLG49dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLG4pLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5uJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LGwucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LG4saSxyKXtpZighbC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09biYmKG49ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1pJiYoaT0wKSx2b2lkIDA9PT1yJiYocj10aGlzLmxlbmd0aCksdDwwfHxuPmUubGVuZ3RofHxpPDB8fHI+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKGk+PXImJnQ+PW4pcmV0dXJuIDA7aWYoaT49cilyZXR1cm4tMTtpZih0Pj1uKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0ocj4+Pj0wKS0oaT4+Pj0wKSxhPShuPj4+PTApLSh0Pj4+PTApLHM9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UoaSxyKSx1PWUuc2xpY2UodCxuKSxoPTA7aDxzOysraClpZihjW2hdIT09dVtoXSl7bz1jW2hdLGE9dVtoXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LGwucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQsbil9LGwucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBnKHRoaXMsZSx0LG4sITApfSxsLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGcodGhpcyxlLHQsbiwhMSl9LGwucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKHZvaWQgMD09PXQpaT0idXRmOCIsbj10aGlzLmxlbmd0aCx0PTA7ZWxzZSBpZih2b2lkIDA9PT1uJiYic3RyaW5nIj09dHlwZW9mIHQpaT10LG49dGhpcy5sZW5ndGgsdD0wO2Vsc2V7aWYoIWlzRmluaXRlKHQpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTt0fD0wLGlzRmluaXRlKG4pPyhufD0wLHZvaWQgMD09PWkmJihpPSJ1dGY4IikpOihpPW4sbj12b2lkIDApfXZhciByPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PW58fG4+cikmJihuPXIpLGUubGVuZ3RoPjAmJihuPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7aXx8KGk9InV0ZjgiKTtmb3IodmFyIG89ITE7Oylzd2l0Y2goaSl7Y2FzZSJoZXgiOnJldHVybiB5KHRoaXMsZSx0LG4pO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGIodGhpcyxlLHQsbik7Y2FzZSJhc2NpaSI6cmV0dXJuIHgodGhpcyxlLHQsbik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gXyh0aGlzLGUsdCxuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHcodGhpcyxlLHQsbik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBTKHRoaXMsZSx0LG4pO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2kpO2k9KCIiK2kpLnRvTG93ZXJDYXNlKCksbz0hMH19LGwucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIFQ9NDA5NjtmdW5jdGlvbiBNKGUsdCxuKXt2YXIgaT0iIjtuPU1hdGgubWluKGUubGVuZ3RoLG4pO2Zvcih2YXIgcj10O3I8bjsrK3IpaSs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmZVtyXSk7cmV0dXJuIGl9ZnVuY3Rpb24gRShlLHQsbil7dmFyIGk9IiI7bj1NYXRoLm1pbihlLmxlbmd0aCxuKTtmb3IodmFyIHI9dDtyPG47KytyKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIGl9ZnVuY3Rpb24gSShlLHQsbil7dmFyIGk9ZS5sZW5ndGg7KCF0fHx0PDApJiYodD0wKSwoIW58fG48MHx8bj5pKSYmKG49aSk7Zm9yKHZhciByPSIiLG89dDtvPG47KytvKXIrPUIoZVtvXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gRChlLHQsbil7Zm9yKHZhciBpPWUuc2xpY2UodCxuKSxyPSIiLG89MDtvPGkubGVuZ3RoO28rPTIpcis9U3RyaW5nLmZyb21DaGFyQ29kZShpW29dKzI1NippW28rMV0pO3JldHVybiByfWZ1bmN0aW9uIEEoZSx0LG4pe2lmKGUlMSE9MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihlK3Q+bil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIE8oZSx0LG4saSxyLG8pe2lmKCFsLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZih0PnJ8fHQ8byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobitpPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKGUsdCxuLGkpe3Q8MCYmKHQ9NjU1MzUrdCsxKTtmb3IodmFyIHI9MCxvPU1hdGgubWluKGUubGVuZ3RoLW4sMik7cjxvOysrcillW24rcl09KHQmMjU1PDw4KihpP3I6MS1yKSk+Pj44KihpP3I6MS1yKX1mdW5jdGlvbiBMKGUsdCxuLGkpe3Q8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpO2Zvcih2YXIgcj0wLG89TWF0aC5taW4oZS5sZW5ndGgtbiw0KTtyPG87KytyKWVbbityXT10Pj4+OCooaT9yOjMtcikmMjU1fWZ1bmN0aW9uIE4oZSx0LG4saSxyLG8pe2lmKG4raT5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBSKGUsdCxuLGksbyl7cmV0dXJuIG98fE4oZSwwLG4sNCksci53cml0ZShlLHQsbixpLDIzLDQpLG4rNH1mdW5jdGlvbiAkKGUsdCxuLGksbyl7cmV0dXJuIG98fE4oZSwwLG4sOCksci53cml0ZShlLHQsbixpLDUyLDgpLG4rOH1sLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHQpe3ZhciBuLGk9dGhpcy5sZW5ndGg7aWYoKGU9fn5lKTwwPyhlKz1pKTwwJiYoZT0wKTplPmkmJihlPWkpLCh0PXZvaWQgMD09PXQ/aTp+fnQpPDA/KHQrPWkpPDAmJih0PTApOnQ+aSYmKHQ9aSksdDxlJiYodD1lKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQpKG49dGhpcy5zdWJhcnJheShlLHQpKS5fX3Byb3RvX189bC5wcm90b3R5cGU7ZWxzZXt2YXIgcj10LWU7bj1uZXcgbChyLHZvaWQgMCk7Zm9yKHZhciBvPTA7bzxyOysrbyluW29dPXRoaXNbbytlXX1yZXR1cm4gbn0sbC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihlLHQsbil7ZXw9MCx0fD0wLG58fEEoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9dGhpc1tlXSxyPTEsbz0wOysrbzx0JiYocio9MjU2KTspaSs9dGhpc1tlK29dKnI7cmV0dXJuIGl9LGwucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPXRoaXNbZSstLXRdLHI9MTt0PjAmJihyKj0yNTYpOylpKz10aGlzW2UrLS10XSpyO3JldHVybiBpfSxsLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QShlLDEsdGhpcy5sZW5ndGgpLHRoaXNbZV19LGwucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh9LGwucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LGwucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBKGUsNCx0aGlzLmxlbmd0aCksKHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbZSszXX0sbC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEEoZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2VdKyh0aGlzW2UrMV08PDE2fHRoaXNbZSsyXTw8OHx0aGlzW2UrM10pfSxsLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oZSx0LG4pe2V8PTAsdHw9MCxufHxBKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPXRoaXNbZV0scj0xLG89MDsrK288dCYmKHIqPTI1Nik7KWkrPXRoaXNbZStvXSpyO3JldHVybiBpPj0ocio9MTI4KSYmKGktPU1hdGgucG93KDIsOCp0KSksaX0sbC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxuKXtlfD0wLHR8PTAsbnx8QShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgaT10LHI9MSxvPXRoaXNbZSstLWldO2k+MCYmKHIqPTI1Nik7KW8rPXRoaXNbZSstLWldKnI7cmV0dXJuIG8+PShyKj0xMjgpJiYoby09TWF0aC5wb3coMiw4KnQpKSxvfSxsLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBKGUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbZV0/LTEqKDI1NS10aGlzW2VdKzEpOnRoaXNbZV19LGwucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7dHx8QShlLDIsdGhpcy5sZW5ndGgpO3ZhciBuPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZuPzQyOTQ5MDE3NjB8bjpufSxsLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe3R8fEEoZSwyLHRoaXMubGVuZ3RoKTt2YXIgbj10aGlzW2UrMV18dGhpc1tlXTw8ODtyZXR1cm4gMzI3Njgmbj80Mjk0OTAxNzYwfG46bn0sbC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV18dGhpc1tlKzFdPDw4fHRoaXNbZSsyXTw8MTZ8dGhpc1tlKzNdPDwyNH0sbC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0sbC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QShlLDQsdGhpcy5sZW5ndGgpLHIucmVhZCh0aGlzLGUsITAsMjMsNCl9LGwucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fEEoZSw0LHRoaXMubGVuZ3RoKSxyLnJlYWQodGhpcyxlLCExLDIzLDQpfSxsLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8QShlLDgsdGhpcy5sZW5ndGgpLHIucmVhZCh0aGlzLGUsITAsNTIsOCl9LGwucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxBKGUsOCx0aGlzLmxlbmd0aCksci5yZWFkKHRoaXMsZSwhMSw1Miw4KX0sbC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oZSx0LG4saSl7ZT0rZSx0fD0wLG58PTAsaXx8Tyh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciByPTEsbz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYocio9MjU2KTspdGhpc1t0K29dPWUvciYyNTU7cmV0dXJuIHQrbn0sbC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oZSx0LG4saSl7ZT0rZSx0fD0wLG58PTAsaXx8Tyh0aGlzLGUsdCxuLE1hdGgucG93KDIsOCpuKS0xLDApO3ZhciByPW4tMSxvPTE7Zm9yKHRoaXNbdCtyXT0yNTUmZTstLXI+PTAmJihvKj0yNTYpOyl0aGlzW3Qrcl09ZS9vJjI1NTtyZXR1cm4gdCtufSxsLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fE8odGhpcyxlLHQsMSwyNTUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sbC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxPKHRoaXMsZSx0LDIsNjU1MzUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6UCh0aGlzLGUsdCwhMCksdCsyfSxsLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fE8odGhpcyxlLHQsMiw2NTUzNSwwKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpQKHRoaXMsZSx0LCExKSx0KzJ9LGwucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Tyh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkwodGhpcyxlLHQsITApLHQrNH0sbC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxPKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6TCh0aGlzLGUsdCwhMSksdCs0fSxsLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKGU9K2UsdHw9MCwhaSl7dmFyIHI9TWF0aC5wb3coMiw4Km4tMSk7Tyh0aGlzLGUsdCxuLHItMSwtcil9dmFyIG89MCxhPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysrbzxuJiYoYSo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtvLTFdJiYocz0xKSx0aGlzW3Qrb109KGUvYT4+MCktcyYyNTU7cmV0dXJuIHQrbn0sbC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQsbixpKXtpZihlPStlLHR8PTAsIWkpe3ZhciByPU1hdGgucG93KDIsOCpuLTEpO08odGhpcyxlLHQsbixyLTEsLXIpfXZhciBvPW4tMSxhPTEscz0wO2Zvcih0aGlzW3Qrb109MjU1JmU7LS1vPj0wJiYoYSo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtvKzFdJiYocz0xKSx0aGlzW3Qrb109KGUvYT4+MCktcyYyNTU7cmV0dXJuIHQrbn0sbC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT0rZSx0fD0wLG58fE8odGhpcyxlLHQsMSwxMjcsLTEyOCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxsLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Tyh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6UCh0aGlzLGUsdCwhMCksdCsyfSxsLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Tyh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6UCh0aGlzLGUsdCwhMSksdCsyfSxsLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPStlLHR8PTAsbnx8Tyh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGwuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpMKHRoaXMsZSx0LCEwKSx0KzR9LGwucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGU9K2UsdHw9MCxufHxPKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkwodGhpcyxlLHQsITEpLHQrNH0sbC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUih0aGlzLGUsdCwhMCxuKX0sbC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUih0aGlzLGUsdCwhMSxuKX0sbC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuICQodGhpcyxlLHQsITAsbil9LGwucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAkKHRoaXMsZSx0LCExLG4pfSxsLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxuLGkpe2lmKG58fChuPTApLGl8fDA9PT1pfHwoaT10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxpPjAmJmk8biYmKGk9biksaT09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYobjwwfHxuPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKGk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtpPnRoaXMubGVuZ3RoJiYoaT10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxpLW4mJihpPWUubGVuZ3RoLXQrbik7dmFyIHIsbz1pLW47aWYodGhpcz09PWUmJm48dCYmdDxpKWZvcihyPW8tMTtyPj0wOy0tcillW3IrdF09dGhpc1tyK25dO2Vsc2UgaWYobzwxZTN8fCFsLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHI9MDtyPG87KytyKWVbcit0XT10aGlzW3Irbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK28pLHQpO3JldHVybiBvfSxsLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxuLGkpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhpPXQsdD0wLG49dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbiYmKGk9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciByPWUuY2hhckNvZGVBdCgwKTtyPDI1NiYmKGU9cil9aWYodm9pZCAwIT09aSYmInN0cmluZyIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIGkmJiFsLmlzRW5jb2RpbmcoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitpKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKG48PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKG89dDtvPG47KytvKXRoaXNbb109ZTtlbHNle3ZhciBhPWwuaXNCdWZmZXIoZSk/ZTpGKG5ldyBsKGUsaSkudG9TdHJpbmcoKSkscz1hLmxlbmd0aDtmb3Iobz0wO288bi10Oysrbyl0aGlzW28rdF09YVtvJXNdfXJldHVybiB0aGlzfTt2YXIgej0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBCKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBGKGUsdCl7dmFyIG47dD10fHwxLzA7Zm9yKHZhciBpPWUubGVuZ3RoLHI9bnVsbCxvPVtdLGE9MDthPGk7KythKXtpZigobj1lLmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighcil7aWYobj41NjMxOSl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGErMT09PWkpeyh0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1yPW47Y29udGludWV9aWYobjw1NjMyMCl7KHQtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLHI9bjtjb250aW51ZX1uPTY1NTM2KyhyLTU1Mjk2PDwxMHxuLTU2MzIwKX1lbHNlIHImJih0LT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihyPW51bGwsbjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO28ucHVzaChuKX1lbHNlIGlmKG48MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7by5wdXNoKG4+PjZ8MTkyLDYzJm58MTI4KX1lbHNlIGlmKG48NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO28ucHVzaChuPj4xMnwyMjQsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfWVsc2V7aWYoIShuPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7by5wdXNoKG4+PjE4fDI0MCxuPj4xMiY2M3wxMjgsbj4+NiY2M3wxMjgsNjMmbnwxMjgpfX1yZXR1cm4gb31mdW5jdGlvbiBWKGUpe3JldHVybiBpLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoeiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24gaihlLHQsbixpKXtmb3IodmFyIHI9MDtyPGkmJiEocituPj10Lmxlbmd0aHx8cj49ZS5sZW5ndGgpOysrcil0W3Irbl09ZVtyXTtyZXR1cm4gcn19KS5jYWxsKHRoaXMsbigxMikpfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigzNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWUueGRvbWFpbixuPWUueHNjaGVtZSxyPWUuZW5hYmxlc1hEUjt0cnl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBYTUxIdHRwUmVxdWVzdCYmKCF0fHxpKSlyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe310cnl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBYRG9tYWluUmVxdWVzdCYmIW4mJnIpcmV0dXJuIG5ldyBYRG9tYWluUmVxdWVzdH1jYXRjaChlKXt9aWYoIXQpdHJ5e3JldHVybiBuZXcoc2VsZltbIkFjdGl2ZSJdLmNvbmNhdCgiT2JqZWN0Iikuam9pbigiWCIpXSkoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goZSl7fX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDIpLHI9bigxKTtmdW5jdGlvbiBvKGUpe3RoaXMucGF0aD1lLnBhdGgsdGhpcy5ob3N0bmFtZT1lLmhvc3RuYW1lLHRoaXMucG9ydD1lLnBvcnQsdGhpcy5zZWN1cmU9ZS5zZWN1cmUsdGhpcy5xdWVyeT1lLnF1ZXJ5LHRoaXMudGltZXN0YW1wUGFyYW09ZS50aW1lc3RhbXBQYXJhbSx0aGlzLnRpbWVzdGFtcFJlcXVlc3RzPWUudGltZXN0YW1wUmVxdWVzdHMsdGhpcy5yZWFkeVN0YXRlPSIiLHRoaXMuYWdlbnQ9ZS5hZ2VudHx8ITEsdGhpcy5zb2NrZXQ9ZS5zb2NrZXQsdGhpcy5lbmFibGVzWERSPWUuZW5hYmxlc1hEUix0aGlzLnBmeD1lLnBmeCx0aGlzLmtleT1lLmtleSx0aGlzLnBhc3NwaHJhc2U9ZS5wYXNzcGhyYXNlLHRoaXMuY2VydD1lLmNlcnQsdGhpcy5jYT1lLmNhLHRoaXMuY2lwaGVycz1lLmNpcGhlcnMsdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ9ZS5yZWplY3RVbmF1dGhvcml6ZWQsdGhpcy5mb3JjZU5vZGU9ZS5mb3JjZU5vZGUsdGhpcy5pc1JlYWN0TmF0aXZlPWUuaXNSZWFjdE5hdGl2ZSx0aGlzLmV4dHJhSGVhZGVycz1lLmV4dHJhSGVhZGVycyx0aGlzLmxvY2FsQWRkcmVzcz1lLmxvY2FsQWRkcmVzc31lLmV4cG9ydHM9byxyKG8ucHJvdG90eXBlKSxvLnByb3RvdHlwZS5vbkVycm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IEVycm9yKGUpO3JldHVybiBuLnR5cGU9IlRyYW5zcG9ydEVycm9yIixuLmRlc2NyaXB0aW9uPXQsdGhpcy5lbWl0KCJlcnJvciIsbiksdGhpc30sby5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3JldHVybiJjbG9zZWQiIT09dGhpcy5yZWFkeVN0YXRlJiYiIiE9PXRoaXMucmVhZHlTdGF0ZXx8KHRoaXMucmVhZHlTdGF0ZT0ib3BlbmluZyIsdGhpcy5kb09wZW4oKSksdGhpc30sby5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXtyZXR1cm4ib3BlbmluZyIhPT10aGlzLnJlYWR5U3RhdGUmJiJvcGVuIiE9PXRoaXMucmVhZHlTdGF0ZXx8KHRoaXMuZG9DbG9zZSgpLHRoaXMub25DbG9zZSgpKSx0aGlzfSxvLnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUpe2lmKCJvcGVuIiE9PXRoaXMucmVhZHlTdGF0ZSl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zcG9ydCBub3Qgb3BlbiIpO3RoaXMud3JpdGUoZSl9LG8ucHJvdG90eXBlLm9uT3Blbj1mdW5jdGlvbigpe3RoaXMucmVhZHlTdGF0ZT0ib3BlbiIsdGhpcy53cml0YWJsZT0hMCx0aGlzLmVtaXQoIm9wZW4iKX0sby5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWkuZGVjb2RlUGFja2V0KGUsdGhpcy5zb2NrZXQuYmluYXJ5VHlwZSk7dGhpcy5vblBhY2tldCh0KX0sby5wcm90b3R5cGUub25QYWNrZXQ9ZnVuY3Rpb24oZSl7dGhpcy5lbWl0KCJwYWNrZXQiLGUpfSxvLnByb3RvdHlwZS5vbkNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5yZWFkeVN0YXRlPSJjbG9zZWQiLHRoaXMuZW1pdCgiY2xvc2UiKX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49L14oPzooPyFbXjpAXSs6W146QFwvXSpAKShodHRwfGh0dHBzfHdzfHdzcyk6XC9cLyk/KCg/OigoW146QF0qKSg/OjooW146QF0qKSk/KT9AKT8oKD86W2EtZjAtOV17MCw0fTopezIsN31bYS1mMC05XXswLDR9fFteOlwvPyNdKikoPzo6KFxkKikpPykoKChcLyg/OltePyNdKD8hW14/I1wvXSpcLltePyNcLy5dKyg/Ols/I118JCkpKSpcLz8pPyhbXj8jXC9dKikpKD86XD8oW14jXSopKT8oPzojKC4qKSk/KS8saT1bInNvdXJjZSIsInByb3RvY29sIiwiYXV0aG9yaXR5IiwidXNlckluZm8iLCJ1c2VyIiwicGFzc3dvcmQiLCJob3N0IiwicG9ydCIsInJlbGF0aXZlIiwicGF0aCIsImRpcmVjdG9yeSIsImZpbGUiLCJxdWVyeSIsImFuY2hvciJdO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLHI9ZS5pbmRleE9mKCJbIiksbz1lLmluZGV4T2YoIl0iKTstMSE9ciYmLTEhPW8mJihlPWUuc3Vic3RyaW5nKDAscikrZS5zdWJzdHJpbmcocixvKS5yZXBsYWNlKC86L2csIjsiKStlLnN1YnN0cmluZyhvLGUubGVuZ3RoKSk7Zm9yKHZhciBhPW4uZXhlYyhlfHwiIikscz17fSxsPTE0O2wtLTspc1tpW2xdXT1hW2xdfHwiIjtyZXR1cm4tMSE9ciYmLTEhPW8mJihzLnNvdXJjZT10LHMuaG9zdD1zLmhvc3Quc3Vic3RyaW5nKDEscy5ob3N0Lmxlbmd0aC0xKS5yZXBsYWNlKC87L2csIjoiKSxzLmF1dGhvcml0eT1zLmF1dGhvcml0eS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpLnJlcGxhY2UoLzsvZywiOiIpLHMuaXB2NnVyaT0hMCksc319LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuJiZ0LmlzQnVmZmVyKGUpfHxpJiYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxyKGUpKX07dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmlzQnVmZmVyLGk9ImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLHI9ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6ZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn19KS5jYWxsKHRoaXMsbig3KS5CdWZmZXIpfSxmdW5jdGlvbihlLHQpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaChlKXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzIpLHI9bigxOSksbz1uKDEpLGE9big1KSxzPW4oMjApLGw9bigyMSksYz1uKDApKCJzb2NrZXQuaW8tY2xpZW50Om1hbmFnZXIiKSx1PW4oMTgpLGg9big0NiksZD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGYoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBmKSlyZXR1cm4gbmV3IGYoZSx0KTtlJiYib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLCh0PXR8fHt9KS5wYXRoPXQucGF0aHx8Ii9zb2NrZXQuaW8iLHRoaXMubnNwcz17fSx0aGlzLnN1YnM9W10sdGhpcy5vcHRzPXQsdGhpcy5yZWNvbm5lY3Rpb24oITEhPT10LnJlY29ubmVjdGlvbiksdGhpcy5yZWNvbm5lY3Rpb25BdHRlbXB0cyh0LnJlY29ubmVjdGlvbkF0dGVtcHRzfHwxLzApLHRoaXMucmVjb25uZWN0aW9uRGVsYXkodC5yZWNvbm5lY3Rpb25EZWxheXx8MWUzKSx0aGlzLnJlY29ubmVjdGlvbkRlbGF5TWF4KHQucmVjb25uZWN0aW9uRGVsYXlNYXh8fDVlMyksdGhpcy5yYW5kb21pemF0aW9uRmFjdG9yKHQucmFuZG9taXphdGlvbkZhY3Rvcnx8LjUpLHRoaXMuYmFja29mZj1uZXcgaCh7bWluOnRoaXMucmVjb25uZWN0aW9uRGVsYXkoKSxtYXg6dGhpcy5yZWNvbm5lY3Rpb25EZWxheU1heCgpLGppdHRlcjp0aGlzLnJhbmRvbWl6YXRpb25GYWN0b3IoKX0pLHRoaXMudGltZW91dChudWxsPT10LnRpbWVvdXQ/MmU0OnQudGltZW91dCksdGhpcy5yZWFkeVN0YXRlPSJjbG9zZWQiLHRoaXMudXJpPWUsdGhpcy5jb25uZWN0aW5nPVtdLHRoaXMubGFzdFBpbmc9bnVsbCx0aGlzLmVuY29kaW5nPSExLHRoaXMucGFja2V0QnVmZmVyPVtdO3ZhciBuPXQucGFyc2VyfHxhO3RoaXMuZW5jb2Rlcj1uZXcgbi5FbmNvZGVyLHRoaXMuZGVjb2Rlcj1uZXcgbi5EZWNvZGVyLHRoaXMuYXV0b0Nvbm5lY3Q9ITEhPT10LmF1dG9Db25uZWN0LHRoaXMuYXV0b0Nvbm5lY3QmJnRoaXMub3BlbigpfWUuZXhwb3J0cz1mLGYucHJvdG90eXBlLmVtaXRBbGw9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5lbWl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLm5zcHMpZC5jYWxsKHRoaXMubnNwcyxlKSYmdGhpcy5uc3BzW2VdLmVtaXQuYXBwbHkodGhpcy5uc3BzW2VdLGFyZ3VtZW50cyl9LGYucHJvdG90eXBlLnVwZGF0ZVNvY2tldElkcz1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLm5zcHMpZC5jYWxsKHRoaXMubnNwcyxlKSYmKHRoaXMubnNwc1tlXS5pZD10aGlzLmdlbmVyYXRlSWQoZSkpfSxmLnByb3RvdHlwZS5nZW5lcmF0ZUlkPWZ1bmN0aW9uKGUpe3JldHVybigiLyI9PT1lPyIiOmUrIiMiKSt0aGlzLmVuZ2luZS5pZH0sbyhmLnByb3RvdHlwZSksZi5wcm90b3R5cGUucmVjb25uZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9yZWNvbm5lY3Rpb249ISFlLHRoaXMpOnRoaXMuX3JlY29ubmVjdGlvbn0sZi5wcm90b3R5cGUucmVjb25uZWN0aW9uQXR0ZW1wdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzPWUsdGhpcyk6dGhpcy5fcmVjb25uZWN0aW9uQXR0ZW1wdHN9LGYucHJvdG90eXBlLnJlY29ubmVjdGlvbkRlbGF5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9yZWNvbm5lY3Rpb25EZWxheT1lLHRoaXMuYmFja29mZiYmdGhpcy5iYWNrb2ZmLnNldE1pbihlKSx0aGlzKTp0aGlzLl9yZWNvbm5lY3Rpb25EZWxheX0sZi5wcm90b3R5cGUucmFuZG9taXphdGlvbkZhY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5fcmFuZG9taXphdGlvbkZhY3Rvcj1lLHRoaXMuYmFja29mZiYmdGhpcy5iYWNrb2ZmLnNldEppdHRlcihlKSx0aGlzKTp0aGlzLl9yYW5kb21pemF0aW9uRmFjdG9yfSxmLnByb3RvdHlwZS5yZWNvbm5lY3Rpb25EZWxheU1heD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5fcmVjb25uZWN0aW9uRGVsYXlNYXg9ZSx0aGlzLmJhY2tvZmYmJnRoaXMuYmFja29mZi5zZXRNYXgoZSksdGhpcyk6dGhpcy5fcmVjb25uZWN0aW9uRGVsYXlNYXh9LGYucHJvdG90eXBlLnRpbWVvdXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3RpbWVvdXQ9ZSx0aGlzKTp0aGlzLl90aW1lb3V0fSxmLnByb3RvdHlwZS5tYXliZVJlY29ubmVjdE9uT3Blbj1mdW5jdGlvbigpeyF0aGlzLnJlY29ubmVjdGluZyYmdGhpcy5fcmVjb25uZWN0aW9uJiYwPT09dGhpcy5iYWNrb2ZmLmF0dGVtcHRzJiZ0aGlzLnJlY29ubmVjdCgpfSxmLnByb3RvdHlwZS5vcGVuPWYucHJvdG90eXBlLmNvbm5lY3Q9ZnVuY3Rpb24oZSx0KXtpZihjKCJyZWFkeVN0YXRlICVzIix0aGlzLnJlYWR5U3RhdGUpLH50aGlzLnJlYWR5U3RhdGUuaW5kZXhPZigib3BlbiIpKXJldHVybiB0aGlzO2MoIm9wZW5pbmcgJXMiLHRoaXMudXJpKSx0aGlzLmVuZ2luZT1pKHRoaXMudXJpLHRoaXMub3B0cyk7dmFyIG49dGhpcy5lbmdpbmUscj10aGlzO3RoaXMucmVhZHlTdGF0ZT0ib3BlbmluZyIsdGhpcy5za2lwUmVjb25uZWN0PSExO3ZhciBvPXMobiwib3BlbiIsKGZ1bmN0aW9uKCl7ci5vbm9wZW4oKSxlJiZlKCl9KSksYT1zKG4sImVycm9yIiwoZnVuY3Rpb24odCl7aWYoYygiY29ubmVjdF9lcnJvciIpLHIuY2xlYW51cCgpLHIucmVhZHlTdGF0ZT0iY2xvc2VkIixyLmVtaXRBbGwoImNvbm5lY3RfZXJyb3IiLHQpLGUpe3ZhciBuPW5ldyBFcnJvcigiQ29ubmVjdGlvbiBlcnJvciIpO24uZGF0YT10LGUobil9ZWxzZSByLm1heWJlUmVjb25uZWN0T25PcGVuKCl9KSk7aWYoITEhPT10aGlzLl90aW1lb3V0KXt2YXIgbD10aGlzLl90aW1lb3V0O2MoImNvbm5lY3QgYXR0ZW1wdCB3aWxsIHRpbWVvdXQgYWZ0ZXIgJWQiLGwpO3ZhciB1PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7YygiY29ubmVjdCBhdHRlbXB0IHRpbWVkIG91dCBhZnRlciAlZCIsbCksby5kZXN0cm95KCksbi5jbG9zZSgpLG4uZW1pdCgiZXJyb3IiLCJ0aW1lb3V0Iiksci5lbWl0QWxsKCJjb25uZWN0X3RpbWVvdXQiLGwpfSksbCk7dGhpcy5zdWJzLnB1c2goe2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSl9fSl9cmV0dXJuIHRoaXMuc3Vicy5wdXNoKG8pLHRoaXMuc3Vicy5wdXNoKGEpLHRoaXN9LGYucHJvdG90eXBlLm9ub3Blbj1mdW5jdGlvbigpe2MoIm9wZW4iKSx0aGlzLmNsZWFudXAoKSx0aGlzLnJlYWR5U3RhdGU9Im9wZW4iLHRoaXMuZW1pdCgib3BlbiIpO3ZhciBlPXRoaXMuZW5naW5lO3RoaXMuc3Vicy5wdXNoKHMoZSwiZGF0YSIsbCh0aGlzLCJvbmRhdGEiKSkpLHRoaXMuc3Vicy5wdXNoKHMoZSwicGluZyIsbCh0aGlzLCJvbnBpbmciKSkpLHRoaXMuc3Vicy5wdXNoKHMoZSwicG9uZyIsbCh0aGlzLCJvbnBvbmciKSkpLHRoaXMuc3Vicy5wdXNoKHMoZSwiZXJyb3IiLGwodGhpcywib25lcnJvciIpKSksdGhpcy5zdWJzLnB1c2gocyhlLCJjbG9zZSIsbCh0aGlzLCJvbmNsb3NlIikpKSx0aGlzLnN1YnMucHVzaChzKHRoaXMuZGVjb2RlciwiZGVjb2RlZCIsbCh0aGlzLCJvbmRlY29kZWQiKSkpfSxmLnByb3RvdHlwZS5vbnBpbmc9ZnVuY3Rpb24oKXt0aGlzLmxhc3RQaW5nPW5ldyBEYXRlLHRoaXMuZW1pdEFsbCgicGluZyIpfSxmLnByb3RvdHlwZS5vbnBvbmc9ZnVuY3Rpb24oKXt0aGlzLmVtaXRBbGwoInBvbmciLG5ldyBEYXRlLXRoaXMubGFzdFBpbmcpfSxmLnByb3RvdHlwZS5vbmRhdGE9ZnVuY3Rpb24oZSl7dGhpcy5kZWNvZGVyLmFkZChlKX0sZi5wcm90b3R5cGUub25kZWNvZGVkPWZ1bmN0aW9uKGUpe3RoaXMuZW1pdCgicGFja2V0IixlKX0sZi5wcm90b3R5cGUub25lcnJvcj1mdW5jdGlvbihlKXtjKCJlcnJvciIsZSksdGhpcy5lbWl0QWxsKCJlcnJvciIsZSl9LGYucHJvdG90eXBlLnNvY2tldD1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubnNwc1tlXTtpZighbil7bj1uZXcgcih0aGlzLGUsdCksdGhpcy5uc3BzW2VdPW47dmFyIGk9dGhpcztuLm9uKCJjb25uZWN0aW5nIixvKSxuLm9uKCJjb25uZWN0IiwoZnVuY3Rpb24oKXtuLmlkPWkuZ2VuZXJhdGVJZChlKX0pKSx0aGlzLmF1dG9Db25uZWN0JiZvKCl9ZnVuY3Rpb24gbygpe351KGkuY29ubmVjdGluZyxuKXx8aS5jb25uZWN0aW5nLnB1c2gobil9cmV0dXJuIG59LGYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSl7dmFyIHQ9dSh0aGlzLmNvbm5lY3RpbmcsZSk7fnQmJnRoaXMuY29ubmVjdGluZy5zcGxpY2UodCwxKSx0aGlzLmNvbm5lY3RpbmcubGVuZ3RofHx0aGlzLmNsb3NlKCl9LGYucHJvdG90eXBlLnBhY2tldD1mdW5jdGlvbihlKXtjKCJ3cml0aW5nIHBhY2tldCAlaiIsZSk7dmFyIHQ9dGhpcztlLnF1ZXJ5JiYwPT09ZS50eXBlJiYoZS5uc3ArPSI/IitlLnF1ZXJ5KSx0LmVuY29kaW5nP3QucGFja2V0QnVmZmVyLnB1c2goZSk6KHQuZW5jb2Rpbmc9ITAsdGhpcy5lbmNvZGVyLmVuY29kZShlLChmdW5jdGlvbihuKXtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl0LmVuZ2luZS53cml0ZShuW2ldLGUub3B0aW9ucyk7dC5lbmNvZGluZz0hMSx0LnByb2Nlc3NQYWNrZXRRdWV1ZSgpfSkpKX0sZi5wcm90b3R5cGUucHJvY2Vzc1BhY2tldFF1ZXVlPWZ1bmN0aW9uKCl7aWYodGhpcy5wYWNrZXRCdWZmZXIubGVuZ3RoPjAmJiF0aGlzLmVuY29kaW5nKXt2YXIgZT10aGlzLnBhY2tldEJ1ZmZlci5zaGlmdCgpO3RoaXMucGFja2V0KGUpfX0sZi5wcm90b3R5cGUuY2xlYW51cD1mdW5jdGlvbigpe2MoImNsZWFudXAiKTtmb3IodmFyIGU9dGhpcy5zdWJzLmxlbmd0aCx0PTA7dDxlO3QrKyl0aGlzLnN1YnMuc2hpZnQoKS5kZXN0cm95KCk7dGhpcy5wYWNrZXRCdWZmZXI9W10sdGhpcy5lbmNvZGluZz0hMSx0aGlzLmxhc3RQaW5nPW51bGwsdGhpcy5kZWNvZGVyLmRlc3Ryb3koKX0sZi5wcm90b3R5cGUuY2xvc2U9Zi5wcm90b3R5cGUuZGlzY29ubmVjdD1mdW5jdGlvbigpe2MoImRpc2Nvbm5lY3QiKSx0aGlzLnNraXBSZWNvbm5lY3Q9ITAsdGhpcy5yZWNvbm5lY3Rpbmc9ITEsIm9wZW5pbmciPT09dGhpcy5yZWFkeVN0YXRlJiZ0aGlzLmNsZWFudXAoKSx0aGlzLmJhY2tvZmYucmVzZXQoKSx0aGlzLnJlYWR5U3RhdGU9ImNsb3NlZCIsdGhpcy5lbmdpbmUmJnRoaXMuZW5naW5lLmNsb3NlKCl9LGYucHJvdG90eXBlLm9uY2xvc2U9ZnVuY3Rpb24oZSl7Yygib25jbG9zZSIpLHRoaXMuY2xlYW51cCgpLHRoaXMuYmFja29mZi5yZXNldCgpLHRoaXMucmVhZHlTdGF0ZT0iY2xvc2VkIix0aGlzLmVtaXQoImNsb3NlIixlKSx0aGlzLl9yZWNvbm5lY3Rpb24mJiF0aGlzLnNraXBSZWNvbm5lY3QmJnRoaXMucmVjb25uZWN0KCl9LGYucHJvdG90eXBlLnJlY29ubmVjdD1mdW5jdGlvbigpe2lmKHRoaXMucmVjb25uZWN0aW5nfHx0aGlzLnNraXBSZWNvbm5lY3QpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcztpZih0aGlzLmJhY2tvZmYuYXR0ZW1wdHM+PXRoaXMuX3JlY29ubmVjdGlvbkF0dGVtcHRzKWMoInJlY29ubmVjdCBmYWlsZWQiKSx0aGlzLmJhY2tvZmYucmVzZXQoKSx0aGlzLmVtaXRBbGwoInJlY29ubmVjdF9mYWlsZWQiKSx0aGlzLnJlY29ubmVjdGluZz0hMTtlbHNle3ZhciB0PXRoaXMuYmFja29mZi5kdXJhdGlvbigpO2MoIndpbGwgd2FpdCAlZG1zIGJlZm9yZSByZWNvbm5lY3QgYXR0ZW1wdCIsdCksdGhpcy5yZWNvbm5lY3Rpbmc9ITA7dmFyIG49c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnNraXBSZWNvbm5lY3R8fChjKCJhdHRlbXB0aW5nIHJlY29ubmVjdCIpLGUuZW1pdEFsbCgicmVjb25uZWN0X2F0dGVtcHQiLGUuYmFja29mZi5hdHRlbXB0cyksZS5lbWl0QWxsKCJyZWNvbm5lY3RpbmciLGUuYmFja29mZi5hdHRlbXB0cyksZS5za2lwUmVjb25uZWN0fHxlLm9wZW4oKGZ1bmN0aW9uKHQpe3Q/KGMoInJlY29ubmVjdCBhdHRlbXB0IGVycm9yIiksZS5yZWNvbm5lY3Rpbmc9ITEsZS5yZWNvbm5lY3QoKSxlLmVtaXRBbGwoInJlY29ubmVjdF9lcnJvciIsdC5kYXRhKSk6KGMoInJlY29ubmVjdCBzdWNjZXNzIiksZS5vbnJlY29ubmVjdCgpKX0pKSl9KSx0KTt0aGlzLnN1YnMucHVzaCh7ZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KX19LGYucHJvdG90eXBlLm9ucmVjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iYWNrb2ZmLmF0dGVtcHRzO3RoaXMucmVjb25uZWN0aW5nPSExLHRoaXMuYmFja29mZi5yZXNldCgpLHRoaXMudXBkYXRlU29ja2V0SWRzKCksdGhpcy5lbWl0QWxsKCJyZWNvbm5lY3QiLGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oOCkscj1uKDM1KSxvPW4oNDIpLGE9big0Myk7dC5wb2xsaW5nPWZ1bmN0aW9uKGUpe3ZhciB0PSExLG49ITEsYT0hMSE9PWUuanNvbnA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBsb2NhdGlvbil7dmFyIHM9Imh0dHBzOiI9PT1sb2NhdGlvbi5wcm90b2NvbCxsPWxvY2F0aW9uLnBvcnQ7bHx8KGw9cz80NDM6ODApLHQ9ZS5ob3N0bmFtZSE9PWxvY2F0aW9uLmhvc3RuYW1lfHxsIT09ZS5wb3J0LG49ZS5zZWN1cmUhPT1zfWlmKGUueGRvbWFpbj10LGUueHNjaGVtZT1uLCJvcGVuImluIG5ldyBpKGUpJiYhZS5mb3JjZUpTT05QKXJldHVybiBuZXcgcihlKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIkpTT05QIGRpc2FibGVkIik7cmV0dXJuIG5ldyBvKGUpfSx0LndlYnNvY2tldD1hfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big5KSxyPW4oMyksbz1uKDIpLGE9big0KSxzPW4oMTcpLGw9bigwKSgiZW5naW5lLmlvLWNsaWVudDpwb2xsaW5nIik7ZS5leHBvcnRzPXU7dmFyIGM9bnVsbCE9bmV3KG4oOCkpKHt4ZG9tYWluOiExfSkucmVzcG9uc2VUeXBlO2Z1bmN0aW9uIHUoZSl7dmFyIHQ9ZSYmZS5mb3JjZUJhc2U2NDtjJiYhdHx8KHRoaXMuc3VwcG9ydHNCaW5hcnk9ITEpLGkuY2FsbCh0aGlzLGUpfWEodSxpKSx1LnByb3RvdHlwZS5uYW1lPSJwb2xsaW5nIix1LnByb3RvdHlwZS5kb09wZW49ZnVuY3Rpb24oKXt0aGlzLnBvbGwoKX0sdS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztmdW5jdGlvbiBuKCl7bCgicGF1c2VkIiksdC5yZWFkeVN0YXRlPSJwYXVzZWQiLGUoKX1pZih0aGlzLnJlYWR5U3RhdGU9InBhdXNpbmciLHRoaXMucG9sbGluZ3x8IXRoaXMud3JpdGFibGUpe3ZhciBpPTA7dGhpcy5wb2xsaW5nJiYobCgid2UgYXJlIGN1cnJlbnRseSBwb2xsaW5nIC0gd2FpdGluZyB0byBwYXVzZSIpLGkrKyx0aGlzLm9uY2UoInBvbGxDb21wbGV0ZSIsKGZ1bmN0aW9uKCl7bCgicHJlLXBhdXNlIHBvbGxpbmcgY29tcGxldGUiKSwtLWl8fG4oKX0pKSksdGhpcy53cml0YWJsZXx8KGwoIndlIGFyZSBjdXJyZW50bHkgd3JpdGluZyAtIHdhaXRpbmcgdG8gcGF1c2UiKSxpKyssdGhpcy5vbmNlKCJkcmFpbiIsKGZ1bmN0aW9uKCl7bCgicHJlLXBhdXNlIHdyaXRpbmcgY29tcGxldGUiKSwtLWl8fG4oKX0pKSl9ZWxzZSBuKCl9LHUucHJvdG90eXBlLnBvbGw9ZnVuY3Rpb24oKXtsKCJwb2xsaW5nIiksdGhpcy5wb2xsaW5nPSEwLHRoaXMuZG9Qb2xsKCksdGhpcy5lbWl0KCJwb2xsIil9LHUucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2woInBvbGxpbmcgZ290IGRhdGEgJXMiLGUpLG8uZGVjb2RlUGF5bG9hZChlLHRoaXMuc29ja2V0LmJpbmFyeVR5cGUsKGZ1bmN0aW9uKGUsbixpKXtpZigib3BlbmluZyI9PT10LnJlYWR5U3RhdGUmJnQub25PcGVuKCksImNsb3NlIj09PWUudHlwZSlyZXR1cm4gdC5vbkNsb3NlKCksITE7dC5vblBhY2tldChlKX0pKSwiY2xvc2VkIiE9PXRoaXMucmVhZHlTdGF0ZSYmKHRoaXMucG9sbGluZz0hMSx0aGlzLmVtaXQoInBvbGxDb21wbGV0ZSIpLCJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZT90aGlzLnBvbGwoKTpsKCdpZ25vcmluZyBwb2xsIC0gdHJhbnNwb3J0IHN0YXRlICIlcyInLHRoaXMucmVhZHlTdGF0ZSkpfSx1LnByb3RvdHlwZS5kb0Nsb3NlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztmdW5jdGlvbiB0KCl7bCgid3JpdGluZyBjbG9zZSBwYWNrZXQiKSxlLndyaXRlKFt7dHlwZToiY2xvc2UifV0pfSJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZT8obCgidHJhbnNwb3J0IG9wZW4gLSBjbG9zaW5nIiksdCgpKToobCgidHJhbnNwb3J0IG5vdCBvcGVuIC0gZGVmZXJyaW5nIGNsb3NlIiksdGhpcy5vbmNlKCJvcGVuIix0KSl9LHUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy53cml0YWJsZT0hMTt2YXIgbj1mdW5jdGlvbigpe3Qud3JpdGFibGU9ITAsdC5lbWl0KCJkcmFpbiIpfTtvLmVuY29kZVBheWxvYWQoZSx0aGlzLnN1cHBvcnRzQmluYXJ5LChmdW5jdGlvbihlKXt0LmRvV3JpdGUoZSxuKX0pKX0sdS5wcm90b3R5cGUudXJpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWVyeXx8e30sdD10aGlzLnNlY3VyZT8iaHR0cHMiOiJodHRwIixuPSIiO3JldHVybiExIT09dGhpcy50aW1lc3RhbXBSZXF1ZXN0cyYmKGVbdGhpcy50aW1lc3RhbXBQYXJhbV09cygpKSx0aGlzLnN1cHBvcnRzQmluYXJ5fHxlLnNpZHx8KGUuYjY0PTEpLGU9ci5lbmNvZGUoZSksdGhpcy5wb3J0JiYoImh0dHBzIj09PXQmJjQ0MyE9PU51bWJlcih0aGlzLnBvcnQpfHwiaHR0cCI9PT10JiY4MCE9PU51bWJlcih0aGlzLnBvcnQpKSYmKG49IjoiK3RoaXMucG9ydCksZS5sZW5ndGgmJihlPSI/IitlKSx0KyI6Ly8iKygtMSE9PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpPyJbIit0aGlzLmhvc3RuYW1lKyJdIjp0aGlzLmhvc3RuYW1lKStuK3RoaXMucGF0aCtlfX0sZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXt2YXIgaT1uKDYpLHI9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvPSJmdW5jdGlvbiI9PXR5cGVvZiBCbG9ifHwidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiJbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl0iPT09ci5jYWxsKEJsb2IpLGE9ImZ1bmN0aW9uIj09dHlwZW9mIEZpbGV8fCJ1bmRlZmluZWQiIT10eXBlb2YgRmlsZSYmIltvYmplY3QgRmlsZUNvbnN0cnVjdG9yXSI9PT1yLmNhbGwoRmlsZSk7ZS5leHBvcnRzPWZ1bmN0aW9uIGUobil7aWYoIW58fCJvYmplY3QiIT10eXBlb2YgbilyZXR1cm4hMTtpZihpKG4pKXtmb3IodmFyIHI9MCxzPW4ubGVuZ3RoO3I8cztyKyspaWYoZShuW3JdKSlyZXR1cm4hMDtyZXR1cm4hMX1pZigiZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5pc0J1ZmZlciYmdC5pc0J1ZmZlcihuKXx8ImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiZuIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fG8mJm4gaW5zdGFuY2VvZiBCbG9ifHxhJiZuIGluc3RhbmNlb2YgRmlsZSlyZXR1cm4hMDtpZihuLnRvSlNPTiYmImZ1bmN0aW9uIj09dHlwZW9mIG4udG9KU09OJiYxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZShuLnRvSlNPTigpLCEwKTtmb3IodmFyIGwgaW4gbilpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixsKSYmZShuW2xdKSlyZXR1cm4hMDtyZXR1cm4hMX19KS5jYWxsKHRoaXMsbig3KS5CdWZmZXIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpLHI9IjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LV8iLnNwbGl0KCIiKSxvPTY0LGE9e30scz0wLGw9MDtmdW5jdGlvbiBjKGUpe3ZhciB0PSIiO2Rve3Q9cltlJW9dK3QsZT1NYXRoLmZsb29yKGUvbyl9d2hpbGUoZT4wKTtyZXR1cm4gdH1mdW5jdGlvbiB1KCl7dmFyIGU9YygrbmV3IERhdGUpO3JldHVybiBlIT09aT8ocz0wLGk9ZSk6ZSsiLiIrYyhzKyspfWZvcig7bDxvO2wrKylhW3JbbF1dPWw7dS5lbmNvZGU9Yyx1LmRlY29kZT1mdW5jdGlvbihlKXt2YXIgdD0wO2ZvcihsPTA7bDxlLmxlbmd0aDtsKyspdD10Km8rYVtlLmNoYXJBdChsKV07cmV0dXJuIHR9LGUuZXhwb3J0cz11fSxmdW5jdGlvbihlLHQpe3ZhciBuPVtdLmluZGV4T2Y7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobilyZXR1cm4gZS5pbmRleE9mKHQpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7KytpKWlmKGVbaV09PT10KXJldHVybiBpO3JldHVybi0xfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNSkscj1uKDEpLG89big0NSksYT1uKDIwKSxzPW4oMjEpLGw9bigwKSgic29ja2V0LmlvLWNsaWVudDpzb2NrZXQiKSxjPW4oMyksdT1uKDE2KTtlLmV4cG9ydHM9Zjt2YXIgaD17Y29ubmVjdDoxLGNvbm5lY3RfZXJyb3I6MSxjb25uZWN0X3RpbWVvdXQ6MSxjb25uZWN0aW5nOjEsZGlzY29ubmVjdDoxLGVycm9yOjEscmVjb25uZWN0OjEscmVjb25uZWN0X2F0dGVtcHQ6MSxyZWNvbm5lY3RfZmFpbGVkOjEscmVjb25uZWN0X2Vycm9yOjEscmVjb25uZWN0aW5nOjEscGluZzoxLHBvbmc6MX0sZD1yLnByb3RvdHlwZS5lbWl0O2Z1bmN0aW9uIGYoZSx0LG4pe3RoaXMuaW89ZSx0aGlzLm5zcD10LHRoaXMuanNvbj10aGlzLHRoaXMuaWRzPTAsdGhpcy5hY2tzPXt9LHRoaXMucmVjZWl2ZUJ1ZmZlcj1bXSx0aGlzLnNlbmRCdWZmZXI9W10sdGhpcy5jb25uZWN0ZWQ9ITEsdGhpcy5kaXNjb25uZWN0ZWQ9ITAsdGhpcy5mbGFncz17fSxuJiZuLnF1ZXJ5JiYodGhpcy5xdWVyeT1uLnF1ZXJ5KSx0aGlzLmlvLmF1dG9Db25uZWN0JiZ0aGlzLm9wZW4oKX1yKGYucHJvdG90eXBlKSxmLnByb3RvdHlwZS5zdWJFdmVudHM9ZnVuY3Rpb24oKXtpZighdGhpcy5zdWJzKXt2YXIgZT10aGlzLmlvO3RoaXMuc3Vicz1bYShlLCJvcGVuIixzKHRoaXMsIm9ub3BlbiIpKSxhKGUsInBhY2tldCIscyh0aGlzLCJvbnBhY2tldCIpKSxhKGUsImNsb3NlIixzKHRoaXMsIm9uY2xvc2UiKSldfX0sZi5wcm90b3R5cGUub3Blbj1mLnByb3RvdHlwZS5jb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkfHwodGhpcy5zdWJFdmVudHMoKSx0aGlzLmlvLm9wZW4oKSwib3BlbiI9PT10aGlzLmlvLnJlYWR5U3RhdGUmJnRoaXMub25vcGVuKCksdGhpcy5lbWl0KCJjb25uZWN0aW5nIikpLHRoaXN9LGYucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oKXt2YXIgZT1vKGFyZ3VtZW50cyk7cmV0dXJuIGUudW5zaGlmdCgibWVzc2FnZSIpLHRoaXMuZW1pdC5hcHBseSh0aGlzLGUpLHRoaXN9LGYucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZSl7aWYoaC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpczt2YXIgdD1vKGFyZ3VtZW50cyksbj17dHlwZToodm9pZCAwIT09dGhpcy5mbGFncy5iaW5hcnk/dGhpcy5mbGFncy5iaW5hcnk6dSh0KSk/aS5CSU5BUllfRVZFTlQ6aS5FVkVOVCxkYXRhOnQsb3B0aW9uczp7fX07cmV0dXJuIG4ub3B0aW9ucy5jb21wcmVzcz0hdGhpcy5mbGFnc3x8ITEhPT10aGlzLmZsYWdzLmNvbXByZXNzLCJmdW5jdGlvbiI9PXR5cGVvZiB0W3QubGVuZ3RoLTFdJiYobCgiZW1pdHRpbmcgcGFja2V0IHdpdGggYWNrIGlkICVkIix0aGlzLmlkcyksdGhpcy5hY2tzW3RoaXMuaWRzXT10LnBvcCgpLG4uaWQ9dGhpcy5pZHMrKyksdGhpcy5jb25uZWN0ZWQ/dGhpcy5wYWNrZXQobik6dGhpcy5zZW5kQnVmZmVyLnB1c2gobiksdGhpcy5mbGFncz17fSx0aGlzfSxmLnByb3RvdHlwZS5wYWNrZXQ9ZnVuY3Rpb24oZSl7ZS5uc3A9dGhpcy5uc3AsdGhpcy5pby5wYWNrZXQoZSl9LGYucHJvdG90eXBlLm9ub3Blbj1mdW5jdGlvbigpe2lmKGwoInRyYW5zcG9ydCBpcyBvcGVuIC0gY29ubmVjdGluZyIpLCIvIiE9PXRoaXMubnNwKWlmKHRoaXMucXVlcnkpe3ZhciBlPSJvYmplY3QiPT10eXBlb2YgdGhpcy5xdWVyeT9jLmVuY29kZSh0aGlzLnF1ZXJ5KTp0aGlzLnF1ZXJ5O2woInNlbmRpbmcgY29ubmVjdCBwYWNrZXQgd2l0aCBxdWVyeSAlcyIsZSksdGhpcy5wYWNrZXQoe3R5cGU6aS5DT05ORUNULHF1ZXJ5OmV9KX1lbHNlIHRoaXMucGFja2V0KHt0eXBlOmkuQ09OTkVDVH0pfSxmLnByb3RvdHlwZS5vbmNsb3NlPWZ1bmN0aW9uKGUpe2woImNsb3NlICglcykiLGUpLHRoaXMuY29ubmVjdGVkPSExLHRoaXMuZGlzY29ubmVjdGVkPSEwLGRlbGV0ZSB0aGlzLmlkLHRoaXMuZW1pdCgiZGlzY29ubmVjdCIsZSl9LGYucHJvdG90eXBlLm9ucGFja2V0PWZ1bmN0aW9uKGUpe3ZhciB0PWUubnNwPT09dGhpcy5uc3Asbj1lLnR5cGU9PT1pLkVSUk9SJiYiLyI9PT1lLm5zcDtpZih0fHxuKXN3aXRjaChlLnR5cGUpe2Nhc2UgaS5DT05ORUNUOnRoaXMub25jb25uZWN0KCk7YnJlYWs7Y2FzZSBpLkVWRU5UOmNhc2UgaS5CSU5BUllfRVZFTlQ6dGhpcy5vbmV2ZW50KGUpO2JyZWFrO2Nhc2UgaS5BQ0s6Y2FzZSBpLkJJTkFSWV9BQ0s6dGhpcy5vbmFjayhlKTticmVhaztjYXNlIGkuRElTQ09OTkVDVDp0aGlzLm9uZGlzY29ubmVjdCgpO2JyZWFrO2Nhc2UgaS5FUlJPUjp0aGlzLmVtaXQoImVycm9yIixlLmRhdGEpfX0sZi5wcm90b3R5cGUub25ldmVudD1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGF8fFtdO2woImVtaXR0aW5nIGV2ZW50ICVqIix0KSxudWxsIT1lLmlkJiYobCgiYXR0YWNoaW5nIGFjayBjYWxsYmFjayB0byBldmVudCIpLHQucHVzaCh0aGlzLmFjayhlLmlkKSkpLHRoaXMuY29ubmVjdGVkP2QuYXBwbHkodGhpcyx0KTp0aGlzLnJlY2VpdmVCdWZmZXIucHVzaCh0KX0sZi5wcm90b3R5cGUuYWNrPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighbil7bj0hMDt2YXIgcj1vKGFyZ3VtZW50cyk7bCgic2VuZGluZyBhY2sgJWoiLHIpLHQucGFja2V0KHt0eXBlOnUocik/aS5CSU5BUllfQUNLOmkuQUNLLGlkOmUsZGF0YTpyfSl9fX0sZi5wcm90b3R5cGUub25hY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hY2tzW2UuaWRdOyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhsKCJjYWxsaW5nIGFjayAlcyB3aXRoICVqIixlLmlkLGUuZGF0YSksdC5hcHBseSh0aGlzLGUuZGF0YSksZGVsZXRlIHRoaXMuYWNrc1tlLmlkXSk6bCgiYmFkIGFjayAlcyIsZS5pZCl9LGYucHJvdG90eXBlLm9uY29ubmVjdD1mdW5jdGlvbigpe3RoaXMuY29ubmVjdGVkPSEwLHRoaXMuZGlzY29ubmVjdGVkPSExLHRoaXMuZW1pdCgiY29ubmVjdCIpLHRoaXMuZW1pdEJ1ZmZlcmVkKCl9LGYucHJvdG90eXBlLmVtaXRCdWZmZXJlZD1mdW5jdGlvbigpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLnJlY2VpdmVCdWZmZXIubGVuZ3RoO2UrKylkLmFwcGx5KHRoaXMsdGhpcy5yZWNlaXZlQnVmZmVyW2VdKTtmb3IodGhpcy5yZWNlaXZlQnVmZmVyPVtdLGU9MDtlPHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGg7ZSsrKXRoaXMucGFja2V0KHRoaXMuc2VuZEJ1ZmZlcltlXSk7dGhpcy5zZW5kQnVmZmVyPVtdfSxmLnByb3RvdHlwZS5vbmRpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXtsKCJzZXJ2ZXIgZGlzY29ubmVjdCAoJXMpIix0aGlzLm5zcCksdGhpcy5kZXN0cm95KCksdGhpcy5vbmNsb3NlKCJpbyBzZXJ2ZXIgZGlzY29ubmVjdCIpfSxmLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5zdWJzKXtmb3IodmFyIGU9MDtlPHRoaXMuc3Vicy5sZW5ndGg7ZSsrKXRoaXMuc3Vic1tlXS5kZXN0cm95KCk7dGhpcy5zdWJzPW51bGx9dGhpcy5pby5kZXN0cm95KHRoaXMpfSxmLnByb3RvdHlwZS5jbG9zZT1mLnByb3RvdHlwZS5kaXNjb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkJiYobCgicGVyZm9ybWluZyBkaXNjb25uZWN0ICglcykiLHRoaXMubnNwKSx0aGlzLnBhY2tldCh7dHlwZTppLkRJU0NPTk5FQ1R9KSksdGhpcy5kZXN0cm95KCksdGhpcy5jb25uZWN0ZWQmJnRoaXMub25jbG9zZSgiaW8gY2xpZW50IGRpc2Nvbm5lY3QiKSx0aGlzfSxmLnByb3RvdHlwZS5jb21wcmVzcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mbGFncy5jb21wcmVzcz1lLHRoaXN9LGYucHJvdG90eXBlLmJpbmFyeT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5mbGFncy5iaW5hcnk9ZSx0aGlzfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLm9uKHQsbikse2Rlc3Ryb3k6ZnVuY3Rpb24oKXtlLnJlbW92ZUxpc3RlbmVyKHQsbil9fX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49W10uc2xpY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1lW3RdKSwiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoImJpbmQoKSByZXF1aXJlcyBhIGZ1bmN0aW9uIik7dmFyIGk9bi5jYWxsKGFyZ3VtZW50cywyKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGkuY29uY2F0KG4uY2FsbChhcmd1bWVudHMpKSl9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjQpLHI9big1KSxvPW4oMTMpLGE9bigwKSgic29ja2V0LmlvLWNsaWVudCIpO2UuZXhwb3J0cz10PWw7dmFyIHM9dC5tYW5hZ2Vycz17fTtmdW5jdGlvbiBsKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBuLHI9aShlKSxsPXIuc291cmNlLGM9ci5pZCx1PXIucGF0aCxoPXNbY10mJnUgaW4gc1tjXS5uc3BzO3JldHVybiB0LmZvcmNlTmV3fHx0WyJmb3JjZSBuZXcgY29ubmVjdGlvbiJdfHwhMT09PXQubXVsdGlwbGV4fHxoPyhhKCJpZ25vcmluZyBzb2NrZXQgY2FjaGUgZm9yICVzIixsKSxuPW8obCx0KSk6KHNbY118fChhKCJuZXcgaW8gaW5zdGFuY2UgZm9yICVzIixsKSxzW2NdPW8obCx0KSksbj1zW2NdKSxyLnF1ZXJ5JiYhdC5xdWVyeSYmKHQucXVlcnk9ci5xdWVyeSksbi5zb2NrZXQoci5wYXRoLHQpfXQucHJvdG9jb2w9ci5wcm90b2NvbCx0LmNvbm5lY3Q9bCx0Lk1hbmFnZXI9bigxMyksdC5Tb2NrZXQ9bigxOSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9big0Nyl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDEwKSxyPW4oMCkoInNvY2tldC5pby1jbGllbnQ6dXJsIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZTt0PXR8fCJ1bmRlZmluZWQiIT10eXBlb2YgbG9jYXRpb24mJmxvY2F0aW9uLG51bGw9PWUmJihlPXQucHJvdG9jb2wrIi8vIit0Lmhvc3QpLCJzdHJpbmciPT10eXBlb2YgZSYmKCIvIj09PWUuY2hhckF0KDApJiYoZT0iLyI9PT1lLmNoYXJBdCgxKT90LnByb3RvY29sK2U6dC5ob3N0K2UpLC9eKGh0dHBzP3x3c3M/KTpcL1wvLy50ZXN0KGUpfHwocigicHJvdG9jb2wtbGVzcyB1cmwgJXMiLGUpLGU9dm9pZCAwIT09dD90LnByb3RvY29sKyIvLyIrZToiaHR0cHM6Ly8iK2UpLHIoInBhcnNlICVzIixlKSxuPWkoZSkpLG4ucG9ydHx8KC9eKGh0dHB8d3MpJC8udGVzdChuLnByb3RvY29sKT9uLnBvcnQ9IjgwIjovXihodHRwfHdzKXMkLy50ZXN0KG4ucHJvdG9jb2wpJiYobi5wb3J0PSI0NDMiKSksbi5wYXRoPW4ucGF0aHx8Ii8iO3ZhciBvPS0xIT09bi5ob3N0LmluZGV4T2YoIjoiKT8iWyIrbi5ob3N0KyJdIjpuLmhvc3Q7cmV0dXJuIG4uaWQ9bi5wcm90b2NvbCsiOi8vIitvKyI6IituLnBvcnQsbi5ocmVmPW4ucHJvdG9jb2wrIjovLyIrbysodCYmdC5wb3J0PT09bi5wb3J0PyIiOiI6IituLnBvcnQpLG59fSxmdW5jdGlvbihlLHQpe3ZhciBuLGkscj1lLmV4cG9ydHM9e307ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigic2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIGEoKXt0aHJvdyBuZXcgRXJyb3IoImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCIpfWZ1bmN0aW9uIHMoZSl7aWYobj09PXNldFRpbWVvdXQpcmV0dXJuIHNldFRpbWVvdXQoZSwwKTtpZigobj09PW98fCFuKSYmc2V0VGltZW91dClyZXR1cm4gbj1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZSwwKTt0cnl7cmV0dXJuIG4oZSwwKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUsMCl9Y2F0Y2godCl7cmV0dXJuIG4uY2FsbCh0aGlzLGUsMCl9fX0hZnVuY3Rpb24oKXt0cnl7bj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om99Y2F0Y2goZSl7bj1vfXRyeXtpPSJmdW5jdGlvbiI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0OmF9Y2F0Y2goZSl7aT1hfX0oKTt2YXIgbCxjPVtdLHU9ITEsaD0tMTtmdW5jdGlvbiBkKCl7dSYmbCYmKHU9ITEsbC5sZW5ndGg/Yz1sLmNvbmNhdChjKTpoPS0xLGMubGVuZ3RoJiZmKCkpfWZ1bmN0aW9uIGYoKXtpZighdSl7dmFyIGU9cyhkKTt1PSEwO2Zvcih2YXIgdD1jLmxlbmd0aDt0Oyl7Zm9yKGw9YyxjPVtdOysraDx0OylsJiZsW2hdLnJ1bigpO2g9LTEsdD1jLmxlbmd0aH1sPW51bGwsdT0hMSxmdW5jdGlvbihlKXtpZihpPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoZSk7aWYoKGk9PT1hfHwhaSkmJmNsZWFyVGltZW91dClyZXR1cm4gaT1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KGUpO3RyeXtpKGUpfWNhdGNoKHQpe3RyeXtyZXR1cm4gaS5jYWxsKG51bGwsZSl9Y2F0Y2godCl7cmV0dXJuIGkuY2FsbCh0aGlzLGUpfX19KGUpfX1mdW5jdGlvbiBwKGUsdCl7dGhpcy5mdW49ZSx0aGlzLmFycmF5PXR9ZnVuY3Rpb24gbSgpe31yLm5leHRUaWNrPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXRbbi0xXT1hcmd1bWVudHNbbl07Yy5wdXNoKG5ldyBwKGUsdCkpLDEhPT1jLmxlbmd0aHx8dXx8cyhmKX0scC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sci50aXRsZT0iYnJvd3NlciIsci5icm93c2VyPSEwLHIuZW52PXt9LHIuYXJndj1bXSxyLnZlcnNpb249IiIsci52ZXJzaW9ucz17fSxyLm9uPW0sci5hZGRMaXN0ZW5lcj1tLHIub25jZT1tLHIub2ZmPW0sci5yZW1vdmVMaXN0ZW5lcj1tLHIucmVtb3ZlQWxsTGlzdGVuZXJzPW0sci5lbWl0PW0sci5wcmVwZW5kTGlzdGVuZXI9bSxyLnByZXBlbmRPbmNlTGlzdGVuZXI9bSxyLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm5bXX0sci5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sci5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LHIuY2hkaXI9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQiKX0sci51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGkoZSl7dmFyIG47ZnVuY3Rpb24gaSgpe2lmKGkuZW5hYmxlZCl7dmFyIGU9aSxyPStuZXcgRGF0ZSxvPXItKG58fHIpO2UuZGlmZj1vLGUucHJldj1uLGUuY3Vycj1yLG49cjtmb3IodmFyIGE9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHM9MDtzPGEubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTthWzBdPXQuY29lcmNlKGFbMF0pLCJzdHJpbmciIT10eXBlb2YgYVswXSYmYS51bnNoaWZ0KCIlTyIpO3ZhciBsPTA7YVswXT1hWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLChmdW5jdGlvbihuLGkpe2lmKCIlJSI9PT1uKXJldHVybiBuO2wrKzt2YXIgcj10LmZvcm1hdHRlcnNbaV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe3ZhciBvPWFbbF07bj1yLmNhbGwoZSxvKSxhLnNwbGljZShsLDEpLGwtLX1yZXR1cm4gbn0pKSx0LmZvcm1hdEFyZ3MuY2FsbChlLGEpLChpLmxvZ3x8dC5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkpLmFwcGx5KGUsYSl9fXJldHVybiBpLm5hbWVzcGFjZT1lLGkuZW5hYmxlZD10LmVuYWJsZWQoZSksaS51c2VDb2xvcnM9dC51c2VDb2xvcnMoKSxpLmNvbG9yPWZ1bmN0aW9uKGUpe3ZhciBuLGk9MDtmb3IobiBpbiBlKWk9KGk8PDUpLWkrZS5jaGFyQ29kZUF0KG4pLGl8PTA7cmV0dXJuIHQuY29sb3JzW01hdGguYWJzKGkpJXQuY29sb3JzLmxlbmd0aF19KGUpLGkuZGVzdHJveT1yLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmluaXQmJnQuaW5pdChpKSx0Lmluc3RhbmNlcy5wdXNoKGkpLGl9ZnVuY3Rpb24gcigpe3ZhciBlPXQuaW5zdGFuY2VzLmluZGV4T2YodGhpcyk7cmV0dXJuLTEhPT1lJiYodC5pbnN0YW5jZXMuc3BsaWNlKGUsMSksITApfSh0PWUuZXhwb3J0cz1pLmRlYnVnPWkuZGVmYXVsdD1pKS5jb2VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9lLnN0YWNrfHxlLm1lc3NhZ2U6ZX0sdC5kaXNhYmxlPWZ1bmN0aW9uKCl7dC5lbmFibGUoIiIpfSx0LmVuYWJsZT1mdW5jdGlvbihlKXt2YXIgbjt0LnNhdmUoZSksdC5uYW1lcz1bXSx0LnNraXBzPVtdO3ZhciBpPSgic3RyaW5nIj09dHlwZW9mIGU/ZToiIikuc3BsaXQoL1tccyxdKy8pLHI9aS5sZW5ndGg7Zm9yKG49MDtuPHI7bisrKWlbbl0mJigiLSI9PT0oZT1pW25dLnJlcGxhY2UoL1wqL2csIi4qPyIpKVswXT90LnNraXBzLnB1c2gobmV3IFJlZ0V4cCgiXiIrZS5zdWJzdHIoMSkrIiQiKSk6dC5uYW1lcy5wdXNoKG5ldyBSZWdFeHAoIl4iK2UrIiQiKSkpO2ZvcihuPTA7bjx0Lmluc3RhbmNlcy5sZW5ndGg7bisrKXt2YXIgbz10Lmluc3RhbmNlc1tuXTtvLmVuYWJsZWQ9dC5lbmFibGVkKG8ubmFtZXNwYWNlKX19LHQuZW5hYmxlZD1mdW5jdGlvbihlKXtpZigiKiI9PT1lW2UubGVuZ3RoLTFdKXJldHVybiEwO3ZhciBuLGk7Zm9yKG49MCxpPXQuc2tpcHMubGVuZ3RoO248aTtuKyspaWYodC5za2lwc1tuXS50ZXN0KGUpKXJldHVybiExO2ZvcihuPTAsaT10Lm5hbWVzLmxlbmd0aDtuPGk7bisrKWlmKHQubmFtZXNbbl0udGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5odW1hbml6ZT1uKDI3KSx0Lmluc3RhbmNlcz1bXSx0Lm5hbWVzPVtdLHQuc2tpcHM9W10sdC5mb3JtYXR0ZXJzPXt9fSxmdW5jdGlvbihlLHQpe3ZhciBuPTFlMyxpPTYwKm4scj02MCppLG89MjQqcixhPTM2NS4yNSpvO2Z1bmN0aW9uIHMoZSx0LG4pe2lmKCEoZTx0KSlyZXR1cm4gZTwxLjUqdD9NYXRoLmZsb29yKGUvdCkrIiAiK246TWF0aC5jZWlsKGUvdCkrIiAiK24rInMifWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIGwsYz10eXBlb2YgZTtpZigic3RyaW5nIj09PWMmJmUubGVuZ3RoPjApcmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCEoKGU9U3RyaW5nKGUpKS5sZW5ndGg+MTAwKSl7dmFyIHQ9L14oKD86XGQrKT9cLj9cZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhlKTtpZih0KXt2YXIgcz1wYXJzZUZsb2F0KHRbMV0pO3N3aXRjaCgodFsyXXx8Im1zIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ5ZWFycyI6Y2FzZSJ5ZWFyIjpjYXNlInlycyI6Y2FzZSJ5ciI6Y2FzZSJ5IjpyZXR1cm4gcyphO2Nhc2UiZGF5cyI6Y2FzZSJkYXkiOmNhc2UiZCI6cmV0dXJuIHMqbztjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiBzKnI7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gcyppO2Nhc2Uic2Vjb25kcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2VjcyI6Y2FzZSJzZWMiOmNhc2UicyI6cmV0dXJuIHMqbjtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcztkZWZhdWx0OnJldHVybn19fX0oZSk7aWYoIm51bWJlciI9PT1jJiYhMT09PWlzTmFOKGUpKXJldHVybiB0Lmxvbmc/cyhsPWUsbywiZGF5Iil8fHMobCxyLCJob3VyIil8fHMobCxpLCJtaW51dGUiKXx8cyhsLG4sInNlY29uZCIpfHxsKyIgbXMiOmZ1bmN0aW9uKGUpe3JldHVybiBlPj1vP01hdGgucm91bmQoZS9vKSsiZCI6ZT49cj9NYXRoLnJvdW5kKGUvcikrImgiOmU+PWk/TWF0aC5yb3VuZChlL2kpKyJtIjplPj1uP01hdGgucm91bmQoZS9uKSsicyI6ZSsibXMifShlKTt0aHJvdyBuZXcgRXJyb3IoInZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9IitKU09OLnN0cmluZ2lmeShlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big2KSxyPW4oMTEpLG89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxhPSJmdW5jdGlvbiI9PXR5cGVvZiBCbG9ifHwidW5kZWZpbmVkIiE9dHlwZW9mIEJsb2ImJiJbb2JqZWN0IEJsb2JDb25zdHJ1Y3Rvcl0iPT09by5jYWxsKEJsb2IpLHM9ImZ1bmN0aW9uIj09dHlwZW9mIEZpbGV8fCJ1bmRlZmluZWQiIT10eXBlb2YgRmlsZSYmIltvYmplY3QgRmlsZUNvbnN0cnVjdG9yXSI9PT1vLmNhbGwoRmlsZSk7dC5kZWNvbnN0cnVjdFBhY2tldD1mdW5jdGlvbihlKXt2YXIgdD1bXSxuPWUuZGF0YSxvPWU7cmV0dXJuIG8uZGF0YT1mdW5jdGlvbiBlKHQsbil7aWYoIXQpcmV0dXJuIHQ7aWYocih0KSl7dmFyIG89e19wbGFjZWhvbGRlcjohMCxudW06bi5sZW5ndGh9O3JldHVybiBuLnB1c2godCksb31pZihpKHQpKXtmb3IodmFyIGE9bmV3IEFycmF5KHQubGVuZ3RoKSxzPTA7czx0Lmxlbmd0aDtzKyspYVtzXT1lKHRbc10sbik7cmV0dXJuIGF9aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhKHQgaW5zdGFuY2VvZiBEYXRlKSl7YT17fTtmb3IodmFyIGwgaW4gdClhW2xdPWUodFtsXSxuKTtyZXR1cm4gYX1yZXR1cm4gdH0obix0KSxvLmF0dGFjaG1lbnRzPXQubGVuZ3RoLHtwYWNrZXQ6byxidWZmZXJzOnR9fSx0LnJlY29uc3RydWN0UGFja2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZGF0YT1mdW5jdGlvbiBlKHQsbil7aWYoIXQpcmV0dXJuIHQ7aWYodCYmdC5fcGxhY2Vob2xkZXIpcmV0dXJuIG5bdC5udW1dO2lmKGkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1lKHRbcl0sbik7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQpZm9yKHZhciBvIGluIHQpdFtvXT1lKHRbb10sbik7cmV0dXJuIHR9KGUuZGF0YSx0KSxlLmF0dGFjaG1lbnRzPXZvaWQgMCxlfSx0LnJlbW92ZUJsb2JzPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxvPWU7IWZ1bmN0aW9uIGUobCxjLHUpe2lmKCFsKXJldHVybiBsO2lmKGEmJmwgaW5zdGFuY2VvZiBCbG9ifHxzJiZsIGluc3RhbmNlb2YgRmlsZSl7bisrO3ZhciBoPW5ldyBGaWxlUmVhZGVyO2gub25sb2FkPWZ1bmN0aW9uKCl7dT91W2NdPXRoaXMucmVzdWx0Om89dGhpcy5yZXN1bHQsLS1ufHx0KG8pfSxoLnJlYWRBc0FycmF5QnVmZmVyKGwpfWVsc2UgaWYoaShsKSlmb3IodmFyIGQ9MDtkPGwubGVuZ3RoO2QrKyllKGxbZF0sZCxsKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCYmIXIobCkpZm9yKHZhciBmIGluIGwpZShsW2ZdLGYsbCl9KG8pLG58fHQobyl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuYnl0ZUxlbmd0aD1mdW5jdGlvbihlKXt2YXIgdD1jKGUpLG49dFswXSxpPXRbMV07cmV0dXJuIDMqKG4raSkvNC1pfSx0LnRvQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWMoZSksaT1uWzBdLGE9blsxXSxzPW5ldyBvKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMyoodCtuKS80LW59KDAsaSxhKSksbD0wLHU9YT4wP2ktNDppLGg9MDtoPHU7aCs9NCl0PXJbZS5jaGFyQ29kZUF0KGgpXTw8MTh8cltlLmNoYXJDb2RlQXQoaCsxKV08PDEyfHJbZS5jaGFyQ29kZUF0KGgrMildPDw2fHJbZS5jaGFyQ29kZUF0KGgrMyldLHNbbCsrXT10Pj4xNiYyNTUsc1tsKytdPXQ+PjgmMjU1LHNbbCsrXT0yNTUmdDtyZXR1cm4gMj09PWEmJih0PXJbZS5jaGFyQ29kZUF0KGgpXTw8MnxyW2UuY2hhckNvZGVBdChoKzEpXT4+NCxzW2wrK109MjU1JnQpLDE9PT1hJiYodD1yW2UuY2hhckNvZGVBdChoKV08PDEwfHJbZS5jaGFyQ29kZUF0KGgrMSldPDw0fHJbZS5jaGFyQ29kZUF0KGgrMildPj4yLHNbbCsrXT10Pj44JjI1NSxzW2wrK109MjU1JnQpLHN9LHQuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1lLmxlbmd0aCxyPW4lMyxvPVtdLGE9MCxzPW4tcjthPHM7YSs9MTYzODMpby5wdXNoKHUoZSxhLGErMTYzODM+cz9zOmErMTYzODMpKTtyZXR1cm4gMT09PXI/KHQ9ZVtuLTFdLG8ucHVzaChpW3Q+PjJdK2lbdDw8NCY2M10rIj09IikpOjI9PT1yJiYodD0oZVtuLTJdPDw4KStlW24tMV0sby5wdXNoKGlbdD4+MTBdK2lbdD4+NCY2M10raVt0PDwyJjYzXSsiPSIpKSxvLmpvaW4oIiIpfTtmb3IodmFyIGk9W10scj1bXSxvPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGE9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHM9MCxsPWEubGVuZ3RoO3M8bDsrK3MpaVtzXT1hW3NdLHJbYS5jaGFyQ29kZUF0KHMpXT1zO2Z1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodCU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIG49ZS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1uJiYobj10KSxbbixuPT09dD8wOjQtbiU0XX1mdW5jdGlvbiB1KGUsdCxuKXtmb3IodmFyIHIsbyxhPVtdLHM9dDtzPG47cys9MylyPShlW3NdPDwxNiYxNjcxMTY4MCkrKGVbcysxXTw8OCY2NTI4MCkrKDI1NSZlW3MrMl0pLGEucHVzaChpWyhvPXIpPj4xOCY2M10raVtvPj4xMiY2M10raVtvPj42JjYzXStpWzYzJm9dKTtyZXR1cm4gYS5qb2luKCIiKX1yWyItIi5jaGFyQ29kZUF0KDApXT02MixyWyJfIi5jaGFyQ29kZUF0KDApXT02M30sZnVuY3Rpb24oZSx0KXt0LnJlYWQ9ZnVuY3Rpb24oZSx0LG4saSxyKXt2YXIgbyxhLHM9OCpyLWktMSxsPSgxPDxzKS0xLGM9bD4+MSx1PS03LGg9bj9yLTE6MCxkPW4/LTE6MSxmPWVbdCtoXTtmb3IoaCs9ZCxvPWYmKDE8PC11KS0xLGY+Pj0tdSx1Kz1zO3U+MDtvPTI1NipvK2VbdCtoXSxoKz1kLHUtPTgpO2ZvcihhPW8mKDE8PC11KS0xLG8+Pj0tdSx1Kz1pO3U+MDthPTI1NiphK2VbdCtoXSxoKz1kLHUtPTgpO2lmKDA9PT1vKW89MS1jO2Vsc2V7aWYobz09PWwpcmV0dXJuIGE/TmFOOjEvMCooZj8tMToxKTthKz1NYXRoLnBvdygyLGkpLG8tPWN9cmV0dXJuKGY/LTE6MSkqYSpNYXRoLnBvdygyLG8taSl9LHQud3JpdGU9ZnVuY3Rpb24oZSx0LG4saSxyLG8pe3ZhciBhLHMsbCxjPTgqby1yLTEsdT0oMTw8YyktMSxoPXU+PjEsZD0yMz09PXI/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGY9aT8wOm8tMSxwPWk/MTotMSxtPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1NYXRoLmFicyh0KSxpc05hTih0KXx8dD09PTEvMD8ocz1pc05hTih0KT8xOjAsYT11KTooYT1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSx0KihsPU1hdGgucG93KDIsLWEpKTwxJiYoYS0tLGwqPTIpLCh0Kz1hK2g+PTE/ZC9sOmQqTWF0aC5wb3coMiwxLWgpKSpsPj0yJiYoYSsrLGwvPTIpLGEraD49dT8ocz0wLGE9dSk6YStoPj0xPyhzPSh0KmwtMSkqTWF0aC5wb3coMixyKSxhKz1oKToocz10Kk1hdGgucG93KDIsaC0xKSpNYXRoLnBvdygyLHIpLGE9MCkpO3I+PTg7ZVtuK2ZdPTI1NSZzLGYrPXAscy89MjU2LHItPTgpO2ZvcihhPWE8PHJ8cyxjKz1yO2M+MDtlW24rZl09MjU1JmEsZis9cCxhLz0yNTYsYy09OCk7ZVtuK2YtcF18PTEyOCptfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09bi5jYWxsKGUpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDMzKSxlLmV4cG9ydHMucGFyc2VyPW4oMil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE0KSxyPW4oMSksbz1uKDApKCJlbmdpbmUuaW8tY2xpZW50OnNvY2tldCIpLGE9bigxOCkscz1uKDIpLGw9bigxMCksYz1uKDMpO2Z1bmN0aW9uIHUoZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUoZSx0KTt0PXR8fHt9LGUmJiJvYmplY3QiPT10eXBlb2YgZSYmKHQ9ZSxlPW51bGwpLGU/KGU9bChlKSx0Lmhvc3RuYW1lPWUuaG9zdCx0LnNlY3VyZT0iaHR0cHMiPT09ZS5wcm90b2NvbHx8IndzcyI9PT1lLnByb3RvY29sLHQucG9ydD1lLnBvcnQsZS5xdWVyeSYmKHQucXVlcnk9ZS5xdWVyeSkpOnQuaG9zdCYmKHQuaG9zdG5hbWU9bCh0Lmhvc3QpLmhvc3QpLHRoaXMuc2VjdXJlPW51bGwhPXQuc2VjdXJlP3Quc2VjdXJlOiJ1bmRlZmluZWQiIT10eXBlb2YgbG9jYXRpb24mJiJodHRwczoiPT09bG9jYXRpb24ucHJvdG9jb2wsdC5ob3N0bmFtZSYmIXQucG9ydCYmKHQucG9ydD10aGlzLnNlY3VyZT8iNDQzIjoiODAiKSx0aGlzLmFnZW50PXQuYWdlbnR8fCExLHRoaXMuaG9zdG5hbWU9dC5ob3N0bmFtZXx8KCJ1bmRlZmluZWQiIT10eXBlb2YgbG9jYXRpb24/bG9jYXRpb24uaG9zdG5hbWU6ImxvY2FsaG9zdCIpLHRoaXMucG9ydD10LnBvcnR8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uJiZsb2NhdGlvbi5wb3J0P2xvY2F0aW9uLnBvcnQ6dGhpcy5zZWN1cmU/NDQzOjgwKSx0aGlzLnF1ZXJ5PXQucXVlcnl8fHt9LCJzdHJpbmciPT10eXBlb2YgdGhpcy5xdWVyeSYmKHRoaXMucXVlcnk9Yy5kZWNvZGUodGhpcy5xdWVyeSkpLHRoaXMudXBncmFkZT0hMSE9PXQudXBncmFkZSx0aGlzLnBhdGg9KHQucGF0aHx8Ii9lbmdpbmUuaW8iKS5yZXBsYWNlKC9cLyQvLCIiKSsiLyIsdGhpcy5mb3JjZUpTT05QPSEhdC5mb3JjZUpTT05QLHRoaXMuanNvbnA9ITEhPT10Lmpzb25wLHRoaXMuZm9yY2VCYXNlNjQ9ISF0LmZvcmNlQmFzZTY0LHRoaXMuZW5hYmxlc1hEUj0hIXQuZW5hYmxlc1hEUix0aGlzLnRpbWVzdGFtcFBhcmFtPXQudGltZXN0YW1wUGFyYW18fCJ0Iix0aGlzLnRpbWVzdGFtcFJlcXVlc3RzPXQudGltZXN0YW1wUmVxdWVzdHMsdGhpcy50cmFuc3BvcnRzPXQudHJhbnNwb3J0c3x8WyJwb2xsaW5nIiwid2Vic29ja2V0Il0sdGhpcy50cmFuc3BvcnRPcHRpb25zPXQudHJhbnNwb3J0T3B0aW9uc3x8e30sdGhpcy5yZWFkeVN0YXRlPSIiLHRoaXMud3JpdGVCdWZmZXI9W10sdGhpcy5wcmV2QnVmZmVyTGVuPTAsdGhpcy5wb2xpY3lQb3J0PXQucG9saWN5UG9ydHx8ODQzLHRoaXMucmVtZW1iZXJVcGdyYWRlPXQucmVtZW1iZXJVcGdyYWRlfHwhMSx0aGlzLmJpbmFyeVR5cGU9bnVsbCx0aGlzLm9ubHlCaW5hcnlVcGdyYWRlcz10Lm9ubHlCaW5hcnlVcGdyYWRlcyx0aGlzLnBlck1lc3NhZ2VEZWZsYXRlPSExIT09dC5wZXJNZXNzYWdlRGVmbGF0ZSYmKHQucGVyTWVzc2FnZURlZmxhdGV8fHt9KSwhMD09PXRoaXMucGVyTWVzc2FnZURlZmxhdGUmJih0aGlzLnBlck1lc3NhZ2VEZWZsYXRlPXt9KSx0aGlzLnBlck1lc3NhZ2VEZWZsYXRlJiZudWxsPT10aGlzLnBlck1lc3NhZ2VEZWZsYXRlLnRocmVzaG9sZCYmKHRoaXMucGVyTWVzc2FnZURlZmxhdGUudGhyZXNob2xkPTEwMjQpLHRoaXMucGZ4PXQucGZ4fHxudWxsLHRoaXMua2V5PXQua2V5fHxudWxsLHRoaXMucGFzc3BocmFzZT10LnBhc3NwaHJhc2V8fG51bGwsdGhpcy5jZXJ0PXQuY2VydHx8bnVsbCx0aGlzLmNhPXQuY2F8fG51bGwsdGhpcy5jaXBoZXJzPXQuY2lwaGVyc3x8bnVsbCx0aGlzLnJlamVjdFVuYXV0aG9yaXplZD12b2lkIDA9PT10LnJlamVjdFVuYXV0aG9yaXplZHx8dC5yZWplY3RVbmF1dGhvcml6ZWQsdGhpcy5mb3JjZU5vZGU9ISF0LmZvcmNlTm9kZSx0aGlzLmlzUmVhY3ROYXRpdmU9InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJiJzdHJpbmciPT10eXBlb2YgbmF2aWdhdG9yLnByb2R1Y3QmJiJyZWFjdG5hdGl2ZSI9PT1uYXZpZ2F0b3IucHJvZHVjdC50b0xvd2VyQ2FzZSgpLCgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGZ8fHRoaXMuaXNSZWFjdE5hdGl2ZSkmJih0LmV4dHJhSGVhZGVycyYmT2JqZWN0LmtleXModC5leHRyYUhlYWRlcnMpLmxlbmd0aD4wJiYodGhpcy5leHRyYUhlYWRlcnM9dC5leHRyYUhlYWRlcnMpLHQubG9jYWxBZGRyZXNzJiYodGhpcy5sb2NhbEFkZHJlc3M9dC5sb2NhbEFkZHJlc3MpKSx0aGlzLmlkPW51bGwsdGhpcy51cGdyYWRlcz1udWxsLHRoaXMucGluZ0ludGVydmFsPW51bGwsdGhpcy5waW5nVGltZW91dD1udWxsLHRoaXMucGluZ0ludGVydmFsVGltZXI9bnVsbCx0aGlzLnBpbmdUaW1lb3V0VGltZXI9bnVsbCx0aGlzLm9wZW4oKX1lLmV4cG9ydHM9dSx1LnByaW9yV2Vic29ja2V0U3VjY2Vzcz0hMSxyKHUucHJvdG90eXBlKSx1LnByb3RvY29sPXMucHJvdG9jb2wsdS5Tb2NrZXQ9dSx1LlRyYW5zcG9ydD1uKDkpLHUudHJhbnNwb3J0cz1uKDE0KSx1LnBhcnNlcj1uKDIpLHUucHJvdG90eXBlLmNyZWF0ZVRyYW5zcG9ydD1mdW5jdGlvbihlKXtvKCdjcmVhdGluZyB0cmFuc3BvcnQgIiVzIicsZSk7dmFyIHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9e307Zm9yKHZhciBuIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHR9KHRoaXMucXVlcnkpO3QuRUlPPXMucHJvdG9jb2wsdC50cmFuc3BvcnQ9ZTt2YXIgbj10aGlzLnRyYW5zcG9ydE9wdGlvbnNbZV18fHt9O3JldHVybiB0aGlzLmlkJiYodC5zaWQ9dGhpcy5pZCksbmV3IGlbZV0oe3F1ZXJ5OnQsc29ja2V0OnRoaXMsYWdlbnQ6bi5hZ2VudHx8dGhpcy5hZ2VudCxob3N0bmFtZTpuLmhvc3RuYW1lfHx0aGlzLmhvc3RuYW1lLHBvcnQ6bi5wb3J0fHx0aGlzLnBvcnQsc2VjdXJlOm4uc2VjdXJlfHx0aGlzLnNlY3VyZSxwYXRoOm4ucGF0aHx8dGhpcy5wYXRoLGZvcmNlSlNPTlA6bi5mb3JjZUpTT05QfHx0aGlzLmZvcmNlSlNPTlAsanNvbnA6bi5qc29ucHx8dGhpcy5qc29ucCxmb3JjZUJhc2U2NDpuLmZvcmNlQmFzZTY0fHx0aGlzLmZvcmNlQmFzZTY0LGVuYWJsZXNYRFI6bi5lbmFibGVzWERSfHx0aGlzLmVuYWJsZXNYRFIsdGltZXN0YW1wUmVxdWVzdHM6bi50aW1lc3RhbXBSZXF1ZXN0c3x8dGhpcy50aW1lc3RhbXBSZXF1ZXN0cyx0aW1lc3RhbXBQYXJhbTpuLnRpbWVzdGFtcFBhcmFtfHx0aGlzLnRpbWVzdGFtcFBhcmFtLHBvbGljeVBvcnQ6bi5wb2xpY3lQb3J0fHx0aGlzLnBvbGljeVBvcnQscGZ4Om4ucGZ4fHx0aGlzLnBmeCxrZXk6bi5rZXl8fHRoaXMua2V5LHBhc3NwaHJhc2U6bi5wYXNzcGhyYXNlfHx0aGlzLnBhc3NwaHJhc2UsY2VydDpuLmNlcnR8fHRoaXMuY2VydCxjYTpuLmNhfHx0aGlzLmNhLGNpcGhlcnM6bi5jaXBoZXJzfHx0aGlzLmNpcGhlcnMscmVqZWN0VW5hdXRob3JpemVkOm4ucmVqZWN0VW5hdXRob3JpemVkfHx0aGlzLnJlamVjdFVuYXV0aG9yaXplZCxwZXJNZXNzYWdlRGVmbGF0ZTpuLnBlck1lc3NhZ2VEZWZsYXRlfHx0aGlzLnBlck1lc3NhZ2VEZWZsYXRlLGV4dHJhSGVhZGVyczpuLmV4dHJhSGVhZGVyc3x8dGhpcy5leHRyYUhlYWRlcnMsZm9yY2VOb2RlOm4uZm9yY2VOb2RlfHx0aGlzLmZvcmNlTm9kZSxsb2NhbEFkZHJlc3M6bi5sb2NhbEFkZHJlc3N8fHRoaXMubG9jYWxBZGRyZXNzLHJlcXVlc3RUaW1lb3V0Om4ucmVxdWVzdFRpbWVvdXR8fHRoaXMucmVxdWVzdFRpbWVvdXQscHJvdG9jb2xzOm4ucHJvdG9jb2xzfHx2b2lkIDAsaXNSZWFjdE5hdGl2ZTp0aGlzLmlzUmVhY3ROYXRpdmV9KX0sdS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBlO2lmKHRoaXMucmVtZW1iZXJVcGdyYWRlJiZ1LnByaW9yV2Vic29ja2V0U3VjY2VzcyYmLTEhPT10aGlzLnRyYW5zcG9ydHMuaW5kZXhPZigid2Vic29ja2V0IikpZT0id2Vic29ja2V0IjtlbHNle2lmKDA9PT10aGlzLnRyYW5zcG9ydHMubGVuZ3RoKXt2YXIgdD10aGlzO3JldHVybiB2b2lkIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5lbWl0KCJlcnJvciIsIk5vIHRyYW5zcG9ydHMgYXZhaWxhYmxlIil9KSwwKX1lPXRoaXMudHJhbnNwb3J0c1swXX10aGlzLnJlYWR5U3RhdGU9Im9wZW5pbmciO3RyeXtlPXRoaXMuY3JlYXRlVHJhbnNwb3J0KGUpfWNhdGNoKGUpe3JldHVybiB0aGlzLnRyYW5zcG9ydHMuc2hpZnQoKSx2b2lkIHRoaXMub3BlbigpfWUub3BlbigpLHRoaXMuc2V0VHJhbnNwb3J0KGUpfSx1LnByb3RvdHlwZS5zZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oZSl7bygic2V0dGluZyB0cmFuc3BvcnQgJXMiLGUubmFtZSk7dmFyIHQ9dGhpczt0aGlzLnRyYW5zcG9ydCYmKG8oImNsZWFyaW5nIGV4aXN0aW5nIHRyYW5zcG9ydCAlcyIsdGhpcy50cmFuc3BvcnQubmFtZSksdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCkpLHRoaXMudHJhbnNwb3J0PWUsZS5vbigiZHJhaW4iLChmdW5jdGlvbigpe3Qub25EcmFpbigpfSkpLm9uKCJwYWNrZXQiLChmdW5jdGlvbihlKXt0Lm9uUGFja2V0KGUpfSkpLm9uKCJlcnJvciIsKGZ1bmN0aW9uKGUpe3Qub25FcnJvcihlKX0pKS5vbigiY2xvc2UiLChmdW5jdGlvbigpe3Qub25DbG9zZSgidHJhbnNwb3J0IGNsb3NlIil9KSl9LHUucHJvdG90eXBlLnByb2JlPWZ1bmN0aW9uKGUpe28oJ3Byb2JpbmcgdHJhbnNwb3J0ICIlcyInLGUpO3ZhciB0PXRoaXMuY3JlYXRlVHJhbnNwb3J0KGUse3Byb2JlOjF9KSxuPSExLGk9dGhpcztmdW5jdGlvbiByKCl7aWYoaS5vbmx5QmluYXJ5VXBncmFkZXMpe3ZhciByPSF0aGlzLnN1cHBvcnRzQmluYXJ5JiZpLnRyYW5zcG9ydC5zdXBwb3J0c0JpbmFyeTtuPW58fHJ9bnx8KG8oJ3Byb2JlIHRyYW5zcG9ydCAiJXMiIG9wZW5lZCcsZSksdC5zZW5kKFt7dHlwZToicGluZyIsZGF0YToicHJvYmUifV0pLHQub25jZSgicGFja2V0IiwoZnVuY3Rpb24ocil7aWYoIW4paWYoInBvbmciPT09ci50eXBlJiYicHJvYmUiPT09ci5kYXRhKXtpZihvKCdwcm9iZSB0cmFuc3BvcnQgIiVzIiBwb25nJyxlKSxpLnVwZ3JhZGluZz0hMCxpLmVtaXQoInVwZ3JhZGluZyIsdCksIXQpcmV0dXJuO3UucHJpb3JXZWJzb2NrZXRTdWNjZXNzPSJ3ZWJzb2NrZXQiPT09dC5uYW1lLG8oJ3BhdXNpbmcgY3VycmVudCB0cmFuc3BvcnQgIiVzIicsaS50cmFuc3BvcnQubmFtZSksaS50cmFuc3BvcnQucGF1c2UoKGZ1bmN0aW9uKCl7bnx8ImNsb3NlZCIhPT1pLnJlYWR5U3RhdGUmJihvKCJjaGFuZ2luZyB0cmFuc3BvcnQgYW5kIHNlbmRpbmcgdXBncmFkZSBwYWNrZXQiKSxkKCksaS5zZXRUcmFuc3BvcnQodCksdC5zZW5kKFt7dHlwZToidXBncmFkZSJ9XSksaS5lbWl0KCJ1cGdyYWRlIix0KSx0PW51bGwsaS51cGdyYWRpbmc9ITEsaS5mbHVzaCgpKX0pKX1lbHNle28oJ3Byb2JlIHRyYW5zcG9ydCAiJXMiIGZhaWxlZCcsZSk7dmFyIGE9bmV3IEVycm9yKCJwcm9iZSBlcnJvciIpO2EudHJhbnNwb3J0PXQubmFtZSxpLmVtaXQoInVwZ3JhZGVFcnJvciIsYSl9fSkpKX1mdW5jdGlvbiBhKCl7bnx8KG49ITAsZCgpLHQuY2xvc2UoKSx0PW51bGwpfWZ1bmN0aW9uIHMobil7dmFyIHI9bmV3IEVycm9yKCJwcm9iZSBlcnJvcjogIituKTtyLnRyYW5zcG9ydD10Lm5hbWUsYSgpLG8oJ3Byb2JlIHRyYW5zcG9ydCAiJXMiIGZhaWxlZCBiZWNhdXNlIG9mIGVycm9yOiAlcycsZSxuKSxpLmVtaXQoInVwZ3JhZGVFcnJvciIscil9ZnVuY3Rpb24gbCgpe3MoInRyYW5zcG9ydCBjbG9zZWQiKX1mdW5jdGlvbiBjKCl7cygic29ja2V0IGNsb3NlZCIpfWZ1bmN0aW9uIGgoZSl7dCYmZS5uYW1lIT09dC5uYW1lJiYobygnIiVzIiB3b3JrcyAtIGFib3J0aW5nICIlcyInLGUubmFtZSx0Lm5hbWUpLGEoKSl9ZnVuY3Rpb24gZCgpe3QucmVtb3ZlTGlzdGVuZXIoIm9wZW4iLHIpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixzKSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksaS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGMpLGkucmVtb3ZlTGlzdGVuZXIoInVwZ3JhZGluZyIsaCl9dS5wcmlvcldlYnNvY2tldFN1Y2Nlc3M9ITEsdC5vbmNlKCJvcGVuIixyKSx0Lm9uY2UoImVycm9yIixzKSx0Lm9uY2UoImNsb3NlIixsKSx0aGlzLm9uY2UoImNsb3NlIixjKSx0aGlzLm9uY2UoInVwZ3JhZGluZyIsaCksdC5vcGVuKCl9LHUucHJvdG90eXBlLm9uT3Blbj1mdW5jdGlvbigpe2lmKG8oInNvY2tldCBvcGVuIiksdGhpcy5yZWFkeVN0YXRlPSJvcGVuIix1LnByaW9yV2Vic29ja2V0U3VjY2Vzcz0id2Vic29ja2V0Ij09PXRoaXMudHJhbnNwb3J0Lm5hbWUsdGhpcy5lbWl0KCJvcGVuIiksdGhpcy5mbHVzaCgpLCJvcGVuIj09PXRoaXMucmVhZHlTdGF0ZSYmdGhpcy51cGdyYWRlJiZ0aGlzLnRyYW5zcG9ydC5wYXVzZSl7bygic3RhcnRpbmcgdXBncmFkZSBwcm9iZXMiKTtmb3IodmFyIGU9MCx0PXRoaXMudXBncmFkZXMubGVuZ3RoO2U8dDtlKyspdGhpcy5wcm9iZSh0aGlzLnVwZ3JhZGVzW2VdKX19LHUucHJvdG90eXBlLm9uUGFja2V0PWZ1bmN0aW9uKGUpe2lmKCJvcGVuaW5nIj09PXRoaXMucmVhZHlTdGF0ZXx8Im9wZW4iPT09dGhpcy5yZWFkeVN0YXRlfHwiY2xvc2luZyI9PT10aGlzLnJlYWR5U3RhdGUpc3dpdGNoKG8oJ3NvY2tldCByZWNlaXZlOiB0eXBlICIlcyIsIGRhdGEgIiVzIicsZS50eXBlLGUuZGF0YSksdGhpcy5lbWl0KCJwYWNrZXQiLGUpLHRoaXMuZW1pdCgiaGVhcnRiZWF0IiksZS50eXBlKXtjYXNlIm9wZW4iOnRoaXMub25IYW5kc2hha2UoSlNPTi5wYXJzZShlLmRhdGEpKTticmVhaztjYXNlInBvbmciOnRoaXMuc2V0UGluZygpLHRoaXMuZW1pdCgicG9uZyIpO2JyZWFrO2Nhc2UiZXJyb3IiOnZhciB0PW5ldyBFcnJvcigic2VydmVyIGVycm9yIik7dC5jb2RlPWUuZGF0YSx0aGlzLm9uRXJyb3IodCk7YnJlYWs7Y2FzZSJtZXNzYWdlIjp0aGlzLmVtaXQoImRhdGEiLGUuZGF0YSksdGhpcy5lbWl0KCJtZXNzYWdlIixlLmRhdGEpfWVsc2UgbygncGFja2V0IHJlY2VpdmVkIHdpdGggc29ja2V0IHJlYWR5U3RhdGUgIiVzIicsdGhpcy5yZWFkeVN0YXRlKX0sdS5wcm90b3R5cGUub25IYW5kc2hha2U9ZnVuY3Rpb24oZSl7dGhpcy5lbWl0KCJoYW5kc2hha2UiLGUpLHRoaXMuaWQ9ZS5zaWQsdGhpcy50cmFuc3BvcnQucXVlcnkuc2lkPWUuc2lkLHRoaXMudXBncmFkZXM9dGhpcy5maWx0ZXJVcGdyYWRlcyhlLnVwZ3JhZGVzKSx0aGlzLnBpbmdJbnRlcnZhbD1lLnBpbmdJbnRlcnZhbCx0aGlzLnBpbmdUaW1lb3V0PWUucGluZ1RpbWVvdXQsdGhpcy5vbk9wZW4oKSwiY2xvc2VkIiE9PXRoaXMucmVhZHlTdGF0ZSYmKHRoaXMuc2V0UGluZygpLHRoaXMucmVtb3ZlTGlzdGVuZXIoImhlYXJ0YmVhdCIsdGhpcy5vbkhlYXJ0YmVhdCksdGhpcy5vbigiaGVhcnRiZWF0Iix0aGlzLm9uSGVhcnRiZWF0KSl9LHUucHJvdG90eXBlLm9uSGVhcnRiZWF0PWZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLnBpbmdUaW1lb3V0VGltZXIpO3ZhciB0PXRoaXM7dC5waW5nVGltZW91dFRpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ImNsb3NlZCIhPT10LnJlYWR5U3RhdGUmJnQub25DbG9zZSgicGluZyB0aW1lb3V0Iil9KSxlfHx0LnBpbmdJbnRlcnZhbCt0LnBpbmdUaW1lb3V0KX0sdS5wcm90b3R5cGUuc2V0UGluZz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KGUucGluZ0ludGVydmFsVGltZXIpLGUucGluZ0ludGVydmFsVGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtvKCJ3cml0aW5nIHBpbmcgcGFja2V0IC0gZXhwZWN0aW5nIHBvbmcgd2l0aGluICVzbXMiLGUucGluZ1RpbWVvdXQpLGUucGluZygpLGUub25IZWFydGJlYXQoZS5waW5nVGltZW91dCl9KSxlLnBpbmdJbnRlcnZhbCl9LHUucHJvdG90eXBlLnBpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuc2VuZFBhY2tldCgicGluZyIsKGZ1bmN0aW9uKCl7ZS5lbWl0KCJwaW5nIil9KSl9LHUucHJvdG90eXBlLm9uRHJhaW49ZnVuY3Rpb24oKXt0aGlzLndyaXRlQnVmZmVyLnNwbGljZSgwLHRoaXMucHJldkJ1ZmZlckxlbiksdGhpcy5wcmV2QnVmZmVyTGVuPTAsMD09PXRoaXMud3JpdGVCdWZmZXIubGVuZ3RoP3RoaXMuZW1pdCgiZHJhaW4iKTp0aGlzLmZsdXNoKCl9LHUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7ImNsb3NlZCIhPT10aGlzLnJlYWR5U3RhdGUmJnRoaXMudHJhbnNwb3J0LndyaXRhYmxlJiYhdGhpcy51cGdyYWRpbmcmJnRoaXMud3JpdGVCdWZmZXIubGVuZ3RoJiYobygiZmx1c2hpbmcgJWQgcGFja2V0cyBpbiBzb2NrZXQiLHRoaXMud3JpdGVCdWZmZXIubGVuZ3RoKSx0aGlzLnRyYW5zcG9ydC5zZW5kKHRoaXMud3JpdGVCdWZmZXIpLHRoaXMucHJldkJ1ZmZlckxlbj10aGlzLndyaXRlQnVmZmVyLmxlbmd0aCx0aGlzLmVtaXQoImZsdXNoIikpfSx1LnByb3RvdHlwZS53cml0ZT11LnByb3RvdHlwZS5zZW5kPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5zZW5kUGFja2V0KCJtZXNzYWdlIixlLHQsbiksdGhpc30sdS5wcm90b3R5cGUuc2VuZFBhY2tldD1mdW5jdGlvbihlLHQsbixpKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCYmKGk9dCx0PXZvaWQgMCksImZ1bmN0aW9uIj09dHlwZW9mIG4mJihpPW4sbj1udWxsKSwiY2xvc2luZyIhPT10aGlzLnJlYWR5U3RhdGUmJiJjbG9zZWQiIT09dGhpcy5yZWFkeVN0YXRlKXsobj1ufHx7fSkuY29tcHJlc3M9ITEhPT1uLmNvbXByZXNzO3ZhciByPXt0eXBlOmUsZGF0YTp0LG9wdGlvbnM6bn07dGhpcy5lbWl0KCJwYWNrZXRDcmVhdGUiLHIpLHRoaXMud3JpdGVCdWZmZXIucHVzaChyKSxpJiZ0aGlzLm9uY2UoImZsdXNoIixpKSx0aGlzLmZsdXNoKCl9fSx1LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe2lmKCJvcGVuaW5nIj09PXRoaXMucmVhZHlTdGF0ZXx8Im9wZW4iPT09dGhpcy5yZWFkeVN0YXRlKXt0aGlzLnJlYWR5U3RhdGU9ImNsb3NpbmciO3ZhciBlPXRoaXM7dGhpcy53cml0ZUJ1ZmZlci5sZW5ndGg/dGhpcy5vbmNlKCJkcmFpbiIsKGZ1bmN0aW9uKCl7dGhpcy51cGdyYWRpbmc/aSgpOnQoKX0pKTp0aGlzLnVwZ3JhZGluZz9pKCk6dCgpfWZ1bmN0aW9uIHQoKXtlLm9uQ2xvc2UoImZvcmNlZCBjbG9zZSIpLG8oInNvY2tldCBjbG9zaW5nIC0gdGVsbGluZyB0cmFuc3BvcnQgdG8gY2xvc2UiKSxlLnRyYW5zcG9ydC5jbG9zZSgpfWZ1bmN0aW9uIG4oKXtlLnJlbW92ZUxpc3RlbmVyKCJ1cGdyYWRlIixuKSxlLnJlbW92ZUxpc3RlbmVyKCJ1cGdyYWRlRXJyb3IiLG4pLHQoKX1mdW5jdGlvbiBpKCl7ZS5vbmNlKCJ1cGdyYWRlIixuKSxlLm9uY2UoInVwZ3JhZGVFcnJvciIsbil9cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLm9uRXJyb3I9ZnVuY3Rpb24oZSl7bygic29ja2V0IGVycm9yICVqIixlKSx1LnByaW9yV2Vic29ja2V0U3VjY2Vzcz0hMSx0aGlzLmVtaXQoImVycm9yIixlKSx0aGlzLm9uQ2xvc2UoInRyYW5zcG9ydCBlcnJvciIsZSl9LHUucHJvdG90eXBlLm9uQ2xvc2U9ZnVuY3Rpb24oZSx0KXsib3BlbmluZyIhPT10aGlzLnJlYWR5U3RhdGUmJiJvcGVuIiE9PXRoaXMucmVhZHlTdGF0ZSYmImNsb3NpbmciIT09dGhpcy5yZWFkeVN0YXRlfHwobygnc29ja2V0IGNsb3NlIHdpdGggcmVhc29uOiAiJXMiJyxlKSxjbGVhclRpbWVvdXQodGhpcy5waW5nSW50ZXJ2YWxUaW1lciksY2xlYXJUaW1lb3V0KHRoaXMucGluZ1RpbWVvdXRUaW1lciksdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCJjbG9zZSIpLHRoaXMudHJhbnNwb3J0LmNsb3NlKCksdGhpcy50cmFuc3BvcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5yZWFkeVN0YXRlPSJjbG9zZWQiLHRoaXMuaWQ9bnVsbCx0aGlzLmVtaXQoImNsb3NlIixlLHQpLHRoaXMud3JpdGVCdWZmZXI9W10sdGhpcy5wcmV2QnVmZmVyTGVuPTApfSx1LnByb3RvdHlwZS5maWx0ZXJVcGdyYWRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl+YSh0aGlzLnRyYW5zcG9ydHMsZVtuXSkmJnQucHVzaChlW25dKTtyZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCl7dHJ5e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0JiYid2l0aENyZWRlbnRpYWxzImluIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaCh0KXtlLmV4cG9ydHM9ITF9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big4KSxyPW4oMTUpLG89bigxKSxhPW4oNCkscz1uKDApKCJlbmdpbmUuaW8tY2xpZW50OnBvbGxpbmcteGhyIik7ZnVuY3Rpb24gbCgpe31mdW5jdGlvbiBjKGUpe2lmKHIuY2FsbCh0aGlzLGUpLHRoaXMucmVxdWVzdFRpbWVvdXQ9ZS5yZXF1ZXN0VGltZW91dCx0aGlzLmV4dHJhSGVhZGVycz1lLmV4dHJhSGVhZGVycywidW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uKXt2YXIgdD0iaHR0cHM6Ij09PWxvY2F0aW9uLnByb3RvY29sLG49bG9jYXRpb24ucG9ydDtufHwobj10PzQ0Mzo4MCksdGhpcy54ZD0idW5kZWZpbmVkIiE9dHlwZW9mIGxvY2F0aW9uJiZlLmhvc3RuYW1lIT09bG9jYXRpb24uaG9zdG5hbWV8fG4hPT1lLnBvcnQsdGhpcy54cz1lLnNlY3VyZSE9PXR9fWZ1bmN0aW9uIHUoZSl7dGhpcy5tZXRob2Q9ZS5tZXRob2R8fCJHRVQiLHRoaXMudXJpPWUudXJpLHRoaXMueGQ9ISFlLnhkLHRoaXMueHM9ISFlLnhzLHRoaXMuYXN5bmM9ITEhPT1lLmFzeW5jLHRoaXMuZGF0YT12b2lkIDAhPT1lLmRhdGE/ZS5kYXRhOm51bGwsdGhpcy5hZ2VudD1lLmFnZW50LHRoaXMuaXNCaW5hcnk9ZS5pc0JpbmFyeSx0aGlzLnN1cHBvcnRzQmluYXJ5PWUuc3VwcG9ydHNCaW5hcnksdGhpcy5lbmFibGVzWERSPWUuZW5hYmxlc1hEUix0aGlzLnJlcXVlc3RUaW1lb3V0PWUucmVxdWVzdFRpbWVvdXQsdGhpcy5wZng9ZS5wZngsdGhpcy5rZXk9ZS5rZXksdGhpcy5wYXNzcGhyYXNlPWUucGFzc3BocmFzZSx0aGlzLmNlcnQ9ZS5jZXJ0LHRoaXMuY2E9ZS5jYSx0aGlzLmNpcGhlcnM9ZS5jaXBoZXJzLHRoaXMucmVqZWN0VW5hdXRob3JpemVkPWUucmVqZWN0VW5hdXRob3JpemVkLHRoaXMuZXh0cmFIZWFkZXJzPWUuZXh0cmFIZWFkZXJzLHRoaXMuY3JlYXRlKCl9aWYoZS5leHBvcnRzPWMsZS5leHBvcnRzLlJlcXVlc3Q9dSxhKGMsciksYy5wcm90b3R5cGUuc3VwcG9ydHNCaW5hcnk9ITAsYy5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihlKXtyZXR1cm4oZT1lfHx7fSkudXJpPXRoaXMudXJpKCksZS54ZD10aGlzLnhkLGUueHM9dGhpcy54cyxlLmFnZW50PXRoaXMuYWdlbnR8fCExLGUuc3VwcG9ydHNCaW5hcnk9dGhpcy5zdXBwb3J0c0JpbmFyeSxlLmVuYWJsZXNYRFI9dGhpcy5lbmFibGVzWERSLGUucGZ4PXRoaXMucGZ4LGUua2V5PXRoaXMua2V5LGUucGFzc3BocmFzZT10aGlzLnBhc3NwaHJhc2UsZS5jZXJ0PXRoaXMuY2VydCxlLmNhPXRoaXMuY2EsZS5jaXBoZXJzPXRoaXMuY2lwaGVycyxlLnJlamVjdFVuYXV0aG9yaXplZD10aGlzLnJlamVjdFVuYXV0aG9yaXplZCxlLnJlcXVlc3RUaW1lb3V0PXRoaXMucmVxdWVzdFRpbWVvdXQsZS5leHRyYUhlYWRlcnM9dGhpcy5leHRyYUhlYWRlcnMsbmV3IHUoZSl9LGMucHJvdG90eXBlLmRvV3JpdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0ic3RyaW5nIiE9dHlwZW9mIGUmJnZvaWQgMCE9PWUsaT10aGlzLnJlcXVlc3Qoe21ldGhvZDoiUE9TVCIsZGF0YTplLGlzQmluYXJ5Om59KSxyPXRoaXM7aS5vbigic3VjY2VzcyIsdCksaS5vbigiZXJyb3IiLChmdW5jdGlvbihlKXtyLm9uRXJyb3IoInhociBwb3N0IGVycm9yIixlKX0pKSx0aGlzLnNlbmRYaHI9aX0sYy5wcm90b3R5cGUuZG9Qb2xsPWZ1bmN0aW9uKCl7cygieGhyIHBvbGwiKTt2YXIgZT10aGlzLnJlcXVlc3QoKSx0PXRoaXM7ZS5vbigiZGF0YSIsKGZ1bmN0aW9uKGUpe3Qub25EYXRhKGUpfSkpLGUub24oImVycm9yIiwoZnVuY3Rpb24oZSl7dC5vbkVycm9yKCJ4aHIgcG9sbCBlcnJvciIsZSl9KSksdGhpcy5wb2xsWGhyPWV9LG8odS5wcm90b3R5cGUpLHUucHJvdG90eXBlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciBlPXthZ2VudDp0aGlzLmFnZW50LHhkb21haW46dGhpcy54ZCx4c2NoZW1lOnRoaXMueHMsZW5hYmxlc1hEUjp0aGlzLmVuYWJsZXNYRFJ9O2UucGZ4PXRoaXMucGZ4LGUua2V5PXRoaXMua2V5LGUucGFzc3BocmFzZT10aGlzLnBhc3NwaHJhc2UsZS5jZXJ0PXRoaXMuY2VydCxlLmNhPXRoaXMuY2EsZS5jaXBoZXJzPXRoaXMuY2lwaGVycyxlLnJlamVjdFVuYXV0aG9yaXplZD10aGlzLnJlamVjdFVuYXV0aG9yaXplZDt2YXIgdD10aGlzLnhocj1uZXcgaShlKSxuPXRoaXM7dHJ5e3MoInhociBvcGVuICVzOiAlcyIsdGhpcy5tZXRob2QsdGhpcy51cmkpLHQub3Blbih0aGlzLm1ldGhvZCx0aGlzLnVyaSx0aGlzLmFzeW5jKTt0cnl7aWYodGhpcy5leHRyYUhlYWRlcnMpZm9yKHZhciByIGluIHQuc2V0RGlzYWJsZUhlYWRlckNoZWNrJiZ0LnNldERpc2FibGVIZWFkZXJDaGVjayghMCksdGhpcy5leHRyYUhlYWRlcnMpdGhpcy5leHRyYUhlYWRlcnMuaGFzT3duUHJvcGVydHkocikmJnQuc2V0UmVxdWVzdEhlYWRlcihyLHRoaXMuZXh0cmFIZWFkZXJzW3JdKX1jYXRjaChlKXt9aWYoIlBPU1QiPT09dGhpcy5tZXRob2QpdHJ5e3RoaXMuaXNCaW5hcnk/dC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTp0LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIsInRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCIpfWNhdGNoKGUpe310cnl7dC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCIqLyoiKX1jYXRjaChlKXt9IndpdGhDcmVkZW50aWFscyJpbiB0JiYodC53aXRoQ3JlZGVudGlhbHM9ITApLHRoaXMucmVxdWVzdFRpbWVvdXQmJih0LnRpbWVvdXQ9dGhpcy5yZXF1ZXN0VGltZW91dCksdGhpcy5oYXNYRFIoKT8odC5vbmxvYWQ9ZnVuY3Rpb24oKXtuLm9uTG9hZCgpfSx0Lm9uZXJyb3I9ZnVuY3Rpb24oKXtuLm9uRXJyb3IodC5yZXNwb25zZVRleHQpfSk6dC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZigyPT09dC5yZWFkeVN0YXRlKXRyeXt2YXIgZT10LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKTtuLnN1cHBvcnRzQmluYXJ5JiYiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIj09PWUmJih0LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKX1jYXRjaChlKXt9ND09PXQucmVhZHlTdGF0ZSYmKDIwMD09PXQuc3RhdHVzfHwxMjIzPT09dC5zdGF0dXM/bi5vbkxvYWQoKTpzZXRUaW1lb3V0KChmdW5jdGlvbigpe24ub25FcnJvcih0LnN0YXR1cyl9KSwwKSl9LHMoInhociBkYXRhICVzIix0aGlzLmRhdGEpLHQuc2VuZCh0aGlzLmRhdGEpfWNhdGNoKGUpe3JldHVybiB2b2lkIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5vbkVycm9yKGUpfSksMCl9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKHRoaXMuaW5kZXg9dS5yZXF1ZXN0c0NvdW50KyssdS5yZXF1ZXN0c1t0aGlzLmluZGV4XT10aGlzKX0sdS5wcm90b3R5cGUub25TdWNjZXNzPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJzdWNjZXNzIiksdGhpcy5jbGVhbnVwKCl9LHUucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmVtaXQoImRhdGEiLGUpLHRoaXMub25TdWNjZXNzKCl9LHUucHJvdG90eXBlLm9uRXJyb3I9ZnVuY3Rpb24oZSl7dGhpcy5lbWl0KCJlcnJvciIsZSksdGhpcy5jbGVhbnVwKCEwKX0sdS5wcm90b3R5cGUuY2xlYW51cD1mdW5jdGlvbihlKXtpZih2b2lkIDAhPT10aGlzLnhociYmbnVsbCE9PXRoaXMueGhyKXtpZih0aGlzLmhhc1hEUigpP3RoaXMueGhyLm9ubG9hZD10aGlzLnhoci5vbmVycm9yPWw6dGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPWwsZSl0cnl7dGhpcy54aHIuYWJvcnQoKX1jYXRjaChlKXt9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmZGVsZXRlIHUucmVxdWVzdHNbdGhpcy5pbmRleF0sdGhpcy54aHI9bnVsbH19LHUucHJvdG90eXBlLm9uTG9hZD1mdW5jdGlvbigpe3ZhciBlO3RyeXt2YXIgdDt0cnl7dD10aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIil9Y2F0Y2goZSl7fWU9ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI9PT10JiZ0aGlzLnhoci5yZXNwb25zZXx8dGhpcy54aHIucmVzcG9uc2VUZXh0fWNhdGNoKGUpe3RoaXMub25FcnJvcihlKX1udWxsIT1lJiZ0aGlzLm9uRGF0YShlKX0sdS5wcm90b3R5cGUuaGFzWERSPWZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBYRG9tYWluUmVxdWVzdCYmIXRoaXMueHMmJnRoaXMuZW5hYmxlc1hEUn0sdS5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oKXt0aGlzLmNsZWFudXAoKX0sdS5yZXF1ZXN0c0NvdW50PTAsdS5yZXF1ZXN0cz17fSwidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhdHRhY2hFdmVudClhdHRhY2hFdmVudCgib251bmxvYWQiLGQpO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXIpe3ZhciBoPSJvbnBhZ2VoaWRlImluIHNlbGY/InBhZ2VoaWRlIjoidW5sb2FkIjthZGRFdmVudExpc3RlbmVyKGgsZCwhMSl9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZSBpbiB1LnJlcXVlc3RzKXUucmVxdWVzdHMuaGFzT3duUHJvcGVydHkoZSkmJnUucmVxdWVzdHNbZV0uYWJvcnQoKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXSxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Zm9yKHZhciBpIGluIGUpbi5jYWxsKGUsaSkmJnQucHVzaChpKTtyZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1lLmJ5dGVMZW5ndGg7aWYodD10fHwwLG49bnx8aSxlLnNsaWNlKXJldHVybiBlLnNsaWNlKHQsbik7aWYodDwwJiYodCs9aSksbjwwJiYobis9aSksbj5pJiYobj1pKSx0Pj1pfHx0Pj1ufHwwPT09aSlyZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO2Zvcih2YXIgcj1uZXcgVWludDhBcnJheShlKSxvPW5ldyBVaW50OEFycmF5KG4tdCksYT10LHM9MDthPG47YSsrLHMrKylvW3NdPXJbYV07cmV0dXJuIG8uYnVmZmVyfX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7dmFyIHI9ITE7cmV0dXJuIGk9aXx8bixvLmNvdW50PWUsMD09PWU/dCgpOm87ZnVuY3Rpb24gbyhlLG4pe2lmKG8uY291bnQ8PTApdGhyb3cgbmV3IEVycm9yKCJhZnRlciBjYWxsZWQgdG9vIG1hbnkgdGltZXMiKTstLW8uY291bnQsZT8ocj0hMCx0KGUpLHQ9aSk6MCE9PW8uY291bnR8fHJ8fHQobnVsbCxuKX19fSxmdW5jdGlvbihlLHQpewovKiEgaHR0cHM6Ly9tdGhzLmJlL3V0ZjhqcyB2Mi4xLjIgYnkgQG1hdGhpYXMgKi8KdmFyIG4saSxyLG89U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBhKGUpe2Zvcih2YXIgdCxuLGk9W10scj0wLG89ZS5sZW5ndGg7cjxvOykodD1lLmNoYXJDb2RlQXQocisrKSk+PTU1Mjk2JiZ0PD01NjMxOSYmcjxvPzU2MzIwPT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KHIrKykpKT9pLnB1c2goKCgxMDIzJnQpPDwxMCkrKDEwMjMmbikrNjU1MzYpOihpLnB1c2godCksci0tKTppLnB1c2godCk7cmV0dXJuIGl9ZnVuY3Rpb24gcyhlLHQpe2lmKGU+PTU1Mjk2JiZlPD01NzM0Myl7aWYodCl0aHJvdyBFcnJvcigiTG9uZSBzdXJyb2dhdGUgVSsiK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIiBpcyBub3QgYSBzY2FsYXIgdmFsdWUiKTtyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIG8oZT4+dCY2M3wxMjgpfWZ1bmN0aW9uIGMoZSx0KXtpZigwPT0oNDI5NDk2NzE2OCZlKSlyZXR1cm4gbyhlKTt2YXIgbj0iIjtyZXR1cm4gMD09KDQyOTQ5NjUyNDgmZSk/bj1vKGU+PjYmMzF8MTkyKTowPT0oNDI5NDkwMTc2MCZlKT8ocyhlLHQpfHwoZT02NTUzMyksbj1vKGU+PjEyJjE1fDIyNCksbis9bChlLDYpKTowPT0oNDI5Mjg3MDE0NCZlKSYmKG49byhlPj4xOCY3fDI0MCksbis9bChlLDEyKSxuKz1sKGUsNikpLG4rbyg2MyZlfDEyOCl9ZnVuY3Rpb24gdSgpe2lmKHI+PWkpdGhyb3cgRXJyb3IoIkludmFsaWQgYnl0ZSBpbmRleCIpO3ZhciBlPTI1NSZuW3JdO2lmKHIrKywxMjg9PSgxOTImZSkpcmV0dXJuIDYzJmU7dGhyb3cgRXJyb3IoIkludmFsaWQgY29udGludWF0aW9uIGJ5dGUiKX1mdW5jdGlvbiBoKGUpe3ZhciB0LG87aWYocj5pKXRocm93IEVycm9yKCJJbnZhbGlkIGJ5dGUgaW5kZXgiKTtpZihyPT1pKXJldHVybiExO2lmKHQ9MjU1Jm5bcl0scisrLDA9PSgxMjgmdCkpcmV0dXJuIHQ7aWYoMTkyPT0oMjI0JnQpKXtpZigobz0oMzEmdCk8PDZ8dSgpKT49MTI4KXJldHVybiBvO3Rocm93IEVycm9yKCJJbnZhbGlkIGNvbnRpbnVhdGlvbiBieXRlIil9aWYoMjI0PT0oMjQwJnQpKXtpZigobz0oMTUmdCk8PDEyfHUoKTw8Nnx1KCkpPj0yMDQ4KXJldHVybiBzKG8sZSk/bzo2NTUzMzt0aHJvdyBFcnJvcigiSW52YWxpZCBjb250aW51YXRpb24gYnl0ZSIpfWlmKDI0MD09KDI0OCZ0KSYmKG89KDcmdCk8PDE4fHUoKTw8MTJ8dSgpPDw2fHUoKSk+PTY1NTM2JiZvPD0xMTE0MTExKXJldHVybiBvO3Rocm93IEVycm9yKCJJbnZhbGlkIFVURi04IGRldGVjdGVkIil9ZS5leHBvcnRzPXt2ZXJzaW9uOiIyLjEuMiIsZW5jb2RlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSExIT09KHQ9dHx8e30pLnN0cmljdCxpPWEoZSkscj1pLmxlbmd0aCxvPS0xLHM9IiI7KytvPHI7KXMrPWMoaVtvXSxuKTtyZXR1cm4gc30sZGVjb2RlOmZ1bmN0aW9uKGUsdCl7dmFyIHM9ITEhPT0odD10fHx7fSkuc3RyaWN0O249YShlKSxpPW4ubGVuZ3RoLHI9MDtmb3IodmFyIGwsYz1bXTshMSE9PShsPWgocykpOyljLnB1c2gobCk7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWUubGVuZ3RoLGk9LTEscj0iIjsrK2k8bjspKHQ9ZVtpXSk+NjU1MzUmJihyKz1vKCh0LT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSx0PTU2MzIwfDEwMjMmdCkscis9byh0KTtyZXR1cm4gcn0oYyl9fX0sZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7Zm9yKHZhciBlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixuPW5ldyBVaW50OEFycmF5KDI1NiksaT0wO2k8ZS5sZW5ndGg7aSsrKW5bZS5jaGFyQ29kZUF0KGkpXT1pO3QuZW5jb2RlPWZ1bmN0aW9uKHQpe3ZhciBuLGk9bmV3IFVpbnQ4QXJyYXkodCkscj1pLmxlbmd0aCxvPSIiO2ZvcihuPTA7bjxyO24rPTMpbys9ZVtpW25dPj4yXSxvKz1lWygzJmlbbl0pPDw0fGlbbisxXT4+NF0sbys9ZVsoMTUmaVtuKzFdKTw8MnxpW24rMl0+PjZdLG8rPWVbNjMmaVtuKzJdXTtyZXR1cm4gciUzPT0yP289by5zdWJzdHJpbmcoMCxvLmxlbmd0aC0xKSsiPSI6ciUzPT0xJiYobz1vLnN1YnN0cmluZygwLG8ubGVuZ3RoLTIpKyI9PSIpLG99LHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3ZhciB0LGkscixvLGEscz0uNzUqZS5sZW5ndGgsbD1lLmxlbmd0aCxjPTA7Ij0iPT09ZVtlLmxlbmd0aC0xXSYmKHMtLSwiPSI9PT1lW2UubGVuZ3RoLTJdJiZzLS0pO3ZhciB1PW5ldyBBcnJheUJ1ZmZlcihzKSxoPW5ldyBVaW50OEFycmF5KHUpO2Zvcih0PTA7dDxsO3QrPTQpaT1uW2UuY2hhckNvZGVBdCh0KV0scj1uW2UuY2hhckNvZGVBdCh0KzEpXSxvPW5bZS5jaGFyQ29kZUF0KHQrMildLGE9bltlLmNoYXJDb2RlQXQodCszKV0saFtjKytdPWk8PDJ8cj4+NCxoW2MrK109KDE1JnIpPDw0fG8+PjIsaFtjKytdPSgzJm8pPDw2fDYzJmE7cmV0dXJuIHV9fSgpfSxmdW5jdGlvbihlLHQpe3ZhciBuPXZvaWQgMCE9PW4/bjoidW5kZWZpbmVkIiE9dHlwZW9mIFdlYktpdEJsb2JCdWlsZGVyP1dlYktpdEJsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTVNCbG9iQnVpbGRlcj9NU0Jsb2JCdWlsZGVyOiJ1bmRlZmluZWQiIT10eXBlb2YgTW96QmxvYkJ1aWxkZXImJk1vekJsb2JCdWlsZGVyLGk9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIDI9PT1uZXcgQmxvYihbImhpIl0pLnNpemV9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHI9aSYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIDI9PT1uZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkoWzEsMl0pXSkuc2l6ZX1jYXRjaChlKXtyZXR1cm4hMX19KCksbz1uJiZuLnByb3RvdHlwZS5hcHBlbmQmJm4ucHJvdG90eXBlLmdldEJsb2I7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe2lmKGUuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3ZhciB0PWUuYnVmZmVyO2lmKGUuYnl0ZUxlbmd0aCE9PXQuYnl0ZUxlbmd0aCl7dmFyIG49bmV3IFVpbnQ4QXJyYXkoZS5ieXRlTGVuZ3RoKTtuLnNldChuZXcgVWludDhBcnJheSh0LGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpKSx0PW4uYnVmZmVyfXJldHVybiB0fXJldHVybiBlfSkpfWZ1bmN0aW9uIHMoZSx0KXt0PXR8fHt9O3ZhciBpPW5ldyBuO3JldHVybiBhKGUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kuYXBwZW5kKGUpfSkpLHQudHlwZT9pLmdldEJsb2IodC50eXBlKTppLmdldEJsb2IoKX1mdW5jdGlvbiBsKGUsdCl7cmV0dXJuIG5ldyBCbG9iKGEoZSksdHx8e30pfSJ1bmRlZmluZWQiIT10eXBlb2YgQmxvYiYmKHMucHJvdG90eXBlPUJsb2IucHJvdG90eXBlLGwucHJvdG90eXBlPUJsb2IucHJvdG90eXBlKSxlLmV4cG9ydHM9aT9yP0Jsb2I6bDpvP3M6dm9pZCAwfSxmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKHQpe3ZhciBpPW4oMTUpLHI9big0KTtlLmV4cG9ydHM9dTt2YXIgbyxhPS9cbi9nLHM9L1xcbi9nO2Z1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gYygpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT10P3Q6e319ZnVuY3Rpb24gdShlKXtpZihpLmNhbGwodGhpcyxlKSx0aGlzLnF1ZXJ5PXRoaXMucXVlcnl8fHt9LCFvKXt2YXIgdD1jKCk7bz10Ll9fX2Vpbz10Ll9fX2Vpb3x8W119dGhpcy5pbmRleD1vLmxlbmd0aDt2YXIgbj10aGlzO28ucHVzaCgoZnVuY3Rpb24oZSl7bi5vbkRhdGEoZSl9KSksdGhpcy5xdWVyeS5qPXRoaXMuaW5kZXgsImZ1bmN0aW9uIj09dHlwZW9mIGFkZEV2ZW50TGlzdGVuZXImJmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsKGZ1bmN0aW9uKCl7bi5zY3JpcHQmJihuLnNjcmlwdC5vbmVycm9yPWwpfSksITEpfXIodSxpKSx1LnByb3RvdHlwZS5zdXBwb3J0c0JpbmFyeT0hMSx1LnByb3RvdHlwZS5kb0Nsb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY3JpcHQmJih0aGlzLnNjcmlwdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc2NyaXB0KSx0aGlzLnNjcmlwdD1udWxsKSx0aGlzLmZvcm0mJih0aGlzLmZvcm0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmZvcm0pLHRoaXMuZm9ybT1udWxsLHRoaXMuaWZyYW1lPW51bGwpLGkucHJvdG90eXBlLmRvQ2xvc2UuY2FsbCh0aGlzKX0sdS5wcm90b3R5cGUuZG9Qb2xsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3RoaXMuc2NyaXB0JiYodGhpcy5zY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnNjcmlwdCksdGhpcy5zY3JpcHQ9bnVsbCksdC5hc3luYz0hMCx0LnNyYz10aGlzLnVyaSgpLHQub25lcnJvcj1mdW5jdGlvbih0KXtlLm9uRXJyb3IoImpzb25wIHBvbGwgZXJyb3IiLHQpfTt2YXIgbj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07bj9uLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsbik6KGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHQpLHRoaXMuc2NyaXB0PXQsInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9nZWNrby9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGUpfSksMTAwKX0sdS5wcm90b3R5cGUuZG9Xcml0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYoIXRoaXMuZm9ybSl7dmFyIGkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIiksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGw9dGhpcy5pZnJhbWVJZD0iZWlvX2lmcmFtZV8iK3RoaXMuaW5kZXg7ci5jbGFzc05hbWU9InNvY2tldGlvIixyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsci5zdHlsZS50b3A9Ii0xMDAwcHgiLHIuc3R5bGUubGVmdD0iLTEwMDBweCIsci50YXJnZXQ9bCxyLm1ldGhvZD0iUE9TVCIsci5zZXRBdHRyaWJ1dGUoImFjY2VwdC1jaGFyc2V0IiwidXRmLTgiKSxvLm5hbWU9ImQiLHIuYXBwZW5kQ2hpbGQobyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSx0aGlzLmZvcm09cix0aGlzLmFyZWE9b31mdW5jdGlvbiBjKCl7dSgpLHQoKX1mdW5jdGlvbiB1KCl7aWYobi5pZnJhbWUpdHJ5e24uZm9ybS5yZW1vdmVDaGlsZChuLmlmcmFtZSl9Y2F0Y2goZSl7bi5vbkVycm9yKCJqc29ucCBwb2xsaW5nIGlmcmFtZSByZW1vdmFsIGVycm9yIixlKX10cnl7dmFyIGU9JzxpZnJhbWUgc3JjPSJqYXZhc2NyaXB0OjAiIG5hbWU9Iicrbi5pZnJhbWVJZCsnIj4nO2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlKX1jYXRjaChlKXsoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSkubmFtZT1uLmlmcmFtZUlkLGkuc3JjPSJqYXZhc2NyaXB0OjAifWkuaWQ9bi5pZnJhbWVJZCxuLmZvcm0uYXBwZW5kQ2hpbGQoaSksbi5pZnJhbWU9aX10aGlzLmZvcm0uYWN0aW9uPXRoaXMudXJpKCksdSgpLGU9ZS5yZXBsYWNlKHMsIlxcXG4iKSx0aGlzLmFyZWEudmFsdWU9ZS5yZXBsYWNlKGEsIlxcbiIpO3RyeXt0aGlzLmZvcm0uc3VibWl0KCl9Y2F0Y2goZSl7fXRoaXMuaWZyYW1lLmF0dGFjaEV2ZW50P3RoaXMuaWZyYW1lLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyJjb21wbGV0ZSI9PT1uLmlmcmFtZS5yZWFkeVN0YXRlJiZjKCl9OnRoaXMuaWZyYW1lLm9ubG9hZD1jfX0pLmNhbGwodGhpcyxuKDEyKSl9LGZ1bmN0aW9uKGUsdCxuKXsoZnVuY3Rpb24odCl7dmFyIGkscixvPW4oOSksYT1uKDIpLHM9bigzKSxsPW4oNCksYz1uKDE3KSx1PW4oMCkoImVuZ2luZS5pby1jbGllbnQ6d2Vic29ja2V0Iik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBXZWJTb2NrZXQpaT1XZWJTb2NrZXQ7ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYpaT1zZWxmLldlYlNvY2tldHx8c2VsZi5Nb3pXZWJTb2NrZXQ7ZWxzZSB0cnl7cj1uKDQ0KX1jYXRjaChlKXt9dmFyIGg9aXx8cjtmdW5jdGlvbiBkKGUpe2UmJmUuZm9yY2VCYXNlNjQmJih0aGlzLnN1cHBvcnRzQmluYXJ5PSExKSx0aGlzLnBlck1lc3NhZ2VEZWZsYXRlPWUucGVyTWVzc2FnZURlZmxhdGUsdGhpcy51c2luZ0Jyb3dzZXJXZWJTb2NrZXQ9aSYmIWUuZm9yY2VOb2RlLHRoaXMucHJvdG9jb2xzPWUucHJvdG9jb2xzLHRoaXMudXNpbmdCcm93c2VyV2ViU29ja2V0fHwoaD1yKSxvLmNhbGwodGhpcyxlKX1lLmV4cG9ydHM9ZCxsKGQsbyksZC5wcm90b3R5cGUubmFtZT0id2Vic29ja2V0IixkLnByb3RvdHlwZS5zdXBwb3J0c0JpbmFyeT0hMCxkLnByb3RvdHlwZS5kb09wZW49ZnVuY3Rpb24oKXtpZih0aGlzLmNoZWNrKCkpe3ZhciBlPXRoaXMudXJpKCksdD10aGlzLnByb3RvY29scyxuPXthZ2VudDp0aGlzLmFnZW50LHBlck1lc3NhZ2VEZWZsYXRlOnRoaXMucGVyTWVzc2FnZURlZmxhdGV9O24ucGZ4PXRoaXMucGZ4LG4ua2V5PXRoaXMua2V5LG4ucGFzc3BocmFzZT10aGlzLnBhc3NwaHJhc2Usbi5jZXJ0PXRoaXMuY2VydCxuLmNhPXRoaXMuY2Esbi5jaXBoZXJzPXRoaXMuY2lwaGVycyxuLnJlamVjdFVuYXV0aG9yaXplZD10aGlzLnJlamVjdFVuYXV0aG9yaXplZCx0aGlzLmV4dHJhSGVhZGVycyYmKG4uaGVhZGVycz10aGlzLmV4dHJhSGVhZGVycyksdGhpcy5sb2NhbEFkZHJlc3MmJihuLmxvY2FsQWRkcmVzcz10aGlzLmxvY2FsQWRkcmVzcyk7dHJ5e3RoaXMud3M9dGhpcy51c2luZ0Jyb3dzZXJXZWJTb2NrZXQmJiF0aGlzLmlzUmVhY3ROYXRpdmU/dD9uZXcgaChlLHQpOm5ldyBoKGUpOm5ldyBoKGUsdCxuKX1jYXRjaChlKXtyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsZSl9dm9pZCAwPT09dGhpcy53cy5iaW5hcnlUeXBlJiYodGhpcy5zdXBwb3J0c0JpbmFyeT0hMSksdGhpcy53cy5zdXBwb3J0cyYmdGhpcy53cy5zdXBwb3J0cy5iaW5hcnk/KHRoaXMuc3VwcG9ydHNCaW5hcnk9ITAsdGhpcy53cy5iaW5hcnlUeXBlPSJub2RlYnVmZmVyIik6dGhpcy53cy5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsdGhpcy5hZGRFdmVudExpc3RlbmVycygpfX0sZC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMud3Mub25vcGVuPWZ1bmN0aW9uKCl7ZS5vbk9wZW4oKX0sdGhpcy53cy5vbmNsb3NlPWZ1bmN0aW9uKCl7ZS5vbkNsb3NlKCl9LHRoaXMud3Mub25tZXNzYWdlPWZ1bmN0aW9uKHQpe2Uub25EYXRhKHQuZGF0YSl9LHRoaXMud3Mub25lcnJvcj1mdW5jdGlvbih0KXtlLm9uRXJyb3IoIndlYnNvY2tldCBlcnJvciIsdCl9fSxkLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3RoaXMud3JpdGFibGU9ITE7Zm9yKHZhciBpPWUubGVuZ3RoLHI9MCxvPWk7cjxvO3IrKykhZnVuY3Rpb24oZSl7YS5lbmNvZGVQYWNrZXQoZSxuLnN1cHBvcnRzQmluYXJ5LChmdW5jdGlvbihyKXtpZighbi51c2luZ0Jyb3dzZXJXZWJTb2NrZXQpe3ZhciBvPXt9O2Uub3B0aW9ucyYmKG8uY29tcHJlc3M9ZS5vcHRpb25zLmNvbXByZXNzKSxuLnBlck1lc3NhZ2VEZWZsYXRlJiYoInN0cmluZyI9PXR5cGVvZiByP3QuYnl0ZUxlbmd0aChyKTpyLmxlbmd0aCk8bi5wZXJNZXNzYWdlRGVmbGF0ZS50aHJlc2hvbGQmJihvLmNvbXByZXNzPSExKX10cnl7bi51c2luZ0Jyb3dzZXJXZWJTb2NrZXQ/bi53cy5zZW5kKHIpOm4ud3Muc2VuZChyLG8pfWNhdGNoKGUpe3UoIndlYnNvY2tldCBjbG9zZWQgYmVmb3JlIG9uY2xvc2UgZXZlbnQiKX0tLWl8fHMoKX0pKX0oZVtyXSk7ZnVuY3Rpb24gcygpe24uZW1pdCgiZmx1c2giKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe24ud3JpdGFibGU9ITAsbi5lbWl0KCJkcmFpbiIpfSksMCl9fSxkLnByb3RvdHlwZS5vbkNsb3NlPWZ1bmN0aW9uKCl7by5wcm90b3R5cGUub25DbG9zZS5jYWxsKHRoaXMpfSxkLnByb3RvdHlwZS5kb0Nsb3NlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy53cyYmdGhpcy53cy5jbG9zZSgpfSxkLnByb3RvdHlwZS51cmk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnF1ZXJ5fHx7fSx0PXRoaXMuc2VjdXJlPyJ3c3MiOiJ3cyIsbj0iIjtyZXR1cm4gdGhpcy5wb3J0JiYoIndzcyI9PT10JiY0NDMhPT1OdW1iZXIodGhpcy5wb3J0KXx8IndzIj09PXQmJjgwIT09TnVtYmVyKHRoaXMucG9ydCkpJiYobj0iOiIrdGhpcy5wb3J0KSx0aGlzLnRpbWVzdGFtcFJlcXVlc3RzJiYoZVt0aGlzLnRpbWVzdGFtcFBhcmFtXT1jKCkpLHRoaXMuc3VwcG9ydHNCaW5hcnl8fChlLmI2ND0xKSwoZT1zLmVuY29kZShlKSkubGVuZ3RoJiYoZT0iPyIrZSksdCsiOi8vIisoLTEhPT10aGlzLmhvc3RuYW1lLmluZGV4T2YoIjoiKT8iWyIrdGhpcy5ob3N0bmFtZSsiXSI6dGhpcy5ob3N0bmFtZSkrbit0aGlzLnBhdGgrZX0sZC5wcm90b3R5cGUuY2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4hKCFofHwiX19pbml0aWFsaXplImluIGgmJnRoaXMubmFtZT09PWQucHJvdG90eXBlLm5hbWUpfX0pLmNhbGwodGhpcyxuKDcpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXSxpPSh0PXR8fDApfHwwO2k8ZS5sZW5ndGg7aSsrKW5baS10XT1lW2ldO3JldHVybiBufX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUpe2U9ZXx8e30sdGhpcy5tcz1lLm1pbnx8MTAwLHRoaXMubWF4PWUubWF4fHwxZTQsdGhpcy5mYWN0b3I9ZS5mYWN0b3J8fDIsdGhpcy5qaXR0ZXI9ZS5qaXR0ZXI+MCYmZS5qaXR0ZXI8PTE/ZS5qaXR0ZXI6MCx0aGlzLmF0dGVtcHRzPTB9ZS5leHBvcnRzPW4sbi5wcm90b3R5cGUuZHVyYXRpb249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1zKk1hdGgucG93KHRoaXMuZmFjdG9yLHRoaXMuYXR0ZW1wdHMrKyk7aWYodGhpcy5qaXR0ZXIpe3ZhciB0PU1hdGgucmFuZG9tKCksbj1NYXRoLmZsb29yKHQqdGhpcy5qaXR0ZXIqZSk7ZT0wPT0oMSZNYXRoLmZsb29yKDEwKnQpKT9lLW46ZStufXJldHVybiAwfE1hdGgubWluKGUsdGhpcy5tYXgpfSxuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuYXR0ZW1wdHM9MH0sbi5wcm90b3R5cGUuc2V0TWluPWZ1bmN0aW9uKGUpe3RoaXMubXM9ZX0sbi5wcm90b3R5cGUuc2V0TWF4PWZ1bmN0aW9uKGUpe3RoaXMubWF4PWV9LG4ucHJvdG90eXBlLnNldEppdHRlcj1mdW5jdGlvbihlKXt0aGlzLmppdHRlcj1lfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLnIodCk7dmFyIGk9e2JlZm9yZUNyZWF0ZSgpe3RoaXMuc29ja2V0c3x8KHRoaXMuc29ja2V0cz17fSksdGhpcy5zb2NrZXRzLnN1YnNjcmliZT0oZSx0KT0+e3RoaXMuJHZ1ZVNvY2tldElvLmVtaXR0ZXIuYWRkTGlzdGVuZXIoZSx0LHRoaXMpfSx0aGlzLnNvY2tldHMudW5zdWJzY3JpYmU9ZT0+e3RoaXMuJHZ1ZVNvY2tldElvLmVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoZSx0aGlzKX19LG1vdW50ZWQoKXt0aGlzLiRvcHRpb25zLnNvY2tldHMmJk9iamVjdC5rZXlzKHRoaXMuJG9wdGlvbnMuc29ja2V0cykuZm9yRWFjaChlPT57InN1YnNjcmliZSIhPT1lJiYidW5zdWJzY3JpYmUiIT09ZSYmdGhpcy4kdnVlU29ja2V0SW8uZW1pdHRlci5hZGRMaXN0ZW5lcihlLHRoaXMuJG9wdGlvbnMuc29ja2V0c1tlXSx0aGlzKX0pfSxiZWZvcmVEZXN0cm95KCl7dGhpcy4kb3B0aW9ucy5zb2NrZXRzJiZPYmplY3Qua2V5cyh0aGlzLiRvcHRpb25zLnNvY2tldHMpLmZvckVhY2goZT0+e3RoaXMuJHZ1ZVNvY2tldElvLmVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoZSx0aGlzKX0pfX07ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fXZhciBvPW5ldyhmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLmRlYnVnPSExLHRoaXMucHJlZml4PSIlY1Z1ZS1Tb2NrZXQuaW86ICJ9dmFyIHQsbixpO3JldHVybiB0PWUsKG49W3trZXk6ImluZm8iLHZhbHVlOmZ1bmN0aW9uKGUsdD0iIil7dGhpcy5kZWJ1ZyYmd2luZG93LmNvbnNvbGUuaW5mbyh0aGlzLnByZWZpeCsiJWMiK2UsImNvbG9yOiBibHVlOyBmb250LXdlaWdodDogNjAwIiwiY29sb3I6ICMzMzMzMzMiLHQpfX0se2tleToiZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZWJ1ZyYmd2luZG93LmNvbnNvbGUuZXJyb3IodGhpcy5wcmVmaXgsLi4uYXJndW1lbnRzKX19LHtrZXk6Indhcm4iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZWJ1ZyYmd2luZG93LmNvbnNvbGUud2Fybih0aGlzLnByZWZpeCwuLi5hcmd1bWVudHMpfX0se2tleToiZXZlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdD0iIil7dGhpcy5kZWJ1ZyYmd2luZG93LmNvbnNvbGUuaW5mbyh0aGlzLnByZWZpeCsiJWMiK2UsImNvbG9yOiBibHVlOyBmb250LXdlaWdodDogNjAwIiwiY29sb3I6ICMzMzMzMzMiLHQpfX1dKSYmcih0LnByb3RvdHlwZSxuKSxpJiZyKHQsaSksZX0oKSk7ZnVuY3Rpb24gYShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fWxldCBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LG4peyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMuaW89dCx0aGlzLnJlZ2lzdGVyKCksdGhpcy5lbWl0dGVyPW59dmFyIHQsbixpO3JldHVybiB0PWUsKG49W3trZXk6InJlZ2lzdGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaW8ub25ldmVudD1lPT57bGV0W3QsLi4ubl09ZS5kYXRhOzE9PT1uLmxlbmd0aCYmKG49blswXSksdGhpcy5vbkV2ZW50KHQsbil9LGUuc3RhdGljRXZlbnRzLmZvckVhY2goZT0+dGhpcy5pby5vbihlLHQ9PnRoaXMub25FdmVudChlLHQpKSl9fSx7a2V5OiJvbkV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW1pdHRlci5lbWl0KGUsdCl9fV0pJiZhKHQucHJvdG90eXBlLG4pLGkmJmEodCxpKSxlfSgpO3ZhciBsLGMsdTtmdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLmtleSxpKX19dT1bImNvbm5lY3QiLCJlcnJvciIsImRpc2Nvbm5lY3QiLCJyZWNvbm5lY3QiLCJyZWNvbm5lY3RfYXR0ZW1wdCIsInJlY29ubmVjdGluZyIsInJlY29ubmVjdF9lcnJvciIsInJlY29ubmVjdF9mYWlsZWQiLCJjb25uZWN0X2Vycm9yIiwiY29ubmVjdF90aW1lb3V0IiwiY29ubmVjdGluZyIsInBpbmciLCJwb25nIl0sKGM9InN0YXRpY0V2ZW50cyIpaW4obD1zKT9PYmplY3QuZGVmaW5lUHJvcGVydHkobCxjLHt2YWx1ZTp1LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bFtjXT11O2xldCBkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0PXt9KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSxvLmluZm8odD8iVnVleCBhZGFwdGVyIGVuYWJsZWQiOiJWdWV4IGFkYXB0ZXIgZGlzYWJsZWQiKSxvLmluZm8odC5tdXRhdGlvblByZWZpeD8iVnVleCBzb2NrZXQgbXV0YXRpb25zIGVuYWJsZWQiOiJWdWV4IHNvY2tldCBtdXRhdGlvbnMgZGlzYWJsZWQiKSxvLmluZm8odD8iVnVleCBzb2NrZXQgYWN0aW9ucyBlbmFibGVkIjoiVnVleCBzb2NrZXQgYWN0aW9ucyBkaXNhYmxlZCIpLHRoaXMuc3RvcmU9dC5zdG9yZSx0aGlzLmFjdGlvblByZWZpeD10LmFjdGlvblByZWZpeD90LmFjdGlvblByZWZpeDoiU09DS0VUXyIsdGhpcy5tdXRhdGlvblByZWZpeD10Lm11dGF0aW9uUHJlZml4LHRoaXMubGlzdGVuZXJzPW5ldyBNYXB9dmFyIHQsbixpO3JldHVybiB0PWUsKG49W3trZXk6ImFkZExpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCJjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24iKTt0aGlzLmxpc3RlbmVycy5oYXMoZSl8fHRoaXMubGlzdGVuZXJzLnNldChlLFtdKSx0aGlzLmxpc3RlbmVycy5nZXQoZSkucHVzaCh7Y2FsbGJhY2s6dCxjb21wb25lbnQ6bn0pLG8uaW5mbyhgIyR7ZX0gc3Vic2NyaWJlLCBjb21wb25lbnQ6ICR7bi4kb3B0aW9ucy5uYW1lfWApfX0se2tleToicmVtb3ZlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5saXN0ZW5lcnMuaGFzKGUpKXtjb25zdCBuPXRoaXMubGlzdGVuZXJzLmdldChlKS5maWx0ZXIoZT0+ZS5jb21wb25lbnQhPT10KTtuLmxlbmd0aD4wP3RoaXMubGlzdGVuZXJzLnNldChlLG4pOnRoaXMubGlzdGVuZXJzLmRlbGV0ZShlKSxvLmluZm8oYCMke2V9IHVuc3Vic2NyaWJlLCBjb21wb25lbnQ6ICR7dC4kb3B0aW9ucy5uYW1lfWApfX19LHtrZXk6ImVtaXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5saXN0ZW5lcnMuaGFzKGUpJiYoby5pbmZvKGBCcm9hZGNhc3Rpbmc6ICMke2V9LCBEYXRhOmAsdCksdGhpcy5saXN0ZW5lcnMuZ2V0KGUpLmZvckVhY2goZT0+e2UuY2FsbGJhY2suY2FsbChlLmNvbXBvbmVudCx0KX0pKSwicGluZyIhPT1lJiYicG9uZyIhPT1lJiZ0aGlzLmRpc3BhdGNoU3RvcmUoZSx0KX19LHtrZXk6ImRpc3BhdGNoU3RvcmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5zdG9yZSYmdGhpcy5zdG9yZS5fYWN0aW9ucyl7bGV0IG49dGhpcy5hY3Rpb25QcmVmaXgrZTtmb3IobGV0IGUgaW4gdGhpcy5zdG9yZS5fYWN0aW9ucyllLnNwbGl0KCIvIikucG9wKCk9PT1uJiYoby5pbmZvKGBEaXNwYXRjaGluZyBBY3Rpb246ICR7ZX0sIERhdGE6YCx0KSx0aGlzLnN0b3JlLmRpc3BhdGNoKGUsdCkpO2lmKHRoaXMubXV0YXRpb25QcmVmaXgpe2xldCBuPXRoaXMubXV0YXRpb25QcmVmaXgrZTtmb3IobGV0IGUgaW4gdGhpcy5zdG9yZS5fbXV0YXRpb25zKWUuc3BsaXQoIi8iKS5wb3AoKT09PW4mJihvLmluZm8oYENvbW1pdGluZyBNdXRhdGlvbjogJHtlfSwgRGF0YTpgLHQpLHRoaXMuc3RvcmUuY29tbWl0KGUsdCkpfX19fV0pJiZoKHQucHJvdG90eXBlLG4pLGkmJmgodCxpKSxlfSgpO3ZhciBmPW4oMjIpLHA9bi5uKGYpO2Z1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkua2V5LGkpfX1uLmQodCwiZGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSk7bGV0IGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHtjb25uZWN0aW9uOnQsdnVleDpuLGRlYnVnOmksb3B0aW9uczpyfSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksby5kZWJ1Zz1pLHRoaXMuaW89dGhpcy5jb25uZWN0KHQsciksdGhpcy5lbWl0dGVyPW5ldyBkKG4pLHRoaXMubGlzdGVuZXI9bmV3IHModGhpcy5pbyx0aGlzLmVtaXR0ZXIpfXZhciB0LG4scjtyZXR1cm4gdD1lLChuPVt7a2V5OiJpbnN0YWxsIix2YWx1ZTpmdW5jdGlvbihlKXtlLnByb3RvdHlwZS4kc29ja2V0PXRoaXMuaW8sZS5wcm90b3R5cGUuJHZ1ZVNvY2tldElvPXRoaXMsZS5taXhpbihpKSxvLmluZm8oIlZ1ZS1Tb2NrZXQuaW8gcGx1Z2luIGVuYWJsZWQiKX19LHtrZXk6ImNvbm5lY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoZSYmIm9iamVjdCI9PXR5cGVvZiBlKXJldHVybiBvLmluZm8oIlJlY2VpdmVkIHNvY2tldC5pby1jbGllbnQgaW5zdGFuY2UiKSxlO2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gby5pbmZvKCJSZWNlaXZlZCBjb25uZWN0aW9uIHN0cmluZyIpLHRoaXMuaW89cCgpKGUsdCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjb25uZWN0aW9uIHR5cGUiKX19XSkmJm0odC5wcm90b3R5cGUsbiksciYmbSh0LHIpLGV9KCl9XSkuZGVmYXVsdH0pKX0sNTEzNTpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiN2IwYiIpLHI9e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuY2FsbChpKGUpLHQpfX0sNTI3MDpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImM1MzIiKSxyPW4oImM0MDEiKSxvPW4oIjJlNjciKSxhPW4oIjI0NDQiKTtmdW5jdGlvbiBzKGUpe2UuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtzKGUpLGUuaGVhZGVycz1lLmhlYWRlcnN8fHt9LGUuZGF0YT1yKGUuZGF0YSxlLmhlYWRlcnMsZS50cmFuc2Zvcm1SZXF1ZXN0KSxlLmhlYWRlcnM9aS5tZXJnZShlLmhlYWRlcnMuY29tbW9ufHx7fSxlLmhlYWRlcnNbZS5tZXRob2RdfHx7fSxlLmhlYWRlcnMpLGkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSwoZnVuY3Rpb24odCl7ZGVsZXRlIGUuaGVhZGVyc1t0XX0pKTt2YXIgdD1lLmFkYXB0ZXJ8fGEuYWRhcHRlcjtyZXR1cm4gdChlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gcyhlKSx0LmRhdGE9cih0LmRhdGEsdC5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpLHR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIG8odCl8fChzKGUpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9cih0LnJlc3BvbnNlLmRhdGEsdC5yZXNwb25zZS5oZWFkZXJzLGUudHJhbnNmb3JtUmVzcG9uc2UpKSksUHJvbWlzZS5yZWplY3QodCl9KSl9fSwiNTI3YSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKSxyPW4oIjM4NDIiKTtmdW5jdGlvbiBvKGUsdCl7ZS5lYWNoU2VyaWVzQnlUeXBlKCJ0aGVtZVJpdmVyIiwoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXRhKCksbj1lLmNvb3JkaW5hdGVTeXN0ZW0saT17fSxvPW4uZ2V0UmVjdCgpO2kucmVjdD1vO3ZhciBzPWUuZ2V0KCJib3VuZGFyeUdhcCIpLGw9bi5nZXRBeGlzKCk7aWYoaS5ib3VuZGFyeUdhcD1zLCJob3Jpem9udGFsIj09PWwub3JpZW50KXtzWzBdPXIucGFyc2VQZXJjZW50KHNbMF0sby5oZWlnaHQpLHNbMV09ci5wYXJzZVBlcmNlbnQoc1sxXSxvLmhlaWdodCk7dmFyIGM9by5oZWlnaHQtc1swXS1zWzFdO2EodCxlLGMpfWVsc2V7c1swXT1yLnBhcnNlUGVyY2VudChzWzBdLG8ud2lkdGgpLHNbMV09ci5wYXJzZVBlcmNlbnQoc1sxXSxvLndpZHRoKTt2YXIgdT1vLndpZHRoLXNbMF0tc1sxXTthKHQsZSx1KX10LnNldExheW91dCgibGF5b3V0SW5mbyIsaSl9KSl9ZnVuY3Rpb24gYShlLHQsbil7aWYoZS5jb3VudCgpKWZvcih2YXIgcixvPXQuY29vcmRpbmF0ZVN5c3RlbSxhPXQuZ2V0TGF5ZXJTZXJpZXMoKSxsPWUubWFwRGltZW5zaW9uKCJzaW5nbGUiKSxjPWUubWFwRGltZW5zaW9uKCJ2YWx1ZSIpLHU9aS5tYXAoYSwoZnVuY3Rpb24odCl7cmV0dXJuIGkubWFwKHQuaW5kaWNlcywoZnVuY3Rpb24odCl7dmFyIG49by5kYXRhVG9Qb2ludChlLmdldChsLHQpKTtyZXR1cm4gblsxXT1lLmdldChjLHQpLG59KSl9KSksaD1zKHUpLGQ9aC55MCxmPW4vaC5tYXgscD1hLmxlbmd0aCxtPWFbMF0uaW5kaWNlcy5sZW5ndGgsZz0wO2c8bTsrK2cpe3I9ZFtnXSpmLGUuc2V0SXRlbUxheW91dChhWzBdLmluZGljZXNbZ10se2xheWVySW5kZXg6MCx4OnVbMF1bZ11bMF0seTA6cix5OnVbMF1bZ11bMV0qZn0pO2Zvcih2YXIgdj0xO3Y8cDsrK3Ypcis9dVt2LTFdW2ddWzFdKmYsZS5zZXRJdGVtTGF5b3V0KGFbdl0uaW5kaWNlc1tnXSx7bGF5ZXJJbmRleDp2LHg6dVt2XVtnXVswXSx5MDpyLHk6dVt2XVtnXVsxXSpmfSl9fWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49ZVswXS5sZW5ndGgsaT1bXSxyPVtdLG89MCxhPXt9LHM9MDtzPG47KytzKXtmb3IodmFyIGw9MCxjPTA7bDx0OysrbCljKz1lW2xdW3NdWzFdO2M+byYmKG89YyksaS5wdXNoKGMpfWZvcih2YXIgdT0wO3U8bjsrK3Upclt1XT0oby1pW3VdKS8yO289MDtmb3IodmFyIGg9MDtoPG47KytoKXt2YXIgZD1pW2hdK3JbaF07ZD5vJiYobz1kKX1yZXR1cm4gYS55MD1yLGEubWF4PW8sYX1lLmV4cG9ydHM9b30sNTMxOTpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oImQ3ODQiKSxyPW4oImQwMzkiKSxvPW4oIjgyNWEiKSxhPW4oIjUwYzQiKSxzPW4oImE2OTEiKSxsPW4oIjFkODAiKSxjPW4oIjhhYTUiKSx1PW4oIjBjYjIiKSxoPW4oIjE0YzMiKSxkPW4oImI2MjIiKSxmPWQoInJlcGxhY2UiKSxwPU1hdGgubWF4LG09TWF0aC5taW4sZz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9lOlN0cmluZyhlKX0sdj1mdW5jdGlvbigpe3JldHVybiIkMCI9PT0iYSIucmVwbGFjZSgvLi8sIiQwIil9KCkseT1mdW5jdGlvbigpe3JldHVybiEhLy4vW2ZdJiYiIj09PS8uL1tmXSgiYSIsIiQwIil9KCksYj0hcigoZnVuY3Rpb24oKXt2YXIgZT0vLi87cmV0dXJuIGUuZXhlYz1mdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBlLmdyb3Vwcz17YToiNyJ9LGV9LCI3IiE9PSIiLnJlcGxhY2UoZSwiJDxhPiIpfSkpO2koInJlcGxhY2UiLChmdW5jdGlvbihlLHQsbil7dmFyIGk9eT8iJCI6IiQwIjtyZXR1cm5bZnVuY3Rpb24oZSxuKXt2YXIgaT1sKHRoaXMpLHI9dm9pZCAwPT1lP3ZvaWQgMDplW2ZdO3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChlLGksbik6dC5jYWxsKFN0cmluZyhpKSxlLG4pfSxmdW5jdGlvbihlLHIpe2lmKCJzdHJpbmciPT09dHlwZW9mIHImJi0xPT09ci5pbmRleE9mKGkpJiYtMT09PXIuaW5kZXhPZigiJDwiKSl7dmFyIGw9bih0LHRoaXMsZSxyKTtpZihsLmRvbmUpcmV0dXJuIGwudmFsdWV9dmFyIGQ9byh0aGlzKSxmPVN0cmluZyhlKSx2PSJmdW5jdGlvbiI9PT10eXBlb2Ygcjt2fHwocj1TdHJpbmcocikpO3ZhciB5PWQuZ2xvYmFsO2lmKHkpe3ZhciBiPWQudW5pY29kZTtkLmxhc3RJbmRleD0wfXZhciB4PVtdO3doaWxlKDEpe3ZhciBfPWgoZCxmKTtpZihudWxsPT09XylicmVhaztpZih4LnB1c2goXyksIXkpYnJlYWs7dmFyIHc9U3RyaW5nKF9bMF0pOyIiPT09dyYmKGQubGFzdEluZGV4PWMoZixhKGQubGFzdEluZGV4KSxiKSl9Zm9yKHZhciBTPSIiLEM9MCxrPTA7azx4Lmxlbmd0aDtrKyspe189eFtrXTtmb3IodmFyIFQ9U3RyaW5nKF9bMF0pLE09cChtKHMoXy5pbmRleCksZi5sZW5ndGgpLDApLEU9W10sST0xO0k8Xy5sZW5ndGg7SSsrKUUucHVzaChnKF9bSV0pKTt2YXIgRD1fLmdyb3VwcztpZih2KXt2YXIgQT1bVF0uY29uY2F0KEUsTSxmKTt2b2lkIDAhPT1EJiZBLnB1c2goRCk7dmFyIE89U3RyaW5nKHIuYXBwbHkodm9pZCAwLEEpKX1lbHNlIE89dShULGYsTSxFLEQscik7TT49QyYmKFMrPWYuc2xpY2UoQyxNKStPLEM9TStULmxlbmd0aCl9cmV0dXJuIFMrZi5zbGljZShDKX1dfSksIWJ8fCF2fHx5KX0sNTM3NzpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiODNhYiIpLHI9bigiOWJmMiIpLG89bigiYWQ2ZCIpLGE9bigiZDAzOSIpLHM9aSYmYSgoZnVuY3Rpb24oKXtyZXR1cm4ic3kiIT09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIpLmdldC5jYWxsKHtkb3RBbGw6ITAsc3RpY2t5OiEwfSl9KSk7cyYmci5mKFJlZ0V4cC5wcm90b3R5cGUsImZsYWdzIix7Y29uZmlndXJhYmxlOiEwLGdldDpvfSl9LCI1M2NhIjpmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJhIiwoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKTtuKCJhNGQzIiksbigiZTAxYSIpLG4oImQzYjciKSxuKCJkMjhiIiksbigiM2NhMyIpLG4oImRkYjAiKTtmdW5jdGlvbiBpKGUpe3JldHVybiBpPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxpKGUpfX0sIjUzZjMiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXt2YXIgdD1lLmNvb3JkaW5hdGVTeXN0ZW07aWYoInZpZXciIT09dC50eXBlKXJldHVybiAxO3ZhciBuPWUub3B0aW9uLm5vZGVTY2FsZVJhdGlvLGk9dC5zY2FsZSxyPWkmJmlbMF18fDEsbz10LmdldFpvb20oKSxhPShvLTEpKm4rMTtyZXR1cm4gYS9yfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5nZXRWaXN1YWwoInN5bWJvbFNpemUiKTtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5JiYodD0odFswXSt0WzFdKS8yKSwrdH10LmdldE5vZGVHbG9iYWxTY2FsZT1uLHQuZ2V0U3ltYm9sU2l6ZT1pfSw1NDUwOmZ1bmN0aW9uKGUsdCxuKXtuKCI3NDE5IiksbigiMjlhOSIpfSw1NDg4OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPW4oIjU5MjQiKTtmdW5jdGlvbiByKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7cih0aGlzLGUpfXJldHVybiBlLnByb3RvdHlwZS5iZWZvcmVFbnRlcj1mdW5jdGlvbihlKXsoMCxpLmFkZENsYXNzKShlLCJjb2xsYXBzZS10cmFuc2l0aW9uIiksZS5kYXRhc2V0fHwoZS5kYXRhc2V0PXt9KSxlLmRhdGFzZXQub2xkUGFkZGluZ1RvcD1lLnN0eWxlLnBhZGRpbmdUb3AsZS5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b209ZS5zdHlsZS5wYWRkaW5nQm90dG9tLGUuc3R5bGUuaGVpZ2h0PSIwIixlLnN0eWxlLnBhZGRpbmdUb3A9MCxlLnN0eWxlLnBhZGRpbmdCb3R0b209MH0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oZSl7ZS5kYXRhc2V0Lm9sZE92ZXJmbG93PWUuc3R5bGUub3ZlcmZsb3csMCE9PWUuc2Nyb2xsSGVpZ2h0PyhlLnN0eWxlLmhlaWdodD1lLnNjcm9sbEhlaWdodCsicHgiLGUuc3R5bGUucGFkZGluZ1RvcD1lLmRhdGFzZXQub2xkUGFkZGluZ1RvcCxlLnN0eWxlLnBhZGRpbmdCb3R0b209ZS5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b20pOihlLnN0eWxlLmhlaWdodD0iIixlLnN0eWxlLnBhZGRpbmdUb3A9ZS5kYXRhc2V0Lm9sZFBhZGRpbmdUb3AsZS5zdHlsZS5wYWRkaW5nQm90dG9tPWUuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tKSxlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4ifSxlLnByb3RvdHlwZS5hZnRlckVudGVyPWZ1bmN0aW9uKGUpeygwLGkucmVtb3ZlQ2xhc3MpKGUsImNvbGxhcHNlLXRyYW5zaXRpb24iKSxlLnN0eWxlLmhlaWdodD0iIixlLnN0eWxlLm92ZXJmbG93PWUuZGF0YXNldC5vbGRPdmVyZmxvd30sZS5wcm90b3R5cGUuYmVmb3JlTGVhdmU9ZnVuY3Rpb24oZSl7ZS5kYXRhc2V0fHwoZS5kYXRhc2V0PXt9KSxlLmRhdGFzZXQub2xkUGFkZGluZ1RvcD1lLnN0eWxlLnBhZGRpbmdUb3AsZS5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b209ZS5zdHlsZS5wYWRkaW5nQm90dG9tLGUuZGF0YXNldC5vbGRPdmVyZmxvdz1lLnN0eWxlLm92ZXJmbG93LGUuc3R5bGUuaGVpZ2h0PWUuc2Nyb2xsSGVpZ2h0KyJweCIsZS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIn0sZS5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oZSl7MCE9PWUuc2Nyb2xsSGVpZ2h0JiYoKDAsaS5hZGRDbGFzcykoZSwiY29sbGFwc2UtdHJhbnNpdGlvbiIpLGUuc3R5bGUuaGVpZ2h0PTAsZS5zdHlsZS5wYWRkaW5nVG9wPTAsZS5zdHlsZS5wYWRkaW5nQm90dG9tPTApfSxlLnByb3RvdHlwZS5hZnRlckxlYXZlPWZ1bmN0aW9uKGUpeygwLGkucmVtb3ZlQ2xhc3MpKGUsImNvbGxhcHNlLXRyYW5zaXRpb24iKSxlLnN0eWxlLmhlaWdodD0iIixlLnN0eWxlLm92ZXJmbG93PWUuZGF0YXNldC5vbGRPdmVyZmxvdyxlLnN0eWxlLnBhZGRpbmdUb3A9ZS5kYXRhc2V0Lm9sZFBhZGRpbmdUb3AsZS5zdHlsZS5wYWRkaW5nQm90dG9tPWUuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tfSxlfSgpO3QuZGVmYXVsdD17bmFtZToiRWxDb2xsYXBzZVRyYW5zaXRpb24iLGZ1bmN0aW9uYWw6ITAscmVuZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jaGlsZHJlbixpPXtvbjpuZXcgb307cmV0dXJuIGUoInRyYW5zaXRpb24iLGksbil9fX0sIjU0ZmIiOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlKXtlLmVhY2hTZXJpZXNCeVR5cGUoIm1hcCIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0KCJjb2xvciIpLG49ZS5nZXRNb2RlbCgiaXRlbVN0eWxlIiksaT1uLmdldCgiYXJlYUNvbG9yIikscj1uLmdldCgiY29sb3IiKXx8dFtlLnNlcmllc0luZGV4JXQubGVuZ3RoXTtlLmdldERhdGEoKS5zZXRWaXN1YWwoe2FyZWFDb2xvcjppLGNvbG9yOnJ9KX0pKX1lLmV4cG9ydHM9bn0sIjU1MWYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIyODJiIikscj1pKFtbImZpbGwiLCJjb2xvciJdLFsic3Ryb2tlIiwiYm9yZGVyQ29sb3IiXSxbImxpbmVXaWR0aCIsImJvcmRlcldpZHRoIl0sWyJvcGFjaXR5Il0sWyJzaGFkb3dCbHVyIl0sWyJzaGFkb3dPZmZzZXRYIl0sWyJzaGFkb3dPZmZzZXRZIl0sWyJzaGFkb3dDb2xvciJdLFsidGV4dFBvc2l0aW9uIl0sWyJ0ZXh0QWxpZ24iXV0pLG89e2dldEl0ZW1TdHlsZTpmdW5jdGlvbihlLHQpe3ZhciBuPXIodGhpcyxlLHQpLGk9dGhpcy5nZXRCb3JkZXJMaW5lRGFzaCgpO3JldHVybiBpJiYobi5saW5lRGFzaD1pKSxufSxnZXRCb3JkZXJMaW5lRGFzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0KCJib3JkZXJUeXBlIik7cmV0dXJuInNvbGlkIj09PWV8fG51bGw9PWU/bnVsbDoiZGFzaGVkIj09PWU/WzUsNV06WzEsMV19fTtlLmV4cG9ydHM9b30sNTUyMjpmdW5jdGlvbihlLHQsbil7bigiMjNlMCIpLG4oIjE3NDgiKSxuKCI2YzEyIil9LDU1MjQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPW4pfSw1NTc2OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCI0YTAxIiksbz1uKCI4OGIzIiksYT0iXDBfZWNfZGF0YVpvb21fcm9hbXMiO2Z1bmN0aW9uIHMoZSx0KXt2YXIgbj11KGUpLHI9dC5kYXRhWm9vbUlkLGE9dC5jb29yZElkO2kuZWFjaChuLChmdW5jdGlvbihlLG4pe3ZhciBvPWUuZGF0YVpvb21JbmZvcztvW3JdJiZpLmluZGV4T2YodC5hbGxDb29yZElkcyxhKTwwJiYoZGVsZXRlIG9bcl0sZS5jb3VudC0tKX0pKSxkKG4pO3ZhciBzPW5bYV07c3x8KHM9blthXT17Y29vcmRJZDphLGRhdGFab29tSW5mb3M6e30sY291bnQ6MH0scy5jb250cm9sbGVyPWgoZSxzKSxzLmRpc3BhdGNoQWN0aW9uPWkuY3VycnkoZixlKSksIXMuZGF0YVpvb21JbmZvc1tyXSYmcy5jb3VudCsrLHMuZGF0YVpvb21JbmZvc1tyXT10O3ZhciBsPXAocy5kYXRhWm9vbUluZm9zKTtzLmNvbnRyb2xsZXIuZW5hYmxlKGwuY29udHJvbFR5cGUsbC5vcHQpLHMuY29udHJvbGxlci5zZXRQb2ludGVyQ2hlY2tlcih0LmNvbnRhaW5zUG9pbnQpLG8uY3JlYXRlT3JVcGRhdGUocywiZGlzcGF0Y2hBY3Rpb24iLHQuZGF0YVpvb21Nb2RlbC5nZXQoInRocm90dGxlIiwhMCksImZpeFJhdGUiKX1mdW5jdGlvbiBsKGUsdCl7dmFyIG49dShlKTtpLmVhY2gobiwoZnVuY3Rpb24oZSl7ZS5jb250cm9sbGVyLmRpc3Bvc2UoKTt2YXIgbj1lLmRhdGFab29tSW5mb3M7blt0XSYmKGRlbGV0ZSBuW3RdLGUuY291bnQtLSl9KSksZChuKX1mdW5jdGlvbiBjKGUpe3JldHVybiBlLnR5cGUrIlwwXyIrZS5pZH1mdW5jdGlvbiB1KGUpe3ZhciB0PWUuZ2V0WnIoKTtyZXR1cm4gdFthXXx8KHRbYV09e30pfWZ1bmN0aW9uIGgoZSx0KXt2YXIgbj1uZXcgcihlLmdldFpyKCkpO3JldHVybiBpLmVhY2goWyJwYW4iLCJ6b29tIiwic2Nyb2xsTW92ZSJdLChmdW5jdGlvbihlKXtuLm9uKGUsKGZ1bmN0aW9uKG4pe3ZhciByPVtdO2kuZWFjaCh0LmRhdGFab29tSW5mb3MsKGZ1bmN0aW9uKGkpe2lmKG4uaXNBdmFpbGFibGVCZWhhdmlvcihpLmRhdGFab29tTW9kZWwub3B0aW9uKSl7dmFyIG89KGkuZ2V0UmFuZ2V8fHt9KVtlXSxhPW8mJm8odC5jb250cm9sbGVyLG4pOyFpLmRhdGFab29tTW9kZWwuZ2V0KCJkaXNhYmxlZCIsITApJiZhJiZyLnB1c2goe2RhdGFab29tSWQ6aS5kYXRhWm9vbUlkLHN0YXJ0OmFbMF0sZW5kOmFbMV19KX19KSksci5sZW5ndGgmJnQuZGlzcGF0Y2hBY3Rpb24ocil9KSl9KSksbn1mdW5jdGlvbiBkKGUpe2kuZWFjaChlLChmdW5jdGlvbih0LG4pe3QuY291bnR8fCh0LmNvbnRyb2xsZXIuZGlzcG9zZSgpLGRlbGV0ZSBlW25dKX0pKX1mdW5jdGlvbiBmKGUsdCl7ZS5kaXNwYXRjaEFjdGlvbih7dHlwZToiZGF0YVpvb20iLGJhdGNoOnR9KX1mdW5jdGlvbiBwKGUpe3ZhciB0LG49InR5cGVfIixyPXt0eXBlX3RydWU6Mix0eXBlX21vdmU6MSx0eXBlX2ZhbHNlOjAsdHlwZV91bmRlZmluZWQ6LTF9LG89ITA7cmV0dXJuIGkuZWFjaChlLChmdW5jdGlvbihlKXt2YXIgaT1lLmRhdGFab29tTW9kZWwsYT0haS5nZXQoImRpc2FibGVkIiwhMCkmJighaS5nZXQoInpvb21Mb2NrIiwhMCl8fCJtb3ZlIik7cltuK2FdPnJbbit0XSYmKHQ9YSksbyY9aS5nZXQoInByZXZlbnREZWZhdWx0TW91c2VNb3ZlIiwhMCl9KSkse2NvbnRyb2xUeXBlOnQsb3B0Ont6b29tT25Nb3VzZVdoZWVsOiEwLG1vdmVPbk1vdXNlTW92ZTohMCxtb3ZlT25Nb3VzZVdoZWVsOiEwLHByZXZlbnREZWZhdWx0TW91c2VNb3ZlOiEhb319fXQucmVnaXN0ZXI9cyx0LnVucmVnaXN0ZXI9bCx0LmdlbmVyYXRlQ29vcmRJZD1jfSwiNTVhYyI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKTtmdW5jdGlvbiByKGUsdCxuKXtpZihlJiZpLmluZGV4T2YodCxlLnR5cGUpPj0wKXt2YXIgcj1uLmdldERhdGEoKS50cmVlLnJvb3Qsbz1lLnRhcmdldE5vZGU7aWYoInN0cmluZyI9PT10eXBlb2YgbyYmKG89ci5nZXROb2RlQnlJZChvKSksbyYmci5jb250YWlucyhvKSlyZXR1cm57bm9kZTpvfTt2YXIgYT1lLnRhcmdldE5vZGVJZDtpZihudWxsIT1hJiYobz1yLmdldE5vZGVCeUlkKGEpKSlyZXR1cm57bm9kZTpvfX19ZnVuY3Rpb24gbyhlKXt2YXIgdD1bXTt3aGlsZShlKWU9ZS5wYXJlbnROb2RlLGUmJnQucHVzaChlKTtyZXR1cm4gdC5yZXZlcnNlKCl9ZnVuY3Rpb24gYShlLHQpe3ZhciBuPW8oZSk7cmV0dXJuIGkuaW5kZXhPZihuLHQpPj0wfWZ1bmN0aW9uIHMoZSx0KXt2YXIgbj1bXTt3aGlsZShlKXt2YXIgaT1lLmRhdGFJbmRleDtuLnB1c2goe25hbWU6ZS5uYW1lLGRhdGFJbmRleDppLHZhbHVlOnQuZ2V0UmF3VmFsdWUoaSl9KSxlPWUucGFyZW50Tm9kZX1yZXR1cm4gbi5yZXZlcnNlKCksbn10LnJldHJpZXZlVGFyZ2V0SW5mbz1yLHQuZ2V0UGF0aFRvUm9vdD1vLHQuYWJvdmVWaWV3Um9vdD1hLHQud3JhcFRyZWVQYXRoSW5mbz1zfSwiNTYyZSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjZkOGIiKTtmdW5jdGlvbiByKGUpe251bGwhPWUmJmkuZXh0ZW5kKHRoaXMsZSksdGhpcy5vdGhlckRpbXM9e319dmFyIG89cjtlLmV4cG9ydHM9b30sNTY5MjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiYzQzMCIpLHI9bigiYzZjZCIpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcltlXXx8KHJbZV09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMTUuMiIsbW9kZTppPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LDU2OTM6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKGUsdCl7dmFyIG4saSxyLG8sYSxzPXQueCxsPXQueSxjPXQud2lkdGgsdT10LmhlaWdodCxoPXQucjtjPDAmJihzKz1jLGM9LWMpLHU8MCYmKGwrPXUsdT0tdSksIm51bWJlciI9PT10eXBlb2YgaD9uPWk9cj1vPWg6aCBpbnN0YW5jZW9mIEFycmF5PzE9PT1oLmxlbmd0aD9uPWk9cj1vPWhbMF06Mj09PWgubGVuZ3RoPyhuPXI9aFswXSxpPW89aFsxXSk6Mz09PWgubGVuZ3RoPyhuPWhbMF0saT1vPWhbMV0scj1oWzJdKToobj1oWzBdLGk9aFsxXSxyPWhbMl0sbz1oWzNdKTpuPWk9cj1vPTAsbitpPmMmJihhPW4raSxuKj1jL2EsaSo9Yy9hKSxyK28+YyYmKGE9citvLHIqPWMvYSxvKj1jL2EpLGkrcj51JiYoYT1pK3IsaSo9dS9hLHIqPXUvYSksbitvPnUmJihhPW4rbyxuKj11L2Esbyo9dS9hKSxlLm1vdmVUbyhzK24sbCksZS5saW5lVG8ocytjLWksbCksMCE9PWkmJmUuYXJjKHMrYy1pLGwraSxpLC1NYXRoLlBJLzIsMCksZS5saW5lVG8ocytjLGwrdS1yKSwwIT09ciYmZS5hcmMocytjLXIsbCt1LXIsciwwLE1hdGguUEkvMiksZS5saW5lVG8ocytvLGwrdSksMCE9PW8mJmUuYXJjKHMrbyxsK3UtbyxvLE1hdGguUEkvMixNYXRoLlBJKSxlLmxpbmVUbyhzLGwrbiksMCE9PW4mJmUuYXJjKHMrbixsK24sbixNYXRoLlBJLDEuNSpNYXRoLlBJKX10LmJ1aWxkUGF0aD1ufSwiNTZlZiI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImQwNjYiKSxyPW4oIjI0MWMiKSxvPW4oIjc0MTgiKSxhPW4oIjgyNWEiKTtlLmV4cG9ydHM9aSgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9ci5mKGEoZSkpLG49by5mO3JldHVybiBuP3QuY29uY2F0KG4oZSkpOnR9fSwiNTg1YSI6ZnVuY3Rpb24oZSx0LG4peyhmdW5jdGlvbih0KXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuT2JqZWN0PT09T2JqZWN0JiZ0O2UuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLG4oImM4YmEiKSl9LDU4NjY6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImVmMmIiKSxyPWkuZm9yY2VMYXlvdXQsbz1uKCIxYzVmIiksYT1vLnNpbXBsZUxheW91dCxzPW4oIjk0ZTQiKSxsPXMuY2lyY3VsYXJMYXlvdXQsYz1uKCIzODQyIiksdT1jLmxpbmVhck1hcCxoPW4oIjQwMWIiKSxkPW4oIjZkOGIiKSxmPW4oIjBjMzciKSxwPWYuZ2V0Q3VydmVuZXNzRm9yRWRnZTtmdW5jdGlvbiBtKGUpe2UuZWFjaFNlcmllc0J5VHlwZSgiZ3JhcGgiLChmdW5jdGlvbihlKXt2YXIgdD1lLmNvb3JkaW5hdGVTeXN0ZW07aWYoIXR8fCJ2aWV3Ij09PXQudHlwZSlpZigiZm9yY2UiPT09ZS5nZXQoImxheW91dCIpKXt2YXIgbj1lLnByZXNlcnZlZFBvaW50c3x8e30saT1lLmdldEdyYXBoKCksbz1pLmRhdGEscz1pLmVkZ2VEYXRhLGM9ZS5nZXRNb2RlbCgiZm9yY2UiKSxmPWMuZ2V0KCJpbml0TGF5b3V0Iik7ZS5wcmVzZXJ2ZWRQb2ludHM/by5lYWNoKChmdW5jdGlvbihlKXt2YXIgdD1vLmdldElkKGUpO28uc2V0SXRlbUxheW91dChlLG5bdF18fFtOYU4sTmFOXSl9KSk6ZiYmIm5vbmUiIT09Zj8iY2lyY3VsYXIiPT09ZiYmbChlLCJ2YWx1ZSIpOmEoZSk7dmFyIG09by5nZXREYXRhRXh0ZW50KCJ2YWx1ZSIpLGc9cy5nZXREYXRhRXh0ZW50KCJ2YWx1ZSIpLHY9Yy5nZXQoInJlcHVsc2lvbiIpLHk9Yy5nZXQoImVkZ2VMZW5ndGgiKTtkLmlzQXJyYXkodil8fCh2PVt2LHZdKSxkLmlzQXJyYXkoeSl8fCh5PVt5LHldKSx5PVt5WzFdLHlbMF1dO3ZhciBiPW8ubWFwQXJyYXkoInZhbHVlIiwoZnVuY3Rpb24oZSx0KXt2YXIgbj1vLmdldEl0ZW1MYXlvdXQodCksaT11KGUsbSx2KTtyZXR1cm4gaXNOYU4oaSkmJihpPSh2WzBdK3ZbMV0pLzIpLHt3OmkscmVwOmksZml4ZWQ6by5nZXRJdGVtTW9kZWwodCkuZ2V0KCJmaXhlZCIpLHA6IW58fGlzTmFOKG5bMF0pfHxpc05hTihuWzFdKT9udWxsOm59fSkpLHg9cy5tYXBBcnJheSgidmFsdWUiLChmdW5jdGlvbih0LG4pe3ZhciByPWkuZ2V0RWRnZUJ5SW5kZXgobiksbz11KHQsZyx5KTtpc05hTihvKSYmKG89KHlbMF0reVsxXSkvMik7dmFyIGE9ci5nZXRNb2RlbCgpLHM9ZC5yZXRyaWV2ZTMoYS5nZXQoImxpbmVTdHlsZS5jdXJ2ZW5lc3MiKSwtcChyLGUsbiwhMCksMCk7cmV0dXJue24xOmJbci5ub2RlMS5kYXRhSW5kZXhdLG4yOmJbci5ub2RlMi5kYXRhSW5kZXhdLGQ6byxjdXJ2ZW5lc3M6cyxpZ25vcmVGb3JjZUxheW91dDphLmdldCgiaWdub3JlRm9yY2VMYXlvdXQiKX19KSksXz0odD1lLmNvb3JkaW5hdGVTeXN0ZW0sdC5nZXRCb3VuZGluZ1JlY3QoKSksdz1yKGIseCx7cmVjdDpfLGdyYXZpdHk6Yy5nZXQoImdyYXZpdHkiKSxmcmljdGlvbjpjLmdldCgiZnJpY3Rpb24iKX0pLFM9dy5zdGVwO3cuc3RlcD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWIubGVuZ3RoO3Q8cjt0KyspYlt0XS5maXhlZCYmaC5jb3B5KGJbdF0ucCxpLmdldE5vZGVCeUluZGV4KHQpLmdldExheW91dCgpKTtTKChmdW5jdGlvbih0LHIsYSl7Zm9yKHZhciBzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXRbc10uZml4ZWR8fGkuZ2V0Tm9kZUJ5SW5kZXgocykuc2V0TGF5b3V0KHRbc10ucCksbltvLmdldElkKHMpXT10W3NdLnA7Zm9yKHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspe3ZhciBjPXJbc10sdT1pLmdldEVkZ2VCeUluZGV4KHMpLGQ9Yy5uMS5wLGY9Yy5uMi5wLHA9dS5nZXRMYXlvdXQoKTtwPXA/cC5zbGljZSgpOltdLHBbMF09cFswXXx8W10scFsxXT1wWzFdfHxbXSxoLmNvcHkocFswXSxkKSxoLmNvcHkocFsxXSxmKSwrYy5jdXJ2ZW5lc3MmJihwWzJdPVsoZFswXStmWzBdKS8yLShkWzFdLWZbMV0pKmMuY3VydmVuZXNzLChkWzFdK2ZbMV0pLzItKGZbMF0tZFswXSkqYy5jdXJ2ZW5lc3NdKSx1LnNldExheW91dChwKX1lJiZlKGEpfSkpfSxlLmZvcmNlTGF5b3V0PXcsZS5wcmVzZXJ2ZWRQb2ludHM9bix3LnN0ZXAoKX1lbHNlIGUuZm9yY2VMYXlvdXQ9bnVsbH0pKX1lLmV4cG9ydHM9bX0sNTg5OTpmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0iXHRcblx2XGZcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LCI1OGE4IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiMWQ4MCIpLHI9bigiNTg5OSIpLG89IlsiK3IrIl0iLGE9UmVnRXhwKCJeIitvK28rIioiKSxzPVJlZ0V4cChvK28rIiokIiksbD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49U3RyaW5nKGkodCkpO3JldHVybiAxJmUmJihuPW4ucmVwbGFjZShhLCIiKSksMiZlJiYobj1uLnJlcGxhY2UocywiIikpLG59fTtlLmV4cG9ydHM9e3N0YXJ0OmwoMSksZW5kOmwoMiksdHJpbTpsKDMpfX0sIjU4ZGYiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI2ZDhiIikscj1uKCIyMzA2Iik7ZnVuY3Rpb24gbyhlLHQsbixvKXt2YXIgYT1uLmF4aXM7aWYoIWEuc2NhbGUuaXNCbGFuaygpKXt2YXIgcz1uLmdldE1vZGVsKCJzcGxpdEFyZWEiKSxsPXMuZ2V0TW9kZWwoImFyZWFTdHlsZSIpLGM9bC5nZXQoImNvbG9yIiksdT1vLmNvb3JkaW5hdGVTeXN0ZW0uZ2V0UmVjdCgpLGg9YS5nZXRUaWNrc0Nvb3Jkcyh7dGlja01vZGVsOnMsY2xhbXA6ITB9KTtpZihoLmxlbmd0aCl7dmFyIGQ9Yy5sZW5ndGgsZj1lLl9fc3BsaXRBcmVhQ29sb3JzLHA9aS5jcmVhdGVIYXNoTWFwKCksbT0wO2lmKGYpZm9yKHZhciBnPTA7ZzxoLmxlbmd0aDtnKyspe3ZhciB2PWYuZ2V0KGhbZ10udGlja1ZhbHVlKTtpZihudWxsIT12KXttPSh2KyhkLTEpKmcpJWQ7YnJlYWt9fXZhciB5PWEudG9HbG9iYWxDb29yZChoWzBdLmNvb3JkKSxiPWwuZ2V0QXJlYVN0eWxlKCk7Yz1pLmlzQXJyYXkoYyk/YzpbY107Zm9yKGc9MTtnPGgubGVuZ3RoO2crKyl7dmFyIHgsXyx3LFMsQz1hLnRvR2xvYmFsQ29vcmQoaFtnXS5jb29yZCk7YS5pc0hvcml6b250YWwoKT8oeD15LF89dS55LHc9Qy14LFM9dS5oZWlnaHQseT14K3cpOih4PXUueCxfPXksdz11LndpZHRoLFM9Qy1fLHk9XytTKTt2YXIgaz1oW2ctMV0udGlja1ZhbHVlO251bGwhPWsmJnAuc2V0KGssbSksdC5hZGQobmV3IHIuUmVjdCh7YW5pZDpudWxsIT1rPyJhcmVhXyIrazpudWxsLHNoYXBlOnt4OngseTpfLHdpZHRoOncsaGVpZ2h0OlN9LHN0eWxlOmkuZGVmYXVsdHMoe2ZpbGw6Y1ttXX0sYiksc2lsZW50OiEwfSkpLG09KG0rMSklZH1lLl9fc3BsaXRBcmVhQ29sb3JzPXB9fX1mdW5jdGlvbiBhKGUpe2UuX19zcGxpdEFyZWFDb2xvcnM9bnVsbH10LnJlY3RDb29yZEF4aXNCdWlsZFNwbGl0QXJlYT1vLHQucmVjdENvb3JkQXhpc0hhbmRsZVJlbW92ZT1hfSw1OTI0OmZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwLHQuaXNJbkNvbnRhaW5lcj10LmdldFNjcm9sbENvbnRhaW5lcj10LmlzU2Nyb2xsPXQuZ2V0U3R5bGU9dC5vbmNlPXQub2ZmPXQub249dm9pZCAwO3ZhciBpPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt0Lmhhc0NsYXNzPW0sdC5hZGRDbGFzcz1nLHQucmVtb3ZlQ2xhc3M9dix0LnNldFN0eWxlPWI7dmFyIHI9bigiMmIwZSIpLG89YShyKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgcz1vLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcixsPS8oW1w6XC1cX10rKC4pKS9nLGM9L15tb3ooW0EtWl0pLyx1PXM/MDpOdW1iZXIoZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSxoPWZ1bmN0aW9uKGUpe3JldHVybihlfHwiIikucmVwbGFjZSgvXltcc1x1RkVGRl0rfFtcc1x1RkVGRl0rJC9nLCIiKX0sZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGwsKGZ1bmN0aW9uKGUsdCxuLGkpe3JldHVybiBpP24udG9VcHBlckNhc2UoKTpufSkpLnJlcGxhY2UoYywiTW96JDEiKX0sZj10Lm9uPWZ1bmN0aW9uKCl7cmV0dXJuIXMmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LG4pe2UmJnQmJm4mJmUuYWRkRXZlbnRMaXN0ZW5lcih0LG4sITEpfTpmdW5jdGlvbihlLHQsbil7ZSYmdCYmbiYmZS5hdHRhY2hFdmVudCgib24iK3Qsbil9fSgpLHA9dC5vZmY9ZnVuY3Rpb24oKXtyZXR1cm4hcyYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihlLHQsbil7ZSYmdCYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9OmZ1bmN0aW9uKGUsdCxuKXtlJiZ0JiZlLmRldGFjaEV2ZW50KCJvbiIrdCxuKX19KCk7dC5vbmNlPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1mdW5jdGlvbiBpKCl7biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cykscChlLHQsaSl9O2YoZSx0LGkpfTtmdW5jdGlvbiBtKGUsdCl7aWYoIWV8fCF0KXJldHVybiExO2lmKC0xIT09dC5pbmRleE9mKCIgIikpdGhyb3cgbmV3IEVycm9yKCJjbGFzc05hbWUgc2hvdWxkIG5vdCBjb250YWluIHNwYWNlLiIpO3JldHVybiBlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5jb250YWlucyh0KTooIiAiK2UuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrdCsiICIpPi0xfWZ1bmN0aW9uIGcoZSx0KXtpZihlKXtmb3IodmFyIG49ZS5jbGFzc05hbWUsaT0odHx8IiIpLnNwbGl0KCIgIikscj0wLG89aS5sZW5ndGg7cjxvO3IrKyl7dmFyIGE9aVtyXTthJiYoZS5jbGFzc0xpc3Q/ZS5jbGFzc0xpc3QuYWRkKGEpOm0oZSxhKXx8KG4rPSIgIithKSl9ZS5jbGFzc0xpc3R8fGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsbil9fWZ1bmN0aW9uIHYoZSx0KXtpZihlJiZ0KXtmb3IodmFyIG49dC5zcGxpdCgiICIpLGk9IiAiK2UuY2xhc3NOYW1lKyIgIixyPTAsbz1uLmxlbmd0aDtyPG87cisrKXt2YXIgYT1uW3JdO2EmJihlLmNsYXNzTGlzdD9lLmNsYXNzTGlzdC5yZW1vdmUoYSk6bShlLGEpJiYoaT1pLnJlcGxhY2UoIiAiK2ErIiAiLCIgIikpKX1lLmNsYXNzTGlzdHx8ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIixoKGkpKX19dmFyIHk9dC5nZXRTdHlsZT11PDk/ZnVuY3Rpb24oZSx0KXtpZighcyl7aWYoIWV8fCF0KXJldHVybiBudWxsO3Q9ZCh0KSwiZmxvYXQiPT09dCYmKHQ9InN0eWxlRmxvYXQiKTt0cnl7c3dpdGNoKHQpe2Nhc2Uib3BhY2l0eSI6dHJ5e3JldHVybiBlLmZpbHRlcnMuaXRlbSgiYWxwaGEiKS5vcGFjaXR5LzEwMH1jYXRjaChuKXtyZXR1cm4gMX1kZWZhdWx0OnJldHVybiBlLnN0eWxlW3RdfHxlLmN1cnJlbnRTdHlsZT9lLmN1cnJlbnRTdHlsZVt0XTpudWxsfX1jYXRjaChuKXtyZXR1cm4gZS5zdHlsZVt0XX19fTpmdW5jdGlvbihlLHQpe2lmKCFzKXtpZighZXx8IXQpcmV0dXJuIG51bGw7dD1kKHQpLCJmbG9hdCI9PT10JiYodD0iY3NzRmxvYXQiKTt0cnl7dmFyIG49ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLCIiKTtyZXR1cm4gZS5zdHlsZVt0XXx8bj9uW3RdOm51bGx9Y2F0Y2goaSl7cmV0dXJuIGUuc3R5bGVbdF19fX07ZnVuY3Rpb24gYihlLHQsbil7aWYoZSYmdClpZigib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiB0PyJ1bmRlZmluZWQiOmkodCkpKWZvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJmIoZSxyLHRbcl0pO2Vsc2UgdD1kKHQpLCJvcGFjaXR5Ij09PXQmJnU8OT9lLnN0eWxlLmZpbHRlcj1pc05hTihuKT8iIjoiYWxwaGEob3BhY2l0eT0iKzEwMCpuKyIpIjplLnN0eWxlW3RdPW59dmFyIHg9dC5pc1Njcm9sbD1mdW5jdGlvbihlLHQpe2lmKCFzKXt2YXIgbj1udWxsIT09dCYmdm9pZCAwIT09dCxpPXkoZSxuP3Q/Im92ZXJmbG93LXkiOiJvdmVyZmxvdy14Ijoib3ZlcmZsb3ciKTtyZXR1cm4gaS5tYXRjaCgvKHNjcm9sbHxhdXRvKS8pfX07dC5nZXRTY3JvbGxDb250YWluZXI9ZnVuY3Rpb24oZSx0KXtpZighcyl7dmFyIG49ZTt3aGlsZShuKXtpZihbd2luZG93LGRvY3VtZW50LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudF0uaW5jbHVkZXMobikpcmV0dXJuIHdpbmRvdztpZih4KG4sdCkpcmV0dXJuIG47bj1uLnBhcmVudE5vZGV9cmV0dXJuIG59fSx0LmlzSW5Db250YWluZXI9ZnVuY3Rpb24oZSx0KXtpZihzfHwhZXx8IXQpcmV0dXJuITE7dmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXZvaWQgMDtyZXR1cm4gaT1bd2luZG93LGRvY3VtZW50LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxudWxsLHZvaWQgMF0uaW5jbHVkZXModCk/e3RvcDowLHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHQsbGVmdDowfTp0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG4udG9wPGkuYm90dG9tJiZuLmJvdHRvbT5pLnRvcCYmbi5yaWdodD5pLmxlZnQmJm4ubGVmdDxpLnJpZ2h0fX0sIjU5N2YiOmZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByLG89MDtmdW5jdGlvbiBhKCl7dmFyIGE9dGhpcyxzPU51bWJlcihuZXcgRGF0ZSktbyxsPWFyZ3VtZW50cztmdW5jdGlvbiBjKCl7bz1OdW1iZXIobmV3IERhdGUpLG4uYXBwbHkoYSxsKX1mdW5jdGlvbiB1KCl7cj12b2lkIDB9aSYmIXImJmMoKSxyJiZjbGVhclRpbWVvdXQociksdm9pZCAwPT09aSYmcz5lP2MoKTohMCE9PXQmJihyPXNldFRpbWVvdXQoaT91OmMsdm9pZCAwPT09aT9lLXM6ZSkpfXJldHVybiJib29sZWFuIiE9PXR5cGVvZiB0JiYoaT1uLG49dCx0PXZvaWQgMCksYX19LCI1YTM0IjpmdW5jdGlvbihlLHQsbil7dmFyIGk9bigiNDRlNyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihpKGUpKXRocm93IFR5cGVFcnJvcigiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIGV9fSwiNWE5NCI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oImIzNjciKSgia2V5cyIpLHI9bigiOGIxYSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09cihlKSl9fSwiNWFhOSI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oIjRlMDgiKSxyPShpLl9fREVWX18sbigiNmQ4YiIpKSxvPXIuaXNPYmplY3QsYT1yLmVhY2gscz1yLm1hcCxsPXIuaW5kZXhPZixjPShyLnJldHJpZXZlLG4oImY5MzQiKSksdT1jLmdldExheW91dFJlY3QsaD1uKCI2OTdlIiksZD1oLmNyZWF0ZVNjYWxlQnlNb2RlbCxmPWguaWZBeGlzQ3Jvc3NaZXJvLHA9aC5uaWNlU2NhbGVFeHRlbnQsbT1oLmVzdGltYXRlTGFiZWxVbmlvblJlY3QsZz1uKCJjYmU5Iiksdj1uKCJlYzAyIikseT1uKCIyMDM5IiksYj1uKCJlZTFhIikseD1iLmdldFN0YWNrZWREaW1lbnNpb247ZnVuY3Rpb24gXyhlLHQsbil7cmV0dXJuIGUuZ2V0Q29vcmRTeXNNb2RlbCgpPT09dH1mdW5jdGlvbiB3KGUsdCxuKXt0aGlzLl9jb29yZHNNYXA9e30sdGhpcy5fY29vcmRzTGlzdD1bXSx0aGlzLl9heGVzTWFwPXt9LHRoaXMuX2F4ZXNMaXN0PVtdLHRoaXMuX2luaXRDYXJ0ZXNpYW4oZSx0LG4pLHRoaXMubW9kZWw9ZX1uKCI4ZWQyIik7dmFyIFM9dy5wcm90b3R5cGU7ZnVuY3Rpb24gQyhlLHQsbixpKXtuLmdldEF4ZXNPblplcm9PZj1mdW5jdGlvbigpe3JldHVybiByP1tyXTpbXX07dmFyIHIsbz1lW3RdLGE9bi5tb2RlbCxzPWEuZ2V0KCJheGlzTGluZS5vblplcm8iKSxsPWEuZ2V0KCJheGlzTGluZS5vblplcm9BeGlzSW5kZXgiKTtpZihzKXtpZihudWxsIT1sKWsob1tsXSkmJihyPW9bbF0pO2Vsc2UgZm9yKHZhciBjIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShjKSYmayhvW2NdKSYmIWlbdShvW2NdKV0pe3I9b1tjXTticmVha31yJiYoaVt1KHIpXT0hMCl9ZnVuY3Rpb24gdShlKXtyZXR1cm4gZS5kaW0rIl8iK2UuaW5kZXh9fWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGUmJiJjYXRlZ29yeSIhPT1lLnR5cGUmJiJ0aW1lIiE9PWUudHlwZSYmZihlKX1mdW5jdGlvbiBUKGUsdCl7dmFyIG49ZS5nZXRFeHRlbnQoKSxpPW5bMF0rblsxXTtlLnRvR2xvYmFsQ29vcmQ9IngiPT09ZS5kaW0/ZnVuY3Rpb24oZSl7cmV0dXJuIGUrdH06ZnVuY3Rpb24oZSl7cmV0dXJuIGktZSt0fSxlLnRvTG9jYWxDb29yZD0ieCI9PT1lLmRpbT9mdW5jdGlvbihlKXtyZXR1cm4gZS10fTpmdW5jdGlvbihlKXtyZXR1cm4gaS1lK3R9fVMudHlwZT0iZ3JpZCIsUy5heGlzUG9pbnRlckVuYWJsZWQ9ITAsUy5nZXRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlY3R9LFMudXBkYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fYXhlc01hcDt0aGlzLl91cGRhdGVTY2FsZShlLHRoaXMubW9kZWwpLGEobi54LChmdW5jdGlvbihlKXtwKGUuc2NhbGUsZS5tb2RlbCl9KSksYShuLnksKGZ1bmN0aW9uKGUpe3AoZS5zY2FsZSxlLm1vZGVsKX0pKTt2YXIgaT17fTthKG4ueCwoZnVuY3Rpb24oZSl7QyhuLCJ5IixlLGkpfSkpLGEobi55LChmdW5jdGlvbihlKXtDKG4sIngiLGUsaSl9KSksdGhpcy5yZXNpemUodGhpcy5tb2RlbCx0KX0sUy5yZXNpemU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXUoZS5nZXRCb3hMYXlvdXRQYXJhbXMoKSx7d2lkdGg6dC5nZXRXaWR0aCgpLGhlaWdodDp0LmdldEhlaWdodCgpfSk7dGhpcy5fcmVjdD1pO3ZhciByPXRoaXMuX2F4ZXNMaXN0O2Z1bmN0aW9uIG8oKXthKHIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaXNIb3Jpem9udGFsKCksbj10P1swLGkud2lkdGhdOlswLGkuaGVpZ2h0XSxyPWUuaW52ZXJzZT8xOjA7ZS5zZXRFeHRlbnQobltyXSxuWzEtcl0pLFQoZSx0P2kueDppLnkpfSkpfW8oKSwhbiYmZS5nZXQoImNvbnRhaW5MYWJlbCIpJiYoYShyLChmdW5jdGlvbihlKXtpZighZS5tb2RlbC5nZXQoImF4aXNMYWJlbC5pbnNpZGUiKSl7dmFyIHQ9bShlKTtpZih0KXt2YXIgbj1lLmlzSG9yaXpvbnRhbCgpPyJoZWlnaHQiOiJ3aWR0aCIscj1lLm1vZGVsLmdldCgiYXhpc0xhYmVsLm1hcmdpbiIpO2lbbl0tPXRbbl0rciwidG9wIj09PWUucG9zaXRpb24/aS55Kz10LmhlaWdodCtyOiJsZWZ0Ij09PWUucG9zaXRpb24mJihpLngrPXQud2lkdGgrcil9fX0pKSxvKCkpfSxTLmdldEF4aXM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9heGVzTWFwW2VdO2lmKG51bGwhPW4pe2lmKG51bGw9PXQpZm9yKHZhciBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSlyZXR1cm4gbltpXTtyZXR1cm4gblt0XX19LFMuZ2V0QXhlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9heGVzTGlzdC5zbGljZSgpfSxTLmdldENhcnRlc2lhbj1mdW5jdGlvbihlLHQpe2lmKG51bGwhPWUmJm51bGwhPXQpe3ZhciBuPSJ4IitlKyJ5Iit0O3JldHVybiB0aGlzLl9jb29yZHNNYXBbbl19byhlKSYmKHQ9ZS55QXhpc0luZGV4LGU9ZS54QXhpc0luZGV4KTtmb3IodmFyIGk9MCxyPXRoaXMuX2Nvb3Jkc0xpc3Q7aTxyLmxlbmd0aDtpKyspaWYocltpXS5nZXRBeGlzKCJ4IikuaW5kZXg9PT1lfHxyW2ldLmdldEF4aXMoInkiKS5pbmRleD09PXQpcmV0dXJuIHJbaV19LFMuZ2V0Q2FydGVzaWFucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb29yZHNMaXN0LnNsaWNlKCl9LFMuY29udmVydFRvUGl4ZWw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMuX2ZpbmRDb252ZXJ0VGFyZ2V0KGUsdCk7cmV0dXJuIGkuY2FydGVzaWFuP2kuY2FydGVzaWFuLmRhdGFUb1BvaW50KG4pOmkuYXhpcz9pLmF4aXMudG9HbG9iYWxDb29yZChpLmF4aXMuZGF0YVRvQ29vcmQobikpOm51bGx9LFMuY29udmVydEZyb21QaXhlbD1mdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy5fZmluZENvbnZlcnRUYXJnZXQoZSx0KTtyZXR1cm4gaS5jYXJ0ZXNpYW4/aS5jYXJ0ZXNpYW4ucG9pbnRUb0RhdGEobik6aS5heGlzP2kuYXhpcy5jb29yZFRvRGF0YShpLmF4aXMudG9Mb2NhbENvb3JkKG4pKTpudWxsfSxTLl9maW5kQ29udmVydFRhcmdldD1mdW5jdGlvbihlLHQpe3ZhciBuLGkscj10LnNlcmllc01vZGVsLG89dC54QXhpc01vZGVsfHxyJiZyLmdldFJlZmVycmluZ0NvbXBvbmVudHMoInhBeGlzIilbMF0sYT10LnlBeGlzTW9kZWx8fHImJnIuZ2V0UmVmZXJyaW5nQ29tcG9uZW50cygieUF4aXMiKVswXSxzPXQuZ3JpZE1vZGVsLGM9dGhpcy5fY29vcmRzTGlzdDtpZihyKW49ci5jb29yZGluYXRlU3lzdGVtLGwoYyxuKTwwJiYobj1udWxsKTtlbHNlIGlmKG8mJmEpbj10aGlzLmdldENhcnRlc2lhbihvLmNvbXBvbmVudEluZGV4LGEuY29tcG9uZW50SW5kZXgpO2Vsc2UgaWYobylpPXRoaXMuZ2V0QXhpcygieCIsby5jb21wb25lbnRJbmRleCk7ZWxzZSBpZihhKWk9dGhpcy5nZXRBeGlzKCJ5IixhLmNvbXBvbmVudEluZGV4KTtlbHNlIGlmKHMpe3ZhciB1PXMuY29vcmRpbmF0ZVN5c3RlbTt1PT09dGhpcyYmKG49dGhpcy5fY29vcmRzTGlzdFswXSl9cmV0dXJue2NhcnRlc2lhbjpuLGF4aXM6aX19LFMuY29udGFpblBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2Nvb3Jkc0xpc3RbMF07aWYodClyZXR1cm4gdC5jb250YWluUG9pbnQoZSl9LFMuX2luaXRDYXJ0ZXNpYW49ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXtsZWZ0OiExLHJpZ2h0OiExLHRvcDohMSxib3R0b206ITF9LHI9e3g6e30seTp7fX0sbz17eDowLHk6MH07aWYodC5lYWNoQ29tcG9uZW50KCJ4QXhpcyIscygieCIpLHRoaXMpLHQuZWFjaENvbXBvbmVudCgieUF4aXMiLHMoInkiKSx0aGlzKSwhby54fHwhby55KXJldHVybiB0aGlzLl9heGVzTWFwPXt9LHZvaWQodGhpcy5fYXhlc0xpc3Q9W10pO2Z1bmN0aW9uIHMobil7cmV0dXJuIGZ1bmN0aW9uKGEscyl7aWYoXyhhLGUsdCkpe3ZhciBsPWEuZ2V0KCJwb3NpdGlvbiIpOyJ4Ij09PW4/InRvcCIhPT1sJiYiYm90dG9tIiE9PWwmJihsPWkuYm90dG9tPyJ0b3AiOiJib3R0b20iKToibGVmdCIhPT1sJiYicmlnaHQiIT09bCYmKGw9aS5sZWZ0PyJyaWdodCI6ImxlZnQiKSxpW2xdPSEwO3ZhciBjPW5ldyB2KG4sZChhKSxbMCwwXSxhLmdldCgidHlwZSIpLGwpLHU9ImNhdGVnb3J5Ij09PWMudHlwZTtjLm9uQmFuZD11JiZhLmdldCgiYm91bmRhcnlHYXAiKSxjLmludmVyc2U9YS5nZXQoImludmVyc2UiKSxhLmF4aXM9YyxjLm1vZGVsPWEsYy5ncmlkPXRoaXMsYy5pbmRleD1zLHRoaXMuX2F4ZXNMaXN0LnB1c2goYykscltuXVtzXT1jLG9bbl0rK319fXRoaXMuX2F4ZXNNYXA9cixhKHIueCwoZnVuY3Rpb24odCxuKXthKHIueSwoZnVuY3Rpb24oaSxyKXt2YXIgbz0ieCIrbisieSIrcixhPW5ldyBnKG8pO2EuZ3JpZD10aGlzLGEubW9kZWw9ZSx0aGlzLl9jb29yZHNNYXBbb109YSx0aGlzLl9jb29yZHNMaXN0LnB1c2goYSksYS5hZGRBeGlzKHQpLGEuYWRkQXhpcyhpKX0pLHRoaXMpfSksdGhpcyl9LFMuX3VwZGF0ZVNjYWxlPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihlLHQsbil7YShlLm1hcERpbWVuc2lvbih0LmRpbSwhMCksKGZ1bmN0aW9uKG4pe3Quc2NhbGUudW5pb25FeHRlbnRGcm9tRGF0YShlLHgoZSxuKSl9KSl9YSh0aGlzLl9heGVzTGlzdCwoZnVuY3Rpb24oZSl7ZS5zY2FsZS5zZXRFeHRlbnQoMS8wLC0xLzApfSkpLGUuZWFjaFNlcmllcygoZnVuY3Rpb24oaSl7aWYoSShpKSl7dmFyIHI9RShpLGUpLG89clswXSxhPXJbMV07aWYoIV8obyx0LGUpfHwhXyhhLHQsZSkpcmV0dXJuO3ZhciBzPXRoaXMuZ2V0Q2FydGVzaWFuKG8uY29tcG9uZW50SW5kZXgsYS5jb21wb25lbnRJbmRleCksbD1pLmdldERhdGEoKSxjPXMuZ2V0QXhpcygieCIpLHU9cy5nZXRBeGlzKCJ5Iik7Imxpc3QiPT09bC50eXBlJiYobihsLGMsaSksbihsLHUsaSkpfX0pLHRoaXMpfSxTLmdldFRvb2x0aXBBeGVzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W107cmV0dXJuIGEodGhpcy5nZXRDYXJ0ZXNpYW5zKCksKGZ1bmN0aW9uKGkpe3ZhciByPW51bGwhPWUmJiJhdXRvIiE9PWU/aS5nZXRBeGlzKGUpOmkuZ2V0QmFzZUF4aXMoKSxvPWkuZ2V0T3RoZXJBeGlzKHIpO2wodCxyKTwwJiZ0LnB1c2gociksbChuLG8pPDAmJm4ucHVzaChvKX0pKSx7YmFzZUF4ZXM6dCxvdGhlckF4ZXM6bn19O3ZhciBNPVsieEF4aXMiLCJ5QXhpcyJdO2Z1bmN0aW9uIEUoZSx0KXtyZXR1cm4gcyhNLChmdW5jdGlvbih0KXt2YXIgbj1lLmdldFJlZmVycmluZ0NvbXBvbmVudHModClbMF07cmV0dXJuIG59KSl9ZnVuY3Rpb24gSShlKXtyZXR1cm4iY2FydGVzaWFuMmQiPT09ZS5nZXQoImNvb3JkaW5hdGVTeXN0ZW0iKX13LmNyZWF0ZT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO3JldHVybiBlLmVhY2hDb21wb25lbnQoImdyaWQiLChmdW5jdGlvbihpLHIpe3ZhciBvPW5ldyB3KGksZSx0KTtvLm5hbWU9ImdyaWRfIityLG8ucmVzaXplKGksdCwhMCksaS5jb29yZGluYXRlU3lzdGVtPW8sbi5wdXNoKG8pfSkpLGUuZWFjaFNlcmllcygoZnVuY3Rpb24odCl7aWYoSSh0KSl7dmFyIG49RSh0LGUpLGk9blswXSxyPW5bMV0sbz1pLmdldENvb3JkU3lzTW9kZWwoKSxhPW8uY29vcmRpbmF0ZVN5c3RlbTt0LmNvb3JkaW5hdGVTeXN0ZW09YS5nZXRDYXJ0ZXNpYW4oaS5jb21wb25lbnRJbmRleCxyLmNvbXBvbmVudEluZGV4KX19KSksbn0sdy5kaW1lbnNpb25zPXcucHJvdG90eXBlLmRpbWVuc2lvbnM9Zy5wcm90b3R5cGUuZGltZW5zaW9ucyx5LnJlZ2lzdGVyKCJjYXJ0ZXNpYW4yZCIsdyk7dmFyIEQ9dztlLmV4cG9ydHM9RH0sIjViNjkiOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCIyMzA2Iikscj1uKCIzZWJhIiksbz1uKCI2ZDhiIiksYT1bIml0ZW1TdHlsZSIsIm9wYWNpdHkiXSxzPVsiZW1waGFzaXMiLCJpdGVtU3R5bGUiLCJvcGFjaXR5Il0sbD1bImxpbmVTdHlsZSIsIm9wYWNpdHkiXSxjPVsiZW1waGFzaXMiLCJsaW5lU3R5bGUiLCJvcGFjaXR5Il07ZnVuY3Rpb24gdShlLHQpe3JldHVybiBlLmdldFZpc3VhbCgib3BhY2l0eSIpfHxlLmdldE1vZGVsKCkuZ2V0KHQpfWZ1bmN0aW9uIGgoZSx0LG4pe3ZhciBpPWUuZ2V0R3JhcGhpY0VsKCkscj11KGUsdCk7bnVsbCE9biYmKG51bGw9PXImJihyPTEpLHIqPW4pLGkuZG93bnBsYXkmJmkuZG93bnBsYXkoKSxpLnRyYXZlcnNlKChmdW5jdGlvbihlKXsiZ3JvdXAiIT09ZS50eXBlJiZlLnNldFN0eWxlKCJvcGFjaXR5IixyKX0pKX1mdW5jdGlvbiBkKGUsdCl7dmFyIG49dShlLHQpLGk9ZS5nZXRHcmFwaGljRWwoKTtpLnRyYXZlcnNlKChmdW5jdGlvbihlKXsiZ3JvdXAiIT09ZS50eXBlJiZlLnNldFN0eWxlKCJvcGFjaXR5IixuKX0pKSxpLmhpZ2hsaWdodCYmaS5oaWdobGlnaHQoKX12YXIgZj1pLmV4dGVuZFNoYXBlKHtzaGFwZTp7eDE6MCx5MTowLHgyOjAseTI6MCxjcHgxOjAsY3B5MTowLGNweDI6MCxjcHkyOjAsZXh0ZW50OjAsb3JpZW50OiIifSxidWlsZFBhdGg6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmV4dGVudDtlLm1vdmVUbyh0LngxLHQueTEpLGUuYmV6aWVyQ3VydmVUbyh0LmNweDEsdC5jcHkxLHQuY3B4Mix0LmNweTIsdC54Mix0LnkyKSwidmVydGljYWwiPT09dC5vcmllbnQ/KGUubGluZVRvKHQueDIrbix0LnkyKSxlLmJlemllckN1cnZlVG8odC5jcHgyK24sdC5jcHkyLHQuY3B4MStuLHQuY3B5MSx0LngxK24sdC55MSkpOihlLmxpbmVUbyh0LngyLHQueTIrbiksZS5iZXppZXJDdXJ2ZVRvKHQuY3B4Mix0LmNweTIrbix0LmNweDEsdC5jcHkxK24sdC54MSx0LnkxK24pKSxlLmNsb3NlUGF0aCgpfSxoaWdobGlnaHQ6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXIoImVtcGhhc2lzIil9LGRvd25wbGF5OmZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKCJub3JtYWwiKX19KSxwPXIuZXh0ZW5kQ2hhcnRWaWV3KHt0eXBlOiJzYW5rZXkiLF9tb2RlbDpudWxsLF9mb2N1c0FkamFjZW5jeURpc2FibGVkOiExLHJlbmRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxvPWUuZ2V0R3JhcGgoKSxhPXRoaXMuZ3JvdXAscz1lLmxheW91dEluZm8sbD1zLndpZHRoLGM9cy5oZWlnaHQsdT1lLmdldERhdGEoKSxoPWUuZ2V0RGF0YSgiZWRnZSIpLGQ9ZS5nZXQoIm9yaWVudCIpO3RoaXMuX21vZGVsPWUsYS5yZW1vdmVBbGwoKSxhLmF0dHIoInBvc2l0aW9uIixbcy54LHMueV0pLG8uZWFjaEVkZ2UoKGZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBmO24uZGF0YUluZGV4PXQuZGF0YUluZGV4LG4uc2VyaWVzSW5kZXg9ZS5zZXJpZXNJbmRleCxuLmRhdGFUeXBlPSJlZGdlIjt2YXIgcixvLHMsdSxwLG0sZyx2LHk9dC5nZXRNb2RlbCgibGluZVN0eWxlIiksYj15LmdldCgiY3VydmVuZXNzIikseD10Lm5vZGUxLmdldExheW91dCgpLF89dC5ub2RlMS5nZXRNb2RlbCgpLHc9Xy5nZXQoImxvY2FsWCIpLFM9Xy5nZXQoImxvY2FsWSIpLEM9dC5ub2RlMi5nZXRMYXlvdXQoKSxrPXQubm9kZTIuZ2V0TW9kZWwoKSxUPWsuZ2V0KCJsb2NhbFgiKSxNPWsuZ2V0KCJsb2NhbFkiKSxFPXQuZ2V0TGF5b3V0KCk7c3dpdGNoKG4uc2hhcGUuZXh0ZW50PU1hdGgubWF4KDEsRS5keSksbi5zaGFwZS5vcmllbnQ9ZCwidmVydGljYWwiPT09ZD8ocj0obnVsbCE9dz93Kmw6eC54KStFLnN5LG89KG51bGwhPVM/UypjOngueSkreC5keSxzPShudWxsIT1UP1QqbDpDLngpK0UudHksdT1udWxsIT1NP00qYzpDLnkscD1yLG09byooMS1iKSt1KmIsZz1zLHY9bypiK3UqKDEtYikpOihyPShudWxsIT13P3cqbDp4LngpK3guZHgsbz0obnVsbCE9Uz9TKmM6eC55KStFLnN5LHM9bnVsbCE9VD9UKmw6Qy54LHU9KG51bGwhPU0/TSpjOkMueSkrRS50eSxwPXIqKDEtYikrcypiLG09byxnPXIqYitzKigxLWIpLHY9dSksbi5zZXRTaGFwZSh7eDE6cix5MTpvLHgyOnMseTI6dSxjcHgxOnAsY3B5MTptLGNweDI6ZyxjcHkyOnZ9KSxuLnNldFN0eWxlKHkuZ2V0SXRlbVN0eWxlKCkpLG4uc3R5bGUuZmlsbCl7Y2FzZSJzb3VyY2UiOm4uc3R5bGUuZmlsbD10Lm5vZGUxLmdldFZpc3VhbCgiY29sb3IiKTticmVhaztjYXNlInRhcmdldCI6bi5zdHlsZS5maWxsPXQubm9kZTIuZ2V0VmlzdWFsKCJjb2xvciIpO2JyZWFrfWkuc2V0SG92ZXJTdHlsZShuLHQuZ2V0TW9kZWwoImVtcGhhc2lzLmxpbmVTdHlsZSIpLmdldEl0ZW1TdHlsZSgpKSxhLmFkZChuKSxoLnNldEl0ZW1HcmFwaGljRWwodC5kYXRhSW5kZXgsbil9KSksby5lYWNoTm9kZSgoZnVuY3Rpb24odCl7dmFyIG49dC5nZXRMYXlvdXQoKSxyPXQuZ2V0TW9kZWwoKSxvPXIuZ2V0KCJsb2NhbFgiKSxzPXIuZ2V0KCJsb2NhbFkiKSxoPXIuZ2V0TW9kZWwoImxhYmVsIiksZD1yLmdldE1vZGVsKCJlbXBoYXNpcy5sYWJlbCIpLGY9bmV3IGkuUmVjdCh7c2hhcGU6e3g6bnVsbCE9bz9vKmw6bi54LHk6bnVsbCE9cz9zKmM6bi55LHdpZHRoOm4uZHgsaGVpZ2h0Om4uZHl9LHN0eWxlOnIuZ2V0TW9kZWwoIml0ZW1TdHlsZSIpLmdldEl0ZW1TdHlsZSgpfSkscD10LmdldE1vZGVsKCJlbXBoYXNpcy5pdGVtU3R5bGUiKS5nZXRJdGVtU3R5bGUoKTtpLnNldExhYmVsU3R5bGUoZi5zdHlsZSxwLGgsZCx7bGFiZWxGZXRjaGVyOmUsbGFiZWxEYXRhSW5kZXg6dC5kYXRhSW5kZXgsZGVmYXVsdFRleHQ6dC5pZCxpc1JlY3RUZXh0OiEwfSksZi5zZXRTdHlsZSgiZmlsbCIsdC5nZXRWaXN1YWwoImNvbG9yIikpLGkuc2V0SG92ZXJTdHlsZShmLHApLGEuYWRkKGYpLHUuc2V0SXRlbUdyYXBoaWNFbCh0LmRhdGFJbmRleCxmKSxmLmRhdGFUeXBlPSJub2RlIn0pKSx1LmVhY2hJdGVtR3JhcGhpY0VsKChmdW5jdGlvbih0LGkpe3ZhciBvPXUuZ2V0SXRlbU1vZGVsKGkpO28uZ2V0KCJkcmFnZ2FibGUiKSYmKHQuZHJpZnQ9ZnVuY3Rpb24odCxvKXtyLl9mb2N1c0FkamFjZW5jeURpc2FibGVkPSEwLHRoaXMuc2hhcGUueCs9dCx0aGlzLnNoYXBlLnkrPW8sdGhpcy5kaXJ0eSgpLG4uZGlzcGF0Y2hBY3Rpb24oe3R5cGU6ImRyYWdOb2RlIixzZXJpZXNJZDplLmlkLGRhdGFJbmRleDp1LmdldFJhd0luZGV4KGkpLGxvY2FsWDp0aGlzLnNoYXBlLngvbCxsb2NhbFk6dGhpcy5zaGFwZS55L2N9KX0sdC5vbmRyYWdlbmQ9ZnVuY3Rpb24oKXtyLl9mb2N1c0FkamFjZW5jeURpc2FibGVkPSExfSx0LmRyYWdnYWJsZT0hMCx0LmN1cnNvcj0ibW92ZSIpLHQuaGlnaGxpZ2h0PWZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKCJlbXBoYXNpcyIpfSx0LmRvd25wbGF5PWZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyKCJub3JtYWwiKX0sdC5mb2N1c05vZGVBZGpIYW5kbGVyJiZ0Lm9mZigibW91c2VvdmVyIix0LmZvY3VzTm9kZUFkakhhbmRsZXIpLHQudW5mb2N1c05vZGVBZGpIYW5kbGVyJiZ0Lm9mZigibW91c2VvdXQiLHQudW5mb2N1c05vZGVBZGpIYW5kbGVyKSxvLmdldCgiZm9jdXNOb2RlQWRqYWNlbmN5IikmJih0Lm9uKCJtb3VzZW92ZXIiLHQuZm9jdXNOb2RlQWRqSGFuZGxlcj1mdW5jdGlvbigpe3IuX2ZvY3VzQWRqYWNlbmN5RGlzYWJsZWR8fChyLl9jbGVhclRpbWVyKCksbi5kaXNwYXRjaEFjdGlvbih7dHlwZToiZm9jdXNOb2RlQWRqYWNlbmN5IixzZXJpZXNJZDplLmlkLGRhdGFJbmRleDp0LmRhdGFJbmRleH0pKX0pLHQub24oIm1vdXNlb3V0Iix0LnVuZm9jdXNOb2RlQWRqSGFuZGxlcj1mdW5jdGlvbigpe3IuX2ZvY3VzQWRqYWNlbmN5RGlzYWJsZWR8fHIuX2Rpc3BhdGNoVW5mb2N1cyhuKX0pKX0pKSxoLmVhY2hJdGVtR3JhcGhpY0VsKChmdW5jdGlvbih0LGkpe3ZhciBvPWguZ2V0SXRlbU1vZGVsKGkpO3QuZm9jdXNOb2RlQWRqSGFuZGxlciYmdC5vZmYoIm1vdXNlb3ZlciIsdC5mb2N1c05vZGVBZGpIYW5kbGVyKSx0LnVuZm9jdXNOb2RlQWRqSGFuZGxlciYmdC5vZmYoIm1vdXNlb3V0Iix0LnVuZm9jdXNOb2RlQWRqSGFuZGxlciksby5nZXQoImZvY3VzTm9kZUFkamFjZW5jeSIpJiYodC5vbigibW91c2VvdmVyIix0LmZvY3VzTm9kZUFkakhhbmRsZXI9ZnVuY3Rpb24oKXtyLl9mb2N1c0FkamFjZW5jeURpc2FibGVkfHwoci5fY2xlYXJUaW1lcigpLG4uZGlzcGF0Y2hBY3Rpb24oe3R5cGU6ImZvY3VzTm9kZUFkamFjZW5jeSIsc2VyaWVzSWQ6ZS5pZCxlZGdlRGF0YUluZGV4OnQuZGF0YUluZGV4fSkpfSksdC5vbigibW91c2VvdXQiLHQudW5mb2N1c05vZGVBZGpIYW5kbGVyPWZ1bmN0aW9uKCl7ci5fZm9jdXNBZGphY2VuY3lEaXNhYmxlZHx8ci5fZGlzcGF0Y2hVbmZvY3VzKG4pfSkpfSkpLCF0aGlzLl9kYXRhJiZlLmdldCgiYW5pbWF0aW9uIikmJmEuc2V0Q2xpcFBhdGgobShhLmdldEJvdW5kaW5nUmVjdCgpLGUsKGZ1bmN0aW9uKCl7YS5yZW1vdmVDbGlwUGF0aCgpfSkpKSx0aGlzLl9kYXRhPWUuZ2V0RGF0YSgpfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJUaW1lcigpfSxfZGlzcGF0Y2hVbmZvY3VzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5fY2xlYXJUaW1lcigpLHRoaXMuX3VuZm9jdXNEZWxheVRpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fdW5mb2N1c0RlbGF5VGltZXI9bnVsbCxlLmRpc3BhdGNoQWN0aW9uKHt0eXBlOiJ1bmZvY3VzTm9kZUFkamFjZW5jeSIsc2VyaWVzSWQ6dC5fbW9kZWwuaWR9KX0pLDUwMCl9LF9jbGVhclRpbWVyOmZ1bmN0aW9uKCl7dGhpcy5fdW5mb2N1c0RlbGF5VGltZXImJihjbGVhclRpbWVvdXQodGhpcy5fdW5mb2N1c0RlbGF5VGltZXIpLHRoaXMuX3VuZm9jdXNEZWxheVRpbWVyPW51bGwpfSxmb2N1c05vZGVBZGphY2VuY3k6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9ZS5nZXREYXRhKCksdT1yLmdyYXBoLGY9aS5kYXRhSW5kZXgscD1yLmdldEl0ZW1Nb2RlbChmKSxtPWkuZWRnZURhdGFJbmRleDtpZihudWxsIT1mfHxudWxsIT1tKXt2YXIgZz11LmdldE5vZGVCeUluZGV4KGYpLHY9dS5nZXRFZGdlQnlJbmRleChtKTtpZih1LmVhY2hOb2RlKChmdW5jdGlvbihlKXtoKGUsYSwuMSl9KSksdS5lYWNoRWRnZSgoZnVuY3Rpb24oZSl7aChlLGwsLjEpfSkpLGcpe2QoZyxzKTt2YXIgeT1wLmdldCgiZm9jdXNOb2RlQWRqYWNlbmN5Iik7Im91dEVkZ2VzIj09PXk/by5lYWNoKGcub3V0RWRnZXMsKGZ1bmN0aW9uKGUpe2UuZGF0YUluZGV4PDB8fChkKGUsYyksZChlLm5vZGUyLHMpKX0pKToiaW5FZGdlcyI9PT15P28uZWFjaChnLmluRWRnZXMsKGZ1bmN0aW9uKGUpe2UuZGF0YUluZGV4PDB8fChkKGUsYyksZChlLm5vZGUxLHMpKX0pKToiYWxsRWRnZXMiPT09eSYmby5lYWNoKGcuZWRnZXMsKGZ1bmN0aW9uKGUpe2UuZGF0YUluZGV4PDB8fChkKGUsYyksZS5ub2RlMSE9PWcmJmQoZS5ub2RlMSxzKSxlLm5vZGUyIT09ZyYmZChlLm5vZGUyLHMpKX0pKX12JiYoZCh2LGMpLGQodi5ub2RlMSxzKSxkKHYubm9kZTIscykpfX0sdW5mb2N1c05vZGVBZGphY2VuY3k6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9ZS5nZXRHcmFwaCgpO3IuZWFjaE5vZGUoKGZ1bmN0aW9uKGUpe2goZSxhKX0pKSxyLmVhY2hFZGdlKChmdW5jdGlvbihlKXtoKGUsbCl9KSl9fSk7ZnVuY3Rpb24gbShlLHQsbil7dmFyIHI9bmV3IGkuUmVjdCh7c2hhcGU6e3g6ZS54LTEwLHk6ZS55LTEwLHdpZHRoOjAsaGVpZ2h0OmUuaGVpZ2h0KzIwfX0pO3JldHVybiBpLmluaXRQcm9wcyhyLHtzaGFwZTp7d2lkdGg6ZS53aWR0aCsyMH19LHQsbikscn1lLmV4cG9ydHM9cH0sIjViODciOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKCI0ZTA4Iikscj0oaS5fX0RFVl9fLG4oIjZkOGIiKSksbz1yLmVhY2gsYT1yLmNyZWF0ZUhhc2hNYXAscz1uKCJlYzM0IiksbD1uKCI0Yzg2IiksYz1uKCJjOTJmIiksdT1uKCI5ODUwIiksaD17Z2VvSlNPTjpsLHN2ZzpjfSxkPXtsb2FkOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyPVtdLHM9YSgpLGw9YSgpLGM9cChlKTtyZXR1cm4gbyhjLChmdW5jdGlvbihhKXt2YXIgYz1oW2EudHlwZV0ubG9hZChlLGEsbik7byhjLnJlZ2lvbnMsKGZ1bmN0aW9uKGUpe3ZhciBuPWUubmFtZTt0JiZ0Lmhhc093blByb3BlcnR5KG4pJiYoZT1lLmNsb25lU2hhbGxvdyhuPXRbbl0pKSxyLnB1c2goZSkscy5zZXQobixlKSxsLnNldChuLGUuY2VudGVyKX0pKTt2YXIgdT1jLmJvdW5kaW5nUmVjdDt1JiYoaT9pLnVuaW9uKHUpOmk9dS5jbG9uZSgpKX0pKSx7cmVnaW9uczpyLHJlZ2lvbnNNYXA6cyxuYW1lQ29vcmRNYXA6bCxib3VuZGluZ1JlY3Q6aXx8bmV3IHUoMCwwLDAsMCl9fSxtYWtlR3JhcGhpYzpmKCJtYWtlR3JhcGhpYyIpLHJlbW92ZUdyYXBoaWM6ZigicmVtb3ZlR3JhcGhpYyIpfTtmdW5jdGlvbiBmKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBpPXAodCkscj1bXTtyZXR1cm4gbyhpLChmdW5jdGlvbihpKXt2YXIgbz1oW2kudHlwZV1bZV07byYmci5wdXNoKG8odCxpLG4pKX0pKSxyfX1mdW5jdGlvbiBwKGUpe3ZhciB0PXMucmV0cmlldmVNYXAoZSl8fFtdO3JldHVybiB0fWUuZXhwb3J0cz1kfSwiNWM2YyI6ZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSwiNWM5NiI6ZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKGkpe2lmKHRbaV0pcmV0dXJuIHRbaV0uZXhwb3J0czt2YXIgcj10W2ldPXtpOmksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtpXS5jYWxsKHIuZXhwb3J0cyxyLHIuZXhwb3J0cyxuKSxyLmw9ITAsci5leHBvcnRzfXJldHVybiBuLm09ZSxuLmM9dCxuLmQ9ZnVuY3Rpb24oZSx0LGkpe24ubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDppfSl9LG4ucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1uKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiYib2JqZWN0Ij09PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIoaSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJiJzdHJpbmciIT10eXBlb2YgZSlmb3IodmFyIHIgaW4gZSluLmQoaSxyLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwscikpO3JldHVybiBpfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGVbImRlZmF1bHQiXX06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LCJhIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD0iL2Rpc3QvIixuKG4ucz00NSl9KFtmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJkOTQwIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjU5MjQiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiODEyMiIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJkMDEwIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjZiN2MiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiZTk3NCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIyYjBlIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjdmNGQiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiZjNhZCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIyYmI1Iil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjQxN2YiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNTEyOCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI0ODk3Iil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImVlZGYiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNDAxMCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIwZTE1Iil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImRjZGMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiMTRlOSIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJhNzQyIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImQzOTciKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiZDdkMSIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI1NDg4Iil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjEyZjIiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNDFmOCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI5MmZhIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjU5N2YiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiMjk5YyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCIyYTVlIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjg0NWYiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiOGJiYyIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJlNjJkIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oIjdmYzEiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiYzU2YSIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCJjMjg0Iil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImU0NTIiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiOTYxOSIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI0ZTRiIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImU3NzIiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiYzA5OCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI3MjJmIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImExNWUiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiZTQ1MCIpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1uKCI0NzI2Iil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPW4oImY0OTQiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9bigiNmFjOSIpfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPW4oNDYpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KTt2YXIgaT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigidWwiLHtzdGF0aWNDbGFzczoiZWwtcGFnZXIiLG9uOntjbGljazplLm9uUGFnZXJDbGlja319LFtlLnBhZ2VDb3VudD4wP24oImxpIix7c3RhdGljQ2xhc3M6Im51bWJlciIsY2xhc3M6e2FjdGl2ZToxPT09ZS5jdXJyZW50UGFnZSxkaXNhYmxlZDplLmRpc2FibGVkfX0sW2UuX3YoIjEiKV0pOmUuX2UoKSxlLnNob3dQcmV2TW9yZT9uKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uIG1vcmUgYnRuLXF1aWNrcHJldiIsY2xhc3M6W2UucXVpY2twcmV2SWNvbkNsYXNzLHtkaXNhYmxlZDplLmRpc2FibGVkfV0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5vbk1vdXNlZW50ZXIoImxlZnQiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlLnF1aWNrcHJldkljb25DbGFzcz0iZWwtaWNvbi1tb3JlIn19fSk6ZS5fZSgpLGUuX2woZS5wYWdlcnMsKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJsaSIse2tleTp0LHN0YXRpY0NsYXNzOiJudW1iZXIiLGNsYXNzOnthY3RpdmU6ZS5jdXJyZW50UGFnZT09PXQsZGlzYWJsZWQ6ZS5kaXNhYmxlZH19LFtlLl92KGUuX3ModCkpXSl9KSksZS5zaG93TmV4dE1vcmU/bigibGkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbiBtb3JlIGJ0bi1xdWlja25leHQiLGNsYXNzOltlLnF1aWNrbmV4dEljb25DbGFzcyx7ZGlzYWJsZWQ6ZS5kaXNhYmxlZH1dLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2Uub25Nb3VzZWVudGVyKCJyaWdodCIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UucXVpY2tuZXh0SWNvbkNsYXNzPSJlbC1pY29uLW1vcmUifX19KTplLl9lKCksZS5wYWdlQ291bnQ+MT9uKCJsaSIse3N0YXRpY0NsYXNzOiJudW1iZXIiLGNsYXNzOnthY3RpdmU6ZS5jdXJyZW50UGFnZT09PWUucGFnZUNvdW50LGRpc2FibGVkOmUuZGlzYWJsZWR9fSxbZS5fdihlLl9zKGUucGFnZUNvdW50KSldKTplLl9lKCldLDIpfSxyPVtdO2kuX3dpdGhTdHJpcHBlZD0hMDt2YXIgbz17bmFtZToiRWxQYWdlciIscHJvcHM6e2N1cnJlbnRQYWdlOk51bWJlcixwYWdlQ291bnQ6TnVtYmVyLHBhZ2VyQ291bnQ6TnVtYmVyLGRpc2FibGVkOkJvb2xlYW59LHdhdGNoOntzaG93UHJldk1vcmU6ZnVuY3Rpb24oZSl7ZXx8KHRoaXMucXVpY2twcmV2SWNvbkNsYXNzPSJlbC1pY29uLW1vcmUiKX0sc2hvd05leHRNb3JlOmZ1bmN0aW9uKGUpe2V8fCh0aGlzLnF1aWNrbmV4dEljb25DbGFzcz0iZWwtaWNvbi1tb3JlIil9fSxtZXRob2RzOntvblBhZ2VyQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYoIlVMIiE9PXQudGFnTmFtZSYmIXRoaXMuZGlzYWJsZWQpe3ZhciBuPU51bWJlcihlLnRhcmdldC50ZXh0Q29udGVudCksaT10aGlzLnBhZ2VDb3VudCxyPXRoaXMuY3VycmVudFBhZ2Usbz10aGlzLnBhZ2VyQ291bnQtMjstMSE9PXQuY2xhc3NOYW1lLmluZGV4T2YoIm1vcmUiKSYmKC0xIT09dC5jbGFzc05hbWUuaW5kZXhPZigicXVpY2twcmV2Iik/bj1yLW86LTEhPT10LmNsYXNzTmFtZS5pbmRleE9mKCJxdWlja25leHQiKSYmKG49citvKSksaXNOYU4obil8fChuPDEmJihuPTEpLG4+aSYmKG49aSkpLG4hPT1yJiZ0aGlzLiRlbWl0KCJjaGFuZ2UiLG4pfX0sb25Nb3VzZWVudGVyOmZ1bmN0aW9uKGUpe3RoaXMuZGlzYWJsZWR8fCgibGVmdCI9PT1lP3RoaXMucXVpY2twcmV2SWNvbkNsYXNzPSJlbC1pY29uLWQtYXJyb3ctbGVmdCI6dGhpcy5xdWlja25leHRJY29uQ2xhc3M9ImVsLWljb24tZC1hcnJvdy1yaWdodCIpfX0sY29tcHV0ZWQ6e3BhZ2VyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFnZXJDb3VudCx0PShlLTEpLzIsbj1OdW1iZXIodGhpcy5jdXJyZW50UGFnZSksaT1OdW1iZXIodGhpcy5wYWdlQ291bnQpLHI9ITEsbz0hMTtpPmUmJihuPmUtdCYmKHI9ITApLG48aS10JiYobz0hMCkpO3ZhciBhPVtdO2lmKHImJiFvKWZvcih2YXIgcz1pLShlLTIpLGw9cztsPGk7bCsrKWEucHVzaChsKTtlbHNlIGlmKCFyJiZvKWZvcih2YXIgYz0yO2M8ZTtjKyspYS5wdXNoKGMpO2Vsc2UgaWYociYmbylmb3IodmFyIHU9TWF0aC5mbG9vcihlLzIpLTEsaD1uLXU7aDw9bit1O2grKylhLnB1c2goaCk7ZWxzZSBmb3IodmFyIGQ9MjtkPGk7ZCsrKWEucHVzaChkKTtyZXR1cm4gdGhpcy5zaG93UHJldk1vcmU9cix0aGlzLnNob3dOZXh0TW9yZT1vLGF9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbCxzaG93UHJldk1vcmU6ITEsc2hvd05leHRNb3JlOiExLHF1aWNrbmV4dEljb25DbGFzczoiZWwtaWNvbi1tb3JlIixxdWlja3ByZXZJY29uQ2xhc3M6ImVsLWljb24tbW9yZSJ9fX0sYT1vO2Z1bmN0aW9uIHMoZSx0LG4saSxyLG8sYSxzKXt2YXIgbCxjPSJmdW5jdGlvbiI9PT10eXBlb2YgZT9lLm9wdGlvbnM6ZTtpZih0JiYoYy5yZW5kZXI9dCxjLnN0YXRpY1JlbmRlckZucz1uLGMuX2NvbXBpbGVkPSEwKSxpJiYoYy5mdW5jdGlvbmFsPSEwKSxvJiYoYy5fc2NvcGVJZD0iZGF0YS12LSIrbyksYT8obD1mdW5jdGlvbihlKXtlPWV8fHRoaXMuJHZub2RlJiZ0aGlzLiR2bm9kZS5zc3JDb250ZXh0fHx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuJHZub2RlJiZ0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCxlfHwidW5kZWZpbmVkIj09PXR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9ffHwoZT1fX1ZVRV9TU1JfQ09OVEVYVF9fKSxyJiZyLmNhbGwodGhpcyxlKSxlJiZlLl9yZWdpc3RlcmVkQ29tcG9uZW50cyYmZS5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKGEpfSxjLl9zc3JSZWdpc3Rlcj1sKTpyJiYobD1zP2Z1bmN0aW9uKCl7ci5jYWxsKHRoaXMsdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KX06ciksbClpZihjLmZ1bmN0aW9uYWwpe2MuX2luamVjdFN0eWxlcz1sO3ZhciB1PWMucmVuZGVyO2MucmVuZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuY2FsbCh0KSx1KGUsdCl9fWVsc2V7dmFyIGg9Yy5iZWZvcmVDcmVhdGU7Yy5iZWZvcmVDcmVhdGU9aD9bXS5jb25jYXQoaCxsKTpbbF19cmV0dXJue2V4cG9ydHM6ZSxvcHRpb25zOmN9fXZhciBsPXMoYSxpLHIsITEsbnVsbCxudWxsLG51bGwpO2wub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3BhZ2luYXRpb24vc3JjL3BhZ2VyLnZ1ZSI7dmFyIGM9bC5leHBvcnRzLHU9bigzNiksaD1uLm4odSksZD1uKDM3KSxmPW4ubihkKSxwPW4oOCksbT1uLm4ocCksZz1uKDQpLHY9bi5uKGcpLHk9bigyKSxiPXtuYW1lOiJFbFBhZ2luYXRpb24iLHByb3BzOntwYWdlU2l6ZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMH0sc21hbGw6Qm9vbGVhbix0b3RhbDpOdW1iZXIscGFnZUNvdW50Ok51bWJlcixwYWdlckNvdW50Ont0eXBlOk51bWJlcix2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuKDB8ZSk9PT1lJiZlPjQmJmU8MjImJmUlMj09PTF9LGRlZmF1bHQ6N30sY3VycmVudFBhZ2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MX0sbGF5b3V0OntkZWZhdWx0OiJwcmV2LCBwYWdlciwgbmV4dCwganVtcGVyLCAtPiwgdG90YWwifSxwYWdlU2l6ZXM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblsxMCwyMCwzMCw0MCw1MCwxMDBdfX0scG9wcGVyQ2xhc3M6U3RyaW5nLHByZXZUZXh0OlN0cmluZyxuZXh0VGV4dDpTdHJpbmcsYmFja2dyb3VuZDpCb29sZWFuLGRpc2FibGVkOkJvb2xlYW4saGlkZU9uU2luZ2xlUGFnZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2ludGVybmFsQ3VycmVudFBhZ2U6MSxpbnRlcm5hbFBhZ2VTaXplOjAsbGFzdEVtaXR0ZWRQYWdlOi0xLHVzZXJDaGFuZ2VQYWdlU2l6ZTohMX19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxheW91dDtpZighdClyZXR1cm4gbnVsbDtpZih0aGlzLmhpZGVPblNpbmdsZVBhZ2UmJighdGhpcy5pbnRlcm5hbFBhZ2VDb3VudHx8MT09PXRoaXMuaW50ZXJuYWxQYWdlQ291bnQpKXJldHVybiBudWxsO3ZhciBuPWUoImRpdiIse2NsYXNzOlsiZWwtcGFnaW5hdGlvbiIseyJpcy1iYWNrZ3JvdW5kIjp0aGlzLmJhY2tncm91bmQsImVsLXBhZ2luYXRpb24tLXNtYWxsIjp0aGlzLnNtYWxsfV19KSxpPXtwcmV2OmUoInByZXYiKSxqdW1wZXI6ZSgianVtcGVyIikscGFnZXI6ZSgicGFnZXIiLHthdHRyczp7Y3VycmVudFBhZ2U6dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlLHBhZ2VDb3VudDp0aGlzLmludGVybmFsUGFnZUNvdW50LHBhZ2VyQ291bnQ6dGhpcy5wYWdlckNvdW50LGRpc2FibGVkOnRoaXMuZGlzYWJsZWR9LG9uOntjaGFuZ2U6dGhpcy5oYW5kbGVDdXJyZW50Q2hhbmdlfX0pLG5leHQ6ZSgibmV4dCIpLHNpemVzOmUoInNpemVzIix7YXR0cnM6e3BhZ2VTaXplczp0aGlzLnBhZ2VTaXplc319KSxzbG90OmUoInNsb3QiLFt0aGlzLiRzbG90cy5kZWZhdWx0P3RoaXMuJHNsb3RzLmRlZmF1bHQ6IiJdKSx0b3RhbDplKCJ0b3RhbCIpfSxyPXQuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pKSxvPWUoImRpdiIse2NsYXNzOiJlbC1wYWdpbmF0aW9uX19yaWdodHdyYXBwZXIifSksYT0hMTtyZXR1cm4gbi5jaGlsZHJlbj1uLmNoaWxkcmVufHxbXSxvLmNoaWxkcmVuPW8uY2hpbGRyZW58fFtdLHIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Ii0+IiE9PWU/YT9vLmNoaWxkcmVuLnB1c2goaVtlXSk6bi5jaGlsZHJlbi5wdXNoKGlbZV0pOmE9ITB9KSksYSYmbi5jaGlsZHJlbi51bnNoaWZ0KG8pLG59LGNvbXBvbmVudHM6e1ByZXY6e3JlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZSgiYnV0dG9uIix7YXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6dGhpcy4kcGFyZW50LmRpc2FibGVkfHx0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZTw9MX0sY2xhc3M6ImJ0bi1wcmV2Iixvbjp7Y2xpY2s6dGhpcy4kcGFyZW50LnByZXZ9fSxbdGhpcy4kcGFyZW50LnByZXZUZXh0P2UoInNwYW4iLFt0aGlzLiRwYXJlbnQucHJldlRleHRdKTplKCJpIix7Y2xhc3M6ImVsLWljb24gZWwtaWNvbi1hcnJvdy1sZWZ0In0pXSl9fSxOZXh0OntyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoImJ1dHRvbiIse2F0dHJzOnt0eXBlOiJidXR0b24iLGRpc2FibGVkOnRoaXMuJHBhcmVudC5kaXNhYmxlZHx8dGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2U9PT10aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnR8fDA9PT10aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnR9LGNsYXNzOiJidG4tbmV4dCIsb246e2NsaWNrOnRoaXMuJHBhcmVudC5uZXh0fX0sW3RoaXMuJHBhcmVudC5uZXh0VGV4dD9lKCJzcGFuIixbdGhpcy4kcGFyZW50Lm5leHRUZXh0XSk6ZSgiaSIse2NsYXNzOiJlbC1pY29uIGVsLWljb24tYXJyb3ctcmlnaHQifSldKX19LFNpemVzOnttaXhpbnM6W3YuYV0scHJvcHM6e3BhZ2VTaXplczpBcnJheX0sd2F0Y2g6e3BhZ2VTaXplczp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSx0KXtPYmplY3QoeVsidmFsdWVFcXVhbHMiXSkoZSx0KXx8QXJyYXkuaXNBcnJheShlKSYmKHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplPWUuaW5kZXhPZih0aGlzLiRwYXJlbnQucGFnZVNpemUpPi0xP3RoaXMuJHBhcmVudC5wYWdlU2l6ZTp0aGlzLnBhZ2VTaXplc1swXSl9fX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGUoInNwYW4iLHtjbGFzczoiZWwtcGFnaW5hdGlvbl9fc2l6ZXMifSxbZSgiZWwtc2VsZWN0Iix7YXR0cnM6e3ZhbHVlOnRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplLHBvcHBlckNsYXNzOnRoaXMuJHBhcmVudC5wb3BwZXJDbGFzc3x8IiIsc2l6ZToibWluaSIsZGlzYWJsZWQ6dGhpcy4kcGFyZW50LmRpc2FibGVkfSxvbjp7aW5wdXQ6dGhpcy5oYW5kbGVDaGFuZ2V9fSxbdGhpcy5wYWdlU2l6ZXMubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gZSgiZWwtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOm4sbGFiZWw6bit0LnQoImVsLnBhZ2luYXRpb24ucGFnZXNpemUiKX19KX0pKV0pXSl9LGNvbXBvbmVudHM6e0VsU2VsZWN0OmguYSxFbE9wdGlvbjpmLmF9LG1ldGhvZHM6e2hhbmRsZUNoYW5nZTpmdW5jdGlvbihlKXtlIT09dGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemUmJih0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlU2l6ZT1lPXBhcnNlSW50KGUsMTApLHRoaXMuJHBhcmVudC51c2VyQ2hhbmdlUGFnZVNpemU9ITAsdGhpcy4kcGFyZW50LiRlbWl0KCJ1cGRhdGU6cGFnZVNpemUiLGUpLHRoaXMuJHBhcmVudC4kZW1pdCgic2l6ZS1jaGFuZ2UiLGUpKX19fSxKdW1wZXI6e21peGluczpbdi5hXSxjb21wb25lbnRzOntFbElucHV0Om0uYX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt1c2VySW5wdXQ6bnVsbH19LHdhdGNoOnsiJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlIjpmdW5jdGlvbigpe3RoaXMudXNlcklucHV0PW51bGx9fSxtZXRob2RzOntoYW5kbGVLZXl1cDpmdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGUsbj1lLnRhcmdldDsxMz09PXQmJnRoaXMuaGFuZGxlQ2hhbmdlKG4udmFsdWUpfSxoYW5kbGVJbnB1dDpmdW5jdGlvbihlKXt0aGlzLnVzZXJJbnB1dD1lfSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2U9dGhpcy4kcGFyZW50LmdldFZhbGlkQ3VycmVudFBhZ2UoZSksdGhpcy4kcGFyZW50LmVtaXRDaGFuZ2UoKSx0aGlzLnVzZXJJbnB1dD1udWxsfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKCJzcGFuIix7Y2xhc3M6ImVsLXBhZ2luYXRpb25fX2p1bXAifSxbdGhpcy50KCJlbC5wYWdpbmF0aW9uLmdvdG8iKSxlKCJlbC1pbnB1dCIse2NsYXNzOiJlbC1wYWdpbmF0aW9uX19lZGl0b3IgaXMtaW4tcGFnaW5hdGlvbiIsYXR0cnM6e21pbjoxLG1heDp0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnQsdmFsdWU6bnVsbCE9PXRoaXMudXNlcklucHV0P3RoaXMudXNlcklucHV0OnRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlLHR5cGU6Im51bWJlciIsZGlzYWJsZWQ6dGhpcy4kcGFyZW50LmRpc2FibGVkfSxuYXRpdmVPbjp7a2V5dXA6dGhpcy5oYW5kbGVLZXl1cH0sb246e2lucHV0OnRoaXMuaGFuZGxlSW5wdXQsY2hhbmdlOnRoaXMuaGFuZGxlQ2hhbmdlfX0pLHRoaXMudCgiZWwucGFnaW5hdGlvbi5wYWdlQ2xhc3NpZmllciIpXSl9fSxUb3RhbDp7bWl4aW5zOlt2LmFdLHJlbmRlcjpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiB0aGlzLiRwYXJlbnQudG90YWw/ZSgic3BhbiIse2NsYXNzOiJlbC1wYWdpbmF0aW9uX190b3RhbCJ9LFt0aGlzLnQoImVsLnBhZ2luYXRpb24udG90YWwiLHt0b3RhbDp0aGlzLiRwYXJlbnQudG90YWx9KV0pOiIifX0sUGFnZXI6Y30sbWV0aG9kczp7aGFuZGxlQ3VycmVudENoYW5nZTpmdW5jdGlvbihlKXt0aGlzLmludGVybmFsQ3VycmVudFBhZ2U9dGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKGUpLHRoaXMudXNlckNoYW5nZVBhZ2VTaXplPSEwLHRoaXMuZW1pdENoYW5nZSgpfSxwcmV2OmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGlzYWJsZWQpe3ZhciBlPXRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZS0xO3RoaXMuaW50ZXJuYWxDdXJyZW50UGFnZT10aGlzLmdldFZhbGlkQ3VycmVudFBhZ2UoZSksdGhpcy4kZW1pdCgicHJldi1jbGljayIsdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKSx0aGlzLmVtaXRDaGFuZ2UoKX19LG5leHQ6ZnVuY3Rpb24oKXtpZighdGhpcy5kaXNhYmxlZCl7dmFyIGU9dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKzE7dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPXRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZShlKSx0aGlzLiRlbWl0KCJuZXh0LWNsaWNrIix0aGlzLmludGVybmFsQ3VycmVudFBhZ2UpLHRoaXMuZW1pdENoYW5nZSgpfX0sZ2V0VmFsaWRDdXJyZW50UGFnZTpmdW5jdGlvbihlKXtlPXBhcnNlSW50KGUsMTApO3ZhciB0PSJudW1iZXIiPT09dHlwZW9mIHRoaXMuaW50ZXJuYWxQYWdlQ291bnQsbj12b2lkIDA7cmV0dXJuIHQ/ZTwxP249MTplPnRoaXMuaW50ZXJuYWxQYWdlQ291bnQmJihuPXRoaXMuaW50ZXJuYWxQYWdlQ291bnQpOihpc05hTihlKXx8ZTwxKSYmKG49MSksKHZvaWQgMD09PW4mJmlzTmFOKGUpfHwwPT09bikmJihuPTEpLHZvaWQgMD09PW4/ZTpufSxlbWl0Q2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXsoZS5pbnRlcm5hbEN1cnJlbnRQYWdlIT09ZS5sYXN0RW1pdHRlZFBhZ2V8fGUudXNlckNoYW5nZVBhZ2VTaXplKSYmKGUuJGVtaXQoImN1cnJlbnQtY2hhbmdlIixlLmludGVybmFsQ3VycmVudFBhZ2UpLGUubGFzdEVtaXR0ZWRQYWdlPWUuaW50ZXJuYWxDdXJyZW50UGFnZSxlLnVzZXJDaGFuZ2VQYWdlU2l6ZT0hMSl9KSl9fSxjb21wdXRlZDp7aW50ZXJuYWxQYWdlQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiB0aGlzLnRvdGFsP01hdGgubWF4KDEsTWF0aC5jZWlsKHRoaXMudG90YWwvdGhpcy5pbnRlcm5hbFBhZ2VTaXplKSk6Im51bWJlciI9PT10eXBlb2YgdGhpcy5wYWdlQ291bnQ/TWF0aC5tYXgoMSx0aGlzLnBhZ2VDb3VudCk6bnVsbH19LHdhdGNoOntjdXJyZW50UGFnZTp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlPXRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZShlKX19LHBhZ2VTaXplOntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLmludGVybmFsUGFnZVNpemU9aXNOYU4oZSk/MTA6ZX19LGludGVybmFsQ3VycmVudFBhZ2U6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuJGVtaXQoInVwZGF0ZTpjdXJyZW50UGFnZSIsZSksdGhpcy5sYXN0RW1pdHRlZFBhZ2U9LTF9fSxpbnRlcm5hbFBhZ2VDb3VudDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVybmFsQ3VycmVudFBhZ2U7ZT4wJiYwPT09dD90aGlzLmludGVybmFsQ3VycmVudFBhZ2U9MTp0PmUmJih0aGlzLmludGVybmFsQ3VycmVudFBhZ2U9MD09PWU/MTplLHRoaXMudXNlckNoYW5nZVBhZ2VTaXplJiZ0aGlzLmVtaXRDaGFuZ2UoKSksdGhpcy51c2VyQ2hhbmdlUGFnZVNpemU9ITF9fSxpbnN0YWxsOmZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KGIubmFtZSxiKX19LHg9YixfPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImRpYWxvZy1mYWRlIn0sb246eyJhZnRlci1lbnRlciI6ZS5hZnRlckVudGVyLCJhZnRlci1sZWF2ZSI6ZS5hZnRlckxlYXZlfX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX3dyYXBwZXIiLG9uOntjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gdC50YXJnZXQhPT10LmN1cnJlbnRUYXJnZXQ/bnVsbDplLmhhbmRsZVdyYXBwZXJDbGljayh0KX19fSxbbigiZGl2Iix7a2V5OmUua2V5LHJlZjoiZGlhbG9nIixjbGFzczpbImVsLWRpYWxvZyIseyJpcy1mdWxsc2NyZWVuIjplLmZ1bGxzY3JlZW4sImVsLWRpYWxvZy0tY2VudGVyIjplLmNlbnRlcn0sZS5jdXN0b21DbGFzc10sc3R5bGU6ZS5zdHlsZSxhdHRyczp7cm9sZToiZGlhbG9nIiwiYXJpYS1tb2RhbCI6InRydWUiLCJhcmlhLWxhYmVsIjplLnRpdGxlfHwiZGlhbG9nIn19LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX19oZWFkZXIifSxbZS5fdCgidGl0bGUiLFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19fdGl0bGUifSxbZS5fdihlLl9zKGUudGl0bGUpKV0pXSksZS5zaG93Q2xvc2U/bigiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLWRpYWxvZ19faGVhZGVyYnRuIixhdHRyczp7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6IkNsb3NlIn0sb246e2NsaWNrOmUuaGFuZGxlQ2xvc2V9fSxbbigiaSIse3N0YXRpY0NsYXNzOiJlbC1kaWFsb2dfX2Nsb3NlIGVsLWljb24gZWwtaWNvbi1jbG9zZSJ9KV0pOmUuX2UoKV0sMiksZS5yZW5kZXJlZD9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX19ib2R5In0sW2UuX3QoImRlZmF1bHQiKV0sMik6ZS5fZSgpLGUuJHNsb3RzLmZvb3Rlcj9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGlhbG9nX19mb290ZXIifSxbZS5fdCgiZm9vdGVyIildLDIpOmUuX2UoKV0pXSldKX0sdz1bXTtfLl93aXRoU3RyaXBwZWQ9ITA7dmFyIFM9bigxMSksQz1uLm4oUyksaz1uKDkpLFQ9bi5uKGspLE09bigzKSxFPW4ubihNKSxJPXtuYW1lOiJFbERpYWxvZyIsbWl4aW5zOltDLmEsRS5hLFQuYV0scHJvcHM6e3RpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxtb2RhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LG1vZGFsQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sYXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sbG9ja1Njcm9sbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlT25DbGlja01vZGFsOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2xvc2VPblByZXNzRXNjYXBlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sc2hvd0Nsb3NlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sd2lkdGg6U3RyaW5nLGZ1bGxzY3JlZW46Qm9vbGVhbixjdXN0b21DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdG9wOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIxNXZoIn0sYmVmb3JlQ2xvc2U6RnVuY3Rpb24sY2VudGVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZGVzdHJveU9uQ2xvc2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjbG9zZWQ6ITEsa2V5OjB9fSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2U/KHRoaXMuY2xvc2VkPSExLHRoaXMuJGVtaXQoIm9wZW4iKSx0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMudXBkYXRlUG9wcGVyKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0LiRyZWZzLmRpYWxvZy5zY3JvbGxUb3A9MH0pKSx0aGlzLmFwcGVuZFRvQm9keSYmZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCkpOih0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMudXBkYXRlUG9wcGVyKSx0aGlzLmNsb3NlZHx8dGhpcy4kZW1pdCgiY2xvc2UiKSx0aGlzLmRlc3Ryb3lPbkNsb3NlJiZ0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0LmtleSsrfSkpKX19LGNvbXB1dGVkOntzdHlsZTpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0aGlzLmZ1bGxzY3JlZW58fChlLm1hcmdpblRvcD10aGlzLnRvcCx0aGlzLndpZHRoJiYoZS53aWR0aD10aGlzLndpZHRoKSksZX19LG1ldGhvZHM6e2dldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbigpe3JldHVybntwcm9wczp7c2l6ZToic2l6ZSBpcyByZW1vdmVkLiJ9fX0saGFuZGxlV3JhcHBlckNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZU9uQ2xpY2tNb2RhbCYmdGhpcy5oYW5kbGVDbG9zZSgpfSxoYW5kbGVDbG9zZTpmdW5jdGlvbigpeyJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5iZWZvcmVDbG9zZT90aGlzLmJlZm9yZUNsb3NlKHRoaXMuaGlkZSk6dGhpcy5oaWRlKCl9LGhpZGU6ZnVuY3Rpb24oZSl7ITEhPT1lJiYodGhpcy4kZW1pdCgidXBkYXRlOnZpc2libGUiLCExKSx0aGlzLiRlbWl0KCJjbG9zZSIpLHRoaXMuY2xvc2VkPSEwKX0sdXBkYXRlUG9wcGVyOmZ1bmN0aW9uKCl7dGhpcy5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKSx0aGlzLmJyb2FkY2FzdCgiRWxEcm9wZG93bk1lbnUiLCJ1cGRhdGVQb3BwZXIiKX0sYWZ0ZXJFbnRlcjpmdW5jdGlvbigpe3RoaXMuJGVtaXQoIm9wZW5lZCIpfSxhZnRlckxlYXZlOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdCgiY2xvc2VkIil9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlJiYodGhpcy5yZW5kZXJlZD0hMCx0aGlzLm9wZW4oKSx0aGlzLmFwcGVuZFRvQm9keSYmZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCkpfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLmFwcGVuZFRvQm9keSYmdGhpcy4kZWwmJnRoaXMuJGVsLnBhcmVudE5vZGUmJnRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpfX0sRD1JLEE9cyhELF8sdywhMSxudWxsLG51bGwsbnVsbCk7QS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlIjt2YXIgTz1BLmV4cG9ydHM7Ty5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KE8ubmFtZSxPKX07dmFyIFA9TyxMPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6ZS5jbG9zZSxleHByZXNzaW9uOiJjbG9zZSJ9XSxzdGF0aWNDbGFzczoiZWwtYXV0b2NvbXBsZXRlIixhdHRyczp7ImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94Iixyb2xlOiJjb21ib2JveCIsImFyaWEtZXhwYW5kZWQiOmUuc3VnZ2VzdGlvblZpc2libGUsImFyaWEtb3ducyI6ZS5pZH19LFtuKCJlbC1pbnB1dCIsZS5fYih7cmVmOiJpbnB1dCIsb246e2lucHV0OmUuaGFuZGxlSW5wdXQsY2hhbmdlOmUuaGFuZGxlQ2hhbmdlLGZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjplLmhhbmRsZUJsdXIsY2xlYXI6ZS5oYW5kbGVDbGVhcn0sbmF0aXZlT246e2tleWRvd246W2Z1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInVwIiwzOCx0LmtleSxbIlVwIiwiQXJyb3dVcCJdKSlyZXR1cm4gbnVsbDt0LnByZXZlbnREZWZhdWx0KCksZS5oaWdobGlnaHQoZS5oaWdobGlnaHRlZEluZGV4LTEpfSxmdW5jdGlvbih0KXtpZighKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJkb3duIiw0MCx0LmtleSxbIkRvd24iLCJBcnJvd0Rvd24iXSkpcmV0dXJuIG51bGw7dC5wcmV2ZW50RGVmYXVsdCgpLGUuaGlnaGxpZ2h0KGUuaGlnaGxpZ2h0ZWRJbmRleCsxKX0sZnVuY3Rpb24odCl7cmV0dXJuISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZW50ZXIiLDEzLHQua2V5LCJFbnRlciIpP251bGw6ZS5oYW5kbGVLZXlFbnRlcih0KX0sZnVuY3Rpb24odCl7cmV0dXJuISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwidGFiIiw5LHQua2V5LCJUYWIiKT9udWxsOmUuY2xvc2UodCl9XX19LCJlbC1pbnB1dCIsW2UuJHByb3BzLGUuJGF0dHJzXSwhMSksW2UuJHNsb3RzLnByZXBlbmQ/bigidGVtcGxhdGUiLHtzbG90OiJwcmVwZW5kIn0sW2UuX3QoInByZXBlbmQiKV0sMik6ZS5fZSgpLGUuJHNsb3RzLmFwcGVuZD9uKCJ0ZW1wbGF0ZSIse3Nsb3Q6ImFwcGVuZCJ9LFtlLl90KCJhcHBlbmQiKV0sMik6ZS5fZSgpLGUuJHNsb3RzLnByZWZpeD9uKCJ0ZW1wbGF0ZSIse3Nsb3Q6InByZWZpeCJ9LFtlLl90KCJwcmVmaXgiKV0sMik6ZS5fZSgpLGUuJHNsb3RzLnN1ZmZpeD9uKCJ0ZW1wbGF0ZSIse3Nsb3Q6InN1ZmZpeCJ9LFtlLl90KCJzdWZmaXgiKV0sMik6ZS5fZSgpXSwyKSxuKCJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMiLHtyZWY6InN1Z2dlc3Rpb25zIixjbGFzczpbZS5wb3BwZXJDbGFzcz9lLnBvcHBlckNsYXNzOiIiXSxhdHRyczp7InZpc2libGUtYXJyb3ciOiIiLCJwb3BwZXItb3B0aW9ucyI6ZS5wb3BwZXJPcHRpb25zLCJhcHBlbmQtdG8tYm9keSI6ZS5wb3BwZXJBcHBlbmRUb0JvZHkscGxhY2VtZW50OmUucGxhY2VtZW50LGlkOmUuaWR9fSxlLl9sKGUuc3VnZ2VzdGlvbnMsKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4oImxpIix7a2V5OmksY2xhc3M6e2hpZ2hsaWdodGVkOmUuaGlnaGxpZ2h0ZWRJbmRleD09PWl9LGF0dHJzOntpZDplLmlkKyItaXRlbS0iK2kscm9sZToib3B0aW9uIiwiYXJpYS1zZWxlY3RlZCI6ZS5oaWdobGlnaHRlZEluZGV4PT09aX0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe2Uuc2VsZWN0KHQpfX19LFtlLl90KCJkZWZhdWx0IixbZS5fdigiXG4gICAgICAgICIrZS5fcyh0W2UudmFsdWVLZXldKSsiXG4gICAgICAiKV0se2l0ZW06dH0pXSwyKX0pKSwwKV0sMSl9LE49W107TC5fd2l0aFN0cmlwcGVkPSEwO3ZhciBSPW4oMTUpLCQ9bi5uKFIpLHo9bigxMCksQj1uLm4oeiksRj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOmUuZG9EZXN0cm95fX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuc2hvd1BvcHBlcixleHByZXNzaW9uOiJzaG93UG9wcGVyIn1dLHN0YXRpY0NsYXNzOiJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBlbC1wb3BwZXIiLGNsYXNzOnsiaXMtbG9hZGluZyI6IWUucGFyZW50LmhpZGVMb2FkaW5nJiZlLnBhcmVudC5sb2FkaW5nfSxzdHlsZTp7d2lkdGg6ZS5kcm9wZG93bldpZHRofSxhdHRyczp7cm9sZToicmVnaW9uIn19LFtuKCJlbC1zY3JvbGxiYXIiLHthdHRyczp7dGFnOiJ1bCIsIndyYXAtY2xhc3MiOiJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcCIsInZpZXctY2xhc3MiOiJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCJ9fSxbIWUucGFyZW50LmhpZGVMb2FkaW5nJiZlLnBhcmVudC5sb2FkaW5nP24oImxpIixbbigiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWxvYWRpbmcifSldKTplLl90KCJkZWZhdWx0IildLDIpXSwxKV0pfSxWPVtdO0YuX3dpdGhTdHJpcHBlZD0hMDt2YXIgaj1uKDUpLEg9bi5uKGopLFc9bigxNyksRz1uLm4oVyksVT17Y29tcG9uZW50czp7RWxTY3JvbGxiYXI6Ry5hfSxtaXhpbnM6W0guYSxFLmFdLGNvbXBvbmVudE5hbWU6IkVsQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMiLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cGFyZW50OnRoaXMuJHBhcmVudCxkcm9wZG93bldpZHRoOiIifX0scHJvcHM6e29wdGlvbnM6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57Z3B1QWNjZWxlcmF0aW9uOiExfX19LGlkOlN0cmluZ30sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuZGlzcGF0Y2goIkVsQXV0b2NvbXBsZXRlIiwiaXRlbS1jbGljayIsZSl9fSx1cGRhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24odCl7ZS5wb3BwZXJKUyYmZS51cGRhdGVQb3BwZXIoKX0pKX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuJHBhcmVudC5wb3BwZXJFbG09dGhpcy5wb3BwZXJFbG09dGhpcy4kZWwsdGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kcGFyZW50LiRyZWZzLmlucHV0LiRyZWZzLmlucHV0fHx0aGlzLiRwYXJlbnQuJHJlZnMuaW5wdXQuJHJlZnMudGV4dGFyZWEsdGhpcy5yZWZlcmVuY2VMaXN0PXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoIi5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCIpLHRoaXMucmVmZXJlbmNlTGlzdC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJsaXN0Ym94IiksdGhpcy5yZWZlcmVuY2VMaXN0LnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuaWQpfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRvbigidmlzaWJsZSIsKGZ1bmN0aW9uKHQsbil7ZS5kcm9wZG93bldpZHRoPW4rInB4IixlLnNob3dQb3BwZXI9dH0pKX19LHE9VSxZPXMocSxGLFYsITEsbnVsbCxudWxsLG51bGwpO1kub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZSI7dmFyIFg9WS5leHBvcnRzLEs9bigyMiksWj1uLm4oSyksSj17bmFtZToiRWxBdXRvY29tcGxldGUiLG1peGluczpbRS5hLFooKSgiaW5wdXQiKSxULmFdLGluaGVyaXRBdHRyczohMSxjb21wb25lbnROYW1lOiJFbEF1dG9jb21wbGV0ZSIsY29tcG9uZW50czp7RWxJbnB1dDptLmEsRWxBdXRvY29tcGxldGVTdWdnZXN0aW9uczpYfSxkaXJlY3RpdmVzOntDbGlja291dHNpZGU6Qi5hfSxwcm9wczp7dmFsdWVLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InZhbHVlIn0scG9wcGVyQ2xhc3M6U3RyaW5nLHBvcHBlck9wdGlvbnM6T2JqZWN0LHBsYWNlaG9sZGVyOlN0cmluZyxjbGVhcmFibGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxkaXNhYmxlZDpCb29sZWFuLG5hbWU6U3RyaW5nLHNpemU6U3RyaW5nLHZhbHVlOlN0cmluZyxtYXhsZW5ndGg6TnVtYmVyLG1pbmxlbmd0aDpOdW1iZXIsYXV0b2ZvY3VzOkJvb2xlYW4sZmV0Y2hTdWdnZXN0aW9uczpGdW5jdGlvbix0cmlnZ2VyT25Gb2N1czp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGN1c3RvbUl0ZW06U3RyaW5nLHNlbGVjdFdoZW5Vbm1hdGNoZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxwcmVmaXhJY29uOlN0cmluZyxzdWZmaXhJY29uOlN0cmluZyxsYWJlbDpTdHJpbmcsZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MzAwfSxwbGFjZW1lbnQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJvdHRvbS1zdGFydCJ9LGhpZGVMb2FkaW5nOkJvb2xlYW4scG9wcGVyQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0saGlnaGxpZ2h0Rmlyc3RJdGVtOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57YWN0aXZhdGVkOiExLHN1Z2dlc3Rpb25zOltdLGxvYWRpbmc6ITEsaGlnaGxpZ2h0ZWRJbmRleDotMSxzdWdnZXN0aW9uRGlzYWJsZWQ6ITF9fSxjb21wdXRlZDp7c3VnZ2VzdGlvblZpc2libGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN1Z2dlc3Rpb25zLHQ9QXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MDtyZXR1cm4odHx8dGhpcy5sb2FkaW5nKSYmdGhpcy5hY3RpdmF0ZWR9LGlkOmZ1bmN0aW9uKCl7cmV0dXJuImVsLWF1dG9jb21wbGV0ZS0iK09iamVjdCh5WyJnZW5lcmF0ZUlkIl0pKCl9fSx3YXRjaDp7c3VnZ2VzdGlvblZpc2libGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRJbnB1dCgpO3QmJnRoaXMuYnJvYWRjYXN0KCJFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zIiwidmlzaWJsZSIsW2UsdC5vZmZzZXRXaWR0aF0pfX0sbWV0aG9kczp7Z2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue3Byb3BzOnsiY3VzdG9tLWl0ZW0iOiJjdXN0b20taXRlbSBpcyByZW1vdmVkLCB1c2Ugc2NvcGVkIHNsb3QgaW5zdGVhZC4iLHByb3BzOiJwcm9wcyBpcyByZW1vdmVkLCB1c2UgdmFsdWUta2V5IGluc3RlYWQuIn19fSxnZXREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5zdWdnZXN0aW9uRGlzYWJsZWR8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5mZXRjaFN1Z2dlc3Rpb25zKGUsKGZ1bmN0aW9uKGUpe3QubG9hZGluZz0hMSx0LnN1Z2dlc3Rpb25EaXNhYmxlZHx8KEFycmF5LmlzQXJyYXkoZSk/KHQuc3VnZ2VzdGlvbnM9ZSx0LmhpZ2hsaWdodGVkSW5kZXg9dC5oaWdobGlnaHRGaXJzdEl0ZW0/MDotMSk6Y29uc29sZS5lcnJvcigiW0VsZW1lbnQgRXJyb3JdW0F1dG9jb21wbGV0ZV1hdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMgbXVzdCBiZSBhbiBhcnJheSIpKX0pKSl9LGhhbmRsZUlucHV0OmZ1bmN0aW9uKGUpe2lmKHRoaXMuJGVtaXQoImlucHV0IixlKSx0aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZD0hMSwhdGhpcy50cmlnZ2VyT25Gb2N1cyYmIWUpcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbkRpc2FibGVkPSEwLHZvaWQodGhpcy5zdWdnZXN0aW9ucz1bXSk7dGhpcy5kZWJvdW5jZWRHZXREYXRhKGUpfSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiY2hhbmdlIixlKX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmF0ZWQ9ITAsdGhpcy4kZW1pdCgiZm9jdXMiLGUpLHRoaXMudHJpZ2dlck9uRm9jdXMmJnRoaXMuZGVib3VuY2VkR2V0RGF0YSh0aGlzLnZhbHVlKX0saGFuZGxlQmx1cjpmdW5jdGlvbihlKXt0aGlzLiRlbWl0KCJibHVyIixlKX0saGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2YXRlZD0hMSx0aGlzLiRlbWl0KCJjbGVhciIpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2YXRlZD0hMX0saGFuZGxlS2V5RW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnN1Z2dlc3Rpb25WaXNpYmxlJiZ0aGlzLmhpZ2hsaWdodGVkSW5kZXg+PTAmJnRoaXMuaGlnaGxpZ2h0ZWRJbmRleDx0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aD8oZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZEluZGV4XSkpOnRoaXMuc2VsZWN0V2hlblVubWF0Y2hlZCYmKHRoaXMuJGVtaXQoInNlbGVjdCIse3ZhbHVlOnRoaXMudmFsdWV9KSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oZSl7dC5zdWdnZXN0aW9ucz1bXSx0LmhpZ2hsaWdodGVkSW5kZXg9LTF9KSkpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLiRlbWl0KCJpbnB1dCIsZVt0aGlzLnZhbHVlS2V5XSksdGhpcy4kZW1pdCgic2VsZWN0IixlKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oZSl7dC5zdWdnZXN0aW9ucz1bXSx0LmhpZ2hsaWdodGVkSW5kZXg9LTF9KSl9LGhpZ2hsaWdodDpmdW5jdGlvbihlKXtpZih0aGlzLnN1Z2dlc3Rpb25WaXNpYmxlJiYhdGhpcy5sb2FkaW5nKWlmKGU8MCl0aGlzLmhpZ2hsaWdodGVkSW5kZXg9LTE7ZWxzZXtlPj10aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCYmKGU9dGhpcy5zdWdnZXN0aW9ucy5sZW5ndGgtMSk7dmFyIHQ9dGhpcy4kcmVmcy5zdWdnZXN0aW9ucy4kZWwucXVlcnlTZWxlY3RvcigiLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwIiksbj10LnF1ZXJ5U2VsZWN0b3JBbGwoIi5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCBsaSIpLGk9bltlXSxyPXQuc2Nyb2xsVG9wLG89aS5vZmZzZXRUb3A7bytpLnNjcm9sbEhlaWdodD5yK3QuY2xpZW50SGVpZ2h0JiYodC5zY3JvbGxUb3ArPWkuc2Nyb2xsSGVpZ2h0KSxvPHImJih0LnNjcm9sbFRvcC09aS5zY3JvbGxIZWlnaHQpLHRoaXMuaGlnaGxpZ2h0ZWRJbmRleD1lO3ZhciBhPXRoaXMuZ2V0SW5wdXQoKTthLnNldEF0dHJpYnV0ZSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50Iix0aGlzLmlkKyItaXRlbS0iK3RoaXMuaGlnaGxpZ2h0ZWRJbmRleCl9fSxnZXRJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLmlucHV0LmdldElucHV0KCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmRlYm91bmNlZEdldERhdGE9JCgpKHRoaXMuZGVib3VuY2UsdGhpcy5nZXREYXRhKSx0aGlzLiRvbigiaXRlbS1jbGljayIsKGZ1bmN0aW9uKHQpe2Uuc2VsZWN0KHQpfSkpO3ZhciB0PXRoaXMuZ2V0SW5wdXQoKTt0LnNldEF0dHJpYnV0ZSgicm9sZSIsInRleHRib3giKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1hdXRvY29tcGxldGUiLCJsaXN0IiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLCJpZCIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHRoaXMuaWQrIi1pdGVtLSIrdGhpcy5oaWdobGlnaHRlZEluZGV4KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJHJlZnMuc3VnZ2VzdGlvbnMuJGRlc3Ryb3koKX19LFE9SixlZT1zKFEsTCxOLCExLG51bGwsbnVsbCxudWxsKTtlZS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlIjt2YXIgdGU9ZWUuZXhwb3J0czt0ZS5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KHRlLm5hbWUsdGUpfTt2YXIgbmUsaWUscmU9dGUsb2U9bigxMyksYWU9bi5uKG9lKSxzZT1uKDI4KSxsZT1uLm4oc2UpLGNlPXtuYW1lOiJFbERyb3Bkb3duIixjb21wb25lbnROYW1lOiJFbERyb3Bkb3duIixtaXhpbnM6W0UuYSxULmFdLGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpCLmF9LGNvbXBvbmVudHM6e0VsQnV0dG9uOmFlLmEsRWxCdXR0b25Hcm91cDpsZS5hfSxwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2Ryb3Bkb3duOnRoaXN9fSxwcm9wczp7dHJpZ2dlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiaG92ZXIifSx0eXBlOlN0cmluZyxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifSxzcGxpdEJ1dHRvbjpCb29sZWFuLGhpZGVPbkNsaWNrOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0scGxhY2VtZW50Ont0eXBlOlN0cmluZyxkZWZhdWx0OiJib3R0b20tZW5kIn0sdmlzaWJsZUFycm93OntkZWZhdWx0OiEwfSxzaG93VGltZW91dDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyNTB9LGhpZGVUaW1lb3V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjE1MH0sdGFiaW5kZXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGltZW91dDpudWxsLHZpc2libGU6ITEsdHJpZ2dlckVsbTpudWxsLG1lbnVJdGVtczpudWxsLG1lbnVJdGVtc0FycmF5Om51bGwsZHJvcGRvd25FbG06bnVsbCxmb2N1c2luZzohMSxsaXN0SWQ6ImRyb3Bkb3duLW1lbnUtIitPYmplY3QoeVsiZ2VuZXJhdGVJZCJdKSgpfX0sY29tcHV0ZWQ6e2Ryb3Bkb3duU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRvbigibWVudS1pdGVtLWNsaWNrIix0aGlzLmhhbmRsZU1lbnVJdGVtQ2xpY2spfSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbihlKXt0aGlzLmJyb2FkY2FzdCgiRWxEcm9wZG93bk1lbnUiLCJ2aXNpYmxlIixlKSx0aGlzLiRlbWl0KCJ2aXNpYmxlLWNoYW5nZSIsZSl9LGZvY3VzaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoIi5lbC1kcm9wZG93bi1zZWxmZGVmaW5lIik7dCYmKGU/dC5jbGFzc05hbWUrPSIgZm9jdXNpbmciOnQuY2xhc3NOYW1lPXQuY2xhc3NOYW1lLnJlcGxhY2UoImZvY3VzaW5nIiwiIikpfX0sbWV0aG9kczp7Z2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue3Byb3BzOnsibWVudS1hbGlnbiI6Im1lbnUtYWxpZ24gaXMgcmVuYW1lZCB0byBwbGFjZW1lbnQuIn19fSxzaG93OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRyaWdnZXJFbG0uZGlzYWJsZWR8fChjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLnRpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnZpc2libGU9ITB9KSwiY2xpY2siPT09dGhpcy50cmlnZ2VyPzA6dGhpcy5zaG93VGltZW91dCkpfSxoaWRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRyaWdnZXJFbG0uZGlzYWJsZWR8fCh0aGlzLnJlbW92ZVRhYmluZGV4KCksdGhpcy50YWJpbmRleD49MCYmdGhpcy5yZXNldFRhYmluZGV4KHRoaXMudHJpZ2dlckVsbSksY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS52aXNpYmxlPSExfSksImNsaWNrIj09PXRoaXMudHJpZ2dlcj8wOnRoaXMuaGlkZVRpbWVvdXQpKX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXJFbG0uZGlzYWJsZWR8fCh0aGlzLnZpc2libGU/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCkpfSxoYW5kbGVUcmlnZ2VyS2V5RG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGU7WzM4LDQwXS5pbmRleE9mKHQpPi0xPyh0aGlzLnJlbW92ZVRhYmluZGV4KCksdGhpcy5yZXNldFRhYmluZGV4KHRoaXMubWVudUl0ZW1zWzBdKSx0aGlzLm1lbnVJdGVtc1swXS5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKToxMz09PXQ/dGhpcy5oYW5kbGVDbGljaygpOls5LDI3XS5pbmRleE9mKHQpPi0xJiZ0aGlzLmhpZGUoKX0saGFuZGxlSXRlbUtleURvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlDb2RlLG49ZS50YXJnZXQsaT10aGlzLm1lbnVJdGVtc0FycmF5LmluZGV4T2Yobikscj10aGlzLm1lbnVJdGVtc0FycmF5Lmxlbmd0aC0xLG89dm9pZCAwO1szOCw0MF0uaW5kZXhPZih0KT4tMT8obz0zOD09PXQ/MCE9PWk/aS0xOjA6aTxyP2krMTpyLHRoaXMucmVtb3ZlVGFiaW5kZXgoKSx0aGlzLnJlc2V0VGFiaW5kZXgodGhpcy5tZW51SXRlbXNbb10pLHRoaXMubWVudUl0ZW1zW29dLmZvY3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpOjEzPT09dD8odGhpcy50cmlnZ2VyRWxtRm9jdXMoKSxuLmNsaWNrKCksdGhpcy5oaWRlT25DbGljayYmKHRoaXMudmlzaWJsZT0hMSkpOls5LDI3XS5pbmRleE9mKHQpPi0xJiYodGhpcy5oaWRlKCksdGhpcy50cmlnZ2VyRWxtRm9jdXMoKSl9LHJlc2V0VGFiaW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVUYWJpbmRleCgpLGUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKX0scmVtb3ZlVGFiaW5kZXg6ZnVuY3Rpb24oKXt0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5tZW51SXRlbXNBcnJheS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpfSkpfSxpbml0QXJpYTpmdW5jdGlvbigpe3RoaXMuZHJvcGRvd25FbG0uc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5saXN0SWQpLHRoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoImFyaWEtaGFzcG9wdXAiLCJsaXN0IiksdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgiYXJpYS1jb250cm9scyIsdGhpcy5saXN0SWQpLHRoaXMuc3BsaXRCdXR0b258fCh0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCJyb2xlIiwiYnV0dG9uIiksdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpLHRoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwodGhpcy50cmlnZ2VyRWxtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpKyIgZWwtZHJvcGRvd24tc2VsZmRlZmluZSIpKX0saW5pdEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMudHJpZ2dlcixuPXRoaXMuc2hvdyxpPXRoaXMuaGlkZSxyPXRoaXMuaGFuZGxlQ2xpY2ssbz10aGlzLnNwbGl0QnV0dG9uLGE9dGhpcy5oYW5kbGVUcmlnZ2VyS2V5RG93bixzPXRoaXMuaGFuZGxlSXRlbUtleURvd247dGhpcy50cmlnZ2VyRWxtPW8/dGhpcy4kcmVmcy50cmlnZ2VyLiRlbDp0aGlzLiRzbG90cy5kZWZhdWx0WzBdLmVsbTt2YXIgbD10aGlzLmRyb3Bkb3duRWxtO3RoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixhKSxsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHMsITApLG98fCh0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLChmdW5jdGlvbigpe2UuZm9jdXNpbmc9ITB9KSksdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLChmdW5jdGlvbigpe2UuZm9jdXNpbmc9ITF9KSksdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtlLmZvY3VzaW5nPSExfSkpKSwiaG92ZXIiPT09dD8odGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLG4pLHRoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIixpKSxsLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLG4pLGwuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsaSkpOiJjbGljayI9PT10JiZ0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHIpfSxoYW5kbGVNZW51SXRlbUNsaWNrOmZ1bmN0aW9uKGUsdCl7dGhpcy5oaWRlT25DbGljayYmKHRoaXMudmlzaWJsZT0hMSksdGhpcy4kZW1pdCgiY29tbWFuZCIsZSx0KX0sdHJpZ2dlckVsbUZvY3VzOmZ1bmN0aW9uKCl7dGhpcy50cmlnZ2VyRWxtLmZvY3VzJiZ0aGlzLnRyaWdnZXJFbG0uZm9jdXMoKX0saW5pdERvbU9wZXJhdGlvbjpmdW5jdGlvbigpe3RoaXMuZHJvcGRvd25FbG09dGhpcy5wb3BwZXJFbG0sdGhpcy5tZW51SXRlbXM9dGhpcy5kcm9wZG93bkVsbS5xdWVyeVNlbGVjdG9yQWxsKCJbdGFiaW5kZXg9Jy0xJ10iKSx0aGlzLm1lbnVJdGVtc0FycmF5PVtdLnNsaWNlLmNhbGwodGhpcy5tZW51SXRlbXMpLHRoaXMuaW5pdEV2ZW50KCksdGhpcy5pbml0QXJpYSgpfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLmhpZGUsaT10aGlzLnNwbGl0QnV0dG9uLHI9dGhpcy50eXBlLG89dGhpcy5kcm9wZG93blNpemUsYT1mdW5jdGlvbihlKXt0LiRlbWl0KCJjbGljayIsZSksbigpfSxzPWk/ZSgiZWwtYnV0dG9uLWdyb3VwIixbZSgiZWwtYnV0dG9uIix7YXR0cnM6e3R5cGU6cixzaXplOm99LG5hdGl2ZU9uOntjbGljazphfX0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKSxlKCJlbC1idXR0b24iLHtyZWY6InRyaWdnZXIiLGF0dHJzOnt0eXBlOnIsc2l6ZTpvfSxjbGFzczoiZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbiJ9LFtlKCJpIix7Y2xhc3M6ImVsLWRyb3Bkb3duX19pY29uIGVsLWljb24tYXJyb3ctZG93biJ9KV0pXSk6dGhpcy4kc2xvdHMuZGVmYXVsdDtyZXR1cm4gZSgiZGl2Iix7Y2xhc3M6ImVsLWRyb3Bkb3duIixkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIix2YWx1ZTpufV19LFtzLHRoaXMuJHNsb3RzLmRyb3Bkb3duXSl9fSx1ZT1jZSxoZT1zKHVlLG5lLGllLCExLG51bGwsbnVsbCxudWxsKTtoZS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLnZ1ZSI7dmFyIGRlPWhlLmV4cG9ydHM7ZGUuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChkZS5uYW1lLGRlKX07dmFyIGZlPWRlLHBlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZS5kb0Rlc3Ryb3l9fSxbbigidWwiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnNob3dQb3BwZXIsZXhwcmVzc2lvbjoic2hvd1BvcHBlciJ9XSxzdGF0aWNDbGFzczoiZWwtZHJvcGRvd24tbWVudSBlbC1wb3BwZXIiLGNsYXNzOltlLnNpemUmJiJlbC1kcm9wZG93bi1tZW51LS0iK2Uuc2l6ZV19LFtlLl90KCJkZWZhdWx0IildLDIpXSl9LG1lPVtdO3BlLl93aXRoU3RyaXBwZWQ9ITA7dmFyIGdlPXtuYW1lOiJFbERyb3Bkb3duTWVudSIsY29tcG9uZW50TmFtZToiRWxEcm9wZG93bk1lbnUiLG1peGluczpbSC5hXSxwcm9wczp7dmlzaWJsZUFycm93Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sYXJyb3dPZmZzZXQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZTp0aGlzLmRyb3Bkb3duLmRyb3Bkb3duU2l6ZX19LGluamVjdDpbImRyb3Bkb3duIl0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kb24oInVwZGF0ZVBvcHBlciIsKGZ1bmN0aW9uKCl7ZS5zaG93UG9wcGVyJiZlLnVwZGF0ZVBvcHBlcigpfSkpLHRoaXMuJG9uKCJ2aXNpYmxlIiwoZnVuY3Rpb24odCl7ZS5zaG93UG9wcGVyPXR9KSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmRyb3Bkb3duLnBvcHBlckVsbT10aGlzLnBvcHBlckVsbT10aGlzLiRlbCx0aGlzLnJlZmVyZW5jZUVsbT10aGlzLmRyb3Bkb3duLiRlbCx0aGlzLmRyb3Bkb3duLmluaXREb21PcGVyYXRpb24oKX0sd2F0Y2g6eyJkcm9wZG93bi5wbGFjZW1lbnQiOntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRQbGFjZW1lbnQ9ZX19fX0sdmU9Z2UseWU9cyh2ZSxwZSxtZSwhMSxudWxsLG51bGwsbnVsbCk7eWUub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1tZW51LnZ1ZSI7dmFyIGJlPXllLmV4cG9ydHM7YmUuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChiZS5uYW1lLGJlKX07dmFyIHhlPWJlLF9lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1kcm9wZG93bi1tZW51X19pdGVtIixjbGFzczp7ImlzLWRpc2FibGVkIjplLmRpc2FibGVkLCJlbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkIjplLmRpdmlkZWR9LGF0dHJzOnsiYXJpYS1kaXNhYmxlZCI6ZS5kaXNhYmxlZCx0YWJpbmRleDplLmRpc2FibGVkP251bGw6LTF9LG9uOntjbGljazplLmhhbmRsZUNsaWNrfX0sW2UuaWNvbj9uKCJpIix7Y2xhc3M6ZS5pY29ufSk6ZS5fZSgpLGUuX3QoImRlZmF1bHQiKV0sMil9LHdlPVtdO19lLl93aXRoU3RyaXBwZWQ9ITA7dmFyIFNlPXtuYW1lOiJFbERyb3Bkb3duSXRlbSIsbWl4aW5zOltFLmFdLHByb3BzOntjb21tYW5kOnt9LGRpc2FibGVkOkJvb2xlYW4sZGl2aWRlZDpCb29sZWFuLGljb246U3RyaW5nfSxtZXRob2RzOntoYW5kbGVDbGljazpmdW5jdGlvbihlKXt0aGlzLmRpc3BhdGNoKCJFbERyb3Bkb3duIiwibWVudS1pdGVtLWNsaWNrIixbdGhpcy5jb21tYW5kLHRoaXNdKX19fSxDZT1TZSxrZT1zKENlLF9lLHdlLCExLG51bGwsbnVsbCxudWxsKTtrZS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlIjt2YXIgVGU9a2UuZXhwb3J0cztUZS5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KFRlLm5hbWUsVGUpfTt2YXIgTWU9VGUsRWU9RWV8fHt9O0VlLlV0aWxzPUVlLlV0aWxzfHx7fSxFZS5VdGlscy5mb2N1c0ZpcnN0RGVzY2VuZGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUuY2hpbGROb2Rlcy5sZW5ndGg7dCsrKXt2YXIgbj1lLmNoaWxkTm9kZXNbdF07aWYoRWUuVXRpbHMuYXR0ZW1wdEZvY3VzKG4pfHxFZS5VdGlscy5mb2N1c0ZpcnN0RGVzY2VuZGFudChuKSlyZXR1cm4hMH1yZXR1cm4hMX0sRWUuVXRpbHMuZm9jdXNMYXN0RGVzY2VuZGFudD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jaGlsZE5vZGVzLmxlbmd0aC0xO3Q+PTA7dC0tKXt2YXIgbj1lLmNoaWxkTm9kZXNbdF07aWYoRWUuVXRpbHMuYXR0ZW1wdEZvY3VzKG4pfHxFZS5VdGlscy5mb2N1c0xhc3REZXNjZW5kYW50KG4pKXJldHVybiEwfXJldHVybiExfSxFZS5VdGlscy5hdHRlbXB0Rm9jdXM9ZnVuY3Rpb24oZSl7aWYoIUVlLlV0aWxzLmlzRm9jdXNhYmxlKGUpKXJldHVybiExO0VlLlV0aWxzLklnbm9yZVV0aWxGb2N1c0NoYW5nZXM9ITA7dHJ5e2UuZm9jdXMoKX1jYXRjaCh0KXt9cmV0dXJuIEVlLlV0aWxzLklnbm9yZVV0aWxGb2N1c0NoYW5nZXM9ITEsZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWV9LEVlLlV0aWxzLmlzRm9jdXNhYmxlPWZ1bmN0aW9uKGUpe2lmKGUudGFiSW5kZXg+MHx8MD09PWUudGFiSW5kZXgmJm51bGwhPT1lLmdldEF0dHJpYnV0ZSgidGFiSW5kZXgiKSlyZXR1cm4hMDtpZihlLmRpc2FibGVkKXJldHVybiExO3N3aXRjaChlLm5vZGVOYW1lKXtjYXNlIkEiOnJldHVybiEhZS5ocmVmJiYiaWdub3JlIiE9PWUucmVsO2Nhc2UiSU5QVVQiOnJldHVybiJoaWRkZW4iIT09ZS50eXBlJiYiZmlsZSIhPT1lLnR5cGU7Y2FzZSJCVVRUT04iOmNhc2UiU0VMRUNUIjpjYXNlIlRFWFRBUkVBIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sRWUuVXRpbHMudHJpZ2dlckV2ZW50PWZ1bmN0aW9uKGUsdCl7dmFyIG49dm9pZCAwO249L15tb3VzZXxjbGljay8udGVzdCh0KT8iTW91c2VFdmVudHMiOi9ea2V5Ly50ZXN0KHQpPyJLZXlib2FyZEV2ZW50IjoiSFRNTEV2ZW50cyI7Zm9yKHZhciBpPWRvY3VtZW50LmNyZWF0ZUV2ZW50KG4pLHI9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KHI+Mj9yLTI6MCksYT0yO2E8cjthKyspb1thLTJdPWFyZ3VtZW50c1thXTtyZXR1cm4gaS5pbml0RXZlbnQuYXBwbHkoaSxbdF0uY29uY2F0KG8pKSxlLmRpc3BhdGNoRXZlbnQ/ZS5kaXNwYXRjaEV2ZW50KGkpOmUuZmlyZUV2ZW50KCJvbiIrdCxpKSxlfSxFZS5VdGlscy5rZXlzPXt0YWI6OSxlbnRlcjoxMyxzcGFjZTozMixsZWZ0OjM3LHVwOjM4LHJpZ2h0OjM5LGRvd246NDAsZXNjOjI3fTt2YXIgSWU9RWUuVXRpbHMsRGU9ZnVuY3Rpb24oZSx0KXt0aGlzLmRvbU5vZGU9dCx0aGlzLnBhcmVudD1lLHRoaXMuc3ViTWVudUl0ZW1zPVtdLHRoaXMuc3ViSW5kZXg9MCx0aGlzLmluaXQoKX07RGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnN1Yk1lbnVJdGVtcz10aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvckFsbCgibGkiKSx0aGlzLmFkZExpc3RlbmVycygpfSxEZS5wcm90b3R5cGUuZ290b1N1YkluZGV4PWZ1bmN0aW9uKGUpe2U9PT10aGlzLnN1Yk1lbnVJdGVtcy5sZW5ndGg/ZT0wOmU8MCYmKGU9dGhpcy5zdWJNZW51SXRlbXMubGVuZ3RoLTEpLHRoaXMuc3ViTWVudUl0ZW1zW2VdLmZvY3VzKCksdGhpcy5zdWJJbmRleD1lfSxEZS5wcm90b3R5cGUuYWRkTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PUllLmtleXMsbj10aGlzLnBhcmVudC5kb21Ob2RlO0FycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodGhpcy5zdWJNZW51SXRlbXMsKGZ1bmN0aW9uKGkpe2kuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKGZ1bmN0aW9uKGkpe3ZhciByPSExO3N3aXRjaChpLmtleUNvZGUpe2Nhc2UgdC5kb3duOmUuZ290b1N1YkluZGV4KGUuc3ViSW5kZXgrMSkscj0hMDticmVhaztjYXNlIHQudXA6ZS5nb3RvU3ViSW5kZXgoZS5zdWJJbmRleC0xKSxyPSEwO2JyZWFrO2Nhc2UgdC50YWI6SWUudHJpZ2dlckV2ZW50KG4sIm1vdXNlbGVhdmUiKTticmVhaztjYXNlIHQuZW50ZXI6Y2FzZSB0LnNwYWNlOnI9ITAsaS5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7YnJlYWt9cmV0dXJuIHImJihpLnByZXZlbnREZWZhdWx0KCksaS5zdG9wUHJvcGFnYXRpb24oKSksITF9KSl9KSl9O3ZhciBBZT1EZSxPZT1mdW5jdGlvbihlKXt0aGlzLmRvbU5vZGU9ZSx0aGlzLnN1Ym1lbnU9bnVsbCx0aGlzLmluaXQoKX07T2UucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLmRvbU5vZGUuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTt2YXIgZT10aGlzLmRvbU5vZGUucXVlcnlTZWxlY3RvcigiLmVsLW1lbnUiKTtlJiYodGhpcy5zdWJtZW51PW5ldyBBZSh0aGlzLGUpKSx0aGlzLmFkZExpc3RlbmVycygpfSxPZS5wcm90b3R5cGUuYWRkTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PUllLmtleXM7dGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLChmdW5jdGlvbihuKXt2YXIgaT0hMTtzd2l0Y2gobi5rZXlDb2RlKXtjYXNlIHQuZG93bjpJZS50cmlnZ2VyRXZlbnQobi5jdXJyZW50VGFyZ2V0LCJtb3VzZWVudGVyIiksZS5zdWJtZW51JiZlLnN1Ym1lbnUuZ290b1N1YkluZGV4KDApLGk9ITA7YnJlYWs7Y2FzZSB0LnVwOkllLnRyaWdnZXJFdmVudChuLmN1cnJlbnRUYXJnZXQsIm1vdXNlZW50ZXIiKSxlLnN1Ym1lbnUmJmUuc3VibWVudS5nb3RvU3ViSW5kZXgoZS5zdWJtZW51LnN1Yk1lbnVJdGVtcy5sZW5ndGgtMSksaT0hMDticmVhaztjYXNlIHQudGFiOkllLnRyaWdnZXJFdmVudChuLmN1cnJlbnRUYXJnZXQsIm1vdXNlbGVhdmUiKTticmVhaztjYXNlIHQuZW50ZXI6Y2FzZSB0LnNwYWNlOmk9ITAsbi5jdXJyZW50VGFyZ2V0LmNsaWNrKCk7YnJlYWt9aSYmbi5wcmV2ZW50RGVmYXVsdCgpfSkpfTt2YXIgUGU9T2UsTGU9ZnVuY3Rpb24oZSl7dGhpcy5kb21Ob2RlPWUsdGhpcy5pbml0KCl9O0xlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kb21Ob2RlLmNoaWxkTm9kZXM7W10uZmlsdGVyLmNhbGwoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe25ldyBQZShlKX0pKX07dmFyIE5lLFJlLCRlPUxlLHplPW4oMSksQmU9e25hbWU6IkVsTWVudSIscmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUoInVsIix7YXR0cnM6e3JvbGU6Im1lbnViYXIifSxrZXk6K3RoaXMuY29sbGFwc2Usc3R5bGU6e2JhY2tncm91bmRDb2xvcjp0aGlzLmJhY2tncm91bmRDb2xvcnx8IiJ9LGNsYXNzOnsiZWwtbWVudS0taG9yaXpvbnRhbCI6Imhvcml6b250YWwiPT09dGhpcy5tb2RlLCJlbC1tZW51LS1jb2xsYXBzZSI6dGhpcy5jb2xsYXBzZSwiZWwtbWVudSI6ITB9fSxbdGhpcy4kc2xvdHMuZGVmYXVsdF0pO3JldHVybiB0aGlzLmNvbGxhcHNlVHJhbnNpdGlvbj9lKCJlbC1tZW51LWNvbGxhcHNlLXRyYW5zaXRpb24iLFt0XSk6dH0sY29tcG9uZW50TmFtZToiRWxNZW51IixtaXhpbnM6W0UuYSxULmFdLHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57cm9vdE1lbnU6dGhpc319LGNvbXBvbmVudHM6eyJlbC1tZW51LWNvbGxhcHNlLXRyYW5zaXRpb24iOntmdW5jdGlvbmFsOiEwLHJlbmRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXtwcm9wczp7bW9kZToib3V0LWluIn0sb246e2JlZm9yZUVudGVyOmZ1bmN0aW9uKGUpe2Uuc3R5bGUub3BhY2l0eT0uMn0sZW50ZXI6ZnVuY3Rpb24oZSl7T2JqZWN0KHplWyJhZGRDbGFzcyJdKShlLCJlbC1vcGFjaXR5LXRyYW5zaXRpb24iKSxlLnN0eWxlLm9wYWNpdHk9MX0sYWZ0ZXJFbnRlcjpmdW5jdGlvbihlKXtPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKGUsImVsLW9wYWNpdHktdHJhbnNpdGlvbiIpLGUuc3R5bGUub3BhY2l0eT0iIn0sYmVmb3JlTGVhdmU6ZnVuY3Rpb24oZSl7ZS5kYXRhc2V0fHwoZS5kYXRhc2V0PXt9KSxPYmplY3QoemVbImhhc0NsYXNzIl0pKGUsImVsLW1lbnUtLWNvbGxhcHNlIik/KE9iamVjdCh6ZVsicmVtb3ZlQ2xhc3MiXSkoZSwiZWwtbWVudS0tY29sbGFwc2UiKSxlLmRhdGFzZXQub2xkT3ZlcmZsb3c9ZS5zdHlsZS5vdmVyZmxvdyxlLmRhdGFzZXQuc2Nyb2xsV2lkdGg9ZS5jbGllbnRXaWR0aCxPYmplY3QoemVbImFkZENsYXNzIl0pKGUsImVsLW1lbnUtLWNvbGxhcHNlIikpOihPYmplY3QoemVbImFkZENsYXNzIl0pKGUsImVsLW1lbnUtLWNvbGxhcHNlIiksZS5kYXRhc2V0Lm9sZE92ZXJmbG93PWUuc3R5bGUub3ZlcmZsb3csZS5kYXRhc2V0LnNjcm9sbFdpZHRoPWUuY2xpZW50V2lkdGgsT2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKShlLCJlbC1tZW51LS1jb2xsYXBzZSIpKSxlLnN0eWxlLndpZHRoPWUuc2Nyb2xsV2lkdGgrInB4IixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4ifSxsZWF2ZTpmdW5jdGlvbihlKXtPYmplY3QoemVbImFkZENsYXNzIl0pKGUsImhvcml6b250YWwtY29sbGFwc2UtdHJhbnNpdGlvbiIpLGUuc3R5bGUud2lkdGg9ZS5kYXRhc2V0LnNjcm9sbFdpZHRoKyJweCJ9fX07cmV0dXJuIGUoInRyYW5zaXRpb24iLG4sdC5jaGlsZHJlbil9fX0scHJvcHM6e21vZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InZlcnRpY2FsIn0sZGVmYXVsdEFjdGl2ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGVmYXVsdE9wZW5lZHM6QXJyYXksdW5pcXVlT3BlbmVkOkJvb2xlYW4scm91dGVyOkJvb2xlYW4sbWVudVRyaWdnZXI6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImhvdmVyIn0sY29sbGFwc2U6Qm9vbGVhbixiYWNrZ3JvdW5kQ29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsYWN0aXZlVGV4dENvbG9yOlN0cmluZyxjb2xsYXBzZVRyYW5zaXRpb246e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnthY3RpdmVJbmRleDp0aGlzLmRlZmF1bHRBY3RpdmUsb3BlbmVkTWVudXM6dGhpcy5kZWZhdWx0T3BlbmVkcyYmIXRoaXMuY29sbGFwc2U/dGhpcy5kZWZhdWx0T3BlbmVkcy5zbGljZSgwKTpbXSxpdGVtczp7fSxzdWJtZW51czp7fX19LGNvbXB1dGVkOntob3ZlckJhY2tncm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iYWNrZ3JvdW5kQ29sb3I/dGhpcy5taXhDb2xvcih0aGlzLmJhY2tncm91bmRDb2xvciwuMik6IiJ9LGlzTWVudVBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5tb2RlfHwidmVydGljYWwiPT09dGhpcy5tb2RlJiZ0aGlzLmNvbGxhcHNlfX0sd2F0Y2g6e2RlZmF1bHRBY3RpdmU6ZnVuY3Rpb24oZSl7dGhpcy5pdGVtc1tlXXx8KHRoaXMuYWN0aXZlSW5kZXg9bnVsbCksdGhpcy51cGRhdGVBY3RpdmVJbmRleChlKX0sZGVmYXVsdE9wZW5lZHM6ZnVuY3Rpb24oZSl7dGhpcy5jb2xsYXBzZXx8KHRoaXMub3BlbmVkTWVudXM9ZSl9LGNvbGxhcHNlOmZ1bmN0aW9uKGUpe2UmJih0aGlzLm9wZW5lZE1lbnVzPVtdKSx0aGlzLmJyb2FkY2FzdCgiRWxTdWJtZW51IiwidG9nZ2xlLWNvbGxhcHNlIixlKX19LG1ldGhvZHM6e3VwZGF0ZUFjdGl2ZUluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaXRlbXNbZV18fHRoaXMuaXRlbXNbdGhpcy5hY3RpdmVJbmRleF18fHRoaXMuaXRlbXNbdGhpcy5kZWZhdWx0QWN0aXZlXTt0Pyh0aGlzLmFjdGl2ZUluZGV4PXQuaW5kZXgsdGhpcy5pbml0T3BlbmVkTWVudSgpKTp0aGlzLmFjdGl2ZUluZGV4PW51bGx9LGdldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbigpe3JldHVybntwcm9wczp7dGhlbWU6InRoZW1lIGlzIHJlbW92ZWQuIn19fSxnZXRDb2xvckNoYW5uZWxzOmZ1bmN0aW9uKGUpe2lmKGU9ZS5yZXBsYWNlKCIjIiwiIiksL15bMC05YS1mQS1GXXszfSQvLnRlc3QoZSkpe2U9ZS5zcGxpdCgiIik7Zm9yKHZhciB0PTI7dD49MDt0LS0pZS5zcGxpY2UodCwwLGVbdF0pO2U9ZS5qb2luKCIiKX1yZXR1cm4vXlswLTlhLWZBLUZdezZ9JC8udGVzdChlKT97cmVkOnBhcnNlSW50KGUuc2xpY2UoMCwyKSwxNiksZ3JlZW46cGFyc2VJbnQoZS5zbGljZSgyLDQpLDE2KSxibHVlOnBhcnNlSW50KGUuc2xpY2UoNCw2KSwxNil9OntyZWQ6MjU1LGdyZWVuOjI1NSxibHVlOjI1NX19LG1peENvbG9yOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRDb2xvckNoYW5uZWxzKGUpLGk9bi5yZWQscj1uLmdyZWVuLG89bi5ibHVlO3JldHVybiB0PjA/KGkqPTEtdCxyKj0xLXQsbyo9MS10KTooaSs9KDI1NS1pKSp0LHIrPSgyNTUtcikqdCxvKz0oMjU1LW8pKnQpLCJyZ2IoIitNYXRoLnJvdW5kKGkpKyIsICIrTWF0aC5yb3VuZChyKSsiLCAiK01hdGgucm91bmQobykrIikifSxhZGRJdGVtOmZ1bmN0aW9uKGUpe3RoaXMuJHNldCh0aGlzLml0ZW1zLGUuaW5kZXgsZSl9LHJlbW92ZUl0ZW06ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuaXRlbXNbZS5pbmRleF19LGFkZFN1Ym1lbnU6ZnVuY3Rpb24oZSl7dGhpcy4kc2V0KHRoaXMuc3VibWVudXMsZS5pbmRleCxlKX0scmVtb3ZlU3VibWVudTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5zdWJtZW51c1tlLmluZGV4XX0sb3Blbk1lbnU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wZW5lZE1lbnVzOy0xPT09bi5pbmRleE9mKGUpJiYodGhpcy51bmlxdWVPcGVuZWQmJih0aGlzLm9wZW5lZE1lbnVzPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4tMSE9PXQuaW5kZXhPZihlKX0pKSksdGhpcy5vcGVuZWRNZW51cy5wdXNoKGUpKX0sY2xvc2VNZW51OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3BlbmVkTWVudXMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMub3BlbmVkTWVudXMuc3BsaWNlKHQsMSl9LGhhbmRsZVN1Ym1lbnVDbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4LG49ZS5pbmRleFBhdGgsaT0tMSE9PXRoaXMub3BlbmVkTWVudXMuaW5kZXhPZih0KTtpPyh0aGlzLmNsb3NlTWVudSh0KSx0aGlzLiRlbWl0KCJjbG9zZSIsdCxuKSk6KHRoaXMub3Blbk1lbnUodCxuKSx0aGlzLiRlbWl0KCJvcGVuIix0LG4pKX0saGFuZGxlSXRlbUNsaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLmluZGV4LGk9ZS5pbmRleFBhdGgscj10aGlzLmFjdGl2ZUluZGV4LG89bnVsbCE9PWUuaW5kZXg7byYmKHRoaXMuYWN0aXZlSW5kZXg9ZS5pbmRleCksdGhpcy4kZW1pdCgic2VsZWN0IixuLGksZSksKCJob3Jpem9udGFsIj09PXRoaXMubW9kZXx8dGhpcy5jb2xsYXBzZSkmJih0aGlzLm9wZW5lZE1lbnVzPVtdKSx0aGlzLnJvdXRlciYmbyYmdGhpcy5yb3V0ZVRvSXRlbShlLChmdW5jdGlvbihlKXtpZih0LmFjdGl2ZUluZGV4PXIsZSl7aWYoIk5hdmlnYXRpb25EdXBsaWNhdGVkIj09PWUubmFtZSlyZXR1cm47Y29uc29sZS5lcnJvcihlKX19KSl9LGluaXRPcGVuZWRNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuYWN0aXZlSW5kZXgsbj10aGlzLml0ZW1zW3RdO2lmKG4mJiJob3Jpem9udGFsIiE9PXRoaXMubW9kZSYmIXRoaXMuY29sbGFwc2Upe3ZhciBpPW4uaW5kZXhQYXRoO2kuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5zdWJtZW51c1t0XTtuJiZlLm9wZW5NZW51KHQsbi5pbmRleFBhdGgpfSkpfX0scm91dGVUb0l0ZW06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnJvdXRlfHxlLmluZGV4O3RyeXt0aGlzLiRyb3V0ZXIucHVzaChuLChmdW5jdGlvbigpe30pLHQpfWNhdGNoKGkpe2NvbnNvbGUuZXJyb3IoaSl9fSxvcGVuOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLnN1Ym1lbnVzW2UudG9TdHJpbmcoKV0uaW5kZXhQYXRoO24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3Blbk1lbnUoZSxuKX0pKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zZU1lbnUoZSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5pbml0T3BlbmVkTWVudSgpLHRoaXMuJG9uKCJpdGVtLWNsaWNrIix0aGlzLmhhbmRsZUl0ZW1DbGljayksdGhpcy4kb24oInN1Ym1lbnUtY2xpY2siLHRoaXMuaGFuZGxlU3VibWVudUNsaWNrKSwiaG9yaXpvbnRhbCI9PT10aGlzLm1vZGUmJm5ldyAkZSh0aGlzLiRlbCksdGhpcy4kd2F0Y2goIml0ZW1zIix0aGlzLnVwZGF0ZUFjdGl2ZUluZGV4KX19LEZlPUJlLFZlPXMoRmUsTmUsUmUsITEsbnVsbCxudWxsLG51bGwpO1ZlLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9tZW51L3NyYy9tZW51LnZ1ZSI7dmFyIGplPVZlLmV4cG9ydHM7amUuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChqZS5uYW1lLGplKX07dmFyIEhlLFdlLEdlPWplLFVlPW4oMjEpLHFlPW4ubihVZSksWWU9e2luamVjdDpbInJvb3RNZW51Il0sY29tcHV0ZWQ6e2luZGV4UGF0aDpmdW5jdGlvbigpe3ZhciBlPVt0aGlzLmluZGV4XSx0PXRoaXMuJHBhcmVudDt3aGlsZSgiRWxNZW51IiE9PXQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSl0LmluZGV4JiZlLnVuc2hpZnQodC5pbmRleCksdD10LiRwYXJlbnQ7cmV0dXJuIGV9LHBhcmVudE1lbnU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQ7d2hpbGUoZSYmLTE9PT1bIkVsTWVudSIsIkVsU3VibWVudSJdLmluZGV4T2YoZS4kb3B0aW9ucy5jb21wb25lbnROYW1lKSllPWUuJHBhcmVudDtyZXR1cm4gZX0scGFkZGluZ1N0eWxlOmZ1bmN0aW9uKCl7aWYoInZlcnRpY2FsIiE9PXRoaXMucm9vdE1lbnUubW9kZSlyZXR1cm57fTt2YXIgZT0yMCx0PXRoaXMuJHBhcmVudDtpZih0aGlzLnJvb3RNZW51LmNvbGxhcHNlKWU9MjA7ZWxzZSB3aGlsZSh0JiYiRWxNZW51IiE9PXQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSkiRWxTdWJtZW51Ij09PXQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSYmKGUrPTIwKSx0PXQuJHBhcmVudDtyZXR1cm57cGFkZGluZ0xlZnQ6ZSsicHgifX19fSxYZT17cHJvcHM6e3RyYW5zZm9ybU9yaWdpbjp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LG9mZnNldDpILmEucHJvcHMub2Zmc2V0LGJvdW5kYXJpZXNQYWRkaW5nOkguYS5wcm9wcy5ib3VuZGFyaWVzUGFkZGluZyxwb3BwZXJPcHRpb25zOkguYS5wcm9wcy5wb3BwZXJPcHRpb25zfSxkYXRhOkguYS5kYXRhLG1ldGhvZHM6SC5hLm1ldGhvZHMsYmVmb3JlRGVzdHJveTpILmEuYmVmb3JlRGVzdHJveSxkZWFjdGl2YXRlZDpILmEuZGVhY3RpdmF0ZWR9LEtlPXtuYW1lOiJFbFN1Ym1lbnUiLGNvbXBvbmVudE5hbWU6IkVsU3VibWVudSIsbWl4aW5zOltZZSxFLmEsWGVdLGNvbXBvbmVudHM6e0VsQ29sbGFwc2VUcmFuc2l0aW9uOnFlLmF9LHByb3BzOntpbmRleDp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LHNob3dUaW1lb3V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0saGlkZVRpbWVvdXQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MzAwfSxwb3BwZXJDbGFzczpTdHJpbmcsZGlzYWJsZWQ6Qm9vbGVhbixwb3BwZXJBcHBlbmRUb0JvZHk6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnZvaWQgMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9wcGVySlM6bnVsbCx0aW1lb3V0Om51bGwsaXRlbXM6e30sc3VibWVudXM6e30sbW91c2VJbkNoaWxkOiExfX0sd2F0Y2g6e29wZW5lZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuaXNNZW51UG9wdXAmJnRoaXMuJG5leHRUaWNrKChmdW5jdGlvbihlKXt0LnVwZGF0ZVBvcHBlcigpfSkpfX0sY29tcHV0ZWQ6e2FwcGVuZFRvQm9keTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLnBvcHBlckFwcGVuZFRvQm9keT90aGlzLmlzRmlyc3RMZXZlbDp0aGlzLnBvcHBlckFwcGVuZFRvQm9keX0sbWVudVRyYW5zaXRpb25OYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuY29sbGFwc2U/ImVsLXpvb20taW4tbGVmdCI6ImVsLXpvb20taW4tdG9wIn0sb3BlbmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUub3BlbmVkTWVudXMuaW5kZXhPZih0aGlzLmluZGV4KT4tMX0sYWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGU9ITEsdD10aGlzLnN1Ym1lbnVzLG49dGhpcy5pdGVtcztyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7blt0XS5hY3RpdmUmJihlPSEwKX0pKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt0W25dLmFjdGl2ZSYmKGU9ITApfSkpLGV9LGhvdmVyQmFja2dyb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RNZW51LmhvdmVyQmFja2dyb3VuZH0sYmFja2dyb3VuZENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yfHwiIn0sYWN0aXZlVGV4dENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuYWN0aXZlVGV4dENvbG9yfHwiIn0sdGV4dENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUudGV4dENvbG9yfHwiIn0sbW9kZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3RNZW51Lm1vZGV9LGlzTWVudVBvcHVwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuaXNNZW51UG9wdXB9LHRpdGxlU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iaG9yaXpvbnRhbCIhPT10aGlzLm1vZGU/e2NvbG9yOnRoaXMudGV4dENvbG9yfTp7Ym9yZGVyQm90dG9tQ29sb3I6dGhpcy5hY3RpdmU/dGhpcy5yb290TWVudS5hY3RpdmVUZXh0Q29sb3I/dGhpcy5hY3RpdmVUZXh0Q29sb3I6IiI6InRyYW5zcGFyZW50Iixjb2xvcjp0aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZVRleHRDb2xvcjp0aGlzLnRleHRDb2xvcn19LGlzRmlyc3RMZXZlbDpmdW5jdGlvbigpe3ZhciBlPSEwLHQ9dGhpcy4kcGFyZW50O3doaWxlKHQmJnQhPT10aGlzLnJvb3RNZW51KXtpZihbIkVsU3VibWVudSIsIkVsTWVudUl0ZW1Hcm91cCJdLmluZGV4T2YodC4kb3B0aW9ucy5jb21wb25lbnROYW1lKT4tMSl7ZT0hMTticmVha310PXQuJHBhcmVudH1yZXR1cm4gZX19LG1ldGhvZHM6e2hhbmRsZUNvbGxhcHNlVG9nZ2xlOmZ1bmN0aW9uKGUpe2U/dGhpcy5pbml0UG9wcGVyKCk6dGhpcy5kb0Rlc3Ryb3koKX0sYWRkSXRlbTpmdW5jdGlvbihlKXt0aGlzLiRzZXQodGhpcy5pdGVtcyxlLmluZGV4LGUpfSxyZW1vdmVJdGVtOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLml0ZW1zW2UuaW5kZXhdfSxhZGRTdWJtZW51OmZ1bmN0aW9uKGUpe3RoaXMuJHNldCh0aGlzLnN1Ym1lbnVzLGUuaW5kZXgsZSl9LHJlbW92ZVN1Ym1lbnU6ZnVuY3Rpb24oZSl7ZGVsZXRlIHRoaXMuc3VibWVudXNbZS5pbmRleF19LGhhbmRsZUNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb290TWVudSx0PXRoaXMuZGlzYWJsZWQ7ImhvdmVyIj09PWUubWVudVRyaWdnZXImJiJob3Jpem9udGFsIj09PWUubW9kZXx8ZS5jb2xsYXBzZSYmInZlcnRpY2FsIj09PWUubW9kZXx8dHx8dGhpcy5kaXNwYXRjaCgiRWxNZW51Iiwic3VibWVudS1jbGljayIsdGhpcyl9LGhhbmRsZU1vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnNob3dUaW1lb3V0O2lmKCJBY3RpdmVYT2JqZWN0ImluIHdpbmRvd3x8ImZvY3VzIiE9PWUudHlwZXx8ZS5yZWxhdGVkVGFyZ2V0KXt2YXIgaT10aGlzLnJvb3RNZW51LHI9dGhpcy5kaXNhYmxlZDsiY2xpY2siPT09aS5tZW51VHJpZ2dlciYmImhvcml6b250YWwiPT09aS5tb2RlfHwhaS5jb2xsYXBzZSYmInZlcnRpY2FsIj09PWkubW9kZXx8cnx8KHRoaXMuZGlzcGF0Y2goIkVsU3VibWVudSIsIm1vdXNlLWVudGVyLWNoaWxkIiksY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5yb290TWVudS5vcGVuTWVudSh0LmluZGV4LHQuaW5kZXhQYXRoKX0pLG4pLHRoaXMuYXBwZW5kVG9Cb2R5JiZ0aGlzLiRwYXJlbnQuJGVsLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSkpfX0saGFuZGxlTW91c2VsZWF2ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLG49dGhpcy5yb290TWVudTsiY2xpY2siPT09bi5tZW51VHJpZ2dlciYmImhvcml6b250YWwiPT09bi5tb2RlfHwhbi5jb2xsYXBzZSYmInZlcnRpY2FsIj09PW4ubW9kZXx8KHRoaXMuZGlzcGF0Y2goIkVsU3VibWVudSIsIm1vdXNlLWxlYXZlLWNoaWxkIiksY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7IWUubW91c2VJbkNoaWxkJiZlLnJvb3RNZW51LmNsb3NlTWVudShlLmluZGV4KX0pLHRoaXMuaGlkZVRpbWVvdXQpLHRoaXMuYXBwZW5kVG9Cb2R5JiZ0JiYiRWxTdWJtZW51Ij09PXRoaXMuJHBhcmVudC4kb3B0aW9ucy5uYW1lJiZ0aGlzLiRwYXJlbnQuaGFuZGxlTW91c2VsZWF2ZSghMCkpfSxoYW5kbGVUaXRsZU1vdXNlZW50ZXI6ZnVuY3Rpb24oKXtpZigiaG9yaXpvbnRhbCIhPT10aGlzLm1vZGV8fHRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yKXt2YXIgZT10aGlzLiRyZWZzWyJzdWJtZW51LXRpdGxlIl07ZSYmKGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMucm9vdE1lbnUuaG92ZXJCYWNrZ3JvdW5kKX19LGhhbmRsZVRpdGxlTW91c2VsZWF2ZTpmdW5jdGlvbigpe2lmKCJob3Jpem9udGFsIiE9PXRoaXMubW9kZXx8dGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3Ipe3ZhciBlPXRoaXMuJHJlZnNbInN1Ym1lbnUtdGl0bGUiXTtlJiYoZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3J8fCIiKX19LHVwZGF0ZVBsYWNlbWVudDpmdW5jdGlvbigpe3RoaXMuY3VycmVudFBsYWNlbWVudD0iaG9yaXpvbnRhbCI9PT10aGlzLm1vZGUmJnRoaXMuaXNGaXJzdExldmVsPyJib3R0b20tc3RhcnQiOiJyaWdodC1zdGFydCJ9LGluaXRQb3BwZXI6ZnVuY3Rpb24oKXt0aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRlbCx0aGlzLnBvcHBlckVsbT10aGlzLiRyZWZzLm1lbnUsdGhpcy51cGRhdGVQbGFjZW1lbnQoKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG9uKCJ0b2dnbGUtY29sbGFwc2UiLHRoaXMuaGFuZGxlQ29sbGFwc2VUb2dnbGUpLHRoaXMuJG9uKCJtb3VzZS1lbnRlci1jaGlsZCIsKGZ1bmN0aW9uKCl7ZS5tb3VzZUluQ2hpbGQ9ITAsY2xlYXJUaW1lb3V0KGUudGltZW91dCl9KSksdGhpcy4kb24oIm1vdXNlLWxlYXZlLWNoaWxkIiwoZnVuY3Rpb24oKXtlLm1vdXNlSW5DaGlsZD0hMSxjbGVhclRpbWVvdXQoZS50aW1lb3V0KX0pKX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMucGFyZW50TWVudS5hZGRTdWJtZW51KHRoaXMpLHRoaXMucm9vdE1lbnUuYWRkU3VibWVudSh0aGlzKSx0aGlzLmluaXRQb3BwZXIoKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMucGFyZW50TWVudS5yZW1vdmVTdWJtZW51KHRoaXMpLHRoaXMucm9vdE1lbnUucmVtb3ZlU3VibWVudSh0aGlzKX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLmFjdGl2ZSxpPXRoaXMub3BlbmVkLHI9dGhpcy5wYWRkaW5nU3R5bGUsbz10aGlzLnRpdGxlU3R5bGUsYT10aGlzLmJhY2tncm91bmRDb2xvcixzPXRoaXMucm9vdE1lbnUsbD10aGlzLmN1cnJlbnRQbGFjZW1lbnQsYz10aGlzLm1lbnVUcmFuc2l0aW9uTmFtZSx1PXRoaXMubW9kZSxoPXRoaXMuZGlzYWJsZWQsZD10aGlzLnBvcHBlckNsYXNzLGY9dGhpcy4kc2xvdHMscD10aGlzLmlzRmlyc3RMZXZlbCxtPWUoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZTpjfX0sW2UoImRpdiIse3JlZjoibWVudSIsZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHZhbHVlOml9XSxjbGFzczpbImVsLW1lbnUtLSIrdSxkXSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVNb3VzZWVudGVyKGUsMTAwKX0sbW91c2VsZWF2ZTpmdW5jdGlvbigpe3JldHVybiB0LmhhbmRsZU1vdXNlbGVhdmUoITApfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVNb3VzZWVudGVyKGUsMTAwKX19fSxbZSgidWwiLHthdHRyczp7cm9sZToibWVudSJ9LGNsYXNzOlsiZWwtbWVudSBlbC1tZW51LS1wb3B1cCIsImVsLW1lbnUtLXBvcHVwLSIrbF0sc3R5bGU6e2JhY2tncm91bmRDb2xvcjpzLmJhY2tncm91bmRDb2xvcnx8IiJ9fSxbZi5kZWZhdWx0XSldKV0pLGc9ZSgiZWwtY29sbGFwc2UtdHJhbnNpdGlvbiIsW2UoInVsIix7YXR0cnM6e3JvbGU6Im1lbnUifSxjbGFzczoiZWwtbWVudSBlbC1tZW51LS1pbmxpbmUiLGRpcmVjdGl2ZXM6W3tuYW1lOiJzaG93Iix2YWx1ZTppfV0sc3R5bGU6e2JhY2tncm91bmRDb2xvcjpzLmJhY2tncm91bmRDb2xvcnx8IiJ9fSxbZi5kZWZhdWx0XSldKSx2PSJob3Jpem9udGFsIj09PXMubW9kZSYmcHx8InZlcnRpY2FsIj09PXMubW9kZSYmIXMuY29sbGFwc2U/ImVsLWljb24tYXJyb3ctZG93biI6ImVsLWljb24tYXJyb3ctcmlnaHQiO3JldHVybiBlKCJsaSIse2NsYXNzOnsiZWwtc3VibWVudSI6ITAsImlzLWFjdGl2ZSI6biwiaXMtb3BlbmVkIjppLCJpcy1kaXNhYmxlZCI6aH0sYXR0cnM6e3JvbGU6Im1lbnVpdGVtIiwiYXJpYS1oYXNwb3B1cCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjppfSxvbjp7bW91c2VlbnRlcjp0aGlzLmhhbmRsZU1vdXNlZW50ZXIsbW91c2VsZWF2ZTpmdW5jdGlvbigpe3JldHVybiB0LmhhbmRsZU1vdXNlbGVhdmUoITEpfSxmb2N1czp0aGlzLmhhbmRsZU1vdXNlZW50ZXJ9fSxbZSgiZGl2Iix7Y2xhc3M6ImVsLXN1Ym1lbnVfX3RpdGxlIixyZWY6InN1Ym1lbnUtdGl0bGUiLG9uOntjbGljazp0aGlzLmhhbmRsZUNsaWNrLG1vdXNlZW50ZXI6dGhpcy5oYW5kbGVUaXRsZU1vdXNlZW50ZXIsbW91c2VsZWF2ZTp0aGlzLmhhbmRsZVRpdGxlTW91c2VsZWF2ZX0sc3R5bGU6W3Isbyx7YmFja2dyb3VuZENvbG9yOmF9XX0sW2YudGl0bGUsZSgiaSIse2NsYXNzOlsiZWwtc3VibWVudV9faWNvbi1hcnJvdyIsdl19KV0pLHRoaXMuaXNNZW51UG9wdXA/bTpnXSl9fSxaZT1LZSxKZT1zKFplLEhlLFdlLCExLG51bGwsbnVsbCxudWxsKTtKZS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbWVudS9zcmMvc3VibWVudS52dWUiO3ZhciBRZT1KZS5leHBvcnRzO1FlLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoUWUubmFtZSxRZSl9O3ZhciBldD1RZSx0dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigibGkiLHtzdGF0aWNDbGFzczoiZWwtbWVudS1pdGVtIixjbGFzczp7ImlzLWFjdGl2ZSI6ZS5hY3RpdmUsImlzLWRpc2FibGVkIjplLmRpc2FibGVkfSxzdHlsZTpbZS5wYWRkaW5nU3R5bGUsZS5pdGVtU3R5bGUse2JhY2tncm91bmRDb2xvcjplLmJhY2tncm91bmRDb2xvcn1dLGF0dHJzOntyb2xlOiJtZW51aXRlbSIsdGFiaW5kZXg6Ii0xIn0sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2ssbW91c2VlbnRlcjplLm9uTW91c2VFbnRlcixmb2N1czplLm9uTW91c2VFbnRlcixibHVyOmUub25Nb3VzZUxlYXZlLG1vdXNlbGVhdmU6ZS5vbk1vdXNlTGVhdmV9fSxbIkVsTWVudSI9PT1lLnBhcmVudE1lbnUuJG9wdGlvbnMuY29tcG9uZW50TmFtZSYmZS5yb290TWVudS5jb2xsYXBzZSYmZS4kc2xvdHMudGl0bGU/bigiZWwtdG9vbHRpcCIse2F0dHJzOntlZmZlY3Q6ImRhcmsiLHBsYWNlbWVudDoicmlnaHQifX0sW24oImRpdiIse2F0dHJzOntzbG90OiJjb250ZW50In0sc2xvdDoiY29udGVudCJ9LFtlLl90KCJ0aXRsZSIpXSwyKSxuKCJkaXYiLHtzdGF0aWNTdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiIwIix0b3A6IjAiLGhlaWdodDoiMTAwJSIsd2lkdGg6IjEwMCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsImJveC1zaXppbmciOiJib3JkZXItYm94IixwYWRkaW5nOiIwIDIwcHgifX0sW2UuX3QoImRlZmF1bHQiKV0sMildKTpbZS5fdCgiZGVmYXVsdCIpLGUuX3QoInRpdGxlIildXSwyKX0sbnQ9W107dHQuX3dpdGhTdHJpcHBlZD0hMDt2YXIgaXQ9bigyNikscnQ9bi5uKGl0KSxvdD17bmFtZToiRWxNZW51SXRlbSIsY29tcG9uZW50TmFtZToiRWxNZW51SXRlbSIsbWl4aW5zOltZZSxFLmFdLGNvbXBvbmVudHM6e0VsVG9vbHRpcDpydC5hfSxwcm9wczp7aW5kZXg6e2RlZmF1bHQ6bnVsbCx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZXx8bnVsbD09PWV9fSxyb3V0ZTpbU3RyaW5nLE9iamVjdF0sZGlzYWJsZWQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e2FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV4PT09dGhpcy5yb290TWVudS5hY3RpdmVJbmRleH0saG92ZXJCYWNrZ3JvdW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUuaG92ZXJCYWNrZ3JvdW5kfSxiYWNrZ3JvdW5kQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3J8fCIifSxhY3RpdmVUZXh0Q29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290TWVudS5hY3RpdmVUZXh0Q29sb3J8fCIifSx0ZXh0Q29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290TWVudS50ZXh0Q29sb3J8fCIifSxtb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdE1lbnUubW9kZX0saXRlbVN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9e2NvbG9yOnRoaXMuYWN0aXZlP3RoaXMuYWN0aXZlVGV4dENvbG9yOnRoaXMudGV4dENvbG9yfTtyZXR1cm4iaG9yaXpvbnRhbCIhPT10aGlzLm1vZGV8fHRoaXMuaXNOZXN0ZWR8fChlLmJvcmRlckJvdHRvbUNvbG9yPXRoaXMuYWN0aXZlP3RoaXMucm9vdE1lbnUuYWN0aXZlVGV4dENvbG9yP3RoaXMuYWN0aXZlVGV4dENvbG9yOiIiOiJ0cmFuc3BhcmVudCIpLGV9LGlzTmVzdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50TWVudSE9PXRoaXMucm9vdE1lbnV9fSxtZXRob2RzOntvbk1vdXNlRW50ZXI6ZnVuY3Rpb24oKXsoImhvcml6b250YWwiIT09dGhpcy5tb2RlfHx0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvcikmJih0aGlzLiRlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5ob3ZlckJhY2tncm91bmQpfSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oKXsoImhvcml6b250YWwiIT09dGhpcy5tb2RlfHx0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvcikmJih0aGlzLiRlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3IpfSxoYW5kbGVDbGljazpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmRpc3BhdGNoKCJFbE1lbnUiLCJpdGVtLWNsaWNrIix0aGlzKSx0aGlzLiRlbWl0KCJjbGljayIsdGhpcykpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMucGFyZW50TWVudS5hZGRJdGVtKHRoaXMpLHRoaXMucm9vdE1lbnUuYWRkSXRlbSh0aGlzKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMucGFyZW50TWVudS5yZW1vdmVJdGVtKHRoaXMpLHRoaXMucm9vdE1lbnUucmVtb3ZlSXRlbSh0aGlzKX19LGF0PW90LHN0PXMoYXQsdHQsbnQsITEsbnVsbCxudWxsLG51bGwpO3N0Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlIjt2YXIgbHQ9c3QuZXhwb3J0cztsdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KGx0Lm5hbWUsbHQpfTt2YXIgY3Q9bHQsdXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImxpIix7c3RhdGljQ2xhc3M6ImVsLW1lbnUtaXRlbS1ncm91cCJ9LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVudS1pdGVtLWdyb3VwX190aXRsZSIsc3R5bGU6e3BhZGRpbmdMZWZ0OmUubGV2ZWxQYWRkaW5nKyJweCJ9fSxbZS4kc2xvdHMudGl0bGU/ZS5fdCgidGl0bGUiKTpbZS5fdihlLl9zKGUudGl0bGUpKV1dLDIpLG4oInVsIixbZS5fdCgiZGVmYXVsdCIpXSwyKV0pfSxodD1bXTt1dC5fd2l0aFN0cmlwcGVkPSEwO3ZhciBkdD17bmFtZToiRWxNZW51SXRlbUdyb3VwIixjb21wb25lbnROYW1lOiJFbE1lbnVJdGVtR3JvdXAiLGluamVjdDpbInJvb3RNZW51Il0scHJvcHM6e3RpdGxlOnt0eXBlOlN0cmluZ319LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cGFkZGluZ0xlZnQ6MjB9fSxjb21wdXRlZDp7bGV2ZWxQYWRkaW5nOmZ1bmN0aW9uKCl7dmFyIGU9MjAsdD10aGlzLiRwYXJlbnQ7aWYodGhpcy5yb290TWVudS5jb2xsYXBzZSlyZXR1cm4gMjA7d2hpbGUodCYmIkVsTWVudSIhPT10LiRvcHRpb25zLmNvbXBvbmVudE5hbWUpIkVsU3VibWVudSI9PT10LiRvcHRpb25zLmNvbXBvbmVudE5hbWUmJihlKz0yMCksdD10LiRwYXJlbnQ7cmV0dXJuIGV9fX0sZnQ9ZHQscHQ9cyhmdCx1dCxodCwhMSxudWxsLG51bGwsbnVsbCk7cHQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWUiO3ZhciBtdD1wdC5leHBvcnRzO210Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQobXQubmFtZSxtdCl9O3ZhciBndD1tdCx2dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7Y2xhc3M6WyJ0ZXh0YXJlYSI9PT1lLnR5cGU/ImVsLXRleHRhcmVhIjoiZWwtaW5wdXQiLGUuaW5wdXRTaXplPyJlbC1pbnB1dC0tIitlLmlucHV0U2l6ZToiIix7ImlzLWRpc2FibGVkIjplLmlucHV0RGlzYWJsZWQsImlzLWV4Y2VlZCI6ZS5pbnB1dEV4Y2VlZCwiZWwtaW5wdXQtZ3JvdXAiOmUuJHNsb3RzLnByZXBlbmR8fGUuJHNsb3RzLmFwcGVuZCwiZWwtaW5wdXQtZ3JvdXAtLWFwcGVuZCI6ZS4kc2xvdHMuYXBwZW5kLCJlbC1pbnB1dC1ncm91cC0tcHJlcGVuZCI6ZS4kc2xvdHMucHJlcGVuZCwiZWwtaW5wdXQtLXByZWZpeCI6ZS4kc2xvdHMucHJlZml4fHxlLnByZWZpeEljb24sImVsLWlucHV0LS1zdWZmaXgiOmUuJHNsb3RzLnN1ZmZpeHx8ZS5zdWZmaXhJY29ufHxlLmNsZWFyYWJsZXx8ZS5zaG93UGFzc3dvcmR9XSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmhvdmVyaW5nPSEwfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UuaG92ZXJpbmc9ITF9fX0sWyJ0ZXh0YXJlYSIhPT1lLnR5cGU/W2UuJHNsb3RzLnByZXBlbmQ/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWlucHV0LWdyb3VwX19wcmVwZW5kIn0sW2UuX3QoInByZXBlbmQiKV0sMik6ZS5fZSgpLCJ0ZXh0YXJlYSIhPT1lLnR5cGU/bigiaW5wdXQiLGUuX2Ioe3JlZjoiaW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1pbnB1dF9faW5uZXIiLGF0dHJzOnt0YWJpbmRleDplLnRhYmluZGV4LHR5cGU6ZS5zaG93UGFzc3dvcmQ/ZS5wYXNzd29yZFZpc2libGU/InRleHQiOiJwYXNzd29yZCI6ZS50eXBlLGRpc2FibGVkOmUuaW5wdXREaXNhYmxlZCxyZWFkb25seTplLnJlYWRvbmx5LGF1dG9jb21wbGV0ZTplLmF1dG9Db21wbGV0ZXx8ZS5hdXRvY29tcGxldGUsImFyaWEtbGFiZWwiOmUubGFiZWx9LG9uOntjb21wb3NpdGlvbnN0YXJ0OmUuaGFuZGxlQ29tcG9zaXRpb25TdGFydCxjb21wb3NpdGlvbnVwZGF0ZTplLmhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlLGNvbXBvc2l0aW9uZW5kOmUuaGFuZGxlQ29tcG9zaXRpb25FbmQsaW5wdXQ6ZS5oYW5kbGVJbnB1dCxmb2N1czplLmhhbmRsZUZvY3VzLGJsdXI6ZS5oYW5kbGVCbHVyLGNoYW5nZTplLmhhbmRsZUNoYW5nZX19LCJpbnB1dCIsZS4kYXR0cnMsITEpKTplLl9lKCksZS4kc2xvdHMucHJlZml4fHxlLnByZWZpeEljb24/bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9fcHJlZml4In0sW2UuX3QoInByZWZpeCIpLGUucHJlZml4SWNvbj9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19pY29uIixjbGFzczplLnByZWZpeEljb259KTplLl9lKCldLDIpOmUuX2UoKSxlLmdldFN1ZmZpeFZpc2libGUoKT9uKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19zdWZmaXgifSxbbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9fc3VmZml4LWlubmVyIn0sW2Uuc2hvd0NsZWFyJiZlLnNob3dQd2RWaXNpYmxlJiZlLmlzV29yZExpbWl0VmlzaWJsZT9lLl9lKCk6W2UuX3QoInN1ZmZpeCIpLGUuc3VmZml4SWNvbj9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19pY29uIixjbGFzczplLnN1ZmZpeEljb259KTplLl9lKCldLGUuc2hvd0NsZWFyP24oImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2UgZWwtaW5wdXRfX2NsZWFyIixvbjp7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0sY2xpY2s6ZS5jbGVhcn19KTplLl9lKCksZS5zaG93UHdkVmlzaWJsZT9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19pY29uIGVsLWljb24tdmlldyBlbC1pbnB1dF9fY2xlYXIiLG9uOntjbGljazplLmhhbmRsZVBhc3N3b3JkVmlzaWJsZX19KTplLl9lKCksZS5pc1dvcmRMaW1pdFZpc2libGU/bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9fY291bnQifSxbbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9fY291bnQtaW5uZXIifSxbZS5fdigiXG4gICAgICAgICAgICAiK2UuX3MoZS50ZXh0TGVuZ3RoKSsiLyIrZS5fcyhlLnVwcGVyTGltaXQpKyJcbiAgICAgICAgICAiKV0pXSk6ZS5fZSgpXSwyKSxlLnZhbGlkYXRlU3RhdGU/bigiaSIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9faWNvbiIsY2xhc3M6WyJlbC1pbnB1dF9fdmFsaWRhdGVJY29uIixlLnZhbGlkYXRlSWNvbl19KTplLl9lKCldKTplLl9lKCksZS4kc2xvdHMuYXBwZW5kP24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dC1ncm91cF9fYXBwZW5kIn0sW2UuX3QoImFwcGVuZCIpXSwyKTplLl9lKCldOm4oInRleHRhcmVhIixlLl9iKHtyZWY6InRleHRhcmVhIixzdGF0aWNDbGFzczoiZWwtdGV4dGFyZWFfX2lubmVyIixzdHlsZTplLnRleHRhcmVhU3R5bGUsYXR0cnM6e3RhYmluZGV4OmUudGFiaW5kZXgsZGlzYWJsZWQ6ZS5pbnB1dERpc2FibGVkLHJlYWRvbmx5OmUucmVhZG9ubHksYXV0b2NvbXBsZXRlOmUuYXV0b0NvbXBsZXRlfHxlLmF1dG9jb21wbGV0ZSwiYXJpYS1sYWJlbCI6ZS5sYWJlbH0sb246e2NvbXBvc2l0aW9uc3RhcnQ6ZS5oYW5kbGVDb21wb3NpdGlvblN0YXJ0LGNvbXBvc2l0aW9udXBkYXRlOmUuaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUsY29tcG9zaXRpb25lbmQ6ZS5oYW5kbGVDb21wb3NpdGlvbkVuZCxpbnB1dDplLmhhbmRsZUlucHV0LGZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjplLmhhbmRsZUJsdXIsY2hhbmdlOmUuaGFuZGxlQ2hhbmdlfX0sInRleHRhcmVhIixlLiRhdHRycywhMSkpLGUuaXNXb3JkTGltaXRWaXNpYmxlJiYidGV4dGFyZWEiPT09ZS50eXBlP24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2NvdW50In0sW2UuX3YoZS5fcyhlLnRleHRMZW5ndGgpKyIvIitlLl9zKGUudXBwZXJMaW1pdCkpXSk6ZS5fZSgpXSwyKX0seXQ9W107dnQuX3dpdGhTdHJpcHBlZD0hMDt2YXIgYnQ9dm9pZCAwLHh0PSJcbiAgaGVpZ2h0OjAgIWltcG9ydGFudDtcbiAgdmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudDtcbiAgb3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7XG4gIHBvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHotaW5kZXg6LTEwMDAgIWltcG9ydGFudDtcbiAgdG9wOjAgIWltcG9ydGFudDtcbiAgcmlnaHQ6MCAhaW1wb3J0YW50XG4iLF90PVsibGV0dGVyLXNwYWNpbmciLCJsaW5lLWhlaWdodCIsInBhZGRpbmctdG9wIiwicGFkZGluZy1ib3R0b20iLCJmb250LWZhbWlseSIsImZvbnQtd2VpZ2h0IiwiZm9udC1zaXplIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0LXRyYW5zZm9ybSIsIndpZHRoIiwidGV4dC1pbmRlbnQiLCJwYWRkaW5nLWxlZnQiLCJwYWRkaW5nLXJpZ2h0IiwiYm9yZGVyLXdpZHRoIiwiYm94LXNpemluZyJdO2Z1bmN0aW9uIHd0KGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLG49dC5nZXRQcm9wZXJ0eVZhbHVlKCJib3gtc2l6aW5nIiksaT1wYXJzZUZsb2F0KHQuZ2V0UHJvcGVydHlWYWx1ZSgicGFkZGluZy1ib3R0b20iKSkrcGFyc2VGbG9hdCh0LmdldFByb3BlcnR5VmFsdWUoInBhZGRpbmctdG9wIikpLHI9cGFyc2VGbG9hdCh0LmdldFByb3BlcnR5VmFsdWUoImJvcmRlci1ib3R0b20td2lkdGgiKSkrcGFyc2VGbG9hdCh0LmdldFByb3BlcnR5VmFsdWUoImJvcmRlci10b3Atd2lkdGgiKSksbz1fdC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlKyI6Iit0LmdldFByb3BlcnR5VmFsdWUoZSl9KSkuam9pbigiOyIpO3JldHVybntjb250ZXh0U3R5bGU6byxwYWRkaW5nU2l6ZTppLGJvcmRlclNpemU6cixib3hTaXppbmc6bn19ZnVuY3Rpb24gU3QoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtidHx8KGJ0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidCkpO3ZhciBpPXd0KGUpLHI9aS5wYWRkaW5nU2l6ZSxvPWkuYm9yZGVyU2l6ZSxhPWkuYm94U2l6aW5nLHM9aS5jb250ZXh0U3R5bGU7YnQuc2V0QXR0cmlidXRlKCJzdHlsZSIscysiOyIreHQpLGJ0LnZhbHVlPWUudmFsdWV8fGUucGxhY2Vob2xkZXJ8fCIiO3ZhciBsPWJ0LnNjcm9sbEhlaWdodCxjPXt9OyJib3JkZXItYm94Ij09PWE/bCs9bzoiY29udGVudC1ib3giPT09YSYmKGwtPXIpLGJ0LnZhbHVlPSIiO3ZhciB1PWJ0LnNjcm9sbEhlaWdodC1yO2lmKG51bGwhPT10KXt2YXIgaD11KnQ7ImJvcmRlci1ib3giPT09YSYmKGg9aCtyK28pLGw9TWF0aC5tYXgoaCxsKSxjLm1pbkhlaWdodD1oKyJweCJ9aWYobnVsbCE9PW4pe3ZhciBkPXUqbjsiYm9yZGVyLWJveCI9PT1hJiYoZD1kK3IrbyksbD1NYXRoLm1pbihkLGwpfXJldHVybiBjLmhlaWdodD1sKyJweCIsYnQucGFyZW50Tm9kZSYmYnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChidCksYnQ9bnVsbCxjfXZhciBDdD1uKDcpLGt0PW4ubihDdCksVHQ9bigxOSksTXQ9e25hbWU6IkVsSW5wdXQiLGNvbXBvbmVudE5hbWU6IkVsSW5wdXQiLG1peGluczpbRS5hLFQuYV0saW5oZXJpdEF0dHJzOiExLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifSxlbEZvcm1JdGVtOntkZWZhdWx0OiIifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0ZXh0YXJlYUNhbGNTdHlsZTp7fSxob3ZlcmluZzohMSxmb2N1c2VkOiExLGlzQ29tcG9zaW5nOiExLHBhc3N3b3JkVmlzaWJsZTohMX19LHByb3BzOnt2YWx1ZTpbU3RyaW5nLE51bWJlcl0sc2l6ZTpTdHJpbmcscmVzaXplOlN0cmluZyxmb3JtOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW4sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoidGV4dCJ9LGF1dG9zaXplOnt0eXBlOltCb29sZWFuLE9iamVjdF0sZGVmYXVsdDohMX0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJvZmYifSxhdXRvQ29tcGxldGU6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4hMH19LHZhbGlkYXRlRXZlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxzdWZmaXhJY29uOlN0cmluZyxwcmVmaXhJY29uOlN0cmluZyxsYWJlbDpTdHJpbmcsY2xlYXJhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2hvd1Bhc3N3b3JkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sc2hvd1dvcmRMaW1pdDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRhYmluZGV4OlN0cmluZ30sY29tcHV0ZWQ6e19lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZX0sdmFsaWRhdGVTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsRm9ybUl0ZW0/dGhpcy5lbEZvcm1JdGVtLnZhbGlkYXRlU3RhdGU6IiJ9LG5lZWRTdGF0dXNJY29uOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmVsRm9ybSYmdGhpcy5lbEZvcm0uc3RhdHVzSWNvbn0sdmFsaWRhdGVJY29uOmZ1bmN0aW9uKCl7cmV0dXJue3ZhbGlkYXRpbmc6ImVsLWljb24tbG9hZGluZyIsc3VjY2VzczoiZWwtaWNvbi1jaXJjbGUtY2hlY2siLGVycm9yOiJlbC1pY29uLWNpcmNsZS1jbG9zZSJ9W3RoaXMudmFsaWRhdGVTdGF0ZV19LHRleHRhcmVhU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4ga3QoKSh7fSx0aGlzLnRleHRhcmVhQ2FsY1N0eWxlLHtyZXNpemU6dGhpcy5yZXNpemV9KX0saW5wdXRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZX0saW5wdXREaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZH0sbmF0aXZlSW5wdXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy52YWx1ZXx8dm9pZCAwPT09dGhpcy52YWx1ZT8iIjpTdHJpbmcodGhpcy52YWx1ZSl9LHNob3dDbGVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsZWFyYWJsZSYmIXRoaXMuaW5wdXREaXNhYmxlZCYmIXRoaXMucmVhZG9ubHkmJnRoaXMubmF0aXZlSW5wdXRWYWx1ZSYmKHRoaXMuZm9jdXNlZHx8dGhpcy5ob3ZlcmluZyl9LHNob3dQd2RWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hvd1Bhc3N3b3JkJiYhdGhpcy5pbnB1dERpc2FibGVkJiYhdGhpcy5yZWFkb25seSYmKCEhdGhpcy5uYXRpdmVJbnB1dFZhbHVlfHx0aGlzLmZvY3VzZWQpfSxpc1dvcmRMaW1pdFZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93V29yZExpbWl0JiZ0aGlzLiRhdHRycy5tYXhsZW5ndGgmJigidGV4dCI9PT10aGlzLnR5cGV8fCJ0ZXh0YXJlYSI9PT10aGlzLnR5cGUpJiYhdGhpcy5pbnB1dERpc2FibGVkJiYhdGhpcy5yZWFkb25seSYmIXRoaXMuc2hvd1Bhc3N3b3JkfSx1cHBlckxpbWl0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGF0dHJzLm1heGxlbmd0aH0sdGV4dExlbmd0aDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIHRoaXMudmFsdWU/U3RyaW5nKHRoaXMudmFsdWUpLmxlbmd0aDoodGhpcy52YWx1ZXx8IiIpLmxlbmd0aH0saW5wdXRFeGNlZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1dvcmRMaW1pdFZpc2libGUmJnRoaXMudGV4dExlbmd0aD50aGlzLnVwcGVyTGltaXR9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy4kbmV4dFRpY2sodGhpcy5yZXNpemVUZXh0YXJlYSksdGhpcy52YWxpZGF0ZUV2ZW50JiZ0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLFtlXSl9LG5hdGl2ZUlucHV0VmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKX0sdHlwZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7ZS5zZXROYXRpdmVJbnB1dFZhbHVlKCksZS5yZXNpemVUZXh0YXJlYSgpLGUudXBkYXRlSWNvbk9mZnNldCgpfSkpfX0sbWV0aG9kczp7Zm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmdldElucHV0KCkuZm9jdXMoKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMuZ2V0SW5wdXQoKS5ibHVyKCl9LGdldE1pZ3JhdGluZ0NvbmZpZzpmdW5jdGlvbigpe3JldHVybntwcm9wczp7aWNvbjoiaWNvbiBpcyByZW1vdmVkLCB1c2Ugc3VmZml4LWljb24gLyBwcmVmaXgtaWNvbiBpbnN0ZWFkLiIsIm9uLWljb24tY2xpY2siOiJvbi1pY29uLWNsaWNrIGlzIHJlbW92ZWQuIn0sZXZlbnRzOntjbGljazoiY2xpY2sgaXMgcmVtb3ZlZC4ifX19LGhhbmRsZUJsdXI6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkPSExLHRoaXMuJGVtaXQoImJsdXIiLGUpLHRoaXMudmFsaWRhdGVFdmVudCYmdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uYmx1ciIsW3RoaXMudmFsdWVdKX0sc2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy5nZXRJbnB1dCgpLnNlbGVjdCgpfSxyZXNpemVUZXh0YXJlYTpmdW5jdGlvbigpe2lmKCF0aGlzLiRpc1NlcnZlcil7dmFyIGU9dGhpcy5hdXRvc2l6ZSx0PXRoaXMudHlwZTtpZigidGV4dGFyZWEiPT09dClpZihlKXt2YXIgbj1lLm1pblJvd3MsaT1lLm1heFJvd3M7dGhpcy50ZXh0YXJlYUNhbGNTdHlsZT1TdCh0aGlzLiRyZWZzLnRleHRhcmVhLG4saSl9ZWxzZSB0aGlzLnRleHRhcmVhQ2FsY1N0eWxlPXttaW5IZWlnaHQ6U3QodGhpcy4kcmVmcy50ZXh0YXJlYSkubWluSGVpZ2h0fX19LHNldE5hdGl2ZUlucHV0VmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldElucHV0KCk7ZSYmZS52YWx1ZSE9PXRoaXMubmF0aXZlSW5wdXRWYWx1ZSYmKGUudmFsdWU9dGhpcy5uYXRpdmVJbnB1dFZhbHVlKX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkPSEwLHRoaXMuJGVtaXQoImZvY3VzIixlKX0saGFuZGxlQ29tcG9zaXRpb25TdGFydDpmdW5jdGlvbigpe3RoaXMuaXNDb21wb3Npbmc9ITB9LGhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0LnZhbHVlLG49dFt0Lmxlbmd0aC0xXXx8IiI7dGhpcy5pc0NvbXBvc2luZz0hT2JqZWN0KFR0WyJpc0tvcmVhbiJdKShuKX0saGFuZGxlQ29tcG9zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7dGhpcy5pc0NvbXBvc2luZyYmKHRoaXMuaXNDb21wb3Npbmc9ITEsdGhpcy5oYW5kbGVJbnB1dChlKSl9LGhhbmRsZUlucHV0OmZ1bmN0aW9uKGUpe3RoaXMuaXNDb21wb3Npbmd8fGUudGFyZ2V0LnZhbHVlIT09dGhpcy5uYXRpdmVJbnB1dFZhbHVlJiYodGhpcy4kZW1pdCgiaW5wdXQiLGUudGFyZ2V0LnZhbHVlKSx0aGlzLiRuZXh0VGljayh0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUpKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuJGVtaXQoImNoYW5nZSIsZS50YXJnZXQudmFsdWUpfSxjYWxjSWNvbk9mZnNldDpmdW5jdGlvbihlKXt2YXIgdD1bXS5zbGljZS5jYWxsKHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5lbC1pbnB1dF9fIitlKXx8W10pO2lmKHQubGVuZ3RoKXtmb3IodmFyIG49bnVsbCxpPTA7aTx0Lmxlbmd0aDtpKyspaWYodFtpXS5wYXJlbnROb2RlPT09dGhpcy4kZWwpe249dFtpXTticmVha31pZihuKXt2YXIgcj17c3VmZml4OiJhcHBlbmQiLHByZWZpeDoicHJlcGVuZCJ9LG89cltlXTt0aGlzLiRzbG90c1tvXT9uLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlWCgiKygic3VmZml4Ij09PWU/Ii0iOiIiKSt0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCIuZWwtaW5wdXQtZ3JvdXBfXyIrbykub2Zmc2V0V2lkdGgrInB4KSI6bi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIil9fX0sdXBkYXRlSWNvbk9mZnNldDpmdW5jdGlvbigpe3RoaXMuY2FsY0ljb25PZmZzZXQoInByZWZpeCIpLHRoaXMuY2FsY0ljb25PZmZzZXQoInN1ZmZpeCIpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuJGVtaXQoImlucHV0IiwiIiksdGhpcy4kZW1pdCgiY2hhbmdlIiwiIiksdGhpcy4kZW1pdCgiY2xlYXIiKX0saGFuZGxlUGFzc3dvcmRWaXNpYmxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnBhc3N3b3JkVmlzaWJsZT0hdGhpcy5wYXNzd29yZFZpc2libGUsdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7ZS5mb2N1cygpfSkpfSxnZXRJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLmlucHV0fHx0aGlzLiRyZWZzLnRleHRhcmVhfSxnZXRTdWZmaXhWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNsb3RzLnN1ZmZpeHx8dGhpcy5zdWZmaXhJY29ufHx0aGlzLnNob3dDbGVhcnx8dGhpcy5zaG93UGFzc3dvcmR8fHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlfHx0aGlzLnZhbGlkYXRlU3RhdGUmJnRoaXMubmVlZFN0YXR1c0ljb259fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kb24oImlucHV0U2VsZWN0Iix0aGlzLnNlbGVjdCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKSx0aGlzLnJlc2l6ZVRleHRhcmVhKCksdGhpcy51cGRhdGVJY29uT2Zmc2V0KCl9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZUljb25PZmZzZXQpfX0sRXQ9TXQsSXQ9cyhFdCx2dCx5dCwhMSxudWxsLG51bGwsbnVsbCk7SXQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWUiO3ZhciBEdD1JdC5leHBvcnRzO0R0Lmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoRHQubmFtZSxEdCl9O3ZhciBBdD1EdCxPdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7Y2xhc3M6WyJlbC1pbnB1dC1udW1iZXIiLGUuaW5wdXROdW1iZXJTaXplPyJlbC1pbnB1dC1udW1iZXItLSIrZS5pbnB1dE51bWJlclNpemU6IiIseyJpcy1kaXNhYmxlZCI6ZS5pbnB1dE51bWJlckRpc2FibGVkfSx7ImlzLXdpdGhvdXQtY29udHJvbHMiOiFlLmNvbnRyb2xzfSx7ImlzLWNvbnRyb2xzLXJpZ2h0IjplLmNvbnRyb2xzQXRSaWdodH1dLG9uOntkcmFnc3RhcnQ6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfX19LFtlLmNvbnRyb2xzP24oInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5kZWNyZWFzZSxleHByZXNzaW9uOiJkZWNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6ZS5taW5EaXNhYmxlZH0sYXR0cnM6e3JvbGU6ImJ1dHRvbiJ9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe3JldHVybiEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVudGVyIiwxMyx0LmtleSwiRW50ZXIiKT9udWxsOmUuZGVjcmVhc2UodCl9fX0sW24oImkiLHtjbGFzczoiZWwtaWNvbi0iKyhlLmNvbnRyb2xzQXRSaWdodD8iYXJyb3ctZG93biI6Im1pbnVzIil9KV0pOmUuX2UoKSxlLmNvbnRyb2xzP24oInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5pbmNyZWFzZSxleHByZXNzaW9uOiJpbmNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6ZS5tYXhEaXNhYmxlZH0sYXR0cnM6e3JvbGU6ImJ1dHRvbiJ9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe3JldHVybiEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVudGVyIiwxMyx0LmtleSwiRW50ZXIiKT9udWxsOmUuaW5jcmVhc2UodCl9fX0sW24oImkiLHtjbGFzczoiZWwtaWNvbi0iKyhlLmNvbnRyb2xzQXRSaWdodD8iYXJyb3ctdXAiOiJwbHVzIil9KV0pOmUuX2UoKSxuKCJlbC1pbnB1dCIse3JlZjoiaW5wdXQiLGF0dHJzOnt2YWx1ZTplLmRpc3BsYXlWYWx1ZSxwbGFjZWhvbGRlcjplLnBsYWNlaG9sZGVyLGRpc2FibGVkOmUuaW5wdXROdW1iZXJEaXNhYmxlZCxzaXplOmUuaW5wdXROdW1iZXJTaXplLG1heDplLm1heCxtaW46ZS5taW4sbmFtZTplLm5hbWUsbGFiZWw6ZS5sYWJlbH0sb246e2JsdXI6ZS5oYW5kbGVCbHVyLGZvY3VzOmUuaGFuZGxlRm9jdXMsaW5wdXQ6ZS5oYW5kbGVJbnB1dCxjaGFuZ2U6ZS5oYW5kbGVJbnB1dENoYW5nZX0sbmF0aXZlT246e2tleWRvd246W2Z1bmN0aW9uKHQpe3JldHVybiEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInVwIiwzOCx0LmtleSxbIlVwIiwiQXJyb3dVcCJdKT9udWxsOih0LnByZXZlbnREZWZhdWx0KCksZS5pbmNyZWFzZSh0KSl9LGZ1bmN0aW9uKHQpe3JldHVybiEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImRvd24iLDQwLHQua2V5LFsiRG93biIsIkFycm93RG93biJdKT9udWxsOih0LnByZXZlbnREZWZhdWx0KCksZS5kZWNyZWFzZSh0KSl9XX19KV0sMSl9LFB0PVtdO090Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIEx0PXtiaW5kOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1udWxsLHI9dm9pZCAwLG89ZnVuY3Rpb24oKXtyZXR1cm4gbi5jb250ZXh0W3QuZXhwcmVzc2lvbl0uYXBwbHkoKX0sYT1mdW5jdGlvbigpe0RhdGUubm93KCktcjwxMDAmJm8oKSxjbGVhckludGVydmFsKGkpLGk9bnVsbH07T2JqZWN0KHplWyJvbiJdKShlLCJtb3VzZWRvd24iLChmdW5jdGlvbihlKXswPT09ZS5idXR0b24mJihyPURhdGUubm93KCksT2JqZWN0KHplWyJvbmNlIl0pKGRvY3VtZW50LCJtb3VzZXVwIixhKSxjbGVhckludGVydmFsKGkpLGk9c2V0SW50ZXJ2YWwobywxMDApKX0pKX19LE50PXtuYW1lOiJFbElucHV0TnVtYmVyIixtaXhpbnM6W1ooKSgiaW5wdXQiKV0saW5qZWN0OntlbEZvcm06e2RlZmF1bHQ6IiJ9LGVsRm9ybUl0ZW06e2RlZmF1bHQ6IiJ9fSxkaXJlY3RpdmVzOntyZXBlYXRDbGljazpMdH0sY29tcG9uZW50czp7RWxJbnB1dDptLmF9LHByb3BzOntzdGVwOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LHN0ZXBTdHJpY3RseTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxLzB9LG1pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDotMS8wfSx2YWx1ZTp7fSxkaXNhYmxlZDpCb29sZWFuLHNpemU6U3RyaW5nLGNvbnRyb2xzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY29udHJvbHNQb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sbmFtZTpTdHJpbmcsbGFiZWw6U3RyaW5nLHBsYWNlaG9sZGVyOlN0cmluZyxwcmVjaXNpb246e3R5cGU6TnVtYmVyLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZT09PXBhcnNlSW50KGUsMTApfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudFZhbHVlOjAsdXNlcklucHV0Om51bGx9fSx3YXRjaDp7dmFsdWU6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXZvaWQgMD09PWU/ZTpOdW1iZXIoZSk7aWYodm9pZCAwIT09dCl7aWYoaXNOYU4odCkpcmV0dXJuO2lmKHRoaXMuc3RlcFN0cmljdGx5KXt2YXIgbj10aGlzLmdldFByZWNpc2lvbih0aGlzLnN0ZXApLGk9TWF0aC5wb3coMTAsbik7dD1NYXRoLnJvdW5kKHQvdGhpcy5zdGVwKSppKnRoaXMuc3RlcC9pfXZvaWQgMCE9PXRoaXMucHJlY2lzaW9uJiYodD10aGlzLnRvUHJlY2lzaW9uKHQsdGhpcy5wcmVjaXNpb24pKX10Pj10aGlzLm1heCYmKHQ9dGhpcy5tYXgpLHQ8PXRoaXMubWluJiYodD10aGlzLm1pbiksdGhpcy5jdXJyZW50VmFsdWU9dCx0aGlzLnVzZXJJbnB1dD1udWxsLHRoaXMuJGVtaXQoImlucHV0Iix0KX19fSxjb21wdXRlZDp7bWluRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVjcmVhc2UodGhpcy52YWx1ZSx0aGlzLnN0ZXApPHRoaXMubWlufSxtYXhEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbmNyZWFzZSh0aGlzLnZhbHVlLHRoaXMuc3RlcCk+dGhpcy5tYXh9LG51bVByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWUsdD10aGlzLnN0ZXAsbj10aGlzLmdldFByZWNpc2lvbixpPXRoaXMucHJlY2lzaW9uLHI9bih0KTtyZXR1cm4gdm9pZCAwIT09aT8ocj5pJiZjb25zb2xlLndhcm4oIltFbGVtZW50IFdhcm5dW0lucHV0TnVtYmVyXXByZWNpc2lvbiBzaG91bGQgbm90IGJlIGxlc3MgdGhhbiB0aGUgZGVjaW1hbCBwbGFjZXMgb2Ygc3RlcCIpLGkpOk1hdGgubWF4KG4oZSkscil9LGNvbnRyb2xzQXRSaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2xzJiYicmlnaHQiPT09dGhpcy5jb250cm9sc1Bvc2l0aW9ufSxfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemV9LGlucHV0TnVtYmVyU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemV9LGlucHV0TnVtYmVyRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISEodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZH0sZGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7aWYobnVsbCE9PXRoaXMudXNlcklucHV0KXJldHVybiB0aGlzLnVzZXJJbnB1dDt2YXIgZT10aGlzLmN1cnJlbnRWYWx1ZTtpZigibnVtYmVyIj09PXR5cGVvZiBlKXtpZih0aGlzLnN0ZXBTdHJpY3RseSl7dmFyIHQ9dGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKSxuPU1hdGgucG93KDEwLHQpO2U9TWF0aC5yb3VuZChlL3RoaXMuc3RlcCkqbip0aGlzLnN0ZXAvbn12b2lkIDAhPT10aGlzLnByZWNpc2lvbiYmKGU9ZS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSl9cmV0dXJuIGV9fSxtZXRob2RzOnt0b1ByZWNpc2lvbjpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLm51bVByZWNpc2lvbikscGFyc2VGbG9hdChNYXRoLnJvdW5kKGUqTWF0aC5wb3coMTAsdCkpL01hdGgucG93KDEwLHQpKX0sZ2V0UHJlY2lzaW9uOmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIDA7dmFyIHQ9ZS50b1N0cmluZygpLG49dC5pbmRleE9mKCIuIiksaT0wO3JldHVybi0xIT09biYmKGk9dC5sZW5ndGgtbi0xKSxpfSxfaW5jcmVhc2U6ZnVuY3Rpb24oZSx0KXtpZigibnVtYmVyIiE9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lKXJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTt2YXIgbj1NYXRoLnBvdygxMCx0aGlzLm51bVByZWNpc2lvbik7cmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKG4qZStuKnQpL24pfSxfZGVjcmVhc2U6ZnVuY3Rpb24oZSx0KXtpZigibnVtYmVyIiE9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lKXJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTt2YXIgbj1NYXRoLnBvdygxMCx0aGlzLm51bVByZWNpc2lvbik7cmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKG4qZS1uKnQpL24pfSxpbmNyZWFzZTpmdW5jdGlvbigpe2lmKCF0aGlzLmlucHV0TnVtYmVyRGlzYWJsZWQmJiF0aGlzLm1heERpc2FibGVkKXt2YXIgZT10aGlzLnZhbHVlfHwwLHQ9dGhpcy5faW5jcmVhc2UoZSx0aGlzLnN0ZXApO3RoaXMuc2V0Q3VycmVudFZhbHVlKHQpfX0sZGVjcmVhc2U6ZnVuY3Rpb24oKXtpZighdGhpcy5pbnB1dE51bWJlckRpc2FibGVkJiYhdGhpcy5taW5EaXNhYmxlZCl7dmFyIGU9dGhpcy52YWx1ZXx8MCx0PXRoaXMuX2RlY3JlYXNlKGUsdGhpcy5zdGVwKTt0aGlzLnNldEN1cnJlbnRWYWx1ZSh0KX19LGhhbmRsZUJsdXI6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiYmx1ciIsZSl9LGhhbmRsZUZvY3VzOmZ1bmN0aW9uKGUpe3RoaXMuJGVtaXQoImZvY3VzIixlKX0sc2V0Q3VycmVudFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3VycmVudFZhbHVlOyJudW1iZXIiPT09dHlwZW9mIGUmJnZvaWQgMCE9PXRoaXMucHJlY2lzaW9uJiYoZT10aGlzLnRvUHJlY2lzaW9uKGUsdGhpcy5wcmVjaXNpb24pKSxlPj10aGlzLm1heCYmKGU9dGhpcy5tYXgpLGU8PXRoaXMubWluJiYoZT10aGlzLm1pbiksdCE9PWUmJih0aGlzLnVzZXJJbnB1dD1udWxsLHRoaXMuJGVtaXQoImlucHV0IixlKSx0aGlzLiRlbWl0KCJjaGFuZ2UiLGUsdCksdGhpcy5jdXJyZW50VmFsdWU9ZSl9LGhhbmRsZUlucHV0OmZ1bmN0aW9uKGUpe3RoaXMudXNlcklucHV0PWV9LGhhbmRsZUlucHV0Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PSIiPT09ZT92b2lkIDA6TnVtYmVyKGUpO2lzTmFOKHQpJiYiIiE9PWV8fHRoaXMuc2V0Q3VycmVudFZhbHVlKHQpLHRoaXMudXNlcklucHV0PW51bGx9LHNlbGVjdDpmdW5jdGlvbigpe3RoaXMuJHJlZnMuaW5wdXQuc2VsZWN0KCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtlLnNldEF0dHJpYnV0ZSgicm9sZSIsInNwaW5idXR0b24iKSxlLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1heCIsdGhpcy5tYXgpLGUuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWluIix0aGlzLm1pbiksZS5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLHRoaXMuY3VycmVudFZhbHVlKSxlLnNldEF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIsdGhpcy5pbnB1dE51bWJlckRpc2FibGVkKX0sdXBkYXRlZDpmdW5jdGlvbigpe2lmKHRoaXMuJHJlZnMmJnRoaXMuJHJlZnMuaW5wdXQpe3ZhciBlPXRoaXMuJHJlZnMuaW5wdXQuJHJlZnMuaW5wdXQ7ZS5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLHRoaXMuY3VycmVudFZhbHVlKX19fSxSdD1OdCwkdD1zKFJ0LE90LFB0LCExLG51bGwsbnVsbCxudWxsKTskdC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlIjt2YXIgenQ9JHQuZXhwb3J0czt6dC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KHp0Lm5hbWUsenQpfTt2YXIgQnQ9enQsRnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLXJhZGlvIixjbGFzczpbZS5ib3JkZXImJmUucmFkaW9TaXplPyJlbC1yYWRpby0tIitlLnJhZGlvU2l6ZToiIix7ImlzLWRpc2FibGVkIjplLmlzRGlzYWJsZWR9LHsiaXMtZm9jdXMiOmUuZm9jdXN9LHsiaXMtYm9yZGVyZWQiOmUuYm9yZGVyfSx7ImlzLWNoZWNrZWQiOmUubW9kZWw9PT1lLmxhYmVsfV0sYXR0cnM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjplLm1vZGVsPT09ZS5sYWJlbCwiYXJpYS1kaXNhYmxlZCI6ZS5pc0Rpc2FibGVkLHRhYmluZGV4OmUudGFiSW5kZXh9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInNwYWNlIiwzMix0LmtleSxbIiAiLCJTcGFjZWJhciJdKSlyZXR1cm4gbnVsbDt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSxlLm1vZGVsPWUuaXNEaXNhYmxlZD9lLm1vZGVsOmUubGFiZWx9fX0sW24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmFkaW9fX2lucHV0IixjbGFzczp7ImlzLWRpc2FibGVkIjplLmlzRGlzYWJsZWQsImlzLWNoZWNrZWQiOmUubW9kZWw9PT1lLmxhYmVsfX0sW24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtcmFkaW9fX2lubmVyIn0pLG4oImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHJlZjoicmFkaW8iLHN0YXRpY0NsYXNzOiJlbC1yYWRpb19fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJyYWRpbyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsbmFtZTplLm5hbWUsZGlzYWJsZWQ6ZS5pc0Rpc2FibGVkLHRhYmluZGV4OiItMSJ9LGRvbVByb3BzOnt2YWx1ZTplLmxhYmVsLGNoZWNrZWQ6ZS5fcShlLm1vZGVsLGUubGFiZWwpfSxvbjp7Zm9jdXM6ZnVuY3Rpb24odCl7ZS5mb2N1cz0hMH0sYmx1cjpmdW5jdGlvbih0KXtlLmZvY3VzPSExfSxjaGFuZ2U6W2Z1bmN0aW9uKHQpe2UubW9kZWw9ZS5sYWJlbH0sZS5oYW5kbGVDaGFuZ2VdfX0pXSksbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1yYWRpb19fbGFiZWwiLG9uOntrZXlkb3duOmZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9fX0sW2UuX3QoImRlZmF1bHQiKSxlLiRzbG90cy5kZWZhdWx0P2UuX2UoKTpbZS5fdihlLl9zKGUubGFiZWwpKV1dLDIpXSl9LFZ0PVtdO0Z0Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIGp0PXtuYW1lOiJFbFJhZGlvIixtaXhpbnM6W0UuYV0saW5qZWN0OntlbEZvcm06e2RlZmF1bHQ6IiJ9LGVsRm9ybUl0ZW06e2RlZmF1bHQ6IiJ9fSxjb21wb25lbnROYW1lOiJFbFJhZGlvIixwcm9wczp7dmFsdWU6e30sbGFiZWw6e30sZGlzYWJsZWQ6Qm9vbGVhbixuYW1lOlN0cmluZyxib3JkZXI6Qm9vbGVhbixzaXplOlN0cmluZ30sZGF0YTpmdW5jdGlvbigpe3JldHVybntmb2N1czohMX19LGNvbXB1dGVkOntpc0dyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcGFyZW50O3doaWxlKGUpe2lmKCJFbFJhZGlvR3JvdXAiPT09ZS4kb3B0aW9ucy5jb21wb25lbnROYW1lKXJldHVybiB0aGlzLl9yYWRpb0dyb3VwPWUsITA7ZT1lLiRwYXJlbnR9cmV0dXJuITF9LG1vZGVsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuX3JhZGlvR3JvdXAudmFsdWU6dGhpcy52YWx1ZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaXNHcm91cD90aGlzLmRpc3BhdGNoKCJFbFJhZGlvR3JvdXAiLCJpbnB1dCIsW2VdKTp0aGlzLiRlbWl0KCJpbnB1dCIsZSksdGhpcy4kcmVmcy5yYWRpbyYmKHRoaXMuJHJlZnMucmFkaW8uY2hlY2tlZD10aGlzLm1vZGVsPT09dGhpcy5sYWJlbCl9fSxfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemV9LHJhZGlvU2l6ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZTtyZXR1cm4gdGhpcy5pc0dyb3VwJiZ0aGlzLl9yYWRpb0dyb3VwLnJhZGlvR3JvdXBTaXplfHxlfSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNHcm91cD90aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkfHx0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZDp0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZH0sdGFiSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Rpc2FibGVkfHx0aGlzLmlzR3JvdXAmJnRoaXMubW9kZWwhPT10aGlzLmxhYmVsPy0xOjB9fSxtZXRob2RzOntoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe2UuJGVtaXQoImNoYW5nZSIsZS5tb2RlbCksZS5pc0dyb3VwJiZlLmRpc3BhdGNoKCJFbFJhZGlvR3JvdXAiLCJoYW5kbGVDaGFuZ2UiLGUubW9kZWwpfSkpfX19LEh0PWp0LFd0PXMoSHQsRnQsVnQsITEsbnVsbCxudWxsLG51bGwpO1d0Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlIjt2YXIgR3Q9V3QuZXhwb3J0cztHdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KEd0Lm5hbWUsR3QpfTt2YXIgVXQ9R3QscXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oZS5fZWxUYWcse3RhZzoiY29tcG9uZW50IixzdGF0aWNDbGFzczoiZWwtcmFkaW8tZ3JvdXAiLGF0dHJzOntyb2xlOiJyYWRpb2dyb3VwIn0sb246e2tleWRvd246ZS5oYW5kbGVLZXlkb3dufX0sW2UuX3QoImRlZmF1bHQiKV0sMil9LFl0PVtdO3F0Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIFh0PU9iamVjdC5mcmVlemUoe0xFRlQ6MzcsVVA6MzgsUklHSFQ6MzksRE9XTjo0MH0pLEt0PXtuYW1lOiJFbFJhZGlvR3JvdXAiLGNvbXBvbmVudE5hbWU6IkVsUmFkaW9Hcm91cCIsaW5qZWN0OntlbEZvcm1JdGVtOntkZWZhdWx0OiIifX0sbWl4aW5zOltFLmFdLHByb3BzOnt2YWx1ZTp7fSxzaXplOlN0cmluZyxmaWxsOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGRpc2FibGVkOkJvb2xlYW59LGNvbXB1dGVkOntfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemV9LF9lbFRhZzpmdW5jdGlvbigpe3JldHVybih0aGlzLiR2bm9kZS5kYXRhfHx7fSkudGFnfHwiZGl2In0scmFkaW9Hcm91cFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kb24oImhhbmRsZUNoYW5nZSIsKGZ1bmN0aW9uKHQpe2UuJGVtaXQoImNoYW5nZSIsdCl9KSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCJbdHlwZT1yYWRpb10iKSx0PXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIltyb2xlPXJhZGlvXSIpWzBdOyFbXS5zb21lLmNhbGwoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hlY2tlZH0pKSYmdCYmKHQudGFiSW5kZXg9MCl9LG1ldGhvZHM6e2hhbmRsZUtleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQsbj0iSU5QVVQiPT09dC5ub2RlTmFtZT8iW3R5cGU9cmFkaW9dIjoiW3JvbGU9cmFkaW9dIixpPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwobikscj1pLmxlbmd0aCxvPVtdLmluZGV4T2YuY2FsbChpLHQpLGE9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgiW3JvbGU9cmFkaW9dIik7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSBYdC5MRUZUOmNhc2UgWHQuVVA6ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksMD09PW8/KGFbci0xXS5jbGljaygpLGFbci0xXS5mb2N1cygpKTooYVtvLTFdLmNsaWNrKCksYVtvLTFdLmZvY3VzKCkpO2JyZWFrO2Nhc2UgWHQuUklHSFQ6Y2FzZSBYdC5ET1dOOm89PT1yLTE/KGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLGFbMF0uY2xpY2soKSxhWzBdLmZvY3VzKCkpOihhW28rMV0uY2xpY2soKSxhW28rMV0uZm9jdXMoKSk7YnJlYWs7ZGVmYXVsdDpicmVha319fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixbdGhpcy52YWx1ZV0pfX19LFp0PUt0LEp0PXMoWnQscXQsWXQsITEsbnVsbCxudWxsLG51bGwpO0p0Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlIjt2YXIgUXQ9SnQuZXhwb3J0cztRdC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KFF0Lm5hbWUsUXQpfTt2YXIgZW49UXQsdG49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLXJhZGlvLWJ1dHRvbiIsY2xhc3M6W2Uuc2l6ZT8iZWwtcmFkaW8tYnV0dG9uLS0iK2Uuc2l6ZToiIix7ImlzLWFjdGl2ZSI6ZS52YWx1ZT09PWUubGFiZWx9LHsiaXMtZGlzYWJsZWQiOmUuaXNEaXNhYmxlZH0seyJpcy1mb2N1cyI6ZS5mb2N1c31dLGF0dHJzOntyb2xlOiJyYWRpbyIsImFyaWEtY2hlY2tlZCI6ZS52YWx1ZT09PWUubGFiZWwsImFyaWEtZGlzYWJsZWQiOmUuaXNEaXNhYmxlZCx0YWJpbmRleDplLnRhYkluZGV4fSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXtpZighKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJzcGFjZSIsMzIsdC5rZXksWyIgIiwiU3BhY2ViYXIiXSkpcmV0dXJuIG51bGw7dC5zdG9wUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCksZS52YWx1ZT1lLmlzRGlzYWJsZWQ/ZS52YWx1ZTplLmxhYmVsfX19LFtuKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6ZS52YWx1ZSxleHByZXNzaW9uOiJ2YWx1ZSJ9XSxzdGF0aWNDbGFzczoiZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvIixhdHRyczp7dHlwZToicmFkaW8iLG5hbWU6ZS5uYW1lLGRpc2FibGVkOmUuaXNEaXNhYmxlZCx0YWJpbmRleDoiLTEifSxkb21Qcm9wczp7dmFsdWU6ZS5sYWJlbCxjaGVja2VkOmUuX3EoZS52YWx1ZSxlLmxhYmVsKX0sb246e2NoYW5nZTpbZnVuY3Rpb24odCl7ZS52YWx1ZT1lLmxhYmVsfSxlLmhhbmRsZUNoYW5nZV0sZm9jdXM6ZnVuY3Rpb24odCl7ZS5mb2N1cz0hMH0sYmx1cjpmdW5jdGlvbih0KXtlLmZvY3VzPSExfX19KSxuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXJhZGlvLWJ1dHRvbl9faW5uZXIiLHN0eWxlOmUudmFsdWU9PT1lLmxhYmVsP2UuYWN0aXZlU3R5bGU6bnVsbCxvbjp7a2V5ZG93bjpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfX19LFtlLl90KCJkZWZhdWx0IiksZS4kc2xvdHMuZGVmYXVsdD9lLl9lKCk6W2UuX3YoZS5fcyhlLmxhYmVsKSldXSwyKV0pfSxubj1bXTt0bi5fd2l0aFN0cmlwcGVkPSEwO3ZhciBybj17bmFtZToiRWxSYWRpb0J1dHRvbiIsbWl4aW5zOltFLmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifSxlbEZvcm1JdGVtOntkZWZhdWx0OiIifX0scHJvcHM6e2xhYmVsOnt9LGRpc2FibGVkOkJvb2xlYW4sbmFtZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Zm9jdXM6ITF9fSxjb21wdXRlZDp7dmFsdWU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpb0dyb3VwLnZhbHVlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmFkaW9Hcm91cC4kZW1pdCgiaW5wdXQiLGUpfX0sX3JhZGlvR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQ7d2hpbGUoZSl7aWYoIkVsUmFkaW9Hcm91cCI9PT1lLiRvcHRpb25zLmNvbXBvbmVudE5hbWUpcmV0dXJuIGU7ZT1lLiRwYXJlbnR9cmV0dXJuITF9LGFjdGl2ZVN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue2JhY2tncm91bmRDb2xvcjp0aGlzLl9yYWRpb0dyb3VwLmZpbGx8fCIiLGJvcmRlckNvbG9yOnRoaXMuX3JhZGlvR3JvdXAuZmlsbHx8IiIsYm94U2hhZG93OnRoaXMuX3JhZGlvR3JvdXAuZmlsbD8iLTFweCAwIDAgMCAiK3RoaXMuX3JhZGlvR3JvdXAuZmlsbDoiIixjb2xvcjp0aGlzLl9yYWRpb0dyb3VwLnRleHRDb2xvcnx8IiJ9fSxfZWxGb3JtSXRlbVNpemU6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5lbEZvcm1JdGVtfHx7fSkuZWxGb3JtSXRlbVNpemV9LHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaW9Hcm91cC5yYWRpb0dyb3VwU2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZX0saXNEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHx0aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZH0sdGFiSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0Rpc2FibGVkfHx0aGlzLl9yYWRpb0dyb3VwJiZ0aGlzLnZhbHVlIT09dGhpcy5sYWJlbD8tMTowfX0sbWV0aG9kczp7aGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtlLmRpc3BhdGNoKCJFbFJhZGlvR3JvdXAiLCJoYW5kbGVDaGFuZ2UiLGUudmFsdWUpfSkpfX19LG9uPXJuLGFuPXMob24sdG4sbm4sITEsbnVsbCxudWxsLG51bGwpO2FuLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tYnV0dG9uLnZ1ZSI7dmFyIHNuPWFuLmV4cG9ydHM7c24uaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChzbi5uYW1lLHNuKX07dmFyIGxuPXNuLGNuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJsYWJlbCIse3N0YXRpY0NsYXNzOiJlbC1jaGVja2JveCIsY2xhc3M6W2UuYm9yZGVyJiZlLmNoZWNrYm94U2l6ZT8iZWwtY2hlY2tib3gtLSIrZS5jaGVja2JveFNpemU6IiIseyJpcy1kaXNhYmxlZCI6ZS5pc0Rpc2FibGVkfSx7ImlzLWJvcmRlcmVkIjplLmJvcmRlcn0seyJpcy1jaGVja2VkIjplLmlzQ2hlY2tlZH1dLGF0dHJzOntpZDplLmlkfX0sW24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY2hlY2tib3hfX2lucHV0IixjbGFzczp7ImlzLWRpc2FibGVkIjplLmlzRGlzYWJsZWQsImlzLWNoZWNrZWQiOmUuaXNDaGVja2VkLCJpcy1pbmRldGVybWluYXRlIjplLmluZGV0ZXJtaW5hdGUsImlzLWZvY3VzIjplLmZvY3VzfSxhdHRyczp7dGFiaW5kZXg6ISFlLmluZGV0ZXJtaW5hdGUmJjAscm9sZTohIWUuaW5kZXRlcm1pbmF0ZSYmImNoZWNrYm94IiwiYXJpYS1jaGVja2VkIjohIWUuaW5kZXRlcm1pbmF0ZSYmIm1peGVkIn19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94X19pbm5lciJ9KSxlLnRydWVMYWJlbHx8ZS5mYWxzZUxhYmVsP24oImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsImFyaWEtaGlkZGVuIjplLmluZGV0ZXJtaW5hdGU/InRydWUiOiJmYWxzZSIsbmFtZTplLm5hbWUsZGlzYWJsZWQ6ZS5pc0Rpc2FibGVkLCJ0cnVlLXZhbHVlIjplLnRydWVMYWJlbCwiZmFsc2UtdmFsdWUiOmUuZmFsc2VMYWJlbH0sZG9tUHJvcHM6e2NoZWNrZWQ6QXJyYXkuaXNBcnJheShlLm1vZGVsKT9lLl9pKGUubW9kZWwsbnVsbCk+LTE6ZS5fcShlLm1vZGVsLGUudHJ1ZUxhYmVsKX0sb246e2NoYW5nZTpbZnVuY3Rpb24odCl7dmFyIG49ZS5tb2RlbCxpPXQudGFyZ2V0LHI9aS5jaGVja2VkP2UudHJ1ZUxhYmVsOmUuZmFsc2VMYWJlbDtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgbz1udWxsLGE9ZS5faShuLG8pO2kuY2hlY2tlZD9hPDAmJihlLm1vZGVsPW4uY29uY2F0KFtvXSkpOmE+LTEmJihlLm1vZGVsPW4uc2xpY2UoMCxhKS5jb25jYXQobi5zbGljZShhKzEpKSl9ZWxzZSBlLm1vZGVsPXJ9LGUuaGFuZGxlQ2hhbmdlXSxmb2N1czpmdW5jdGlvbih0KXtlLmZvY3VzPSEwfSxibHVyOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITF9fX0pOm4oImlucHV0Iix7ZGlyZWN0aXZlczpbe25hbWU6Im1vZGVsIixyYXdOYW1lOiJ2LW1vZGVsIix2YWx1ZTplLm1vZGVsLGV4cHJlc3Npb246Im1vZGVsIn1dLHN0YXRpY0NsYXNzOiJlbC1jaGVja2JveF9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsImFyaWEtaGlkZGVuIjplLmluZGV0ZXJtaW5hdGU/InRydWUiOiJmYWxzZSIsZGlzYWJsZWQ6ZS5pc0Rpc2FibGVkLG5hbWU6ZS5uYW1lfSxkb21Qcm9wczp7dmFsdWU6ZS5sYWJlbCxjaGVja2VkOkFycmF5LmlzQXJyYXkoZS5tb2RlbCk/ZS5faShlLm1vZGVsLGUubGFiZWwpPi0xOmUubW9kZWx9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKHQpe3ZhciBuPWUubW9kZWwsaT10LnRhcmdldCxyPSEhaS5jaGVja2VkO2lmKEFycmF5LmlzQXJyYXkobikpe3ZhciBvPWUubGFiZWwsYT1lLl9pKG4sbyk7aS5jaGVja2VkP2E8MCYmKGUubW9kZWw9bi5jb25jYXQoW29dKSk6YT4tMSYmKGUubW9kZWw9bi5zbGljZSgwLGEpLmNvbmNhdChuLnNsaWNlKGErMSkpKX1lbHNlIGUubW9kZWw9cn0sZS5oYW5kbGVDaGFuZ2VdLGZvY3VzOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITB9LGJsdXI6ZnVuY3Rpb24odCl7ZS5mb2N1cz0hMX19fSldKSxlLiRzbG90cy5kZWZhdWx0fHxlLmxhYmVsP24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtY2hlY2tib3hfX2xhYmVsIn0sW2UuX3QoImRlZmF1bHQiKSxlLiRzbG90cy5kZWZhdWx0P2UuX2UoKTpbZS5fdihlLl9zKGUubGFiZWwpKV1dLDIpOmUuX2UoKV0pfSx1bj1bXTtjbi5fd2l0aFN0cmlwcGVkPSEwO3ZhciBobj17bmFtZToiRWxDaGVja2JveCIsbWl4aW5zOltFLmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifSxlbEZvcm1JdGVtOntkZWZhdWx0OiIifX0sY29tcG9uZW50TmFtZToiRWxDaGVja2JveCIsZGF0YTpmdW5jdGlvbigpe3JldHVybntzZWxmTW9kZWw6ITEsZm9jdXM6ITEsaXNMaW1pdEV4Y2VlZGVkOiExfX0sY29tcHV0ZWQ6e21vZGVsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0dyb3VwP3RoaXMuc3RvcmU6dm9pZCAwIT09dGhpcy52YWx1ZT90aGlzLnZhbHVlOnRoaXMuc2VsZk1vZGVsfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pc0dyb3VwPyh0aGlzLmlzTGltaXRFeGNlZWRlZD0hMSx2b2lkIDAhPT10aGlzLl9jaGVja2JveEdyb3VwLm1pbiYmZS5sZW5ndGg8dGhpcy5fY2hlY2tib3hHcm91cC5taW4mJih0aGlzLmlzTGltaXRFeGNlZWRlZD0hMCksdm9pZCAwIT09dGhpcy5fY2hlY2tib3hHcm91cC5tYXgmJmUubGVuZ3RoPnRoaXMuX2NoZWNrYm94R3JvdXAubWF4JiYodGhpcy5pc0xpbWl0RXhjZWVkZWQ9ITApLCExPT09dGhpcy5pc0xpbWl0RXhjZWVkZWQmJnRoaXMuZGlzcGF0Y2goIkVsQ2hlY2tib3hHcm91cCIsImlucHV0IixbZV0pKToodGhpcy4kZW1pdCgiaW5wdXQiLGUpLHRoaXMuc2VsZk1vZGVsPWUpfX0saXNDaGVja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQm9vbGVhbl0iPT09e30udG9TdHJpbmcuY2FsbCh0aGlzLm1vZGVsKT90aGlzLm1vZGVsOkFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCk/dGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpPi0xOm51bGwhPT10aGlzLm1vZGVsJiZ2b2lkIDAhPT10aGlzLm1vZGVsP3RoaXMubW9kZWw9PT10aGlzLnRydWVMYWJlbDp2b2lkIDB9LGlzR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQ7d2hpbGUoZSl7aWYoIkVsQ2hlY2tib3hHcm91cCI9PT1lLiRvcHRpb25zLmNvbXBvbmVudE5hbWUpcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA9ZSwhMDtlPWUuJHBhcmVudH1yZXR1cm4hMX0sc3RvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cD90aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlOnRoaXMudmFsdWV9LGlzTGltaXREaXNhYmxlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NoZWNrYm94R3JvdXAsdD1lLm1heCxuPWUubWluO3JldHVybiEoIXQmJiFuKSYmdGhpcy5tb2RlbC5sZW5ndGg+PXQmJiF0aGlzLmlzQ2hlY2tlZHx8dGhpcy5tb2RlbC5sZW5ndGg8PW4mJnRoaXMuaXNDaGVja2VkfSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNHcm91cD90aGlzLl9jaGVja2JveEdyb3VwLmRpc2FibGVkfHx0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZHx8dGhpcy5pc0xpbWl0RGlzYWJsZWQ6dGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWR9LF9lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZX0sY2hlY2tib3hTaXplOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplO3JldHVybiB0aGlzLmlzR3JvdXAmJnRoaXMuX2NoZWNrYm94R3JvdXAuY2hlY2tib3hHcm91cFNpemV8fGV9fSxwcm9wczp7dmFsdWU6e30sbGFiZWw6e30saW5kZXRlcm1pbmF0ZTpCb29sZWFuLGRpc2FibGVkOkJvb2xlYW4sY2hlY2tlZDpCb29sZWFuLG5hbWU6U3RyaW5nLHRydWVMYWJlbDpbU3RyaW5nLE51bWJlcl0sZmFsc2VMYWJlbDpbU3RyaW5nLE51bWJlcl0saWQ6U3RyaW5nLGNvbnRyb2xzOlN0cmluZyxib3JkZXI6Qm9vbGVhbixzaXplOlN0cmluZ30sbWV0aG9kczp7YWRkVG9TdG9yZTpmdW5jdGlvbigpe0FycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkmJi0xPT09dGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpP3RoaXMubW9kZWwucHVzaCh0aGlzLmxhYmVsKTp0aGlzLm1vZGVsPXRoaXMudHJ1ZUxhYmVsfHwhMH0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoIXRoaXMuaXNMaW1pdEV4Y2VlZGVkKXt2YXIgbj12b2lkIDA7bj1lLnRhcmdldC5jaGVja2VkP3ZvaWQgMD09PXRoaXMudHJ1ZUxhYmVsfHx0aGlzLnRydWVMYWJlbDp2b2lkIDAhPT10aGlzLmZhbHNlTGFiZWwmJnRoaXMuZmFsc2VMYWJlbCx0aGlzLiRlbWl0KCJjaGFuZ2UiLG4sZSksdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7dC5pc0dyb3VwJiZ0LmRpc3BhdGNoKCJFbENoZWNrYm94R3JvdXAiLCJjaGFuZ2UiLFt0Ll9jaGVja2JveEdyb3VwLnZhbHVlXSl9KSl9fX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuY2hlY2tlZCYmdGhpcy5hZGRUb1N0b3JlKCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmluZGV0ZXJtaW5hdGUmJnRoaXMuJGVsLnNldEF0dHJpYnV0ZSgiYXJpYS1jb250cm9scyIsdGhpcy5jb250cm9scyl9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmRpc3BhdGNoKCJFbEZvcm1JdGVtIiwiZWwuZm9ybS5jaGFuZ2UiLGUpfX19LGRuPWhuLGZuPXMoZG4sY24sdW4sITEsbnVsbCxudWxsLG51bGwpO2ZuLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlIjt2YXIgcG49Zm4uZXhwb3J0cztwbi5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KHBuLm5hbWUscG4pfTt2YXIgbW49cG4sZ249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94LWJ1dHRvbiIsY2xhc3M6W2Uuc2l6ZT8iZWwtY2hlY2tib3gtYnV0dG9uLS0iK2Uuc2l6ZToiIix7ImlzLWRpc2FibGVkIjplLmlzRGlzYWJsZWR9LHsiaXMtY2hlY2tlZCI6ZS5pc0NoZWNrZWR9LHsiaXMtZm9jdXMiOmUuZm9jdXN9XSxhdHRyczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOmUuaXNDaGVja2VkLCJhcmlhLWRpc2FibGVkIjplLmlzRGlzYWJsZWR9fSxbZS50cnVlTGFiZWx8fGUuZmFsc2VMYWJlbD9uKCJpbnB1dCIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb2RlbCIscmF3TmFtZToidi1tb2RlbCIsdmFsdWU6ZS5tb2RlbCxleHByZXNzaW9uOiJtb2RlbCJ9XSxzdGF0aWNDbGFzczoiZWwtY2hlY2tib3gtYnV0dG9uX19vcmlnaW5hbCIsYXR0cnM6e3R5cGU6ImNoZWNrYm94IixuYW1lOmUubmFtZSxkaXNhYmxlZDplLmlzRGlzYWJsZWQsInRydWUtdmFsdWUiOmUudHJ1ZUxhYmVsLCJmYWxzZS12YWx1ZSI6ZS5mYWxzZUxhYmVsfSxkb21Qcm9wczp7Y2hlY2tlZDpBcnJheS5pc0FycmF5KGUubW9kZWwpP2UuX2koZS5tb2RlbCxudWxsKT4tMTplLl9xKGUubW9kZWwsZS50cnVlTGFiZWwpfSxvbjp7Y2hhbmdlOltmdW5jdGlvbih0KXt2YXIgbj1lLm1vZGVsLGk9dC50YXJnZXQscj1pLmNoZWNrZWQ/ZS50cnVlTGFiZWw6ZS5mYWxzZUxhYmVsO2lmKEFycmF5LmlzQXJyYXkobikpe3ZhciBvPW51bGwsYT1lLl9pKG4sbyk7aS5jaGVja2VkP2E8MCYmKGUubW9kZWw9bi5jb25jYXQoW29dKSk6YT4tMSYmKGUubW9kZWw9bi5zbGljZSgwLGEpLmNvbmNhdChuLnNsaWNlKGErMSkpKX1lbHNlIGUubW9kZWw9cn0sZS5oYW5kbGVDaGFuZ2VdLGZvY3VzOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITB9LGJsdXI6ZnVuY3Rpb24odCl7ZS5mb2N1cz0hMX19fSk6bigiaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUubW9kZWwsZXhwcmVzc2lvbjoibW9kZWwifV0sc3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94LWJ1dHRvbl9fb3JpZ2luYWwiLGF0dHJzOnt0eXBlOiJjaGVja2JveCIsbmFtZTplLm5hbWUsZGlzYWJsZWQ6ZS5pc0Rpc2FibGVkfSxkb21Qcm9wczp7dmFsdWU6ZS5sYWJlbCxjaGVja2VkOkFycmF5LmlzQXJyYXkoZS5tb2RlbCk/ZS5faShlLm1vZGVsLGUubGFiZWwpPi0xOmUubW9kZWx9LG9uOntjaGFuZ2U6W2Z1bmN0aW9uKHQpe3ZhciBuPWUubW9kZWwsaT10LnRhcmdldCxyPSEhaS5jaGVja2VkO2lmKEFycmF5LmlzQXJyYXkobikpe3ZhciBvPWUubGFiZWwsYT1lLl9pKG4sbyk7aS5jaGVja2VkP2E8MCYmKGUubW9kZWw9bi5jb25jYXQoW29dKSk6YT4tMSYmKGUubW9kZWw9bi5zbGljZSgwLGEpLmNvbmNhdChuLnNsaWNlKGErMSkpKX1lbHNlIGUubW9kZWw9cn0sZS5oYW5kbGVDaGFuZ2VdLGZvY3VzOmZ1bmN0aW9uKHQpe2UuZm9jdXM9ITB9LGJsdXI6ZnVuY3Rpb24odCl7ZS5mb2N1cz0hMX19fSksZS4kc2xvdHMuZGVmYXVsdHx8ZS5sYWJlbD9uKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIiLHN0eWxlOmUuaXNDaGVja2VkP2UuYWN0aXZlU3R5bGU6bnVsbH0sW2UuX3QoImRlZmF1bHQiLFtlLl92KGUuX3MoZS5sYWJlbCkpXSldLDIpOmUuX2UoKV0pfSx2bj1bXTtnbi5fd2l0aFN0cmlwcGVkPSEwO3ZhciB5bj17bmFtZToiRWxDaGVja2JveEJ1dHRvbiIsbWl4aW5zOltFLmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifSxlbEZvcm1JdGVtOntkZWZhdWx0OiIifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntzZWxmTW9kZWw6ITEsZm9jdXM6ITEsaXNMaW1pdEV4Y2VlZGVkOiExfX0scHJvcHM6e3ZhbHVlOnt9LGxhYmVsOnt9LGRpc2FibGVkOkJvb2xlYW4sY2hlY2tlZDpCb29sZWFuLG5hbWU6U3RyaW5nLHRydWVMYWJlbDpbU3RyaW5nLE51bWJlcl0sZmFsc2VMYWJlbDpbU3RyaW5nLE51bWJlcl19LGNvbXB1dGVkOnttb2RlbDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA/dGhpcy5zdG9yZTp2b2lkIDAhPT10aGlzLnZhbHVlP3RoaXMudmFsdWU6dGhpcy5zZWxmTW9kZWx9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9jaGVja2JveEdyb3VwPyh0aGlzLmlzTGltaXRFeGNlZWRlZD0hMSx2b2lkIDAhPT10aGlzLl9jaGVja2JveEdyb3VwLm1pbiYmZS5sZW5ndGg8dGhpcy5fY2hlY2tib3hHcm91cC5taW4mJih0aGlzLmlzTGltaXRFeGNlZWRlZD0hMCksdm9pZCAwIT09dGhpcy5fY2hlY2tib3hHcm91cC5tYXgmJmUubGVuZ3RoPnRoaXMuX2NoZWNrYm94R3JvdXAubWF4JiYodGhpcy5pc0xpbWl0RXhjZWVkZWQ9ITApLCExPT09dGhpcy5pc0xpbWl0RXhjZWVkZWQmJnRoaXMuZGlzcGF0Y2goIkVsQ2hlY2tib3hHcm91cCIsImlucHV0IixbZV0pKTp2b2lkIDAhPT10aGlzLnZhbHVlP3RoaXMuJGVtaXQoImlucHV0IixlKTp0aGlzLnNlbGZNb2RlbD1lfX0saXNDaGVja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQm9vbGVhbl0iPT09e30udG9TdHJpbmcuY2FsbCh0aGlzLm1vZGVsKT90aGlzLm1vZGVsOkFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCk/dGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpPi0xOm51bGwhPT10aGlzLm1vZGVsJiZ2b2lkIDAhPT10aGlzLm1vZGVsP3RoaXMubW9kZWw9PT10aGlzLnRydWVMYWJlbDp2b2lkIDB9LF9jaGVja2JveEdyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcGFyZW50O3doaWxlKGUpe2lmKCJFbENoZWNrYm94R3JvdXAiPT09ZS4kb3B0aW9ucy5jb21wb25lbnROYW1lKXJldHVybiBlO2U9ZS4kcGFyZW50fXJldHVybiExfSxzdG9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVja2JveEdyb3VwP3RoaXMuX2NoZWNrYm94R3JvdXAudmFsdWU6dGhpcy52YWx1ZX0sYWN0aXZlU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOnRoaXMuX2NoZWNrYm94R3JvdXAuZmlsbHx8IiIsYm9yZGVyQ29sb3I6dGhpcy5fY2hlY2tib3hHcm91cC5maWxsfHwiIixjb2xvcjp0aGlzLl9jaGVja2JveEdyb3VwLnRleHRDb2xvcnx8IiIsImJveC1zaGFkb3ciOiItMXB4IDAgMCAwICIrdGhpcy5fY2hlY2tib3hHcm91cC5maWxsfX0sX2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAuY2hlY2tib3hHcm91cFNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemV9LGlzTGltaXREaXNhYmxlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NoZWNrYm94R3JvdXAsdD1lLm1heCxuPWUubWluO3JldHVybiEoIXQmJiFuKSYmdGhpcy5tb2RlbC5sZW5ndGg+PXQmJiF0aGlzLmlzQ2hlY2tlZHx8dGhpcy5tb2RlbC5sZW5ndGg8PW4mJnRoaXMuaXNDaGVja2VkfSxpc0Rpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXA/dGhpcy5fY2hlY2tib3hHcm91cC5kaXNhYmxlZHx8dGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWR8fHRoaXMuaXNMaW1pdERpc2FibGVkOnRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfX0sbWV0aG9kczp7YWRkVG9TdG9yZTpmdW5jdGlvbigpe0FycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkmJi0xPT09dGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpP3RoaXMubW9kZWwucHVzaCh0aGlzLmxhYmVsKTp0aGlzLm1vZGVsPXRoaXMudHJ1ZUxhYmVsfHwhMH0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoIXRoaXMuaXNMaW1pdEV4Y2VlZGVkKXt2YXIgbj12b2lkIDA7bj1lLnRhcmdldC5jaGVja2VkP3ZvaWQgMD09PXRoaXMudHJ1ZUxhYmVsfHx0aGlzLnRydWVMYWJlbDp2b2lkIDAhPT10aGlzLmZhbHNlTGFiZWwmJnRoaXMuZmFsc2VMYWJlbCx0aGlzLiRlbWl0KCJjaGFuZ2UiLG4sZSksdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7dC5fY2hlY2tib3hHcm91cCYmdC5kaXNwYXRjaCgiRWxDaGVja2JveEdyb3VwIiwiY2hhbmdlIixbdC5fY2hlY2tib3hHcm91cC52YWx1ZV0pfSkpfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmNoZWNrZWQmJnRoaXMuYWRkVG9TdG9yZSgpfX0sYm49eW4seG49cyhibixnbix2biwhMSxudWxsLG51bGwsbnVsbCk7eG4ub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1idXR0b24udnVlIjt2YXIgX249eG4uZXhwb3J0cztfbi5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KF9uLm5hbWUsX24pfTt2YXIgd249X24sU249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jaGVja2JveC1ncm91cCIsYXR0cnM6e3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6ImNoZWNrYm94LWdyb3VwIn19LFtlLl90KCJkZWZhdWx0IildLDIpfSxDbj1bXTtTbi5fd2l0aFN0cmlwcGVkPSEwO3ZhciBrbj17bmFtZToiRWxDaGVja2JveEdyb3VwIixjb21wb25lbnROYW1lOiJFbENoZWNrYm94R3JvdXAiLG1peGluczpbRS5hXSxpbmplY3Q6e2VsRm9ybUl0ZW06e2RlZmF1bHQ6IiJ9fSxwcm9wczp7dmFsdWU6e30sZGlzYWJsZWQ6Qm9vbGVhbixtaW46TnVtYmVyLG1heDpOdW1iZXIsc2l6ZTpTdHJpbmcsZmlsbDpTdHJpbmcsdGV4dENvbG9yOlN0cmluZ30sY29tcHV0ZWQ6e19lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZX0sY2hlY2tib3hHcm91cFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfHx0aGlzLl9lbEZvcm1JdGVtU2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZGlzcGF0Y2goIkVsRm9ybUl0ZW0iLCJlbC5mb3JtLmNoYW5nZSIsW2VdKX19fSxUbj1rbixNbj1zKFRuLFNuLENuLCExLG51bGwsbnVsbCxudWxsKTtNbi5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZSI7dmFyIEVuPU1uLmV4cG9ydHM7RW4uaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChFbi5uYW1lLEVuKX07dmFyIEluPUVuLERuPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3dpdGNoIixjbGFzczp7ImlzLWRpc2FibGVkIjplLnN3aXRjaERpc2FibGVkLCJpcy1jaGVja2VkIjplLmNoZWNrZWR9LGF0dHJzOntyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOmUuY2hlY2tlZCwiYXJpYS1kaXNhYmxlZCI6ZS5zd2l0Y2hEaXNhYmxlZH0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCksZS5zd2l0Y2hWYWx1ZSh0KX19fSxbbigiaW5wdXQiLHtyZWY6ImlucHV0IixzdGF0aWNDbGFzczoiZWwtc3dpdGNoX19pbnB1dCIsYXR0cnM6e3R5cGU6ImNoZWNrYm94IixpZDplLmlkLG5hbWU6ZS5uYW1lLCJ0cnVlLXZhbHVlIjplLmFjdGl2ZVZhbHVlLCJmYWxzZS12YWx1ZSI6ZS5pbmFjdGl2ZVZhbHVlLGRpc2FibGVkOmUuc3dpdGNoRGlzYWJsZWR9LG9uOntjaGFuZ2U6ZS5oYW5kbGVDaGFuZ2Usa2V5ZG93bjpmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMsdC5rZXksIkVudGVyIik/bnVsbDplLnN3aXRjaFZhbHVlKHQpfX19KSxlLmluYWN0aXZlSWNvbkNsYXNzfHxlLmluYWN0aXZlVGV4dD9uKCJzcGFuIix7Y2xhc3M6WyJlbC1zd2l0Y2hfX2xhYmVsIiwiZWwtc3dpdGNoX19sYWJlbC0tbGVmdCIsZS5jaGVja2VkPyIiOiJpcy1hY3RpdmUiXX0sW2UuaW5hY3RpdmVJY29uQ2xhc3M/bigiaSIse2NsYXNzOltlLmluYWN0aXZlSWNvbkNsYXNzXX0pOmUuX2UoKSwhZS5pbmFjdGl2ZUljb25DbGFzcyYmZS5pbmFjdGl2ZVRleHQ/bigic3BhbiIse2F0dHJzOnsiYXJpYS1oaWRkZW4iOmUuY2hlY2tlZH19LFtlLl92KGUuX3MoZS5pbmFjdGl2ZVRleHQpKV0pOmUuX2UoKV0pOmUuX2UoKSxuKCJzcGFuIix7cmVmOiJjb3JlIixzdGF0aWNDbGFzczoiZWwtc3dpdGNoX19jb3JlIixzdHlsZTp7d2lkdGg6ZS5jb3JlV2lkdGgrInB4In19KSxlLmFjdGl2ZUljb25DbGFzc3x8ZS5hY3RpdmVUZXh0P24oInNwYW4iLHtjbGFzczpbImVsLXN3aXRjaF9fbGFiZWwiLCJlbC1zd2l0Y2hfX2xhYmVsLS1yaWdodCIsZS5jaGVja2VkPyJpcy1hY3RpdmUiOiIiXX0sW2UuYWN0aXZlSWNvbkNsYXNzP24oImkiLHtjbGFzczpbZS5hY3RpdmVJY29uQ2xhc3NdfSk6ZS5fZSgpLCFlLmFjdGl2ZUljb25DbGFzcyYmZS5hY3RpdmVUZXh0P24oInNwYW4iLHthdHRyczp7ImFyaWEtaGlkZGVuIjohZS5jaGVja2VkfX0sW2UuX3YoZS5fcyhlLmFjdGl2ZVRleHQpKV0pOmUuX2UoKV0pOmUuX2UoKV0pfSxBbj1bXTtEbi5fd2l0aFN0cmlwcGVkPSEwO3ZhciBPbj17bmFtZToiRWxTd2l0Y2giLG1peGluczpbWigpKCJpbnB1dCIpLFQuYSxFLmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifX0scHJvcHM6e3ZhbHVlOnt0eXBlOltCb29sZWFuLFN0cmluZyxOdW1iZXJdLGRlZmF1bHQ6ITF9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sd2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NDB9LGFjdGl2ZUljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0saW5hY3RpdmVJY29uQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGFjdGl2ZVRleHQ6U3RyaW5nLGluYWN0aXZlVGV4dDpTdHJpbmcsYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGluYWN0aXZlQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGFjdGl2ZVZhbHVlOnt0eXBlOltCb29sZWFuLFN0cmluZyxOdW1iZXJdLGRlZmF1bHQ6ITB9LGluYWN0aXZlVmFsdWU6e3R5cGU6W0Jvb2xlYW4sU3RyaW5nLE51bWJlcl0sZGVmYXVsdDohMX0sbmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sdmFsaWRhdGVFdmVudDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGlkOlN0cmluZ30sZGF0YTpmdW5jdGlvbigpe3JldHVybntjb3JlV2lkdGg6dGhpcy53aWR0aH19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt+W3RoaXMuYWN0aXZlVmFsdWUsdGhpcy5pbmFjdGl2ZVZhbHVlXS5pbmRleE9mKHRoaXMudmFsdWUpfHx0aGlzLiRlbWl0KCJpbnB1dCIsdGhpcy5pbmFjdGl2ZVZhbHVlKX0sY29tcHV0ZWQ6e2NoZWNrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZT09PXRoaXMuYWN0aXZlVmFsdWV9LHN3aXRjaERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfX0sd2F0Y2g6e2NoZWNrZWQ6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmlucHV0LmNoZWNrZWQ9dGhpcy5jaGVja2VkLCh0aGlzLmFjdGl2ZUNvbG9yfHx0aGlzLmluYWN0aXZlQ29sb3IpJiZ0aGlzLnNldEJhY2tncm91bmRDb2xvcigpLHRoaXMudmFsaWRhdGVFdmVudCYmdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixbdGhpcy52YWx1ZV0pfX0sbWV0aG9kczp7aGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLmNoZWNrZWQ/dGhpcy5pbmFjdGl2ZVZhbHVlOnRoaXMuYWN0aXZlVmFsdWU7dGhpcy4kZW1pdCgiaW5wdXQiLG4pLHRoaXMuJGVtaXQoImNoYW5nZSIsbiksdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7dC4kcmVmcy5pbnB1dC5jaGVja2VkPXQuY2hlY2tlZH0pKX0sc2V0QmFja2dyb3VuZENvbG9yOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jaGVja2VkP3RoaXMuYWN0aXZlQ29sb3I6dGhpcy5pbmFjdGl2ZUNvbG9yO3RoaXMuJHJlZnMuY29yZS5zdHlsZS5ib3JkZXJDb2xvcj1lLHRoaXMuJHJlZnMuY29yZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9ZX0sc3dpdGNoVmFsdWU6ZnVuY3Rpb24oKXshdGhpcy5zd2l0Y2hEaXNhYmxlZCYmdGhpcy5oYW5kbGVDaGFuZ2UoKX0sZ2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue3Byb3BzOnsib24tY29sb3IiOiJvbi1jb2xvciBpcyByZW5hbWVkIHRvIGFjdGl2ZS1jb2xvci4iLCJvZmYtY29sb3IiOiJvZmYtY29sb3IgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS1jb2xvci4iLCJvbi10ZXh0Ijoib24tdGV4dCBpcyByZW5hbWVkIHRvIGFjdGl2ZS10ZXh0LiIsIm9mZi10ZXh0Ijoib2ZmLXRleHQgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS10ZXh0LiIsIm9uLXZhbHVlIjoib24tdmFsdWUgaXMgcmVuYW1lZCB0byBhY3RpdmUtdmFsdWUuIiwib2ZmLXZhbHVlIjoib2ZmLXZhbHVlIGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtdmFsdWUuIiwib24taWNvbi1jbGFzcyI6Im9uLWljb24tY2xhc3MgaXMgcmVuYW1lZCB0byBhY3RpdmUtaWNvbi1jbGFzcy4iLCJvZmYtaWNvbi1jbGFzcyI6Im9mZi1pY29uLWNsYXNzIGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtaWNvbi1jbGFzcy4ifX19fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5jb3JlV2lkdGg9dGhpcy53aWR0aHx8NDAsKHRoaXMuYWN0aXZlQ29sb3J8fHRoaXMuaW5hY3RpdmVDb2xvcikmJnRoaXMuc2V0QmFja2dyb3VuZENvbG9yKCksdGhpcy4kcmVmcy5pbnB1dC5jaGVja2VkPXRoaXMuY2hlY2tlZH19LFBuPU9uLExuPXMoUG4sRG4sQW4sITEsbnVsbCxudWxsLG51bGwpO0xuLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9zd2l0Y2gvc3JjL2NvbXBvbmVudC52dWUiO3ZhciBObj1Mbi5leHBvcnRzO05uLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoTm4ubmFtZSxObil9O3ZhciBSbj1Obiwkbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOmUuaGFuZGxlQ2xvc2UsZXhwcmVzc2lvbjoiaGFuZGxlQ2xvc2UifV0sc3RhdGljQ2xhc3M6ImVsLXNlbGVjdCIsY2xhc3M6W2Uuc2VsZWN0U2l6ZT8iZWwtc2VsZWN0LS0iK2Uuc2VsZWN0U2l6ZToiIl0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbigpLGUudG9nZ2xlTWVudSh0KX19fSxbZS5tdWx0aXBsZT9uKCJkaXYiLHtyZWY6InRhZ3MiLHN0YXRpY0NsYXNzOiJlbC1zZWxlY3RfX3RhZ3MiLHN0eWxlOnsibWF4LXdpZHRoIjplLmlucHV0V2lkdGgtMzIrInB4Iix3aWR0aDoiMTAwJSJ9fSxbZS5jb2xsYXBzZVRhZ3MmJmUuc2VsZWN0ZWQubGVuZ3RoP24oInNwYW4iLFtuKCJlbC10YWciLHthdHRyczp7Y2xvc2FibGU6IWUuc2VsZWN0RGlzYWJsZWQsc2l6ZTplLmNvbGxhcHNlVGFnU2l6ZSxoaXQ6ZS5zZWxlY3RlZFswXS5oaXRTdGF0ZSx0eXBlOiJpbmZvIiwiZGlzYWJsZS10cmFuc2l0aW9ucyI6IiJ9LG9uOntjbG9zZTpmdW5jdGlvbih0KXtlLmRlbGV0ZVRhZyh0LGUuc2VsZWN0ZWRbMF0pfX19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW2UuX3YoZS5fcyhlLnNlbGVjdGVkWzBdLmN1cnJlbnRMYWJlbCkpXSldKSxlLnNlbGVjdGVkLmxlbmd0aD4xP24oImVsLXRhZyIse2F0dHJzOntjbG9zYWJsZTohMSxzaXplOmUuY29sbGFwc2VUYWdTaXplLHR5cGU6ImluZm8iLCJkaXNhYmxlLXRyYW5zaXRpb25zIjoiIn19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW2UuX3YoIisgIitlLl9zKGUuc2VsZWN0ZWQubGVuZ3RoLTEpKV0pXSk6ZS5fZSgpXSwxKTplLl9lKCksZS5jb2xsYXBzZVRhZ3M/ZS5fZSgpOm4oInRyYW5zaXRpb24tZ3JvdXAiLHtvbjp7ImFmdGVyLWxlYXZlIjplLnJlc2V0SW5wdXRIZWlnaHR9fSxlLl9sKGUuc2VsZWN0ZWQsKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJlbC10YWciLHtrZXk6ZS5nZXRWYWx1ZUtleSh0KSxhdHRyczp7Y2xvc2FibGU6IWUuc2VsZWN0RGlzYWJsZWQsc2l6ZTplLmNvbGxhcHNlVGFnU2l6ZSxoaXQ6dC5oaXRTdGF0ZSx0eXBlOiJpbmZvIiwiZGlzYWJsZS10cmFuc2l0aW9ucyI6IiJ9LG9uOntjbG9zZTpmdW5jdGlvbihuKXtlLmRlbGV0ZVRhZyhuLHQpfX19LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9fdGFncy10ZXh0In0sW2UuX3YoZS5fcyh0LmN1cnJlbnRMYWJlbCkpXSldKX0pKSwxKSxlLmZpbHRlcmFibGU/bigiaW5wdXQiLHtkaXJlY3RpdmVzOlt7bmFtZToibW9kZWwiLHJhd05hbWU6InYtbW9kZWwiLHZhbHVlOmUucXVlcnksZXhwcmVzc2lvbjoicXVlcnkifV0scmVmOiJpbnB1dCIsc3RhdGljQ2xhc3M6ImVsLXNlbGVjdF9faW5wdXQiLGNsYXNzOltlLnNlbGVjdFNpemU/ImlzLSIrZS5zZWxlY3RTaXplOiIiXSxzdHlsZTp7ImZsZXgtZ3JvdyI6IjEiLHdpZHRoOmUuaW5wdXRMZW5ndGgvKGUuaW5wdXRXaWR0aC0zMikrIiUiLCJtYXgtd2lkdGgiOmUuaW5wdXRXaWR0aC00MisicHgifSxhdHRyczp7dHlwZToidGV4dCIsZGlzYWJsZWQ6ZS5zZWxlY3REaXNhYmxlZCxhdXRvY29tcGxldGU6ZS5hdXRvQ29tcGxldGV8fGUuYXV0b2NvbXBsZXRlfSxkb21Qcm9wczp7dmFsdWU6ZS5xdWVyeX0sb246e2ZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjpmdW5jdGlvbih0KXtlLnNvZnRGb2N1cz0hMX0sa2V5dXA6ZS5tYW5hZ2VQbGFjZWhvbGRlcixrZXlkb3duOltlLnJlc2V0SW5wdXRTdGF0ZSxmdW5jdGlvbih0KXtpZighKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJkb3duIiw0MCx0LmtleSxbIkRvd24iLCJBcnJvd0Rvd24iXSkpcmV0dXJuIG51bGw7dC5wcmV2ZW50RGVmYXVsdCgpLGUubmF2aWdhdGVPcHRpb25zKCJuZXh0Iil9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInVwIiwzOCx0LmtleSxbIlVwIiwiQXJyb3dVcCJdKSlyZXR1cm4gbnVsbDt0LnByZXZlbnREZWZhdWx0KCksZS5uYXZpZ2F0ZU9wdGlvbnMoInByZXYiKX0sZnVuY3Rpb24odCl7cmV0dXJuISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZW50ZXIiLDEzLHQua2V5LCJFbnRlciIpP251bGw6KHQucHJldmVudERlZmF1bHQoKSxlLnNlbGVjdE9wdGlvbih0KSl9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVzYyIsMjcsdC5rZXksWyJFc2MiLCJFc2NhcGUiXSkpcmV0dXJuIG51bGw7dC5zdG9wUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCksZS52aXNpYmxlPSExfSxmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJkZWxldGUiLFs4LDQ2XSx0LmtleSxbIkJhY2tzcGFjZSIsIkRlbGV0ZSIsIkRlbCJdKT9udWxsOmUuZGVsZXRlUHJldlRhZyh0KX0sZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwidGFiIiw5LHQua2V5LCJUYWIiKSlyZXR1cm4gbnVsbDtlLnZpc2libGU9ITF9XSxjb21wb3NpdGlvbnN0YXJ0OmUuaGFuZGxlQ29tcG9zaXRpb24sY29tcG9zaXRpb251cGRhdGU6ZS5oYW5kbGVDb21wb3NpdGlvbixjb21wb3NpdGlvbmVuZDplLmhhbmRsZUNvbXBvc2l0aW9uLGlucHV0OltmdW5jdGlvbih0KXt0LnRhcmdldC5jb21wb3Npbmd8fChlLnF1ZXJ5PXQudGFyZ2V0LnZhbHVlKX0sZS5kZWJvdW5jZWRRdWVyeUNoYW5nZV19fSk6ZS5fZSgpXSwxKTplLl9lKCksbigiZWwtaW5wdXQiLHtyZWY6InJlZmVyZW5jZSIsY2xhc3M6eyJpcy1mb2N1cyI6ZS52aXNpYmxlfSxhdHRyczp7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6ZS5jdXJyZW50UGxhY2Vob2xkZXIsbmFtZTplLm5hbWUsaWQ6ZS5pZCxhdXRvY29tcGxldGU6ZS5hdXRvQ29tcGxldGV8fGUuYXV0b2NvbXBsZXRlLHNpemU6ZS5zZWxlY3RTaXplLGRpc2FibGVkOmUuc2VsZWN0RGlzYWJsZWQscmVhZG9ubHk6ZS5yZWFkb25seSwidmFsaWRhdGUtZXZlbnQiOiExLHRhYmluZGV4OmUubXVsdGlwbGUmJmUuZmlsdGVyYWJsZT8iLTEiOm51bGx9LG9uOntmb2N1czplLmhhbmRsZUZvY3VzLGJsdXI6ZS5oYW5kbGVCbHVyfSxuYXRpdmVPbjp7a2V5dXA6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVib3VuY2VkT25JbnB1dENoYW5nZSh0KX0sa2V5ZG93bjpbZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZG93biIsNDAsdC5rZXksWyJEb3duIiwiQXJyb3dEb3duIl0pKXJldHVybiBudWxsO3Quc3RvcFByb3BhZ2F0aW9uKCksdC5wcmV2ZW50RGVmYXVsdCgpLGUubmF2aWdhdGVPcHRpb25zKCJuZXh0Iil9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInVwIiwzOCx0LmtleSxbIlVwIiwiQXJyb3dVcCJdKSlyZXR1cm4gbnVsbDt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSxlLm5hdmlnYXRlT3B0aW9ucygicHJldiIpfSxmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMsdC5rZXksIkVudGVyIik/bnVsbDoodC5wcmV2ZW50RGVmYXVsdCgpLGUuc2VsZWN0T3B0aW9uKHQpKX0sZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZXNjIiwyNyx0LmtleSxbIkVzYyIsIkVzY2FwZSJdKSlyZXR1cm4gbnVsbDt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSxlLnZpc2libGU9ITF9LGZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsInRhYiIsOSx0LmtleSwiVGFiIikpcmV0dXJuIG51bGw7ZS52aXNpYmxlPSExfV0scGFzdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVib3VuY2VkT25JbnB1dENoYW5nZSh0KX0sbW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmlucHV0SG92ZXJpbmc9ITB9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZS5pbnB1dEhvdmVyaW5nPSExfX0sbW9kZWw6e3ZhbHVlOmUuc2VsZWN0ZWRMYWJlbCxjYWxsYmFjazpmdW5jdGlvbih0KXtlLnNlbGVjdGVkTGFiZWw9dH0sZXhwcmVzc2lvbjoic2VsZWN0ZWRMYWJlbCJ9fSxbZS4kc2xvdHMucHJlZml4P24oInRlbXBsYXRlIix7c2xvdDoicHJlZml4In0sW2UuX3QoInByZWZpeCIpXSwyKTplLl9lKCksbigidGVtcGxhdGUiLHtzbG90OiJzdWZmaXgifSxbbigiaSIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiFlLnNob3dDbG9zZSxleHByZXNzaW9uOiIhc2hvd0Nsb3NlIn1dLGNsYXNzOlsiZWwtc2VsZWN0X19jYXJldCIsImVsLWlucHV0X19pY29uIiwiZWwtaWNvbi0iK2UuaWNvbkNsYXNzXX0pLGUuc2hvd0Nsb3NlP24oImkiLHtzdGF0aWNDbGFzczoiZWwtc2VsZWN0X19jYXJldCBlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZSIsb246e2NsaWNrOmUuaGFuZGxlQ2xlYXJDbGlja319KTplLl9lKCldKV0sMiksbigidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYmVmb3JlLWVudGVyIjplLmhhbmRsZU1lbnVFbnRlciwiYWZ0ZXItbGVhdmUiOmUuZG9EZXN0cm95fX0sW24oImVsLXNlbGVjdC1tZW51Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlJiYhMSE9PWUuZW1wdHlUZXh0LGV4cHJlc3Npb246InZpc2libGUgJiYgZW1wdHlUZXh0ICE9PSBmYWxzZSJ9XSxyZWY6InBvcHBlciIsYXR0cnM6eyJhcHBlbmQtdG8tYm9keSI6ZS5wb3BwZXJBcHBlbmRUb0JvZHl9fSxbbigiZWwtc2Nyb2xsYmFyIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5vcHRpb25zLmxlbmd0aD4wJiYhZS5sb2FkaW5nLGV4cHJlc3Npb246Im9wdGlvbnMubGVuZ3RoID4gMCAmJiAhbG9hZGluZyJ9XSxyZWY6InNjcm9sbGJhciIsY2xhc3M6eyJpcy1lbXB0eSI6IWUuYWxsb3dDcmVhdGUmJmUucXVlcnkmJjA9PT1lLmZpbHRlcmVkT3B0aW9uc0NvdW50fSxhdHRyczp7dGFnOiJ1bCIsIndyYXAtY2xhc3MiOiJlbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAiLCJ2aWV3LWNsYXNzIjoiZWwtc2VsZWN0LWRyb3Bkb3duX19saXN0In19LFtlLnNob3dOZXdPcHRpb24/bigiZWwtb3B0aW9uIix7YXR0cnM6e3ZhbHVlOmUucXVlcnksY3JlYXRlZDoiIn19KTplLl9lKCksZS5fdCgiZGVmYXVsdCIpXSwyKSxlLmVtcHR5VGV4dCYmKCFlLmFsbG93Q3JlYXRlfHxlLmxvYWRpbmd8fGUuYWxsb3dDcmVhdGUmJjA9PT1lLm9wdGlvbnMubGVuZ3RoKT9bZS4kc2xvdHMuZW1wdHk/ZS5fdCgiZW1wdHkiKTpuKCJwIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHkifSxbZS5fdigiXG4gICAgICAgICAgIitlLl9zKGUuZW1wdHlUZXh0KSsiXG4gICAgICAgICIpXSldOmUuX2UoKV0sMildLDEpXSwxKX0sem49W107JG4uX3dpdGhTdHJpcHBlZD0hMDt2YXIgQm49ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZHJvcGRvd24gZWwtcG9wcGVyIixjbGFzczpbeyJpcy1tdWx0aXBsZSI6ZS4kcGFyZW50Lm11bHRpcGxlfSxlLnBvcHBlckNsYXNzXSxzdHlsZTp7bWluV2lkdGg6ZS5taW5XaWR0aH19LFtlLl90KCJkZWZhdWx0IildLDIpfSxGbj1bXTtCbi5fd2l0aFN0cmlwcGVkPSEwO3ZhciBWbj17bmFtZToiRWxTZWxlY3REcm9wZG93biIsY29tcG9uZW50TmFtZToiRWxTZWxlY3REcm9wZG93biIsbWl4aW5zOltILmFdLHByb3BzOntwbGFjZW1lbnQ6e2RlZmF1bHQ6ImJvdHRvbS1zdGFydCJ9LGJvdW5kYXJpZXNQYWRkaW5nOntkZWZhdWx0OjB9LHBvcHBlck9wdGlvbnM6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57Z3B1QWNjZWxlcmF0aW9uOiExfX19LHZpc2libGVBcnJvdzp7ZGVmYXVsdDohMH0sYXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bWluV2lkdGg6IiJ9fSxjb21wdXRlZDp7cG9wcGVyQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LnBvcHBlckNsYXNzfX0sd2F0Y2g6eyIkcGFyZW50LmlucHV0V2lkdGgiOmZ1bmN0aW9uKCl7dGhpcy5taW5XaWR0aD10aGlzLiRwYXJlbnQuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKyJweCJ9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRwYXJlbnQuJHJlZnMucmVmZXJlbmNlLiRlbCx0aGlzLiRwYXJlbnQucG9wcGVyRWxtPXRoaXMucG9wcGVyRWxtPXRoaXMuJGVsLHRoaXMuJG9uKCJ1cGRhdGVQb3BwZXIiLChmdW5jdGlvbigpe2UuJHBhcmVudC52aXNpYmxlJiZlLnVwZGF0ZVBvcHBlcigpfSkpLHRoaXMuJG9uKCJkZXN0cm95UG9wcGVyIix0aGlzLmRlc3Ryb3lQb3BwZXIpfX0sam49Vm4sSG49cyhqbixCbixGbiwhMSxudWxsLG51bGwsbnVsbCk7SG4ub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZSI7dmFyIFduPUhuLmV4cG9ydHMsR249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImxpIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXNlbGVjdC1kcm9wZG93bl9faXRlbSIsY2xhc3M6e3NlbGVjdGVkOmUuaXRlbVNlbGVjdGVkLCJpcy1kaXNhYmxlZCI6ZS5kaXNhYmxlZHx8ZS5ncm91cERpc2FibGVkfHxlLmxpbWl0UmVhY2hlZCxob3ZlcjplLmhvdmVyfSxvbjp7bW91c2VlbnRlcjplLmhvdmVySXRlbSxjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKSxlLnNlbGVjdE9wdGlvbkNsaWNrKHQpfX19LFtlLl90KCJkZWZhdWx0Iixbbigic3BhbiIsW2UuX3YoZS5fcyhlLmN1cnJlbnRMYWJlbCkpXSldKV0sMil9LFVuPVtdO0duLl93aXRoU3RyaXBwZWQ9ITA7dmFyIHFuPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxZbj17bWl4aW5zOltFLmFdLG5hbWU6IkVsT3B0aW9uIixjb21wb25lbnROYW1lOiJFbE9wdGlvbiIsaW5qZWN0Olsic2VsZWN0Il0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sbGFiZWw6W1N0cmluZyxOdW1iZXJdLGNyZWF0ZWQ6Qm9vbGVhbixkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luZGV4Oi0xLGdyb3VwRGlzYWJsZWQ6ITEsdmlzaWJsZTohMCxoaXRTdGF0ZTohMSxob3ZlcjohMX19LGNvbXB1dGVkOntpc09iamVjdDpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IG9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMudmFsdWUpLnRvTG93ZXJDYXNlKCl9LGN1cnJlbnRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsfHwodGhpcy5pc09iamVjdD8iIjp0aGlzLnZhbHVlKX0sY3VycmVudFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV8fHRoaXMubGFiZWx8fCIifSxpdGVtU2VsZWN0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3QubXVsdGlwbGU/dGhpcy5jb250YWlucyh0aGlzLnNlbGVjdC52YWx1ZSx0aGlzLnZhbHVlKTp0aGlzLmlzRXF1YWwodGhpcy52YWx1ZSx0aGlzLnNlbGVjdC52YWx1ZSl9LGxpbWl0UmVhY2hlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5zZWxlY3QubXVsdGlwbGUmJighdGhpcy5pdGVtU2VsZWN0ZWQmJih0aGlzLnNlbGVjdC52YWx1ZXx8W10pLmxlbmd0aD49dGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdCYmdGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdD4wKX19LHdhdGNoOntjdXJyZW50TGFiZWw6ZnVuY3Rpb24oKXt0aGlzLmNyZWF0ZWR8fHRoaXMuc2VsZWN0LnJlbW90ZXx8dGhpcy5kaXNwYXRjaCgiRWxTZWxlY3QiLCJzZXRTZWxlY3RlZCIpfSx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2VsZWN0LGk9bi5yZW1vdGUscj1uLnZhbHVlS2V5O2lmKCF0aGlzLmNyZWF0ZWQmJiFpKXtpZihyJiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBlPyJ1bmRlZmluZWQiOnFuKGUpKSYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PT10eXBlb2YgdD8idW5kZWZpbmVkIjpxbih0KSkmJmVbcl09PT10W3JdKXJldHVybjt0aGlzLmRpc3BhdGNoKCJFbFNlbGVjdCIsInNldFNlbGVjdGVkIil9fX0sbWV0aG9kczp7aXNFcXVhbDpmdW5jdGlvbihlLHQpe2lmKHRoaXMuaXNPYmplY3Qpe3ZhciBuPXRoaXMuc2VsZWN0LnZhbHVlS2V5O3JldHVybiBPYmplY3QoeVsiZ2V0VmFsdWVCeVBhdGgiXSkoZSxuKT09PU9iamVjdCh5WyJnZXRWYWx1ZUJ5UGF0aCJdKSh0LG4pfXJldHVybiBlPT09dH0sY29udGFpbnM6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV07aWYodGhpcy5pc09iamVjdCl7dmFyIG49dGhpcy5zZWxlY3QudmFsdWVLZXk7cmV0dXJuIGUmJmUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdCh5WyJnZXRWYWx1ZUJ5UGF0aCJdKShlLG4pPT09T2JqZWN0KHlbImdldFZhbHVlQnlQYXRoIl0pKHQsbil9KSl9cmV0dXJuIGUmJmUuaW5kZXhPZih0KT4tMX0saGFuZGxlR3JvdXBEaXNhYmxlZDpmdW5jdGlvbihlKXt0aGlzLmdyb3VwRGlzYWJsZWQ9ZX0saG92ZXJJdGVtOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5ncm91cERpc2FibGVkfHwodGhpcy5zZWxlY3QuaG92ZXJJbmRleD10aGlzLnNlbGVjdC5vcHRpb25zLmluZGV4T2YodGhpcykpfSxzZWxlY3RPcHRpb25DbGljazpmdW5jdGlvbigpeyEwIT09dGhpcy5kaXNhYmxlZCYmITAhPT10aGlzLmdyb3VwRGlzYWJsZWQmJnRoaXMuZGlzcGF0Y2goIkVsU2VsZWN0IiwiaGFuZGxlT3B0aW9uQ2xpY2siLFt0aGlzLCEwXSl9LHF1ZXJ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMudmlzaWJsZT1uZXcgUmVnRXhwKE9iamVjdCh5WyJlc2NhcGVSZWdleHBTdHJpbmciXSkoZSksImkiKS50ZXN0KHRoaXMuY3VycmVudExhYmVsKXx8dGhpcy5jcmVhdGVkLHRoaXMudmlzaWJsZXx8dGhpcy5zZWxlY3QuZmlsdGVyZWRPcHRpb25zQ291bnQtLX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdC5vcHRpb25zLnB1c2godGhpcyksdGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5wdXNoKHRoaXMpLHRoaXMuc2VsZWN0Lm9wdGlvbnNDb3VudCsrLHRoaXMuc2VsZWN0LmZpbHRlcmVkT3B0aW9uc0NvdW50KyssdGhpcy4kb24oInF1ZXJ5Q2hhbmdlIix0aGlzLnF1ZXJ5Q2hhbmdlKSx0aGlzLiRvbigiaGFuZGxlR3JvdXBEaXNhYmxlZCIsdGhpcy5oYW5kbGVHcm91cERpc2FibGVkKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2VsZWN0LHQ9ZS5zZWxlY3RlZCxuPWUubXVsdGlwbGUsaT1uP3Q6W3RdLHI9dGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5pbmRleE9mKHRoaXMpLG89aS5pbmRleE9mKHRoaXMpO3I+LTEmJm88MCYmdGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5zcGxpY2UociwxKSx0aGlzLnNlbGVjdC5vbk9wdGlvbkRlc3Ryb3kodGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpKX19LFhuPVluLEtuPXMoWG4sR24sVW4sITEsbnVsbCxudWxsLG51bGwpO0tuLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWUiO3ZhciBabj1Lbi5leHBvcnRzLEpuPW4oMjkpLFFuPW4ubihKbiksZWk9bigxNCksdGk9bigyNyksbmk9bi5uKHRpKSxpaT17ZGF0YTpmdW5jdGlvbigpe3JldHVybntob3Zlck9wdGlvbjotMX19LGNvbXB1dGVkOntvcHRpb25zQWxsRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmlzaWJsZX0pKS5ldmVyeSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWR9KSl9fSx3YXRjaDp7aG92ZXJJbmRleDpmdW5jdGlvbihlKXt2YXIgdD10aGlzOyJudW1iZXIiPT09dHlwZW9mIGUmJmU+LTEmJih0aGlzLmhvdmVyT3B0aW9uPXRoaXMub3B0aW9uc1tlXXx8e30pLHRoaXMub3B0aW9ucy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmhvdmVyPXQuaG92ZXJPcHRpb249PT1lfSkpfX0sbWV0aG9kczp7bmF2aWdhdGVPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy52aXNpYmxlKXtpZigwIT09dGhpcy5vcHRpb25zLmxlbmd0aCYmMCE9PXRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQmJiF0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCl7Im5leHQiPT09ZT8odGhpcy5ob3ZlckluZGV4KyssdGhpcy5ob3ZlckluZGV4PT09dGhpcy5vcHRpb25zLmxlbmd0aCYmKHRoaXMuaG92ZXJJbmRleD0wKSk6InByZXYiPT09ZSYmKHRoaXMuaG92ZXJJbmRleC0tLHRoaXMuaG92ZXJJbmRleDwwJiYodGhpcy5ob3ZlckluZGV4PXRoaXMub3B0aW9ucy5sZW5ndGgtMSkpO3ZhciBuPXRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdOyEwIT09bi5kaXNhYmxlZCYmITAhPT1uLmdyb3VwRGlzYWJsZWQmJm4udmlzaWJsZXx8dGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZSksdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsVG9PcHRpb24odC5ob3Zlck9wdGlvbil9KSl9fWVsc2UgdGhpcy52aXNpYmxlPSEwfX19LHJpPXttaXhpbnM6W0UuYSx2LmEsWigpKCJyZWZlcmVuY2UiKSxpaV0sbmFtZToiRWxTZWxlY3QiLGNvbXBvbmVudE5hbWU6IkVsU2VsZWN0IixpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDoiIn0sZWxGb3JtSXRlbTp7ZGVmYXVsdDoiIn19LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57c2VsZWN0OnRoaXN9fSxjb21wdXRlZDp7X2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplfSxyZWFkb25seTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmZpbHRlcmFibGV8fHRoaXMubXVsdGlwbGV8fCFPYmplY3QoeVsiaXNJRSJdKSgpJiYhT2JqZWN0KHlbImlzRWRnZSJdKSgpJiYhdGhpcy52aXNpYmxlfSxzaG93Q2xvc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm11bHRpcGxlP0FycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUubGVuZ3RoPjA6dm9pZCAwIT09dGhpcy52YWx1ZSYmbnVsbCE9PXRoaXMudmFsdWUmJiIiIT09dGhpcy52YWx1ZSx0PXRoaXMuY2xlYXJhYmxlJiYhdGhpcy5zZWxlY3REaXNhYmxlZCYmdGhpcy5pbnB1dEhvdmVyaW5nJiZlO3JldHVybiB0fSxpY29uQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW1vdGUmJnRoaXMuZmlsdGVyYWJsZT8iIjp0aGlzLnZpc2libGU/ImFycm93LXVwIGlzLXJldmVyc2UiOiJhcnJvdy11cCJ9LGRlYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVtb3RlPzMwMDowfSxlbXB0eVRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2FkaW5nP3RoaXMubG9hZGluZ1RleHR8fHRoaXMudCgiZWwuc2VsZWN0LmxvYWRpbmciKTooIXRoaXMucmVtb3RlfHwiIiE9PXRoaXMucXVlcnl8fDAhPT10aGlzLm9wdGlvbnMubGVuZ3RoKSYmKHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5xdWVyeSYmdGhpcy5vcHRpb25zLmxlbmd0aD4wJiYwPT09dGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudD90aGlzLm5vTWF0Y2hUZXh0fHx0aGlzLnQoImVsLnNlbGVjdC5ub01hdGNoIik6MD09PXRoaXMub3B0aW9ucy5sZW5ndGg/dGhpcy5ub0RhdGFUZXh0fHx0aGlzLnQoImVsLnNlbGVjdC5ub0RhdGEiKTpudWxsKX0sc2hvd05ld09wdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLm9wdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hZS5jcmVhdGVkfSkpLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmN1cnJlbnRMYWJlbD09PWUucXVlcnl9KSk7cmV0dXJuIHRoaXMuZmlsdGVyYWJsZSYmdGhpcy5hbGxvd0NyZWF0ZSYmIiIhPT10aGlzLnF1ZXJ5JiYhdH0sc2VsZWN0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemV9LHNlbGVjdERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfSxjb2xsYXBzZVRhZ1NpemU6ZnVuY3Rpb24oKXtyZXR1cm5bInNtYWxsIiwibWluaSJdLmluZGV4T2YodGhpcy5zZWxlY3RTaXplKT4tMT8ibWluaSI6InNtYWxsIn0scHJvcFBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPT10eXBlb2YgdGhpcy5wbGFjZWhvbGRlcj90aGlzLnBsYWNlaG9sZGVyOnRoaXMudCgiZWwuc2VsZWN0LnBsYWNlaG9sZGVyIil9fSxjb21wb25lbnRzOntFbElucHV0Om0uYSxFbFNlbGVjdE1lbnU6V24sRWxPcHRpb246Wm4sRWxUYWc6UW4uYSxFbFNjcm9sbGJhcjpHLmF9LGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpCLmF9LHByb3BzOntuYW1lOlN0cmluZyxpZDpTdHJpbmcsdmFsdWU6e3JlcXVpcmVkOiEwfSxhdXRvY29tcGxldGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Im9mZiJ9LGF1dG9Db21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0sYXV0b21hdGljRHJvcGRvd246Qm9vbGVhbixzaXplOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLGNsZWFyYWJsZTpCb29sZWFuLGZpbHRlcmFibGU6Qm9vbGVhbixhbGxvd0NyZWF0ZTpCb29sZWFuLGxvYWRpbmc6Qm9vbGVhbixwb3BwZXJDbGFzczpTdHJpbmcscmVtb3RlOkJvb2xlYW4sbG9hZGluZ1RleHQ6U3RyaW5nLG5vTWF0Y2hUZXh0OlN0cmluZyxub0RhdGFUZXh0OlN0cmluZyxyZW1vdGVNZXRob2Q6RnVuY3Rpb24sZmlsdGVyTWV0aG9kOkZ1bmN0aW9uLG11bHRpcGxlOkJvb2xlYW4sbXVsdGlwbGVMaW1pdDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITF9LGRlZmF1bHRGaXJzdE9wdGlvbjpCb29sZWFuLHJlc2VydmVLZXl3b3JkOkJvb2xlYW4sdmFsdWVLZXk6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InZhbHVlIn0sY29sbGFwc2VUYWdzOkJvb2xlYW4scG9wcGVyQXBwZW5kVG9Cb2R5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57b3B0aW9uczpbXSxjYWNoZWRPcHRpb25zOltdLGNyZWF0ZWRMYWJlbDpudWxsLGNyZWF0ZWRTZWxlY3RlZDohMSxzZWxlY3RlZDp0aGlzLm11bHRpcGxlP1tdOnt9LGlucHV0TGVuZ3RoOjIwLGlucHV0V2lkdGg6MCxpbml0aWFsSW5wdXRIZWlnaHQ6MCxjYWNoZWRQbGFjZUhvbGRlcjoiIixvcHRpb25zQ291bnQ6MCxmaWx0ZXJlZE9wdGlvbnNDb3VudDowLHZpc2libGU6ITEsc29mdEZvY3VzOiExLHNlbGVjdGVkTGFiZWw6IiIsaG92ZXJJbmRleDotMSxxdWVyeToiIixwcmV2aW91c1F1ZXJ5Om51bGwsaW5wdXRIb3ZlcmluZzohMSxjdXJyZW50UGxhY2Vob2xkZXI6IiIsbWVudVZpc2libGVPbkZvY3VzOiExLGlzT25Db21wb3NpdGlvbjohMSxpc1NpbGVudEJsdXI6ITF9fSx3YXRjaDp7c2VsZWN0RGlzYWJsZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe2UucmVzZXRJbnB1dEhlaWdodCgpfSkpfSxwcm9wUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZWRQbGFjZUhvbGRlcj10aGlzLmN1cnJlbnRQbGFjZWhvbGRlcj1lfSx2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMubXVsdGlwbGUmJih0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKSxlJiZlLmxlbmd0aD4wfHx0aGlzLiRyZWZzLmlucHV0JiYiIiE9PXRoaXMucXVlcnk/dGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9IiI6dGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9dGhpcy5jYWNoZWRQbGFjZUhvbGRlcix0aGlzLmZpbHRlcmFibGUmJiF0aGlzLnJlc2VydmVLZXl3b3JkJiYodGhpcy5xdWVyeT0iIix0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKHRoaXMucXVlcnkpKSksdGhpcy5zZXRTZWxlY3RlZCgpLHRoaXMuZmlsdGVyYWJsZSYmIXRoaXMubXVsdGlwbGUmJih0aGlzLmlucHV0TGVuZ3RoPTIwKSxPYmplY3QoeVsidmFsdWVFcXVhbHMiXSkoZSx0KXx8dGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixlKX0sdmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2U/KHRoaXMuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwidXBkYXRlUG9wcGVyIiksdGhpcy5maWx0ZXJhYmxlJiYodGhpcy5xdWVyeT10aGlzLnJlbW90ZT8iIjp0aGlzLnNlbGVjdGVkTGFiZWwsdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KSx0aGlzLm11bHRpcGxlP3RoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKToodGhpcy5yZW1vdGV8fCh0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb24iLCJxdWVyeUNoYW5nZSIsIiIpLHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbkdyb3VwIiwicXVlcnlDaGFuZ2UiKSksdGhpcy5zZWxlY3RlZExhYmVsJiYodGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9dGhpcy5zZWxlY3RlZExhYmVsLHRoaXMuc2VsZWN0ZWRMYWJlbD0iIikpKSk6KHRoaXMuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwiZGVzdHJveVBvcHBlciIpLHRoaXMuJHJlZnMuaW5wdXQmJnRoaXMuJHJlZnMuaW5wdXQuYmx1cigpLHRoaXMucXVlcnk9IiIsdGhpcy5wcmV2aW91c1F1ZXJ5PW51bGwsdGhpcy5zZWxlY3RlZExhYmVsPSIiLHRoaXMuaW5wdXRMZW5ndGg9MjAsdGhpcy5tZW51VmlzaWJsZU9uRm9jdXM9ITEsdGhpcy5yZXNldEhvdmVySW5kZXgoKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0LiRyZWZzLmlucHV0JiYiIj09PXQuJHJlZnMuaW5wdXQudmFsdWUmJjA9PT10LnNlbGVjdGVkLmxlbmd0aCYmKHQuY3VycmVudFBsYWNlaG9sZGVyPXQuY2FjaGVkUGxhY2VIb2xkZXIpfSkpLHRoaXMubXVsdGlwbGV8fCh0aGlzLnNlbGVjdGVkJiYodGhpcy5maWx0ZXJhYmxlJiZ0aGlzLmFsbG93Q3JlYXRlJiZ0aGlzLmNyZWF0ZWRTZWxlY3RlZCYmdGhpcy5jcmVhdGVkTGFiZWw/dGhpcy5zZWxlY3RlZExhYmVsPXRoaXMuY3JlYXRlZExhYmVsOnRoaXMuc2VsZWN0ZWRMYWJlbD10aGlzLnNlbGVjdGVkLmN1cnJlbnRMYWJlbCx0aGlzLmZpbHRlcmFibGUmJih0aGlzLnF1ZXJ5PXRoaXMuc2VsZWN0ZWRMYWJlbCkpLHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMuY2FjaGVkUGxhY2VIb2xkZXIpKSksdGhpcy4kZW1pdCgidmlzaWJsZS1jaGFuZ2UiLGUpfSxvcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighdGhpcy4kaXNTZXJ2ZXIpe3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe2UuYnJvYWRjYXN0KCJFbFNlbGVjdERyb3Bkb3duIiwidXBkYXRlUG9wcGVyIil9KSksdGhpcy5tdWx0aXBsZSYmdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7dmFyIHQ9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTstMT09PVtdLmluZGV4T2YuY2FsbCh0LGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0aGlzLnNldFNlbGVjdGVkKCksdGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24mJih0aGlzLmZpbHRlcmFibGV8fHRoaXMucmVtb3RlKSYmdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCYmdGhpcy5jaGVja0RlZmF1bHRGaXJzdE9wdGlvbigpfX19LG1ldGhvZHM6e2hhbmRsZUNvbXBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLnRhcmdldC52YWx1ZTtpZigiY29tcG9zaXRpb25lbmQiPT09ZS50eXBlKXRoaXMuaXNPbkNvbXBvc2l0aW9uPSExLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVRdWVyeUNoYW5nZShuKX0pKTtlbHNle3ZhciBpPW5bbi5sZW5ndGgtMV18fCIiO3RoaXMuaXNPbkNvbXBvc2l0aW9uPSFPYmplY3QoVHRbImlzS29yZWFuIl0pKGkpfX0saGFuZGxlUXVlcnlDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLnByZXZpb3VzUXVlcnk9PT1lfHx0aGlzLmlzT25Db21wb3NpdGlvbnx8KG51bGwhPT10aGlzLnByZXZpb3VzUXVlcnl8fCJmdW5jdGlvbiIhPT10eXBlb2YgdGhpcy5maWx0ZXJNZXRob2QmJiJmdW5jdGlvbiIhPT10eXBlb2YgdGhpcy5yZW1vdGVNZXRob2Q/KHRoaXMucHJldmlvdXNRdWVyeT1lLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3QudmlzaWJsZSYmdC5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKX0pKSx0aGlzLmhvdmVySW5kZXg9LTEsdGhpcy5tdWx0aXBsZSYmdGhpcy5maWx0ZXJhYmxlJiZ0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt2YXIgZT0xNSp0LiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCsyMDt0LmlucHV0TGVuZ3RoPXQuY29sbGFwc2VUYWdzP01hdGgubWluKDUwLGUpOmUsdC5tYW5hZ2VQbGFjZWhvbGRlcigpLHQucmVzZXRJbnB1dEhlaWdodCgpfSkpLHRoaXMucmVtb3RlJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMucmVtb3RlTWV0aG9kPyh0aGlzLmhvdmVySW5kZXg9LTEsdGhpcy5yZW1vdGVNZXRob2QoZSkpOiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5maWx0ZXJNZXRob2Q/KHRoaXMuZmlsdGVyTWV0aG9kKGUpLHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbkdyb3VwIiwicXVlcnlDaGFuZ2UiKSk6KHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQ9dGhpcy5vcHRpb25zQ291bnQsdGhpcy5icm9hZGNhc3QoIkVsT3B0aW9uIiwicXVlcnlDaGFuZ2UiLGUpLHRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbkdyb3VwIiwicXVlcnlDaGFuZ2UiKSksdGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24mJih0aGlzLmZpbHRlcmFibGV8fHRoaXMucmVtb3RlKSYmdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCYmdGhpcy5jaGVja0RlZmF1bHRGaXJzdE9wdGlvbigpKTp0aGlzLnByZXZpb3VzUXVlcnk9ZSl9LHNjcm9sbFRvT3B0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5LmlzQXJyYXkoZSkmJmVbMF0/ZVswXS4kZWw6ZS4kZWw7aWYodGhpcy4kcmVmcy5wb3BwZXImJnQpe3ZhciBuPXRoaXMuJHJlZnMucG9wcGVyLiRlbC5xdWVyeVNlbGVjdG9yKCIuZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwIik7bmkoKShuLHQpfXRoaXMuJHJlZnMuc2Nyb2xsYmFyJiZ0aGlzLiRyZWZzLnNjcm9sbGJhci5oYW5kbGVTY3JvbGwoKX0saGFuZGxlTWVudUVudGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gZS5zY3JvbGxUb09wdGlvbihlLnNlbGVjdGVkKX0pKX0sZW1pdENoYW5nZTpmdW5jdGlvbihlKXtPYmplY3QoeVsidmFsdWVFcXVhbHMiXSkodGhpcy52YWx1ZSxlKXx8dGhpcy4kZW1pdCgiY2hhbmdlIixlKX0sZ2V0T3B0aW9uOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD12b2lkIDAsbj0iW29iamVjdCBvYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS50b0xvd2VyQ2FzZSgpLGk9IltvYmplY3QgbnVsbF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpLnRvTG93ZXJDYXNlKCkscj0iW29iamVjdCB1bmRlZmluZWRdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKS50b0xvd2VyQ2FzZSgpLG89dGhpcy5jYWNoZWRPcHRpb25zLmxlbmd0aC0xO28+PTA7by0tKXt2YXIgYT10aGlzLmNhY2hlZE9wdGlvbnNbb10scz1uP09iamVjdCh5WyJnZXRWYWx1ZUJ5UGF0aCJdKShhLnZhbHVlLHRoaXMudmFsdWVLZXkpPT09T2JqZWN0KHlbImdldFZhbHVlQnlQYXRoIl0pKGUsdGhpcy52YWx1ZUtleSk6YS52YWx1ZT09PWU7aWYocyl7dD1hO2JyZWFrfX1pZih0KXJldHVybiB0O3ZhciBsPW58fGl8fHI/IiI6U3RyaW5nKGUpLGM9e3ZhbHVlOmUsY3VycmVudExhYmVsOmx9O3JldHVybiB0aGlzLm11bHRpcGxlJiYoYy5oaXRTdGF0ZT0hMSksY30sc2V0U2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKCF0aGlzLm11bHRpcGxlKXt2YXIgdD10aGlzLmdldE9wdGlvbih0aGlzLnZhbHVlKTtyZXR1cm4gdC5jcmVhdGVkPyh0aGlzLmNyZWF0ZWRMYWJlbD10LmN1cnJlbnRMYWJlbCx0aGlzLmNyZWF0ZWRTZWxlY3RlZD0hMCk6dGhpcy5jcmVhdGVkU2VsZWN0ZWQ9ITEsdGhpcy5zZWxlY3RlZExhYmVsPXQuY3VycmVudExhYmVsLHRoaXMuc2VsZWN0ZWQ9dCx2b2lkKHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMucXVlcnk9dGhpcy5zZWxlY3RlZExhYmVsKSl9dmFyIG49W107QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtuLnB1c2goZS5nZXRPcHRpb24odCkpfSkpLHRoaXMuc2VsZWN0ZWQ9bix0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtlLnJlc2V0SW5wdXRIZWlnaHQoKX0pKX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24oZSl7dGhpcy5zb2Z0Rm9jdXM/dGhpcy5zb2Z0Rm9jdXM9ITE6KCh0aGlzLmF1dG9tYXRpY0Ryb3Bkb3dufHx0aGlzLmZpbHRlcmFibGUpJiYodGhpcy52aXNpYmxlPSEwLHRoaXMuZmlsdGVyYWJsZSYmKHRoaXMubWVudVZpc2libGVPbkZvY3VzPSEwKSksdGhpcy4kZW1pdCgiZm9jdXMiLGUpKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMudmlzaWJsZT0hMSx0aGlzLiRyZWZzLnJlZmVyZW5jZS5ibHVyKCl9LGhhbmRsZUJsdXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuaXNTaWxlbnRCbHVyP3QuaXNTaWxlbnRCbHVyPSExOnQuJGVtaXQoImJsdXIiLGUpfSksNTApLHRoaXMuc29mdEZvY3VzPSExfSxoYW5kbGVDbGVhckNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuZGVsZXRlU2VsZWN0ZWQoZSl9LGRvRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuJHJlZnMucG9wcGVyJiZ0aGlzLiRyZWZzLnBvcHBlci5kb0Rlc3Ryb3koKX0saGFuZGxlQ2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU9ITF9LHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZTpmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKXt2YXIgdD10aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoLTFdO2lmKHQpcmV0dXJuITA9PT1lfHwhMT09PWU/KHQuaGl0U3RhdGU9ZSxlKToodC5oaXRTdGF0ZT0hdC5oaXRTdGF0ZSx0LmhpdFN0YXRlKX19LGRlbGV0ZVByZXZUYWc6ZnVuY3Rpb24oZSl7aWYoZS50YXJnZXQudmFsdWUubGVuZ3RoPD0wJiYhdGhpcy50b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoKSl7dmFyIHQ9dGhpcy52YWx1ZS5zbGljZSgpO3QucG9wKCksdGhpcy4kZW1pdCgiaW5wdXQiLHQpLHRoaXMuZW1pdENoYW5nZSh0KX19LG1hbmFnZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKCl7IiIhPT10aGlzLmN1cnJlbnRQbGFjZWhvbGRlciYmKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMuJHJlZnMuaW5wdXQudmFsdWU/IiI6dGhpcy5jYWNoZWRQbGFjZUhvbGRlcil9LHJlc2V0SW5wdXRTdGF0ZTpmdW5jdGlvbihlKXs4IT09ZS5rZXlDb2RlJiZ0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSghMSksdGhpcy5pbnB1dExlbmd0aD0xNSp0aGlzLiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCsyMCx0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKX0scmVzZXRJbnB1dEhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5jb2xsYXBzZVRhZ3MmJiF0aGlzLmZpbHRlcmFibGV8fHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe2lmKGUuJHJlZnMucmVmZXJlbmNlKXt2YXIgdD1lLiRyZWZzLnJlZmVyZW5jZS4kZWwuY2hpbGROb2RlcyxuPVtdLmZpbHRlci5jYWxsKHQsKGZ1bmN0aW9uKGUpe3JldHVybiJJTlBVVCI9PT1lLnRhZ05hbWV9KSlbMF0saT1lLiRyZWZzLnRhZ3Mscj1lLmluaXRpYWxJbnB1dEhlaWdodHx8NDA7bi5zdHlsZS5oZWlnaHQ9MD09PWUuc2VsZWN0ZWQubGVuZ3RoP3IrInB4IjpNYXRoLm1heChpP2kuY2xpZW50SGVpZ2h0KyhpLmNsaWVudEhlaWdodD5yPzY6MCk6MCxyKSsicHgiLGUudmlzaWJsZSYmITEhPT1lLmVtcHR5VGV4dCYmZS5icm9hZGNhc3QoIkVsU2VsZWN0RHJvcGRvd24iLCJ1cGRhdGVQb3BwZXIiKX19KSl9LHJlc2V0SG92ZXJJbmRleDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLm11bHRpcGxlP2Uuc2VsZWN0ZWQubGVuZ3RoPjA/ZS5ob3ZlckluZGV4PU1hdGgubWluLmFwcGx5KG51bGwsZS5zZWxlY3RlZC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLm9wdGlvbnMuaW5kZXhPZih0KX0pKSk6ZS5ob3ZlckluZGV4PS0xOmUuaG92ZXJJbmRleD1lLm9wdGlvbnMuaW5kZXhPZihlLnNlbGVjdGVkKX0pLDMwMCl9LGhhbmRsZU9wdGlvblNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5tdWx0aXBsZSl7dmFyIGk9KHRoaXMudmFsdWV8fFtdKS5zbGljZSgpLHI9dGhpcy5nZXRWYWx1ZUluZGV4KGksZS52YWx1ZSk7cj4tMT9pLnNwbGljZShyLDEpOih0aGlzLm11bHRpcGxlTGltaXQ8PTB8fGkubGVuZ3RoPHRoaXMubXVsdGlwbGVMaW1pdCkmJmkucHVzaChlLnZhbHVlKSx0aGlzLiRlbWl0KCJpbnB1dCIsaSksdGhpcy5lbWl0Q2hhbmdlKGkpLGUuY3JlYXRlZCYmKHRoaXMucXVlcnk9IiIsdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSgiIiksdGhpcy5pbnB1dExlbmd0aD0yMCksdGhpcy5maWx0ZXJhYmxlJiZ0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCl9ZWxzZSB0aGlzLiRlbWl0KCJpbnB1dCIsZS52YWx1ZSksdGhpcy5lbWl0Q2hhbmdlKGUudmFsdWUpLHRoaXMudmlzaWJsZT0hMTt0aGlzLmlzU2lsZW50Qmx1cj10LHRoaXMuc2V0U29mdEZvY3VzKCksdGhpcy52aXNpYmxlfHx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtuLnNjcm9sbFRvT3B0aW9uKGUpfSkpfSxzZXRTb2Z0Rm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNvZnRGb2N1cz0hMDt2YXIgZT10aGlzLiRyZWZzLmlucHV0fHx0aGlzLiRyZWZzLnJlZmVyZW5jZTtlJiZlLmZvY3VzKCl9LGdldFZhbHVlSW5kZXg6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1hcmd1bWVudHNbMV0sbj0iW29iamVjdCBvYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS50b0xvd2VyQ2FzZSgpO2lmKG4pe3ZhciBpPXRoaXMudmFsdWVLZXkscj0tMTtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlLG4pe3JldHVybiBPYmplY3QoeVsiZ2V0VmFsdWVCeVBhdGgiXSkoZSxpKT09PU9iamVjdCh5WyJnZXRWYWx1ZUJ5UGF0aCJdKSh0LGkpJiYocj1uLCEwKX0pKSxyfXJldHVybiBlLmluZGV4T2YodCl9LHRvZ2dsZU1lbnU6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdERpc2FibGVkfHwodGhpcy5tZW51VmlzaWJsZU9uRm9jdXM/dGhpcy5tZW51VmlzaWJsZU9uRm9jdXM9ITE6dGhpcy52aXNpYmxlPSF0aGlzLnZpc2libGUsdGhpcy52aXNpYmxlJiYodGhpcy4kcmVmcy5pbnB1dHx8dGhpcy4kcmVmcy5yZWZlcmVuY2UpLmZvY3VzKCkpfSxzZWxlY3RPcHRpb246ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU/dGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0mJnRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKTp0aGlzLnRvZ2dsZU1lbnUoKX0sZGVsZXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgdD10aGlzLm11bHRpcGxlP1tdOiIiO3RoaXMuJGVtaXQoImlucHV0Iix0KSx0aGlzLmVtaXRDaGFuZ2UodCksdGhpcy52aXNpYmxlPSExLHRoaXMuJGVtaXQoImNsZWFyIil9LGRlbGV0ZVRhZzpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuc2VsZWN0ZWQuaW5kZXhPZih0KTtpZihuPi0xJiYhdGhpcy5zZWxlY3REaXNhYmxlZCl7dmFyIGk9dGhpcy52YWx1ZS5zbGljZSgpO2kuc3BsaWNlKG4sMSksdGhpcy4kZW1pdCgiaW5wdXQiLGkpLHRoaXMuZW1pdENoYW5nZShpKSx0aGlzLiRlbWl0KCJyZW1vdmUtdGFnIix0LnZhbHVlKX1lLnN0b3BQcm9wYWdhdGlvbigpfSxvbklucHV0Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5maWx0ZXJhYmxlJiZ0aGlzLnF1ZXJ5IT09dGhpcy5zZWxlY3RlZExhYmVsJiYodGhpcy5xdWVyeT10aGlzLnNlbGVjdGVkTGFiZWwsdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KSl9LG9uT3B0aW9uRGVzdHJveTpmdW5jdGlvbihlKXtlPi0xJiYodGhpcy5vcHRpb25zQ291bnQtLSx0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50LS0sdGhpcy5vcHRpb25zLnNwbGljZShlLDEpKX0scmVzZXRJbnB1dFdpZHRoOmZ1bmN0aW9uKCl7dGhpcy5pbnB1dFdpZHRoPXRoaXMuJHJlZnMucmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH0saGFuZGxlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5yZXNldElucHV0V2lkdGgoKSx0aGlzLm11bHRpcGxlJiZ0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKX0sY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb246ZnVuY3Rpb24oKXt0aGlzLmhvdmVySW5kZXg9LTE7Zm9yKHZhciBlPSExLHQ9dGhpcy5vcHRpb25zLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMub3B0aW9uc1t0XS5jcmVhdGVkKXtlPSEwLHRoaXMuaG92ZXJJbmRleD10O2JyZWFrfWlmKCFlKWZvcih2YXIgbj0wO24hPT10aGlzLm9wdGlvbnMubGVuZ3RoOysrbil7dmFyIGk9dGhpcy5vcHRpb25zW25dO2lmKHRoaXMucXVlcnkpe2lmKCFpLmRpc2FibGVkJiYhaS5ncm91cERpc2FibGVkJiZpLnZpc2libGUpe3RoaXMuaG92ZXJJbmRleD1uO2JyZWFrfX1lbHNlIGlmKGkuaXRlbVNlbGVjdGVkKXt0aGlzLmhvdmVySW5kZXg9bjticmVha319fSxnZXRWYWx1ZUtleTpmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBvYmplY3RdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlLnZhbHVlKS50b0xvd2VyQ2FzZSgpP2UudmFsdWU6T2JqZWN0KHlbImdldFZhbHVlQnlQYXRoIl0pKGUudmFsdWUsdGhpcy52YWx1ZUtleSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmNhY2hlZFBsYWNlSG9sZGVyPXRoaXMuY3VycmVudFBsYWNlaG9sZGVyPXRoaXMucHJvcFBsYWNlaG9sZGVyLHRoaXMubXVsdGlwbGUmJiFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLiRlbWl0KCJpbnB1dCIsW10pLCF0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLiRlbWl0KCJpbnB1dCIsIiIpLHRoaXMuZGVib3VuY2VkT25JbnB1dENoYW5nZT0kKCkodGhpcy5kZWJvdW5jZSwoZnVuY3Rpb24oKXtlLm9uSW5wdXRDaGFuZ2UoKX0pKSx0aGlzLmRlYm91bmNlZFF1ZXJ5Q2hhbmdlPSQoKSh0aGlzLmRlYm91bmNlLChmdW5jdGlvbih0KXtlLmhhbmRsZVF1ZXJ5Q2hhbmdlKHQudGFyZ2V0LnZhbHVlKX0pKSx0aGlzLiRvbigiaGFuZGxlT3B0aW9uQ2xpY2siLHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KSx0aGlzLiRvbigic2V0U2VsZWN0ZWQiLHRoaXMuc2V0U2VsZWN0ZWQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmxlbmd0aD4wJiYodGhpcy5jdXJyZW50UGxhY2Vob2xkZXI9IiIpLE9iamVjdChlaVsiYWRkUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kZWwsdGhpcy5oYW5kbGVSZXNpemUpO3ZhciB0PXRoaXMuJHJlZnMucmVmZXJlbmNlO2lmKHQmJnQuJGVsKXt2YXIgbj17bWVkaXVtOjM2LHNtYWxsOjMyLG1pbmk6Mjh9LGk9dC4kZWwucXVlcnlTZWxlY3RvcigiaW5wdXQiKTt0aGlzLmluaXRpYWxJbnB1dEhlaWdodD1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodHx8blt0aGlzLnNlbGVjdFNpemVdfXRoaXMucmVtb3RlJiZ0aGlzLm11bHRpcGxlJiZ0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0JiZ0LiRlbCYmKGUuaW5wdXRXaWR0aD10LiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCl9KSksdGhpcy5zZXRTZWxlY3RlZCgpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kZWwmJnRoaXMuaGFuZGxlUmVzaXplJiZPYmplY3QoZWlbInJlbW92ZVJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJGVsLHRoaXMuaGFuZGxlUmVzaXplKX19LG9pPXJpLGFpPXMob2ksJG4sem4sITEsbnVsbCxudWxsLG51bGwpO2FpLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWUiO3ZhciBzaT1haS5leHBvcnRzO3NpLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoc2kubmFtZSxzaSl9O3ZhciBsaT1zaTtabi5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KFpuLm5hbWUsWm4pfTt2YXIgY2k9Wm4sdWk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInVsIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXNlbGVjdC1ncm91cF9fd3JhcCJ9LFtuKCJsaSIse3N0YXRpY0NsYXNzOiJlbC1zZWxlY3QtZ3JvdXBfX3RpdGxlIn0sW2UuX3YoZS5fcyhlLmxhYmVsKSldKSxuKCJsaSIsW24oInVsIix7c3RhdGljQ2xhc3M6ImVsLXNlbGVjdC1ncm91cCJ9LFtlLl90KCJkZWZhdWx0IildLDIpXSldKX0saGk9W107dWkuX3dpdGhTdHJpcHBlZD0hMDt2YXIgZGk9e21peGluczpbRS5hXSxuYW1lOiJFbE9wdGlvbkdyb3VwIixjb21wb25lbnROYW1lOiJFbE9wdGlvbkdyb3VwIixwcm9wczp7bGFiZWw6U3RyaW5nLGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlzaWJsZTohMH19LHdhdGNoOntkaXNhYmxlZDpmdW5jdGlvbihlKXt0aGlzLmJyb2FkY2FzdCgiRWxPcHRpb24iLCJoYW5kbGVHcm91cERpc2FibGVkIixlKX19LG1ldGhvZHM6e3F1ZXJ5Q2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlPXRoaXMuJGNoaWxkcmVuJiZBcnJheS5pc0FycmF5KHRoaXMuJGNoaWxkcmVuKSYmdGhpcy4kY2hpbGRyZW4uc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLnZpc2libGV9KSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kb24oInF1ZXJ5Q2hhbmdlIix0aGlzLnF1ZXJ5Q2hhbmdlKX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQmJnRoaXMuYnJvYWRjYXN0KCJFbE9wdGlvbiIsImhhbmRsZUdyb3VwRGlzYWJsZWQiLHRoaXMuZGlzYWJsZWQpfX0sZmk9ZGkscGk9cyhmaSx1aSxoaSwhMSxudWxsLG51bGwsbnVsbCk7cGkub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZSI7dmFyIG1pPXBpLmV4cG9ydHM7bWkuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChtaS5uYW1lLG1pKX07dmFyIGdpPW1pLHZpPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtYnV0dG9uIixjbGFzczpbZS50eXBlPyJlbC1idXR0b24tLSIrZS50eXBlOiIiLGUuYnV0dG9uU2l6ZT8iZWwtYnV0dG9uLS0iK2UuYnV0dG9uU2l6ZToiIix7ImlzLWRpc2FibGVkIjplLmJ1dHRvbkRpc2FibGVkLCJpcy1sb2FkaW5nIjplLmxvYWRpbmcsImlzLXBsYWluIjplLnBsYWluLCJpcy1yb3VuZCI6ZS5yb3VuZCwiaXMtY2lyY2xlIjplLmNpcmNsZX1dLGF0dHJzOntkaXNhYmxlZDplLmJ1dHRvbkRpc2FibGVkfHxlLmxvYWRpbmcsYXV0b2ZvY3VzOmUuYXV0b2ZvY3VzLHR5cGU6ZS5uYXRpdmVUeXBlfSxvbjp7Y2xpY2s6ZS5oYW5kbGVDbGlja319LFtlLmxvYWRpbmc/bigiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWxvYWRpbmcifSk6ZS5fZSgpLGUuaWNvbiYmIWUubG9hZGluZz9uKCJpIix7Y2xhc3M6ZS5pY29ufSk6ZS5fZSgpLGUuJHNsb3RzLmRlZmF1bHQ/bigic3BhbiIsW2UuX3QoImRlZmF1bHQiKV0sMik6ZS5fZSgpXSl9LHlpPVtdO3ZpLl93aXRoU3RyaXBwZWQ9ITA7dmFyIGJpPXtuYW1lOiJFbEJ1dHRvbiIsaW5qZWN0OntlbEZvcm06e2RlZmF1bHQ6IiJ9LGVsRm9ybUl0ZW06e2RlZmF1bHQ6IiJ9fSxwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGVmYXVsdCJ9LHNpemU6U3RyaW5nLGljb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LG5hdGl2ZVR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJ1dHRvbiJ9LGxvYWRpbmc6Qm9vbGVhbixkaXNhYmxlZDpCb29sZWFuLHBsYWluOkJvb2xlYW4sYXV0b2ZvY3VzOkJvb2xlYW4scm91bmQ6Qm9vbGVhbixjaXJjbGU6Qm9vbGVhbn0sY29tcHV0ZWQ6e19lbEZvcm1JdGVtU2l6ZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmVsRm9ybUl0ZW18fHt9KS5lbEZvcm1JdGVtU2l6ZX0sYnV0dG9uU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV8fHRoaXMuX2VsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemV9LGJ1dHRvbkRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfX0sbWV0aG9kczp7aGFuZGxlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy4kZW1pdCgiY2xpY2siLGUpfX19LHhpPWJpLF9pPXMoeGksdmkseWksITEsbnVsbCxudWxsLG51bGwpO19pLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWUiO3ZhciB3aT1faS5leHBvcnRzO3dpLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQod2kubmFtZSx3aSl9O3ZhciBTaT13aSxDaT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWJ1dHRvbi1ncm91cCJ9LFtlLl90KCJkZWZhdWx0IildLDIpfSxraT1bXTtDaS5fd2l0aFN0cmlwcGVkPSEwO3ZhciBUaT17bmFtZToiRWxCdXR0b25Hcm91cCJ9LE1pPVRpLEVpPXMoTWksQ2ksa2ksITEsbnVsbCxudWxsLG51bGwpO0VpLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWUiO3ZhciBJaT1FaS5leHBvcnRzO0lpLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoSWkubmFtZSxJaSl9O3ZhciBEaT1JaSxBaT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlIixjbGFzczpbeyJlbC10YWJsZS0tZml0IjplLmZpdCwiZWwtdGFibGUtLXN0cmlwZWQiOmUuc3RyaXBlLCJlbC10YWJsZS0tYm9yZGVyIjplLmJvcmRlcnx8ZS5pc0dyb3VwLCJlbC10YWJsZS0taGlkZGVuIjplLmlzSGlkZGVuLCJlbC10YWJsZS0tZ3JvdXAiOmUuaXNHcm91cCwiZWwtdGFibGUtLWZsdWlkLWhlaWdodCI6ZS5tYXhIZWlnaHQsImVsLXRhYmxlLS1zY3JvbGxhYmxlLXgiOmUubGF5b3V0LnNjcm9sbFgsImVsLXRhYmxlLS1zY3JvbGxhYmxlLXkiOmUubGF5b3V0LnNjcm9sbFksImVsLXRhYmxlLS1lbmFibGUtcm93LWhvdmVyIjohZS5zdG9yZS5zdGF0ZXMuaXNDb21wbGV4LCJlbC10YWJsZS0tZW5hYmxlLXJvdy10cmFuc2l0aW9uIjowIT09KGUuc3RvcmUuc3RhdGVzLmRhdGF8fFtdKS5sZW5ndGgmJihlLnN0b3JlLnN0YXRlcy5kYXRhfHxbXSkubGVuZ3RoPDEwMH0sZS50YWJsZVNpemU/ImVsLXRhYmxlLS0iK2UudGFibGVTaXplOiIiXSxvbjp7bW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlLmhhbmRsZU1vdXNlTGVhdmUodCl9fX0sW24oImRpdiIse3JlZjoiaGlkZGVuQ29sdW1ucyIsc3RhdGljQ2xhc3M6ImhpZGRlbi1jb2x1bW5zIn0sW2UuX3QoImRlZmF1bHQiKV0sMiksZS5zaG93SGVhZGVyP24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb3VzZXdoZWVsIixyYXdOYW1lOiJ2LW1vdXNld2hlZWwiLHZhbHVlOmUuaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbCxleHByZXNzaW9uOiJoYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsIn1dLHJlZjoiaGVhZGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19oZWFkZXItd3JhcHBlciJ9LFtuKCJ0YWJsZS1oZWFkZXIiLHtyZWY6InRhYmxlSGVhZGVyIixzdHlsZTp7d2lkdGg6ZS5sYXlvdXQuYm9keVdpZHRoP2UubGF5b3V0LmJvZHlXaWR0aCsicHgiOiIifSxhdHRyczp7c3RvcmU6ZS5zdG9yZSxib3JkZXI6ZS5ib3JkZXIsImRlZmF1bHQtc29ydCI6ZS5kZWZhdWx0U29ydH19KV0sMSk6ZS5fZSgpLG4oImRpdiIse3JlZjoiYm9keVdyYXBwZXIiLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fYm9keS13cmFwcGVyIixjbGFzczpbZS5sYXlvdXQuc2Nyb2xsWD8iaXMtc2Nyb2xsaW5nLSIrZS5zY3JvbGxQb3NpdGlvbjoiaXMtc2Nyb2xsaW5nLW5vbmUiXSxzdHlsZTpbZS5ib2R5SGVpZ2h0XX0sW24oInRhYmxlLWJvZHkiLHtzdHlsZTp7d2lkdGg6ZS5ib2R5V2lkdGh9LGF0dHJzOntjb250ZXh0OmUuY29udGV4dCxzdG9yZTplLnN0b3JlLHN0cmlwZTplLnN0cmlwZSwicm93LWNsYXNzLW5hbWUiOmUucm93Q2xhc3NOYW1lLCJyb3ctc3R5bGUiOmUucm93U3R5bGUsaGlnaGxpZ2h0OmUuaGlnaGxpZ2h0Q3VycmVudFJvd319KSxlLmRhdGEmJjAhPT1lLmRhdGEubGVuZ3RoP2UuX2UoKTpuKCJkaXYiLHtyZWY6ImVtcHR5QmxvY2siLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fZW1wdHktYmxvY2siLHN0eWxlOmUuZW1wdHlCbG9ja1N0eWxlfSxbbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZV9fZW1wdHktdGV4dCJ9LFtlLl90KCJlbXB0eSIsW2UuX3YoZS5fcyhlLmVtcHR5VGV4dHx8ZS50KCJlbC50YWJsZS5lbXB0eVRleHQiKSkpXSldLDIpXSksZS4kc2xvdHMuYXBwZW5kP24oImRpdiIse3JlZjoiYXBwZW5kV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19hcHBlbmQtd3JhcHBlciJ9LFtlLl90KCJhcHBlbmQiKV0sMik6ZS5fZSgpXSwxKSxlLnNob3dTdW1tYXJ5P24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuZGF0YSYmZS5kYXRhLmxlbmd0aD4wLGV4cHJlc3Npb246ImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwIn0se25hbWU6Im1vdXNld2hlZWwiLHJhd05hbWU6InYtbW91c2V3aGVlbCIsdmFsdWU6ZS5oYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsLGV4cHJlc3Npb246ImhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWwifV0scmVmOiJmb290ZXJXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIn0sW24oInRhYmxlLWZvb3RlciIse3N0eWxlOnt3aWR0aDplLmxheW91dC5ib2R5V2lkdGg/ZS5sYXlvdXQuYm9keVdpZHRoKyJweCI6IiJ9LGF0dHJzOntzdG9yZTplLnN0b3JlLGJvcmRlcjplLmJvcmRlciwic3VtLXRleHQiOmUuc3VtVGV4dHx8ZS50KCJlbC50YWJsZS5zdW1UZXh0IiksInN1bW1hcnktbWV0aG9kIjplLnN1bW1hcnlNZXRob2QsImRlZmF1bHQtc29ydCI6ZS5kZWZhdWx0U29ydH19KV0sMSk6ZS5fZSgpLGUuZml4ZWRDb2x1bW5zLmxlbmd0aD4wP24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJtb3VzZXdoZWVsIixyYXdOYW1lOiJ2LW1vdXNld2hlZWwiLHZhbHVlOmUuaGFuZGxlRml4ZWRNb3VzZXdoZWVsLGV4cHJlc3Npb246ImhhbmRsZUZpeGVkTW91c2V3aGVlbCJ9XSxyZWY6ImZpeGVkV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZCIsc3R5bGU6W3t3aWR0aDplLmxheW91dC5maXhlZFdpZHRoP2UubGF5b3V0LmZpeGVkV2lkdGgrInB4IjoiIn0sZS5maXhlZEhlaWdodF19LFtlLnNob3dIZWFkZXI/bigiZGl2Iix7cmVmOiJmaXhlZEhlYWRlcldyYXBwZXIiLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXIifSxbbigidGFibGUtaGVhZGVyIix7cmVmOiJmaXhlZFRhYmxlSGVhZGVyIixzdHlsZTp7d2lkdGg6ZS5ib2R5V2lkdGh9LGF0dHJzOntmaXhlZDoibGVmdCIsYm9yZGVyOmUuYm9yZGVyLHN0b3JlOmUuc3RvcmV9fSldLDEpOmUuX2UoKSxuKCJkaXYiLHtyZWY6ImZpeGVkQm9keVdyYXBwZXIiLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fZml4ZWQtYm9keS13cmFwcGVyIixzdHlsZTpbe3RvcDplLmxheW91dC5oZWFkZXJIZWlnaHQrInB4In0sZS5maXhlZEJvZHlIZWlnaHRdfSxbbigidGFibGUtYm9keSIse3N0eWxlOnt3aWR0aDplLmJvZHlXaWR0aH0sYXR0cnM6e2ZpeGVkOiJsZWZ0IixzdG9yZTplLnN0b3JlLHN0cmlwZTplLnN0cmlwZSxoaWdobGlnaHQ6ZS5oaWdobGlnaHRDdXJyZW50Um93LCJyb3ctY2xhc3MtbmFtZSI6ZS5yb3dDbGFzc05hbWUsInJvdy1zdHlsZSI6ZS5yb3dTdHlsZX19KSxlLiRzbG90cy5hcHBlbmQ/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlX19hcHBlbmQtZ3V0dGVyIixzdHlsZTp7aGVpZ2h0OmUubGF5b3V0LmFwcGVuZEhlaWdodCsicHgifX0pOmUuX2UoKV0sMSksZS5zaG93U3VtbWFyeT9uKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLmRhdGEmJmUuZGF0YS5sZW5ndGg+MCxleHByZXNzaW9uOiJkYXRhICYmIGRhdGEubGVuZ3RoID4gMCJ9XSxyZWY6ImZpeGVkRm9vdGVyV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlciJ9LFtuKCJ0YWJsZS1mb290ZXIiLHtzdHlsZTp7d2lkdGg6ZS5ib2R5V2lkdGh9LGF0dHJzOntmaXhlZDoibGVmdCIsYm9yZGVyOmUuYm9yZGVyLCJzdW0tdGV4dCI6ZS5zdW1UZXh0fHxlLnQoImVsLnRhYmxlLnN1bVRleHQiKSwic3VtbWFyeS1tZXRob2QiOmUuc3VtbWFyeU1ldGhvZCxzdG9yZTplLnN0b3JlfX0pXSwxKTplLl9lKCldKTplLl9lKCksZS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGg+MD9uKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToibW91c2V3aGVlbCIscmF3TmFtZToidi1tb3VzZXdoZWVsIix2YWx1ZTplLmhhbmRsZUZpeGVkTW91c2V3aGVlbCxleHByZXNzaW9uOiJoYW5kbGVGaXhlZE1vdXNld2hlZWwifV0scmVmOiJyaWdodEZpeGVkV3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1yaWdodCIsc3R5bGU6W3t3aWR0aDplLmxheW91dC5yaWdodEZpeGVkV2lkdGg/ZS5sYXlvdXQucmlnaHRGaXhlZFdpZHRoKyJweCI6IiIscmlnaHQ6ZS5sYXlvdXQuc2Nyb2xsWT8oZS5ib3JkZXI/ZS5sYXlvdXQuZ3V0dGVyV2lkdGg6ZS5sYXlvdXQuZ3V0dGVyV2lkdGh8fDApKyJweCI6IiJ9LGUuZml4ZWRIZWlnaHRdfSxbZS5zaG93SGVhZGVyP24oImRpdiIse3JlZjoicmlnaHRGaXhlZEhlYWRlcldyYXBwZXIiLHN0YXRpY0NsYXNzOiJlbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXIifSxbbigidGFibGUtaGVhZGVyIix7cmVmOiJyaWdodEZpeGVkVGFibGVIZWFkZXIiLHN0eWxlOnt3aWR0aDplLmJvZHlXaWR0aH0sYXR0cnM6e2ZpeGVkOiJyaWdodCIsYm9yZGVyOmUuYm9yZGVyLHN0b3JlOmUuc3RvcmV9fSldLDEpOmUuX2UoKSxuKCJkaXYiLHtyZWY6InJpZ2h0Rml4ZWRCb2R5V3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXIiLHN0eWxlOlt7dG9wOmUubGF5b3V0LmhlYWRlckhlaWdodCsicHgifSxlLmZpeGVkQm9keUhlaWdodF19LFtuKCJ0YWJsZS1ib2R5Iix7c3R5bGU6e3dpZHRoOmUuYm9keVdpZHRofSxhdHRyczp7Zml4ZWQ6InJpZ2h0IixzdG9yZTplLnN0b3JlLHN0cmlwZTplLnN0cmlwZSwicm93LWNsYXNzLW5hbWUiOmUucm93Q2xhc3NOYW1lLCJyb3ctc3R5bGUiOmUucm93U3R5bGUsaGlnaGxpZ2h0OmUuaGlnaGxpZ2h0Q3VycmVudFJvd319KSxlLiRzbG90cy5hcHBlbmQ/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlX19hcHBlbmQtZ3V0dGVyIixzdHlsZTp7aGVpZ2h0OmUubGF5b3V0LmFwcGVuZEhlaWdodCsicHgifX0pOmUuX2UoKV0sMSksZS5zaG93U3VtbWFyeT9uKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLmRhdGEmJmUuZGF0YS5sZW5ndGg+MCxleHByZXNzaW9uOiJkYXRhICYmIGRhdGEubGVuZ3RoID4gMCJ9XSxyZWY6InJpZ2h0Rml4ZWRGb290ZXJXcmFwcGVyIixzdGF0aWNDbGFzczoiZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyIn0sW24oInRhYmxlLWZvb3RlciIse3N0eWxlOnt3aWR0aDplLmJvZHlXaWR0aH0sYXR0cnM6e2ZpeGVkOiJyaWdodCIsYm9yZGVyOmUuYm9yZGVyLCJzdW0tdGV4dCI6ZS5zdW1UZXh0fHxlLnQoImVsLnRhYmxlLnN1bVRleHQiKSwic3VtbWFyeS1tZXRob2QiOmUuc3VtbWFyeU1ldGhvZCxzdG9yZTplLnN0b3JlfX0pXSwxKTplLl9lKCldKTplLl9lKCksZS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGg+MD9uKCJkaXYiLHtyZWY6InJpZ2h0Rml4ZWRQYXRjaCIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaCIsc3R5bGU6e3dpZHRoOmUubGF5b3V0LnNjcm9sbFk/ZS5sYXlvdXQuZ3V0dGVyV2lkdGgrInB4IjoiMCIsaGVpZ2h0OmUubGF5b3V0LmhlYWRlckhlaWdodCsicHgifX0pOmUuX2UoKSxuKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnJlc2l6ZVByb3h5VmlzaWJsZSxleHByZXNzaW9uOiJyZXNpemVQcm94eVZpc2libGUifV0scmVmOiJyZXNpemVQcm94eSIsc3RhdGljQ2xhc3M6ImVsLXRhYmxlX19jb2x1bW4tcmVzaXplLXByb3h5In0pXSl9LE9pPVtdO0FpLl93aXRoU3RyaXBwZWQ9ITA7dmFyIFBpPW4oMTYpLExpPW4ubihQaSksTmk9bigzNSksUmk9bigzOCksJGk9bi5uKFJpKSx6aT0idW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJmaXJlZm94Iik+LTEsQmk9ZnVuY3Rpb24oZSx0KXtlJiZlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcih6aT8iRE9NTW91c2VTY3JvbGwiOiJtb3VzZXdoZWVsIiwoZnVuY3Rpb24oZSl7dmFyIG49JGkoKShlKTt0JiZ0LmFwcGx5KHRoaXMsW2Usbl0pfSkpfSxGaT17YmluZDpmdW5jdGlvbihlLHQpe0JpKGUsdC52YWx1ZSl9fSxWaT1uKDYpLGppPW4ubihWaSksSGk9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LFdpPWZ1bmN0aW9uKGUpe3ZhciB0PWUudGFyZ2V0O3doaWxlKHQmJiJIVE1MIiE9PXQudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtpZigiVEQiPT09dC50YWdOYW1lLnRvVXBwZXJDYXNlKCkpcmV0dXJuIHQ7dD10LnBhcmVudE5vZGV9cmV0dXJuIG51bGx9LEdpPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT09ZSYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpIaShlKSl9LFVpPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIXQmJiFpJiYoIXJ8fEFycmF5LmlzQXJyYXkocikmJiFyLmxlbmd0aCkpcmV0dXJuIGU7bj0ic3RyaW5nIj09PXR5cGVvZiBuPyJkZXNjZW5kaW5nIj09PW4/LTE6MTpuJiZuPDA/LTE6MTt2YXIgbz1pP251bGw6ZnVuY3Rpb24obixpKXtyZXR1cm4gcj8oQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgdD9PYmplY3QoeVsiZ2V0VmFsdWVCeVBhdGgiXSkobix0KTp0KG4saSxlKX0pKSk6KCIka2V5IiE9PXQmJkdpKG4pJiYiJHZhbHVlImluIG4mJihuPW4uJHZhbHVlKSxbR2kobik/T2JqZWN0KHlbImdldFZhbHVlQnlQYXRoIl0pKG4sdCk6bl0pfSxhPWZ1bmN0aW9uKGUsdCl7aWYoaSlyZXR1cm4gaShlLnZhbHVlLHQudmFsdWUpO2Zvcih2YXIgbj0wLHI9ZS5rZXkubGVuZ3RoO248cjtuKyspe2lmKGUua2V5W25dPHQua2V5W25dKXJldHVybi0xO2lmKGUua2V5W25dPnQua2V5W25dKXJldHVybiAxfXJldHVybiAwfTtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOmUsaW5kZXg6dCxrZXk6bz9vKGUsdCk6bnVsbH19KSkuc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgaT1hKGUsdCk7cmV0dXJuIGl8fChpPWUuaW5kZXgtdC5pbmRleCksaSpufSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWV9KSl9LHFpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bnVsbDtyZXR1cm4gZS5jb2x1bW5zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaWQ9PT10JiYobj1lKX0pKSxufSxZaT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1udWxsLGk9MDtpPGUuY29sdW1ucy5sZW5ndGg7aSsrKXt2YXIgcj1lLmNvbHVtbnNbaV07aWYoci5jb2x1bW5LZXk9PT10KXtuPXI7YnJlYWt9fXJldHVybiBufSxYaT1mdW5jdGlvbihlLHQpe3ZhciBuPSh0LmNsYXNzTmFtZXx8IiIpLm1hdGNoKC9lbC10YWJsZV9bXlxzXSsvZ20pO3JldHVybiBuP3FpKGUsblswXSk6bnVsbH0sS2k9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoInJvdyBpcyByZXF1aXJlZCB3aGVuIGdldCByb3cgaWRlbnRpdHkiKTtpZigic3RyaW5nIj09PXR5cGVvZiB0KXtpZih0LmluZGV4T2YoIi4iKTwwKXJldHVybiBlW3RdO2Zvcih2YXIgbj10LnNwbGl0KCIuIiksaT1lLHI9MDtyPG4ubGVuZ3RoO3IrKylpPWlbbltyXV07cmV0dXJuIGl9aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB0KXJldHVybiB0LmNhbGwobnVsbCxlKX0sWmk9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtyZXR1cm4oZXx8W10pLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7bltLaShlLHQpXT17cm93OmUsaW5kZXg6aX19KSksbn07ZnVuY3Rpb24gSmkoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gUWkoZSx0KXt2YXIgbj17fSxpPXZvaWQgMDtmb3IoaSBpbiBlKW5baV09ZVtpXTtmb3IoaSBpbiB0KWlmKEppKHQsaSkpe3ZhciByPXRbaV07InVuZGVmaW5lZCIhPT10eXBlb2YgciYmKG5baV09cil9cmV0dXJuIG59ZnVuY3Rpb24gZXIoZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihlPXBhcnNlSW50KGUsMTApLGlzTmFOKGUpJiYoZT1udWxsKSksZX1mdW5jdGlvbiB0cihlKXtyZXR1cm4idW5kZWZpbmVkIiE9PXR5cGVvZiBlJiYoZT1lcihlKSxpc05hTihlKSYmKGU9ODApKSxlfWZ1bmN0aW9uIG5yKGUpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIGU/ZToic3RyaW5nIj09PXR5cGVvZiBlPy9eXGQrKD86cHgpPyQvLnRlc3QoZSk/cGFyc2VJbnQoZSwxMCk6ZTpudWxsfWZ1bmN0aW9uIGlyKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtyZXR1cm4gMD09PXQubGVuZ3RoP2Z1bmN0aW9uKGUpe3JldHVybiBlfToxPT09dC5sZW5ndGg/dFswXTp0LnJlZHVjZSgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KSl9ZnVuY3Rpb24gcnIoZSx0LG4pe3ZhciBpPSExLHI9ZS5pbmRleE9mKHQpLG89LTEhPT1yLGE9ZnVuY3Rpb24oKXtlLnB1c2godCksaT0hMH0scz1mdW5jdGlvbigpe2Uuc3BsaWNlKHIsMSksaT0hMH07cmV0dXJuImJvb2xlYW4iPT09dHlwZW9mIG4/biYmIW8/YSgpOiFuJiZvJiZzKCk6bz9zKCk6YSgpLGl9ZnVuY3Rpb24gb3IoZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImNoaWxkcmVuIixpPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToiaGFzQ2hpbGRyZW4iLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIShBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCl9O2Z1bmN0aW9uIG8oZSxhLHMpe3QoZSxhLHMpLGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZVtpXSl0KGUsbnVsbCxzKzEpO2Vsc2V7dmFyIGE9ZVtuXTtyKGEpfHxvKGUsYSxzKzEpfX0pKX1lLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGVbaV0pdChlLG51bGwsMCk7ZWxzZXt2YXIgYT1lW25dO3IoYSl8fG8oZSxhLDApfX0pKX12YXIgYXI9e2RhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c3RhdGVzOntkZWZhdWx0RXhwYW5kQWxsOiExLGV4cGFuZFJvd3M6W119fX0sbWV0aG9kczp7dXBkYXRlRXhwYW5kUm93czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGVzLHQ9ZS5kYXRhLG49dm9pZCAwPT09dD9bXTp0LGk9ZS5yb3dLZXkscj1lLmRlZmF1bHRFeHBhbmRBbGwsbz1lLmV4cGFuZFJvd3M7aWYocil0aGlzLnN0YXRlcy5leHBhbmRSb3dzPW4uc2xpY2UoKTtlbHNlIGlmKGkpe3ZhciBhPVppKG8saSk7dGhpcy5zdGF0ZXMuZXhwYW5kUm93cz1uLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXt2YXIgbj1LaSh0LGkpLHI9YVtuXTtyZXR1cm4gciYmZS5wdXNoKHQpLGV9KSxbXSl9ZWxzZSB0aGlzLnN0YXRlcy5leHBhbmRSb3dzPVtdfSx0b2dnbGVSb3dFeHBhbnNpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj1ycih0aGlzLnN0YXRlcy5leHBhbmRSb3dzLGUsdCk7biYmKHRoaXMudGFibGUuJGVtaXQoImV4cGFuZC1jaGFuZ2UiLGUsdGhpcy5zdGF0ZXMuZXhwYW5kUm93cy5zbGljZSgpKSx0aGlzLnNjaGVkdWxlTGF5b3V0KCkpfSxzZXRFeHBhbmRSb3dLZXlzOmZ1bmN0aW9uKGUpe3RoaXMuYXNzZXJ0Um93S2V5KCk7dmFyIHQ9dGhpcy5zdGF0ZXMsbj10LmRhdGEsaT10LnJvd0tleSxyPVppKG4saSk7dGhpcy5zdGF0ZXMuZXhwYW5kUm93cz1lLnJlZHVjZSgoZnVuY3Rpb24oZSx0KXt2YXIgbj1yW3RdO3JldHVybiBuJiZlLnB1c2gobi5yb3cpLGV9KSxbXSl9LGlzUm93RXhwYW5kZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGF0ZXMsbj10LmV4cGFuZFJvd3MsaT12b2lkIDA9PT1uP1tdOm4scj10LnJvd0tleTtpZihyKXt2YXIgbz1aaShpLHIpO3JldHVybiEhb1tLaShlLHIpXX1yZXR1cm4tMSE9PWkuaW5kZXhPZihlKX19fSxzcj17ZGF0YTpmdW5jdGlvbigpe3JldHVybntzdGF0ZXM6e19jdXJyZW50Um93S2V5Om51bGwsY3VycmVudFJvdzpudWxsfX19LG1ldGhvZHM6e3NldEN1cnJlbnRSb3dLZXk6ZnVuY3Rpb24oZSl7dGhpcy5hc3NlcnRSb3dLZXkoKSx0aGlzLnN0YXRlcy5fY3VycmVudFJvd0tleT1lLHRoaXMuc2V0Q3VycmVudFJvd0J5S2V5KGUpfSxyZXN0b3JlQ3VycmVudFJvd0tleTpmdW5jdGlvbigpe3RoaXMuc3RhdGVzLl9jdXJyZW50Um93S2V5PW51bGx9LHNldEN1cnJlbnRSb3dCeUtleTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnN0YXRlcyxuPXQuZGF0YSxpPXZvaWQgMD09PW4/W106bixyPXQucm93S2V5LG89bnVsbDtyJiYobz1PYmplY3QoeVsiYXJyYXlGaW5kIl0pKGksKGZ1bmN0aW9uKHQpe3JldHVybiBLaSh0LHIpPT09ZX0pKSksdC5jdXJyZW50Um93PW99LHVwZGF0ZUN1cnJlbnRSb3c6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGF0ZXMsbj10aGlzLnRhYmxlLGk9dC5jdXJyZW50Um93O2lmKGUmJmUhPT1pKXJldHVybiB0LmN1cnJlbnRSb3c9ZSx2b2lkIG4uJGVtaXQoImN1cnJlbnQtY2hhbmdlIixlLGkpOyFlJiZpJiYodC5jdXJyZW50Um93PW51bGwsbi4kZW1pdCgiY3VycmVudC1jaGFuZ2UiLG51bGwsaSkpfSx1cGRhdGVDdXJyZW50Um93RGF0YTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGVzLHQ9dGhpcy50YWJsZSxuPWUucm93S2V5LGk9ZS5fY3VycmVudFJvd0tleSxyPWUuZGF0YXx8W10sbz1lLmN1cnJlbnRSb3c7aWYoLTE9PT1yLmluZGV4T2YobykmJm8pe2lmKG4pe3ZhciBhPUtpKG8sbik7dGhpcy5zZXRDdXJyZW50Um93QnlLZXkoYSl9ZWxzZSBlLmN1cnJlbnRSb3c9bnVsbDtudWxsPT09ZS5jdXJyZW50Um93JiZ0LiRlbWl0KCJjdXJyZW50LWNoYW5nZSIsbnVsbCxvKX1lbHNlIGkmJih0aGlzLnNldEN1cnJlbnRSb3dCeUtleShpKSx0aGlzLnJlc3RvcmVDdXJyZW50Um93S2V5KCkpfX19LGxyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIGkgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixpKSYmKGVbaV09bltpXSl9cmV0dXJuIGV9LGNyPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3N0YXRlczp7ZXhwYW5kUm93S2V5czpbXSx0cmVlRGF0YTp7fSxpbmRlbnQ6MTYsbGF6eTohMSxsYXp5VHJlZU5vZGVNYXA6e30sbGF6eUNvbHVtbklkZW50aWZpZXI6Imhhc0NoaWxkcmVuIixjaGlsZHJlbkNvbHVtbk5hbWU6ImNoaWxkcmVuIn19fSxjb21wdXRlZDp7bm9ybWFsaXplZERhdGE6ZnVuY3Rpb24oKXtpZighdGhpcy5zdGF0ZXMucm93S2V5KXJldHVybnt9O3ZhciBlPXRoaXMuc3RhdGVzLmRhdGF8fFtdO3JldHVybiB0aGlzLm5vcm1hbGl6ZShlKX0sbm9ybWFsaXplZExhenlOb2RlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZXMsdD1lLnJvd0tleSxuPWUubGF6eVRyZWVOb2RlTWFwLGk9ZS5sYXp5Q29sdW1uSWRlbnRpZmllcixyPU9iamVjdC5rZXlzKG4pLG89e307cmV0dXJuIHIubGVuZ3RoPyhyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKG5bZV0ubGVuZ3RoKXt2YXIgcj17Y2hpbGRyZW46W119O25bZV0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49S2koZSx0KTtyLmNoaWxkcmVuLnB1c2gobiksZVtpXSYmIW9bbl0mJihvW25dPXtjaGlsZHJlbjpbXX0pfSkpLG9bZV09cn19KSksbyk6b319LHdhdGNoOntub3JtYWxpemVkRGF0YToidXBkYXRlVHJlZURhdGEiLG5vcm1hbGl6ZWRMYXp5Tm9kZToidXBkYXRlVHJlZURhdGEifSxtZXRob2RzOntub3JtYWxpemU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGF0ZXMsbj10LmNoaWxkcmVuQ29sdW1uTmFtZSxpPXQubGF6eUNvbHVtbklkZW50aWZpZXIscj10LnJvd0tleSxvPXQubGF6eSxhPXt9O3JldHVybiBvcihlLChmdW5jdGlvbihlLHQsbil7dmFyIGk9S2koZSxyKTtBcnJheS5pc0FycmF5KHQpP2FbaV09e2NoaWxkcmVuOnQubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gS2koZSxyKX0pKSxsZXZlbDpufTpvJiYoYVtpXT17Y2hpbGRyZW46W10sbGF6eTohMCxsZXZlbDpufSl9KSxuLGkpLGF9LHVwZGF0ZVRyZWVEYXRhOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ub3JtYWxpemVkRGF0YSx0PXRoaXMubm9ybWFsaXplZExhenlOb2RlLG49T2JqZWN0LmtleXMoZSksaT17fTtpZihuLmxlbmd0aCl7dmFyIHI9dGhpcy5zdGF0ZXMsbz1yLnRyZWVEYXRhLGE9ci5kZWZhdWx0RXhwYW5kQWxsLHM9ci5leHBhbmRSb3dLZXlzLGw9ci5sYXp5LGM9W10sdT1mdW5jdGlvbihlLHQpe3ZhciBuPWF8fHMmJi0xIT09cy5pbmRleE9mKHQpO3JldHVybiEhKGUmJmUuZXhwYW5kZWR8fG4pfTtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW9bdF0scj1scih7fSxlW3RdKTtpZihyLmV4cGFuZGVkPXUobix0KSxyLmxhenkpe3ZhciBhPW58fHt9LHM9YS5sb2FkZWQsbD12b2lkIDAhPT1zJiZzLGg9YS5sb2FkaW5nLGQ9dm9pZCAwIT09aCYmaDtyLmxvYWRlZD0hIWwsci5sb2FkaW5nPSEhZCxjLnB1c2godCl9aVt0XT1yfSkpO3ZhciBoPU9iamVjdC5rZXlzKHQpO2wmJmgubGVuZ3RoJiZjLmxlbmd0aCYmaC5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1vW2VdLHI9dFtlXS5jaGlsZHJlbjtpZigtMSE9PWMuaW5kZXhPZihlKSl7aWYoMCE9PWlbZV0uY2hpbGRyZW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiW0VsVGFibGVdY2hpbGRyZW4gbXVzdCBiZSBhbiBlbXB0eSBhcnJheS4iKTtpW2VdLmNoaWxkcmVuPXJ9ZWxzZXt2YXIgYT1ufHx7fSxzPWEubG9hZGVkLGw9dm9pZCAwIT09cyYmcyxoPWEubG9hZGluZyxkPXZvaWQgMCE9PWgmJmg7aVtlXT17bGF6eTohMCxsb2FkZWQ6ISFsLGxvYWRpbmc6ISFkLGV4cGFuZGVkOnUobixlKSxjaGlsZHJlbjpyLGxldmVsOiIifX19KSl9dGhpcy5zdGF0ZXMudHJlZURhdGE9aSx0aGlzLnVwZGF0ZVRhYmxlU2Nyb2xsWSgpfSx1cGRhdGVUcmVlRXhwYW5kS2V5czpmdW5jdGlvbihlKXt0aGlzLnN0YXRlcy5leHBhbmRSb3dLZXlzPWUsdGhpcy51cGRhdGVUcmVlRGF0YSgpfSx0b2dnbGVUcmVlRXhwYW5zaW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5hc3NlcnRSb3dLZXkoKTt2YXIgbj10aGlzLnN0YXRlcyxpPW4ucm93S2V5LHI9bi50cmVlRGF0YSxvPUtpKGUsaSksYT1vJiZyW29dO2lmKG8mJmEmJiJleHBhbmRlZCJpbiBhKXt2YXIgcz1hLmV4cGFuZGVkO3Q9InVuZGVmaW5lZCI9PT10eXBlb2YgdD8hYS5leHBhbmRlZDp0LHJbb10uZXhwYW5kZWQ9dCxzIT09dCYmdGhpcy50YWJsZS4kZW1pdCgiZXhwYW5kLWNoYW5nZSIsZSx0KSx0aGlzLnVwZGF0ZVRhYmxlU2Nyb2xsWSgpfX0sbG9hZE9yVG9nZ2xlOmZ1bmN0aW9uKGUpe3RoaXMuYXNzZXJ0Um93S2V5KCk7dmFyIHQ9dGhpcy5zdGF0ZXMsbj10LmxhenksaT10LnRyZWVEYXRhLHI9dC5yb3dLZXksbz1LaShlLHIpLGE9aVtvXTtuJiZhJiYibG9hZGVkImluIGEmJiFhLmxvYWRlZD90aGlzLmxvYWREYXRhKGUsbyxhKTp0aGlzLnRvZ2dsZVRyZWVFeHBhbnNpb24oZSl9LGxvYWREYXRhOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLHI9dGhpcy50YWJsZS5sb2FkLG89dGhpcy5zdGF0ZXMudHJlZURhdGE7ciYmIW9bdF0ubG9hZGVkJiYob1t0XS5sb2FkaW5nPSEwLHIoZSxuLChmdW5jdGlvbihuKXtpZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgRXJyb3IoIltFbFRhYmxlXSBkYXRhIG11c3QgYmUgYW4gYXJyYXkiKTt2YXIgcj1pLnN0YXRlcyxvPXIubGF6eVRyZWVOb2RlTWFwLGE9ci50cmVlRGF0YTthW3RdLmxvYWRpbmc9ITEsYVt0XS5sb2FkZWQ9ITAsYVt0XS5leHBhbmRlZD0hMCxuLmxlbmd0aCYmaS4kc2V0KG8sdCxuKSxpLnRhYmxlLiRlbWl0KCJleHBhbmQtY2hhbmdlIixlLCEwKX0pKSl9fX0sdXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNvcnRpbmdDb2x1bW47cmV0dXJuIG4mJiJzdHJpbmciIT09dHlwZW9mIG4uc29ydGFibGU/VWkoZSx0LnNvcnRQcm9wLHQuc29ydE9yZGVyLG4uc29ydE1ldGhvZCxuLnNvcnRCeSk6ZX0saHI9ZnVuY3Rpb24gZSh0KXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNoaWxkcmVuP24ucHVzaC5hcHBseShuLGUodC5jaGlsZHJlbikpOm4ucHVzaCh0KX0pKSxufSxkcj1qaS5hLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbigpe3JldHVybntzdGF0ZXM6e3Jvd0tleTpudWxsLGRhdGE6W10saXNDb21wbGV4OiExLF9jb2x1bW5zOltdLG9yaWdpbkNvbHVtbnM6W10sY29sdW1uczpbXSxmaXhlZENvbHVtbnM6W10scmlnaHRGaXhlZENvbHVtbnM6W10sbGVhZkNvbHVtbnM6W10sZml4ZWRMZWFmQ29sdW1uczpbXSxyaWdodEZpeGVkTGVhZkNvbHVtbnM6W10sbGVhZkNvbHVtbnNMZW5ndGg6MCxmaXhlZExlYWZDb2x1bW5zTGVuZ3RoOjAscmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoOjAsaXNBbGxTZWxlY3RlZDohMSxzZWxlY3Rpb246W10scmVzZXJ2ZVNlbGVjdGlvbjohMSxzZWxlY3RPbkluZGV0ZXJtaW5hdGU6ITEsc2VsZWN0YWJsZTpudWxsLGZpbHRlcnM6e30sZmlsdGVyZWREYXRhOm51bGwsc29ydGluZ0NvbHVtbjpudWxsLHNvcnRQcm9wOm51bGwsc29ydE9yZGVyOm51bGwsaG92ZXJSb3c6bnVsbH19fSxtaXhpbnM6W2FyLHNyLGNyXSxtZXRob2RzOnthc3NlcnRSb3dLZXk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlcy5yb3dLZXk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJbRWxUYWJsZV0gcHJvcCByb3cta2V5IGlzIHJlcXVpcmVkIil9LHVwZGF0ZUNvbHVtbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlcyx0PWUuX2NvbHVtbnN8fFtdO2UuZml4ZWRDb2x1bW5zPXQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZml4ZWR8fCJsZWZ0Ij09PWUuZml4ZWR9KSksZS5yaWdodEZpeGVkQ29sdW1ucz10LmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuInJpZ2h0Ij09PWUuZml4ZWR9KSksZS5maXhlZENvbHVtbnMubGVuZ3RoPjAmJnRbMF0mJiJzZWxlY3Rpb24iPT09dFswXS50eXBlJiYhdFswXS5maXhlZCYmKHRbMF0uZml4ZWQ9ITAsZS5maXhlZENvbHVtbnMudW5zaGlmdCh0WzBdKSk7dmFyIG49dC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiFlLmZpeGVkfSkpO2Uub3JpZ2luQ29sdW1ucz1bXS5jb25jYXQoZS5maXhlZENvbHVtbnMpLmNvbmNhdChuKS5jb25jYXQoZS5yaWdodEZpeGVkQ29sdW1ucyk7dmFyIGk9aHIobikscj1ocihlLmZpeGVkQ29sdW1ucyksbz1ocihlLnJpZ2h0Rml4ZWRDb2x1bW5zKTtlLmxlYWZDb2x1bW5zTGVuZ3RoPWkubGVuZ3RoLGUuZml4ZWRMZWFmQ29sdW1uc0xlbmd0aD1yLmxlbmd0aCxlLnJpZ2h0Rml4ZWRMZWFmQ29sdW1uc0xlbmd0aD1vLmxlbmd0aCxlLmNvbHVtbnM9W10uY29uY2F0KHIpLmNvbmNhdChpKS5jb25jYXQobyksZS5pc0NvbXBsZXg9ZS5maXhlZENvbHVtbnMubGVuZ3RoPjB8fGUucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjB9LHNjaGVkdWxlTGF5b3V0OmZ1bmN0aW9uKGUpe2UmJnRoaXMudXBkYXRlQ29sdW1ucygpLHRoaXMudGFibGUuZGVib3VuY2VkVXBkYXRlTGF5b3V0KCl9LGlzU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdGF0ZXMuc2VsZWN0aW9uLG49dm9pZCAwPT09dD9bXTp0O3JldHVybiBuLmluZGV4T2YoZSk+LTF9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZXM7ZS5pc0FsbFNlbGVjdGVkPSExO3ZhciB0PWUuc2VsZWN0aW9uO3QubGVuZ3RoJiYoZS5zZWxlY3Rpb249W10sdGhpcy50YWJsZS4kZW1pdCgic2VsZWN0aW9uLWNoYW5nZSIsW10pKX0sY2xlYW5TZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlcyx0PWUuZGF0YSxuPWUucm93S2V5LGk9ZS5zZWxlY3Rpb24scj12b2lkIDA7aWYobil7cj1bXTt2YXIgbz1aaShpLG4pLGE9WmkodCxuKTtmb3IodmFyIHMgaW4gbylvLmhhc093blByb3BlcnR5KHMpJiYhYVtzXSYmci5wdXNoKG9bc10ucm93KX1lbHNlIHI9aS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybi0xPT09dC5pbmRleE9mKGUpfSkpO2lmKHIubGVuZ3RoKXt2YXIgbD1pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT1yLmluZGV4T2YoZSl9KSk7ZS5zZWxlY3Rpb249bCx0aGlzLnRhYmxlLiRlbWl0KCJzZWxlY3Rpb24tY2hhbmdlIixsLnNsaWNlKCkpfX0sdG9nZ2xlUm93U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxpPXJyKHRoaXMuc3RhdGVzLnNlbGVjdGlvbixlLHQpO2lmKGkpe3ZhciByPSh0aGlzLnN0YXRlcy5zZWxlY3Rpb258fFtdKS5zbGljZSgpO24mJnRoaXMudGFibGUuJGVtaXQoInNlbGVjdCIscixlKSx0aGlzLnRhYmxlLiRlbWl0KCJzZWxlY3Rpb24tY2hhbmdlIixyKX19LF90b2dnbGVBbGxTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlcyx0PWUuZGF0YSxuPXZvaWQgMD09PXQ/W106dCxpPWUuc2VsZWN0aW9uLHI9ZS5zZWxlY3RPbkluZGV0ZXJtaW5hdGU/IWUuaXNBbGxTZWxlY3RlZDohKGUuaXNBbGxTZWxlY3RlZHx8aS5sZW5ndGgpO2UuaXNBbGxTZWxlY3RlZD1yO3ZhciBvPSExO24uZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtlLnNlbGVjdGFibGU/ZS5zZWxlY3RhYmxlLmNhbGwobnVsbCx0LG4pJiZycihpLHQscikmJihvPSEwKTpycihpLHQscikmJihvPSEwKX0pKSxvJiZ0aGlzLnRhYmxlLiRlbWl0KCJzZWxlY3Rpb24tY2hhbmdlIixpP2kuc2xpY2UoKTpbXSksdGhpcy50YWJsZS4kZW1pdCgic2VsZWN0LWFsbCIsaSl9LHVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZXMsdD1lLnNlbGVjdGlvbixuPWUucm93S2V5LGk9ZS5kYXRhLHI9WmkodCxuKTtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPUtpKGUsbiksbz1yW2ldO28mJih0W28uaW5kZXhdPWUpfSkpfSx1cGRhdGVBbGxTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGVzLHQ9ZS5zZWxlY3Rpb24sbj1lLnJvd0tleSxpPWUuc2VsZWN0YWJsZSxyPWUuZGF0YXx8W107aWYoMCE9PXIubGVuZ3RoKXt2YXIgbz12b2lkIDA7biYmKG89WmkodCxuKSk7Zm9yKHZhciBhPWZ1bmN0aW9uKGUpe3JldHVybiBvPyEhb1tLaShlLG4pXTotMSE9PXQuaW5kZXhPZihlKX0scz0hMCxsPTAsYz0wLHU9ci5sZW5ndGg7Yzx1O2MrKyl7dmFyIGg9cltjXSxkPWkmJmkuY2FsbChudWxsLGgsYyk7aWYoYShoKSlsKys7ZWxzZSBpZighaXx8ZCl7cz0hMTticmVha319MD09PWwmJihzPSExKSxlLmlzQWxsU2VsZWN0ZWQ9c31lbHNlIGUuaXNBbGxTZWxlY3RlZD0hMX0sdXBkYXRlRmlsdGVyczpmdW5jdGlvbihlLHQpe0FycmF5LmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIG49dGhpcy5zdGF0ZXMsaT17fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtuLmZpbHRlcnNbZS5pZF09dCxpW2UuY29sdW1uS2V5fHxlLmlkXT10fSkpLGl9LHVwZGF0ZVNvcnQ6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc3RhdGVzLnNvcnRpbmdDb2x1bW4mJnRoaXMuc3RhdGVzLnNvcnRpbmdDb2x1bW4hPT1lJiYodGhpcy5zdGF0ZXMuc29ydGluZ0NvbHVtbi5vcmRlcj1udWxsKSx0aGlzLnN0YXRlcy5zb3J0aW5nQ29sdW1uPWUsdGhpcy5zdGF0ZXMuc29ydFByb3A9dCx0aGlzLnN0YXRlcy5zb3J0T3JkZXI9bn0sZXhlY0ZpbHRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnN0YXRlcyxuPXQuX2RhdGEsaT10LmZpbHRlcnMscj1uO09iamVjdC5rZXlzKGkpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZmlsdGVyc1tuXTtpZihpJiYwIT09aS5sZW5ndGgpe3ZhciBvPXFpKGUuc3RhdGVzLG4pO28mJm8uZmlsdGVyTWV0aG9kJiYocj1yLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGkuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIG8uZmlsdGVyTWV0aG9kLmNhbGwobnVsbCx0LGUsbyl9KSl9KSkpfX0pKSx0LmZpbHRlcmVkRGF0YT1yfSxleGVjU29ydDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGVzO2UuZGF0YT11cihlLmZpbHRlcmVkRGF0YSxlKX0sZXhlY1F1ZXJ5OmZ1bmN0aW9uKGUpe2UmJmUuZmlsdGVyfHx0aGlzLmV4ZWNGaWx0ZXIoKSx0aGlzLmV4ZWNTb3J0KCl9LGNsZWFyRmlsdGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc3RhdGVzLG49dGhpcy50YWJsZS4kcmVmcyxpPW4udGFibGVIZWFkZXIscj1uLmZpeGVkVGFibGVIZWFkZXIsbz1uLnJpZ2h0Rml4ZWRUYWJsZUhlYWRlcixhPXt9O2kmJihhPWt0KCkoYSxpLmZpbHRlclBhbmVscykpLHImJihhPWt0KCkoYSxyLmZpbHRlclBhbmVscykpLG8mJihhPWt0KCkoYSxvLmZpbHRlclBhbmVscykpO3ZhciBzPU9iamVjdC5rZXlzKGEpO2lmKHMubGVuZ3RoKWlmKCJzdHJpbmciPT09dHlwZW9mIGUmJihlPVtlXSksQXJyYXkuaXNBcnJheShlKSl7dmFyIGw9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBZaSh0LGUpfSkpO3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9bC5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZD09PWV9KSk7dCYmKGFbZV0uZmlsdGVyZWRWYWx1ZT1bXSl9KSksdGhpcy5jb21taXQoImZpbHRlckNoYW5nZSIse2NvbHVtbjpsLHZhbHVlczpbXSxzaWxlbnQ6ITAsbXVsdGk6ITB9KX1lbHNlIHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7YVtlXS5maWx0ZXJlZFZhbHVlPVtdfSkpLHQuZmlsdGVycz17fSx0aGlzLmNvbW1pdCgiZmlsdGVyQ2hhbmdlIix7Y29sdW1uOnt9LHZhbHVlczpbXSxzaWxlbnQ6ITB9KX0sY2xlYXJTb3J0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZXM7ZS5zb3J0aW5nQ29sdW1uJiYodGhpcy51cGRhdGVTb3J0KG51bGwsbnVsbCxudWxsKSx0aGlzLmNvbW1pdCgiY2hhbmdlU29ydENvbmRpdGlvbiIse3NpbGVudDohMH0pKX0sc2V0RXhwYW5kUm93S2V5c0FkYXB0ZXI6ZnVuY3Rpb24oZSl7dGhpcy5zZXRFeHBhbmRSb3dLZXlzKGUpLHRoaXMudXBkYXRlVHJlZUV4cGFuZEtleXMoZSl9LHRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnN0YXRlcy5jb2x1bW5zLnNvbWUoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4iZXhwYW5kIj09PXR9KSk7bj90aGlzLnRvZ2dsZVJvd0V4cGFuc2lvbihlLHQpOnRoaXMudG9nZ2xlVHJlZUV4cGFuc2lvbihlLHQpfX19KTtkci5wcm90b3R5cGUubXV0YXRpb25zPXtzZXREYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fZGF0YSE9PXQ7ZS5fZGF0YT10LHRoaXMuZXhlY1F1ZXJ5KCksdGhpcy51cGRhdGVDdXJyZW50Um93RGF0YSgpLHRoaXMudXBkYXRlRXhwYW5kUm93cygpLGUucmVzZXJ2ZVNlbGVjdGlvbj8odGhpcy5hc3NlcnRSb3dLZXkoKSx0aGlzLnVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5KCkpOm4/dGhpcy5jbGVhclNlbGVjdGlvbigpOnRoaXMuY2xlYW5TZWxlY3Rpb24oKSx0aGlzLnVwZGF0ZUFsbFNlbGVjdGVkKCksdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKX0saW5zZXJ0Q29sdW1uOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPWUuX2NvbHVtbnM7aSYmKHI9aS5jaGlsZHJlbixyfHwocj1pLmNoaWxkcmVuPVtdKSksInVuZGVmaW5lZCIhPT10eXBlb2Ygbj9yLnNwbGljZShuLDAsdCk6ci5wdXNoKHQpLCJzZWxlY3Rpb24iPT09dC50eXBlJiYoZS5zZWxlY3RhYmxlPXQuc2VsZWN0YWJsZSxlLnJlc2VydmVTZWxlY3Rpb249dC5yZXNlcnZlU2VsZWN0aW9uKSx0aGlzLnRhYmxlLiRyZWFkeSYmKHRoaXMudXBkYXRlQ29sdW1ucygpLHRoaXMuc2NoZWR1bGVMYXlvdXQoKSl9LHJlbW92ZUNvbHVtbjpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5fY29sdW1ucztuJiYoaT1uLmNoaWxkcmVuLGl8fChpPW4uY2hpbGRyZW49W10pKSxpJiZpLnNwbGljZShpLmluZGV4T2YodCksMSksdGhpcy50YWJsZS4kcmVhZHkmJih0aGlzLnVwZGF0ZUNvbHVtbnMoKSx0aGlzLnNjaGVkdWxlTGF5b3V0KCkpfSxzb3J0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5wcm9wLGk9dC5vcmRlcixyPXQuaW5pdDtpZihuKXt2YXIgbz1PYmplY3QoeVsiYXJyYXlGaW5kIl0pKGUuY29sdW1ucywoZnVuY3Rpb24oZSl7cmV0dXJuIGUucHJvcGVydHk9PT1ufSkpO28mJihvLm9yZGVyPWksdGhpcy51cGRhdGVTb3J0KG8sbixpKSx0aGlzLmNvbW1pdCgiY2hhbmdlU29ydENvbmRpdGlvbiIse2luaXQ6cn0pKX19LGNoYW5nZVNvcnRDb25kaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnNvcnRpbmdDb2x1bW4saT1lLnNvcnRQcm9wLHI9ZS5zb3J0T3JkZXI7bnVsbD09PXImJihlLnNvcnRpbmdDb2x1bW49bnVsbCxlLnNvcnRQcm9wPW51bGwpO3ZhciBvPXtmaWx0ZXI6ITB9O3RoaXMuZXhlY1F1ZXJ5KG8pLHQmJih0LnNpbGVudHx8dC5pbml0KXx8dGhpcy50YWJsZS4kZW1pdCgic29ydC1jaGFuZ2UiLHtjb2x1bW46bixwcm9wOmksb3JkZXI6cn0pLHRoaXMudXBkYXRlVGFibGVTY3JvbGxZKCl9LGZpbHRlckNoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQuY29sdW1uLGk9dC52YWx1ZXMscj10LnNpbGVudCxvPXRoaXMudXBkYXRlRmlsdGVycyhuLGkpO3RoaXMuZXhlY1F1ZXJ5KCkscnx8dGhpcy50YWJsZS4kZW1pdCgiZmlsdGVyLWNoYW5nZSIsbyksdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKX0sdG9nZ2xlQWxsU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVBbGxTZWxlY3Rpb24oKX0scm93U2VsZWN0ZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy50b2dnbGVSb3dTZWxlY3Rpb24odCksdGhpcy51cGRhdGVBbGxTZWxlY3RlZCgpfSxzZXRIb3ZlclJvdzpmdW5jdGlvbihlLHQpe2UuaG92ZXJSb3c9dH0sc2V0Q3VycmVudFJvdzpmdW5jdGlvbihlLHQpe3RoaXMudXBkYXRlQ3VycmVudFJvdyh0KX19LGRyLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tdXRhdGlvbnM7aWYoIXRbZV0pdGhyb3cgbmV3IEVycm9yKCJBY3Rpb24gbm90IGZvdW5kOiAiK2UpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkobj4xP24tMTowKSxyPTE7cjxuO3IrKylpW3ItMV09YXJndW1lbnRzW3JdO3RbZV0uYXBwbHkodGhpcyxbdGhpcy5zdGF0ZXNdLmNvbmNhdChpKSl9LGRyLnByb3RvdHlwZS51cGRhdGVUYWJsZVNjcm9sbFk9ZnVuY3Rpb24oKXtqaS5hLm5leHRUaWNrKHRoaXMudGFibGUudXBkYXRlU2Nyb2xsWSl9O3ZhciBmcj1kcjtmdW5jdGlvbiBwcihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJUYWJsZSBpcyByZXF1aXJlZC4iKTt2YXIgbj1uZXcgZnI7cmV0dXJuIG4udGFibGU9ZSxuLnRvZ2dsZUFsbFNlbGVjdGlvbj0kKCkoMTAsbi5fdG9nZ2xlQWxsU2VsZWN0aW9uKSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtuLnN0YXRlc1tlXT10W2VdfSkpLG59ZnVuY3Rpb24gbXIoZSl7dmFyIHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPWVbbl0scj12b2lkIDA7InN0cmluZyI9PT10eXBlb2YgaT9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzW2ldfToiZnVuY3Rpb24iPT09dHlwZW9mIGk/cj1mdW5jdGlvbigpe3JldHVybiBpLmNhbGwodGhpcyx0aGlzLnN0b3JlLnN0YXRlcyl9OmNvbnNvbGUuZXJyb3IoImludmFsaWQgdmFsdWUgdHlwZSIpLHImJih0W25dPXIpfSkpLHR9dmFyIGdyPW4oMzApLHZyPW4ubihncik7ZnVuY3Rpb24geXIoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgYnI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2Zvcih2YXIgbiBpbiB5cih0aGlzLGUpLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMudGFibGU9bnVsbCx0aGlzLnN0b3JlPW51bGwsdGhpcy5jb2x1bW5zPW51bGwsdGhpcy5maXQ9ITAsdGhpcy5zaG93SGVhZGVyPSEwLHRoaXMuaGVpZ2h0PW51bGwsdGhpcy5zY3JvbGxYPSExLHRoaXMuc2Nyb2xsWT0hMSx0aGlzLmJvZHlXaWR0aD1udWxsLHRoaXMuZml4ZWRXaWR0aD1udWxsLHRoaXMucmlnaHRGaXhlZFdpZHRoPW51bGwsdGhpcy50YWJsZUhlaWdodD1udWxsLHRoaXMuaGVhZGVySGVpZ2h0PTQ0LHRoaXMuYXBwZW5kSGVpZ2h0PTAsdGhpcy5mb290ZXJIZWlnaHQ9NDQsdGhpcy52aWV3cG9ydEhlaWdodD1udWxsLHRoaXMuYm9keUhlaWdodD1udWxsLHRoaXMuZml4ZWRCb2R5SGVpZ2h0PW51bGwsdGhpcy5ndXR0ZXJXaWR0aD12cigpKCksdCl0Lmhhc093blByb3BlcnR5KG4pJiYodGhpc1tuXT10W25dKTtpZighdGhpcy50YWJsZSl0aHJvdyBuZXcgRXJyb3IoInRhYmxlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQiKTtpZighdGhpcy5zdG9yZSl0aHJvdyBuZXcgRXJyb3IoInN0b3JlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQiKX1yZXR1cm4gZS5wcm90b3R5cGUudXBkYXRlU2Nyb2xsWT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVpZ2h0O2lmKG51bGw9PT1lKXJldHVybiExO3ZhciB0PXRoaXMudGFibGUuYm9keVdyYXBwZXI7aWYodGhpcy50YWJsZS4kZWwmJnQpe3ZhciBuPXQucXVlcnlTZWxlY3RvcigiLmVsLXRhYmxlX19ib2R5IiksaT10aGlzLnNjcm9sbFkscj1uLm9mZnNldEhlaWdodD50aGlzLmJvZHlIZWlnaHQ7cmV0dXJuIHRoaXMuc2Nyb2xsWT1yLGkhPT1yfXJldHVybiExfSxlLnByb3RvdHlwZS5zZXRIZWlnaHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiaGVpZ2h0IjtpZighamkuYS5wcm90b3R5cGUuJGlzU2VydmVyKXt2YXIgaT10aGlzLnRhYmxlLiRlbDtpZihlPW5yKGUpLHRoaXMuaGVpZ2h0PWUsIWkmJihlfHwwPT09ZSkpcmV0dXJuIGppLmEubmV4dFRpY2soKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2V0SGVpZ2h0KGUsbil9KSk7Im51bWJlciI9PT10eXBlb2YgZT8oaS5zdHlsZVtuXT1lKyJweCIsdGhpcy51cGRhdGVFbHNIZWlnaHQoKSk6InN0cmluZyI9PT10eXBlb2YgZSYmKGkuc3R5bGVbbl09ZSx0aGlzLnVwZGF0ZUVsc0hlaWdodCgpKX19LGUucHJvdG90eXBlLnNldE1heEhlaWdodD1mdW5jdGlvbihlKXt0aGlzLnNldEhlaWdodChlLCJtYXgtaGVpZ2h0Iil9LGUucHJvdG90eXBlLmdldEZsYXR0ZW5Db2x1bW5zPWZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLnRhYmxlLmNvbHVtbnM7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pc0NvbHVtbkdyb3VwP2UucHVzaC5hcHBseShlLHQuY29sdW1ucyk6ZS5wdXNoKHQpfSkpLGV9LGUucHJvdG90eXBlLnVwZGF0ZUVsc0hlaWdodD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMudGFibGUuJHJlYWR5KXJldHVybiBqaS5hLm5leHRUaWNrKChmdW5jdGlvbigpe3JldHVybiBlLnVwZGF0ZUVsc0hlaWdodCgpfSkpO3ZhciB0PXRoaXMudGFibGUuJHJlZnMsbj10LmhlYWRlcldyYXBwZXIsaT10LmFwcGVuZFdyYXBwZXIscj10LmZvb3RlcldyYXBwZXI7aWYodGhpcy5hcHBlbmRIZWlnaHQ9aT9pLm9mZnNldEhlaWdodDowLCF0aGlzLnNob3dIZWFkZXJ8fG4pe3ZhciBvPW4/bi5xdWVyeVNlbGVjdG9yKCIuZWwtdGFibGVfX2hlYWRlciB0ciIpOm51bGwsYT10aGlzLmhlYWRlckRpc3BsYXlOb25lKG8pLHM9dGhpcy5oZWFkZXJIZWlnaHQ9dGhpcy5zaG93SGVhZGVyP24ub2Zmc2V0SGVpZ2h0OjA7aWYodGhpcy5zaG93SGVhZGVyJiYhYSYmbi5vZmZzZXRXaWR0aD4wJiYodGhpcy50YWJsZS5jb2x1bW5zfHxbXSkubGVuZ3RoPjAmJnM8MilyZXR1cm4gamkuYS5uZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gZS51cGRhdGVFbHNIZWlnaHQoKX0pKTt2YXIgbD10aGlzLnRhYmxlSGVpZ2h0PXRoaXMudGFibGUuJGVsLmNsaWVudEhlaWdodCxjPXRoaXMuZm9vdGVySGVpZ2h0PXI/ci5vZmZzZXRIZWlnaHQ6MDtudWxsIT09dGhpcy5oZWlnaHQmJih0aGlzLmJvZHlIZWlnaHQ9bC1zLWMrKHI/MTowKSksdGhpcy5maXhlZEJvZHlIZWlnaHQ9dGhpcy5zY3JvbGxYP3RoaXMuYm9keUhlaWdodC10aGlzLmd1dHRlcldpZHRoOnRoaXMuYm9keUhlaWdodDt2YXIgdT0hKHRoaXMuc3RvcmUuc3RhdGVzLmRhdGEmJnRoaXMuc3RvcmUuc3RhdGVzLmRhdGEubGVuZ3RoKTt0aGlzLnZpZXdwb3J0SGVpZ2h0PXRoaXMuc2Nyb2xsWD9sLSh1PzA6dGhpcy5ndXR0ZXJXaWR0aCk6bCx0aGlzLnVwZGF0ZVNjcm9sbFkoKSx0aGlzLm5vdGlmeU9ic2VydmVycygic2Nyb2xsYWJsZSIpfX0sZS5wcm90b3R5cGUuaGVhZGVyRGlzcGxheU5vbmU9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITA7dmFyIHQ9ZTt3aGlsZSgiRElWIiE9PXQudGFnTmFtZSl7aWYoIm5vbmUiPT09Z2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5KXJldHVybiEwO3Q9dC5wYXJlbnRFbGVtZW50fXJldHVybiExfSxlLnByb3RvdHlwZS51cGRhdGVDb2x1bW5zV2lkdGg9ZnVuY3Rpb24oKXtpZighamkuYS5wcm90b3R5cGUuJGlzU2VydmVyKXt2YXIgZT10aGlzLmZpdCx0PXRoaXMudGFibGUuJGVsLmNsaWVudFdpZHRoLG49MCxpPXRoaXMuZ2V0RmxhdHRlbkNvbHVtbnMoKSxyPWkuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIiE9PXR5cGVvZiBlLndpZHRofSkpO2lmKGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Im51bWJlciI9PT10eXBlb2YgZS53aWR0aCYmZS5yZWFsV2lkdGgmJihlLnJlYWxXaWR0aD1udWxsKX0pKSxyLmxlbmd0aD4wJiZlKXtpLmZvckVhY2goKGZ1bmN0aW9uKGUpe24rPWUud2lkdGh8fGUubWluV2lkdGh8fDgwfSkpO3ZhciBvPXRoaXMuc2Nyb2xsWT90aGlzLmd1dHRlcldpZHRoOjA7aWYobjw9dC1vKXt0aGlzLnNjcm9sbFg9ITE7dmFyIGE9dC1vLW47aWYoMT09PXIubGVuZ3RoKXJbMF0ucmVhbFdpZHRoPShyWzBdLm1pbldpZHRofHw4MCkrYTtlbHNle3ZhciBzPXIucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiBlKyh0Lm1pbldpZHRofHw4MCl9KSwwKSxsPWEvcyxjPTA7ci5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKDAhPT10KXt2YXIgbj1NYXRoLmZsb29yKChlLm1pbldpZHRofHw4MCkqbCk7Yys9bixlLnJlYWxXaWR0aD0oZS5taW5XaWR0aHx8ODApK259fSkpLHJbMF0ucmVhbFdpZHRoPShyWzBdLm1pbldpZHRofHw4MCkrYS1jfX1lbHNlIHRoaXMuc2Nyb2xsWD0hMCxyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVhbFdpZHRoPWUubWluV2lkdGh9KSk7dGhpcy5ib2R5V2lkdGg9TWF0aC5tYXgobix0KSx0aGlzLnRhYmxlLnJlc2l6ZVN0YXRlLndpZHRoPXRoaXMuYm9keVdpZHRofWVsc2UgaS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLndpZHRofHxlLm1pbldpZHRoP2UucmVhbFdpZHRoPWUud2lkdGh8fGUubWluV2lkdGg6ZS5yZWFsV2lkdGg9ODAsbis9ZS5yZWFsV2lkdGh9KSksdGhpcy5zY3JvbGxYPW4+dCx0aGlzLmJvZHlXaWR0aD1uO3ZhciB1PXRoaXMuc3RvcmUuc3RhdGVzLmZpeGVkQ29sdW1ucztpZih1Lmxlbmd0aD4wKXt2YXIgaD0wO3UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aCs9ZS5yZWFsV2lkdGh8fGUud2lkdGh9KSksdGhpcy5maXhlZFdpZHRoPWh9dmFyIGQ9dGhpcy5zdG9yZS5zdGF0ZXMucmlnaHRGaXhlZENvbHVtbnM7aWYoZC5sZW5ndGg+MCl7dmFyIGY9MDtkLmZvckVhY2goKGZ1bmN0aW9uKGUpe2YrPWUucmVhbFdpZHRofHxlLndpZHRofSkpLHRoaXMucmlnaHRGaXhlZFdpZHRoPWZ9dGhpcy5ub3RpZnlPYnNlcnZlcnMoImNvbHVtbnMiKX19LGUucHJvdG90eXBlLmFkZE9ic2VydmVyPWZ1bmN0aW9uKGUpe3RoaXMub2JzZXJ2ZXJzLnB1c2goZSl9LGUucHJvdG90eXBlLnJlbW92ZU9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2JzZXJ2ZXJzLmluZGV4T2YoZSk7LTEhPT10JiZ0aGlzLm9ic2VydmVycy5zcGxpY2UodCwxKX0sZS5wcm90b3R5cGUubm90aWZ5T2JzZXJ2ZXJzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLm9ic2VydmVycztuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3N3aXRjaChlKXtjYXNlImNvbHVtbnMiOm4ub25Db2x1bW5zQ2hhbmdlKHQpO2JyZWFrO2Nhc2Uic2Nyb2xsYWJsZSI6bi5vblNjcm9sbGFibGVDaGFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlRhYmxlIExheW91dCBkb24ndCBoYXZlIGV2ZW50ICIrZSsiLiIpfX0pKX0sZX0oKSx4cj1icixfcj17Y3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudGFibGVMYXlvdXQuYWRkT2JzZXJ2ZXIodGhpcyl9LGRlc3Ryb3llZDpmdW5jdGlvbigpe3RoaXMudGFibGVMYXlvdXQucmVtb3ZlT2JzZXJ2ZXIodGhpcyl9LGNvbXB1dGVkOnt0YWJsZUxheW91dDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGF5b3V0O2lmKCFlJiZ0aGlzLnRhYmxlJiYoZT10aGlzLnRhYmxlLmxheW91dCksIWUpdGhyb3cgbmV3IEVycm9yKCJDYW4gbm90IGZpbmQgdGFibGUgbGF5b3V0LiIpO3JldHVybiBlfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMub25Db2x1bW5zQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpLHRoaXMub25TY3JvbGxhYmxlQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3VwZGF0ZWRfX3x8KHRoaXMub25Db2x1bW5zQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpLHRoaXMub25TY3JvbGxhYmxlQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpLHRoaXMuX191cGRhdGVkX189ITApfSxtZXRob2RzOntvbkNvbHVtbnNDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgiY29sZ3JvdXAgPiBjb2wiKTtpZih0Lmxlbmd0aCl7dmFyIG49ZS5nZXRGbGF0dGVuQ29sdW1ucygpLGk9e307bi5mb3JFYWNoKChmdW5jdGlvbihlKXtpW2UuaWRdPWV9KSk7Zm9yKHZhciByPTAsbz10Lmxlbmd0aDtyPG87cisrKXt2YXIgYT10W3JdLHM9YS5nZXRBdHRyaWJ1dGUoIm5hbWUiKSxsPWlbc107bCYmYS5zZXRBdHRyaWJ1dGUoIndpZHRoIixsLnJlYWxXaWR0aHx8bC53aWR0aCl9fX0sb25TY3JvbGxhYmxlQ2hhbmdlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCJjb2xncm91cCA+IGNvbFtuYW1lPWd1dHRlcl0iKSxuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXt2YXIgcj10W25dO3Iuc2V0QXR0cmlidXRlKCJ3aWR0aCIsZS5zY3JvbGxZP2UuZ3V0dGVyV2lkdGg6IjAiKX1mb3IodmFyIG89dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgidGguZ3V0dGVyIiksYT0wLHM9by5sZW5ndGg7YTxzO2ErKyl7dmFyIGw9b1thXTtsLnN0eWxlLndpZHRoPWUuc2Nyb2xsWT9lLmd1dHRlcldpZHRoKyJweCI6IjAiLGwuc3R5bGUuZGlzcGxheT1lLnNjcm9sbFk/IiI6Im5vbmUifX19fSx3cj0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sU3I9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYoZVtpXT1uW2ldKX1yZXR1cm4gZX0sQ3I9e25hbWU6IkVsVGFibGVCb2R5IixtaXhpbnM6W19yXSxjb21wb25lbnRzOntFbENoZWNrYm94OkxpLmEsRWxUb29sdGlwOnJ0LmF9LHByb3BzOntzdG9yZTp7cmVxdWlyZWQ6ITB9LHN0cmlwZTpCb29sZWFuLGNvbnRleHQ6e30scm93Q2xhc3NOYW1lOltTdHJpbmcsRnVuY3Rpb25dLHJvd1N0eWxlOltPYmplY3QsRnVuY3Rpb25dLGZpeGVkOlN0cmluZyxoaWdobGlnaHQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj10aGlzLmRhdGF8fFtdO3JldHVybiBlKCJ0YWJsZSIse2NsYXNzOiJlbC10YWJsZV9fYm9keSIsYXR0cnM6e2NlbGxzcGFjaW5nOiIwIixjZWxscGFkZGluZzoiMCIsYm9yZGVyOiIwIn19LFtlKCJjb2xncm91cCIsW3RoaXMuY29sdW1ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlKCJjb2wiLHthdHRyczp7bmFtZTp0LmlkfSxrZXk6dC5pZH0pfSkpXSksZSgidGJvZHkiLFtuLnJlZHVjZSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZS5jb25jYXQodC53cmFwcGVkUm93UmVuZGVyKG4sZS5sZW5ndGgpKX0pLFtdKSxlKCJlbC10b29sdGlwIix7YXR0cnM6e2VmZmVjdDp0aGlzLnRhYmxlLnRvb2x0aXBFZmZlY3QscGxhY2VtZW50OiJ0b3AiLGNvbnRlbnQ6dGhpcy50b29sdGlwQ29udGVudH0scmVmOiJ0b29sdGlwIn0pXSldKX0sY29tcHV0ZWQ6U3Ioe3RhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudH19LG1yKHtkYXRhOiJkYXRhIixjb2x1bW5zOiJjb2x1bW5zIix0cmVlSW5kZW50OiJpbmRlbnQiLGxlZnRGaXhlZExlYWZDb3VudDoiZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCIscmlnaHRGaXhlZExlYWZDb3VudDoicmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoIixjb2x1bW5zQ291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29sdW1ucy5sZW5ndGh9LGxlZnRGaXhlZENvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLmZpeGVkQ29sdW1ucy5sZW5ndGh9LHJpZ2h0Rml4ZWRDb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGh9LGhhc0V4cGFuZENvbHVtbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb2x1bW5zLnNvbWUoKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4iZXhwYW5kIj09PXR9KSl9fSkse2ZpcnN0RGVmYXVsdENvbHVtbkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdCh5WyJhcnJheUZpbmRJbmRleCJdKSh0aGlzLmNvbHVtbnMsKGZ1bmN0aW9uKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4iZGVmYXVsdCI9PT10fSkpfX0pLHdhdGNoOnsic3RvcmUuc3RhdGVzLmhvdmVyUm93IjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy5zdG9yZS5zdGF0ZXMuaXNDb21wbGV4JiYhdGhpcy4kaXNTZXJ2ZXIpe3ZhciBpPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7aXx8KGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHNldFRpbWVvdXQoZSwxNil9KSxpKChmdW5jdGlvbigpe3ZhciBpPW4uJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5lbC10YWJsZV9fcm93Iikscj1pW3RdLG89aVtlXTtyJiZPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKHIsImhvdmVyLXJvdyIpLG8mJk9iamVjdCh6ZVsiYWRkQ2xhc3MiXSkobywiaG92ZXItcm93Iil9KSl9fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0b29sdGlwQ29udGVudDoiIn19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2YXRlVG9vbHRpcD0kKCkoNTAsKGZ1bmN0aW9uKGUpe3JldHVybiBlLmhhbmRsZVNob3dQb3BwZXIoKX0pKX0sbWV0aG9kczp7Z2V0S2V5T2ZSb3c6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnRhYmxlLnJvd0tleTtyZXR1cm4gbj9LaShlLG4pOnR9LGlzQ29sdW1uSGlkZGVuOmZ1bmN0aW9uKGUpe3JldHVybiEwPT09dGhpcy5maXhlZHx8ImxlZnQiPT09dGhpcy5maXhlZD9lPj10aGlzLmxlZnRGaXhlZExlYWZDb3VudDoicmlnaHQiPT09dGhpcy5maXhlZD9lPHRoaXMuY29sdW1uc0NvdW50LXRoaXMucmlnaHRGaXhlZExlYWZDb3VudDplPHRoaXMubGVmdEZpeGVkTGVhZkNvdW50fHxlPj10aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnR9LGdldFNwYW46ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9MSxvPTEsYT10aGlzLnRhYmxlLnNwYW5NZXRob2Q7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiBhKXt2YXIgcz1hKHtyb3c6ZSxjb2x1bW46dCxyb3dJbmRleDpuLGNvbHVtbkluZGV4Oml9KTtBcnJheS5pc0FycmF5KHMpPyhyPXNbMF0sbz1zWzFdKToib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09PXR5cGVvZiBzPyJ1bmRlZmluZWQiOndyKHMpKSYmKHI9cy5yb3dzcGFuLG89cy5jb2xzcGFuKX1yZXR1cm57cm93c3BhbjpyLGNvbHNwYW46b319LGdldFJvd1N0eWxlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy50YWJsZS5yb3dTdHlsZTtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIG4/bi5jYWxsKG51bGwse3JvdzplLHJvd0luZGV4OnR9KTpufHxudWxsfSxnZXRSb3dDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPVsiZWwtdGFibGVfX3JvdyJdO3RoaXMudGFibGUuaGlnaGxpZ2h0Q3VycmVudFJvdyYmZT09PXRoaXMuc3RvcmUuc3RhdGVzLmN1cnJlbnRSb3cmJm4ucHVzaCgiY3VycmVudC1yb3ciKSx0aGlzLnN0cmlwZSYmdCUyPT09MSYmbi5wdXNoKCJlbC10YWJsZV9fcm93LS1zdHJpcGVkIik7dmFyIGk9dGhpcy50YWJsZS5yb3dDbGFzc05hbWU7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgaT9uLnB1c2goaSk6ImZ1bmN0aW9uIj09PXR5cGVvZiBpJiZuLnB1c2goaS5jYWxsKG51bGwse3JvdzplLHJvd0luZGV4OnR9KSksdGhpcy5zdG9yZS5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKGUpPi0xJiZuLnB1c2goImV4cGFuZGVkIiksbn0sZ2V0Q2VsbFN0eWxlOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXRoaXMudGFibGUuY2VsbFN0eWxlO3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2Ygcj9yLmNhbGwobnVsbCx7cm93SW5kZXg6ZSxjb2x1bW5JbmRleDp0LHJvdzpuLGNvbHVtbjppfSk6cn0sZ2V0Q2VsbENsYXNzOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPVtpLmlkLGkuYWxpZ24saS5jbGFzc05hbWVdO3RoaXMuaXNDb2x1bW5IaWRkZW4odCkmJnIucHVzaCgiaXMtaGlkZGVuIik7dmFyIG89dGhpcy50YWJsZS5jZWxsQ2xhc3NOYW1lO3JldHVybiJzdHJpbmciPT09dHlwZW9mIG8/ci5wdXNoKG8pOiJmdW5jdGlvbiI9PT10eXBlb2YgbyYmci5wdXNoKG8uY2FsbChudWxsLHtyb3dJbmRleDplLGNvbHVtbkluZGV4OnQscm93Om4sY29sdW1uOml9KSksci5qb2luKCIgIil9LGdldENvbHNwYW5SZWFsV2lkdGg6ZnVuY3Rpb24oZSx0LG4pe2lmKHQ8MSlyZXR1cm4gZVtuXS5yZWFsV2lkdGg7dmFyIGk9ZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVhbFdpZHRoO3JldHVybiB0fSkpLnNsaWNlKG4sbit0KTtyZXR1cm4gaS5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0pLC0xKX0saGFuZGxlQ2VsbE1vdXNlRW50ZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnRhYmxlLGk9V2koZSk7aWYoaSl7dmFyIHI9WGkobixpKSxvPW4uaG92ZXJTdGF0ZT17Y2VsbDppLGNvbHVtbjpyLHJvdzp0fTtuLiRlbWl0KCJjZWxsLW1vdXNlLWVudGVyIixvLnJvdyxvLmNvbHVtbixvLmNlbGwsZSl9dmFyIGE9ZS50YXJnZXQucXVlcnlTZWxlY3RvcigiLmNlbGwiKTtpZihPYmplY3QoemVbImhhc0NsYXNzIl0pKGEsImVsLXRvb2x0aXAiKSYmYS5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIHM9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtzLnNldFN0YXJ0KGEsMCkscy5zZXRFbmQoYSxhLmNoaWxkTm9kZXMubGVuZ3RoKTt2YXIgbD1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGM9KHBhcnNlSW50KE9iamVjdCh6ZVsiZ2V0U3R5bGUiXSkoYSwicGFkZGluZ0xlZnQiKSwxMCl8fDApKyhwYXJzZUludChPYmplY3QoemVbImdldFN0eWxlIl0pKGEsInBhZGRpbmdSaWdodCIpLDEwKXx8MCk7aWYoKGwrYz5hLm9mZnNldFdpZHRofHxhLnNjcm9sbFdpZHRoPmEub2Zmc2V0V2lkdGgpJiZ0aGlzLiRyZWZzLnRvb2x0aXApe3ZhciB1PXRoaXMuJHJlZnMudG9vbHRpcDt0aGlzLnRvb2x0aXBDb250ZW50PWkuaW5uZXJUZXh0fHxpLnRleHRDb250ZW50LHUucmVmZXJlbmNlRWxtPWksdS4kcmVmcy5wb3BwZXImJih1LiRyZWZzLnBvcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIiksdS5kb0Rlc3Ryb3koKSx1LnNldEV4cGVjdGVkU3RhdGUoITApLHRoaXMuYWN0aXZhdGVUb29sdGlwKHUpfX19LGhhbmRsZUNlbGxNb3VzZUxlYXZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJHJlZnMudG9vbHRpcDt0JiYodC5zZXRFeHBlY3RlZFN0YXRlKCExKSx0LmhhbmRsZUNsb3NlUG9wcGVyKCkpO3ZhciBuPVdpKGUpO2lmKG4pe3ZhciBpPXRoaXMudGFibGUuaG92ZXJTdGF0ZXx8e307dGhpcy50YWJsZS4kZW1pdCgiY2VsbC1tb3VzZS1sZWF2ZSIsaS5yb3csaS5jb2x1bW4saS5jZWxsLGUpfX0saGFuZGxlTW91c2VFbnRlcjokKCkoMzAsKGZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuY29tbWl0KCJzZXRIb3ZlclJvdyIsZSl9KSksaGFuZGxlTW91c2VMZWF2ZTokKCkoMzAsKGZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoInNldEhvdmVyUm93IixudWxsKX0pKSxoYW5kbGVDb250ZXh0TWVudTpmdW5jdGlvbihlLHQpe3RoaXMuaGFuZGxlRXZlbnQoZSx0LCJjb250ZXh0bWVudSIpfSxoYW5kbGVEb3VibGVDbGljazpmdW5jdGlvbihlLHQpe3RoaXMuaGFuZGxlRXZlbnQoZSx0LCJkYmxjbGljayIpfSxoYW5kbGVDbGljazpmdW5jdGlvbihlLHQpe3RoaXMuc3RvcmUuY29tbWl0KCJzZXRDdXJyZW50Um93Iix0KSx0aGlzLmhhbmRsZUV2ZW50KGUsdCwiY2xpY2siKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMudGFibGUscj1XaShlKSxvPXZvaWQgMDtyJiYobz1YaShpLHIpLG8mJmkuJGVtaXQoImNlbGwtIituLHQsbyxyLGUpKSxpLiRlbWl0KCJyb3ctIituLHQsbyxlKX0scm93UmVuZGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLHI9dGhpcy4kY3JlYXRlRWxlbWVudCxvPXRoaXMudHJlZUluZGVudCxhPXRoaXMuY29sdW1ucyxzPXRoaXMuZmlyc3REZWZhdWx0Q29sdW1uSW5kZXgsbD1hLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5pc0NvbHVtbkhpZGRlbih0KX0pKSxjPXRoaXMuZ2V0Um93Q2xhc3MoZSx0KSx1PSEwO24mJihjLnB1c2goImVsLXRhYmxlX19yb3ctLWxldmVsLSIrbi5sZXZlbCksdT1uLmRpc3BsYXkpO3ZhciBoPXU/bnVsbDp7ZGlzcGxheToibm9uZSJ9O3JldHVybiByKCJ0ciIse3N0eWxlOltoLHRoaXMuZ2V0Um93U3R5bGUoZSx0KV0sY2xhc3M6YyxrZXk6dGhpcy5nZXRLZXlPZlJvdyhlLHQpLG9uOntkYmxjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gaS5oYW5kbGVEb3VibGVDbGljayh0LGUpfSxjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gaS5oYW5kbGVDbGljayh0LGUpfSxjb250ZXh0bWVudTpmdW5jdGlvbih0KXtyZXR1cm4gaS5oYW5kbGVDb250ZXh0TWVudSh0LGUpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKGUpe3JldHVybiBpLmhhbmRsZU1vdXNlRW50ZXIodCl9LG1vdXNlbGVhdmU6dGhpcy5oYW5kbGVNb3VzZUxlYXZlfX0sW2EubWFwKChmdW5jdGlvbihjLHUpe3ZhciBoPWkuZ2V0U3BhbihlLGMsdCx1KSxkPWgucm93c3BhbixmPWguY29sc3BhbjtpZighZHx8IWYpcmV0dXJuIG51bGw7dmFyIHA9U3Ioe30sYyk7cC5yZWFsV2lkdGg9aS5nZXRDb2xzcGFuUmVhbFdpZHRoKGEsZix1KTt2YXIgbT17c3RvcmU6aS5zdG9yZSxfc2VsZjppLmNvbnRleHR8fGkudGFibGUuJHZub2RlLmNvbnRleHQsY29sdW1uOnAscm93OmUsJGluZGV4OnR9O3JldHVybiB1PT09cyYmbiYmKG0udHJlZU5vZGU9e2luZGVudDpuLmxldmVsKm8sbGV2ZWw6bi5sZXZlbH0sImJvb2xlYW4iPT09dHlwZW9mIG4uZXhwYW5kZWQmJihtLnRyZWVOb2RlLmV4cGFuZGVkPW4uZXhwYW5kZWQsImxvYWRpbmciaW4gbiYmKG0udHJlZU5vZGUubG9hZGluZz1uLmxvYWRpbmcpLCJub0xhenlDaGlsZHJlbiJpbiBuJiYobS50cmVlTm9kZS5ub0xhenlDaGlsZHJlbj1uLm5vTGF6eUNoaWxkcmVuKSkpLHIoInRkIix7c3R5bGU6aS5nZXRDZWxsU3R5bGUodCx1LGUsYyksY2xhc3M6aS5nZXRDZWxsQ2xhc3ModCx1LGUsYyksYXR0cnM6e3Jvd3NwYW46ZCxjb2xzcGFuOmZ9LG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBpLmhhbmRsZUNlbGxNb3VzZUVudGVyKHQsZSl9LG1vdXNlbGVhdmU6aS5oYW5kbGVDZWxsTW91c2VMZWF2ZX19LFtjLnJlbmRlckNlbGwuY2FsbChpLl9yZW5kZXJQcm94eSxpLiRjcmVhdGVFbGVtZW50LG0sbFt1XSldKX0pKV0pfSx3cmFwcGVkUm93UmVuZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxpPXRoaXMuJGNyZWF0ZUVsZW1lbnQscj10aGlzLnN0b3JlLG89ci5pc1Jvd0V4cGFuZGVkLGE9ci5hc3NlcnRSb3dLZXkscz1yLnN0YXRlcyxsPXMudHJlZURhdGEsYz1zLmxhenlUcmVlTm9kZU1hcCx1PXMuY2hpbGRyZW5Db2x1bW5OYW1lLGg9cy5yb3dLZXk7aWYodGhpcy5oYXNFeHBhbmRDb2x1bW4mJm8oZSkpe3ZhciBkPXRoaXMudGFibGUucmVuZGVyRXhwYW5kZWQsZj10aGlzLnJvd1JlbmRlcihlLHQpO3JldHVybiBkP1tbZixpKCJ0ciIse2tleToiZXhwYW5kZWQtcm93X18iK2Yua2V5fSxbaSgidGQiLHthdHRyczp7Y29sc3Bhbjp0aGlzLmNvbHVtbnNDb3VudH0sY2xhc3M6ImVsLXRhYmxlX19leHBhbmRlZC1jZWxsIn0sW2QodGhpcy4kY3JlYXRlRWxlbWVudCx7cm93OmUsJGluZGV4OnQsc3RvcmU6dGhpcy5zdG9yZX0pXSldKV1dOihjb25zb2xlLmVycm9yKCJbRWxlbWVudCBFcnJvcl1yZW5kZXJFeHBhbmRlZCBpcyByZXF1aXJlZC4iKSxmKX1pZihPYmplY3Qua2V5cyhsKS5sZW5ndGgpe2EoKTt2YXIgcD1LaShlLGgpLG09bFtwXSxnPW51bGw7bSYmKGc9e2V4cGFuZGVkOm0uZXhwYW5kZWQsbGV2ZWw6bS5sZXZlbCxkaXNwbGF5OiEwfSwiYm9vbGVhbiI9PT10eXBlb2YgbS5sYXp5JiYoImJvb2xlYW4iPT09dHlwZW9mIG0ubG9hZGVkJiZtLmxvYWRlZCYmKGcubm9MYXp5Q2hpbGRyZW49IShtLmNoaWxkcmVuJiZtLmNoaWxkcmVuLmxlbmd0aCkpLGcubG9hZGluZz1tLmxvYWRpbmcpKTt2YXIgdj1bdGhpcy5yb3dSZW5kZXIoZSx0LGcpXTtpZihtKXt2YXIgeT0wLGI9ZnVuY3Rpb24gZShpLHIpe2kmJmkubGVuZ3RoJiZyJiZpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBvPXtkaXNwbGF5OnIuZGlzcGxheSYmci5leHBhbmRlZCxsZXZlbDpyLmxldmVsKzF9LGE9S2koaSxoKTtpZih2b2lkIDA9PT1hfHxudWxsPT09YSl0aHJvdyBuZXcgRXJyb3IoImZvciBuZXN0ZWQgZGF0YSBpdGVtLCByb3cta2V5IGlzIHJlcXVpcmVkLiIpO2lmKG09U3Ioe30sbFthXSksbSYmKG8uZXhwYW5kZWQ9bS5leHBhbmRlZCxtLmxldmVsPW0ubGV2ZWx8fG8ubGV2ZWwsbS5kaXNwbGF5PSEoIW0uZXhwYW5kZWR8fCFvLmRpc3BsYXkpLCJib29sZWFuIj09PXR5cGVvZiBtLmxhenkmJigiYm9vbGVhbiI9PT10eXBlb2YgbS5sb2FkZWQmJm0ubG9hZGVkJiYoby5ub0xhenlDaGlsZHJlbj0hKG0uY2hpbGRyZW4mJm0uY2hpbGRyZW4ubGVuZ3RoKSksby5sb2FkaW5nPW0ubG9hZGluZykpLHkrKyx2LnB1c2gobi5yb3dSZW5kZXIoaSx0K3ksbykpLG0pe3ZhciBzPWNbYV18fGlbdV07ZShzLG0pfX0pKX07bS5kaXNwbGF5PSEwO3ZhciB4PWNbcF18fGVbdV07Yih4LG0pfXJldHVybiB2fXJldHVybiB0aGlzLnJvd1JlbmRlcihlLHQpfX19LGtyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn19LFtlLm11bHRpcGxlP24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTplLmhhbmRsZU91dHNpZGVDbGljayxleHByZXNzaW9uOiJoYW5kbGVPdXRzaWRlQ2xpY2sifSx7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnNob3dQb3BwZXIsZXhwcmVzc2lvbjoic2hvd1BvcHBlciJ9XSxzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyIn0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2NvbnRlbnQifSxbbigiZWwtc2Nyb2xsYmFyIix7YXR0cnM6eyJ3cmFwLWNsYXNzIjoiZWwtdGFibGUtZmlsdGVyX193cmFwIn19LFtuKCJlbC1jaGVja2JveC1ncm91cCIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2NoZWNrYm94LWdyb3VwIixtb2RlbDp7dmFsdWU6ZS5maWx0ZXJlZFZhbHVlLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe2UuZmlsdGVyZWRWYWx1ZT10fSxleHByZXNzaW9uOiJmaWx0ZXJlZFZhbHVlIn19LGUuX2woZS5maWx0ZXJzLChmdW5jdGlvbih0KXtyZXR1cm4gbigiZWwtY2hlY2tib3giLHtrZXk6dC52YWx1ZSxhdHRyczp7bGFiZWw6dC52YWx1ZX19LFtlLl92KGUuX3ModC50ZXh0KSldKX0pKSwxKV0sMSldLDEpLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2JvdHRvbSJ9LFtuKCJidXR0b24iLHtjbGFzczp7ImlzLWRpc2FibGVkIjowPT09ZS5maWx0ZXJlZFZhbHVlLmxlbmd0aH0sYXR0cnM6e2Rpc2FibGVkOjA9PT1lLmZpbHRlcmVkVmFsdWUubGVuZ3RofSxvbjp7Y2xpY2s6ZS5oYW5kbGVDb25maXJtfX0sW2UuX3YoZS5fcyhlLnQoImVsLnRhYmxlLmNvbmZpcm1GaWx0ZXIiKSkpXSksbigiYnV0dG9uIix7b246e2NsaWNrOmUuaGFuZGxlUmVzZXR9fSxbZS5fdihlLl9zKGUudCgiZWwudGFibGUucmVzZXRGaWx0ZXIiKSkpXSldKV0pOm4oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTplLmhhbmRsZU91dHNpZGVDbGljayxleHByZXNzaW9uOiJoYW5kbGVPdXRzaWRlQ2xpY2sifSx7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnNob3dQb3BwZXIsZXhwcmVzc2lvbjoic2hvd1BvcHBlciJ9XSxzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyIn0sW24oInVsIix7c3RhdGljQ2xhc3M6ImVsLXRhYmxlLWZpbHRlcl9fbGlzdCJ9LFtuKCJsaSIse3N0YXRpY0NsYXNzOiJlbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbSIsY2xhc3M6eyJpcy1hY3RpdmUiOnZvaWQgMD09PWUuZmlsdGVyVmFsdWV8fG51bGw9PT1lLmZpbHRlclZhbHVlfSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5oYW5kbGVTZWxlY3QobnVsbCl9fX0sW2UuX3YoZS5fcyhlLnQoImVsLnRhYmxlLmNsZWFyRmlsdGVyIikpKV0pLGUuX2woZS5maWx0ZXJzLChmdW5jdGlvbih0KXtyZXR1cm4gbigibGkiLHtrZXk6dC52YWx1ZSxzdGF0aWNDbGFzczoiZWwtdGFibGUtZmlsdGVyX19saXN0LWl0ZW0iLGNsYXNzOnsiaXMtYWN0aXZlIjplLmlzQWN0aXZlKHQpfSxhdHRyczp7bGFiZWw6dC52YWx1ZX0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe2UuaGFuZGxlU2VsZWN0KHQudmFsdWUpfX19LFtlLl92KGUuX3ModC50ZXh0KSldKX0pKV0sMildKV0pfSxUcj1bXTtrci5fd2l0aFN0cmlwcGVkPSEwO3ZhciBNcj1bXTshamkuYS5wcm90b3R5cGUuJGlzU2VydmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKGUpe01yLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUudGFyZ2V0O3QmJnQuJGVsJiYobj09PXQuJGVsfHx0LiRlbC5jb250YWlucyhuKXx8dC5oYW5kbGVPdXRzaWRlQ2xpY2smJnQuaGFuZGxlT3V0c2lkZUNsaWNrKGUpKX0pKX0pKTt2YXIgRXI9e29wZW46ZnVuY3Rpb24oZSl7ZSYmTXIucHVzaChlKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9TXIuaW5kZXhPZihlKTstMSE9PXQmJk1yLnNwbGljZShlLDEpfX0sSXI9bigzMSksRHI9bi5uKElyKSxBcj17bmFtZToiRWxUYWJsZUZpbHRlclBhbmVsIixtaXhpbnM6W0guYSx2LmFdLGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpCLmF9LGNvbXBvbmVudHM6e0VsQ2hlY2tib3g6TGkuYSxFbENoZWNrYm94R3JvdXA6RHIuYSxFbFNjcm9sbGJhcjpHLmF9LHByb3BzOntwbGFjZW1lbnQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImJvdHRvbS1lbmQifX0sbWV0aG9kczp7aXNBY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsdWU9PT10aGlzLmZpbHRlclZhbHVlfSxoYW5kbGVPdXRzaWRlQ2xpY2s6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5zaG93UG9wcGVyPSExfSksMTYpfSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uKCl7dGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSksdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKX0saGFuZGxlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmZpbHRlcmVkVmFsdWU9W10sdGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSksdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKX0saGFuZGxlU2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuZmlsdGVyVmFsdWU9ZSwidW5kZWZpbmVkIiE9PXR5cGVvZiBlJiZudWxsIT09ZT90aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTp0aGlzLmNvbmZpcm1GaWx0ZXIoW10pLHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrKCl9LGNvbmZpcm1GaWx0ZXI6ZnVuY3Rpb24oZSl7dGhpcy50YWJsZS5zdG9yZS5jb21taXQoImZpbHRlckNoYW5nZSIse2NvbHVtbjp0aGlzLmNvbHVtbix2YWx1ZXM6ZX0pLHRoaXMudGFibGUuc3RvcmUudXBkYXRlQWxsU2VsZWN0ZWQoKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFibGU6bnVsbCxjZWxsOm51bGwsY29sdW1uOm51bGx9fSxjb21wdXRlZDp7ZmlsdGVyczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbiYmdGhpcy5jb2x1bW4uZmlsdGVyc30sZmlsdGVyVmFsdWU6e2dldDpmdW5jdGlvbigpe3JldHVybih0aGlzLmNvbHVtbi5maWx0ZXJlZFZhbHVlfHxbXSlbMF19LHNldDpmdW5jdGlvbihlKXt0aGlzLmZpbHRlcmVkVmFsdWUmJigidW5kZWZpbmVkIiE9PXR5cGVvZiBlJiZudWxsIT09ZT90aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsMSxlKTp0aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsMSkpfX0sZmlsdGVyZWRWYWx1ZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sdW1uJiZ0aGlzLmNvbHVtbi5maWx0ZXJlZFZhbHVlfHxbXX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuY29sdW1uJiYodGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZT1lKX19LG11bHRpcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuY29sdW1ufHx0aGlzLmNvbHVtbi5maWx0ZXJNdWx0aXBsZX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMucG9wcGVyRWxtPXRoaXMuJGVsLHRoaXMucmVmZXJlbmNlRWxtPXRoaXMuY2VsbCx0aGlzLnRhYmxlLmJvZHlXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsKGZ1bmN0aW9uKCl7ZS51cGRhdGVQb3BwZXIoKX0pKSx0aGlzLiR3YXRjaCgic2hvd1BvcHBlciIsKGZ1bmN0aW9uKHQpe2UuY29sdW1uJiYoZS5jb2x1bW4uZmlsdGVyT3BlbmVkPXQpLHQ/RXIub3BlbihlKTpFci5jbG9zZShlKX0pKX0sd2F0Y2g6e3Nob3dQb3BwZXI6ZnVuY3Rpb24oZSl7ITA9PT1lJiZwYXJzZUludCh0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4LDEwKTxTWyJQb3B1cE1hbmFnZXIiXS56SW5kZXgmJih0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4PVNbIlBvcHVwTWFuYWdlciJdLm5leHRaSW5kZXgoKSl9fX0sT3I9QXIsUHI9cyhPcixrcixUciwhMSxudWxsLG51bGwsbnVsbCk7UHIub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlIjt2YXIgTHI9UHIuZXhwb3J0cyxOcj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJihlW2ldPW5baV0pfXJldHVybiBlfSxScj1mdW5jdGlvbiBlKHQpe3ZhciBuPVtdO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4/KG4ucHVzaCh0KSxuLnB1c2guYXBwbHkobixlKHQuY2hpbGRyZW4pKSk6bi5wdXNoKHQpfSkpLG59LCRyPWZ1bmN0aW9uKGUpe3ZhciB0PTEsbj1mdW5jdGlvbiBlKG4saSl7aWYoaSYmKG4ubGV2ZWw9aS5sZXZlbCsxLHQ8bi5sZXZlbCYmKHQ9bi5sZXZlbCkpLG4uY2hpbGRyZW4pe3ZhciByPTA7bi5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXtlKHQsbikscis9dC5jb2xTcGFufSkpLG4uY29sU3Bhbj1yfWVsc2Ugbi5jb2xTcGFuPTF9O2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5sZXZlbD0xLG4oZSl9KSk7Zm9yKHZhciBpPVtdLHI9MDtyPHQ7cisrKWkucHVzaChbXSk7dmFyIG89UnIoZSk7cmV0dXJuIG8uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbj9lLnJvd1NwYW49MTplLnJvd1NwYW49dC1lLmxldmVsKzEsaVtlLmxldmVsLTFdLnB1c2goZSl9KSksaX0senI9e25hbWU6IkVsVGFibGVIZWFkZXIiLG1peGluczpbX3JdLHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy5zdG9yZS5zdGF0ZXMub3JpZ2luQ29sdW1ucyxpPSRyKG4sdGhpcy5jb2x1bW5zKSxyPWkubGVuZ3RoPjE7cmV0dXJuIHImJih0aGlzLiRwYXJlbnQuaXNHcm91cD0hMCksZSgidGFibGUiLHtjbGFzczoiZWwtdGFibGVfX2hlYWRlciIsYXR0cnM6e2NlbGxzcGFjaW5nOiIwIixjZWxscGFkZGluZzoiMCIsYm9yZGVyOiIwIn19LFtlKCJjb2xncm91cCIsW3RoaXMuY29sdW1ucy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlKCJjb2wiLHthdHRyczp7bmFtZTp0LmlkfSxrZXk6dC5pZH0pfSkpLHRoaXMuaGFzR3V0dGVyP2UoImNvbCIse2F0dHJzOntuYW1lOiJndXR0ZXIifX0pOiIiXSksZSgidGhlYWQiLHtjbGFzczpbeyJpcy1ncm91cCI6ciwiaGFzLWd1dHRlciI6dGhpcy5oYXNHdXR0ZXJ9XX0sW3RoaXMuX2woaSwoZnVuY3Rpb24obixpKXtyZXR1cm4gZSgidHIiLHtzdHlsZTp0LmdldEhlYWRlclJvd1N0eWxlKGkpLGNsYXNzOnQuZ2V0SGVhZGVyUm93Q2xhc3MoaSl9LFtuLm1hcCgoZnVuY3Rpb24ocixvKXtyZXR1cm4gZSgidGgiLHthdHRyczp7Y29sc3BhbjpyLmNvbFNwYW4scm93c3BhbjpyLnJvd1NwYW59LG9uOnttb3VzZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlTW91c2VNb3ZlKGUscil9LG1vdXNlb3V0OnQuaGFuZGxlTW91c2VPdXQsbW91c2Vkb3duOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZU1vdXNlRG93bihlLHIpfSxjbGljazpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVIZWFkZXJDbGljayhlLHIpfSxjb250ZXh0bWVudTpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVIZWFkZXJDb250ZXh0TWVudShlLHIpfX0sc3R5bGU6dC5nZXRIZWFkZXJDZWxsU3R5bGUoaSxvLG4sciksY2xhc3M6dC5nZXRIZWFkZXJDZWxsQ2xhc3MoaSxvLG4sciksa2V5OnIuaWR9LFtlKCJkaXYiLHtjbGFzczpbImNlbGwiLHIuZmlsdGVyZWRWYWx1ZSYmci5maWx0ZXJlZFZhbHVlLmxlbmd0aD4wPyJoaWdobGlnaHQiOiIiLHIubGFiZWxDbGFzc05hbWVdfSxbci5yZW5kZXJIZWFkZXI/ci5yZW5kZXJIZWFkZXIuY2FsbCh0Ll9yZW5kZXJQcm94eSxlLHtjb2x1bW46ciwkaW5kZXg6byxzdG9yZTp0LnN0b3JlLF9zZWxmOnQuJHBhcmVudC4kdm5vZGUuY29udGV4dH0pOnIubGFiZWwsci5zb3J0YWJsZT9lKCJzcGFuIix7Y2xhc3M6ImNhcmV0LXdyYXBwZXIiLG9uOntjbGljazpmdW5jdGlvbihlKXtyZXR1cm4gdC5oYW5kbGVTb3J0Q2xpY2soZSxyKX19fSxbZSgiaSIse2NsYXNzOiJzb3J0LWNhcmV0IGFzY2VuZGluZyIsb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZVNvcnRDbGljayhlLHIsImFzY2VuZGluZyIpfX19KSxlKCJpIix7Y2xhc3M6InNvcnQtY2FyZXQgZGVzY2VuZGluZyIsb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZVNvcnRDbGljayhlLHIsImRlc2NlbmRpbmciKX19fSldKToiIixyLmZpbHRlcmFibGU/ZSgic3BhbiIse2NsYXNzOiJlbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2VyIixvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlRmlsdGVyQ2xpY2soZSxyKX19fSxbZSgiaSIse2NsYXNzOlsiZWwtaWNvbi1hcnJvdy1kb3duIixyLmZpbHRlck9wZW5lZD8iZWwtaWNvbi1hcnJvdy11cCI6IiJdfSldKToiIl0pXSl9KSksdC5oYXNHdXR0ZXI/ZSgidGgiLHtjbGFzczoiZ3V0dGVyIn0pOiIiXSl9KSldKV0pfSxwcm9wczp7Zml4ZWQ6U3RyaW5nLHN0b3JlOntyZXF1aXJlZDohMH0sYm9yZGVyOkJvb2xlYW4sZGVmYXVsdFNvcnQ6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcDoiIixvcmRlcjoiIn19fX0sY29tcG9uZW50czp7RWxDaGVja2JveDpMaS5hfSxjb21wdXRlZDpOcih7dGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50fSxoYXNHdXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5maXhlZCYmdGhpcy50YWJsZUxheW91dC5ndXR0ZXJXaWR0aH19LG1yKHtjb2x1bW5zOiJjb2x1bW5zIixpc0FsbFNlbGVjdGVkOiJpc0FsbFNlbGVjdGVkIixsZWZ0Rml4ZWRMZWFmQ291bnQ6ImZpeGVkTGVhZkNvbHVtbnNMZW5ndGgiLHJpZ2h0Rml4ZWRMZWFmQ291bnQ6InJpZ2h0Rml4ZWRMZWFmQ29sdW1uc0xlbmd0aCIsY29sdW1uc0NvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbHVtbnMubGVuZ3RofSxsZWZ0Rml4ZWRDb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5maXhlZENvbHVtbnMubGVuZ3RofSxyaWdodEZpeGVkQ291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RofX0pKSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5maWx0ZXJQYW5lbHM9e319LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3ZhciB0PWUuZGVmYXVsdFNvcnQsbj10LnByb3AsaT10Lm9yZGVyLHI9ITA7ZS5zdG9yZS5jb21taXQoInNvcnQiLHtwcm9wOm4sb3JkZXI6aSxpbml0OnJ9KX0pKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZmlsdGVyUGFuZWxzO2Zvcih2YXIgdCBpbiBlKWUuaGFzT3duUHJvcGVydHkodCkmJmVbdF0mJmVbdF0uJGRlc3Ryb3koITApfSxtZXRob2RzOntpc0NlbGxIaWRkZW46ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxpPTA7aTxlO2krKyluKz10W2ldLmNvbFNwYW47dmFyIHI9bit0W2VdLmNvbFNwYW4tMTtyZXR1cm4hMD09PXRoaXMuZml4ZWR8fCJsZWZ0Ij09PXRoaXMuZml4ZWQ/cj49dGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQ6InJpZ2h0Ij09PXRoaXMuZml4ZWQ/bjx0aGlzLmNvbHVtbnNDb3VudC10aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ6cjx0aGlzLmxlZnRGaXhlZExlYWZDb3VudHx8bj49dGhpcy5jb2x1bW5zQ291bnQtdGhpcy5yaWdodEZpeGVkTGVhZkNvdW50fSxnZXRIZWFkZXJSb3dTdHlsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRhYmxlLmhlYWRlclJvd1N0eWxlO3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgdD90LmNhbGwobnVsbCx7cm93SW5kZXg6ZX0pOnR9LGdldEhlYWRlclJvd0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dGhpcy50YWJsZS5oZWFkZXJSb3dDbGFzc05hbWU7cmV0dXJuInN0cmluZyI9PT10eXBlb2Ygbj90LnB1c2gobik6ImZ1bmN0aW9uIj09PXR5cGVvZiBuJiZ0LnB1c2gobi5jYWxsKG51bGwse3Jvd0luZGV4OmV9KSksdC5qb2luKCIgIil9LGdldEhlYWRlckNlbGxTdHlsZTpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj10aGlzLnRhYmxlLmhlYWRlckNlbGxTdHlsZTtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHI/ci5jYWxsKG51bGwse3Jvd0luZGV4OmUsY29sdW1uSW5kZXg6dCxyb3c6bixjb2x1bW46aX0pOnJ9LGdldEhlYWRlckNlbGxDbGFzczpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1baS5pZCxpLm9yZGVyLGkuaGVhZGVyQWxpZ24saS5jbGFzc05hbWUsaS5sYWJlbENsYXNzTmFtZV07MD09PWUmJnRoaXMuaXNDZWxsSGlkZGVuKHQsbikmJnIucHVzaCgiaXMtaGlkZGVuIiksaS5jaGlsZHJlbnx8ci5wdXNoKCJpcy1sZWFmIiksaS5zb3J0YWJsZSYmci5wdXNoKCJpcy1zb3J0YWJsZSIpO3ZhciBvPXRoaXMudGFibGUuaGVhZGVyQ2VsbENsYXNzTmFtZTtyZXR1cm4ic3RyaW5nIj09PXR5cGVvZiBvP3IucHVzaChvKToiZnVuY3Rpb24iPT09dHlwZW9mIG8mJnIucHVzaChvLmNhbGwobnVsbCx7cm93SW5kZXg6ZSxjb2x1bW5JbmRleDp0LHJvdzpuLGNvbHVtbjppfSkpLHIuam9pbigiICIpfSx0b2dnbGVBbGxTZWxlY3Rpb246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnN0b3JlLmNvbW1pdCgidG9nZ2xlQWxsU2VsZWN0aW9uIil9LGhhbmRsZUZpbHRlckNsaWNrOmZ1bmN0aW9uKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbj1lLnRhcmdldCxpPSJUSCI9PT1uLnRhZ05hbWU/bjpuLnBhcmVudE5vZGU7aWYoIU9iamVjdCh6ZVsiaGFzQ2xhc3MiXSkoaSwibm9jbGljayIpKXtpPWkucXVlcnlTZWxlY3RvcigiLmVsLXRhYmxlX19jb2x1bW4tZmlsdGVyLXRyaWdnZXIiKXx8aTt2YXIgcj10aGlzLiRwYXJlbnQsbz10aGlzLmZpbHRlclBhbmVsc1t0LmlkXTtvJiZ0LmZpbHRlck9wZW5lZD9vLnNob3dQb3BwZXI9ITE6KG98fChvPW5ldyBqaS5hKExyKSx0aGlzLmZpbHRlclBhbmVsc1t0LmlkXT1vLHQuZmlsdGVyUGxhY2VtZW50JiYoby5wbGFjZW1lbnQ9dC5maWx0ZXJQbGFjZW1lbnQpLG8udGFibGU9cixvLmNlbGw9aSxvLmNvbHVtbj10LCF0aGlzLiRpc1NlcnZlciYmby4kbW91bnQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe28uc2hvd1BvcHBlcj0hMH0pLDE2KSl9fSxoYW5kbGVIZWFkZXJDbGljazpmdW5jdGlvbihlLHQpeyF0LmZpbHRlcnMmJnQuc29ydGFibGU/dGhpcy5oYW5kbGVTb3J0Q2xpY2soZSx0KTp0LmZpbHRlcmFibGUmJiF0LnNvcnRhYmxlJiZ0aGlzLmhhbmRsZUZpbHRlckNsaWNrKGUsdCksdGhpcy4kcGFyZW50LiRlbWl0KCJoZWFkZXItY2xpY2siLHQsZSl9LGhhbmRsZUhlYWRlckNvbnRleHRNZW51OmZ1bmN0aW9uKGUsdCl7dGhpcy4kcGFyZW50LiRlbWl0KCJoZWFkZXItY29udGV4dG1lbnUiLHQsZSl9LGhhbmRsZU1vdXNlRG93bjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYoIXRoaXMuJGlzU2VydmVyJiYhKHQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoPjApJiZ0aGlzLmRyYWdnaW5nQ29sdW1uJiZ0aGlzLmJvcmRlcil7dGhpcy5kcmFnZ2luZz0hMCx0aGlzLiRwYXJlbnQucmVzaXplUHJveHlWaXNpYmxlPSEwO3ZhciBpPXRoaXMuJHBhcmVudCxyPWkuJGVsLG89ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LGE9dGhpcy4kZWwucXVlcnlTZWxlY3RvcigidGguIit0LmlkKSxzPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbD1zLmxlZnQtbyszMDtPYmplY3QoemVbImFkZENsYXNzIl0pKGEsIm5vY2xpY2siKSx0aGlzLmRyYWdTdGF0ZT17c3RhcnRNb3VzZUxlZnQ6ZS5jbGllbnRYLHN0YXJ0TGVmdDpzLnJpZ2h0LW8sc3RhcnRDb2x1bW5MZWZ0OnMubGVmdC1vLHRhYmxlTGVmdDpvfTt2YXIgYz1pLiRyZWZzLnJlc2l6ZVByb3h5O2Muc3R5bGUubGVmdD10aGlzLmRyYWdTdGF0ZS5zdGFydExlZnQrInB4Iixkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGRvY3VtZW50Lm9uZHJhZ3N0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xpZW50WC1uLmRyYWdTdGF0ZS5zdGFydE1vdXNlTGVmdCxpPW4uZHJhZ1N0YXRlLnN0YXJ0TGVmdCt0O2Muc3R5bGUubGVmdD1NYXRoLm1heChsLGkpKyJweCJ9LGg9ZnVuY3Rpb24gcigpe2lmKG4uZHJhZ2dpbmcpe3ZhciBvPW4uZHJhZ1N0YXRlLHM9by5zdGFydENvbHVtbkxlZnQsbD1vLnN0YXJ0TGVmdCxoPXBhcnNlSW50KGMuc3R5bGUubGVmdCwxMCksZD1oLXM7dC53aWR0aD10LnJlYWxXaWR0aD1kLGkuJGVtaXQoImhlYWRlci1kcmFnZW5kIix0LndpZHRoLGwtcyx0LGUpLG4uc3RvcmUuc2NoZWR1bGVMYXlvdXQoKSxkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0iIixuLmRyYWdnaW5nPSExLG4uZHJhZ2dpbmdDb2x1bW49bnVsbCxuLmRyYWdTdGF0ZT17fSxpLnJlc2l6ZVByb3h5VmlzaWJsZT0hMX1kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHIpLGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9bnVsbCxkb2N1bWVudC5vbmRyYWdzdGFydD1udWxsLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7T2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKShhLCJub2NsaWNrIil9KSwwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix1KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixoKX19LGhhbmRsZU1vdXNlTW92ZTpmdW5jdGlvbihlLHQpe2lmKCEodC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5sZW5ndGg+MCkpe3ZhciBuPWUudGFyZ2V0O3doaWxlKG4mJiJUSCIhPT1uLnRhZ05hbWUpbj1uLnBhcmVudE5vZGU7aWYodCYmdC5yZXNpemFibGUmJiF0aGlzLmRyYWdnaW5nJiZ0aGlzLmJvcmRlcil7dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPWRvY3VtZW50LmJvZHkuc3R5bGU7aS53aWR0aD4xMiYmaS5yaWdodC1lLnBhZ2VYPDg/KHIuY3Vyc29yPSJjb2wtcmVzaXplIixPYmplY3QoemVbImhhc0NsYXNzIl0pKG4sImlzLXNvcnRhYmxlIikmJihuLnN0eWxlLmN1cnNvcj0iY29sLXJlc2l6ZSIpLHRoaXMuZHJhZ2dpbmdDb2x1bW49dCk6dGhpcy5kcmFnZ2luZ3x8KHIuY3Vyc29yPSIiLE9iamVjdCh6ZVsiaGFzQ2xhc3MiXSkobiwiaXMtc29ydGFibGUiKSYmKG4uc3R5bGUuY3Vyc29yPSJwb2ludGVyIiksdGhpcy5kcmFnZ2luZ0NvbHVtbj1udWxsKX19fSxoYW5kbGVNb3VzZU91dDpmdW5jdGlvbigpe3RoaXMuJGlzU2VydmVyfHwoZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9IiIpfSx0b2dnbGVPcmRlcjpmdW5jdGlvbihlKXt2YXIgdD1lLm9yZGVyLG49ZS5zb3J0T3JkZXJzO2lmKCIiPT09dClyZXR1cm4gblswXTt2YXIgaT1uLmluZGV4T2YodHx8bnVsbCk7cmV0dXJuIG5baT5uLmxlbmd0aC0yPzA6aSsxXX0saGFuZGxlU29ydENsaWNrOmZ1bmN0aW9uKGUsdCxuKXtlLnN0b3BQcm9wYWdhdGlvbigpO3ZhciBpPXQub3JkZXI9PT1uP251bGw6bnx8dGhpcy50b2dnbGVPcmRlcih0KSxyPWUudGFyZ2V0O3doaWxlKHImJiJUSCIhPT1yLnRhZ05hbWUpcj1yLnBhcmVudE5vZGU7aWYociYmIlRIIj09PXIudGFnTmFtZSYmT2JqZWN0KHplWyJoYXNDbGFzcyJdKShyLCJub2NsaWNrIikpT2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKShyLCJub2NsaWNrIik7ZWxzZSBpZih0LnNvcnRhYmxlKXt2YXIgbz10aGlzLnN0b3JlLnN0YXRlcyxhPW8uc29ydFByb3Ascz12b2lkIDAsbD1vLnNvcnRpbmdDb2x1bW47KGwhPT10fHxsPT09dCYmbnVsbD09PWwub3JkZXIpJiYobCYmKGwub3JkZXI9bnVsbCksby5zb3J0aW5nQ29sdW1uPXQsYT10LnByb3BlcnR5KSxzPXQub3JkZXI9aXx8bnVsbCxvLnNvcnRQcm9wPWEsby5zb3J0T3JkZXI9cyx0aGlzLnN0b3JlLmNvbW1pdCgiY2hhbmdlU29ydENvbmRpdGlvbiIpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57ZHJhZ2dpbmdDb2x1bW46bnVsbCxkcmFnZ2luZzohMSxkcmFnU3RhdGU6e319fX0sQnI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYoZVtpXT1uW2ldKX1yZXR1cm4gZX0sRnI9e25hbWU6IkVsVGFibGVGb290ZXIiLG1peGluczpbX3JdLHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49W107cmV0dXJuIHRoaXMuc3VtbWFyeU1ldGhvZD9uPXRoaXMuc3VtbWFyeU1ldGhvZCh7Y29sdW1uczp0aGlzLmNvbHVtbnMsZGF0YTp0aGlzLnN0b3JlLnN0YXRlcy5kYXRhfSk6dGhpcy5jb2x1bW5zLmZvckVhY2goKGZ1bmN0aW9uKGUsaSl7aWYoMCE9PWkpe3ZhciByPXQuc3RvcmUuc3RhdGVzLmRhdGEubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTnVtYmVyKHRbZS5wcm9wZXJ0eV0pfSkpLG89W10sYT0hMDtyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCFpc05hTihlKSl7YT0hMTt2YXIgdD0oIiIrZSkuc3BsaXQoIi4iKVsxXTtvLnB1c2godD90Lmxlbmd0aDowKX19KSk7dmFyIHM9TWF0aC5tYXguYXBwbHkobnVsbCxvKTtuW2ldPWE/IiI6ci5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7dmFyIG49TnVtYmVyKHQpO3JldHVybiBpc05hTihuKT9lOnBhcnNlRmxvYXQoKGUrdCkudG9GaXhlZChNYXRoLm1pbihzLDIwKSkpfSksMCl9ZWxzZSBuW2ldPXQuc3VtVGV4dH0pKSxlKCJ0YWJsZSIse2NsYXNzOiJlbC10YWJsZV9fZm9vdGVyIixhdHRyczp7Y2VsbHNwYWNpbmc6IjAiLGNlbGxwYWRkaW5nOiIwIixib3JkZXI6IjAifX0sW2UoImNvbGdyb3VwIixbdGhpcy5jb2x1bW5zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUoImNvbCIse2F0dHJzOntuYW1lOnQuaWR9LGtleTp0LmlkfSl9KSksdGhpcy5oYXNHdXR0ZXI/ZSgiY29sIix7YXR0cnM6e25hbWU6Imd1dHRlciJ9fSk6IiJdKSxlKCJ0Ym9keSIse2NsYXNzOlt7Imhhcy1ndXR0ZXIiOnRoaXMuaGFzR3V0dGVyfV19LFtlKCJ0ciIsW3RoaXMuY29sdW1ucy5tYXAoKGZ1bmN0aW9uKGkscil7cmV0dXJuIGUoInRkIix7a2V5OnIsYXR0cnM6e2NvbHNwYW46aS5jb2xTcGFuLHJvd3NwYW46aS5yb3dTcGFufSxjbGFzczp0LmdldFJvd0NsYXNzZXMoaSxyKX0sW2UoImRpdiIse2NsYXNzOlsiY2VsbCIsaS5sYWJlbENsYXNzTmFtZV19LFtuW3JdXSldKX0pKSx0aGlzLmhhc0d1dHRlcj9lKCJ0aCIse2NsYXNzOiJndXR0ZXIifSk6IiJdKV0pXSl9LHByb3BzOntmaXhlZDpTdHJpbmcsc3RvcmU6e3JlcXVpcmVkOiEwfSxzdW1tYXJ5TWV0aG9kOkZ1bmN0aW9uLHN1bVRleHQ6U3RyaW5nLGJvcmRlcjpCb29sZWFuLGRlZmF1bHRTb3J0Ont0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue3Byb3A6IiIsb3JkZXI6IiJ9fX19LGNvbXB1dGVkOkJyKHt0YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnR9LGhhc0d1dHRlcjpmdW5jdGlvbigpe3JldHVybiF0aGlzLmZpeGVkJiZ0aGlzLnRhYmxlTGF5b3V0Lmd1dHRlcldpZHRofX0sbXIoe2NvbHVtbnM6ImNvbHVtbnMiLGlzQWxsU2VsZWN0ZWQ6ImlzQWxsU2VsZWN0ZWQiLGxlZnRGaXhlZExlYWZDb3VudDoiZml4ZWRMZWFmQ29sdW1uc0xlbmd0aCIscmlnaHRGaXhlZExlYWZDb3VudDoicmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoIixjb2x1bW5zQ291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29sdW1ucy5sZW5ndGh9LGxlZnRGaXhlZENvdW50OmZ1bmN0aW9uKGUpe3JldHVybiBlLmZpeGVkQ29sdW1ucy5sZW5ndGh9LHJpZ2h0Rml4ZWRDb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGh9fSkpLG1ldGhvZHM6e2lzQ2VsbEhpZGRlbjpmdW5jdGlvbihlLHQsbil7aWYoITA9PT10aGlzLmZpeGVkfHwibGVmdCI9PT10aGlzLmZpeGVkKXJldHVybiBlPj10aGlzLmxlZnRGaXhlZExlYWZDb3VudDtpZigicmlnaHQiPT09dGhpcy5maXhlZCl7Zm9yKHZhciBpPTAscj0wO3I8ZTtyKyspaSs9dFtyXS5jb2xTcGFuO3JldHVybiBpPHRoaXMuY29sdW1uc0NvdW50LXRoaXMucmlnaHRGaXhlZExlYWZDb3VudH1yZXR1cm4hKHRoaXMuZml4ZWR8fCFuLmZpeGVkKXx8KGU8dGhpcy5sZWZ0Rml4ZWRDb3VudHx8ZT49dGhpcy5jb2x1bW5zQ291bnQtdGhpcy5yaWdodEZpeGVkQ291bnQpfSxnZXRSb3dDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7dmFyIG49W2UuaWQsZS5hbGlnbixlLmxhYmVsQ2xhc3NOYW1lXTtyZXR1cm4gZS5jbGFzc05hbWUmJm4ucHVzaChlLmNsYXNzTmFtZSksdGhpcy5pc0NlbGxIaWRkZW4odCx0aGlzLmNvbHVtbnMsZSkmJm4ucHVzaCgiaXMtaGlkZGVuIiksZS5jaGlsZHJlbnx8bi5wdXNoKCJpcy1sZWFmIiksbn19fSxWcj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciBpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJihlW2ldPW5baV0pfXJldHVybiBlfSxqcj0xLEhyPXtuYW1lOiJFbFRhYmxlIixtaXhpbnM6W3YuYSxULmFdLGRpcmVjdGl2ZXM6e01vdXNld2hlZWw6Rml9LHByb3BzOntkYXRhOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHNpemU6U3RyaW5nLHdpZHRoOltTdHJpbmcsTnVtYmVyXSxoZWlnaHQ6W1N0cmluZyxOdW1iZXJdLG1heEhlaWdodDpbU3RyaW5nLE51bWJlcl0sZml0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sc3RyaXBlOkJvb2xlYW4sYm9yZGVyOkJvb2xlYW4scm93S2V5OltTdHJpbmcsRnVuY3Rpb25dLGNvbnRleHQ6e30sc2hvd0hlYWRlcjp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHNob3dTdW1tYXJ5OkJvb2xlYW4sc3VtVGV4dDpTdHJpbmcsc3VtbWFyeU1ldGhvZDpGdW5jdGlvbixyb3dDbGFzc05hbWU6W1N0cmluZyxGdW5jdGlvbl0scm93U3R5bGU6W09iamVjdCxGdW5jdGlvbl0sY2VsbENsYXNzTmFtZTpbU3RyaW5nLEZ1bmN0aW9uXSxjZWxsU3R5bGU6W09iamVjdCxGdW5jdGlvbl0saGVhZGVyUm93Q2xhc3NOYW1lOltTdHJpbmcsRnVuY3Rpb25dLGhlYWRlclJvd1N0eWxlOltPYmplY3QsRnVuY3Rpb25dLGhlYWRlckNlbGxDbGFzc05hbWU6W1N0cmluZyxGdW5jdGlvbl0saGVhZGVyQ2VsbFN0eWxlOltPYmplY3QsRnVuY3Rpb25dLGhpZ2hsaWdodEN1cnJlbnRSb3c6Qm9vbGVhbixjdXJyZW50Um93S2V5OltTdHJpbmcsTnVtYmVyXSxlbXB0eVRleHQ6U3RyaW5nLGV4cGFuZFJvd0tleXM6QXJyYXksZGVmYXVsdEV4cGFuZEFsbDpCb29sZWFuLGRlZmF1bHRTb3J0Ok9iamVjdCx0b29sdGlwRWZmZWN0OlN0cmluZyxzcGFuTWV0aG9kOkZ1bmN0aW9uLHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGluZGVudDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxNn0sdHJlZVByb3BzOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue2hhc0NoaWxkcmVuOiJoYXNDaGlsZHJlbiIsY2hpbGRyZW46ImNoaWxkcmVuIn19fSxsYXp5OkJvb2xlYW4sbG9hZDpGdW5jdGlvbn0sY29tcG9uZW50czp7VGFibGVIZWFkZXI6enIsVGFibGVGb290ZXI6RnIsVGFibGVCb2R5OkNyLEVsQ2hlY2tib3g6TGkuYX0sbWV0aG9kczp7Z2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue2V2ZW50czp7ZXhwYW5kOiJleHBhbmQgaXMgcmVuYW1lZCB0byBleHBhbmQtY2hhbmdlIn19fSxzZXRDdXJyZW50Um93OmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuY29tbWl0KCJzZXRDdXJyZW50Um93IixlKX0sdG9nZ2xlUm93U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9yZS50b2dnbGVSb3dTZWxlY3Rpb24oZSx0LCExKSx0aGlzLnN0b3JlLnVwZGF0ZUFsbFNlbGVjdGVkKCl9LHRvZ2dsZVJvd0V4cGFuc2lvbjpmdW5jdGlvbihlLHQpe3RoaXMuc3RvcmUudG9nZ2xlUm93RXhwYW5zaW9uQWRhcHRlcihlLHQpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuc3RvcmUuY2xlYXJTZWxlY3Rpb24oKX0sY2xlYXJGaWx0ZXI6ZnVuY3Rpb24oZSl7dGhpcy5zdG9yZS5jbGVhckZpbHRlcihlKX0sY2xlYXJTb3J0OmZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jbGVhclNvcnQoKX0saGFuZGxlTW91c2VMZWF2ZTpmdW5jdGlvbigpe3RoaXMuc3RvcmUuY29tbWl0KCJzZXRIb3ZlclJvdyIsbnVsbCksdGhpcy5ob3ZlclN0YXRlJiYodGhpcy5ob3ZlclN0YXRlPW51bGwpfSx1cGRhdGVTY3JvbGxZOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sYXlvdXQudXBkYXRlU2Nyb2xsWSgpO2UmJih0aGlzLmxheW91dC5ub3RpZnlPYnNlcnZlcnMoInNjcm9sbGFibGUiKSx0aGlzLmxheW91dC51cGRhdGVDb2x1bW5zV2lkdGgoKSl9LGhhbmRsZUZpeGVkTW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYm9keVdyYXBwZXI7aWYoTWF0aC5hYnModC5zcGluWSk+MCl7dmFyIGk9bi5zY3JvbGxUb3A7dC5waXhlbFk8MCYmMCE9PWkmJmUucHJldmVudERlZmF1bHQoKSx0LnBpeGVsWT4wJiZuLnNjcm9sbEhlaWdodC1uLmNsaWVudEhlaWdodD5pJiZlLnByZXZlbnREZWZhdWx0KCksbi5zY3JvbGxUb3ArPU1hdGguY2VpbCh0LnBpeGVsWS81KX1lbHNlIG4uc2Nyb2xsTGVmdCs9TWF0aC5jZWlsKHQucGl4ZWxYLzUpfSxoYW5kbGVIZWFkZXJGb290ZXJNb3VzZXdoZWVsOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5waXhlbFgsaT10LnBpeGVsWTtNYXRoLmFicyhuKT49TWF0aC5hYnMoaSkmJih0aGlzLmJvZHlXcmFwcGVyLnNjcm9sbExlZnQrPXQucGl4ZWxYLzUpfSxzeW5jUG9zdGlvbjpPYmplY3QoTmlbInRocm90dGxlIl0pKDIwLChmdW5jdGlvbigpe3ZhciBlPXRoaXMuYm9keVdyYXBwZXIsdD1lLnNjcm9sbExlZnQsbj1lLnNjcm9sbFRvcCxpPWUub2Zmc2V0V2lkdGgscj1lLnNjcm9sbFdpZHRoLG89dGhpcy4kcmVmcyxhPW8uaGVhZGVyV3JhcHBlcixzPW8uZm9vdGVyV3JhcHBlcixsPW8uZml4ZWRCb2R5V3JhcHBlcixjPW8ucmlnaHRGaXhlZEJvZHlXcmFwcGVyO2EmJihhLnNjcm9sbExlZnQ9dCkscyYmKHMuc2Nyb2xsTGVmdD10KSxsJiYobC5zY3JvbGxUb3A9biksYyYmKGMuc2Nyb2xsVG9wPW4pO3ZhciB1PXItaS0xO3RoaXMuc2Nyb2xsUG9zaXRpb249dD49dT8icmlnaHQiOjA9PT10PyJsZWZ0IjoibWlkZGxlIn0pKSxiaW5kRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5ib2R5V3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc3luY1Bvc3Rpb24se3Bhc3NpdmU6ITB9KSx0aGlzLmZpdCYmT2JqZWN0KGVpWyJhZGRSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLnJlc2l6ZUxpc3RlbmVyKX0sdW5iaW5kRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5ib2R5V3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc3luY1Bvc3Rpb24se3Bhc3NpdmU6ITB9KSx0aGlzLmZpdCYmT2JqZWN0KGVpWyJyZW1vdmVSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLnJlc2l6ZUxpc3RlbmVyKX0scmVzaXplTGlzdGVuZXI6ZnVuY3Rpb24oKXtpZih0aGlzLiRyZWFkeSl7dmFyIGU9ITEsdD10aGlzLiRlbCxuPXRoaXMucmVzaXplU3RhdGUsaT1uLndpZHRoLHI9bi5oZWlnaHQsbz10Lm9mZnNldFdpZHRoO2khPT1vJiYoZT0hMCk7dmFyIGE9dC5vZmZzZXRIZWlnaHQ7KHRoaXMuaGVpZ2h0fHx0aGlzLnNob3VsZFVwZGF0ZUhlaWdodCkmJnIhPT1hJiYoZT0hMCksZSYmKHRoaXMucmVzaXplU3RhdGUud2lkdGg9byx0aGlzLnJlc2l6ZVN0YXRlLmhlaWdodD1hLHRoaXMuZG9MYXlvdXQoKSl9fSxkb0xheW91dDpmdW5jdGlvbigpe3RoaXMuc2hvdWxkVXBkYXRlSGVpZ2h0JiZ0aGlzLmxheW91dC51cGRhdGVFbHNIZWlnaHQoKSx0aGlzLmxheW91dC51cGRhdGVDb2x1bW5zV2lkdGgoKX0sc29ydDpmdW5jdGlvbihlLHQpe3RoaXMuc3RvcmUuY29tbWl0KCJzb3J0Iix7cHJvcDplLG9yZGVyOnR9KX0sdG9nZ2xlQWxsU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5zdG9yZS5jb21taXQoInRvZ2dsZUFsbFNlbGVjdGlvbiIpfX0sY29tcHV0ZWQ6VnIoe3RhYmxlU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZX0sYm9keVdyYXBwZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5ib2R5V3JhcHBlcn0sc2hvdWxkVXBkYXRlSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVpZ2h0fHx0aGlzLm1heEhlaWdodHx8dGhpcy5maXhlZENvbHVtbnMubGVuZ3RoPjB8fHRoaXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoPjB9LGJvZHlXaWR0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGF5b3V0LHQ9ZS5ib2R5V2lkdGgsbj1lLnNjcm9sbFksaT1lLmd1dHRlcldpZHRoO3JldHVybiB0P3QtKG4/aTowKSsicHgiOiIifSxib2R5SGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sYXlvdXQsdD1lLmhlYWRlckhlaWdodCxuPXZvaWQgMD09PXQ/MDp0LGk9ZS5ib2R5SGVpZ2h0LHI9ZS5mb290ZXJIZWlnaHQsbz12b2lkIDA9PT1yPzA6cjtpZih0aGlzLmhlaWdodClyZXR1cm57aGVpZ2h0Omk/aSsicHgiOiIifTtpZih0aGlzLm1heEhlaWdodCl7dmFyIGE9bnIodGhpcy5tYXhIZWlnaHQpO2lmKCJudW1iZXIiPT09dHlwZW9mIGEpcmV0dXJueyJtYXgtaGVpZ2h0IjphLW8tKHRoaXMuc2hvd0hlYWRlcj9uOjApKyJweCJ9fXJldHVybnt9fSxmaXhlZEJvZHlIZWlnaHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmhlaWdodClyZXR1cm57aGVpZ2h0OnRoaXMubGF5b3V0LmZpeGVkQm9keUhlaWdodD90aGlzLmxheW91dC5maXhlZEJvZHlIZWlnaHQrInB4IjoiIn07aWYodGhpcy5tYXhIZWlnaHQpe3ZhciBlPW5yKHRoaXMubWF4SGVpZ2h0KTtpZigibnVtYmVyIj09PXR5cGVvZiBlKXJldHVybiBlPXRoaXMubGF5b3V0LnNjcm9sbFg/ZS10aGlzLmxheW91dC5ndXR0ZXJXaWR0aDplLHRoaXMuc2hvd0hlYWRlciYmKGUtPXRoaXMubGF5b3V0LmhlYWRlckhlaWdodCksZS09dGhpcy5sYXlvdXQuZm9vdGVySGVpZ2h0LHsibWF4LWhlaWdodCI6ZSsicHgifX1yZXR1cm57fX0sZml4ZWRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXhIZWlnaHQ/dGhpcy5zaG93U3VtbWFyeT97Ym90dG9tOjB9Ontib3R0b206dGhpcy5sYXlvdXQuc2Nyb2xsWCYmdGhpcy5kYXRhLmxlbmd0aD90aGlzLmxheW91dC5ndXR0ZXJXaWR0aCsicHgiOiIifTp0aGlzLnNob3dTdW1tYXJ5P3toZWlnaHQ6dGhpcy5sYXlvdXQudGFibGVIZWlnaHQ/dGhpcy5sYXlvdXQudGFibGVIZWlnaHQrInB4IjoiIn06e2hlaWdodDp0aGlzLmxheW91dC52aWV3cG9ydEhlaWdodD90aGlzLmxheW91dC52aWV3cG9ydEhlaWdodCsicHgiOiIifX0sZW1wdHlCbG9ja1N0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5kYXRhJiZ0aGlzLmRhdGEubGVuZ3RoKXJldHVybiBudWxsO3ZhciBlPSIxMDAlIjtyZXR1cm4gdGhpcy5sYXlvdXQuYXBwZW5kSGVpZ2h0JiYoZT0iY2FsYygxMDAlIC0gIit0aGlzLmxheW91dC5hcHBlbmRIZWlnaHQrInB4KSIpLHt3aWR0aDp0aGlzLmJvZHlXaWR0aCxoZWlnaHQ6ZX19fSxtcih7c2VsZWN0aW9uOiJzZWxlY3Rpb24iLGNvbHVtbnM6ImNvbHVtbnMiLHRhYmxlRGF0YToiZGF0YSIsZml4ZWRDb2x1bW5zOiJmaXhlZENvbHVtbnMiLHJpZ2h0Rml4ZWRDb2x1bW5zOiJyaWdodEZpeGVkQ29sdW1ucyJ9KSksd2F0Y2g6e2hlaWdodDp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5sYXlvdXQuc2V0SGVpZ2h0KGUpfX0sbWF4SGVpZ2h0OntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLmxheW91dC5zZXRNYXhIZWlnaHQoZSl9fSxjdXJyZW50Um93S2V5OntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLnJvd0tleSYmdGhpcy5zdG9yZS5zZXRDdXJyZW50Um93S2V5KGUpfX0sZGF0YTp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5zdG9yZS5jb21taXQoInNldERhdGEiLGUpfX0sZXhwYW5kUm93S2V5czp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5zdG9yZS5zZXRFeHBhbmRSb3dLZXlzQWRhcHRlcihlKX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnRhYmxlSWQ9ImVsLXRhYmxlXyIranIrKyx0aGlzLmRlYm91bmNlZFVwZGF0ZUxheW91dD1PYmplY3QoTmlbImRlYm91bmNlIl0pKDUwLChmdW5jdGlvbigpe3JldHVybiBlLmRvTGF5b3V0KCl9KSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuYmluZEV2ZW50cygpLHRoaXMuc3RvcmUudXBkYXRlQ29sdW1ucygpLHRoaXMuZG9MYXlvdXQoKSx0aGlzLnJlc2l6ZVN0YXRlPXt3aWR0aDp0aGlzLiRlbC5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy4kZWwub2Zmc2V0SGVpZ2h0fSx0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZmlsdGVyZWRWYWx1ZSYmdC5maWx0ZXJlZFZhbHVlLmxlbmd0aCYmZS5zdG9yZS5jb21taXQoImZpbHRlckNoYW5nZSIse2NvbHVtbjp0LHZhbHVlczp0LmZpbHRlcmVkVmFsdWUsc2lsZW50OiEwfSl9KSksdGhpcy4kcmVhZHk9ITB9LGRlc3Ryb3llZDpmdW5jdGlvbigpe3RoaXMudW5iaW5kRXZlbnRzKCl9LGRhdGE6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRyZWVQcm9wcyx0PWUuaGFzQ2hpbGRyZW4sbj12b2lkIDA9PT10PyJoYXNDaGlsZHJlbiI6dCxpPWUuY2hpbGRyZW4scj12b2lkIDA9PT1pPyJjaGlsZHJlbiI6aTt0aGlzLnN0b3JlPXByKHRoaXMse3Jvd0tleTp0aGlzLnJvd0tleSxkZWZhdWx0RXhwYW5kQWxsOnRoaXMuZGVmYXVsdEV4cGFuZEFsbCxzZWxlY3RPbkluZGV0ZXJtaW5hdGU6dGhpcy5zZWxlY3RPbkluZGV0ZXJtaW5hdGUsaW5kZW50OnRoaXMuaW5kZW50LGxhenk6dGhpcy5sYXp5LGxhenlDb2x1bW5JZGVudGlmaWVyOm4sY2hpbGRyZW5Db2x1bW5OYW1lOnJ9KTt2YXIgbz1uZXcgeHIoe3N0b3JlOnRoaXMuc3RvcmUsdGFibGU6dGhpcyxmaXQ6dGhpcy5maXQsc2hvd0hlYWRlcjp0aGlzLnNob3dIZWFkZXJ9KTtyZXR1cm57bGF5b3V0Om8saXNIaWRkZW46ITEscmVuZGVyRXhwYW5kZWQ6bnVsbCxyZXNpemVQcm94eVZpc2libGU6ITEscmVzaXplU3RhdGU6e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LGlzR3JvdXA6ITEsc2Nyb2xsUG9zaXRpb246ImxlZnQifX19LFdyPUhyLEdyPXMoV3IsQWksT2ksITEsbnVsbCxudWxsLG51bGwpO0dyLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90YWJsZS9zcmMvdGFibGUudnVlIjt2YXIgVXI9R3IuZXhwb3J0cztVci5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KFVyLm5hbWUsVXIpfTt2YXIgcXI9VXIsWXI9e2RlZmF1bHQ6e29yZGVyOiIifSxzZWxlY3Rpb246e3dpZHRoOjQ4LG1pbldpZHRoOjQ4LHJlYWxXaWR0aDo0OCxvcmRlcjoiIixjbGFzc05hbWU6ImVsLXRhYmxlLWNvbHVtbi0tc2VsZWN0aW9uIn0sZXhwYW5kOnt3aWR0aDo0OCxtaW5XaWR0aDo0OCxyZWFsV2lkdGg6NDgsb3JkZXI6IiJ9LGluZGV4Ont3aWR0aDo0OCxtaW5XaWR0aDo0OCxyZWFsV2lkdGg6NDgsb3JkZXI6IiJ9fSxYcj17c2VsZWN0aW9uOntyZW5kZXJIZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnN0b3JlO3JldHVybiBlKCJlbC1jaGVja2JveCIse2F0dHJzOntkaXNhYmxlZDpuLnN0YXRlcy5kYXRhJiYwPT09bi5zdGF0ZXMuZGF0YS5sZW5ndGgsaW5kZXRlcm1pbmF0ZTpuLnN0YXRlcy5zZWxlY3Rpb24ubGVuZ3RoPjAmJiF0aGlzLmlzQWxsU2VsZWN0ZWQsdmFsdWU6dGhpcy5pc0FsbFNlbGVjdGVkfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy50b2dnbGVBbGxTZWxlY3Rpb259fSl9LHJlbmRlckNlbGw6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnJvdyxpPXQuY29sdW1uLHI9dC5zdG9yZSxvPXQuJGluZGV4O3JldHVybiBlKCJlbC1jaGVja2JveCIse25hdGl2ZU9uOntjbGljazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKX19LGF0dHJzOnt2YWx1ZTpyLmlzU2VsZWN0ZWQobiksZGlzYWJsZWQ6ISFpLnNlbGVjdGFibGUmJiFpLnNlbGVjdGFibGUuY2FsbChudWxsLG4sbyl9LG9uOntpbnB1dDpmdW5jdGlvbigpe3IuY29tbWl0KCJyb3dTZWxlY3RlZENoYW5nZWQiLG4pfX19KX0sc29ydGFibGU6ITEscmVzaXphYmxlOiExfSxpbmRleDp7cmVuZGVySGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5jb2x1bW47cmV0dXJuIG4ubGFiZWx8fCIjIn0scmVuZGVyQ2VsbDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuJGluZGV4LGk9dC5jb2x1bW4scj1uKzEsbz1pLmluZGV4O3JldHVybiJudW1iZXIiPT09dHlwZW9mIG8/cj1uK286ImZ1bmN0aW9uIj09PXR5cGVvZiBvJiYocj1vKG4pKSxlKCJkaXYiLFtyXSl9LHNvcnRhYmxlOiExfSxleHBhbmQ6e3JlbmRlckhlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXQuY29sdW1uO3JldHVybiBuLmxhYmVsfHwiIn0scmVuZGVyQ2VsbDpmdW5jdGlvbihlLHQpe3ZhciBuPXQucm93LGk9dC5zdG9yZSxyPVsiZWwtdGFibGVfX2V4cGFuZC1pY29uIl07aS5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKG4pPi0xJiZyLnB1c2goImVsLXRhYmxlX19leHBhbmQtaWNvbi0tZXhwYW5kZWQiKTt2YXIgbz1mdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGkudG9nZ2xlUm93RXhwYW5zaW9uKG4pfTtyZXR1cm4gZSgiZGl2Iix7Y2xhc3M6cixvbjp7Y2xpY2s6b319LFtlKCJpIix7Y2xhc3M6ImVsLWljb24gZWwtaWNvbi1hcnJvdy1yaWdodCJ9KV0pfSxzb3J0YWJsZTohMSxyZXNpemFibGU6ITEsY2xhc3NOYW1lOiJlbC10YWJsZV9fZXhwYW5kLWNvbHVtbiJ9fTtmdW5jdGlvbiBLcihlLHQpe3ZhciBuPXQucm93LGk9dC5jb2x1bW4scj10LiRpbmRleCxvPWkucHJvcGVydHksYT1vJiZPYmplY3QoeVsiZ2V0UHJvcEJ5UGF0aCJdKShuLG8pLnY7cmV0dXJuIGkmJmkuZm9ybWF0dGVyP2kuZm9ybWF0dGVyKG4saSxhLHIpOmF9ZnVuY3Rpb24gWnIoZSx0KXt2YXIgbj10LnJvdyxpPXQudHJlZU5vZGUscj10LnN0b3JlO2lmKCFpKXJldHVybiBudWxsO3ZhciBvPVtdLGE9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxyLmxvYWRPclRvZ2dsZShuKX07aWYoaS5pbmRlbnQmJm8ucHVzaChlKCJzcGFuIix7Y2xhc3M6ImVsLXRhYmxlX19pbmRlbnQiLHN0eWxlOnsicGFkZGluZy1sZWZ0IjppLmluZGVudCsicHgifX0pKSwiYm9vbGVhbiIhPT10eXBlb2YgaS5leHBhbmRlZHx8aS5ub0xhenlDaGlsZHJlbilvLnB1c2goZSgic3BhbiIse2NsYXNzOiJlbC10YWJsZV9fcGxhY2Vob2xkZXIifSkpO2Vsc2V7dmFyIHM9WyJlbC10YWJsZV9fZXhwYW5kLWljb24iLGkuZXhwYW5kZWQ/ImVsLXRhYmxlX19leHBhbmQtaWNvbi0tZXhwYW5kZWQiOiIiXSxsPVsiZWwtaWNvbi1hcnJvdy1yaWdodCJdO2kubG9hZGluZyYmKGw9WyJlbC1pY29uLWxvYWRpbmciXSksby5wdXNoKGUoImRpdiIse2NsYXNzOnMsb246e2NsaWNrOmF9fSxbZSgiaSIse2NsYXNzOmx9KV0pKX1yZXR1cm4gb312YXIgSnI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYoZVtpXT1uW2ldKX1yZXR1cm4gZX0sUXI9MSxlbz17bmFtZToiRWxUYWJsZUNvbHVtbiIscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRlZmF1bHQifSxsYWJlbDpTdHJpbmcsY2xhc3NOYW1lOlN0cmluZyxsYWJlbENsYXNzTmFtZTpTdHJpbmcscHJvcGVydHk6U3RyaW5nLHByb3A6U3RyaW5nLHdpZHRoOnt9LG1pbldpZHRoOnt9LHJlbmRlckhlYWRlcjpGdW5jdGlvbixzb3J0YWJsZTp7dHlwZTpbQm9vbGVhbixTdHJpbmddLGRlZmF1bHQ6ITF9LHNvcnRNZXRob2Q6RnVuY3Rpb24sc29ydEJ5OltTdHJpbmcsRnVuY3Rpb24sQXJyYXldLHJlc2l6YWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNvbHVtbktleTpTdHJpbmcsYWxpZ246U3RyaW5nLGhlYWRlckFsaWduOlN0cmluZyxzaG93VG9vbHRpcFdoZW5PdmVyZmxvdzpCb29sZWFuLHNob3dPdmVyZmxvd1Rvb2x0aXA6Qm9vbGVhbixmaXhlZDpbQm9vbGVhbixTdHJpbmddLGZvcm1hdHRlcjpGdW5jdGlvbixzZWxlY3RhYmxlOkZ1bmN0aW9uLHJlc2VydmVTZWxlY3Rpb246Qm9vbGVhbixmaWx0ZXJNZXRob2Q6RnVuY3Rpb24sZmlsdGVyZWRWYWx1ZTpBcnJheSxmaWx0ZXJzOkFycmF5LGZpbHRlclBsYWNlbWVudDpTdHJpbmcsZmlsdGVyTXVsdGlwbGU6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxpbmRleDpbTnVtYmVyLEZ1bmN0aW9uXSxzb3J0T3JkZXJzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bImFzY2VuZGluZyIsImRlc2NlbmRpbmciLG51bGxdfSx2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVyblsiYXNjZW5kaW5nIiwiZGVzY2VuZGluZyIsbnVsbF0uaW5kZXhPZihlKT4tMX0pKX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lzU3ViQ29sdW1uOiExLGNvbHVtbnM6W119fSxjb21wdXRlZDp7b3duZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQ7d2hpbGUoZSYmIWUudGFibGVJZCllPWUuJHBhcmVudDtyZXR1cm4gZX0sY29sdW1uT3JUYWJsZVBhcmVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHBhcmVudDt3aGlsZShlJiYhZS50YWJsZUlkJiYhZS5jb2x1bW5JZCllPWUuJHBhcmVudDtyZXR1cm4gZX0scmVhbFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIGVyKHRoaXMud2lkdGgpfSxyZWFsTWluV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gdHIodGhpcy5taW5XaWR0aCl9LHJlYWxBbGlnbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFsaWduPyJpcy0iK3RoaXMuYWxpZ246bnVsbH0scmVhbEhlYWRlckFsaWduOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZGVyQWxpZ24/ImlzLSIrdGhpcy5oZWFkZXJBbGlnbjp0aGlzLnJlYWxBbGlnbn19LG1ldGhvZHM6e2dldFByb3BzRGF0YTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KHQpLGk9MDtpPHQ7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiBuLnJlZHVjZSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmbi5mb3JFYWNoKChmdW5jdGlvbihuKXt0W25dPWVbbl19KSksdH0pLHt9KX0sZ2V0Q29sdW1uRWxJbmRleDpmdW5jdGlvbihlLHQpe3JldHVybltdLmluZGV4T2YuY2FsbChlLHQpfSxzZXRDb2x1bW5XaWR0aDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZWFsV2lkdGgmJihlLndpZHRoPXRoaXMucmVhbFdpZHRoKSx0aGlzLnJlYWxNaW5XaWR0aCYmKGUubWluV2lkdGg9dGhpcy5yZWFsTWluV2lkdGgpLGUubWluV2lkdGh8fChlLm1pbldpZHRoPTgwKSxlLnJlYWxXaWR0aD12b2lkIDA9PT1lLndpZHRoP2UubWluV2lkdGg6ZS53aWR0aCxlfSxzZXRDb2x1bW5Gb3JjZWRQcm9wczpmdW5jdGlvbihlKXt2YXIgdD1lLnR5cGUsbj1Yclt0XXx8e307cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW5bdF07dm9pZCAwIT09aSYmKGVbdF09ImNsYXNzTmFtZSI9PT10P2VbdF0rIiAiK2k6aSl9KSksZX0sc2V0Q29sdW1uUmVuZGVyczpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuJGNyZWF0ZUVsZW1lbnQ7dGhpcy5yZW5kZXJIZWFkZXI/Y29uc29sZS53YXJuKCJbRWxlbWVudCBXYXJuXVtUYWJsZUNvbHVtbl1Db21wYXJpbmcgdG8gcmVuZGVyLWhlYWRlciwgc2NvcGVkLXNsb3QgaGVhZGVyIGlzIGVhc2llciB0byB1c2UuIFdlIHJlY29tbWVuZCB1c2VycyB0byB1c2Ugc2NvcGVkLXNsb3QgaGVhZGVyLiIpOiJzZWxlY3Rpb24iIT09ZS50eXBlJiYoZS5yZW5kZXJIZWFkZXI9ZnVuY3Rpb24obixpKXt2YXIgcj10LiRzY29wZWRTbG90cy5oZWFkZXI7cmV0dXJuIHI/cihpKTplLmxhYmVsfSk7dmFyIG49ZS5yZW5kZXJDZWxsO3JldHVybiJleHBhbmQiPT09ZS50eXBlPyhlLnJlbmRlckNlbGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSgiZGl2Iix7Y2xhc3M6ImNlbGwifSxbbihlLHQpXSl9LHRoaXMub3duZXIucmVuZGVyRXhwYW5kZWQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC4kc2NvcGVkU2xvdHMuZGVmYXVsdD90LiRzY29wZWRTbG90cy5kZWZhdWx0KG4pOnQuJHNsb3RzLmRlZmF1bHR9KToobj1ufHxLcixlLnJlbmRlckNlbGw9ZnVuY3Rpb24oaSxyKXt2YXIgbz1udWxsO289dC4kc2NvcGVkU2xvdHMuZGVmYXVsdD90LiRzY29wZWRTbG90cy5kZWZhdWx0KHIpOm4oaSxyKTt2YXIgYT1acihpLHIpLHM9e2NsYXNzOiJjZWxsIixzdHlsZTp7fX07cmV0dXJuIGUuc2hvd092ZXJmbG93VG9vbHRpcCYmKHMuY2xhc3MrPSIgZWwtdG9vbHRpcCIscy5zdHlsZT17d2lkdGg6KHIuY29sdW1uLnJlYWxXaWR0aHx8ci5jb2x1bW4ud2lkdGgpLTErInB4In0pLGkoImRpdiIscyxbYSxvXSl9KSxlfSxyZWdpc3Rlck5vcm1hbFdhdGNoZXJzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PVsibGFiZWwiLCJwcm9wZXJ0eSIsImZpbHRlcnMiLCJmaWx0ZXJNdWx0aXBsZSIsInNvcnRhYmxlIiwiaW5kZXgiLCJmb3JtYXR0ZXIiLCJjbGFzc05hbWUiLCJsYWJlbENsYXNzTmFtZSIsInNob3dPdmVyZmxvd1Rvb2x0aXAiXSxuPXtwcm9wOiJwcm9wZXJ0eSIscmVhbEFsaWduOiJhbGlnbiIscmVhbEhlYWRlckFsaWduOiJoZWFkZXJBbGlnbiIscmVhbFdpZHRoOiJ3aWR0aCJ9LGk9dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dCxlfSksbik7T2JqZWN0LmtleXMoaSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9blt0XTtlLiR3YXRjaCh0LChmdW5jdGlvbih0KXtlLmNvbHVtbkNvbmZpZ1tpXT10fSkpfSkpfSxyZWdpc3RlckNvbXBsZXhXYXRjaGVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1bImZpeGVkIl0sbj17cmVhbFdpZHRoOiJ3aWR0aCIscmVhbE1pbldpZHRoOiJtaW5XaWR0aCJ9LGk9dC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF09dCxlfSksbik7T2JqZWN0LmtleXMoaSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9blt0XTtlLiR3YXRjaCh0LChmdW5jdGlvbih0KXtlLmNvbHVtbkNvbmZpZ1tpXT10O3ZhciBuPSJmaXhlZCI9PT1pO2Uub3duZXIuc3RvcmUuc2NoZWR1bGVMYXlvdXQobil9KSl9KSl9fSxjb21wb25lbnRzOntFbENoZWNrYm94OkxpLmF9LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMucm93PXt9LHRoaXMuY29sdW1uPXt9LHRoaXMuJGluZGV4PTAsdGhpcy5jb2x1bW5JZD0iIn0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29sdW1uT3JUYWJsZVBhcmVudDt0aGlzLmlzU3ViQ29sdW1uPXRoaXMub3duZXIhPT1lLHRoaXMuY29sdW1uSWQ9KGUudGFibGVJZHx8ZS5jb2x1bW5JZCkrIl9jb2x1bW5fIitRcisrO3ZhciB0PXRoaXMudHlwZXx8ImRlZmF1bHQiLG49IiI9PT10aGlzLnNvcnRhYmxlfHx0aGlzLnNvcnRhYmxlLGk9SnIoe30sWXJbdF0se2lkOnRoaXMuY29sdW1uSWQsdHlwZTp0LHByb3BlcnR5OnRoaXMucHJvcHx8dGhpcy5wcm9wZXJ0eSxhbGlnbjp0aGlzLnJlYWxBbGlnbixoZWFkZXJBbGlnbjp0aGlzLnJlYWxIZWFkZXJBbGlnbixzaG93T3ZlcmZsb3dUb29sdGlwOnRoaXMuc2hvd092ZXJmbG93VG9vbHRpcHx8dGhpcy5zaG93VG9vbHRpcFdoZW5PdmVyZmxvdyxmaWx0ZXJhYmxlOnRoaXMuZmlsdGVyc3x8dGhpcy5maWx0ZXJNZXRob2QsZmlsdGVyZWRWYWx1ZTpbXSxmaWx0ZXJQbGFjZW1lbnQ6IiIsaXNDb2x1bW5Hcm91cDohMSxmaWx0ZXJPcGVuZWQ6ITEsc29ydGFibGU6bixpbmRleDp0aGlzLmluZGV4fSkscj1bImNvbHVtbktleSIsImxhYmVsIiwiY2xhc3NOYW1lIiwibGFiZWxDbGFzc05hbWUiLCJ0eXBlIiwicmVuZGVySGVhZGVyIiwiZm9ybWF0dGVyIiwiZml4ZWQiLCJyZXNpemFibGUiXSxvPVsic29ydE1ldGhvZCIsInNvcnRCeSIsInNvcnRPcmRlcnMiXSxhPVsic2VsZWN0YWJsZSIsInJlc2VydmVTZWxlY3Rpb24iXSxzPVsiZmlsdGVyTWV0aG9kIiwiZmlsdGVycyIsImZpbHRlck11bHRpcGxlIiwiZmlsdGVyT3BlbmVkIiwiZmlsdGVyZWRWYWx1ZSIsImZpbHRlclBsYWNlbWVudCJdLGw9dGhpcy5nZXRQcm9wc0RhdGEocixvLGEscyk7bD1RaShpLGwpO3ZhciBjPWlyKHRoaXMuc2V0Q29sdW1uUmVuZGVycyx0aGlzLnNldENvbHVtbldpZHRoLHRoaXMuc2V0Q29sdW1uRm9yY2VkUHJvcHMpO2w9YyhsKSx0aGlzLmNvbHVtbkNvbmZpZz1sLHRoaXMucmVnaXN0ZXJOb3JtYWxXYXRjaGVycygpLHRoaXMucmVnaXN0ZXJDb21wbGV4V2F0Y2hlcnMoKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXIsdD10aGlzLmNvbHVtbk9yVGFibGVQYXJlbnQsbj10aGlzLmlzU3ViQ29sdW1uP3QuJGVsLmNoaWxkcmVuOnQuJHJlZnMuaGlkZGVuQ29sdW1ucy5jaGlsZHJlbixpPXRoaXMuZ2V0Q29sdW1uRWxJbmRleChuLHRoaXMuJGVsKTtlLnN0b3JlLmNvbW1pdCgiaW5zZXJ0Q29sdW1uIix0aGlzLmNvbHVtbkNvbmZpZyxpLHRoaXMuaXNTdWJDb2x1bW4/dC5jb2x1bW5Db25maWc6bnVsbCl9LGRlc3Ryb3llZDpmdW5jdGlvbigpe2lmKHRoaXMuJHBhcmVudCl7dmFyIGU9dGhpcy4kcGFyZW50O3RoaXMub3duZXIuc3RvcmUuY29tbWl0KCJyZW1vdmVDb2x1bW4iLHRoaXMuY29sdW1uQ29uZmlnLHRoaXMuaXNTdWJDb2x1bW4/ZS5jb2x1bW5Db25maWc6bnVsbCl9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUoImRpdiIsdGhpcy4kc2xvdHMuZGVmYXVsdCl9LGluc3RhbGw6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoZW8ubmFtZSxlbyl9fSx0bz1lbyxubz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gZS5yYW5nZWQ/bigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOmUuaGFuZGxlQ2xvc2UsZXhwcmVzc2lvbjoiaGFuZGxlQ2xvc2UifV0scmVmOiJyZWZlcmVuY2UiLHN0YXRpY0NsYXNzOiJlbC1kYXRlLWVkaXRvciBlbC1yYW5nZS1lZGl0b3IgZWwtaW5wdXRfX2lubmVyIixjbGFzczpbImVsLWRhdGUtZWRpdG9yLS0iK2UudHlwZSxlLnBpY2tlclNpemU/ImVsLXJhbmdlLWVkaXRvci0tIitlLnBpY2tlclNpemU6IiIsZS5waWNrZXJEaXNhYmxlZD8iaXMtZGlzYWJsZWQiOiIiLGUucGlja2VyVmlzaWJsZT8iaXMtYWN0aXZlIjoiIl0sb246e2NsaWNrOmUuaGFuZGxlUmFuZ2VDbGljayxtb3VzZWVudGVyOmUuaGFuZGxlTW91c2VFbnRlcixtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2Uuc2hvd0Nsb3NlPSExfSxrZXlkb3duOmUuaGFuZGxlS2V5ZG93bn19LFtuKCJpIix7Y2xhc3M6WyJlbC1pbnB1dF9faWNvbiIsImVsLXJhbmdlX19pY29uIixlLnRyaWdnZXJDbGFzc119KSxuKCJpbnB1dCIsZS5fYih7c3RhdGljQ2xhc3M6ImVsLXJhbmdlLWlucHV0IixhdHRyczp7YXV0b2NvbXBsZXRlOiJvZmYiLHBsYWNlaG9sZGVyOmUuc3RhcnRQbGFjZWhvbGRlcixkaXNhYmxlZDplLnBpY2tlckRpc2FibGVkLHJlYWRvbmx5OiFlLmVkaXRhYmxlfHxlLnJlYWRvbmx5LG5hbWU6ZS5uYW1lJiZlLm5hbWVbMF19LGRvbVByb3BzOnt2YWx1ZTplLmRpc3BsYXlWYWx1ZSYmZS5kaXNwbGF5VmFsdWVbMF19LG9uOntpbnB1dDplLmhhbmRsZVN0YXJ0SW5wdXQsY2hhbmdlOmUuaGFuZGxlU3RhcnRDaGFuZ2UsZm9jdXM6ZS5oYW5kbGVGb2N1c319LCJpbnB1dCIsZS5maXJzdElucHV0SWQsITEpKSxlLl90KCJyYW5nZS1zZXBhcmF0b3IiLFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXJhbmdlLXNlcGFyYXRvciJ9LFtlLl92KGUuX3MoZS5yYW5nZVNlcGFyYXRvcikpXSldKSxuKCJpbnB1dCIsZS5fYih7c3RhdGljQ2xhc3M6ImVsLXJhbmdlLWlucHV0IixhdHRyczp7YXV0b2NvbXBsZXRlOiJvZmYiLHBsYWNlaG9sZGVyOmUuZW5kUGxhY2Vob2xkZXIsZGlzYWJsZWQ6ZS5waWNrZXJEaXNhYmxlZCxyZWFkb25seTohZS5lZGl0YWJsZXx8ZS5yZWFkb25seSxuYW1lOmUubmFtZSYmZS5uYW1lWzFdfSxkb21Qcm9wczp7dmFsdWU6ZS5kaXNwbGF5VmFsdWUmJmUuZGlzcGxheVZhbHVlWzFdfSxvbjp7aW5wdXQ6ZS5oYW5kbGVFbmRJbnB1dCxjaGFuZ2U6ZS5oYW5kbGVFbmRDaGFuZ2UsZm9jdXM6ZS5oYW5kbGVGb2N1c319LCJpbnB1dCIsZS5zZWNvbmRJbnB1dElkLCExKSksZS5oYXZlVHJpZ2dlcj9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLWlucHV0X19pY29uIGVsLXJhbmdlX19jbG9zZS1pY29uIixjbGFzczpbZS5zaG93Q2xvc2U/IiIrZS5jbGVhckljb246IiJdLG9uOntjbGljazplLmhhbmRsZUNsaWNrSWNvbn19KTplLl9lKCldLDIpOm4oImVsLWlucHV0IixlLl9iKHtkaXJlY3RpdmVzOlt7bmFtZToiY2xpY2tvdXRzaWRlIixyYXdOYW1lOiJ2LWNsaWNrb3V0c2lkZSIsdmFsdWU6ZS5oYW5kbGVDbG9zZSxleHByZXNzaW9uOiJoYW5kbGVDbG9zZSJ9XSxyZWY6InJlZmVyZW5jZSIsc3RhdGljQ2xhc3M6ImVsLWRhdGUtZWRpdG9yIixjbGFzczoiZWwtZGF0ZS1lZGl0b3ItLSIrZS50eXBlLGF0dHJzOntyZWFkb25seTohZS5lZGl0YWJsZXx8ZS5yZWFkb25seXx8ImRhdGVzIj09PWUudHlwZXx8IndlZWsiPT09ZS50eXBlLGRpc2FibGVkOmUucGlja2VyRGlzYWJsZWQsc2l6ZTplLnBpY2tlclNpemUsbmFtZTplLm5hbWUscGxhY2Vob2xkZXI6ZS5wbGFjZWhvbGRlcix2YWx1ZTplLmRpc3BsYXlWYWx1ZSx2YWxpZGF0ZUV2ZW50OiExfSxvbjp7Zm9jdXM6ZS5oYW5kbGVGb2N1cyxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS51c2VySW5wdXQ9dH0sY2hhbmdlOmUuaGFuZGxlQ2hhbmdlfSxuYXRpdmVPbjp7a2V5ZG93bjpmdW5jdGlvbih0KXtyZXR1cm4gZS5oYW5kbGVLZXlkb3duKHQpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZU1vdXNlRW50ZXIodCl9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZS5zaG93Q2xvc2U9ITF9fX0sImVsLWlucHV0IixlLmZpcnN0SW5wdXRJZCwhMSksW24oImkiLHtzdGF0aWNDbGFzczoiZWwtaW5wdXRfX2ljb24iLGNsYXNzOmUudHJpZ2dlckNsYXNzLGF0dHJzOntzbG90OiJwcmVmaXgifSxvbjp7Y2xpY2s6ZS5oYW5kbGVGb2N1c30sc2xvdDoicHJlZml4In0pLGUuaGF2ZVRyaWdnZXI/bigiaSIse3N0YXRpY0NsYXNzOiJlbC1pbnB1dF9faWNvbiIsY2xhc3M6W2Uuc2hvd0Nsb3NlPyIiK2UuY2xlYXJJY29uOiIiXSxhdHRyczp7c2xvdDoic3VmZml4In0sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2tJY29ufSxzbG90OiJzdWZmaXgifSk6ZS5fZSgpXSl9LGlvPVtdO25vLl93aXRoU3RyaXBwZWQ9ITA7dmFyIHJvPW4oMCksb289e3Byb3BzOnthcHBlbmRUb0JvZHk6SC5hLnByb3BzLmFwcGVuZFRvQm9keSxvZmZzZXQ6SC5hLnByb3BzLm9mZnNldCxib3VuZGFyaWVzUGFkZGluZzpILmEucHJvcHMuYm91bmRhcmllc1BhZGRpbmcsYXJyb3dPZmZzZXQ6SC5hLnByb3BzLmFycm93T2Zmc2V0fSxtZXRob2RzOkguYS5tZXRob2RzLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm4ga3QoKSh7dmlzaWJsZUFycm93OiEwfSxILmEuZGF0YSl9LGJlZm9yZURlc3Ryb3k6SC5hLmJlZm9yZURlc3Ryb3l9LGFvPXtkYXRlOiJ5eXl5LU1NLWRkIixtb250aDoieXl5eS1NTSIsZGF0ZXRpbWU6Inl5eXktTU0tZGQgSEg6bW06c3MiLHRpbWU6IkhIOm1tOnNzIix3ZWVrOiJ5eXl5d1dXIix0aW1lcmFuZ2U6IkhIOm1tOnNzIixkYXRlcmFuZ2U6Inl5eXktTU0tZGQiLG1vbnRocmFuZ2U6Inl5eXktTU0iLGRhdGV0aW1lcmFuZ2U6Inl5eXktTU0tZGQgSEg6bW06c3MiLHllYXI6Inl5eXkifSxzbz1bImRhdGUiLCJkYXRldGltZSIsInRpbWUiLCJ0aW1lLXNlbGVjdCIsIndlZWsiLCJtb250aCIsInllYXIiLCJkYXRlcmFuZ2UiLCJtb250aHJhbmdlIiwidGltZXJhbmdlIiwiZGF0ZXRpbWVyYW5nZSIsImRhdGVzIl0sbG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4idGltZXN0YW1wIj09PXQ/ZS5nZXRUaW1lKCk6T2JqZWN0KHJvWyJmb3JtYXREYXRlIl0pKGUsdCl9LGNvPWZ1bmN0aW9uKGUsdCl7cmV0dXJuInRpbWVzdGFtcCI9PT10P25ldyBEYXRlKE51bWJlcihlKSk6T2JqZWN0KHJvWyJwYXJzZURhdGUiXSkoZSx0KX0sdW89ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgpe3ZhciBuPWVbMF0saT1lWzFdO2lmKG4mJmkpcmV0dXJuW2xvKG4sdCksbG8oaSx0KV19cmV0dXJuIiJ9LGhvPWZ1bmN0aW9uKGUsdCxuKXtpZihBcnJheS5pc0FycmF5KGUpfHwoZT1lLnNwbGl0KG4pKSwyPT09ZS5sZW5ndGgpe3ZhciBpPWVbMF0scj1lWzFdO3JldHVybltjbyhpLHQpLGNvKHIsdCldfXJldHVybltdfSxmbz17ZGVmYXVsdDp7Zm9ybWF0dGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPyIiK2U6IiJ9LHBhcnNlcjpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZXx8IiI9PT1lP251bGw6ZX19LHdlZWs6e2Zvcm1hdHRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdChyb1siZ2V0V2Vla051bWJlciJdKShlKSxpPWUuZ2V0TW9udGgoKSxyPW5ldyBEYXRlKGUpOzE9PT1uJiYxMT09PWkmJihyLnNldEhvdXJzKDAsMCwwLDApLHIuc2V0RGF0ZShyLmdldERhdGUoKSszLShyLmdldERheSgpKzYpJTcpKTt2YXIgbz1PYmplY3Qocm9bImZvcm1hdERhdGUiXSkocix0KTtyZXR1cm4gbz0vV1cvLnRlc3Qobyk/by5yZXBsYWNlKC9XVy8sbjwxMD8iMCIrbjpuKTpvLnJlcGxhY2UoL1cvLG4pLG99LHBhcnNlcjpmdW5jdGlvbihlLHQpe3JldHVybiBmby5kYXRlLnBhcnNlcihlLHQpfX0sZGF0ZTp7Zm9ybWF0dGVyOmxvLHBhcnNlcjpjb30sZGF0ZXRpbWU6e2Zvcm1hdHRlcjpsbyxwYXJzZXI6Y299LGRhdGVyYW5nZTp7Zm9ybWF0dGVyOnVvLHBhcnNlcjpob30sbW9udGhyYW5nZTp7Zm9ybWF0dGVyOnVvLHBhcnNlcjpob30sZGF0ZXRpbWVyYW5nZTp7Zm9ybWF0dGVyOnVvLHBhcnNlcjpob30sdGltZXJhbmdlOntmb3JtYXR0ZXI6dW8scGFyc2VyOmhvfSx0aW1lOntmb3JtYXR0ZXI6bG8scGFyc2VyOmNvfSxtb250aDp7Zm9ybWF0dGVyOmxvLHBhcnNlcjpjb30seWVhcjp7Zm9ybWF0dGVyOmxvLHBhcnNlcjpjb30sbnVtYmVyOntmb3JtYXR0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/IiIrZToiIn0scGFyc2VyOmZ1bmN0aW9uKGUpe3ZhciB0PU51bWJlcihlKTtyZXR1cm4gaXNOYU4oZSk/bnVsbDp0fX0sZGF0ZXM6e2Zvcm1hdHRlcjpmdW5jdGlvbihlLHQpe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGxvKGUsdCl9KSl9LHBhcnNlcjpmdW5jdGlvbihlLHQpe3JldHVybigic3RyaW5nIj09PXR5cGVvZiBlP2Uuc3BsaXQoIiwgIik6ZSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/ZTpjbyhlLHQpfSkpfX19LHBvPXtsZWZ0OiJib3R0b20tc3RhcnQiLGNlbnRlcjoiYm90dG9tIixyaWdodDoiYm90dG9tLWVuZCJ9LG1vPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106Ii0iO2lmKCFlKXJldHVybiBudWxsO3ZhciByPShmb1tuXXx8Zm9bImRlZmF1bHQiXSkucGFyc2VyLG89dHx8YW9bbl07cmV0dXJuIHIoZSxvLGkpfSxnbz1mdW5jdGlvbihlLHQsbil7aWYoIWUpcmV0dXJuIG51bGw7dmFyIGk9KGZvW25dfHxmb1siZGVmYXVsdCJdKS5mb3JtYXR0ZXIscj10fHxhb1tuXTtyZXR1cm4gaShlLHIpfSx2bz1mdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZSBpbnN0YW5jZW9mIERhdGUsaT10IGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gbiYmaT9lLmdldFRpbWUoKT09PXQuZ2V0VGltZSgpOiFuJiYhaSYmZT09PXR9LGk9ZSBpbnN0YW5jZW9mIEFycmF5LHI9dCBpbnN0YW5jZW9mIEFycmF5O3JldHVybiBpJiZyP2UubGVuZ3RoPT09dC5sZW5ndGgmJmUuZXZlcnkoKGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG4oZSx0W2ldKX0pKTohaSYmIXImJm4oZSx0KX0seW89ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIFN0cmluZ30sYm89ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHx2b2lkIDA9PT1lfHx5byhlKXx8QXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoJiZlLmV2ZXJ5KHlvKX0seG89e21peGluczpbRS5hLG9vXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDoiIn0sZWxGb3JtSXRlbTp7ZGVmYXVsdDoiIn19LHByb3BzOntzaXplOlN0cmluZyxmb3JtYXQ6U3RyaW5nLHZhbHVlRm9ybWF0OlN0cmluZyxyZWFkb25seTpCb29sZWFuLHBsYWNlaG9sZGVyOlN0cmluZyxzdGFydFBsYWNlaG9sZGVyOlN0cmluZyxlbmRQbGFjZWhvbGRlcjpTdHJpbmcscHJlZml4SWNvbjpTdHJpbmcsY2xlYXJJY29uOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJlbC1pY29uLWNpcmNsZS1jbG9zZSJ9LG5hbWU6e2RlZmF1bHQ6IiIsdmFsaWRhdG9yOmJvfSxkaXNhYmxlZDpCb29sZWFuLGNsZWFyYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGlkOntkZWZhdWx0OiIiLHZhbGlkYXRvcjpib30scG9wcGVyQ2xhc3M6U3RyaW5nLGVkaXRhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sYWxpZ246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImxlZnQifSx2YWx1ZTp7fSxkZWZhdWx0VmFsdWU6e30sZGVmYXVsdFRpbWU6e30scmFuZ2VTZXBhcmF0b3I6e2RlZmF1bHQ6Ii0ifSxwaWNrZXJPcHRpb25zOnt9LHVubGlua1BhbmVsczpCb29sZWFuLHZhbGlkYXRlRXZlbnQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfX0sY29tcG9uZW50czp7RWxJbnB1dDptLmF9LGRpcmVjdGl2ZXM6e0NsaWNrb3V0c2lkZTpCLmF9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cGlja2VyVmlzaWJsZTohMSxzaG93Q2xvc2U6ITEsdXNlcklucHV0Om51bGwsdmFsdWVPbk9wZW46bnVsbCx1bndhdGNoUGlja2VyT3B0aW9uczpudWxsfX0sd2F0Y2g6e3BpY2tlclZpc2libGU6ZnVuY3Rpb24oZSl7dGhpcy5yZWFkb25seXx8dGhpcy5waWNrZXJEaXNhYmxlZHx8KGU/KHRoaXMuc2hvd1BpY2tlcigpLHRoaXMudmFsdWVPbk9wZW49QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT9bXS5jb25jYXQodGhpcy52YWx1ZSk6dGhpcy52YWx1ZSk6KHRoaXMuaGlkZVBpY2tlcigpLHRoaXMuZW1pdENoYW5nZSh0aGlzLnZhbHVlKSx0aGlzLnVzZXJJbnB1dD1udWxsLHRoaXMudmFsaWRhdGVFdmVudCYmdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uYmx1ciIpLHRoaXMuJGVtaXQoImJsdXIiLHRoaXMpLHRoaXMuYmx1cigpKSl9LHBhcnNlZFZhbHVlOntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLnBpY2tlciYmKHRoaXMucGlja2VyLnZhbHVlPWUpfX0sZGVmYXVsdFZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGlja2VyJiYodGhpcy5waWNrZXIuZGVmYXVsdFZhbHVlPWUpfSx2YWx1ZTpmdW5jdGlvbihlLHQpe3ZvKGUsdCl8fHRoaXMucGlja2VyVmlzaWJsZXx8IXRoaXMudmFsaWRhdGVFdmVudHx8dGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixlKX19LGNvbXB1dGVkOntyYW5nZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmluZGV4T2YoInJhbmdlIik+LTF9LHJlZmVyZW5jZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHJlZnMucmVmZXJlbmNlO3JldHVybiBlLiRlbHx8ZX0scmVmSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2U/W10uc2xpY2UuY2FsbCh0aGlzLnJlZmVyZW5jZS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpKTpbXX0sdmFsdWVJc0VtcHR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy52YWx1ZTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspaWYoZVt0XSlyZXR1cm4hMX1lbHNlIGlmKGUpcmV0dXJuITE7cmV0dXJuITB9LHRyaWdnZXJDbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWZpeEljb258fCgtMSE9PXRoaXMudHlwZS5pbmRleE9mKCJ0aW1lIik/ImVsLWljb24tdGltZSI6ImVsLWljb24tZGF0ZSIpfSxzZWxlY3Rpb25Nb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIndlZWsiPT09dGhpcy50eXBlPyJ3ZWVrIjoibW9udGgiPT09dGhpcy50eXBlPyJtb250aCI6InllYXIiPT09dGhpcy50eXBlPyJ5ZWFyIjoiZGF0ZXMiPT09dGhpcy50eXBlPyJkYXRlcyI6ImRheSJ9LGhhdmVUcmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuInVuZGVmaW5lZCIhPT10eXBlb2YgdGhpcy5zaG93VHJpZ2dlcj90aGlzLnNob3dUcmlnZ2VyOi0xIT09c28uaW5kZXhPZih0aGlzLnR5cGUpfSxkaXNwbGF5VmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1nbyh0aGlzLnBhcnNlZFZhbHVlLHRoaXMuZm9ybWF0LHRoaXMudHlwZSx0aGlzLnJhbmdlU2VwYXJhdG9yKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJJbnB1dCk/W3RoaXMudXNlcklucHV0WzBdfHxlJiZlWzBdfHwiIix0aGlzLnVzZXJJbnB1dFsxXXx8ZSYmZVsxXXx8IiJdOm51bGwhPT10aGlzLnVzZXJJbnB1dD90aGlzLnVzZXJJbnB1dDplPyJkYXRlcyI9PT10aGlzLnR5cGU/ZS5qb2luKCIsICIpOmU6IiJ9LHBhcnNlZFZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMudmFsdWUpcmV0dXJuIHRoaXMudmFsdWU7aWYoInRpbWUtc2VsZWN0Ij09PXRoaXMudHlwZSlyZXR1cm4gdGhpcy52YWx1ZTt2YXIgZT1PYmplY3Qocm9bImlzRGF0ZU9iamVjdCJdKSh0aGlzLnZhbHVlKXx8QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5ldmVyeShyb1siaXNEYXRlT2JqZWN0Il0pO3JldHVybiBlP3RoaXMudmFsdWU6dGhpcy52YWx1ZUZvcm1hdD9tbyh0aGlzLnZhbHVlLHRoaXMudmFsdWVGb3JtYXQsdGhpcy50eXBlLHRoaXMucmFuZ2VTZXBhcmF0b3IpfHx0aGlzLnZhbHVlOkFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgRGF0ZShlKX0pKTpuZXcgRGF0ZSh0aGlzLnZhbHVlKX0sX2VsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZWxGb3JtSXRlbXx8e30pLmVsRm9ybUl0ZW1TaXplfSxwaWNrZXJTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZXx8dGhpcy5fZWxGb3JtSXRlbVNpemV8fCh0aGlzLiRFTEVNRU5UfHx7fSkuc2l6ZX0scGlja2VyRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8KHRoaXMuZWxGb3JtfHx7fSkuZGlzYWJsZWR9LGZpcnN0SW5wdXRJZDpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dm9pZCAwO3JldHVybiB0PXRoaXMucmFuZ2VkP3RoaXMuaWQmJnRoaXMuaWRbMF06dGhpcy5pZCx0JiYoZS5pZD10KSxlfSxzZWNvbmRJbnB1dElkOmZ1bmN0aW9uKCl7dmFyIGU9e30sdD12b2lkIDA7cmV0dXJuIHRoaXMucmFuZ2VkJiYodD10aGlzLmlkJiZ0aGlzLmlkWzFdKSx0JiYoZS5pZD10KSxlfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMucG9wcGVyT3B0aW9ucz17Ym91bmRhcmllc1BhZGRpbmc6MCxncHVBY2NlbGVyYXRpb246ITF9LHRoaXMucGxhY2VtZW50PXBvW3RoaXMuYWxpZ25dfHxwby5sZWZ0LHRoaXMuJG9uKCJmaWVsZFJlc2V0Iix0aGlzLmhhbmRsZUZpZWxkUmVzZXQpfSxtZXRob2RzOntmb2N1czpmdW5jdGlvbigpe3RoaXMucmFuZ2VkP3RoaXMuaGFuZGxlRm9jdXMoKTp0aGlzLiRyZWZzLnJlZmVyZW5jZS5mb2N1cygpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5yZWZJbnB1dC5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ibHVyKCl9KSl9LHBhcnNlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KHJvWyJpc0RhdGVPYmplY3QiXSkoZSl8fEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkocm9bImlzRGF0ZU9iamVjdCJdKTtyZXR1cm4gdGhpcy52YWx1ZUZvcm1hdCYmIXQmJm1vKGUsdGhpcy52YWx1ZUZvcm1hdCx0aGlzLnR5cGUsdGhpcy5yYW5nZVNlcGFyYXRvcil8fGV9LGZvcm1hdFRvVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KHJvWyJpc0RhdGVPYmplY3QiXSkoZSl8fEFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkocm9bImlzRGF0ZU9iamVjdCJdKTtyZXR1cm4gdGhpcy52YWx1ZUZvcm1hdCYmdD9nbyhlLHRoaXMudmFsdWVGb3JtYXQsdGhpcy50eXBlLHRoaXMucmFuZ2VTZXBhcmF0b3IpOmV9LHBhcnNlU3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5LmlzQXJyYXkoZSk/dGhpcy50eXBlOnRoaXMudHlwZS5yZXBsYWNlKCJyYW5nZSIsIiIpO3JldHVybiBtbyhlLHRoaXMuZm9ybWF0LHQpfSxmb3JtYXRUb1N0cmluZzpmdW5jdGlvbihlKXt2YXIgdD1BcnJheS5pc0FycmF5KGUpP3RoaXMudHlwZTp0aGlzLnR5cGUucmVwbGFjZSgicmFuZ2UiLCIiKTtyZXR1cm4gZ28oZSx0aGlzLmZvcm1hdCx0KX0saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbigpe3RoaXMucmVhZG9ubHl8fHRoaXMucGlja2VyRGlzYWJsZWR8fCF0aGlzLnZhbHVlSXNFbXB0eSYmdGhpcy5jbGVhcmFibGUmJih0aGlzLnNob3dDbG9zZT0hMCl9LGhhbmRsZUNoYW5nZTpmdW5jdGlvbigpe2lmKHRoaXMudXNlcklucHV0KXt2YXIgZT10aGlzLnBhcnNlU3RyaW5nKHRoaXMuZGlzcGxheVZhbHVlKTtlJiYodGhpcy5waWNrZXIudmFsdWU9ZSx0aGlzLmlzVmFsaWRWYWx1ZShlKSYmKHRoaXMuZW1pdElucHV0KGUpLHRoaXMudXNlcklucHV0PW51bGwpKX0iIj09PXRoaXMudXNlcklucHV0JiYodGhpcy5lbWl0SW5wdXQobnVsbCksdGhpcy5lbWl0Q2hhbmdlKG51bGwpLHRoaXMudXNlcklucHV0PW51bGwpfSxoYW5kbGVTdGFydElucHV0OmZ1bmN0aW9uKGUpe3RoaXMudXNlcklucHV0P3RoaXMudXNlcklucHV0PVtlLnRhcmdldC52YWx1ZSx0aGlzLnVzZXJJbnB1dFsxXV06dGhpcy51c2VySW5wdXQ9W2UudGFyZ2V0LnZhbHVlLG51bGxdfSxoYW5kbGVFbmRJbnB1dDpmdW5jdGlvbihlKXt0aGlzLnVzZXJJbnB1dD90aGlzLnVzZXJJbnB1dD1bdGhpcy51c2VySW5wdXRbMF0sZS50YXJnZXQudmFsdWVdOnRoaXMudXNlcklucHV0PVtudWxsLGUudGFyZ2V0LnZhbHVlXX0saGFuZGxlU3RhcnRDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJzZVN0cmluZyh0aGlzLnVzZXJJbnB1dCYmdGhpcy51c2VySW5wdXRbMF0pO2lmKHQpe3RoaXMudXNlcklucHV0PVt0aGlzLmZvcm1hdFRvU3RyaW5nKHQpLHRoaXMuZGlzcGxheVZhbHVlWzFdXTt2YXIgbj1bdCx0aGlzLnBpY2tlci52YWx1ZSYmdGhpcy5waWNrZXIudmFsdWVbMV1dO3RoaXMucGlja2VyLnZhbHVlPW4sdGhpcy5pc1ZhbGlkVmFsdWUobikmJih0aGlzLmVtaXRJbnB1dChuKSx0aGlzLnVzZXJJbnB1dD1udWxsKX19LGhhbmRsZUVuZENoYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBhcnNlU3RyaW5nKHRoaXMudXNlcklucHV0JiZ0aGlzLnVzZXJJbnB1dFsxXSk7aWYodCl7dGhpcy51c2VySW5wdXQ9W3RoaXMuZGlzcGxheVZhbHVlWzBdLHRoaXMuZm9ybWF0VG9TdHJpbmcodCldO3ZhciBuPVt0aGlzLnBpY2tlci52YWx1ZSYmdGhpcy5waWNrZXIudmFsdWVbMF0sdF07dGhpcy5waWNrZXIudmFsdWU9bix0aGlzLmlzVmFsaWRWYWx1ZShuKSYmKHRoaXMuZW1pdElucHV0KG4pLHRoaXMudXNlcklucHV0PW51bGwpfX0saGFuZGxlQ2xpY2tJY29uOmZ1bmN0aW9uKGUpe3RoaXMucmVhZG9ubHl8fHRoaXMucGlja2VyRGlzYWJsZWR8fCh0aGlzLnNob3dDbG9zZT8odGhpcy52YWx1ZU9uT3Blbj10aGlzLnZhbHVlLGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5lbWl0SW5wdXQobnVsbCksdGhpcy5lbWl0Q2hhbmdlKG51bGwpLHRoaXMuc2hvd0Nsb3NlPSExLHRoaXMucGlja2VyJiYiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMucGlja2VyLmhhbmRsZUNsZWFyJiZ0aGlzLnBpY2tlci5oYW5kbGVDbGVhcigpKTp0aGlzLnBpY2tlclZpc2libGU9IXRoaXMucGlja2VyVmlzaWJsZSl9LGhhbmRsZUNsb3NlOmZ1bmN0aW9uKCl7aWYodGhpcy5waWNrZXJWaXNpYmxlJiYodGhpcy5waWNrZXJWaXNpYmxlPSExLCJkYXRlcyI9PT10aGlzLnR5cGUpKXt2YXIgZT1tbyh0aGlzLnZhbHVlT25PcGVuLHRoaXMudmFsdWVGb3JtYXQsdGhpcy50eXBlLHRoaXMucmFuZ2VTZXBhcmF0b3IpfHx0aGlzLnZhbHVlT25PcGVuO3RoaXMuZW1pdElucHV0KGUpfX0saGFuZGxlRmllbGRSZXNldDpmdW5jdGlvbihlKXt0aGlzLnVzZXJJbnB1dD0iIj09PWU/bnVsbDplfSxoYW5kbGVGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTstMT09PXNvLmluZGV4T2YoZSl8fHRoaXMucGlja2VyVmlzaWJsZXx8KHRoaXMucGlja2VyVmlzaWJsZT0hMCksdGhpcy4kZW1pdCgiZm9jdXMiLHRoaXMpfSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1lLmtleUNvZGU7cmV0dXJuIDI3PT09bj8odGhpcy5waWNrZXJWaXNpYmxlPSExLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKSk6OSE9PW4/MTM9PT1uPygoIiI9PT10aGlzLnVzZXJJbnB1dHx8dGhpcy5pc1ZhbGlkVmFsdWUodGhpcy5wYXJzZVN0cmluZyh0aGlzLmRpc3BsYXlWYWx1ZSkpKSYmKHRoaXMuaGFuZGxlQ2hhbmdlKCksdGhpcy5waWNrZXJWaXNpYmxlPXRoaXMucGlja2VyLnZpc2libGU9ITEsdGhpcy5ibHVyKCkpLHZvaWQgZS5zdG9wUHJvcGFnYXRpb24oKSk6dm9pZCh0aGlzLnVzZXJJbnB1dD9lLnN0b3BQcm9wYWdhdGlvbigpOnRoaXMucGlja2VyJiZ0aGlzLnBpY2tlci5oYW5kbGVLZXlkb3duJiZ0aGlzLnBpY2tlci5oYW5kbGVLZXlkb3duKGUpKTp2b2lkKHRoaXMucmFuZ2VkP3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7LTE9PT10LnJlZklucHV0LmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJih0LnBpY2tlclZpc2libGU9ITEsdC5ibHVyKCksZS5zdG9wUHJvcGFnYXRpb24oKSl9KSwwKToodGhpcy5oYW5kbGVDaGFuZ2UoKSx0aGlzLnBpY2tlclZpc2libGU9dGhpcy5waWNrZXIudmlzaWJsZT0hMSx0aGlzLmJsdXIoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9LGhhbmRsZVJhbmdlQ2xpY2s6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGU7LTE9PT1zby5pbmRleE9mKGUpfHx0aGlzLnBpY2tlclZpc2libGV8fCh0aGlzLnBpY2tlclZpc2libGU9ITApLHRoaXMuJGVtaXQoImZvY3VzIix0aGlzKX0saGlkZVBpY2tlcjpmdW5jdGlvbigpe3RoaXMucGlja2VyJiYodGhpcy5waWNrZXIucmVzZXRWaWV3JiZ0aGlzLnBpY2tlci5yZXNldFZpZXcoKSx0aGlzLnBpY2tlclZpc2libGU9dGhpcy5waWNrZXIudmlzaWJsZT0hMSx0aGlzLmRlc3Ryb3lQb3BwZXIoKSl9LHNob3dQaWNrZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJGlzU2VydmVyfHwodGhpcy5waWNrZXJ8fHRoaXMubW91bnRQaWNrZXIoKSx0aGlzLnBpY2tlclZpc2libGU9dGhpcy5waWNrZXIudmlzaWJsZT0hMCx0aGlzLnVwZGF0ZVBvcHBlcigpLHRoaXMucGlja2VyLnZhbHVlPXRoaXMucGFyc2VkVmFsdWUsdGhpcy5waWNrZXIucmVzZXRWaWV3JiZ0aGlzLnBpY2tlci5yZXNldFZpZXcoKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtlLnBpY2tlci5hZGp1c3RTcGlubmVycyYmZS5waWNrZXIuYWRqdXN0U3Bpbm5lcnMoKX0pKSl9LG1vdW50UGlja2VyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnBpY2tlcj1uZXcgamkuYSh0aGlzLnBhbmVsKS4kbW91bnQoKSx0aGlzLnBpY2tlci5kZWZhdWx0VmFsdWU9dGhpcy5kZWZhdWx0VmFsdWUsdGhpcy5waWNrZXIuZGVmYXVsdFRpbWU9dGhpcy5kZWZhdWx0VGltZSx0aGlzLnBpY2tlci5wb3BwZXJDbGFzcz10aGlzLnBvcHBlckNsYXNzLHRoaXMucG9wcGVyRWxtPXRoaXMucGlja2VyLiRlbCx0aGlzLnBpY2tlci53aWR0aD10aGlzLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCx0aGlzLnBpY2tlci5zaG93VGltZT0iZGF0ZXRpbWUiPT09dGhpcy50eXBlfHwiZGF0ZXRpbWVyYW5nZSI9PT10aGlzLnR5cGUsdGhpcy5waWNrZXIuc2VsZWN0aW9uTW9kZT10aGlzLnNlbGVjdGlvbk1vZGUsdGhpcy5waWNrZXIudW5saW5rUGFuZWxzPXRoaXMudW5saW5rUGFuZWxzLHRoaXMucGlja2VyLmFycm93Q29udHJvbD10aGlzLmFycm93Q29udHJvbHx8dGhpcy50aW1lQXJyb3dDb250cm9sfHwhMSx0aGlzLiR3YXRjaCgiZm9ybWF0IiwoZnVuY3Rpb24odCl7ZS5waWNrZXIuZm9ybWF0PXR9KSk7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgdD1lLnBpY2tlck9wdGlvbnM7aWYodCYmdC5zZWxlY3RhYmxlUmFuZ2Upe3ZhciBuPXQuc2VsZWN0YWJsZVJhbmdlLGk9Zm8uZGF0ZXRpbWVyYW5nZS5wYXJzZXIscj1hby50aW1lcmFuZ2U7bj1BcnJheS5pc0FycmF5KG4pP246W25dLGUucGlja2VyLnNlbGVjdGFibGVSYW5nZT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkodCxyLGUucmFuZ2VTZXBhcmF0b3IpfSkpfWZvcih2YXIgbyBpbiB0KXQuaGFzT3duUHJvcGVydHkobykmJiJzZWxlY3RhYmxlUmFuZ2UiIT09byYmKGUucGlja2VyW29dPXRbb10pO2UuZm9ybWF0JiYoZS5waWNrZXIuZm9ybWF0PWUuZm9ybWF0KX07dCgpLHRoaXMudW53YXRjaFBpY2tlck9wdGlvbnM9dGhpcy4kd2F0Y2goInBpY2tlck9wdGlvbnMiLChmdW5jdGlvbigpe3JldHVybiB0KCl9KSx7ZGVlcDohMH0pLHRoaXMuJGVsLmFwcGVuZENoaWxkKHRoaXMucGlja2VyLiRlbCksdGhpcy5waWNrZXIucmVzZXRWaWV3JiZ0aGlzLnBpY2tlci5yZXNldFZpZXcoKSx0aGlzLnBpY2tlci4kb24oImRvZGVzdHJveSIsdGhpcy5kb0Rlc3Ryb3kpLHRoaXMucGlja2VyLiRvbigicGljayIsKGZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtlLnVzZXJJbnB1dD1udWxsLGUucGlja2VyVmlzaWJsZT1lLnBpY2tlci52aXNpYmxlPW4sZS5lbWl0SW5wdXQodCksZS5waWNrZXIucmVzZXRWaWV3JiZlLnBpY2tlci5yZXNldFZpZXcoKX0pKSx0aGlzLnBpY2tlci4kb24oInNlbGVjdC1yYW5nZSIsKGZ1bmN0aW9uKHQsbixpKXswIT09ZS5yZWZJbnB1dC5sZW5ndGgmJihpJiYibWluIiE9PWk/Im1heCI9PT1pJiYoZS5yZWZJbnB1dFsxXS5zZXRTZWxlY3Rpb25SYW5nZSh0LG4pLGUucmVmSW5wdXRbMV0uZm9jdXMoKSk6KGUucmVmSW5wdXRbMF0uc2V0U2VsZWN0aW9uUmFuZ2UodCxuKSxlLnJlZklucHV0WzBdLmZvY3VzKCkpKX0pKX0sdW5tb3VudFBpY2tlcjpmdW5jdGlvbigpe3RoaXMucGlja2VyJiYodGhpcy5waWNrZXIuJGRlc3Ryb3koKSx0aGlzLnBpY2tlci4kb2ZmKCksImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zJiZ0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zKCksdGhpcy5waWNrZXIuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5waWNrZXIuJGVsKSl9LGVtaXRDaGFuZ2U6ZnVuY3Rpb24oZSl7dm8oZSx0aGlzLnZhbHVlT25PcGVuKXx8KHRoaXMuJGVtaXQoImNoYW5nZSIsZSksdGhpcy52YWx1ZU9uT3Blbj1lLHRoaXMudmFsaWRhdGVFdmVudCYmdGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixlKSl9LGVtaXRJbnB1dDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZvcm1hdFRvVmFsdWUoZSk7dm8odGhpcy52YWx1ZSx0KXx8dGhpcy4kZW1pdCgiaW5wdXQiLHQpfSxpc1ZhbGlkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGlja2VyfHx0aGlzLm1vdW50UGlja2VyKCksIXRoaXMucGlja2VyLmlzVmFsaWRWYWx1ZXx8ZSYmdGhpcy5waWNrZXIuaXNWYWxpZFZhbHVlKGUpfX19LF9vPXhvLHdvPXMoX28sbm8saW8sITEsbnVsbCxudWxsLG51bGwpO3dvLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyLnZ1ZSI7dmFyIFNvPXdvLmV4cG9ydHMsQ289ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWVudGVyIjplLmhhbmRsZUVudGVyLCJhZnRlci1sZWF2ZSI6ZS5oYW5kbGVMZWF2ZX19LFtuKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsIGVsLWRhdGUtcGlja2VyIGVsLXBvcHBlciIsY2xhc3M6W3siaGFzLXNpZGViYXIiOmUuJHNsb3RzLnNpZGViYXJ8fGUuc2hvcnRjdXRzLCJoYXMtdGltZSI6ZS5zaG93VGltZX0sZS5wb3BwZXJDbGFzc119LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXIifSxbZS5fdCgic2lkZWJhciIpLGUuc2hvcnRjdXRzP24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX3NpZGViYXIifSxlLl9sKGUuc2hvcnRjdXRzLChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJidXR0b24iLHtrZXk6aSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbihuKXtlLmhhbmRsZVNob3J0Y3V0Q2xpY2sodCl9fX0sW2UuX3YoZS5fcyh0LnRleHQpKV0pfSkpLDApOmUuX2UoKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5In0sW2Uuc2hvd1RpbWU/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcGlja2VyX190aW1lLWhlYWRlciJ9LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcGlja2VyX19lZGl0b3Itd3JhcCJ9LFtuKCJlbC1pbnB1dCIse2F0dHJzOntwbGFjZWhvbGRlcjplLnQoImVsLmRhdGVwaWNrZXIuc2VsZWN0RGF0ZSIpLHZhbHVlOmUudmlzaWJsZURhdGUsc2l6ZToic21hbGwifSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUudXNlcklucHV0RGF0ZT10fSxjaGFuZ2U6ZS5oYW5kbGVWaXNpYmxlRGF0ZUNoYW5nZX19KV0sMSksbigic3BhbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTplLmhhbmRsZVRpbWVQaWNrQ2xvc2UsZXhwcmVzc2lvbjoiaGFuZGxlVGltZVBpY2tDbG9zZSJ9XSxzdGF0aWNDbGFzczoiZWwtZGF0ZS1waWNrZXJfX2VkaXRvci13cmFwIn0sW24oImVsLWlucHV0Iix7cmVmOiJpbnB1dCIsYXR0cnM6e3BsYWNlaG9sZGVyOmUudCgiZWwuZGF0ZXBpY2tlci5zZWxlY3RUaW1lIiksdmFsdWU6ZS52aXNpYmxlVGltZSxzaXplOiJzbWFsbCJ9LG9uOntmb2N1czpmdW5jdGlvbih0KXtlLnRpbWVQaWNrZXJWaXNpYmxlPSEwfSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS51c2VySW5wdXRUaW1lPXR9LGNoYW5nZTplLmhhbmRsZVZpc2libGVUaW1lQ2hhbmdlfX0pLG4oInRpbWUtcGlja2VyIix7cmVmOiJ0aW1lcGlja2VyIixhdHRyczp7InRpbWUtYXJyb3ctY29udHJvbCI6ZS5hcnJvd0NvbnRyb2wsdmlzaWJsZTplLnRpbWVQaWNrZXJWaXNpYmxlfSxvbjp7cGljazplLmhhbmRsZVRpbWVQaWNrLG1vdW50ZWQ6ZS5wcm94eVRpbWVQaWNrZXJEYXRhUHJvcGVydGllc319KV0sMSldKTplLl9lKCksbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6InRpbWUiIT09ZS5jdXJyZW50VmlldyxleHByZXNzaW9uOiJjdXJyZW50VmlldyAhPT0gJ3RpbWUnIn1dLHN0YXRpY0NsYXNzOiJlbC1kYXRlLXBpY2tlcl9faGVhZGVyIixjbGFzczp7ImVsLWRhdGUtcGlja2VyX19oZWFkZXItLWJvcmRlcmVkIjoieWVhciI9PT1lLmN1cnJlbnRWaWV3fHwibW9udGgiPT09ZS5jdXJyZW50Vmlld319LFtuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fcHJldi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjplLnQoImVsLmRhdGVwaWNrZXIucHJldlllYXIiKX0sb246e2NsaWNrOmUucHJldlllYXJ9fSksbigiYnV0dG9uIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ImRhdGUiPT09ZS5jdXJyZW50VmlldyxleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ2RhdGUnIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19wcmV2LWJ0biBlbC1pY29uLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjplLnQoImVsLmRhdGVwaWNrZXIucHJldk1vbnRoIil9LG9uOntjbGljazplLnByZXZNb250aH19KSxuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWwiLGF0dHJzOntyb2xlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5zaG93WWVhclBpY2tlcn19LFtlLl92KGUuX3MoZS55ZWFyTGFiZWwpKV0pLG4oInNwYW4iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZToiZGF0ZSI9PT1lLmN1cnJlbnRWaWV3LGV4cHJlc3Npb246ImN1cnJlbnRWaWV3ID09PSAnZGF0ZScifV0sc3RhdGljQ2xhc3M6ImVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWwiLGNsYXNzOnthY3RpdmU6Im1vbnRoIj09PWUuY3VycmVudFZpZXd9LGF0dHJzOntyb2xlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5zaG93TW9udGhQaWNrZXJ9fSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5tb250aCIrKGUubW9udGgrMSkpKSldKSxuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fbmV4dC1idG4gZWwtaWNvbi1kLWFycm93LXJpZ2h0IixhdHRyczp7dHlwZToiYnV0dG9uIiwiYXJpYS1sYWJlbCI6ZS50KCJlbC5kYXRlcGlja2VyLm5leHRZZWFyIil9LG9uOntjbGljazplLm5leHRZZWFyfX0pLG4oImJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiJkYXRlIj09PWUuY3VycmVudFZpZXcsZXhwcmVzc2lvbjoiY3VycmVudFZpZXcgPT09ICdkYXRlJyJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fbmV4dC1idG4gZWwtaWNvbi1hcnJvdy1yaWdodCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiIsImFyaWEtbGFiZWwiOmUudCgiZWwuZGF0ZXBpY2tlci5uZXh0TW9udGgiKX0sb246e2NsaWNrOmUubmV4dE1vbnRofX0pXSksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fY29udGVudCJ9LFtuKCJkYXRlLXRhYmxlIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ImRhdGUiPT09ZS5jdXJyZW50VmlldyxleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ2RhdGUnIn1dLGF0dHJzOnsic2VsZWN0aW9uLW1vZGUiOmUuc2VsZWN0aW9uTW9kZSwiZmlyc3QtZGF5LW9mLXdlZWsiOmUuZmlyc3REYXlPZldlZWssdmFsdWU6ZS52YWx1ZSwiZGVmYXVsdC12YWx1ZSI6ZS5kZWZhdWx0VmFsdWU/bmV3IERhdGUoZS5kZWZhdWx0VmFsdWUpOm51bGwsZGF0ZTplLmRhdGUsImNlbGwtY2xhc3MtbmFtZSI6ZS5jZWxsQ2xhc3NOYW1lLCJkaXNhYmxlZC1kYXRlIjplLmRpc2FibGVkRGF0ZX0sb246e3BpY2s6ZS5oYW5kbGVEYXRlUGlja319KSxuKCJ5ZWFyLXRhYmxlIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6InllYXIiPT09ZS5jdXJyZW50VmlldyxleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ3llYXInIn1dLGF0dHJzOnt2YWx1ZTplLnZhbHVlLCJkZWZhdWx0LXZhbHVlIjplLmRlZmF1bHRWYWx1ZT9uZXcgRGF0ZShlLmRlZmF1bHRWYWx1ZSk6bnVsbCxkYXRlOmUuZGF0ZSwiZGlzYWJsZWQtZGF0ZSI6ZS5kaXNhYmxlZERhdGV9LG9uOntwaWNrOmUuaGFuZGxlWWVhclBpY2t9fSksbigibW9udGgtdGFibGUiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZToibW9udGgiPT09ZS5jdXJyZW50VmlldyxleHByZXNzaW9uOiJjdXJyZW50VmlldyA9PT0gJ21vbnRoJyJ9XSxhdHRyczp7dmFsdWU6ZS52YWx1ZSwiZGVmYXVsdC12YWx1ZSI6ZS5kZWZhdWx0VmFsdWU/bmV3IERhdGUoZS5kZWZhdWx0VmFsdWUpOm51bGwsZGF0ZTplLmRhdGUsImRpc2FibGVkLWRhdGUiOmUuZGlzYWJsZWREYXRlfSxvbjp7cGljazplLmhhbmRsZU1vbnRoUGlja319KV0sMSldKV0sMiksbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5mb290ZXJWaXNpYmxlJiYiZGF0ZSI9PT1lLmN1cnJlbnRWaWV3LGV4cHJlc3Npb246ImZvb3RlclZpc2libGUgJiYgY3VycmVudFZpZXcgPT09ICdkYXRlJyJ9XSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19mb290ZXIifSxbbigiZWwtYnV0dG9uIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ImRhdGVzIiE9PWUuc2VsZWN0aW9uTW9kZSxleHByZXNzaW9uOiJzZWxlY3Rpb25Nb2RlICE9PSAnZGF0ZXMnIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuIixhdHRyczp7c2l6ZToibWluaSIsdHlwZToidGV4dCJ9LG9uOntjbGljazplLmNoYW5nZVRvTm93fX0sW2UuX3YoIlxuICAgICAgICAiK2UuX3MoZS50KCJlbC5kYXRlcGlja2VyLm5vdyIpKSsiXG4gICAgICAiKV0pLG4oImVsLWJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuIixhdHRyczp7cGxhaW46IiIsc2l6ZToibWluaSJ9LG9uOntjbGljazplLmNvbmZpcm19fSxbZS5fdigiXG4gICAgICAgICIrZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIuY29uZmlybSIpKSsiXG4gICAgICAiKV0pXSwxKV0pXSl9LGtvPVtdO0NvLl93aXRoU3RyaXBwZWQ9ITA7dmFyIFRvPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZnVuY3Rpb24odCl7ZS4kZW1pdCgiZG9kZXN0cm95Iil9fX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsIGVsLXBvcHBlciIsY2xhc3M6ZS5wb3BwZXJDbGFzc30sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXBhbmVsX19jb250ZW50IixjbGFzczp7Imhhcy1zZWNvbmRzIjplLnNob3dTZWNvbmRzfX0sW24oInRpbWUtc3Bpbm5lciIse3JlZjoic3Bpbm5lciIsYXR0cnM6eyJhcnJvdy1jb250cm9sIjplLnVzZUFycm93LCJzaG93LXNlY29uZHMiOmUuc2hvd1NlY29uZHMsImFtLXBtLW1vZGUiOmUuYW1QbU1vZGUsZGF0ZTplLmRhdGV9LG9uOntjaGFuZ2U6ZS5oYW5kbGVDaGFuZ2UsInNlbGVjdC1yYW5nZSI6ZS5zZXRTZWxlY3Rpb25SYW5nZX19KV0sMSksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcGFuZWxfX2Zvb3RlciJ9LFtuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fYnRuIGNhbmNlbCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLmhhbmRsZUNhbmNlbH19LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLmNhbmNlbCIpKSldKSxuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fYnRuIixjbGFzczp7Y29uZmlybTohZS5kaXNhYmxlZH0sYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUNvbmZpcm0oKX19fSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5jb25maXJtIikpKV0pXSldKV0pfSxNbz1bXTtUby5fd2l0aFN0cmlwcGVkPSEwO3ZhciBFbz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lciIsY2xhc3M6eyJoYXMtc2Vjb25kcyI6ZS5zaG93U2Vjb25kc319LFtlLmFycm93Q29udHJvbD9lLl9lKCk6W24oImVsLXNjcm9sbGJhciIse3JlZjoiaG91cnMiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIiLGF0dHJzOnsid3JhcC1zdHlsZSI6Im1heC1oZWlnaHQ6IGluaGVyaXQ7Iiwidmlldy1jbGFzcyI6ImVsLXRpbWUtc3Bpbm5lcl9fbGlzdCIsbm9yZXNpemU6IiIsdGFnOiJ1bCJ9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuZW1pdFNlbGVjdFJhbmdlKCJob3VycyIpfSxtb3VzZW1vdmU6ZnVuY3Rpb24odCl7ZS5hZGp1c3RDdXJyZW50U3Bpbm5lcigiaG91cnMiKX19fSxlLl9sKGUuaG91cnNMaXN0LChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJsaSIse2tleTppLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6aT09PWUuaG91cnMsZGlzYWJsZWQ6dH0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe2UuaGFuZGxlQ2xpY2soImhvdXJzIix7dmFsdWU6aSxkaXNhYmxlZDp0fSl9fX0sW2UuX3YoZS5fcygoIjAiKyhlLmFtUG1Nb2RlP2klMTJ8fDEyOmkpKS5zbGljZSgtMikpK2UuX3MoZS5hbVBtKGkpKSldKX0pKSwwKSxuKCJlbC1zY3JvbGxiYXIiLHtyZWY6Im1pbnV0ZXMiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIiLGF0dHJzOnsid3JhcC1zdHlsZSI6Im1heC1oZWlnaHQ6IGluaGVyaXQ7Iiwidmlldy1jbGFzcyI6ImVsLXRpbWUtc3Bpbm5lcl9fbGlzdCIsbm9yZXNpemU6IiIsdGFnOiJ1bCJ9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuZW1pdFNlbGVjdFJhbmdlKCJtaW51dGVzIil9LG1vdXNlbW92ZTpmdW5jdGlvbih0KXtlLmFkanVzdEN1cnJlbnRTcGlubmVyKCJtaW51dGVzIil9fX0sZS5fbChlLm1pbnV0ZXNMaXN0LChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJsaSIse2tleTppLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6aT09PWUubWludXRlcyxkaXNhYmxlZDohdH0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQ2xpY2soIm1pbnV0ZXMiLHt2YWx1ZTppLGRpc2FibGVkOiExfSl9fX0sW2UuX3YoZS5fcygoIjAiK2kpLnNsaWNlKC0yKSkpXSl9KSksMCksbigiZWwtc2Nyb2xsYmFyIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5zaG93U2Vjb25kcyxleHByZXNzaW9uOiJzaG93U2Vjb25kcyJ9XSxyZWY6InNlY29uZHMiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIiLGF0dHJzOnsid3JhcC1zdHlsZSI6Im1heC1oZWlnaHQ6IGluaGVyaXQ7Iiwidmlldy1jbGFzcyI6ImVsLXRpbWUtc3Bpbm5lcl9fbGlzdCIsbm9yZXNpemU6IiIsdGFnOiJ1bCJ9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuZW1pdFNlbGVjdFJhbmdlKCJzZWNvbmRzIil9LG1vdXNlbW92ZTpmdW5jdGlvbih0KXtlLmFkanVzdEN1cnJlbnRTcGlubmVyKCJzZWNvbmRzIil9fX0sZS5fbCg2MCwoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigibGkiLHtrZXk6aSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19pdGVtIixjbGFzczp7YWN0aXZlOmk9PT1lLnNlY29uZHN9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUNsaWNrKCJzZWNvbmRzIix7dmFsdWU6aSxkaXNhYmxlZDohMX0pfX19LFtlLl92KGUuX3MoKCIwIitpKS5zbGljZSgtMikpKV0pfSkpLDApXSxlLmFycm93Q29udHJvbD9bbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciBpcy1hcnJvdyIsb246e21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5lbWl0U2VsZWN0UmFuZ2UoImhvdXJzIil9fX0sW24oImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5kZWNyZWFzZSxleHByZXNzaW9uOiJkZWNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LXVwIn0pLG4oImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5pbmNyZWFzZSxleHByZXNzaW9uOiJpbmNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LWRvd24ifSksbigidWwiLHtyZWY6ImhvdXJzIixzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19saXN0In0sZS5fbChlLmFycm93SG91ckxpc3QsKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4oImxpIix7a2V5Omksc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9faXRlbSIsY2xhc3M6e2FjdGl2ZTp0PT09ZS5ob3VycyxkaXNhYmxlZDplLmhvdXJzTGlzdFt0XX19LFtlLl92KGUuX3Modm9pZCAwPT09dD8iIjooIjAiKyhlLmFtUG1Nb2RlP3QlMTJ8fDEyOnQpKS5zbGljZSgtMikrZS5hbVBtKHQpKSldKX0pKSwwKV0pLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIgaXMtYXJyb3ciLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuZW1pdFNlbGVjdFJhbmdlKCJtaW51dGVzIil9fX0sW24oImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5kZWNyZWFzZSxleHByZXNzaW9uOiJkZWNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LXVwIn0pLG4oImkiLHtkaXJlY3RpdmVzOlt7bmFtZToicmVwZWF0LWNsaWNrIixyYXdOYW1lOiJ2LXJlcGVhdC1jbGljayIsdmFsdWU6ZS5pbmNyZWFzZSxleHByZXNzaW9uOiJpbmNyZWFzZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LWRvd24ifSksbigidWwiLHtyZWY6Im1pbnV0ZXMiLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2xpc3QifSxlLl9sKGUuYXJyb3dNaW51dGVMaXN0LChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJsaSIse2tleTppLHN0YXRpY0NsYXNzOiJlbC10aW1lLXNwaW5uZXJfX2l0ZW0iLGNsYXNzOnthY3RpdmU6dD09PWUubWludXRlc319LFtlLl92KCJcbiAgICAgICAgICAiK2UuX3Modm9pZCAwPT09dD8iIjooIjAiK3QpLnNsaWNlKC0yKSkrIlxuICAgICAgICAiKV0pfSkpLDApXSksZS5zaG93U2Vjb25kcz9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX193cmFwcGVyIGlzLWFycm93Iixvbjp7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmVtaXRTZWxlY3RSYW5nZSgic2Vjb25kcyIpfX19LFtuKCJpIix7ZGlyZWN0aXZlczpbe25hbWU6InJlcGVhdC1jbGljayIscmF3TmFtZToidi1yZXBlYXQtY2xpY2siLHZhbHVlOmUuZGVjcmVhc2UsZXhwcmVzc2lvbjoiZGVjcmVhc2UifV0sc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy11cCJ9KSxuKCJpIix7ZGlyZWN0aXZlczpbe25hbWU6InJlcGVhdC1jbGljayIscmF3TmFtZToidi1yZXBlYXQtY2xpY2siLHZhbHVlOmUuaW5jcmVhc2UsZXhwcmVzc2lvbjoiaW5jcmVhc2UifV0sc3RhdGljQ2xhc3M6ImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy1kb3duIn0pLG4oInVsIix7cmVmOiJzZWNvbmRzIixzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19saXN0In0sZS5fbChlLmFycm93U2Vjb25kTGlzdCwoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigibGkiLHtrZXk6aSxzdGF0aWNDbGFzczoiZWwtdGltZS1zcGlubmVyX19pdGVtIixjbGFzczp7YWN0aXZlOnQ9PT1lLnNlY29uZHN9fSxbZS5fdigiXG4gICAgICAgICAgIitlLl9zKHZvaWQgMD09PXQ/IiI6KCIwIit0KS5zbGljZSgtMikpKyJcbiAgICAgICAgIildKX0pKSwwKV0pOmUuX2UoKV06ZS5fZSgpXSwyKX0sSW89W107RW8uX3dpdGhTdHJpcHBlZD0hMDt2YXIgRG89e2NvbXBvbmVudHM6e0VsU2Nyb2xsYmFyOkcuYX0sZGlyZWN0aXZlczp7cmVwZWF0Q2xpY2s6THR9LHByb3BzOntkYXRlOnt9LGRlZmF1bHRWYWx1ZTp7fSxzaG93U2Vjb25kczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGFycm93Q29udHJvbDpCb29sZWFuLGFtUG1Nb2RlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIifX0sY29tcHV0ZWQ6e2hvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRIb3VycygpfSxtaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRNaW51dGVzKCl9LHNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlLmdldFNlY29uZHMoKX0saG91cnNMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyb1siZ2V0UmFuZ2VIb3VycyJdKSh0aGlzLnNlbGVjdGFibGVSYW5nZSl9LG1pbnV0ZXNMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyb1siZ2V0UmFuZ2VNaW51dGVzIl0pKHRoaXMuc2VsZWN0YWJsZVJhbmdlLHRoaXMuaG91cnMpfSxhcnJvd0hvdXJMaXN0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ob3VycztyZXR1cm5bZT4wP2UtMTp2b2lkIDAsZSxlPDIzP2UrMTp2b2lkIDBdfSxhcnJvd01pbnV0ZUxpc3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1pbnV0ZXM7cmV0dXJuW2U+MD9lLTE6dm9pZCAwLGUsZTw1OT9lKzE6dm9pZCAwXX0sYXJyb3dTZWNvbmRMaXN0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zZWNvbmRzO3JldHVybltlPjA/ZS0xOnZvaWQgMCxlLGU8NTk/ZSsxOnZvaWQgMF19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3NlbGVjdGFibGVSYW5nZTpbXSxjdXJyZW50U2Nyb2xsYmFyOm51bGx9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXshZS5hcnJvd0NvbnRyb2wmJmUuYmluZFNjcm9sbEV2ZW50KCl9KSl9LG1ldGhvZHM6e2luY3JlYXNlOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxEb3duKDEpfSxkZWNyZWFzZTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsRG93bigtMSl9LG1vZGlmeURhdGVGaWVsZDpmdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImhvdXJzIjp0aGlzLiRlbWl0KCJjaGFuZ2UiLE9iamVjdChyb1sibW9kaWZ5VGltZSJdKSh0aGlzLmRhdGUsdCx0aGlzLm1pbnV0ZXMsdGhpcy5zZWNvbmRzKSk7YnJlYWs7Y2FzZSJtaW51dGVzIjp0aGlzLiRlbWl0KCJjaGFuZ2UiLE9iamVjdChyb1sibW9kaWZ5VGltZSJdKSh0aGlzLmRhdGUsdGhpcy5ob3Vycyx0LHRoaXMuc2Vjb25kcykpO2JyZWFrO2Nhc2Uic2Vjb25kcyI6dGhpcy4kZW1pdCgiY2hhbmdlIixPYmplY3Qocm9bIm1vZGlmeVRpbWUiXSkodGhpcy5kYXRlLHRoaXMuaG91cnMsdGhpcy5taW51dGVzLHQpKTticmVha319LGhhbmRsZUNsaWNrOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC52YWx1ZSxpPXQuZGlzYWJsZWQ7aXx8KHRoaXMubW9kaWZ5RGF0ZUZpZWxkKGUsbiksdGhpcy5lbWl0U2VsZWN0UmFuZ2UoZSksdGhpcy5hZGp1c3RTcGlubmVyKGUsbikpfSxlbWl0U2VsZWN0UmFuZ2U6ZnVuY3Rpb24oZSl7ImhvdXJzIj09PWU/dGhpcy4kZW1pdCgic2VsZWN0LXJhbmdlIiwwLDIpOiJtaW51dGVzIj09PWU/dGhpcy4kZW1pdCgic2VsZWN0LXJhbmdlIiwzLDUpOiJzZWNvbmRzIj09PWUmJnRoaXMuJGVtaXQoInNlbGVjdC1yYW5nZSIsNiw4KSx0aGlzLmN1cnJlbnRTY3JvbGxiYXI9ZX0sYmluZFNjcm9sbEV2ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWZ1bmN0aW9uKHQpe2UuJHJlZnNbdF0ud3JhcC5vbnNjcm9sbD1mdW5jdGlvbihuKXtlLmhhbmRsZVNjcm9sbCh0LG4pfX07dCgiaG91cnMiKSx0KCJtaW51dGVzIiksdCgic2Vjb25kcyIpfSxoYW5kbGVTY3JvbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5taW4oTWF0aC5yb3VuZCgodGhpcy4kcmVmc1tlXS53cmFwLnNjcm9sbFRvcC0oLjUqdGhpcy5zY3JvbGxCYXJIZWlnaHQoZSktMTApL3RoaXMudHlwZUl0ZW1IZWlnaHQoZSkrMykvdGhpcy50eXBlSXRlbUhlaWdodChlKSksImhvdXJzIj09PWU/MjM6NTkpO3RoaXMubW9kaWZ5RGF0ZUZpZWxkKGUsdCl9LGFkanVzdFNwaW5uZXJzOmZ1bmN0aW9uKCl7dGhpcy5hZGp1c3RTcGlubmVyKCJob3VycyIsdGhpcy5ob3VycyksdGhpcy5hZGp1c3RTcGlubmVyKCJtaW51dGVzIix0aGlzLm1pbnV0ZXMpLHRoaXMuYWRqdXN0U3Bpbm5lcigic2Vjb25kcyIsdGhpcy5zZWNvbmRzKX0sYWRqdXN0Q3VycmVudFNwaW5uZXI6ZnVuY3Rpb24oZSl7dGhpcy5hZGp1c3RTcGlubmVyKGUsdGhpc1tlXSl9LGFkanVzdFNwaW5uZXI6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5hcnJvd0NvbnRyb2wpe3ZhciBuPXRoaXMuJHJlZnNbZV0ud3JhcDtuJiYobi5zY3JvbGxUb3A9TWF0aC5tYXgoMCx0KnRoaXMudHlwZUl0ZW1IZWlnaHQoZSkpKX19LHNjcm9sbERvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLmN1cnJlbnRTY3JvbGxiYXJ8fHRoaXMuZW1pdFNlbGVjdFJhbmdlKCJob3VycyIpO3ZhciBuPXRoaXMuY3VycmVudFNjcm9sbGJhcixpPXRoaXMuaG91cnNMaXN0LHI9dGhpc1tuXTtpZigiaG91cnMiPT09dGhpcy5jdXJyZW50U2Nyb2xsYmFyKXt2YXIgbz1NYXRoLmFicyhlKTtlPWU+MD8xOi0xO3ZhciBhPWkubGVuZ3RoO3doaWxlKGEtLSYmbylyPShyK2UraS5sZW5ndGgpJWkubGVuZ3RoLGlbcl18fG8tLTtpZihpW3JdKXJldHVybn1lbHNlIHI9KHIrZSs2MCklNjA7dGhpcy5tb2RpZnlEYXRlRmllbGQobixyKSx0aGlzLmFkanVzdFNwaW5uZXIobixyKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0U2VsZWN0UmFuZ2UodC5jdXJyZW50U2Nyb2xsYmFyKX0pKX0sYW1QbTpmdW5jdGlvbihlKXt2YXIgdD0iYSI9PT10aGlzLmFtUG1Nb2RlLnRvTG93ZXJDYXNlKCk7aWYoIXQpcmV0dXJuIiI7dmFyIG49IkEiPT09dGhpcy5hbVBtTW9kZSxpPWU8MTI/IiBhbSI6IiBwbSI7cmV0dXJuIG4mJihpPWkudG9VcHBlckNhc2UoKSksaX0sdHlwZUl0ZW1IZWlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHJlZnNbZV0uJGVsLnF1ZXJ5U2VsZWN0b3IoImxpIikub2Zmc2V0SGVpZ2h0fSxzY3JvbGxCYXJIZWlnaHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJHJlZnNbZV0uJGVsLm9mZnNldEhlaWdodH19fSxBbz1EbyxPbz1zKEFvLEVvLElvLCExLG51bGwsbnVsbCxudWxsKTtPby5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWUiO3ZhciBQbz1Pby5leHBvcnRzLExvPXttaXhpbnM6W3YuYV0sY29tcG9uZW50czp7VGltZVNwaW5uZXI6UG99LHByb3BzOnt2aXNpYmxlOkJvb2xlYW4sdGltZUFycm93Q29udHJvbDpCb29sZWFufSx3YXRjaDp7dmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2U/KHRoaXMub2xkVmFsdWU9dGhpcy52YWx1ZSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy5zcGlubmVyLmVtaXRTZWxlY3RSYW5nZSgiaG91cnMiKX0pKSk6dGhpcy5uZWVkSW5pdEFkanVzdD0hMH0sdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXZvaWQgMDtlIGluc3RhbmNlb2YgRGF0ZT9uPU9iamVjdChyb1sibGltaXRUaW1lUmFuZ2UiXSkoZSx0aGlzLnNlbGVjdGFibGVSYW5nZSx0aGlzLmZvcm1hdCk6ZXx8KG49dGhpcy5kZWZhdWx0VmFsdWU/bmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpOm5ldyBEYXRlKSx0aGlzLmRhdGU9bix0aGlzLnZpc2libGUmJnRoaXMubmVlZEluaXRBZGp1c3QmJih0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYWRqdXN0U3Bpbm5lcnMoKX0pKSx0aGlzLm5lZWRJbml0QWRqdXN0PSExKX0sc2VsZWN0YWJsZVJhbmdlOmZ1bmN0aW9uKGUpe3RoaXMuJHJlZnMuc3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2U9ZX0sZGVmYXVsdFZhbHVlOmZ1bmN0aW9uKGUpe09iamVjdChyb1siaXNEYXRlIl0pKHRoaXMudmFsdWUpfHwodGhpcy5kYXRlPWU/bmV3IERhdGUoZSk6bmV3IERhdGUpfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwb3BwZXJDbGFzczoiIixmb3JtYXQ6IkhIOm1tOnNzIix2YWx1ZToiIixkZWZhdWx0VmFsdWU6bnVsbCxkYXRlOm5ldyBEYXRlLG9sZFZhbHVlOm5ldyBEYXRlLHNlbGVjdGFibGVSYW5nZTpbXSxzZWxlY3Rpb25SYW5nZTpbMCwyXSxkaXNhYmxlZDohMSxhcnJvd0NvbnRyb2w6ITEsbmVlZEluaXRBZGp1c3Q6ITB9fSxjb21wdXRlZDp7c2hvd1NlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PSh0aGlzLmZvcm1hdHx8IiIpLmluZGV4T2YoInNzIil9LHVzZUFycm93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJyb3dDb250cm9sfHx0aGlzLnRpbWVBcnJvd0NvbnRyb2x8fCExfSxhbVBtTW9kZTpmdW5jdGlvbigpe3JldHVybi0xIT09KHRoaXMuZm9ybWF0fHwiIikuaW5kZXhPZigiQSIpPyJBIjotMSE9PSh0aGlzLmZvcm1hdHx8IiIpLmluZGV4T2YoImEiKT8iYSI6IiJ9fSxtZXRob2RzOntoYW5kbGVDYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJwaWNrIix0aGlzLm9sZFZhbHVlLCExKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMudmlzaWJsZSYmKHRoaXMuZGF0ZT1PYmplY3Qocm9bImNsZWFyTWlsbGlzZWNvbmRzIl0pKGUpLHRoaXMuaXNWYWxpZFZhbHVlKHRoaXMuZGF0ZSkmJnRoaXMuJGVtaXQoInBpY2siLHRoaXMuZGF0ZSwhMCkpfSxzZXRTZWxlY3Rpb25SYW5nZTpmdW5jdGlvbihlLHQpe3RoaXMuJGVtaXQoInNlbGVjdC1yYW5nZSIsZSx0KSx0aGlzLnNlbGVjdGlvblJhbmdlPVtlLHRdfSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50c1sxXTtpZighdCl7dmFyIG49T2JqZWN0KHJvWyJjbGVhck1pbGxpc2Vjb25kcyJdKShPYmplY3Qocm9bImxpbWl0VGltZVJhbmdlIl0pKHRoaXMuZGF0ZSx0aGlzLnNlbGVjdGFibGVSYW5nZSx0aGlzLmZvcm1hdCkpO3RoaXMuJGVtaXQoInBpY2siLG4sZSx0KX19LGhhbmRsZUtleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlDb2RlLG49ezM4Oi0xLDQwOjEsMzc6LTEsMzk6MX07aWYoMzc9PT10fHwzOT09PXQpe3ZhciBpPW5bdF07cmV0dXJuIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmFuZ2UoaSksdm9pZCBlLnByZXZlbnREZWZhdWx0KCl9aWYoMzg9PT10fHw0MD09PXQpe3ZhciByPW5bdF07cmV0dXJuIHRoaXMuJHJlZnMuc3Bpbm5lci5zY3JvbGxEb3duKHIpLHZvaWQgZS5wcmV2ZW50RGVmYXVsdCgpfX0saXNWYWxpZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qocm9bInRpbWVXaXRoaW5SYW5nZSJdKShlLHRoaXMuc2VsZWN0YWJsZVJhbmdlLHRoaXMuZm9ybWF0KX0sYWRqdXN0U3Bpbm5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5zcGlubmVyLmFkanVzdFNwaW5uZXJzKCl9LGNoYW5nZVNlbGVjdGlvblJhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PVswLDNdLmNvbmNhdCh0aGlzLnNob3dTZWNvbmRzP1s2XTpbXSksbj1bImhvdXJzIiwibWludXRlcyJdLmNvbmNhdCh0aGlzLnNob3dTZWNvbmRzP1sic2Vjb25kcyJdOltdKSxpPXQuaW5kZXhPZih0aGlzLnNlbGVjdGlvblJhbmdlWzBdKSxyPShpK2UrdC5sZW5ndGgpJXQubGVuZ3RoO3RoaXMuJHJlZnMuc3Bpbm5lci5lbWl0U2VsZWN0UmFuZ2UobltyXSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gZS5oYW5kbGVDb25maXJtKCEwLCEwKX0pKSx0aGlzLiRlbWl0KCJtb3VudGVkIil9fSxObz1MbyxSbz1zKE5vLFRvLE1vLCExLG51bGwsbnVsbCxudWxsKTtSby5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlIjt2YXIgJG89Um8uZXhwb3J0cyx6bz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigidGFibGUiLHtzdGF0aWNDbGFzczoiZWwteWVhci10YWJsZSIsb246e2NsaWNrOmUuaGFuZGxlWWVhclRhYmxlQ2xpY2t9fSxbbigidGJvZHkiLFtuKCJ0ciIsW24oInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrMCl9LFtuKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKSldKV0pLG4oInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrMSl9LFtuKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKzEpKV0pXSksbigidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczplLmdldENlbGxTdHlsZShlLnN0YXJ0WWVhcisyKX0sW24oImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS5zdGFydFllYXIrMikpXSldKSxuKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzMpfSxbbigiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhciszKSldKV0pXSksbigidHIiLFtuKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzQpfSxbbigiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhcis0KSldKV0pLG4oInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrNSl9LFtuKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKzUpKV0pXSksbigidGQiLHtzdGF0aWNDbGFzczoiYXZhaWxhYmxlIixjbGFzczplLmdldENlbGxTdHlsZShlLnN0YXJ0WWVhcis2KX0sW24oImEiLHtzdGF0aWNDbGFzczoiY2VsbCJ9LFtlLl92KGUuX3MoZS5zdGFydFllYXIrNikpXSldKSxuKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzcpfSxbbigiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhcis3KSldKV0pXSksbigidHIiLFtuKCJ0ZCIse3N0YXRpY0NsYXNzOiJhdmFpbGFibGUiLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKGUuc3RhcnRZZWFyKzgpfSxbbigiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnN0YXJ0WWVhcis4KSldKV0pLG4oInRkIix7c3RhdGljQ2xhc3M6ImF2YWlsYWJsZSIsY2xhc3M6ZS5nZXRDZWxsU3R5bGUoZS5zdGFydFllYXIrOSl9LFtuKCJhIix7c3RhdGljQ2xhc3M6ImNlbGwifSxbZS5fdihlLl9zKGUuc3RhcnRZZWFyKzkpKV0pXSksbigidGQiKSxuKCJ0ZCIpXSldKV0pfSxCbz1bXTt6by5fd2l0aFN0cmlwcGVkPSEwO3ZhciBGbz1mdW5jdGlvbihlKXt2YXIgdD1PYmplY3Qocm9bImdldERheUNvdW50T2ZZZWFyIl0pKGUpLG49bmV3IERhdGUoZSwwLDEpO3JldHVybiBPYmplY3Qocm9bInJhbmdlIl0pKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyb1sibmV4dERhdGUiXSkobixlKX0pKX0sVm89e3Byb3BzOntkaXNhYmxlZERhdGU6e30sdmFsdWU6e30sZGVmYXVsdFZhbHVlOnt2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxlIGluc3RhbmNlb2YgRGF0ZSYmT2JqZWN0KHJvWyJpc0RhdGUiXSkoZSl9fSxkYXRlOnt9fSxjb21wdXRlZDp7c3RhcnRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIDEwKk1hdGguZmxvb3IodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkvMTApfX0sbWV0aG9kczp7Z2V0Q2VsbFN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXt9LG49bmV3IERhdGU7cmV0dXJuIHQuZGlzYWJsZWQ9ImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSYmRm8oZSkuZXZlcnkodGhpcy5kaXNhYmxlZERhdGUpLHQuY3VycmVudD1PYmplY3QoeVsiYXJyYXlGaW5kSW5kZXgiXSkoT2JqZWN0KHlbImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSJdKSh0aGlzLnZhbHVlKSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKT09PWV9KSk+PTAsdC50b2RheT1uLmdldEZ1bGxZZWFyKCk9PT1lLHQuZGVmYXVsdD10aGlzLmRlZmF1bHRWYWx1ZSYmdGhpcy5kZWZhdWx0VmFsdWUuZ2V0RnVsbFllYXIoKT09PWUsdH0saGFuZGxlWWVhclRhYmxlQ2xpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYoIkEiPT09dC50YWdOYW1lKXtpZihPYmplY3QoemVbImhhc0NsYXNzIl0pKHQucGFyZW50Tm9kZSwiZGlzYWJsZWQiKSlyZXR1cm47dmFyIG49dC50ZXh0Q29udGVudHx8dC5pbm5lclRleHQ7dGhpcy4kZW1pdCgicGljayIsTnVtYmVyKG4pKX19fX0sam89Vm8sSG89cyhqbyx6byxCbywhMSxudWxsLG51bGwsbnVsbCk7SG8ub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZSI7dmFyIFdvPUhvLmV4cG9ydHMsR289ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRhYmxlIix7c3RhdGljQ2xhc3M6ImVsLW1vbnRoLXRhYmxlIixvbjp7Y2xpY2s6ZS5oYW5kbGVNb250aFRhYmxlQ2xpY2ssbW91c2Vtb3ZlOmUuaGFuZGxlTW91c2VNb3ZlfX0sW24oInRib2R5IixlLl9sKGUucm93cywoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigidHIiLHtrZXk6aX0sZS5fbCh0LChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJ0ZCIse2tleTppLGNsYXNzOmUuZ2V0Q2VsbFN0eWxlKHQpfSxbbigiZGl2IixbbigiYSIse3N0YXRpY0NsYXNzOiJjZWxsIn0sW2UuX3YoZS5fcyhlLnQoImVsLmRhdGVwaWNrZXIubW9udGhzLiIrZS5tb250aHNbdC50ZXh0XSkpKV0pXSldKX0pKSwwKX0pKSwwKV0pfSxVbz1bXTtHby5fd2l0aFN0cmlwcGVkPSEwO3ZhciBxbz1mdW5jdGlvbihlLHQpe3ZhciBuPU9iamVjdChyb1siZ2V0RGF5Q291bnRPZk1vbnRoIl0pKGUsdCksaT1uZXcgRGF0ZShlLHQsMSk7cmV0dXJuIE9iamVjdChyb1sicmFuZ2UiXSkobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KHJvWyJuZXh0RGF0ZSJdKShpLGUpfSkpfSxZbz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSl9LFhvPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT09dHlwZW9mIGV8fCJzdHJpbmciPT09dHlwZW9mIGU/WW8obmV3IERhdGUoZSkpLmdldFRpbWUoKTplIGluc3RhbmNlb2YgRGF0ZT9ZbyhlKS5nZXRUaW1lKCk6TmFOfSxLbz17cHJvcHM6e2Rpc2FibGVkRGF0ZTp7fSx2YWx1ZTp7fSxzZWxlY3Rpb25Nb2RlOntkZWZhdWx0OiJtb250aCJ9LG1pbkRhdGU6e30sbWF4RGF0ZTp7fSxkZWZhdWx0VmFsdWU6e3ZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fE9iamVjdChyb1siaXNEYXRlIl0pKGUpfHxBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KHJvWyJpc0RhdGUiXSl9fSxkYXRlOnt9LHJhbmdlU3RhdGU6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZW5kRGF0ZTpudWxsLHNlbGVjdGluZzohMX19fX0sbWl4aW5zOlt2LmFdLHdhdGNoOnsicmFuZ2VTdGF0ZS5lbmREYXRlIjpmdW5jdGlvbihlKXt0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsZSl9LG1pbkRhdGU6ZnVuY3Rpb24oZSx0KXtYbyhlKSE9PVhvKHQpJiZ0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlKX0sbWF4RGF0ZTpmdW5jdGlvbihlLHQpe1hvKGUpIT09WG8odCkmJnRoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSx0aGlzLm1heERhdGUpfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb250aHM6WyJqYW4iLCJmZWIiLCJtYXIiLCJhcHIiLCJtYXkiLCJqdW4iLCJqdWwiLCJhdWciLCJzZXAiLCJvY3QiLCJub3YiLCJkZWMiXSx0YWJsZVJvd3M6W1tdLFtdLFtdXSxsYXN0Um93Om51bGwsbGFzdENvbHVtbjpudWxsfX0sbWV0aG9kczp7Y2VsbE1hdGNoZXNEYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IERhdGUodCk7cmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpPT09bi5nZXRGdWxsWWVhcigpJiZOdW1iZXIoZS50ZXh0KT09PW4uZ2V0TW9udGgoKX0sZ2V0Q2VsbFN0eWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj17fSxpPXRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLHI9bmV3IERhdGUsbz1lLnRleHQsYT10aGlzLmRlZmF1bHRWYWx1ZT9BcnJheS5pc0FycmF5KHRoaXMuZGVmYXVsdFZhbHVlKT90aGlzLmRlZmF1bHRWYWx1ZTpbdGhpcy5kZWZhdWx0VmFsdWVdOltdO3JldHVybiBuLmRpc2FibGVkPSJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUmJnFvKGksbykuZXZlcnkodGhpcy5kaXNhYmxlZERhdGUpLG4uY3VycmVudD1PYmplY3QoeVsiYXJyYXlGaW5kSW5kZXgiXSkoT2JqZWN0KHlbImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSJdKSh0aGlzLnZhbHVlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKT09PWkmJmUuZ2V0TW9udGgoKT09PW99KSk+PTAsbi50b2RheT1yLmdldEZ1bGxZZWFyKCk9PT1pJiZyLmdldE1vbnRoKCk9PT1vLG4uZGVmYXVsdD1hLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiB0LmNlbGxNYXRjaGVzRGF0ZShlLG4pfSkpLGUuaW5SYW5nZSYmKG5bImluLXJhbmdlIl09ITAsZS5zdGFydCYmKG5bInN0YXJ0LWRhdGUiXT0hMCksZS5lbmQmJihuWyJlbmQtZGF0ZSJdPSEwKSksbn0sZ2V0TW9udGhPZkNlbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7cmV0dXJuIG5ldyBEYXRlKHQsZSwxKX0sbWFya1JhbmdlOmZ1bmN0aW9uKGUsdCl7ZT1YbyhlKSx0PVhvKHQpfHxlO3ZhciBuPVtNYXRoLm1pbihlLHQpLE1hdGgubWF4KGUsdCldO2U9blswXSx0PW5bMV07Zm9yKHZhciBpPXRoaXMucm93cyxyPTAsbz1pLmxlbmd0aDtyPG87cisrKWZvcih2YXIgYT1pW3JdLHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe3ZhciBjPWFbc10sdT00KnIrcyxoPW5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLHUpLmdldFRpbWUoKTtjLmluUmFuZ2U9ZSYmaD49ZSYmaDw9dCxjLnN0YXJ0PWUmJmg9PT1lLGMuZW5kPXQmJmg9PT10fX0saGFuZGxlTW91c2VNb3ZlOmZ1bmN0aW9uKGUpe2lmKHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmcpe3ZhciB0PWUudGFyZ2V0O2lmKCJBIj09PXQudGFnTmFtZSYmKHQ9dC5wYXJlbnROb2RlLnBhcmVudE5vZGUpLCJESVYiPT09dC50YWdOYW1lJiYodD10LnBhcmVudE5vZGUpLCJURCI9PT10LnRhZ05hbWUpe3ZhciBuPXQucGFyZW50Tm9kZS5yb3dJbmRleCxpPXQuY2VsbEluZGV4O3RoaXMucm93c1tuXVtpXS5kaXNhYmxlZHx8bj09PXRoaXMubGFzdFJvdyYmaT09PXRoaXMubGFzdENvbHVtbnx8KHRoaXMubGFzdFJvdz1uLHRoaXMubGFzdENvbHVtbj1pLHRoaXMuJGVtaXQoImNoYW5nZXJhbmdlIix7bWluRGF0ZTp0aGlzLm1pbkRhdGUsbWF4RGF0ZTp0aGlzLm1heERhdGUscmFuZ2VTdGF0ZTp7c2VsZWN0aW5nOiEwLGVuZERhdGU6dGhpcy5nZXRNb250aE9mQ2VsbCg0Km4raSl9fSkpfX19LGhhbmRsZU1vbnRoVGFibGVDbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZigiQSI9PT10LnRhZ05hbWUmJih0PXQucGFyZW50Tm9kZS5wYXJlbnROb2RlKSwiRElWIj09PXQudGFnTmFtZSYmKHQ9dC5wYXJlbnROb2RlKSwiVEQiPT09dC50YWdOYW1lJiYhT2JqZWN0KHplWyJoYXNDbGFzcyJdKSh0LCJkaXNhYmxlZCIpKXt2YXIgbj10LmNlbGxJbmRleCxpPXQucGFyZW50Tm9kZS5yb3dJbmRleCxyPTQqaStuLG89dGhpcy5nZXRNb250aE9mQ2VsbChyKTsicmFuZ2UiPT09dGhpcy5zZWxlY3Rpb25Nb2RlP3RoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmc/KG8+PXRoaXMubWluRGF0ZT90aGlzLiRlbWl0KCJwaWNrIix7bWluRGF0ZTp0aGlzLm1pbkRhdGUsbWF4RGF0ZTpvfSk6dGhpcy4kZW1pdCgicGljayIse21pbkRhdGU6byxtYXhEYXRlOnRoaXMubWluRGF0ZX0pLHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmc9ITEpOih0aGlzLiRlbWl0KCJwaWNrIix7bWluRGF0ZTpvLG1heERhdGU6bnVsbH0pLHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3Rpbmc9ITApOnRoaXMuJGVtaXQoInBpY2siLHIpfX19LGNvbXB1dGVkOntyb3dzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMsdD10aGlzLnRhYmxlUm93cyxuPXRoaXMuZGlzYWJsZWREYXRlLGk9W10scj1YbyhuZXcgRGF0ZSksbz0wO288MztvKyspZm9yKHZhciBhPXRbb10scz1mdW5jdGlvbih0KXt2YXIgcz1hW3RdO3N8fChzPXtyb3c6byxjb2x1bW46dCx0eXBlOiJub3JtYWwiLGluUmFuZ2U6ITEsc3RhcnQ6ITEsZW5kOiExfSkscy50eXBlPSJub3JtYWwiO3ZhciBsPTQqbyt0LGM9bmV3IERhdGUoZS5kYXRlLmdldEZ1bGxZZWFyKCksbCkuZ2V0VGltZSgpO3MuaW5SYW5nZT1jPj1YbyhlLm1pbkRhdGUpJiZjPD1YbyhlLm1heERhdGUpLHMuc3RhcnQ9ZS5taW5EYXRlJiZjPT09WG8oZS5taW5EYXRlKSxzLmVuZD1lLm1heERhdGUmJmM9PT1YbyhlLm1heERhdGUpO3ZhciB1PWM9PT1yO3UmJihzLnR5cGU9InRvZGF5Iikscy50ZXh0PWw7dmFyIGg9bmV3IERhdGUoYyk7cy5kaXNhYmxlZD0iZnVuY3Rpb24iPT09dHlwZW9mIG4mJm4oaCkscy5zZWxlY3RlZD1PYmplY3QoeVsiYXJyYXlGaW5kIl0pKGksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFRpbWUoKT09PWguZ2V0VGltZSgpfSkpLGUuJHNldChhLHQscyl9LGw9MDtsPDQ7bCsrKXMobCk7cmV0dXJuIHR9fX0sWm89S28sSm89cyhabyxHbyxVbywhMSxudWxsLG51bGwsbnVsbCk7Sm8ub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWUiO3ZhciBRbz1Kby5leHBvcnRzLGVhPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0YWJsZSIse3N0YXRpY0NsYXNzOiJlbC1kYXRlLXRhYmxlIixjbGFzczp7ImlzLXdlZWstbW9kZSI6IndlZWsiPT09ZS5zZWxlY3Rpb25Nb2RlfSxhdHRyczp7Y2VsbHNwYWNpbmc6IjAiLGNlbGxwYWRkaW5nOiIwIn0sb246e2NsaWNrOmUuaGFuZGxlQ2xpY2ssbW91c2Vtb3ZlOmUuaGFuZGxlTW91c2VNb3ZlfX0sW24oInRib2R5IixbbigidHIiLFtlLnNob3dXZWVrTnVtYmVyP24oInRoIixbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci53ZWVrIikpKV0pOmUuX2UoKSxlLl9sKGUuV0VFS1MsKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4oInRoIix7a2V5Oml9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLndlZWtzLiIrdCkpKV0pfSkpXSwyKSxlLl9sKGUucm93cywoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigidHIiLHtrZXk6aSxzdGF0aWNDbGFzczoiZWwtZGF0ZS10YWJsZV9fcm93IixjbGFzczp7Y3VycmVudDplLmlzV2Vla0FjdGl2ZSh0WzFdKX19LGUuX2wodCwoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigidGQiLHtrZXk6aSxjbGFzczplLmdldENlbGxDbGFzc2VzKHQpfSxbbigiZGl2Iixbbigic3BhbiIsW2UuX3YoIlxuICAgICAgICAgICIrZS5fcyh0LnRleHQpKyJcbiAgICAgICAgIildKV0pXSl9KSksMCl9KSldLDIpXSl9LHRhPVtdO2VhLl93aXRoU3RyaXBwZWQ9ITA7dmFyIG5hPVsic3VuIiwibW9uIiwidHVlIiwid2VkIiwidGh1IiwiZnJpIiwic2F0Il0saWE9ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PT10eXBlb2YgZXx8InN0cmluZyI9PT10eXBlb2YgZT9PYmplY3Qocm9bImNsZWFyVGltZSJdKShuZXcgRGF0ZShlKSkuZ2V0VGltZSgpOmUgaW5zdGFuY2VvZiBEYXRlP09iamVjdChyb1siY2xlYXJUaW1lIl0pKGUpLmdldFRpbWUoKTpOYU59LHJhPWZ1bmN0aW9uKGUsdCl7dmFyIG49ImZ1bmN0aW9uIj09PXR5cGVvZiB0P09iamVjdCh5WyJhcnJheUZpbmRJbmRleCJdKShlLHQpOmUuaW5kZXhPZih0KTtyZXR1cm4gbj49MD9bXS5jb25jYXQoZS5zbGljZSgwLG4pLGUuc2xpY2UobisxKSk6ZX0sb2E9e21peGluczpbdi5hXSxwcm9wczp7Zmlyc3REYXlPZldlZWs6e2RlZmF1bHQ6Nyx0eXBlOk51bWJlcix2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTEmJmU8PTd9fSx2YWx1ZTp7fSxkZWZhdWx0VmFsdWU6e3ZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWV8fE9iamVjdChyb1siaXNEYXRlIl0pKGUpfHxBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KHJvWyJpc0RhdGUiXSl9fSxkYXRlOnt9LHNlbGVjdGlvbk1vZGU6e2RlZmF1bHQ6ImRheSJ9LHNob3dXZWVrTnVtYmVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZGlzYWJsZWREYXRlOnt9LGNlbGxDbGFzc05hbWU6e30sbWluRGF0ZTp7fSxtYXhEYXRlOnt9LHJhbmdlU3RhdGU6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZW5kRGF0ZTpudWxsLHNlbGVjdGluZzohMX19fX0sY29tcHV0ZWQ6e29mZnNldERheTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZmlyc3REYXlPZldlZWs7cmV0dXJuIGU+Mz83LWU6LWV9LFdFRUtTOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5maXJzdERheU9mV2VlaztyZXR1cm4gbmEuY29uY2F0KG5hKS5zbGljZShlLGUrNyl9LHllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCl9LG1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpfSxzdGFydERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHJvWyJnZXRTdGFydERhdGVPZk1vbnRoIl0pKHRoaXMueWVhcix0aGlzLm1vbnRoKX0scm93czpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCwxKSxuPU9iamVjdChyb1siZ2V0Rmlyc3REYXlPZk1vbnRoIl0pKHQpLGk9T2JqZWN0KHJvWyJnZXREYXlDb3VudE9mTW9udGgiXSkodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSkscj1PYmplY3Qocm9bImdldERheUNvdW50T2ZNb250aCJdKSh0LmdldEZ1bGxZZWFyKCksMD09PXQuZ2V0TW9udGgoKT8xMTp0LmdldE1vbnRoKCktMSk7bj0wPT09bj83Om47Zm9yKHZhciBvPXRoaXMub2Zmc2V0RGF5LGE9dGhpcy50YWJsZVJvd3Mscz0xLGw9dGhpcy5zdGFydERhdGUsYz10aGlzLmRpc2FibGVkRGF0ZSx1PXRoaXMuY2VsbENsYXNzTmFtZSxoPSJkYXRlcyI9PT10aGlzLnNlbGVjdGlvbk1vZGU/T2JqZWN0KHlbImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSJdKSh0aGlzLnZhbHVlKTpbXSxkPWlhKG5ldyBEYXRlKSxmPTA7Zjw2O2YrKyl7dmFyIHA9YVtmXTt0aGlzLnNob3dXZWVrTnVtYmVyJiYocFswXXx8KHBbMF09e3R5cGU6IndlZWsiLHRleHQ6T2JqZWN0KHJvWyJnZXRXZWVrTnVtYmVyIl0pKE9iamVjdChyb1sibmV4dERhdGUiXSkobCw3KmYrMSkpfSkpO2Zvcih2YXIgbT1mdW5jdGlvbih0KXt2YXIgYT1wW2Uuc2hvd1dlZWtOdW1iZXI/dCsxOnRdO2F8fChhPXtyb3c6Zixjb2x1bW46dCx0eXBlOiJub3JtYWwiLGluUmFuZ2U6ITEsc3RhcnQ6ITEsZW5kOiExfSksYS50eXBlPSJub3JtYWwiO3ZhciBtPTcqZit0LGc9T2JqZWN0KHJvWyJuZXh0RGF0ZSJdKShsLG0tbykuZ2V0VGltZSgpO2EuaW5SYW5nZT1nPj1pYShlLm1pbkRhdGUpJiZnPD1pYShlLm1heERhdGUpLGEuc3RhcnQ9ZS5taW5EYXRlJiZnPT09aWEoZS5taW5EYXRlKSxhLmVuZD1lLm1heERhdGUmJmc9PT1pYShlLm1heERhdGUpO3ZhciB2PWc9PT1kO2lmKHYmJihhLnR5cGU9InRvZGF5IiksZj49MCYmZjw9MSl7dmFyIGI9bitvPDA/NytuK286bitvO3QrNypmPj1iP2EudGV4dD1zKys6KGEudGV4dD1yLShiLXQlNykrMSs3KmYsYS50eXBlPSJwcmV2LW1vbnRoIil9ZWxzZSBzPD1pP2EudGV4dD1zKys6KGEudGV4dD1zKystaSxhLnR5cGU9Im5leHQtbW9udGgiKTt2YXIgeD1uZXcgRGF0ZShnKTthLmRpc2FibGVkPSJmdW5jdGlvbiI9PT10eXBlb2YgYyYmYyh4KSxhLnNlbGVjdGVkPU9iamVjdCh5WyJhcnJheUZpbmQiXSkoaCwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VGltZSgpPT09eC5nZXRUaW1lKCl9KSksYS5jdXN0b21DbGFzcz0iZnVuY3Rpb24iPT09dHlwZW9mIHUmJnUoeCksZS4kc2V0KHAsZS5zaG93V2Vla051bWJlcj90KzE6dCxhKX0sZz0wO2c8NztnKyspbShnKTtpZigid2VlayI9PT10aGlzLnNlbGVjdGlvbk1vZGUpe3ZhciB2PXRoaXMuc2hvd1dlZWtOdW1iZXI/MTowLGI9dGhpcy5zaG93V2Vla051bWJlcj83OjYseD10aGlzLmlzV2Vla0FjdGl2ZShwW3YrMV0pO3Bbdl0uaW5SYW5nZT14LHBbdl0uc3RhcnQ9eCxwW2JdLmluUmFuZ2U9eCxwW2JdLmVuZD14fX1yZXR1cm4gYX19LHdhdGNoOnsicmFuZ2VTdGF0ZS5lbmREYXRlIjpmdW5jdGlvbihlKXt0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsZSl9LG1pbkRhdGU6ZnVuY3Rpb24oZSx0KXtpYShlKSE9PWlhKHQpJiZ0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlKX0sbWF4RGF0ZTpmdW5jdGlvbihlLHQpe2lhKGUpIT09aWEodCkmJnRoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSx0aGlzLm1heERhdGUpfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWJsZVJvd3M6W1tdLFtdLFtdLFtdLFtdLFtdXSxsYXN0Um93Om51bGwsbGFzdENvbHVtbjpudWxsfX0sbWV0aG9kczp7Y2VsbE1hdGNoZXNEYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IERhdGUodCk7cmV0dXJuIHRoaXMueWVhcj09PW4uZ2V0RnVsbFllYXIoKSYmdGhpcy5tb250aD09PW4uZ2V0TW9udGgoKSYmTnVtYmVyKGUudGV4dCk9PT1uLmdldERhdGUoKX0sZ2V0Q2VsbENsYXNzZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMuc2VsZWN0aW9uTW9kZSxpPXRoaXMuZGVmYXVsdFZhbHVlP0FycmF5LmlzQXJyYXkodGhpcy5kZWZhdWx0VmFsdWUpP3RoaXMuZGVmYXVsdFZhbHVlOlt0aGlzLmRlZmF1bHRWYWx1ZV06W10scj1bXTtyZXR1cm4ibm9ybWFsIiE9PWUudHlwZSYmInRvZGF5IiE9PWUudHlwZXx8ZS5kaXNhYmxlZD9yLnB1c2goZS50eXBlKTooci5wdXNoKCJhdmFpbGFibGUiKSwidG9kYXkiPT09ZS50eXBlJiZyLnB1c2goInRvZGF5IikpLCJub3JtYWwiPT09ZS50eXBlJiZpLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiB0LmNlbGxNYXRjaGVzRGF0ZShlLG4pfSkpJiZyLnB1c2goImRlZmF1bHQiKSwiZGF5IiE9PW58fCJub3JtYWwiIT09ZS50eXBlJiYidG9kYXkiIT09ZS50eXBlfHwhdGhpcy5jZWxsTWF0Y2hlc0RhdGUoZSx0aGlzLnZhbHVlKXx8ci5wdXNoKCJjdXJyZW50IiksIWUuaW5SYW5nZXx8Im5vcm1hbCIhPT1lLnR5cGUmJiJ0b2RheSIhPT1lLnR5cGUmJiJ3ZWVrIiE9PXRoaXMuc2VsZWN0aW9uTW9kZXx8KHIucHVzaCgiaW4tcmFuZ2UiKSxlLnN0YXJ0JiZyLnB1c2goInN0YXJ0LWRhdGUiKSxlLmVuZCYmci5wdXNoKCJlbmQtZGF0ZSIpKSxlLmRpc2FibGVkJiZyLnB1c2goImRpc2FibGVkIiksZS5zZWxlY3RlZCYmci5wdXNoKCJzZWxlY3RlZCIpLGUuY3VzdG9tQ2xhc3MmJnIucHVzaChlLmN1c3RvbUNsYXNzKSxyLmpvaW4oIiAiKX0sZ2V0RGF0ZU9mQ2VsbDpmdW5jdGlvbihlLHQpe3ZhciBuPTcqZSsodC0odGhpcy5zaG93V2Vla051bWJlcj8xOjApKS10aGlzLm9mZnNldERheTtyZXR1cm4gT2JqZWN0KHJvWyJuZXh0RGF0ZSJdKSh0aGlzLnN0YXJ0RGF0ZSxuKX0saXNXZWVrQWN0aXZlOmZ1bmN0aW9uKGUpe2lmKCJ3ZWVrIiE9PXRoaXMuc2VsZWN0aW9uTW9kZSlyZXR1cm4hMTt2YXIgdD1uZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCwxKSxuPXQuZ2V0RnVsbFllYXIoKSxpPXQuZ2V0TW9udGgoKTtpZigicHJldi1tb250aCI9PT1lLnR5cGUmJih0LnNldE1vbnRoKDA9PT1pPzExOmktMSksdC5zZXRGdWxsWWVhcigwPT09aT9uLTE6bikpLCJuZXh0LW1vbnRoIj09PWUudHlwZSYmKHQuc2V0TW9udGgoMTE9PT1pPzA6aSsxKSx0LnNldEZ1bGxZZWFyKDExPT09aT9uKzE6bikpLHQuc2V0RGF0ZShwYXJzZUludChlLnRleHQsMTApKSxPYmplY3Qocm9bImlzRGF0ZSJdKSh0aGlzLnZhbHVlKSl7dmFyIHI9KHRoaXMudmFsdWUuZ2V0RGF5KCktdGhpcy5maXJzdERheU9mV2Vlays3KSU3LTEsbz1PYmplY3Qocm9bInByZXZEYXRlIl0pKHRoaXMudmFsdWUscik7cmV0dXJuIG8uZ2V0VGltZSgpPT09dC5nZXRUaW1lKCl9cmV0dXJuITF9LG1hcmtSYW5nZTpmdW5jdGlvbihlLHQpe2U9aWEoZSksdD1pYSh0KXx8ZTt2YXIgbj1bTWF0aC5taW4oZSx0KSxNYXRoLm1heChlLHQpXTtlPW5bMF0sdD1uWzFdO2Zvcih2YXIgaT10aGlzLnN0YXJ0RGF0ZSxyPXRoaXMucm93cyxvPTAsYT1yLmxlbmd0aDtvPGE7bysrKWZvcih2YXIgcz1yW29dLGw9MCxjPXMubGVuZ3RoO2w8YztsKyspaWYoIXRoaXMuc2hvd1dlZWtOdW1iZXJ8fDAhPT1sKXt2YXIgdT1zW2xdLGg9NypvK2wrKHRoaXMuc2hvd1dlZWtOdW1iZXI/LTE6MCksZD1PYmplY3Qocm9bIm5leHREYXRlIl0pKGksaC10aGlzLm9mZnNldERheSkuZ2V0VGltZSgpO3UuaW5SYW5nZT1lJiZkPj1lJiZkPD10LHUuc3RhcnQ9ZSYmZD09PWUsdS5lbmQ9dCYmZD09PXR9fSxoYW5kbGVNb3VzZU1vdmU6ZnVuY3Rpb24oZSl7aWYodGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyl7dmFyIHQ9ZS50YXJnZXQ7aWYoIlNQQU4iPT09dC50YWdOYW1lJiYodD10LnBhcmVudE5vZGUucGFyZW50Tm9kZSksIkRJViI9PT10LnRhZ05hbWUmJih0PXQucGFyZW50Tm9kZSksIlREIj09PXQudGFnTmFtZSl7dmFyIG49dC5wYXJlbnROb2RlLnJvd0luZGV4LTEsaT10LmNlbGxJbmRleDt0aGlzLnJvd3Nbbl1baV0uZGlzYWJsZWR8fG49PT10aGlzLmxhc3RSb3cmJmk9PT10aGlzLmxhc3RDb2x1bW58fCh0aGlzLmxhc3RSb3c9bix0aGlzLmxhc3RDb2x1bW49aSx0aGlzLiRlbWl0KCJjaGFuZ2VyYW5nZSIse21pbkRhdGU6dGhpcy5taW5EYXRlLG1heERhdGU6dGhpcy5tYXhEYXRlLHJhbmdlU3RhdGU6e3NlbGVjdGluZzohMCxlbmREYXRlOnRoaXMuZ2V0RGF0ZU9mQ2VsbChuLGkpfX0pKX19fSxoYW5kbGVDbGljazpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZigiU1BBTiI9PT10LnRhZ05hbWUmJih0PXQucGFyZW50Tm9kZS5wYXJlbnROb2RlKSwiRElWIj09PXQudGFnTmFtZSYmKHQ9dC5wYXJlbnROb2RlKSwiVEQiPT09dC50YWdOYW1lKXt2YXIgbj10LnBhcmVudE5vZGUucm93SW5kZXgtMSxpPSJ3ZWVrIj09PXRoaXMuc2VsZWN0aW9uTW9kZT8xOnQuY2VsbEluZGV4LHI9dGhpcy5yb3dzW25dW2ldO2lmKCFyLmRpc2FibGVkJiYid2VlayIhPT1yLnR5cGUpe3ZhciBvPXRoaXMuZ2V0RGF0ZU9mQ2VsbChuLGkpO2lmKCJyYW5nZSI9PT10aGlzLnNlbGVjdGlvbk1vZGUpdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz8obz49dGhpcy5taW5EYXRlP3RoaXMuJGVtaXQoInBpY2siLHttaW5EYXRlOnRoaXMubWluRGF0ZSxtYXhEYXRlOm99KTp0aGlzLiRlbWl0KCJwaWNrIix7bWluRGF0ZTpvLG1heERhdGU6dGhpcy5taW5EYXRlfSksdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz0hMSk6KHRoaXMuJGVtaXQoInBpY2siLHttaW5EYXRlOm8sbWF4RGF0ZTpudWxsfSksdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz0hMCk7ZWxzZSBpZigiZGF5Ij09PXRoaXMuc2VsZWN0aW9uTW9kZSl0aGlzLiRlbWl0KCJwaWNrIixvKTtlbHNlIGlmKCJ3ZWVrIj09PXRoaXMuc2VsZWN0aW9uTW9kZSl7dmFyIGE9T2JqZWN0KHJvWyJnZXRXZWVrTnVtYmVyIl0pKG8pLHM9by5nZXRGdWxsWWVhcigpKyJ3IithO3RoaXMuJGVtaXQoInBpY2siLHt5ZWFyOm8uZ2V0RnVsbFllYXIoKSx3ZWVrOmEsdmFsdWU6cyxkYXRlOm99KX1lbHNlIGlmKCJkYXRlcyI9PT10aGlzLnNlbGVjdGlvbk1vZGUpe3ZhciBsPXRoaXMudmFsdWV8fFtdLGM9ci5zZWxlY3RlZD9yYShsLChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRUaW1lKCk9PT1vLmdldFRpbWUoKX0pKTpbXS5jb25jYXQobCxbb10pO3RoaXMuJGVtaXQoInBpY2siLGMpfX19fX19LGFhPW9hLHNhPXMoYWEsZWEsdGEsITEsbnVsbCxudWxsLG51bGwpO3NhLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWUiO3ZhciBsYT1zYS5leHBvcnRzLGNhPXttaXhpbnM6W3YuYV0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOkIuYX0sd2F0Y2g6e3Nob3dUaW1lOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSYmdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKGUpe3ZhciBuPXQuJHJlZnMuaW5wdXQuJGVsO24mJih0LnBpY2tlcldpZHRoPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgrMTApfSkpfSx2YWx1ZTpmdW5jdGlvbihlKXsiZGF0ZXMiPT09dGhpcy5zZWxlY3Rpb25Nb2RlJiZ0aGlzLnZhbHVlfHwoT2JqZWN0KHJvWyJpc0RhdGUiXSkoZSk/dGhpcy5kYXRlPW5ldyBEYXRlKGUpOnRoaXMuZGF0ZT10aGlzLmdldERlZmF1bHRWYWx1ZSgpKX0sZGVmYXVsdFZhbHVlOmZ1bmN0aW9uKGUpe09iamVjdChyb1siaXNEYXRlIl0pKHRoaXMudmFsdWUpfHwodGhpcy5kYXRlPWU/bmV3IERhdGUoZSk6bmV3IERhdGUpfSx0aW1lUGlja2VyVmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3JldHVybiB0LiRyZWZzLnRpbWVwaWNrZXIuYWRqdXN0U3Bpbm5lcnMoKX0pKX0sc2VsZWN0aW9uTW9kZTpmdW5jdGlvbihlKXsibW9udGgiPT09ZT8ieWVhciI9PT10aGlzLmN1cnJlbnRWaWV3JiYibW9udGgiPT09dGhpcy5jdXJyZW50Vmlld3x8KHRoaXMuY3VycmVudFZpZXc9Im1vbnRoIik6ImRhdGVzIj09PWUmJih0aGlzLmN1cnJlbnRWaWV3PSJkYXRlIil9fSxtZXRob2RzOntwcm94eVRpbWVQaWNrZXJEYXRhUHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbih0KXtlLiRyZWZzLnRpbWVwaWNrZXIuZm9ybWF0PXR9LG49ZnVuY3Rpb24odCl7ZS4kcmVmcy50aW1lcGlja2VyLnZhbHVlPXR9LGk9ZnVuY3Rpb24odCl7ZS4kcmVmcy50aW1lcGlja2VyLmRhdGU9dH0scj1mdW5jdGlvbih0KXtlLiRyZWZzLnRpbWVwaWNrZXIuc2VsZWN0YWJsZVJhbmdlPXR9O3RoaXMuJHdhdGNoKCJ2YWx1ZSIsbiksdGhpcy4kd2F0Y2goImRhdGUiLGkpLHRoaXMuJHdhdGNoKCJzZWxlY3RhYmxlUmFuZ2UiLHIpLHQodGhpcy50aW1lRm9ybWF0KSxuKHRoaXMudmFsdWUpLGkodGhpcy5kYXRlKSxyKHRoaXMuc2VsZWN0YWJsZVJhbmdlKX0saGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmRhdGU9dGhpcy5nZXREZWZhdWx0VmFsdWUoKSx0aGlzLiRlbWl0KCJwaWNrIixudWxsKX0sZW1pdDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShuPjE/bi0xOjApLHI9MTtyPG47cisrKWlbci0xXT1hcmd1bWVudHNbcl07aWYoZSlpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbz1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2hvd1RpbWU/T2JqZWN0KHJvWyJjbGVhck1pbGxpc2Vjb25kcyJdKShlKTpPYmplY3Qocm9bImNsZWFyVGltZSJdKShlKX0pKTt0aGlzLiRlbWl0LmFwcGx5KHRoaXMsWyJwaWNrIixvXS5jb25jYXQoaSkpfWVsc2UgdGhpcy4kZW1pdC5hcHBseSh0aGlzLFsicGljayIsdGhpcy5zaG93VGltZT9PYmplY3Qocm9bImNsZWFyTWlsbGlzZWNvbmRzIl0pKGUpOk9iamVjdChyb1siY2xlYXJUaW1lIl0pKGUpXS5jb25jYXQoaSkpO2Vsc2UgdGhpcy4kZW1pdC5hcHBseSh0aGlzLFsicGljayIsZV0uY29uY2F0KGkpKTt0aGlzLnVzZXJJbnB1dERhdGU9bnVsbCx0aGlzLnVzZXJJbnB1dFRpbWU9bnVsbH0sc2hvd01vbnRoUGlja2VyOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50Vmlldz0ibW9udGgifSxzaG93WWVhclBpY2tlcjpmdW5jdGlvbigpe3RoaXMuY3VycmVudFZpZXc9InllYXIifSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmRhdGU9T2JqZWN0KHJvWyJwcmV2TW9udGgiXSkodGhpcy5kYXRlKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5kYXRlPU9iamVjdChyb1sibmV4dE1vbnRoIl0pKHRoaXMuZGF0ZSl9LHByZXZZZWFyOmZ1bmN0aW9uKCl7InllYXIiPT09dGhpcy5jdXJyZW50Vmlldz90aGlzLmRhdGU9T2JqZWN0KHJvWyJwcmV2WWVhciJdKSh0aGlzLmRhdGUsMTApOnRoaXMuZGF0ZT1PYmplY3Qocm9bInByZXZZZWFyIl0pKHRoaXMuZGF0ZSl9LG5leHRZZWFyOmZ1bmN0aW9uKCl7InllYXIiPT09dGhpcy5jdXJyZW50Vmlldz90aGlzLmRhdGU9T2JqZWN0KHJvWyJuZXh0WWVhciJdKSh0aGlzLmRhdGUsMTApOnRoaXMuZGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMuZGF0ZSl9LGhhbmRsZVNob3J0Y3V0Q2xpY2s6ZnVuY3Rpb24oZSl7ZS5vbkNsaWNrJiZlLm9uQ2xpY2sodGhpcyl9LGhhbmRsZVRpbWVQaWNrOmZ1bmN0aW9uKGUsdCxuKXtpZihPYmplY3Qocm9bImlzRGF0ZSJdKShlKSl7dmFyIGk9dGhpcy52YWx1ZT9PYmplY3Qocm9bIm1vZGlmeVRpbWUiXSkodGhpcy52YWx1ZSxlLmdldEhvdXJzKCksZS5nZXRNaW51dGVzKCksZS5nZXRTZWNvbmRzKCkpOk9iamVjdChyb1sibW9kaWZ5V2l0aFRpbWVTdHJpbmciXSkodGhpcy5nZXREZWZhdWx0VmFsdWUoKSx0aGlzLmRlZmF1bHRUaW1lKTt0aGlzLmRhdGU9aSx0aGlzLmVtaXQodGhpcy5kYXRlLCEwKX1lbHNlIHRoaXMuZW1pdChlLCEwKTtufHwodGhpcy50aW1lUGlja2VyVmlzaWJsZT10KX0saGFuZGxlVGltZVBpY2tDbG9zZTpmdW5jdGlvbigpe3RoaXMudGltZVBpY2tlclZpc2libGU9ITF9LGhhbmRsZU1vbnRoUGljazpmdW5jdGlvbihlKXsibW9udGgiPT09dGhpcy5zZWxlY3Rpb25Nb2RlPyh0aGlzLmRhdGU9T2JqZWN0KHJvWyJtb2RpZnlEYXRlIl0pKHRoaXMuZGF0ZSx0aGlzLnllYXIsZSwxKSx0aGlzLmVtaXQodGhpcy5kYXRlKSk6KHRoaXMuZGF0ZT1PYmplY3Qocm9bImNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZSJdKSh0aGlzLmRhdGUsdGhpcy55ZWFyLGUpLHRoaXMuY3VycmVudFZpZXc9ImRhdGUiKX0saGFuZGxlRGF0ZVBpY2s6ZnVuY3Rpb24oZSl7aWYoImRheSI9PT10aGlzLnNlbGVjdGlvbk1vZGUpe3ZhciB0PXRoaXMudmFsdWU/T2JqZWN0KHJvWyJtb2RpZnlEYXRlIl0pKHRoaXMudmFsdWUsZS5nZXRGdWxsWWVhcigpLGUuZ2V0TW9udGgoKSxlLmdldERhdGUoKSk6T2JqZWN0KHJvWyJtb2RpZnlXaXRoVGltZVN0cmluZyJdKShlLHRoaXMuZGVmYXVsdFRpbWUpO3RoaXMuY2hlY2tEYXRlV2l0aGluUmFuZ2UodCl8fCh0PU9iamVjdChyb1sibW9kaWZ5RGF0ZSJdKSh0aGlzLnNlbGVjdGFibGVSYW5nZVswXVswXSxlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKSksdGhpcy5kYXRlPXQsdGhpcy5lbWl0KHRoaXMuZGF0ZSx0aGlzLnNob3dUaW1lKX1lbHNlIndlZWsiPT09dGhpcy5zZWxlY3Rpb25Nb2RlP3RoaXMuZW1pdChlLmRhdGUpOiJkYXRlcyI9PT10aGlzLnNlbGVjdGlvbk1vZGUmJnRoaXMuZW1pdChlLCEwKX0saGFuZGxlWWVhclBpY2s6ZnVuY3Rpb24oZSl7InllYXIiPT09dGhpcy5zZWxlY3Rpb25Nb2RlPyh0aGlzLmRhdGU9T2JqZWN0KHJvWyJtb2RpZnlEYXRlIl0pKHRoaXMuZGF0ZSxlLDAsMSksdGhpcy5lbWl0KHRoaXMuZGF0ZSkpOih0aGlzLmRhdGU9T2JqZWN0KHJvWyJjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUiXSkodGhpcy5kYXRlLGUsdGhpcy5tb250aCksdGhpcy5jdXJyZW50Vmlldz0ibW9udGgiKX0sY2hhbmdlVG9Ob3c6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkRGF0ZSYmdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUpfHwhdGhpcy5jaGVja0RhdGVXaXRoaW5SYW5nZShuZXcgRGF0ZSl8fCh0aGlzLmRhdGU9bmV3IERhdGUsdGhpcy5lbWl0KHRoaXMuZGF0ZSkpfSxjb25maXJtOmZ1bmN0aW9uKCl7aWYoImRhdGVzIj09PXRoaXMuc2VsZWN0aW9uTW9kZSl0aGlzLmVtaXQodGhpcy52YWx1ZSk7ZWxzZXt2YXIgZT10aGlzLnZhbHVlP3RoaXMudmFsdWU6T2JqZWN0KHJvWyJtb2RpZnlXaXRoVGltZVN0cmluZyJdKSh0aGlzLmdldERlZmF1bHRWYWx1ZSgpLHRoaXMuZGVmYXVsdFRpbWUpO3RoaXMuZGF0ZT1uZXcgRGF0ZShlKSx0aGlzLmVtaXQoZSl9fSxyZXNldFZpZXc6ZnVuY3Rpb24oKXsibW9udGgiPT09dGhpcy5zZWxlY3Rpb25Nb2RlP3RoaXMuY3VycmVudFZpZXc9Im1vbnRoIjoieWVhciI9PT10aGlzLnNlbGVjdGlvbk1vZGU/dGhpcy5jdXJyZW50Vmlldz0ieWVhciI6dGhpcy5jdXJyZW50Vmlldz0iZGF0ZSJ9LGhhbmRsZUVudGVyOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLmhhbmRsZUtleWRvd24pfSxoYW5kbGVMZWF2ZTpmdW5jdGlvbigpe3RoaXMuJGVtaXQoImRvZGVzdHJveSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5oYW5kbGVLZXlkb3duKX0saGFuZGxlS2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGUsbj1bMzgsNDAsMzcsMzldO3RoaXMudmlzaWJsZSYmIXRoaXMudGltZVBpY2tlclZpc2libGUmJigtMSE9PW4uaW5kZXhPZih0KSYmKHRoaXMuaGFuZGxlS2V5Q29udHJvbCh0KSxlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSksMTM9PT10JiZudWxsPT09dGhpcy51c2VySW5wdXREYXRlJiZudWxsPT09dGhpcy51c2VySW5wdXRUaW1lJiZ0aGlzLmVtaXQodGhpcy5kYXRlLCExKSl9LGhhbmRsZUtleUNvbnRyb2w6ZnVuY3Rpb24oZSl7dmFyIHQ9e3llYXI6ezM4Oi00LDQwOjQsMzc6LTEsMzk6MSxvZmZzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9fSxtb250aDp7Mzg6LTQsNDA6NCwzNzotMSwzOToxLG9mZnNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSt0KX19LHdlZWs6ezM4Oi0xLDQwOjEsMzc6LTEsMzk6MSxvZmZzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXREYXRlKGUuZ2V0RGF0ZSgpKzcqdCl9fSxkYXk6ezM4Oi03LDQwOjcsMzc6LTEsMzk6MSxvZmZzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfX19LG49dGhpcy5zZWxlY3Rpb25Nb2RlLGk9MzE1MzZlNixyPXRoaXMuZGF0ZS5nZXRUaW1lKCksbz1uZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKTt3aGlsZShNYXRoLmFicyhyLW8uZ2V0VGltZSgpKTw9aSl7dmFyIGE9dFtuXTtpZihhLm9mZnNldChvLGFbZV0pLCJmdW5jdGlvbiIhPT10eXBlb2YgdGhpcy5kaXNhYmxlZERhdGV8fCF0aGlzLmRpc2FibGVkRGF0ZShvKSl7dGhpcy5kYXRlPW8sdGhpcy4kZW1pdCgicGljayIsbywhMCk7YnJlYWt9fX0saGFuZGxlVmlzaWJsZVRpbWVDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KHJvWyJwYXJzZURhdGUiXSkoZSx0aGlzLnRpbWVGb3JtYXQpO3QmJnRoaXMuY2hlY2tEYXRlV2l0aGluUmFuZ2UodCkmJih0aGlzLmRhdGU9T2JqZWN0KHJvWyJtb2RpZnlEYXRlIl0pKHQsdGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5tb250aERhdGUpLHRoaXMudXNlcklucHV0VGltZT1udWxsLHRoaXMuJHJlZnMudGltZXBpY2tlci52YWx1ZT10aGlzLmRhdGUsdGhpcy50aW1lUGlja2VyVmlzaWJsZT0hMSx0aGlzLmVtaXQodGhpcy5kYXRlLCEwKSl9LGhhbmRsZVZpc2libGVEYXRlQ2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChyb1sicGFyc2VEYXRlIl0pKGUsdGhpcy5kYXRlRm9ybWF0KTtpZih0KXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlJiZ0aGlzLmRpc2FibGVkRGF0ZSh0KSlyZXR1cm47dGhpcy5kYXRlPU9iamVjdChyb1sibW9kaWZ5VGltZSJdKSh0LHRoaXMuZGF0ZS5nZXRIb3VycygpLHRoaXMuZGF0ZS5nZXRNaW51dGVzKCksdGhpcy5kYXRlLmdldFNlY29uZHMoKSksdGhpcy51c2VySW5wdXREYXRlPW51bGwsdGhpcy5yZXNldFZpZXcoKSx0aGlzLmVtaXQodGhpcy5kYXRlLCEwKX19LGlzVmFsaWRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmIWlzTmFOKGUpJiYoImZ1bmN0aW9uIiE9PXR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZXx8IXRoaXMuZGlzYWJsZWREYXRlKGUpKSYmdGhpcy5jaGVja0RhdGVXaXRoaW5SYW5nZShlKX0sZ2V0RGVmYXVsdFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlP25ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlKTpuZXcgRGF0ZX0sY2hlY2tEYXRlV2l0aGluUmFuZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuISh0aGlzLnNlbGVjdGFibGVSYW5nZS5sZW5ndGg+MCl8fE9iamVjdChyb1sidGltZVdpdGhpblJhbmdlIl0pKGUsdGhpcy5zZWxlY3RhYmxlUmFuZ2UsdGhpcy5mb3JtYXR8fCJISDptbTpzcyIpfX0sY29tcG9uZW50czp7VGltZVBpY2tlcjokbyxZZWFyVGFibGU6V28sTW9udGhUYWJsZTpRbyxEYXRlVGFibGU6bGEsRWxJbnB1dDptLmEsRWxCdXR0b246YWUuYX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwb3BwZXJDbGFzczoiIixkYXRlOm5ldyBEYXRlLHZhbHVlOiIiLGRlZmF1bHRWYWx1ZTpudWxsLGRlZmF1bHRUaW1lOm51bGwsc2hvd1RpbWU6ITEsc2VsZWN0aW9uTW9kZToiZGF5IixzaG9ydGN1dHM6IiIsdmlzaWJsZTohMSxjdXJyZW50VmlldzoiZGF0ZSIsZGlzYWJsZWREYXRlOiIiLGNlbGxDbGFzc05hbWU6IiIsc2VsZWN0YWJsZVJhbmdlOltdLGZpcnN0RGF5T2ZXZWVrOjcsc2hvd1dlZWtOdW1iZXI6ITEsdGltZVBpY2tlclZpc2libGU6ITEsZm9ybWF0OiIiLGFycm93Q29udHJvbDohMSx1c2VySW5wdXREYXRlOm51bGwsdXNlcklucHV0VGltZTpudWxsfX0sY29tcHV0ZWQ6e3llYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCl9LG1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpfSx3ZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdChyb1siZ2V0V2Vla051bWJlciJdKSh0aGlzLmRhdGUpfSxtb250aERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKX0sZm9vdGVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dUaW1lfHwiZGF0ZXMiPT09dGhpcy5zZWxlY3Rpb25Nb2RlfSx2aXNpYmxlVGltZTpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy51c2VySW5wdXRUaW1lP3RoaXMudXNlcklucHV0VGltZTpPYmplY3Qocm9bImZvcm1hdERhdGUiXSkodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUsdGhpcy50aW1lRm9ybWF0KX0sdmlzaWJsZURhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMudXNlcklucHV0RGF0ZT90aGlzLnVzZXJJbnB1dERhdGU6T2JqZWN0KHJvWyJmb3JtYXREYXRlIl0pKHRoaXMudmFsdWV8fHRoaXMuZGVmYXVsdFZhbHVlLHRoaXMuZGF0ZUZvcm1hdCl9LHllYXJMYWJlbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudCgiZWwuZGF0ZXBpY2tlci55ZWFyIik7aWYoInllYXIiPT09dGhpcy5jdXJyZW50Vmlldyl7dmFyIHQ9MTAqTWF0aC5mbG9vcih0aGlzLnllYXIvMTApO3JldHVybiBlP3QrIiAiK2UrIiAtICIrKHQrOSkrIiAiK2U6dCsiIC0gIisodCs5KX1yZXR1cm4gdGhpcy55ZWFyKyIgIitlfSx0aW1lRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybWF0P09iamVjdChyb1siZXh0cmFjdFRpbWVGb3JtYXQiXSkodGhpcy5mb3JtYXQpOiJISDptbTpzcyJ9LGRhdGVGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtYXQ/T2JqZWN0KHJvWyJleHRyYWN0RGF0ZUZvcm1hdCJdKSh0aGlzLmZvcm1hdCk6Inl5eXktTU0tZGQifX19LHVhPWNhLGhhPXModWEsQ28sa28sITEsbnVsbCxudWxsLG51bGwpO2hhLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS52dWUiO3ZhciBkYT1oYS5leHBvcnRzLGZhPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn0sb246eyJhZnRlci1sZWF2ZSI6ZnVuY3Rpb24odCl7ZS4kZW1pdCgiZG9kZXN0cm95Iil9fX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWwgZWwtZGF0ZS1yYW5nZS1waWNrZXIgZWwtcG9wcGVyIixjbGFzczpbeyJoYXMtc2lkZWJhciI6ZS4kc2xvdHMuc2lkZWJhcnx8ZS5zaG9ydGN1dHMsImhhcy10aW1lIjplLnNob3dUaW1lfSxlLnBvcHBlckNsYXNzXX0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlciJ9LFtlLl90KCJzaWRlYmFyIiksZS5zaG9ydGN1dHM/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9fc2lkZWJhciJ9LGUuX2woZS5zaG9ydGN1dHMsKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIG4oImJ1dHRvbiIse2tleTppLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e2NsaWNrOmZ1bmN0aW9uKG4pe2UuaGFuZGxlU2hvcnRjdXRDbGljayh0KX19fSxbZS5fdihlLl9zKHQudGV4dCkpXSl9KSksMCk6ZS5fZSgpLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2JvZHkifSxbZS5zaG93VGltZT9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtaGVhZGVyIn0sW24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcCJ9LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW24oImVsLWlucHV0Iix7cmVmOiJtaW5JbnB1dCIsc3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3IiLGF0dHJzOntzaXplOiJzbWFsbCIsZGlzYWJsZWQ6ZS5yYW5nZVN0YXRlLnNlbGVjdGluZyxwbGFjZWhvbGRlcjplLnQoImVsLmRhdGVwaWNrZXIuc3RhcnREYXRlIiksdmFsdWU6ZS5taW5WaXNpYmxlRGF0ZX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZURhdGVJbnB1dCh0LCJtaW4iKX0sY2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZURhdGVDaGFuZ2UodCwibWluIil9fX0pXSwxKSxuKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOmUuaGFuZGxlTWluVGltZUNsb3NlLGV4cHJlc3Npb246ImhhbmRsZU1pblRpbWVDbG9zZSJ9XSxzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXAifSxbbigiZWwtaW5wdXQiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvciIsYXR0cnM6e3NpemU6InNtYWxsIixkaXNhYmxlZDplLnJhbmdlU3RhdGUuc2VsZWN0aW5nLHBsYWNlaG9sZGVyOmUudCgiZWwuZGF0ZXBpY2tlci5zdGFydFRpbWUiKSx2YWx1ZTplLm1pblZpc2libGVUaW1lfSxvbjp7Zm9jdXM6ZnVuY3Rpb24odCl7ZS5taW5UaW1lUGlja2VyVmlzaWJsZT0hMH0saW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFuZGxlVGltZUlucHV0KHQsIm1pbiIpfSxjaGFuZ2U6ZnVuY3Rpb24odCl7cmV0dXJuIGUuaGFuZGxlVGltZUNoYW5nZSh0LCJtaW4iKX19fSksbigidGltZS1waWNrZXIiLHtyZWY6Im1pblRpbWVQaWNrZXIiLGF0dHJzOnsidGltZS1hcnJvdy1jb250cm9sIjplLmFycm93Q29udHJvbCx2aXNpYmxlOmUubWluVGltZVBpY2tlclZpc2libGV9LG9uOntwaWNrOmUuaGFuZGxlTWluVGltZVBpY2ssbW91bnRlZDpmdW5jdGlvbih0KXtlLiRyZWZzLm1pblRpbWVQaWNrZXIuZm9ybWF0PWUudGltZUZvcm1hdH19fSldLDEpXSksbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWFycm93LXJpZ2h0In0pLG4oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcCBpcy1yaWdodCJ9LFtuKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIn0sW24oImVsLWlucHV0Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3IiLGF0dHJzOntzaXplOiJzbWFsbCIsZGlzYWJsZWQ6ZS5yYW5nZVN0YXRlLnNlbGVjdGluZyxwbGFjZWhvbGRlcjplLnQoImVsLmRhdGVwaWNrZXIuZW5kRGF0ZSIpLHZhbHVlOmUubWF4VmlzaWJsZURhdGUscmVhZG9ubHk6IWUubWluRGF0ZX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZURhdGVJbnB1dCh0LCJtYXgiKX0sY2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZURhdGVDaGFuZ2UodCwibWF4Iil9fX0pXSwxKSxuKCJzcGFuIix7ZGlyZWN0aXZlczpbe25hbWU6ImNsaWNrb3V0c2lkZSIscmF3TmFtZToidi1jbGlja291dHNpZGUiLHZhbHVlOmUuaGFuZGxlTWF4VGltZUNsb3NlLGV4cHJlc3Npb246ImhhbmRsZU1heFRpbWVDbG9zZSJ9XSxzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXAifSxbbigiZWwtaW5wdXQiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvciIsYXR0cnM6e3NpemU6InNtYWxsIixkaXNhYmxlZDplLnJhbmdlU3RhdGUuc2VsZWN0aW5nLHBsYWNlaG9sZGVyOmUudCgiZWwuZGF0ZXBpY2tlci5lbmRUaW1lIiksdmFsdWU6ZS5tYXhWaXNpYmxlVGltZSxyZWFkb25seTohZS5taW5EYXRlfSxvbjp7Zm9jdXM6ZnVuY3Rpb24odCl7ZS5taW5EYXRlJiYoZS5tYXhUaW1lUGlja2VyVmlzaWJsZT0hMCl9LGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZVRpbWVJbnB1dCh0LCJtYXgiKX0sY2hhbmdlOmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZVRpbWVDaGFuZ2UodCwibWF4Iil9fX0pLG4oInRpbWUtcGlja2VyIix7cmVmOiJtYXhUaW1lUGlja2VyIixhdHRyczp7InRpbWUtYXJyb3ctY29udHJvbCI6ZS5hcnJvd0NvbnRyb2wsdmlzaWJsZTplLm1heFRpbWVQaWNrZXJWaXNpYmxlfSxvbjp7cGljazplLmhhbmRsZU1heFRpbWVQaWNrLG1vdW50ZWQ6ZnVuY3Rpb24odCl7ZS4kcmVmcy5tYXhUaW1lUGlja2VyLmZvcm1hdD1lLnRpbWVGb3JtYXR9fX0pXSwxKV0pXSk6ZS5fZSgpLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtbGVmdCJ9LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLmxlZnRQcmV2WWVhcn19KSxuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5sZWZ0UHJldk1vbnRofX0pLGUudW5saW5rUGFuZWxzP24oImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1yaWdodCIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6IWUuZW5hYmxlWWVhckFycm93fSxhdHRyczp7dHlwZToiYnV0dG9uIixkaXNhYmxlZDohZS5lbmFibGVZZWFyQXJyb3d9LG9uOntjbGljazplLmxlZnROZXh0WWVhcn19KTplLl9lKCksZS51bmxpbmtQYW5lbHM/bigiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1hcnJvdy1yaWdodCIsY2xhc3M6eyJpcy1kaXNhYmxlZCI6IWUuZW5hYmxlTW9udGhBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IWUuZW5hYmxlTW9udGhBcnJvd30sb246e2NsaWNrOmUubGVmdE5leHRNb250aH19KTplLl9lKCksbigiZGl2IixbZS5fdihlLl9zKGUubGVmdExhYmVsKSldKV0pLG4oImRhdGUtdGFibGUiLHthdHRyczp7InNlbGVjdGlvbi1tb2RlIjoicmFuZ2UiLGRhdGU6ZS5sZWZ0RGF0ZSwiZGVmYXVsdC12YWx1ZSI6ZS5kZWZhdWx0VmFsdWUsIm1pbi1kYXRlIjplLm1pbkRhdGUsIm1heC1kYXRlIjplLm1heERhdGUsInJhbmdlLXN0YXRlIjplLnJhbmdlU3RhdGUsImRpc2FibGVkLWRhdGUiOmUuZGlzYWJsZWREYXRlLCJjZWxsLWNsYXNzLW5hbWUiOmUuY2VsbENsYXNzTmFtZSwiZmlyc3QtZGF5LW9mLXdlZWsiOmUuZmlyc3REYXlPZldlZWt9LG9uOntjaGFuZ2VyYW5nZTplLmhhbmRsZUNoYW5nZVJhbmdlLHBpY2s6ZS5oYW5kbGVSYW5nZVBpY2t9fSldLDEpLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtcmlnaHQifSxbbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIifSxbZS51bmxpbmtQYW5lbHM/bigiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFlLmVuYWJsZVllYXJBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IWUuZW5hYmxlWWVhckFycm93fSxvbjp7Y2xpY2s6ZS5yaWdodFByZXZZZWFyfX0pOmUuX2UoKSxlLnVubGlua1BhbmVscz9uKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LWxlZnQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFlLmVuYWJsZU1vbnRoQXJyb3d9LGF0dHJzOnt0eXBlOiJidXR0b24iLGRpc2FibGVkOiFlLmVuYWJsZU1vbnRoQXJyb3d9LG9uOntjbGljazplLnJpZ2h0UHJldk1vbnRofX0pOmUuX2UoKSxuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5yaWdodE5leHRZZWFyfX0pLG4oImJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5yaWdodE5leHRNb250aH19KSxuKCJkaXYiLFtlLl92KGUuX3MoZS5yaWdodExhYmVsKSldKV0pLG4oImRhdGUtdGFibGUiLHthdHRyczp7InNlbGVjdGlvbi1tb2RlIjoicmFuZ2UiLGRhdGU6ZS5yaWdodERhdGUsImRlZmF1bHQtdmFsdWUiOmUuZGVmYXVsdFZhbHVlLCJtaW4tZGF0ZSI6ZS5taW5EYXRlLCJtYXgtZGF0ZSI6ZS5tYXhEYXRlLCJyYW5nZS1zdGF0ZSI6ZS5yYW5nZVN0YXRlLCJkaXNhYmxlZC1kYXRlIjplLmRpc2FibGVkRGF0ZSwiY2VsbC1jbGFzcy1uYW1lIjplLmNlbGxDbGFzc05hbWUsImZpcnN0LWRheS1vZi13ZWVrIjplLmZpcnN0RGF5T2ZXZWVrfSxvbjp7Y2hhbmdlcmFuZ2U6ZS5oYW5kbGVDaGFuZ2VSYW5nZSxwaWNrOmUuaGFuZGxlUmFuZ2VQaWNrfX0pXSwxKV0pXSwyKSxlLnNob3dUaW1lP24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2Zvb3RlciJ9LFtuKCJlbC1idXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0biIsYXR0cnM6e3NpemU6Im1pbmkiLHR5cGU6InRleHQifSxvbjp7Y2xpY2s6ZS5oYW5kbGVDbGVhcn19LFtlLl92KCJcbiAgICAgICAgIitlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5jbGVhciIpKSsiXG4gICAgICAiKV0pLG4oImVsLWJ1dHRvbiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuIixhdHRyczp7cGxhaW46IiIsc2l6ZToibWluaSIsZGlzYWJsZWQ6ZS5idG5EaXNhYmxlZH0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQ29uZmlybSghMSl9fX0sW2UuX3YoIlxuICAgICAgICAiK2UuX3MoZS50KCJlbC5kYXRlcGlja2VyLmNvbmZpcm0iKSkrIlxuICAgICAgIildKV0sMSk6ZS5fZSgpXSldKX0scGE9W107ZmEuX3dpdGhTdHJpcHBlZD0hMDt2YXIgbWE9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/W25ldyBEYXRlKGVbMF0pLG5ldyBEYXRlKGVbMV0pXTplP1tuZXcgRGF0ZShlKSxPYmplY3Qocm9bIm5leHREYXRlIl0pKG5ldyBEYXRlKGUpLDEpXTpbbmV3IERhdGUsT2JqZWN0KHJvWyJuZXh0RGF0ZSJdKShuZXcgRGF0ZSwxKV19LGdhPXttaXhpbnM6W3YuYV0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOkIuYX0sY29tcHV0ZWQ6e2J0bkRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLm1pbkRhdGUmJnRoaXMubWF4RGF0ZSYmIXRoaXMuc2VsZWN0aW5nJiZ0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0pKX0sbGVmdExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSsiICIrdGhpcy50KCJlbC5kYXRlcGlja2VyLnllYXIiKSsiICIrdGhpcy50KCJlbC5kYXRlcGlja2VyLm1vbnRoIisodGhpcy5sZWZ0RGF0ZS5nZXRNb250aCgpKzEpKX0scmlnaHRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpKyIgIit0aGlzLnQoImVsLmRhdGVwaWNrZXIueWVhciIpKyIgIit0aGlzLnQoImVsLmRhdGVwaWNrZXIubW9udGgiKyh0aGlzLnJpZ2h0RGF0ZS5nZXRNb250aCgpKzEpKX0sbGVmdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRGdWxsWWVhcigpfSxsZWZ0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRNb250aCgpfSxsZWZ0TW9udGhEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RGF0ZSgpfSxyaWdodFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKX0scmlnaHRNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRNb250aCgpfSxyaWdodE1vbnRoRGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXREYXRlKCl9LG1pblZpc2libGVEYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLmRhdGVVc2VySW5wdXQubWluP3RoaXMuZGF0ZVVzZXJJbnB1dC5taW46dGhpcy5taW5EYXRlP09iamVjdChyb1siZm9ybWF0RGF0ZSJdKSh0aGlzLm1pbkRhdGUsdGhpcy5kYXRlRm9ybWF0KToiIn0sbWF4VmlzaWJsZURhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuZGF0ZVVzZXJJbnB1dC5tYXg/dGhpcy5kYXRlVXNlcklucHV0Lm1heDp0aGlzLm1heERhdGV8fHRoaXMubWluRGF0ZT9PYmplY3Qocm9bImZvcm1hdERhdGUiXSkodGhpcy5tYXhEYXRlfHx0aGlzLm1pbkRhdGUsdGhpcy5kYXRlRm9ybWF0KToiIn0sbWluVmlzaWJsZVRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMudGltZVVzZXJJbnB1dC5taW4/dGhpcy50aW1lVXNlcklucHV0Lm1pbjp0aGlzLm1pbkRhdGU/T2JqZWN0KHJvWyJmb3JtYXREYXRlIl0pKHRoaXMubWluRGF0ZSx0aGlzLnRpbWVGb3JtYXQpOiIifSxtYXhWaXNpYmxlVGltZTpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy50aW1lVXNlcklucHV0Lm1heD90aGlzLnRpbWVVc2VySW5wdXQubWF4OnRoaXMubWF4RGF0ZXx8dGhpcy5taW5EYXRlP09iamVjdChyb1siZm9ybWF0RGF0ZSJdKSh0aGlzLm1heERhdGV8fHRoaXMubWluRGF0ZSx0aGlzLnRpbWVGb3JtYXQpOiIifSx0aW1lRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybWF0P09iamVjdChyb1siZXh0cmFjdFRpbWVGb3JtYXQiXSkodGhpcy5mb3JtYXQpOiJISDptbTpzcyJ9LGRhdGVGb3JtYXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3JtYXQ/T2JqZWN0KHJvWyJleHRyYWN0RGF0ZUZvcm1hdCJdKSh0aGlzLmZvcm1hdCk6Inl5eXktTU0tZGQifSxlbmFibGVNb250aEFycm93OmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubGVmdE1vbnRoKzEpJTEyLHQ9dGhpcy5sZWZ0TW9udGgrMT49MTI/MTowO3JldHVybiB0aGlzLnVubGlua1BhbmVscyYmbmV3IERhdGUodGhpcy5sZWZ0WWVhcit0LGUpPG5ldyBEYXRlKHRoaXMucmlnaHRZZWFyLHRoaXMucmlnaHRNb250aCl9LGVuYWJsZVllYXJBcnJvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVubGlua1BhbmVscyYmMTIqdGhpcy5yaWdodFllYXIrdGhpcy5yaWdodE1vbnRoLSgxMip0aGlzLmxlZnRZZWFyK3RoaXMubGVmdE1vbnRoKzEpPj0xMn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9wcGVyQ2xhc3M6IiIsdmFsdWU6W10sZGVmYXVsdFZhbHVlOm51bGwsZGVmYXVsdFRpbWU6bnVsbCxtaW5EYXRlOiIiLG1heERhdGU6IiIsbGVmdERhdGU6bmV3IERhdGUscmlnaHREYXRlOk9iamVjdChyb1sibmV4dE1vbnRoIl0pKG5ldyBEYXRlKSxyYW5nZVN0YXRlOntlbmREYXRlOm51bGwsc2VsZWN0aW5nOiExLHJvdzpudWxsLGNvbHVtbjpudWxsfSxzaG93VGltZTohMSxzaG9ydGN1dHM6IiIsdmlzaWJsZToiIixkaXNhYmxlZERhdGU6IiIsY2VsbENsYXNzTmFtZToiIixmaXJzdERheU9mV2Vlazo3LG1pblRpbWVQaWNrZXJWaXNpYmxlOiExLG1heFRpbWVQaWNrZXJWaXNpYmxlOiExLGZvcm1hdDoiIixhcnJvd0NvbnRyb2w6ITEsdW5saW5rUGFuZWxzOiExLGRhdGVVc2VySW5wdXQ6e21pbjpudWxsLG1heDpudWxsfSx0aW1lVXNlcklucHV0OnttaW46bnVsbCxtYXg6bnVsbH19fSx3YXRjaDp7bWluRGF0ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuZGF0ZVVzZXJJbnB1dC5taW49bnVsbCx0aGlzLnRpbWVVc2VySW5wdXQubWluPW51bGwsdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7aWYodC4kcmVmcy5tYXhUaW1lUGlja2VyJiZ0Lm1heERhdGUmJnQubWF4RGF0ZTx0Lm1pbkRhdGUpe3ZhciBlPSJISDptbTpzcyI7dC4kcmVmcy5tYXhUaW1lUGlja2VyLnNlbGVjdGFibGVSYW5nZT1bW09iamVjdChyb1sicGFyc2VEYXRlIl0pKE9iamVjdChyb1siZm9ybWF0RGF0ZSJdKSh0Lm1pbkRhdGUsZSksZSksT2JqZWN0KHJvWyJwYXJzZURhdGUiXSkoIjIzOjU5OjU5IixlKV1dfX0pKSxlJiZ0aGlzLiRyZWZzLm1pblRpbWVQaWNrZXImJih0aGlzLiRyZWZzLm1pblRpbWVQaWNrZXIuZGF0ZT1lLHRoaXMuJHJlZnMubWluVGltZVBpY2tlci52YWx1ZT1lKX0sbWF4RGF0ZTpmdW5jdGlvbihlKXt0aGlzLmRhdGVVc2VySW5wdXQubWF4PW51bGwsdGhpcy50aW1lVXNlcklucHV0Lm1heD1udWxsLGUmJnRoaXMuJHJlZnMubWF4VGltZVBpY2tlciYmKHRoaXMuJHJlZnMubWF4VGltZVBpY2tlci5kYXRlPWUsdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyLnZhbHVlPWUpfSxtaW5UaW1lUGlja2VyVmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3QuJHJlZnMubWluVGltZVBpY2tlci5kYXRlPXQubWluRGF0ZSx0LiRyZWZzLm1pblRpbWVQaWNrZXIudmFsdWU9dC5taW5EYXRlLHQuJHJlZnMubWluVGltZVBpY2tlci5hZGp1c3RTcGlubmVycygpfSkpfSxtYXhUaW1lUGlja2VyVmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJnRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3QuJHJlZnMubWF4VGltZVBpY2tlci5kYXRlPXQubWF4RGF0ZSx0LiRyZWZzLm1heFRpbWVQaWNrZXIudmFsdWU9dC5tYXhEYXRlLHQuJHJlZnMubWF4VGltZVBpY2tlci5hZGp1c3RTcGlubmVycygpfSkpfSx2YWx1ZTpmdW5jdGlvbihlKXtpZihlKXtpZihBcnJheS5pc0FycmF5KGUpKWlmKHRoaXMubWluRGF0ZT1PYmplY3Qocm9bImlzRGF0ZSJdKShlWzBdKT9uZXcgRGF0ZShlWzBdKTpudWxsLHRoaXMubWF4RGF0ZT1PYmplY3Qocm9bImlzRGF0ZSJdKShlWzFdKT9uZXcgRGF0ZShlWzFdKTpudWxsLHRoaXMubWluRGF0ZSlpZih0aGlzLmxlZnREYXRlPXRoaXMubWluRGF0ZSx0aGlzLnVubGlua1BhbmVscyYmdGhpcy5tYXhEYXRlKXt2YXIgdD10aGlzLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSxuPXRoaXMubWluRGF0ZS5nZXRNb250aCgpLGk9dGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkscj10aGlzLm1heERhdGUuZ2V0TW9udGgoKTt0aGlzLnJpZ2h0RGF0ZT10PT09aSYmbj09PXI/T2JqZWN0KHJvWyJuZXh0TW9udGgiXSkodGhpcy5tYXhEYXRlKTp0aGlzLm1heERhdGV9ZWxzZSB0aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRNb250aCJdKSh0aGlzLmxlZnREYXRlKTtlbHNlIHRoaXMubGVmdERhdGU9bWEodGhpcy5kZWZhdWx0VmFsdWUpWzBdLHRoaXMucmlnaHREYXRlPU9iamVjdChyb1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpfWVsc2UgdGhpcy5taW5EYXRlPW51bGwsdGhpcy5tYXhEYXRlPW51bGx9LGRlZmF1bHRWYWx1ZTpmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSl7dmFyIHQ9bWEoZSksbj10WzBdLGk9dFsxXTt0aGlzLmxlZnREYXRlPW4sdGhpcy5yaWdodERhdGU9ZSYmZVsxXSYmdGhpcy51bmxpbmtQYW5lbHM/aTpPYmplY3Qocm9bIm5leHRNb250aCJdKSh0aGlzLmxlZnREYXRlKX19fSxtZXRob2RzOntoYW5kbGVDbGVhcjpmdW5jdGlvbigpe3RoaXMubWluRGF0ZT1udWxsLHRoaXMubWF4RGF0ZT1udWxsLHRoaXMubGVmdERhdGU9bWEodGhpcy5kZWZhdWx0VmFsdWUpWzBdLHRoaXMucmlnaHREYXRlPU9iamVjdChyb1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpLHRoaXMuJGVtaXQoInBpY2siLG51bGwpfSxoYW5kbGVDaGFuZ2VSYW5nZTpmdW5jdGlvbihlKXt0aGlzLm1pbkRhdGU9ZS5taW5EYXRlLHRoaXMubWF4RGF0ZT1lLm1heERhdGUsdGhpcy5yYW5nZVN0YXRlPWUucmFuZ2VTdGF0ZX0saGFuZGxlRGF0ZUlucHV0OmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5kYXRlVXNlcklucHV0W3RdPWUsZS5sZW5ndGg9PT10aGlzLmRhdGVGb3JtYXQubGVuZ3RoKXt2YXIgbj1PYmplY3Qocm9bInBhcnNlRGF0ZSJdKShlLHRoaXMuZGF0ZUZvcm1hdCk7aWYobil7aWYoImZ1bmN0aW9uIj09PXR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSYmdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUobikpKXJldHVybjsibWluIj09PXQ/KHRoaXMubWluRGF0ZT1PYmplY3Qocm9bIm1vZGlmeURhdGUiXSkodGhpcy5taW5EYXRlfHxuZXcgRGF0ZSxuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0aGlzLmxlZnREYXRlPW5ldyBEYXRlKG4pLHRoaXMudW5saW5rUGFuZWxzfHwodGhpcy5yaWdodERhdGU9T2JqZWN0KHJvWyJuZXh0TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSkpKToodGhpcy5tYXhEYXRlPU9iamVjdChyb1sibW9kaWZ5RGF0ZSJdKSh0aGlzLm1heERhdGV8fG5ldyBEYXRlLG4uZ2V0RnVsbFllYXIoKSxuLmdldE1vbnRoKCksbi5nZXREYXRlKCkpLHRoaXMucmlnaHREYXRlPW5ldyBEYXRlKG4pLHRoaXMudW5saW5rUGFuZWxzfHwodGhpcy5sZWZ0RGF0ZT1PYmplY3Qocm9bInByZXZNb250aCJdKShuKSkpfX19LGhhbmRsZURhdGVDaGFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj1PYmplY3Qocm9bInBhcnNlRGF0ZSJdKShlLHRoaXMuZGF0ZUZvcm1hdCk7biYmKCJtaW4iPT09dD8odGhpcy5taW5EYXRlPU9iamVjdChyb1sibW9kaWZ5RGF0ZSJdKSh0aGlzLm1pbkRhdGUsbi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSksdGhpcy5taW5EYXRlPnRoaXMubWF4RGF0ZSYmKHRoaXMubWF4RGF0ZT10aGlzLm1pbkRhdGUpKToodGhpcy5tYXhEYXRlPU9iamVjdChyb1sibW9kaWZ5RGF0ZSJdKSh0aGlzLm1heERhdGUsbi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSksdGhpcy5tYXhEYXRlPHRoaXMubWluRGF0ZSYmKHRoaXMubWluRGF0ZT10aGlzLm1heERhdGUpKSl9LGhhbmRsZVRpbWVJbnB1dDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7aWYodGhpcy50aW1lVXNlcklucHV0W3RdPWUsZS5sZW5ndGg9PT10aGlzLnRpbWVGb3JtYXQubGVuZ3RoKXt2YXIgaT1PYmplY3Qocm9bInBhcnNlRGF0ZSJdKShlLHRoaXMudGltZUZvcm1hdCk7aSYmKCJtaW4iPT09dD8odGhpcy5taW5EYXRlPU9iamVjdChyb1sibW9kaWZ5VGltZSJdKSh0aGlzLm1pbkRhdGUsaS5nZXRIb3VycygpLGkuZ2V0TWludXRlcygpLGkuZ2V0U2Vjb25kcygpKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oZSl7cmV0dXJuIG4uJHJlZnMubWluVGltZVBpY2tlci5hZGp1c3RTcGlubmVycygpfSkpKToodGhpcy5tYXhEYXRlPU9iamVjdChyb1sibW9kaWZ5VGltZSJdKSh0aGlzLm1heERhdGUsaS5nZXRIb3VycygpLGkuZ2V0TWludXRlcygpLGkuZ2V0U2Vjb25kcygpKSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oZSl7cmV0dXJuIG4uJHJlZnMubWF4VGltZVBpY2tlci5hZGp1c3RTcGlubmVycygpfSkpKSl9fSxoYW5kbGVUaW1lQ2hhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0KHJvWyJwYXJzZURhdGUiXSkoZSx0aGlzLnRpbWVGb3JtYXQpO24mJigibWluIj09PXQ/KHRoaXMubWluRGF0ZT1PYmplY3Qocm9bIm1vZGlmeVRpbWUiXSkodGhpcy5taW5EYXRlLG4uZ2V0SG91cnMoKSxuLmdldE1pbnV0ZXMoKSxuLmdldFNlY29uZHMoKSksdGhpcy5taW5EYXRlPnRoaXMubWF4RGF0ZSYmKHRoaXMubWF4RGF0ZT10aGlzLm1pbkRhdGUpLHRoaXMuJHJlZnMubWluVGltZVBpY2tlci52YWx1ZT10aGlzLm1pbkRhdGUsdGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZT0hMSk6KHRoaXMubWF4RGF0ZT1PYmplY3Qocm9bIm1vZGlmeVRpbWUiXSkodGhpcy5tYXhEYXRlLG4uZ2V0SG91cnMoKSxuLmdldE1pbnV0ZXMoKSxuLmdldFNlY29uZHMoKSksdGhpcy5tYXhEYXRlPHRoaXMubWluRGF0ZSYmKHRoaXMubWluRGF0ZT10aGlzLm1heERhdGUpLHRoaXMuJHJlZnMubWF4VGltZVBpY2tlci52YWx1ZT10aGlzLm1pbkRhdGUsdGhpcy5tYXhUaW1lUGlja2VyVmlzaWJsZT0hMSkpfSxoYW5kbGVSYW5nZVBpY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0saT10aGlzLmRlZmF1bHRUaW1lfHxbXSxyPU9iamVjdChyb1sibW9kaWZ5V2l0aFRpbWVTdHJpbmciXSkoZS5taW5EYXRlLGlbMF0pLG89T2JqZWN0KHJvWyJtb2RpZnlXaXRoVGltZVN0cmluZyJdKShlLm1heERhdGUsaVsxXSk7dGhpcy5tYXhEYXRlPT09byYmdGhpcy5taW5EYXRlPT09cnx8KHRoaXMub25QaWNrJiZ0aGlzLm9uUGljayhlKSx0aGlzLm1heERhdGU9byx0aGlzLm1pbkRhdGU9cixzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QubWF4RGF0ZT1vLHQubWluRGF0ZT1yfSksMTApLG4mJiF0aGlzLnNob3dUaW1lJiZ0aGlzLmhhbmRsZUNvbmZpcm0oKSl9LGhhbmRsZVNob3J0Y3V0Q2xpY2s6ZnVuY3Rpb24oZSl7ZS5vbkNsaWNrJiZlLm9uQ2xpY2sodGhpcyl9LGhhbmRsZU1pblRpbWVQaWNrOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLm1pbkRhdGU9dGhpcy5taW5EYXRlfHxuZXcgRGF0ZSxlJiYodGhpcy5taW5EYXRlPU9iamVjdChyb1sibW9kaWZ5VGltZSJdKSh0aGlzLm1pbkRhdGUsZS5nZXRIb3VycygpLGUuZ2V0TWludXRlcygpLGUuZ2V0U2Vjb25kcygpKSksbnx8KHRoaXMubWluVGltZVBpY2tlclZpc2libGU9dCksKCF0aGlzLm1heERhdGV8fHRoaXMubWF4RGF0ZSYmdGhpcy5tYXhEYXRlLmdldFRpbWUoKTx0aGlzLm1pbkRhdGUuZ2V0VGltZSgpKSYmKHRoaXMubWF4RGF0ZT1uZXcgRGF0ZSh0aGlzLm1pbkRhdGUpKX0saGFuZGxlTWluVGltZUNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZT0hMX0saGFuZGxlTWF4VGltZVBpY2s6ZnVuY3Rpb24oZSx0LG4pe3RoaXMubWF4RGF0ZSYmZSYmKHRoaXMubWF4RGF0ZT1PYmplY3Qocm9bIm1vZGlmeVRpbWUiXSkodGhpcy5tYXhEYXRlLGUuZ2V0SG91cnMoKSxlLmdldE1pbnV0ZXMoKSxlLmdldFNlY29uZHMoKSkpLG58fCh0aGlzLm1heFRpbWVQaWNrZXJWaXNpYmxlPXQpLHRoaXMubWF4RGF0ZSYmdGhpcy5taW5EYXRlJiZ0aGlzLm1pbkRhdGUuZ2V0VGltZSgpPnRoaXMubWF4RGF0ZS5nZXRUaW1lKCkmJih0aGlzLm1pbkRhdGU9bmV3IERhdGUodGhpcy5tYXhEYXRlKSl9LGhhbmRsZU1heFRpbWVDbG9zZTpmdW5jdGlvbigpe3RoaXMubWF4VGltZVBpY2tlclZpc2libGU9ITF9LGxlZnRQcmV2WWVhcjpmdW5jdGlvbigpe3RoaXMubGVmdERhdGU9T2JqZWN0KHJvWyJwcmV2WWVhciJdKSh0aGlzLmxlZnREYXRlKSx0aGlzLnVubGlua1BhbmVsc3x8KHRoaXMucmlnaHREYXRlPU9iamVjdChyb1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpKX0sbGVmdFByZXZNb250aDpmdW5jdGlvbigpe3RoaXMubGVmdERhdGU9T2JqZWN0KHJvWyJwcmV2TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSksdGhpcy51bmxpbmtQYW5lbHN8fCh0aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRNb250aCJdKSh0aGlzLmxlZnREYXRlKSl9LHJpZ2h0TmV4dFllYXI6ZnVuY3Rpb24oKXt0aGlzLnVubGlua1BhbmVscz90aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMucmlnaHREYXRlKToodGhpcy5sZWZ0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMubGVmdERhdGUpLHRoaXMucmlnaHREYXRlPU9iamVjdChyb1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpKX0scmlnaHROZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLnVubGlua1BhbmVscz90aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRNb250aCJdKSh0aGlzLnJpZ2h0RGF0ZSk6KHRoaXMubGVmdERhdGU9T2JqZWN0KHJvWyJuZXh0TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSksdGhpcy5yaWdodERhdGU9T2JqZWN0KHJvWyJuZXh0TW9udGgiXSkodGhpcy5sZWZ0RGF0ZSkpfSxsZWZ0TmV4dFllYXI6ZnVuY3Rpb24oKXt0aGlzLmxlZnREYXRlPU9iamVjdChyb1sibmV4dFllYXIiXSkodGhpcy5sZWZ0RGF0ZSl9LGxlZnROZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmxlZnREYXRlPU9iamVjdChyb1sibmV4dE1vbnRoIl0pKHRoaXMubGVmdERhdGUpfSxyaWdodFByZXZZZWFyOmZ1bmN0aW9uKCl7dGhpcy5yaWdodERhdGU9T2JqZWN0KHJvWyJwcmV2WWVhciJdKSh0aGlzLnJpZ2h0RGF0ZSl9LHJpZ2h0UHJldk1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5yaWdodERhdGU9T2JqZWN0KHJvWyJwcmV2TW9udGgiXSkodGhpcy5yaWdodERhdGUpfSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0pJiZ0aGlzLiRlbWl0KCJwaWNrIixbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0sZSl9LGlzVmFsaWRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmZSYmZVswXSYmZVsxXSYmT2JqZWN0KHJvWyJpc0RhdGUiXSkoZVswXSkmJk9iamVjdChyb1siaXNEYXRlIl0pKGVbMV0pJiZlWzBdLmdldFRpbWUoKTw9ZVsxXS5nZXRUaW1lKCkmJigiZnVuY3Rpb24iIT09dHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlfHwhdGhpcy5kaXNhYmxlZERhdGUoZVswXSkmJiF0aGlzLmRpc2FibGVkRGF0ZShlWzFdKSl9LHJlc2V0VmlldzpmdW5jdGlvbigpe3RoaXMubWluRGF0ZSYmbnVsbD09dGhpcy5tYXhEYXRlJiYodGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZz0hMSksdGhpcy5taW5EYXRlPXRoaXMudmFsdWUmJk9iamVjdChyb1siaXNEYXRlIl0pKHRoaXMudmFsdWVbMF0pP25ldyBEYXRlKHRoaXMudmFsdWVbMF0pOm51bGwsdGhpcy5tYXhEYXRlPXRoaXMudmFsdWUmJk9iamVjdChyb1siaXNEYXRlIl0pKHRoaXMudmFsdWVbMF0pP25ldyBEYXRlKHRoaXMudmFsdWVbMV0pOm51bGx9fSxjb21wb25lbnRzOntUaW1lUGlja2VyOiRvLERhdGVUYWJsZTpsYSxFbElucHV0Om0uYSxFbEJ1dHRvbjphZS5hfX0sdmE9Z2EseWE9cyh2YSxmYSxwYSwhMSxudWxsLG51bGwsbnVsbCk7eWEub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZSI7dmFyIGJhPXlhLmV4cG9ydHMseGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImFmdGVyLWxlYXZlIjpmdW5jdGlvbih0KXtlLiRlbWl0KCJkb2Rlc3Ryb3kiKX19fSxbbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0sc3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbCBlbC1kYXRlLXJhbmdlLXBpY2tlciBlbC1wb3BwZXIiLGNsYXNzOlt7Imhhcy1zaWRlYmFyIjplLiRzbG90cy5zaWRlYmFyfHxlLnNob3J0Y3V0c30sZS5wb3BwZXJDbGFzc119LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXIifSxbZS5fdCgic2lkZWJhciIpLGUuc2hvcnRjdXRzP24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX3NpZGViYXIifSxlLl9sKGUuc2hvcnRjdXRzLChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJidXR0b24iLHtrZXk6aSxzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbihuKXtlLmhhbmRsZVNob3J0Y3V0Q2xpY2sodCl9fX0sW2UuX3YoZS5fcyh0LnRleHQpKV0pfSkpLDApOmUuX2UoKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19ib2R5In0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtbGVmdCJ9LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazplLmxlZnRQcmV2WWVhcn19KSxlLnVubGlua1BhbmVscz9uKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFlLmVuYWJsZVllYXJBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IWUuZW5hYmxlWWVhckFycm93fSxvbjp7Y2xpY2s6ZS5sZWZ0TmV4dFllYXJ9fSk6ZS5fZSgpLG4oImRpdiIsW2UuX3YoZS5fcyhlLmxlZnRMYWJlbCkpXSldKSxuKCJtb250aC10YWJsZSIse2F0dHJzOnsic2VsZWN0aW9uLW1vZGUiOiJyYW5nZSIsZGF0ZTplLmxlZnREYXRlLCJkZWZhdWx0LXZhbHVlIjplLmRlZmF1bHRWYWx1ZSwibWluLWRhdGUiOmUubWluRGF0ZSwibWF4LWRhdGUiOmUubWF4RGF0ZSwicmFuZ2Utc3RhdGUiOmUucmFuZ2VTdGF0ZSwiZGlzYWJsZWQtZGF0ZSI6ZS5kaXNhYmxlZERhdGV9LG9uOntjaGFuZ2VyYW5nZTplLmhhbmRsZUNoYW5nZVJhbmdlLHBpY2s6ZS5oYW5kbGVSYW5nZVBpY2t9fSldLDEpLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtcmlnaHQifSxbbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIifSxbZS51bmxpbmtQYW5lbHM/bigiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnQiLGNsYXNzOnsiaXMtZGlzYWJsZWQiOiFlLmVuYWJsZVllYXJBcnJvd30sYXR0cnM6e3R5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6IWUuZW5hYmxlWWVhckFycm93fSxvbjp7Y2xpY2s6ZS5yaWdodFByZXZZZWFyfX0pOmUuX2UoKSxuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7Y2xpY2s6ZS5yaWdodE5leHRZZWFyfX0pLG4oImRpdiIsW2UuX3YoZS5fcyhlLnJpZ2h0TGFiZWwpKV0pXSksbigibW9udGgtdGFibGUiLHthdHRyczp7InNlbGVjdGlvbi1tb2RlIjoicmFuZ2UiLGRhdGU6ZS5yaWdodERhdGUsImRlZmF1bHQtdmFsdWUiOmUuZGVmYXVsdFZhbHVlLCJtaW4tZGF0ZSI6ZS5taW5EYXRlLCJtYXgtZGF0ZSI6ZS5tYXhEYXRlLCJyYW5nZS1zdGF0ZSI6ZS5yYW5nZVN0YXRlLCJkaXNhYmxlZC1kYXRlIjplLmRpc2FibGVkRGF0ZX0sb246e2NoYW5nZXJhbmdlOmUuaGFuZGxlQ2hhbmdlUmFuZ2UscGljazplLmhhbmRsZVJhbmdlUGlja319KV0sMSldKV0sMildKV0pfSxfYT1bXTt4YS5fd2l0aFN0cmlwcGVkPSEwO3ZhciB3YT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bbmV3IERhdGUoZVswXSksbmV3IERhdGUoZVsxXSldOmU/W25ldyBEYXRlKGUpLE9iamVjdChyb1sibmV4dE1vbnRoIl0pKG5ldyBEYXRlKGUpKV06W25ldyBEYXRlLE9iamVjdChyb1sibmV4dE1vbnRoIl0pKG5ldyBEYXRlKV19LFNhPXttaXhpbnM6W3YuYV0sZGlyZWN0aXZlczp7Q2xpY2tvdXRzaWRlOkIuYX0sY29tcHV0ZWQ6e2J0bkRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLm1pbkRhdGUmJnRoaXMubWF4RGF0ZSYmIXRoaXMuc2VsZWN0aW5nJiZ0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLHRoaXMubWF4RGF0ZV0pKX0sbGVmdExhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSsiICIrdGhpcy50KCJlbC5kYXRlcGlja2VyLnllYXIiKX0scmlnaHRMYWJlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpKyIgIit0aGlzLnQoImVsLmRhdGVwaWNrZXIueWVhciIpfSxsZWZ0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCl9LHJpZ2h0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpPT09dGhpcy5sZWZ0RGF0ZS5nZXRGdWxsWWVhcigpP3RoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSsxOnRoaXMucmlnaHREYXRlLmdldEZ1bGxZZWFyKCl9LGVuYWJsZVllYXJBcnJvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVubGlua1BhbmVscyYmdGhpcy5yaWdodFllYXI+dGhpcy5sZWZ0WWVhcisxfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwb3BwZXJDbGFzczoiIix2YWx1ZTpbXSxkZWZhdWx0VmFsdWU6bnVsbCxkZWZhdWx0VGltZTpudWxsLG1pbkRhdGU6IiIsbWF4RGF0ZToiIixsZWZ0RGF0ZTpuZXcgRGF0ZSxyaWdodERhdGU6T2JqZWN0KHJvWyJuZXh0WWVhciJdKShuZXcgRGF0ZSkscmFuZ2VTdGF0ZTp7ZW5kRGF0ZTpudWxsLHNlbGVjdGluZzohMSxyb3c6bnVsbCxjb2x1bW46bnVsbH0sc2hvcnRjdXRzOiIiLHZpc2libGU6IiIsZGlzYWJsZWREYXRlOiIiLGZvcm1hdDoiIixhcnJvd0NvbnRyb2w6ITEsdW5saW5rUGFuZWxzOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpaWYodGhpcy5taW5EYXRlPU9iamVjdChyb1siaXNEYXRlIl0pKGVbMF0pP25ldyBEYXRlKGVbMF0pOm51bGwsdGhpcy5tYXhEYXRlPU9iamVjdChyb1siaXNEYXRlIl0pKGVbMV0pP25ldyBEYXRlKGVbMV0pOm51bGwsdGhpcy5taW5EYXRlKWlmKHRoaXMubGVmdERhdGU9dGhpcy5taW5EYXRlLHRoaXMudW5saW5rUGFuZWxzJiZ0aGlzLm1heERhdGUpe3ZhciB0PXRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpLG49dGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7dGhpcy5yaWdodERhdGU9dD09PW4/T2JqZWN0KHJvWyJuZXh0WWVhciJdKSh0aGlzLm1heERhdGUpOnRoaXMubWF4RGF0ZX1lbHNlIHRoaXMucmlnaHREYXRlPU9iamVjdChyb1sibmV4dFllYXIiXSkodGhpcy5sZWZ0RGF0ZSk7ZWxzZSB0aGlzLmxlZnREYXRlPXdhKHRoaXMuZGVmYXVsdFZhbHVlKVswXSx0aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMubGVmdERhdGUpfWVsc2UgdGhpcy5taW5EYXRlPW51bGwsdGhpcy5tYXhEYXRlPW51bGx9LGRlZmF1bHRWYWx1ZTpmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSl7dmFyIHQ9d2EoZSksbj10WzBdLGk9dFsxXTt0aGlzLmxlZnREYXRlPW4sdGhpcy5yaWdodERhdGU9ZSYmZVsxXSYmbi5nZXRGdWxsWWVhcigpIT09aS5nZXRGdWxsWWVhcigpJiZ0aGlzLnVubGlua1BhbmVscz9pOk9iamVjdChyb1sibmV4dFllYXIiXSkodGhpcy5sZWZ0RGF0ZSl9fX0sbWV0aG9kczp7aGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLm1pbkRhdGU9bnVsbCx0aGlzLm1heERhdGU9bnVsbCx0aGlzLmxlZnREYXRlPXdhKHRoaXMuZGVmYXVsdFZhbHVlKVswXSx0aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMubGVmdERhdGUpLHRoaXMuJGVtaXQoInBpY2siLG51bGwpfSxoYW5kbGVDaGFuZ2VSYW5nZTpmdW5jdGlvbihlKXt0aGlzLm1pbkRhdGU9ZS5taW5EYXRlLHRoaXMubWF4RGF0ZT1lLm1heERhdGUsdGhpcy5yYW5nZVN0YXRlPWUucmFuZ2VTdGF0ZX0saGFuZGxlUmFuZ2VQaWNrOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGk9dGhpcy5kZWZhdWx0VGltZXx8W10scj1PYmplY3Qocm9bIm1vZGlmeVdpdGhUaW1lU3RyaW5nIl0pKGUubWluRGF0ZSxpWzBdKSxvPU9iamVjdChyb1sibW9kaWZ5V2l0aFRpbWVTdHJpbmciXSkoZS5tYXhEYXRlLGlbMV0pO3RoaXMubWF4RGF0ZT09PW8mJnRoaXMubWluRGF0ZT09PXJ8fCh0aGlzLm9uUGljayYmdGhpcy5vblBpY2soZSksdGhpcy5tYXhEYXRlPW8sdGhpcy5taW5EYXRlPXIsc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Lm1heERhdGU9byx0Lm1pbkRhdGU9cn0pLDEwKSxuJiZ0aGlzLmhhbmRsZUNvbmZpcm0oKSl9LGhhbmRsZVNob3J0Y3V0Q2xpY2s6ZnVuY3Rpb24oZSl7ZS5vbkNsaWNrJiZlLm9uQ2xpY2sodGhpcyl9LGxlZnRQcmV2WWVhcjpmdW5jdGlvbigpe3RoaXMubGVmdERhdGU9T2JqZWN0KHJvWyJwcmV2WWVhciJdKSh0aGlzLmxlZnREYXRlKSx0aGlzLnVubGlua1BhbmVsc3x8KHRoaXMucmlnaHREYXRlPU9iamVjdChyb1sicHJldlllYXIiXSkodGhpcy5yaWdodERhdGUpKX0scmlnaHROZXh0WWVhcjpmdW5jdGlvbigpe3RoaXMudW5saW5rUGFuZWxzfHwodGhpcy5sZWZ0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMubGVmdERhdGUpKSx0aGlzLnJpZ2h0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMucmlnaHREYXRlKX0sbGVmdE5leHRZZWFyOmZ1bmN0aW9uKCl7dGhpcy5sZWZ0RGF0ZT1PYmplY3Qocm9bIm5leHRZZWFyIl0pKHRoaXMubGVmdERhdGUpfSxyaWdodFByZXZZZWFyOmZ1bmN0aW9uKCl7dGhpcy5yaWdodERhdGU9T2JqZWN0KHJvWyJwcmV2WWVhciJdKSh0aGlzLnJpZ2h0RGF0ZSl9LGhhbmRsZUNvbmZpcm06ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSkmJnRoaXMuJGVtaXQoInBpY2siLFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSxlKX0saXNWYWxpZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZlJiZlWzBdJiZlWzFdJiZPYmplY3Qocm9bImlzRGF0ZSJdKShlWzBdKSYmT2JqZWN0KHJvWyJpc0RhdGUiXSkoZVsxXSkmJmVbMF0uZ2V0VGltZSgpPD1lWzFdLmdldFRpbWUoKSYmKCJmdW5jdGlvbiIhPT10eXBlb2YgdGhpcy5kaXNhYmxlZERhdGV8fCF0aGlzLmRpc2FibGVkRGF0ZShlWzBdKSYmIXRoaXMuZGlzYWJsZWREYXRlKGVbMV0pKX0scmVzZXRWaWV3OmZ1bmN0aW9uKCl7dGhpcy5taW5EYXRlPXRoaXMudmFsdWUmJk9iamVjdChyb1siaXNEYXRlIl0pKHRoaXMudmFsdWVbMF0pP25ldyBEYXRlKHRoaXMudmFsdWVbMF0pOm51bGwsdGhpcy5tYXhEYXRlPXRoaXMudmFsdWUmJk9iamVjdChyb1siaXNEYXRlIl0pKHRoaXMudmFsdWVbMF0pP25ldyBEYXRlKHRoaXMudmFsdWVbMV0pOm51bGx9fSxjb21wb25lbnRzOntNb250aFRhYmxlOlFvLEVsSW5wdXQ6bS5hLEVsQnV0dG9uOmFlLmF9fSxDYT1TYSxrYT1zKENhLHhhLF9hLCExLG51bGwsbnVsbCxudWxsKTtrYS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZSI7dmFyIFRhPWthLmV4cG9ydHMsTWE9ZnVuY3Rpb24oZSl7cmV0dXJuImRhdGVyYW5nZSI9PT1lfHwiZGF0ZXRpbWVyYW5nZSI9PT1lP2JhOiJtb250aHJhbmdlIj09PWU/VGE6ZGF9LEVhPXttaXhpbnM6W1NvXSxuYW1lOiJFbERhdGVQaWNrZXIiLHByb3BzOnt0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkYXRlIn0sdGltZUFycm93Q29udHJvbDpCb29sZWFufSx3YXRjaDp7dHlwZTpmdW5jdGlvbihlKXt0aGlzLnBpY2tlcj8odGhpcy51bm1vdW50UGlja2VyKCksdGhpcy5wYW5lbD1NYShlKSx0aGlzLm1vdW50UGlja2VyKCkpOnRoaXMucGFuZWw9TWEoZSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5wYW5lbD1NYSh0aGlzLnR5cGUpfSxpbnN0YWxsOmZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KEVhLm5hbWUsRWEpfX0sSWE9RWEsRGE9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi10b3AifSxvbjp7ImJlZm9yZS1lbnRlciI6ZS5oYW5kbGVNZW51RW50ZXIsImFmdGVyLWxlYXZlIjpmdW5jdGlvbih0KXtlLiRlbWl0KCJkb2Rlc3Ryb3kiKX19fSxbbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS52aXNpYmxlLGV4cHJlc3Npb246InZpc2libGUifV0scmVmOiJwb3BwZXIiLHN0YXRpY0NsYXNzOiJlbC1waWNrZXItcGFuZWwgdGltZS1zZWxlY3QgZWwtcG9wcGVyIixjbGFzczplLnBvcHBlckNsYXNzLHN0eWxlOnt3aWR0aDplLndpZHRoKyJweCJ9fSxbbigiZWwtc2Nyb2xsYmFyIix7YXR0cnM6e25vcmVzaXplOiIiLCJ3cmFwLWNsYXNzIjoiZWwtcGlja2VyLXBhbmVsX19jb250ZW50In19LGUuX2woZS5pdGVtcywoZnVuY3Rpb24odCl7cmV0dXJuIG4oImRpdiIse2tleTp0LnZhbHVlLHN0YXRpY0NsYXNzOiJ0aW1lLXNlbGVjdC1pdGVtIixjbGFzczp7c2VsZWN0ZWQ6ZS52YWx1ZT09PXQudmFsdWUsZGlzYWJsZWQ6dC5kaXNhYmxlZCxkZWZhdWx0OnQudmFsdWU9PT1lLmRlZmF1bHRWYWx1ZX0sYXR0cnM6e2Rpc2FibGVkOnQuZGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbihuKXtlLmhhbmRsZUNsaWNrKHQpfX19LFtlLl92KGUuX3ModC52YWx1ZSkpXSl9KSksMCldLDEpXSl9LEFhPVtdO0RhLl93aXRoU3RyaXBwZWQ9ITA7dmFyIE9hPWZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTtpZih0Lmxlbmd0aD49Mil7dmFyIG49cGFyc2VJbnQodFswXSwxMCksaT1wYXJzZUludCh0WzFdLDEwKTtyZXR1cm57aG91cnM6bixtaW51dGVzOml9fXJldHVybiBudWxsfSxQYT1mdW5jdGlvbihlLHQpe3ZhciBuPU9hKGUpLGk9T2EodCkscj1uLm1pbnV0ZXMrNjAqbi5ob3VycyxvPWkubWludXRlcys2MCppLmhvdXJzO3JldHVybiByPT09bz8wOnI+bz8xOi0xfSxMYT1mdW5jdGlvbihlKXtyZXR1cm4oZS5ob3VyczwxMD8iMCIrZS5ob3VyczplLmhvdXJzKSsiOiIrKGUubWludXRlczwxMD8iMCIrZS5taW51dGVzOmUubWludXRlcyl9LE5hPWZ1bmN0aW9uKGUsdCl7dmFyIG49T2EoZSksaT1PYSh0KSxyPXtob3VyczpuLmhvdXJzLG1pbnV0ZXM6bi5taW51dGVzfTtyZXR1cm4gci5taW51dGVzKz1pLm1pbnV0ZXMsci5ob3Vycys9aS5ob3VycyxyLmhvdXJzKz1NYXRoLmZsb29yKHIubWludXRlcy82MCksci5taW51dGVzPXIubWludXRlcyU2MCxMYShyKX0sUmE9e2NvbXBvbmVudHM6e0VsU2Nyb2xsYmFyOkcuYX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZSYmdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7cmV0dXJuIHQuc2Nyb2xsVG9PcHRpb24oKX0pKX19LG1ldGhvZHM6e2hhbmRsZUNsaWNrOmZ1bmN0aW9uKGUpe2UuZGlzYWJsZWR8fHRoaXMuJGVtaXQoInBpY2siLGUudmFsdWUpfSxoYW5kbGVDbGVhcjpmdW5jdGlvbigpe3RoaXMuJGVtaXQoInBpY2siLG51bGwpfSxzY3JvbGxUb09wdGlvbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiLnNlbGVjdGVkIix0PXRoaXMuJHJlZnMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoIi5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnQiKTtuaSgpKHQsdC5xdWVyeVNlbGVjdG9yKGUpKX0saGFuZGxlTWVudUVudGVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PS0xIT09dGhpcy5pdGVtcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkpLmluZGV4T2YodGhpcy52YWx1ZSksbj0tMSE9PXRoaXMuaXRlbXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pKS5pbmRleE9mKHRoaXMuZGVmYXVsdFZhbHVlKSxpPSh0PyIuc2VsZWN0ZWQiOm4mJiIuZGVmYXVsdCIpfHwiLnRpbWUtc2VsZWN0LWl0ZW06bm90KC5kaXNhYmxlZCkiO3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3JldHVybiBlLnNjcm9sbFRvT3B0aW9uKGkpfSkpfSxzY3JvbGxEb3duOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaXRlbXMsbj10Lmxlbmd0aCxpPXQubGVuZ3RoLHI9dC5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlfSkpLmluZGV4T2YodGhpcy52YWx1ZSk7d2hpbGUoaS0tKWlmKHI9KHIrZStuKSVuLCF0W3JdLmRpc2FibGVkKXJldHVybiB2b2lkIHRoaXMuJGVtaXQoInBpY2siLHRbcl0udmFsdWUsITApfSxpc1ZhbGlkVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT10aGlzLml0ZW1zLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIWUuZGlzYWJsZWR9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZX0pKS5pbmRleE9mKGUpfSxoYW5kbGVLZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZTtpZigzOD09PXR8fDQwPT09dCl7dmFyIG49ezQwOjEsMzg6LTF9LGk9blt0LnRvU3RyaW5nKCldO3JldHVybiB0aGlzLnNjcm9sbERvd24oaSksdm9pZCBlLnN0b3BQcm9wYWdhdGlvbigpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9wcGVyQ2xhc3M6IiIsc3RhcnQ6IjA5OjAwIixlbmQ6IjE4OjAwIixzdGVwOiIwMDozMCIsdmFsdWU6IiIsZGVmYXVsdFZhbHVlOiIiLHZpc2libGU6ITEsbWluVGltZToiIixtYXhUaW1lOiIiLHdpZHRoOjB9fSxjb21wdXRlZDp7aXRlbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXJ0LHQ9dGhpcy5lbmQsbj10aGlzLnN0ZXAsaT1bXTtpZihlJiZ0JiZuKXt2YXIgcj1lO3doaWxlKFBhKHIsdCk8PTApaS5wdXNoKHt2YWx1ZTpyLGRpc2FibGVkOlBhKHIsdGhpcy5taW5UaW1lfHwiLTE6LTEiKTw9MHx8UGEocix0aGlzLm1heFRpbWV8fCIxMDA6MTAwIik+PTB9KSxyPU5hKHIsbil9cmV0dXJuIGl9fX0sJGE9UmEsemE9cygkYSxEYSxBYSwhMSxudWxsLG51bGwsbnVsbCk7emEub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXNlbGVjdC52dWUiO3ZhciBCYT16YS5leHBvcnRzLEZhPXttaXhpbnM6W1NvXSxuYW1lOiJFbFRpbWVTZWxlY3QiLGNvbXBvbmVudE5hbWU6IkVsVGltZVNlbGVjdCIscHJvcHM6e3R5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InRpbWUtc2VsZWN0In19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMucGFuZWw9QmF9LGluc3RhbGw6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoRmEubmFtZSxGYSl9fSxWYT1GYSxqYT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLXRvcCJ9LG9uOnsiYWZ0ZXItbGVhdmUiOmZ1bmN0aW9uKHQpe2UuJGVtaXQoImRvZGVzdHJveSIpfX19LFtuKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXIgZWwtcGlja2VyLXBhbmVsIGVsLXBvcHBlciIsY2xhc3M6ZS5wb3BwZXJDbGFzc30sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY29udGVudCJ9LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXJfX2NlbGwifSxbbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXIifSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5zdGFydFRpbWUiKSkpXSksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5IGVsLXRpbWUtcGFuZWxfX2NvbnRlbnQiLGNsYXNzOnsiaGFzLXNlY29uZHMiOmUuc2hvd1NlY29uZHMsImlzLWFycm93IjplLmFycm93Q29udHJvbH19LFtuKCJ0aW1lLXNwaW5uZXIiLHtyZWY6Im1pblNwaW5uZXIiLGF0dHJzOnsic2hvdy1zZWNvbmRzIjplLnNob3dTZWNvbmRzLCJhbS1wbS1tb2RlIjplLmFtUG1Nb2RlLCJhcnJvdy1jb250cm9sIjplLmFycm93Q29udHJvbCxkYXRlOmUubWluRGF0ZX0sb246e2NoYW5nZTplLmhhbmRsZU1pbkNoYW5nZSwic2VsZWN0LXJhbmdlIjplLnNldE1pblNlbGVjdGlvblJhbmdlfX0pXSwxKV0pLG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbCJ9LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGltZS1yYW5nZS1waWNrZXJfX2hlYWRlciJ9LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLmVuZFRpbWUiKSkpXSksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcmFuZ2UtcGlja2VyX19ib2R5IGVsLXRpbWUtcGFuZWxfX2NvbnRlbnQiLGNsYXNzOnsiaGFzLXNlY29uZHMiOmUuc2hvd1NlY29uZHMsImlzLWFycm93IjplLmFycm93Q29udHJvbH19LFtuKCJ0aW1lLXNwaW5uZXIiLHtyZWY6Im1heFNwaW5uZXIiLGF0dHJzOnsic2hvdy1zZWNvbmRzIjplLnNob3dTZWNvbmRzLCJhbS1wbS1tb2RlIjplLmFtUG1Nb2RlLCJhcnJvdy1jb250cm9sIjplLmFycm93Q29udHJvbCxkYXRlOmUubWF4RGF0ZX0sb246e2NoYW5nZTplLmhhbmRsZU1heENoYW5nZSwic2VsZWN0LXJhbmdlIjplLnNldE1heFNlbGVjdGlvblJhbmdlfX0pXSwxKV0pXSksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRpbWUtcGFuZWxfX2Zvb3RlciJ9LFtuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fYnRuIGNhbmNlbCIsYXR0cnM6e3R5cGU6ImJ1dHRvbiJ9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUNhbmNlbCgpfX19LFtlLl92KGUuX3MoZS50KCJlbC5kYXRlcGlja2VyLmNhbmNlbCIpKSldKSxuKCJidXR0b24iLHtzdGF0aWNDbGFzczoiZWwtdGltZS1wYW5lbF9fYnRuIGNvbmZpcm0iLGF0dHJzOnt0eXBlOiJidXR0b24iLGRpc2FibGVkOmUuYnRuRGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUNvbmZpcm0oKX19fSxbZS5fdihlLl9zKGUudCgiZWwuZGF0ZXBpY2tlci5jb25maXJtIikpKV0pXSldKV0pfSxIYT1bXTtqYS5fd2l0aFN0cmlwcGVkPSEwO3ZhciBXYT1PYmplY3Qocm9bInBhcnNlRGF0ZSJdKSgiMDA6MDA6MDAiLCJISDptbTpzcyIpLEdhPU9iamVjdChyb1sicGFyc2VEYXRlIl0pKCIyMzo1OTo1OSIsIkhIOm1tOnNzIiksVWE9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyb1sibW9kaWZ5RGF0ZSJdKShXYSxlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKX0scWE9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChyb1sibW9kaWZ5RGF0ZSJdKShHYSxlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKX0sWWE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IERhdGUoTWF0aC5taW4oZS5nZXRUaW1lKCkrdCxxYShlKS5nZXRUaW1lKCkpKX0sWGE9e21peGluczpbdi5hXSxjb21wb25lbnRzOntUaW1lU3Bpbm5lcjpQb30sY29tcHV0ZWQ6e3Nob3dTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuLTEhPT0odGhpcy5mb3JtYXR8fCIiKS5pbmRleE9mKCJzcyIpfSxvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93U2Vjb25kcz8xMTo4fSxzcGlubmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uUmFuZ2VbMF08dGhpcy5vZmZzZXQ/dGhpcy4kcmVmcy5taW5TcGlubmVyOnRoaXMuJHJlZnMubWF4U3Bpbm5lcn0sYnRuRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5taW5EYXRlLmdldFRpbWUoKT50aGlzLm1heERhdGUuZ2V0VGltZSgpfSxhbVBtTW9kZTpmdW5jdGlvbigpe3JldHVybi0xIT09KHRoaXMuZm9ybWF0fHwiIikuaW5kZXhPZigiQSIpPyJBIjotMSE9PSh0aGlzLmZvcm1hdHx8IiIpLmluZGV4T2YoImEiKT8iYSI6IiJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3BvcHBlckNsYXNzOiIiLG1pbkRhdGU6bmV3IERhdGUsbWF4RGF0ZTpuZXcgRGF0ZSx2YWx1ZTpbXSxvbGRWYWx1ZTpbbmV3IERhdGUsbmV3IERhdGVdLGRlZmF1bHRWYWx1ZTpudWxsLGZvcm1hdDoiSEg6bW06c3MiLHZpc2libGU6ITEsc2VsZWN0aW9uUmFuZ2U6WzAsMl0sYXJyb3dDb250cm9sOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUpe0FycmF5LmlzQXJyYXkoZSk/KHRoaXMubWluRGF0ZT1uZXcgRGF0ZShlWzBdKSx0aGlzLm1heERhdGU9bmV3IERhdGUoZVsxXSkpOkFycmF5LmlzQXJyYXkodGhpcy5kZWZhdWx0VmFsdWUpPyh0aGlzLm1pbkRhdGU9bmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWVbMF0pLHRoaXMubWF4RGF0ZT1uZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZVsxXSkpOnRoaXMuZGVmYXVsdFZhbHVlPyh0aGlzLm1pbkRhdGU9bmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpLHRoaXMubWF4RGF0ZT1ZYShuZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZSksMzZlNSkpOih0aGlzLm1pbkRhdGU9bmV3IERhdGUsdGhpcy5tYXhEYXRlPVlhKG5ldyBEYXRlLDM2ZTUpKX0sdmlzaWJsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2UmJih0aGlzLm9sZFZhbHVlPXRoaXMudmFsdWUsdGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7cmV0dXJuIHQuJHJlZnMubWluU3Bpbm5lci5lbWl0U2VsZWN0UmFuZ2UoImhvdXJzIil9KSkpfX0sbWV0aG9kczp7aGFuZGxlQ2xlYXI6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJwaWNrIixudWxsKX0saGFuZGxlQ2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdCgicGljayIsdGhpcy5vbGRWYWx1ZSl9LGhhbmRsZU1pbkNoYW5nZTpmdW5jdGlvbihlKXt0aGlzLm1pbkRhdGU9T2JqZWN0KHJvWyJjbGVhck1pbGxpc2Vjb25kcyJdKShlKSx0aGlzLmhhbmRsZUNoYW5nZSgpfSxoYW5kbGVNYXhDaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5tYXhEYXRlPU9iamVjdChyb1siY2xlYXJNaWxsaXNlY29uZHMiXSkoZSksdGhpcy5oYW5kbGVDaGFuZ2UoKX0saGFuZGxlQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5pc1ZhbGlkVmFsdWUoW3RoaXMubWluRGF0ZSx0aGlzLm1heERhdGVdKSYmKHRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2U9W1tVYSh0aGlzLm1pbkRhdGUpLHRoaXMubWF4RGF0ZV1dLHRoaXMuJHJlZnMubWF4U3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2U9W1t0aGlzLm1pbkRhdGUscWEodGhpcy5tYXhEYXRlKV1dLHRoaXMuJGVtaXQoInBpY2siLFt0aGlzLm1pbkRhdGUsdGhpcy5tYXhEYXRlXSwhMCkpfSxzZXRNaW5TZWxlY3Rpb25SYW5nZTpmdW5jdGlvbihlLHQpe3RoaXMuJGVtaXQoInNlbGVjdC1yYW5nZSIsZSx0LCJtaW4iKSx0aGlzLnNlbGVjdGlvblJhbmdlPVtlLHRdfSxzZXRNYXhTZWxlY3Rpb25SYW5nZTpmdW5jdGlvbihlLHQpe3RoaXMuJGVtaXQoInNlbGVjdC1yYW5nZSIsZSx0LCJtYXgiKSx0aGlzLnNlbGVjdGlvblJhbmdlPVtlK3RoaXMub2Zmc2V0LHQrdGhpcy5vZmZzZXRdfSxoYW5kbGVDb25maXJtOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PXRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2Usbj10aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlO3RoaXMubWluRGF0ZT1PYmplY3Qocm9bImxpbWl0VGltZVJhbmdlIl0pKHRoaXMubWluRGF0ZSx0LHRoaXMuZm9ybWF0KSx0aGlzLm1heERhdGU9T2JqZWN0KHJvWyJsaW1pdFRpbWVSYW5nZSJdKSh0aGlzLm1heERhdGUsbix0aGlzLmZvcm1hdCksdGhpcy4kZW1pdCgicGljayIsW3RoaXMubWluRGF0ZSx0aGlzLm1heERhdGVdLGUpfSxhZGp1c3RTcGlubmVyczpmdW5jdGlvbigpe3RoaXMuJHJlZnMubWluU3Bpbm5lci5hZGp1c3RTcGlubmVycygpLHRoaXMuJHJlZnMubWF4U3Bpbm5lci5hZGp1c3RTcGlubmVycygpfSxjaGFuZ2VTZWxlY3Rpb25SYW5nZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNob3dTZWNvbmRzP1swLDMsNiwxMSwxNCwxN106WzAsMyw4LDExXSxuPVsiaG91cnMiLCJtaW51dGVzIl0uY29uY2F0KHRoaXMuc2hvd1NlY29uZHM/WyJzZWNvbmRzIl06W10pLGk9dC5pbmRleE9mKHRoaXMuc2VsZWN0aW9uUmFuZ2VbMF0pLHI9KGkrZSt0Lmxlbmd0aCkldC5sZW5ndGgsbz10Lmxlbmd0aC8yO3I8bz90aGlzLiRyZWZzLm1pblNwaW5uZXIuZW1pdFNlbGVjdFJhbmdlKG5bcl0pOnRoaXMuJHJlZnMubWF4U3Bpbm5lci5lbWl0U2VsZWN0UmFuZ2UobltyLW9dKX0saXNWYWxpZFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiZPYmplY3Qocm9bInRpbWVXaXRoaW5SYW5nZSJdKSh0aGlzLm1pbkRhdGUsdGhpcy4kcmVmcy5taW5TcGlubmVyLnNlbGVjdGFibGVSYW5nZSkmJk9iamVjdChyb1sidGltZVdpdGhpblJhbmdlIl0pKHRoaXMubWF4RGF0ZSx0aGlzLiRyZWZzLm1heFNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlKX0saGFuZGxlS2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGUsbj17Mzg6LTEsNDA6MSwzNzotMSwzOToxfTtpZigzNz09PXR8fDM5PT09dCl7dmFyIGk9blt0XTtyZXR1cm4gdGhpcy5jaGFuZ2VTZWxlY3Rpb25SYW5nZShpKSx2b2lkIGUucHJldmVudERlZmF1bHQoKX1pZigzOD09PXR8fDQwPT09dCl7dmFyIHI9blt0XTtyZXR1cm4gdGhpcy5zcGlubmVyLnNjcm9sbERvd24ociksdm9pZCBlLnByZXZlbnREZWZhdWx0KCl9fX19LEthPVhhLFphPXMoS2EsamEsSGEsITEsbnVsbCxudWxsLG51bGwpO1phLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1yYW5nZS52dWUiO3ZhciBKYT1aYS5leHBvcnRzLFFhPXttaXhpbnM6W1NvXSxuYW1lOiJFbFRpbWVQaWNrZXIiLHByb3BzOntpc1JhbmdlOkJvb2xlYW4sYXJyb3dDb250cm9sOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiIn19LHdhdGNoOntpc1JhbmdlOmZ1bmN0aW9uKGUpe3RoaXMucGlja2VyPyh0aGlzLnVubW91bnRQaWNrZXIoKSx0aGlzLnR5cGU9ZT8idGltZXJhbmdlIjoidGltZSIsdGhpcy5wYW5lbD1lP0phOiRvLHRoaXMubW91bnRQaWNrZXIoKSk6KHRoaXMudHlwZT1lPyJ0aW1lcmFuZ2UiOiJ0aW1lIix0aGlzLnBhbmVsPWU/SmE6JG8pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudHlwZT10aGlzLmlzUmFuZ2U/InRpbWVyYW5nZSI6InRpbWUiLHRoaXMucGFuZWw9dGhpcy5pc1JhbmdlP0phOiRvfSxpbnN0YWxsOmZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KFFhLm5hbWUsUWEpfX0sZXM9UWEsdHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInNwYW4iLFtuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ZS50cmFuc2l0aW9ufSxvbjp7ImFmdGVyLWVudGVyIjplLmhhbmRsZUFmdGVyRW50ZXIsImFmdGVyLWxlYXZlIjplLmhhbmRsZUFmdGVyTGVhdmV9fSxbbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6IWUuZGlzYWJsZWQmJmUuc2hvd1BvcHBlcixleHByZXNzaW9uOiIhZGlzYWJsZWQgJiYgc2hvd1BvcHBlciJ9XSxyZWY6InBvcHBlciIsc3RhdGljQ2xhc3M6ImVsLXBvcG92ZXIgZWwtcG9wcGVyIixjbGFzczpbZS5wb3BwZXJDbGFzcyxlLmNvbnRlbnQmJiJlbC1wb3BvdmVyLS1wbGFpbiJdLHN0eWxlOnt3aWR0aDplLndpZHRoKyJweCJ9LGF0dHJzOntyb2xlOiJ0b29sdGlwIixpZDplLnRvb2x0aXBJZCwiYXJpYS1oaWRkZW4iOmUuZGlzYWJsZWR8fCFlLnNob3dQb3BwZXI/InRydWUiOiJmYWxzZSJ9fSxbZS50aXRsZT9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcG9wb3Zlcl9fdGl0bGUiLGRvbVByb3BzOnt0ZXh0Q29udGVudDplLl9zKGUudGl0bGUpfX0pOmUuX2UoKSxlLl90KCJkZWZhdWx0IixbZS5fdihlLl9zKGUuY29udGVudCkpXSldLDIpXSksbigic3BhbiIse3JlZjoid3JhcHBlciIsc3RhdGljQ2xhc3M6ImVsLXBvcG92ZXJfX3JlZmVyZW5jZS13cmFwcGVyIn0sW2UuX3QoInJlZmVyZW5jZSIpXSwyKV0sMSl9LG5zPVtdO3RzLl93aXRoU3RyaXBwZWQ9ITA7dmFyIGlzPXtuYW1lOiJFbFBvcG92ZXIiLG1peGluczpbSC5hXSxwcm9wczp7dHJpZ2dlcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiY2xpY2siLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bImNsaWNrIiwiZm9jdXMiLCJob3ZlciIsIm1hbnVhbCJdLmluZGV4T2YoZSk+LTF9fSxvcGVuRGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sY2xvc2VEZWxheTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyMDB9LHRpdGxlOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLGNvbnRlbnQ6U3RyaW5nLHJlZmVyZW5jZTp7fSxwb3BwZXJDbGFzczpTdHJpbmcsd2lkdGg6e30sdmlzaWJsZUFycm93OntkZWZhdWx0OiEwfSxhcnJvd09mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJmYWRlLWluLWxpbmVhciJ9LHRhYmluZGV4Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxjb21wdXRlZDp7dG9vbHRpcElkOmZ1bmN0aW9uKCl7cmV0dXJuImVsLXBvcG92ZXItIitPYmplY3QoeVsiZ2VuZXJhdGVJZCJdKSgpfX0sd2F0Y2g6e3Nob3dQb3BwZXI6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGU/dGhpcy4kZW1pdCgic2hvdyIpOnRoaXMuJGVtaXQoImhpZGUiKSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucmVmZXJlbmNlRWxtPXRoaXMucmVmZXJlbmNlfHx0aGlzLiRyZWZzLnJlZmVyZW5jZSxuPXRoaXMucG9wcGVyfHx0aGlzLiRyZWZzLnBvcHBlcjshdCYmdGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuJiYodD10aGlzLnJlZmVyZW5jZUVsbT10aGlzLiRyZWZzLndyYXBwZXIuY2hpbGRyZW5bMF0pLHQmJihPYmplY3QoemVbImFkZENsYXNzIl0pKHQsImVsLXBvcG92ZXJfX3JlZmVyZW5jZSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iix0aGlzLnRvb2x0aXBJZCksdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0aGlzLnRhYmluZGV4KSxuLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLDApLCJjbGljayIhPT10aGlzLnRyaWdnZXImJihPYmplY3QoemVbIm9uIl0pKHQsImZvY3VzaW4iLChmdW5jdGlvbigpe2UuaGFuZGxlRm9jdXMoKTt2YXIgbj10Ll9fdnVlX187biYmImZ1bmN0aW9uIj09PXR5cGVvZiBuLmZvY3VzJiZuLmZvY3VzKCl9KSksT2JqZWN0KHplWyJvbiJdKShuLCJmb2N1c2luIix0aGlzLmhhbmRsZUZvY3VzKSxPYmplY3QoemVbIm9uIl0pKHQsImZvY3Vzb3V0Iix0aGlzLmhhbmRsZUJsdXIpLE9iamVjdCh6ZVsib24iXSkobiwiZm9jdXNvdXQiLHRoaXMuaGFuZGxlQmx1cikpLE9iamVjdCh6ZVsib24iXSkodCwia2V5ZG93biIsdGhpcy5oYW5kbGVLZXlkb3duKSxPYmplY3QoemVbIm9uIl0pKHQsImNsaWNrIix0aGlzLmhhbmRsZUNsaWNrKSksImNsaWNrIj09PXRoaXMudHJpZ2dlcj8oT2JqZWN0KHplWyJvbiJdKSh0LCJjbGljayIsdGhpcy5kb1RvZ2dsZSksT2JqZWN0KHplWyJvbiJdKShkb2N1bWVudCwiY2xpY2siLHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljaykpOiJob3ZlciI9PT10aGlzLnRyaWdnZXI/KE9iamVjdCh6ZVsib24iXSkodCwibW91c2VlbnRlciIsdGhpcy5oYW5kbGVNb3VzZUVudGVyKSxPYmplY3QoemVbIm9uIl0pKG4sIm1vdXNlZW50ZXIiLHRoaXMuaGFuZGxlTW91c2VFbnRlciksT2JqZWN0KHplWyJvbiJdKSh0LCJtb3VzZWxlYXZlIix0aGlzLmhhbmRsZU1vdXNlTGVhdmUpLE9iamVjdCh6ZVsib24iXSkobiwibW91c2VsZWF2ZSIsdGhpcy5oYW5kbGVNb3VzZUxlYXZlKSk6ImZvY3VzIj09PXRoaXMudHJpZ2dlciYmKHRoaXMudGFiaW5kZXg8MCYmY29uc29sZS53YXJuKCJbRWxlbWVudCBXYXJuXVtQb3BvdmVyXWEgbmVnYXRpdmUgdGFpbmRleCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGNhbm5vdCBiZSBmb2N1c2VkIGJ5IHRhYiBrZXkiKSx0LnF1ZXJ5U2VsZWN0b3IoImlucHV0LCB0ZXh0YXJlYSIpPyhPYmplY3QoemVbIm9uIl0pKHQsImZvY3VzaW4iLHRoaXMuZG9TaG93KSxPYmplY3QoemVbIm9uIl0pKHQsImZvY3Vzb3V0Iix0aGlzLmRvQ2xvc2UpKTooT2JqZWN0KHplWyJvbiJdKSh0LCJtb3VzZWRvd24iLHRoaXMuZG9TaG93KSxPYmplY3QoemVbIm9uIl0pKHQsIm1vdXNldXAiLHRoaXMuZG9DbG9zZSkpKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY2xlYW51cCgpfSxkZWFjdGl2YXRlZDpmdW5jdGlvbigpe3RoaXMuY2xlYW51cCgpfSxtZXRob2RzOntkb1RvZ2dsZTpmdW5jdGlvbigpe3RoaXMuc2hvd1BvcHBlcj0hdGhpcy5zaG93UG9wcGVyfSxkb1Nob3c6ZnVuY3Rpb24oKXt0aGlzLnNob3dQb3BwZXI9ITB9LGRvQ2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnNob3dQb3BwZXI9ITF9LGhhbmRsZUZvY3VzOmZ1bmN0aW9uKCl7T2JqZWN0KHplWyJhZGRDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwiZm9jdXNpbmciKSwiY2xpY2siIT09dGhpcy50cmlnZ2VyJiYiZm9jdXMiIT09dGhpcy50cmlnZ2VyfHwodGhpcy5zaG93UG9wcGVyPSEwKX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXtPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKHRoaXMucmVmZXJlbmNlRWxtLCJmb2N1c2luZyIpfSxoYW5kbGVCbHVyOmZ1bmN0aW9uKCl7T2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwiZm9jdXNpbmciKSwiY2xpY2siIT09dGhpcy50cmlnZ2VyJiYiZm9jdXMiIT09dGhpcy50cmlnZ2VyfHwodGhpcy5zaG93UG9wcGVyPSExKX0saGFuZGxlTW91c2VFbnRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLm9wZW5EZWxheT90aGlzLl90aW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2Uuc2hvd1BvcHBlcj0hMH0pLHRoaXMub3BlbkRlbGF5KTp0aGlzLnNob3dQb3BwZXI9ITB9LGhhbmRsZUtleWRvd246ZnVuY3Rpb24oZSl7Mjc9PT1lLmtleUNvZGUmJiJtYW51YWwiIT09dGhpcy50cmlnZ2VyJiZ0aGlzLmRvQ2xvc2UoKX0saGFuZGxlTW91c2VMZWF2ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSx0aGlzLmNsb3NlRGVsYXk/dGhpcy5fdGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLnNob3dQb3BwZXI9ITF9KSx0aGlzLmNsb3NlRGVsYXkpOnRoaXMuc2hvd1BvcHBlcj0hMX0saGFuZGxlRG9jdW1lbnRDbGljazpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnJlZmVyZW5jZXx8dGhpcy4kcmVmcy5yZWZlcmVuY2Usbj10aGlzLnBvcHBlcnx8dGhpcy4kcmVmcy5wb3BwZXI7IXQmJnRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlbiYmKHQ9dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuWzBdKSx0aGlzLiRlbCYmdCYmIXRoaXMuJGVsLmNvbnRhaW5zKGUudGFyZ2V0KSYmIXQuY29udGFpbnMoZS50YXJnZXQpJiZuJiYhbi5jb250YWlucyhlLnRhcmdldCkmJih0aGlzLnNob3dQb3BwZXI9ITEpfSxoYW5kbGVBZnRlckVudGVyOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdCgiYWZ0ZXItZW50ZXIiKX0saGFuZGxlQWZ0ZXJMZWF2ZTpmdW5jdGlvbigpe3RoaXMuJGVtaXQoImFmdGVyLWxlYXZlIiksdGhpcy5kb0Rlc3Ryb3koKX0sY2xlYW51cDpmdW5jdGlvbigpeyh0aGlzLm9wZW5EZWxheXx8dGhpcy5jbG9zZURlbGF5KSYmY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKX19LGRlc3Ryb3llZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVmZXJlbmNlO09iamVjdCh6ZVsib2ZmIl0pKGUsImNsaWNrIix0aGlzLmRvVG9nZ2xlKSxPYmplY3QoemVbIm9mZiJdKShlLCJtb3VzZXVwIix0aGlzLmRvQ2xvc2UpLE9iamVjdCh6ZVsib2ZmIl0pKGUsIm1vdXNlZG93biIsdGhpcy5kb1Nob3cpLE9iamVjdCh6ZVsib2ZmIl0pKGUsImZvY3VzaW4iLHRoaXMuZG9TaG93KSxPYmplY3QoemVbIm9mZiJdKShlLCJmb2N1c291dCIsdGhpcy5kb0Nsb3NlKSxPYmplY3QoemVbIm9mZiJdKShlLCJtb3VzZWRvd24iLHRoaXMuZG9TaG93KSxPYmplY3QoemVbIm9mZiJdKShlLCJtb3VzZXVwIix0aGlzLmRvQ2xvc2UpLE9iamVjdCh6ZVsib2ZmIl0pKGUsIm1vdXNlbGVhdmUiLHRoaXMuaGFuZGxlTW91c2VMZWF2ZSksT2JqZWN0KHplWyJvZmYiXSkoZSwibW91c2VlbnRlciIsdGhpcy5oYW5kbGVNb3VzZUVudGVyKSxPYmplY3QoemVbIm9mZiJdKShkb2N1bWVudCwiY2xpY2siLHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljayl9fSxycz1pcyxvcz1zKHJzLHRzLG5zLCExLG51bGwsbnVsbCxudWxsKTtvcy5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWUiO3ZhciBhcz1vcy5leHBvcnRzLHNzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10LmV4cHJlc3Npb24/dC52YWx1ZTp0LmFyZyxyPW4uY29udGV4dC4kcmVmc1tpXTtyJiYoQXJyYXkuaXNBcnJheShyKT9yWzBdLiRyZWZzLnJlZmVyZW5jZT1lOnIuJHJlZnMucmVmZXJlbmNlPWUpfSxscz17YmluZDpmdW5jdGlvbihlLHQsbil7c3MoZSx0LG4pfSxpbnNlcnRlZDpmdW5jdGlvbihlLHQsbil7c3MoZSx0LG4pfX07amkuYS5kaXJlY3RpdmUoInBvcG92ZXIiLGxzKSxhcy5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuZGlyZWN0aXZlKCJwb3BvdmVyIixscyksZS5jb21wb25lbnQoYXMubmFtZSxhcyl9LGFzLmRpcmVjdGl2ZT1sczt2YXIgY3M9YXMsdXM9e25hbWU6IkVsVG9vbHRpcCIsbWl4aW5zOltILmFdLHByb3BzOntvcGVuRGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sZGlzYWJsZWQ6Qm9vbGVhbixtYW51YWw6Qm9vbGVhbixlZmZlY3Q6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImRhcmsifSxhcnJvd09mZnNldDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSxwb3BwZXJDbGFzczpTdHJpbmcsY29udGVudDpTdHJpbmcsdmlzaWJsZUFycm93OntkZWZhdWx0OiEwfSx0cmFuc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJlbC1mYWRlLWluLWxpbmVhciJ9LHBvcHBlck9wdGlvbnM6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRhcmllc1BhZGRpbmc6MTAsZ3B1QWNjZWxlcmF0aW9uOiExfX19LGVudGVyYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGhpZGVBZnRlcjp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSx0YWJpbmRleDp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0b29sdGlwSWQ6ImVsLXRvb2x0aXAtIitPYmplY3QoeVsiZ2VuZXJhdGVJZCJdKSgpLHRpbWVvdXRQZW5kaW5nOm51bGwsZm9jdXNpbmc6ITF9fSxiZWZvcmVDcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJGlzU2VydmVyfHwodGhpcy5wb3BwZXJWTT1uZXcgamkuYSh7ZGF0YTp7bm9kZToiIn0scmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5vZGV9fSkuJG1vdW50KCksdGhpcy5kZWJvdW5jZUNsb3NlPSQoKSgyMDAsKGZ1bmN0aW9uKCl7cmV0dXJuIGUuaGFuZGxlQ2xvc2VQb3BwZXIoKX0pKSl9LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMucG9wcGVyVk0mJih0aGlzLnBvcHBlclZNLm5vZGU9ZSgidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOnRoaXMudHJhbnNpdGlvbn0sb246e2FmdGVyTGVhdmU6dGhpcy5kb0Rlc3Ryb3l9fSxbZSgiZGl2Iix7b246e21vdXNlbGVhdmU6ZnVuY3Rpb24oKXt0LnNldEV4cGVjdGVkU3RhdGUoITEpLHQuZGVib3VuY2VDbG9zZSgpfSxtb3VzZWVudGVyOmZ1bmN0aW9uKCl7dC5zZXRFeHBlY3RlZFN0YXRlKCEwKX19LHJlZjoicG9wcGVyIixhdHRyczp7cm9sZToidG9vbHRpcCIsaWQ6dGhpcy50b29sdGlwSWQsImFyaWEtaGlkZGVuIjp0aGlzLmRpc2FibGVkfHwhdGhpcy5zaG93UG9wcGVyPyJ0cnVlIjoiZmFsc2UifSxkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIsdmFsdWU6IXRoaXMuZGlzYWJsZWQmJnRoaXMuc2hvd1BvcHBlcn1dLGNsYXNzOlsiZWwtdG9vbHRpcF9fcG9wcGVyIiwiaXMtIit0aGlzLmVmZmVjdCx0aGlzLnBvcHBlckNsYXNzXX0sW3RoaXMuJHNsb3RzLmNvbnRlbnR8fHRoaXMuY29udGVudF0pXSkpO3ZhciBuPXRoaXMuZ2V0Rmlyc3RFbGVtZW50KCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9bi5kYXRhPW4uZGF0YXx8e307cmV0dXJuIGkuc3RhdGljQ2xhc3M9dGhpcy5hZGRUb29sdGlwQ2xhc3MoaS5zdGF0aWNDbGFzcyksbn0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZWZlcmVuY2VFbG09dGhpcy4kZWwsMT09PXRoaXMuJGVsLm5vZGVUeXBlJiYodGhpcy4kZWwuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iix0aGlzLnRvb2x0aXBJZCksdGhpcy4kZWwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy50YWJpbmRleCksT2JqZWN0KHplWyJvbiJdKSh0aGlzLnJlZmVyZW5jZUVsbSwibW91c2VlbnRlciIsdGhpcy5zaG93KSxPYmplY3QoemVbIm9uIl0pKHRoaXMucmVmZXJlbmNlRWxtLCJtb3VzZWxlYXZlIix0aGlzLmhpZGUpLE9iamVjdCh6ZVsib24iXSkodGhpcy5yZWZlcmVuY2VFbG0sImZvY3VzIiwoZnVuY3Rpb24oKXtpZihlLiRzbG90cy5kZWZhdWx0JiZlLiRzbG90cy5kZWZhdWx0Lmxlbmd0aCl7dmFyIHQ9ZS4kc2xvdHMuZGVmYXVsdFswXS5jb21wb25lbnRJbnN0YW5jZTt0JiZ0LmZvY3VzP3QuZm9jdXMoKTplLmhhbmRsZUZvY3VzKCl9ZWxzZSBlLmhhbmRsZUZvY3VzKCl9KSksT2JqZWN0KHplWyJvbiJdKSh0aGlzLnJlZmVyZW5jZUVsbSwiYmx1ciIsdGhpcy5oYW5kbGVCbHVyKSxPYmplY3QoemVbIm9uIl0pKHRoaXMucmVmZXJlbmNlRWxtLCJjbGljayIsdGhpcy5yZW1vdmVGb2N1c2luZykpLHRoaXMudmFsdWUmJnRoaXMucG9wcGVyVk0mJnRoaXMucG9wcGVyVk0uJG5leHRUaWNrKChmdW5jdGlvbigpe2UudmFsdWUmJmUudXBkYXRlUG9wcGVyKCl9KSl9LHdhdGNoOntmb2N1c2luZzpmdW5jdGlvbihlKXtlP09iamVjdCh6ZVsiYWRkQ2xhc3MiXSkodGhpcy5yZWZlcmVuY2VFbG0sImZvY3VzaW5nIik6T2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKSh0aGlzLnJlZmVyZW5jZUVsbSwiZm9jdXNpbmciKX19LG1ldGhvZHM6e3Nob3c6ZnVuY3Rpb24oKXt0aGlzLnNldEV4cGVjdGVkU3RhdGUoITApLHRoaXMuaGFuZGxlU2hvd1BvcHBlcigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5zZXRFeHBlY3RlZFN0YXRlKCExKSx0aGlzLmRlYm91bmNlQ2xvc2UoKX0saGFuZGxlRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzaW5nPSEwLHRoaXMuc2hvdygpfSxoYW5kbGVCbHVyOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2luZz0hMSx0aGlzLmhpZGUoKX0scmVtb3ZlRm9jdXNpbmc6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzaW5nPSExfSxhZGRUb29sdGlwQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ImVsLXRvb2x0aXAgIitlLnJlcGxhY2UoImVsLXRvb2x0aXAiLCIiKToiZWwtdG9vbHRpcCJ9LGhhbmRsZVNob3dQb3BwZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZXhwZWN0ZWRTdGF0ZSYmIXRoaXMubWFudWFsJiYoY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy50aW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5zaG93UG9wcGVyPSEwfSksdGhpcy5vcGVuRGVsYXkpLHRoaXMuaGlkZUFmdGVyPjAmJih0aGlzLnRpbWVvdXRQZW5kaW5nPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5zaG93UG9wcGVyPSExfSksdGhpcy5oaWRlQWZ0ZXIpKSl9LGhhbmRsZUNsb3NlUG9wcGVyOmZ1bmN0aW9uKCl7dGhpcy5lbnRlcmFibGUmJnRoaXMuZXhwZWN0ZWRTdGF0ZXx8dGhpcy5tYW51YWx8fChjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLnRpbWVvdXRQZW5kaW5nJiZjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UGVuZGluZyksdGhpcy5zaG93UG9wcGVyPSExLHRoaXMuZGlzYWJsZWQmJnRoaXMuZG9EZXN0cm95KCkpfSxzZXRFeHBlY3RlZFN0YXRlOmZ1bmN0aW9uKGUpeyExPT09ZSYmY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFBlbmRpbmcpLHRoaXMuZXhwZWN0ZWRTdGF0ZT1lfSxnZXRGaXJzdEVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRzbG90cy5kZWZhdWx0O2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiBudWxsO2Zvcih2YXIgdD1udWxsLG49MDtuPGUubGVuZ3RoO24rKyllW25dJiZlW25dLnRhZyYmKHQ9ZVtuXSk7cmV0dXJuIHR9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5wb3BwZXJWTSYmdGhpcy5wb3BwZXJWTS4kZGVzdHJveSgpfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlZmVyZW5jZUVsbTsxPT09ZS5ub2RlVHlwZSYmKE9iamVjdCh6ZVsib2ZmIl0pKGUsIm1vdXNlZW50ZXIiLHRoaXMuc2hvdyksT2JqZWN0KHplWyJvZmYiXSkoZSwibW91c2VsZWF2ZSIsdGhpcy5oaWRlKSxPYmplY3QoemVbIm9mZiJdKShlLCJmb2N1cyIsdGhpcy5oYW5kbGVGb2N1cyksT2JqZWN0KHplWyJvZmYiXSkoZSwiYmx1ciIsdGhpcy5oYW5kbGVCbHVyKSxPYmplY3QoemVbIm9mZiJdKShlLCJjbGljayIsdGhpcy5yZW1vdmVGb2N1c2luZykpfSxpbnN0YWxsOmZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KHVzLm5hbWUsdXMpfX0saHM9dXMsZHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToibXNnYm94LWZhZGUifX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fd3JhcHBlciIsYXR0cnM6e3RhYmluZGV4OiItMSIscm9sZToiZGlhbG9nIiwiYXJpYS1tb2RhbCI6InRydWUiLCJhcmlhLWxhYmVsIjplLnRpdGxlfHwiZGlhbG9nIn0sb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldCE9PXQuY3VycmVudFRhcmdldD9udWxsOmUuaGFuZGxlV3JhcHBlckNsaWNrKHQpfX19LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3giLGNsYXNzOltlLmN1c3RvbUNsYXNzLGUuY2VudGVyJiYiZWwtbWVzc2FnZS1ib3gtLWNlbnRlciJdfSxbbnVsbCE9PWUudGl0bGU/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19oZWFkZXIifSxbbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X190aXRsZSJ9LFtlLmljb24mJmUuY2VudGVyP24oImRpdiIse2NsYXNzOlsiZWwtbWVzc2FnZS1ib3hfX3N0YXR1cyIsZS5pY29uXX0pOmUuX2UoKSxuKCJzcGFuIixbZS5fdihlLl9zKGUudGl0bGUpKV0pXSksZS5zaG93Q2xvc2U/bigiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG4iLGF0dHJzOnt0eXBlOiJidXR0b24iLCJhcmlhLWxhYmVsIjoiQ2xvc2UifSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5oYW5kbGVBY3Rpb24oZS5kaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlPyJjbG9zZSI6ImNhbmNlbCIpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVudGVyIiwxMyx0LmtleSwiRW50ZXIiKSlyZXR1cm4gbnVsbDtlLmhhbmRsZUFjdGlvbihlLmRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2U/ImNsb3NlIjoiY2FuY2VsIil9fX0sW24oImkiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2Nsb3NlIGVsLWljb24tY2xvc2UifSldKTplLl9lKCldKTplLl9lKCksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19jb250ZW50In0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlLWJveF9fY29udGFpbmVyIn0sW2UuaWNvbiYmIWUuY2VudGVyJiYiIiE9PWUubWVzc2FnZT9uKCJkaXYiLHtjbGFzczpbImVsLW1lc3NhZ2UtYm94X19zdGF0dXMiLGUuaWNvbl19KTplLl9lKCksIiIhPT1lLm1lc3NhZ2U/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2UtYm94X19tZXNzYWdlIn0sW2UuX3QoImRlZmF1bHQiLFtlLmRhbmdlcm91c2x5VXNlSFRNTFN0cmluZz9uKCJwIix7ZG9tUHJvcHM6e2lubmVySFRNTDplLl9zKGUubWVzc2FnZSl9fSk6bigicCIsW2UuX3YoZS5fcyhlLm1lc3NhZ2UpKV0pXSldLDIpOmUuX2UoKV0pLG4oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuc2hvd0lucHV0LGV4cHJlc3Npb246InNob3dJbnB1dCJ9XSxzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2lucHV0In0sW24oImVsLWlucHV0Iix7cmVmOiJpbnB1dCIsYXR0cnM6e3R5cGU6ZS5pbnB1dFR5cGUscGxhY2Vob2xkZXI6ZS5pbnB1dFBsYWNlaG9sZGVyfSxuYXRpdmVPbjp7a2V5ZG93bjpmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMsdC5rZXksIkVudGVyIik/bnVsbDplLmhhbmRsZUlucHV0RW50ZXIodCl9fSxtb2RlbDp7dmFsdWU6ZS5pbnB1dFZhbHVlLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe2UuaW5wdXRWYWx1ZT10fSxleHByZXNzaW9uOiJpbnB1dFZhbHVlIn19KSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2Vycm9ybXNnIixzdHlsZTp7dmlzaWJpbGl0eTplLmVkaXRvckVycm9yTWVzc2FnZT8idmlzaWJsZSI6ImhpZGRlbiJ9fSxbZS5fdihlLl9zKGUuZWRpdG9yRXJyb3JNZXNzYWdlKSldKV0sMSldKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbWVzc2FnZS1ib3hfX2J0bnMifSxbZS5zaG93Q2FuY2VsQnV0dG9uP24oImVsLWJ1dHRvbiIse2NsYXNzOltlLmNhbmNlbEJ1dHRvbkNsYXNzZXNdLGF0dHJzOntsb2FkaW5nOmUuY2FuY2VsQnV0dG9uTG9hZGluZyxyb3VuZDplLnJvdW5kQnV0dG9uLHNpemU6InNtYWxsIn0sb246e2tleWRvd246ZnVuY3Rpb24odCl7aWYoISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZW50ZXIiLDEzLHQua2V5LCJFbnRlciIpKXJldHVybiBudWxsO2UuaGFuZGxlQWN0aW9uKCJjYW5jZWwiKX19LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXtlLmhhbmRsZUFjdGlvbigiY2FuY2VsIil9fX0sW2UuX3YoIlxuICAgICAgICAgICIrZS5fcyhlLmNhbmNlbEJ1dHRvblRleHR8fGUudCgiZWwubWVzc2FnZWJveC5jYW5jZWwiKSkrIlxuICAgICAgICAiKV0pOmUuX2UoKSxuKCJlbC1idXR0b24iLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnNob3dDb25maXJtQnV0dG9uLGV4cHJlc3Npb246InNob3dDb25maXJtQnV0dG9uIn1dLHJlZjoiY29uZmlybSIsY2xhc3M6W2UuY29uZmlybUJ1dHRvbkNsYXNzZXNdLGF0dHJzOntsb2FkaW5nOmUuY29uZmlybUJ1dHRvbkxvYWRpbmcscm91bmQ6ZS5yb3VuZEJ1dHRvbixzaXplOiJzbWFsbCJ9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCEoImJ1dHRvbiJpbiB0KSYmZS5fayh0LmtleUNvZGUsImVudGVyIiwxMyx0LmtleSwiRW50ZXIiKSlyZXR1cm4gbnVsbDtlLmhhbmRsZUFjdGlvbigiY29uZmlybSIpfX0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe2UuaGFuZGxlQWN0aW9uKCJjb25maXJtIil9fX0sW2UuX3YoIlxuICAgICAgICAgICIrZS5fcyhlLmNvbmZpcm1CdXR0b25UZXh0fHxlLnQoImVsLm1lc3NhZ2Vib3guY29uZmlybSIpKSsiXG4gICAgICAgICIpXSldLDEpXSldKV0pfSxmcz1bXTtkcy5fd2l0aFN0cmlwcGVkPSEwO3ZhciBwcz1uKDEyKSxtcz1uLm4ocHMpLGdzPW4oMzkpLHZzPW4ubihncykseXM9dm9pZCAwLGJzPXtzdWNjZXNzOiJzdWNjZXNzIixpbmZvOiJpbmZvIix3YXJuaW5nOiJ3YXJuaW5nIixlcnJvcjoiZXJyb3IifSx4cz17bWl4aW5zOltDLmEsdi5hXSxwcm9wczp7bW9kYWw6e2RlZmF1bHQ6ITB9LGxvY2tTY3JvbGw6e2RlZmF1bHQ6ITB9LHNob3dDbG9zZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlT25DbGlja01vZGFsOntkZWZhdWx0OiEwfSxjbG9zZU9uUHJlc3NFc2NhcGU6e2RlZmF1bHQ6ITB9LGNsb3NlT25IYXNoQ2hhbmdlOntkZWZhdWx0OiEwfSxjZW50ZXI6e2RlZmF1bHQ6ITEsdHlwZTpCb29sZWFufSxyb3VuZEJ1dHRvbjp7ZGVmYXVsdDohMSx0eXBlOkJvb2xlYW59fSxjb21wb25lbnRzOntFbElucHV0Om0uYSxFbEJ1dHRvbjphZS5hfSxjb21wdXRlZDp7aWNvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZSx0PXRoaXMuaWNvbkNsYXNzO3JldHVybiB0fHwoZSYmYnNbZV0/ImVsLWljb24tIitic1tlXToiIil9LGNvbmZpcm1CdXR0b25DbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuImVsLWJ1dHRvbi0tcHJpbWFyeSAiK3RoaXMuY29uZmlybUJ1dHRvbkNsYXNzfSxjYW5jZWxCdXR0b25DbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5jYW5jZWxCdXR0b25DbGFzc319LG1ldGhvZHM6e2dldFNhZmVDbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnVpZDtyZXR1cm4gZnVuY3Rpb24oKXtlLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0PT09ZS51aWQmJmUuZG9DbG9zZSgpfSkpfX0sZG9DbG9zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy52aXNpYmxlJiYodGhpcy52aXNpYmxlPSExLHRoaXMuX2Nsb3Npbmc9ITAsdGhpcy5vbkNsb3NlJiZ0aGlzLm9uQ2xvc2UoKSx5cy5jbG9zZURpYWxvZygpLHRoaXMubG9ja1Njcm9sbCYmc2V0VGltZW91dCh0aGlzLnJlc3RvcmVCb2R5U3R5bGUsMjAwKSx0aGlzLm9wZW5lZD0hMSx0aGlzLmRvQWZ0ZXJDbG9zZSgpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5hY3Rpb24mJmUuY2FsbGJhY2soZS5hY3Rpb24sZSl9KSkpfSxoYW5kbGVXcmFwcGVyQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlT25DbGlja01vZGFsJiZ0aGlzLmhhbmRsZUFjdGlvbih0aGlzLmRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2U/ImNsb3NlIjoiY2FuY2VsIil9LGhhbmRsZUlucHV0RW50ZXI6ZnVuY3Rpb24oKXtpZigidGV4dGFyZWEiIT09dGhpcy5pbnB1dFR5cGUpcmV0dXJuIHRoaXMuaGFuZGxlQWN0aW9uKCJjb25maXJtIil9LGhhbmRsZUFjdGlvbjpmdW5jdGlvbihlKXsoInByb21wdCIhPT10aGlzLiR0eXBlfHwiY29uZmlybSIhPT1lfHx0aGlzLnZhbGlkYXRlKCkpJiYodGhpcy5hY3Rpb249ZSwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2U/KHRoaXMuY2xvc2U9dGhpcy5nZXRTYWZlQ2xvc2UoKSx0aGlzLmJlZm9yZUNsb3NlKGUsdGhpcyx0aGlzLmNsb3NlKSk6dGhpcy5kb0Nsb3NlKCkpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe2lmKCJwcm9tcHQiPT09dGhpcy4kdHlwZSl7dmFyIGU9dGhpcy5pbnB1dFBhdHRlcm47aWYoZSYmIWUudGVzdCh0aGlzLmlucHV0VmFsdWV8fCIiKSlyZXR1cm4gdGhpcy5lZGl0b3JFcnJvck1lc3NhZ2U9dGhpcy5pbnB1dEVycm9yTWVzc2FnZXx8T2JqZWN0KHBzWyJ0Il0pKCJlbC5tZXNzYWdlYm94LmVycm9yIiksT2JqZWN0KHplWyJhZGRDbGFzcyJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCJpbnZhbGlkIiksITE7dmFyIHQ9dGhpcy5pbnB1dFZhbGlkYXRvcjtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHQpe3ZhciBuPXQodGhpcy5pbnB1dFZhbHVlKTtpZighMT09PW4pcmV0dXJuIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlPXRoaXMuaW5wdXRFcnJvck1lc3NhZ2V8fE9iamVjdChwc1sidCJdKSgiZWwubWVzc2FnZWJveC5lcnJvciIpLE9iamVjdCh6ZVsiYWRkQ2xhc3MiXSkodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSwiaW52YWxpZCIpLCExO2lmKCJzdHJpbmciPT09dHlwZW9mIG4pcmV0dXJuIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlPW4sT2JqZWN0KHplWyJhZGRDbGFzcyJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCJpbnZhbGlkIiksITF9fXJldHVybiB0aGlzLmVkaXRvckVycm9yTWVzc2FnZT0iIixPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksImludmFsaWQiKSwhMH0sZ2V0Rmlyc3RGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoIi5lbC1tZXNzYWdlLWJveF9fYnRucyAuZWwtYnV0dG9uIiksdD10aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCIuZWwtbWVzc2FnZS1ib3hfX2J0bnMgLmVsLW1lc3NhZ2UtYm94X190aXRsZSIpO3JldHVybiBlfHx0fSxnZXRJbnB1dEVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRyZWZzLmlucHV0LiRyZWZzO3JldHVybiBlLmlucHV0fHxlLnRleHRhcmVhfSxoYW5kbGVDbG9zZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlQWN0aW9uKCJjbG9zZSIpfX0sd2F0Y2g6e2lucHV0VmFsdWU6e2ltbWVkaWF0ZTohMCxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKG4peyJwcm9tcHQiPT09dC4kdHlwZSYmbnVsbCE9PWUmJnQudmFsaWRhdGUoKX0pKX19LHZpc2libGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztlJiYodGhpcy51aWQrKywiYWxlcnQiIT09dGhpcy4kdHlwZSYmImNvbmZpcm0iIT09dGhpcy4kdHlwZXx8dGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7dC4kcmVmcy5jb25maXJtLiRlbC5mb2N1cygpfSkpLHRoaXMuZm9jdXNBZnRlckNsb3NlZD1kb2N1bWVudC5hY3RpdmVFbGVtZW50LHlzPW5ldyB2cy5hKHRoaXMuJGVsLHRoaXMuZm9jdXNBZnRlckNsb3NlZCx0aGlzLmdldEZpcnN0Rm9jdXMoKSkpLCJwcm9tcHQiPT09dGhpcy4kdHlwZSYmKGU/c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LiRyZWZzLmlucHV0JiZ0LiRyZWZzLmlucHV0LiRlbCYmdC5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfSksNTAwKToodGhpcy5lZGl0b3JFcnJvck1lc3NhZ2U9IiIsT2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCJpbnZhbGlkIikpKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe2UuY2xvc2VPbkhhc2hDaGFuZ2UmJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlLmNsb3NlKX0pKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY2xvc2VPbkhhc2hDaGFuZ2UmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIix0aGlzLmNsb3NlKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3lzLmNsb3NlRGlhbG9nKCl9KSl9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dWlkOjEsdGl0bGU6dm9pZCAwLG1lc3NhZ2U6IiIsdHlwZToiIixpY29uQ2xhc3M6IiIsY3VzdG9tQ2xhc3M6IiIsc2hvd0lucHV0OiExLGlucHV0VmFsdWU6bnVsbCxpbnB1dFBsYWNlaG9sZGVyOiIiLGlucHV0VHlwZToidGV4dCIsaW5wdXRQYXR0ZXJuOm51bGwsaW5wdXRWYWxpZGF0b3I6bnVsbCxpbnB1dEVycm9yTWVzc2FnZToiIixzaG93Q29uZmlybUJ1dHRvbjohMCxzaG93Q2FuY2VsQnV0dG9uOiExLGFjdGlvbjoiIixjb25maXJtQnV0dG9uVGV4dDoiIixjYW5jZWxCdXR0b25UZXh0OiIiLGNvbmZpcm1CdXR0b25Mb2FkaW5nOiExLGNhbmNlbEJ1dHRvbkxvYWRpbmc6ITEsY29uZmlybUJ1dHRvbkNsYXNzOiIiLGNvbmZpcm1CdXR0b25EaXNhYmxlZDohMSxjYW5jZWxCdXR0b25DbGFzczoiIixlZGl0b3JFcnJvck1lc3NhZ2U6bnVsbCxjYWxsYmFjazpudWxsLGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzohMSxmb2N1c0FmdGVyQ2xvc2VkOm51bGwsaXNPbkNvbXBvc2l0aW9uOiExLGRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2U6ITF9fX0sX3M9eHMsd3M9cyhfcyxkcyxmcywhMSxudWxsLG51bGwsbnVsbCk7d3Mub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZSI7dmFyIFNzPXdzLmV4cG9ydHMsQ3M9bigyMyksa3M9ImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LFRzPXt0aXRsZTpudWxsLG1lc3NhZ2U6IiIsdHlwZToiIixpY29uQ2xhc3M6IiIsc2hvd0lucHV0OiExLHNob3dDbG9zZTohMCxtb2RhbEZhZGU6ITAsbG9ja1Njcm9sbDohMCxjbG9zZU9uQ2xpY2tNb2RhbDohMCxjbG9zZU9uUHJlc3NFc2NhcGU6ITAsY2xvc2VPbkhhc2hDaGFuZ2U6ITAsaW5wdXRWYWx1ZTpudWxsLGlucHV0UGxhY2Vob2xkZXI6IiIsaW5wdXRUeXBlOiJ0ZXh0IixpbnB1dFBhdHRlcm46bnVsbCxpbnB1dFZhbGlkYXRvcjpudWxsLGlucHV0RXJyb3JNZXNzYWdlOiIiLHNob3dDb25maXJtQnV0dG9uOiEwLHNob3dDYW5jZWxCdXR0b246ITEsY29uZmlybUJ1dHRvblBvc2l0aW9uOiJyaWdodCIsY29uZmlybUJ1dHRvbkhpZ2hsaWdodDohMSxjYW5jZWxCdXR0b25IaWdobGlnaHQ6ITEsY29uZmlybUJ1dHRvblRleHQ6IiIsY2FuY2VsQnV0dG9uVGV4dDoiIixjb25maXJtQnV0dG9uQ2xhc3M6IiIsY2FuY2VsQnV0dG9uQ2xhc3M6IiIsY3VzdG9tQ2xhc3M6IiIsYmVmb3JlQ2xvc2U6bnVsbCxkYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc6ITEsY2VudGVyOiExLHJvdW5kQnV0dG9uOiExLGRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2U6ITF9LE1zPWppLmEuZXh0ZW5kKFNzKSxFcz12b2lkIDAsSXM9dm9pZCAwLERzPVtdLEFzPWZ1bmN0aW9uKGUpe2lmKEVzKXt2YXIgdD1Fcy5jYWxsYmFjazsiZnVuY3Rpb24iPT09dHlwZW9mIHQmJihJcy5zaG93SW5wdXQ/dChJcy5pbnB1dFZhbHVlLGUpOnQoZSkpLEVzLnJlc29sdmUmJigiY29uZmlybSI9PT1lP0lzLnNob3dJbnB1dD9Fcy5yZXNvbHZlKHt2YWx1ZTpJcy5pbnB1dFZhbHVlLGFjdGlvbjplfSk6RXMucmVzb2x2ZShlKTohRXMucmVqZWN0fHwiY2FuY2VsIiE9PWUmJiJjbG9zZSIhPT1lfHxFcy5yZWplY3QoZSkpfX0sT3M9ZnVuY3Rpb24oKXtJcz1uZXcgTXMoe2VsOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpfSksSXMuY2FsbGJhY2s9QXN9LFBzPWZ1bmN0aW9uIGUoKXtpZihJc3x8T3MoKSxJcy5hY3Rpb249IiIsKCFJcy52aXNpYmxlfHxJcy5jbG9zZVRpbWVyKSYmRHMubGVuZ3RoPjApe0VzPURzLnNoaWZ0KCk7dmFyIHQ9RXMub3B0aW9ucztmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoSXNbbl09dFtuXSk7dm9pZCAwPT09dC5jYWxsYmFjayYmKElzLmNhbGxiYWNrPUFzKTt2YXIgaT1Jcy5jYWxsYmFjaztJcy5jYWxsYmFjaz1mdW5jdGlvbih0LG4pe2kodCxuKSxlKCl9LE9iamVjdChDc1siaXNWTm9kZSJdKShJcy5tZXNzYWdlKT8oSXMuJHNsb3RzLmRlZmF1bHQ9W0lzLm1lc3NhZ2VdLElzLm1lc3NhZ2U9bnVsbCk6ZGVsZXRlIElzLiRzbG90cy5kZWZhdWx0LFsibW9kYWwiLCJzaG93Q2xvc2UiLCJjbG9zZU9uQ2xpY2tNb2RhbCIsImNsb3NlT25QcmVzc0VzY2FwZSIsImNsb3NlT25IYXNoQ2hhbmdlIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dm9pZCAwPT09SXNbZV0mJihJc1tlXT0hMCl9KSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChJcy4kZWwpLGppLmEubmV4dFRpY2soKGZ1bmN0aW9uKCl7SXMudmlzaWJsZT0hMH0pKX19LExzPWZ1bmN0aW9uIGUodCxuKXtpZighamkuYS5wcm90b3R5cGUuJGlzU2VydmVyKXtpZigic3RyaW5nIj09PXR5cGVvZiB0fHxPYmplY3QoQ3NbImlzVk5vZGUiXSkodCk/KHQ9e21lc3NhZ2U6dH0sInN0cmluZyI9PT10eXBlb2YgYXJndW1lbnRzWzFdJiYodC50aXRsZT1hcmd1bWVudHNbMV0pKTp0LmNhbGxiYWNrJiYhbiYmKG49dC5jYWxsYmFjayksInVuZGVmaW5lZCIhPT10eXBlb2YgUHJvbWlzZSlyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGkscil7RHMucHVzaCh7b3B0aW9uczprdCgpKHt9LFRzLGUuZGVmYXVsdHMsdCksY2FsbGJhY2s6bixyZXNvbHZlOmkscmVqZWN0OnJ9KSxQcygpfSkpO0RzLnB1c2goe29wdGlvbnM6a3QoKSh7fSxUcyxlLmRlZmF1bHRzLHQpLGNhbGxiYWNrOm59KSxQcygpfX07THMuc2V0RGVmYXVsdHM9ZnVuY3Rpb24oZSl7THMuZGVmYXVsdHM9ZX0sTHMuYWxlcnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT09dHlwZW9mIHQ/InVuZGVmaW5lZCI6a3ModCkpPyhuPXQsdD0iIik6dm9pZCAwPT09dCYmKHQ9IiIpLExzKGt0KCkoe3RpdGxlOnQsbWVzc2FnZTplLCR0eXBlOiJhbGVydCIsY2xvc2VPblByZXNzRXNjYXBlOiExLGNsb3NlT25DbGlja01vZGFsOiExfSxuKSl9LExzLmNvbmZpcm09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJvYmplY3QiPT09KCJ1bmRlZmluZWQiPT09dHlwZW9mIHQ/InVuZGVmaW5lZCI6a3ModCkpPyhuPXQsdD0iIik6dm9pZCAwPT09dCYmKHQ9IiIpLExzKGt0KCkoe3RpdGxlOnQsbWVzc2FnZTplLCR0eXBlOiJjb25maXJtIixzaG93Q2FuY2VsQnV0dG9uOiEwfSxuKSl9LExzLnByb21wdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PT10eXBlb2YgdD8idW5kZWZpbmVkIjprcyh0KSk/KG49dCx0PSIiKTp2b2lkIDA9PT10JiYodD0iIiksTHMoa3QoKSh7dGl0bGU6dCxtZXNzYWdlOmUsc2hvd0NhbmNlbEJ1dHRvbjohMCxzaG93SW5wdXQ6ITAsJHR5cGU6InByb21wdCJ9LG4pKX0sTHMuY2xvc2U9ZnVuY3Rpb24oKXtJcy5kb0Nsb3NlKCksSXMudmlzaWJsZT0hMSxEcz1bXSxFcz1udWxsfTt2YXIgTnM9THMsUnM9TnMsJHM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iIixhdHRyczp7ImFyaWEtbGFiZWwiOiJCcmVhZGNydW1iIixyb2xlOiJuYXZpZ2F0aW9uIn19LFtlLl90KCJkZWZhdWx0IildLDIpfSx6cz1bXTskcy5fd2l0aFN0cmlwcGVkPSEwO3ZhciBCcz17bmFtZToiRWxCcmVhZGNydW1iIixwcm9wczp7c2VwYXJhdG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OiIvIn0sc2VwYXJhdG9yQ2xhc3M6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9fSxwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2VsQnJlYWRjcnVtYjp0aGlzfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5lbC1icmVhZGNydW1iX19pdGVtIik7ZS5sZW5ndGgmJmVbZS5sZW5ndGgtMV0uc2V0QXR0cmlidXRlKCJhcmlhLWN1cnJlbnQiLCJwYWdlIil9fSxGcz1CcyxWcz1zKEZzLCRzLHpzLCExLG51bGwsbnVsbCxudWxsKTtWcy5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWUiO3ZhciBqcz1Wcy5leHBvcnRzO2pzLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoanMubmFtZSxqcyl9O3ZhciBIcz1qcyxXcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iX19pdGVtIn0sW24oInNwYW4iLHtyZWY6ImxpbmsiLGNsYXNzOlsiZWwtYnJlYWRjcnVtYl9faW5uZXIiLGUudG8/ImlzLWxpbmsiOiIiXSxhdHRyczp7cm9sZToibGluayJ9fSxbZS5fdCgiZGVmYXVsdCIpXSwyKSxlLnNlcGFyYXRvckNsYXNzP24oImkiLHtzdGF0aWNDbGFzczoiZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9yIixjbGFzczplLnNlcGFyYXRvckNsYXNzfSk6bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1icmVhZGNydW1iX19zZXBhcmF0b3IiLGF0dHJzOntyb2xlOiJwcmVzZW50YXRpb24ifX0sW2UuX3YoZS5fcyhlLnNlcGFyYXRvcikpXSldKX0sR3M9W107V3MuX3dpdGhTdHJpcHBlZD0hMDt2YXIgVXM9e25hbWU6IkVsQnJlYWRjcnVtYkl0ZW0iLHByb3BzOnt0bzp7fSxyZXBsYWNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2VwYXJhdG9yOiIiLHNlcGFyYXRvckNsYXNzOiIifX0saW5qZWN0OlsiZWxCcmVhZGNydW1iIl0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5zZXBhcmF0b3I9dGhpcy5lbEJyZWFkY3J1bWIuc2VwYXJhdG9yLHRoaXMuc2VwYXJhdG9yQ2xhc3M9dGhpcy5lbEJyZWFkY3J1bWIuc2VwYXJhdG9yQ2xhc3M7dmFyIHQ9dGhpcy4kcmVmcy5saW5rO3Quc2V0QXR0cmlidXRlKCJyb2xlIiwibGluayIpLHQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbih0KXt2YXIgbj1lLnRvLGk9ZS4kcm91dGVyO24mJmkmJihlLnJlcGxhY2U/aS5yZXBsYWNlKG4pOmkucHVzaChuKSl9KSl9fSxxcz1VcyxZcz1zKHFzLFdzLEdzLCExLG51bGwsbnVsbCxudWxsKTtZcy5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZSI7dmFyIFhzPVlzLmV4cG9ydHM7WHMuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChYcy5uYW1lLFhzKX07dmFyIEtzPVhzLFpzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJmb3JtIix7c3RhdGljQ2xhc3M6ImVsLWZvcm0iLGNsYXNzOltlLmxhYmVsUG9zaXRpb24/ImVsLWZvcm0tLWxhYmVsLSIrZS5sYWJlbFBvc2l0aW9uOiIiLHsiZWwtZm9ybS0taW5saW5lIjplLmlubGluZX1dfSxbZS5fdCgiZGVmYXVsdCIpXSwyKX0sSnM9W107WnMuX3dpdGhTdHJpcHBlZD0hMDt2YXIgUXM9e25hbWU6IkVsRm9ybSIsY29tcG9uZW50TmFtZToiRWxGb3JtIixwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2VsRm9ybTp0aGlzfX0scHJvcHM6e21vZGVsOk9iamVjdCxydWxlczpPYmplY3QsbGFiZWxQb3NpdGlvbjpTdHJpbmcsbGFiZWxXaWR0aDpTdHJpbmcsbGFiZWxTdWZmaXg6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LGlubGluZTpCb29sZWFuLGlubGluZU1lc3NhZ2U6Qm9vbGVhbixzdGF0dXNJY29uOkJvb2xlYW4sc2hvd01lc3NhZ2U6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxzaXplOlN0cmluZyxkaXNhYmxlZDpCb29sZWFuLHZhbGlkYXRlT25SdWxlQ2hhbmdlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0saGlkZVJlcXVpcmVkQXN0ZXJpc2s6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sd2F0Y2g6e3J1bGVzOmZ1bmN0aW9uKCl7dGhpcy5maWVsZHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZW1vdmVWYWxpZGF0ZUV2ZW50cygpLGUuYWRkVmFsaWRhdGVFdmVudHMoKX0pKSx0aGlzLnZhbGlkYXRlT25SdWxlQ2hhbmdlJiZ0aGlzLnZhbGlkYXRlKChmdW5jdGlvbigpe30pKX19LGNvbXB1dGVkOnthdXRvTGFiZWxXaWR0aDpmdW5jdGlvbigpe2lmKCF0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIubGVuZ3RoKXJldHVybiAwO3ZhciBlPU1hdGgubWF4LmFwcGx5KE1hdGgsdGhpcy5wb3RlbnRpYWxMYWJlbFdpZHRoQXJyKTtyZXR1cm4gZT9lKyJweCI6IiJ9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2ZpZWxkczpbXSxwb3RlbnRpYWxMYWJlbFdpZHRoQXJyOltdfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kb24oImVsLmZvcm0uYWRkRmllbGQiLChmdW5jdGlvbih0KXt0JiZlLmZpZWxkcy5wdXNoKHQpfSkpLHRoaXMuJG9uKCJlbC5mb3JtLnJlbW92ZUZpZWxkIiwoZnVuY3Rpb24odCl7dC5wcm9wJiZlLmZpZWxkcy5zcGxpY2UoZS5maWVsZHMuaW5kZXhPZih0KSwxKX0pKX0sbWV0aG9kczp7cmVzZXRGaWVsZHM6ZnVuY3Rpb24oKXt0aGlzLm1vZGVsP3RoaXMuZmllbGRzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVzZXRGaWVsZCgpfSkpOmNvbnNvbGUud2FybigiW0VsZW1lbnQgV2Fybl1bRm9ybV1tb2RlbCBpcyByZXF1aXJlZCBmb3IgcmVzZXRGaWVsZHMgdG8gd29yay4iKX0sY2xlYXJWYWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXSx0PWUubGVuZ3RoPyJzdHJpbmciPT09dHlwZW9mIGU/dGhpcy5maWVsZHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZT09PXQucHJvcH0pKTp0aGlzLmZpZWxkcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmluZGV4T2YodC5wcm9wKT4tMX0pKTp0aGlzLmZpZWxkczt0LmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xlYXJWYWxpZGF0ZSgpfSkpfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKHRoaXMubW9kZWwpe3ZhciBuPXZvaWQgMDsiZnVuY3Rpb24iIT09dHlwZW9mIGUmJndpbmRvdy5Qcm9taXNlJiYobj1uZXcgd2luZG93LlByb21pc2UoKGZ1bmN0aW9uKHQsbil7ZT1mdW5jdGlvbihlKXtlP3QoZSk6bihlKX19KSkpO3ZhciBpPSEwLHI9MDswPT09dGhpcy5maWVsZHMubGVuZ3RoJiZlJiZlKCEwKTt2YXIgbz17fTtyZXR1cm4gdGhpcy5maWVsZHMuZm9yRWFjaCgoZnVuY3Rpb24obil7bi52YWxpZGF0ZSgiIiwoZnVuY3Rpb24obixhKXtuJiYoaT0hMSksbz1rdCgpKHt9LG8sYSksImZ1bmN0aW9uIj09PXR5cGVvZiBlJiYrK3I9PT10LmZpZWxkcy5sZW5ndGgmJmUoaSxvKX0pKX0pKSxufHx2b2lkIDB9Y29uc29sZS53YXJuKCJbRWxlbWVudCBXYXJuXVtGb3JtXW1vZGVsIGlzIHJlcXVpcmVkIGZvciB2YWxpZGF0ZSB0byB3b3JrISIpfSx2YWxpZGF0ZUZpZWxkOmZ1bmN0aW9uKGUsdCl7ZT1bXS5jb25jYXQoZSk7dmFyIG49dGhpcy5maWVsZHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMSE9PWUuaW5kZXhPZih0LnByb3ApfSkpO24ubGVuZ3RoP24uZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS52YWxpZGF0ZSgiIix0KX0pKTpjb25zb2xlLndhcm4oIltFbGVtZW50IFdhcm5dcGxlYXNlIHBhc3MgY29ycmVjdCBwcm9wcyEiKX0sZ2V0TGFiZWxXaWR0aEluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5pbmRleE9mKGUpO2lmKC0xPT09dCl0aHJvdyBuZXcgRXJyb3IoIltFbGVtZW50Rm9ybV11bnBlY3RlZCB3aWR0aCAiLGUpO3JldHVybiB0fSxyZWdpc3RlckxhYmVsV2lkdGg6ZnVuY3Rpb24oZSx0KXtpZihlJiZ0KXt2YXIgbj10aGlzLmdldExhYmVsV2lkdGhJbmRleCh0KTt0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIuc3BsaWNlKG4sMSxlKX1lbHNlIGUmJnRoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5wdXNoKGUpfSxkZXJlZ2lzdGVyTGFiZWxXaWR0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldExhYmVsV2lkdGhJbmRleChlKTt0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIuc3BsaWNlKHQsMSl9fX0sZWw9UXMsdGw9cyhlbCxacyxKcywhMSxudWxsLG51bGwsbnVsbCk7dGwub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlIjt2YXIgbmw9dGwuZXhwb3J0cztubC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KG5sLm5hbWUsbmwpfTt2YXIgaWw9bmwscmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1mb3JtLWl0ZW0iLGNsYXNzOlt7ImVsLWZvcm0taXRlbS0tZmVlZGJhY2siOmUuZWxGb3JtJiZlLmVsRm9ybS5zdGF0dXNJY29uLCJpcy1lcnJvciI6ImVycm9yIj09PWUudmFsaWRhdGVTdGF0ZSwiaXMtdmFsaWRhdGluZyI6InZhbGlkYXRpbmciPT09ZS52YWxpZGF0ZVN0YXRlLCJpcy1zdWNjZXNzIjoic3VjY2VzcyI9PT1lLnZhbGlkYXRlU3RhdGUsImlzLXJlcXVpcmVkIjplLmlzUmVxdWlyZWR8fGUucmVxdWlyZWQsImlzLW5vLWFzdGVyaXNrIjplLmVsRm9ybSYmZS5lbEZvcm0uaGlkZVJlcXVpcmVkQXN0ZXJpc2t9LGUuc2l6ZUNsYXNzPyJlbC1mb3JtLWl0ZW0tLSIrZS5zaXplQ2xhc3M6IiJdfSxbbigibGFiZWwtd3JhcCIse2F0dHJzOnsiaXMtYXV0by13aWR0aCI6ZS5sYWJlbFN0eWxlJiYiYXV0byI9PT1lLmxhYmVsU3R5bGUud2lkdGgsInVwZGF0ZS1hbGwiOiJhdXRvIj09PWUuZm9ybS5sYWJlbFdpZHRofX0sW2UubGFiZWx8fGUuJHNsb3RzLmxhYmVsP24oImxhYmVsIix7c3RhdGljQ2xhc3M6ImVsLWZvcm0taXRlbV9fbGFiZWwiLHN0eWxlOmUubGFiZWxTdHlsZSxhdHRyczp7Zm9yOmUubGFiZWxGb3J9fSxbZS5fdCgibGFiZWwiLFtlLl92KGUuX3MoZS5sYWJlbCtlLmZvcm0ubGFiZWxTdWZmaXgpKV0pXSwyKTplLl9lKCldKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZm9ybS1pdGVtX19jb250ZW50IixzdHlsZTplLmNvbnRlbnRTdHlsZX0sW2UuX3QoImRlZmF1bHQiKSxuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLXpvb20taW4tdG9wIn19LFsiZXJyb3IiPT09ZS52YWxpZGF0ZVN0YXRlJiZlLnNob3dNZXNzYWdlJiZlLmZvcm0uc2hvd01lc3NhZ2U/ZS5fdCgiZXJyb3IiLFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtZm9ybS1pdGVtX19lcnJvciIsY2xhc3M6eyJlbC1mb3JtLWl0ZW1fX2Vycm9yLS1pbmxpbmUiOiJib29sZWFuIj09PXR5cGVvZiBlLmlubGluZU1lc3NhZ2U/ZS5pbmxpbmVNZXNzYWdlOmUuZWxGb3JtJiZlLmVsRm9ybS5pbmxpbmVNZXNzYWdlfHwhMX19LFtlLl92KCJcbiAgICAgICAgICAiK2UuX3MoZS52YWxpZGF0ZU1lc3NhZ2UpKyJcbiAgICAgICAgIildKV0se2Vycm9yOmUudmFsaWRhdGVNZXNzYWdlfSk6ZS5fZSgpXSwyKV0sMildLDEpfSxvbD1bXTtybC5fd2l0aFN0cmlwcGVkPSEwO3ZhciBhbCxzbCxsbD1uKDQwKSxjbD1uLm4obGwpLHVsPXtwcm9wczp7aXNBdXRvV2lkdGg6Qm9vbGVhbix1cGRhdGVBbGw6Qm9vbGVhbn0saW5qZWN0OlsiZWxGb3JtIiwiZWxGb3JtSXRlbSJdLHJlbmRlcjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50c1swXSx0PXRoaXMuJHNsb3RzLmRlZmF1bHQ7aWYoIXQpcmV0dXJuIG51bGw7aWYodGhpcy5pc0F1dG9XaWR0aCl7dmFyIG49dGhpcy5lbEZvcm0uYXV0b0xhYmVsV2lkdGgsaT17fTtpZihuJiYiYXV0byIhPT1uKXt2YXIgcj1wYXJzZUludChuLDEwKS10aGlzLmNvbXB1dGVkV2lkdGg7ciYmKGkubWFyZ2luTGVmdD1yKyJweCIpfXJldHVybiBlKCJkaXYiLHtjbGFzczoiZWwtZm9ybS1pdGVtX19sYWJlbC13cmFwIixzdHlsZTppfSxbdF0pfXJldHVybiB0WzBdfSxtZXRob2RzOntnZXRMYWJlbFdpZHRoOmZ1bmN0aW9uKCl7aWYodGhpcy4kZWwmJnRoaXMuJGVsLmZpcnN0RWxlbWVudENoaWxkKXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRlbC5maXJzdEVsZW1lbnRDaGlsZCkud2lkdGg7cmV0dXJuIE1hdGguY2VpbChwYXJzZUZsb2F0KGUpKX1yZXR1cm4gMH0sdXBkYXRlTGFiZWxXaWR0aDpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToidXBkYXRlIjt0aGlzLiRzbG90cy5kZWZhdWx0JiZ0aGlzLmlzQXV0b1dpZHRoJiZ0aGlzLiRlbC5maXJzdEVsZW1lbnRDaGlsZCYmKCJ1cGRhdGUiPT09ZT90aGlzLmNvbXB1dGVkV2lkdGg9dGhpcy5nZXRMYWJlbFdpZHRoKCk6InJlbW92ZSI9PT1lJiZ0aGlzLmVsRm9ybS5kZXJlZ2lzdGVyTGFiZWxXaWR0aCh0aGlzLmNvbXB1dGVkV2lkdGgpKX19LHdhdGNoOntjb21wdXRlZFdpZHRoOmZ1bmN0aW9uKGUsdCl7dGhpcy51cGRhdGVBbGwmJih0aGlzLmVsRm9ybS5yZWdpc3RlckxhYmVsV2lkdGgoZSx0KSx0aGlzLmVsRm9ybUl0ZW0udXBkYXRlQ29tcHV0ZWRMYWJlbFdpZHRoKGUpKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y29tcHV0ZWRXaWR0aDowfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMudXBkYXRlTGFiZWxXaWR0aCgidXBkYXRlIil9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZUxhYmVsV2lkdGgoInVwZGF0ZSIpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy51cGRhdGVMYWJlbFdpZHRoKCJyZW1vdmUiKX19LGhsPXVsLGRsPXMoaGwsYWwsc2wsITEsbnVsbCxudWxsLG51bGwpO2RsLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZSI7dmFyIGZsPWRsLmV4cG9ydHMscGw9e25hbWU6IkVsRm9ybUl0ZW0iLGNvbXBvbmVudE5hbWU6IkVsRm9ybUl0ZW0iLG1peGluczpbRS5hXSxwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2VsRm9ybUl0ZW06dGhpc319LGluamVjdDpbImVsRm9ybSJdLHByb3BzOntsYWJlbDpTdHJpbmcsbGFiZWxXaWR0aDpTdHJpbmcscHJvcDpTdHJpbmcscmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OnZvaWQgMH0scnVsZXM6W09iamVjdCxBcnJheV0sZXJyb3I6U3RyaW5nLHZhbGlkYXRlU3RhdHVzOlN0cmluZyxmb3I6U3RyaW5nLGlubGluZU1lc3NhZ2U6e3R5cGU6W1N0cmluZyxCb29sZWFuXSxkZWZhdWx0OiIifSxzaG93TWVzc2FnZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LHNpemU6U3RyaW5nfSxjb21wb25lbnRzOntMYWJlbFdyYXA6Zmx9LHdhdGNoOntlcnJvcjp7aW1tZWRpYXRlOiEwLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy52YWxpZGF0ZU1lc3NhZ2U9ZSx0aGlzLnZhbGlkYXRlU3RhdGU9ZT8iZXJyb3IiOiIifX0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7dGhpcy52YWxpZGF0ZVN0YXRlPWV9fSxjb21wdXRlZDp7bGFiZWxGb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb3J8fHRoaXMucHJvcH0sbGFiZWxTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXt9O2lmKCJ0b3AiPT09dGhpcy5mb3JtLmxhYmVsUG9zaXRpb24pcmV0dXJuIGU7dmFyIHQ9dGhpcy5sYWJlbFdpZHRofHx0aGlzLmZvcm0ubGFiZWxXaWR0aDtyZXR1cm4gdCYmKGUud2lkdGg9dCksZX0sY29udGVudFN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLmxhYmVsO2lmKCJ0b3AiPT09dGhpcy5mb3JtLmxhYmVsUG9zaXRpb258fHRoaXMuZm9ybS5pbmxpbmUpcmV0dXJuIGU7aWYoIXQmJiF0aGlzLmxhYmVsV2lkdGgmJnRoaXMuaXNOZXN0ZWQpcmV0dXJuIGU7dmFyIG49dGhpcy5sYWJlbFdpZHRofHx0aGlzLmZvcm0ubGFiZWxXaWR0aDtyZXR1cm4iYXV0byI9PT1uPyJhdXRvIj09PXRoaXMubGFiZWxXaWR0aD9lLm1hcmdpbkxlZnQ9dGhpcy5jb21wdXRlZExhYmVsV2lkdGg6ImF1dG8iPT09dGhpcy5mb3JtLmxhYmVsV2lkdGgmJihlLm1hcmdpbkxlZnQ9dGhpcy5lbEZvcm0uYXV0b0xhYmVsV2lkdGgpOmUubWFyZ2luTGVmdD1uLGV9LGZvcm06ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQsdD1lLiRvcHRpb25zLmNvbXBvbmVudE5hbWU7d2hpbGUoIkVsRm9ybSIhPT10KSJFbEZvcm1JdGVtIj09PXQmJih0aGlzLmlzTmVzdGVkPSEwKSxlPWUuJHBhcmVudCx0PWUuJG9wdGlvbnMuY29tcG9uZW50TmFtZTtyZXR1cm4gZX0sZmllbGRWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9ybS5tb2RlbDtpZihlJiZ0aGlzLnByb3Ape3ZhciB0PXRoaXMucHJvcDtyZXR1cm4tMSE9PXQuaW5kZXhPZigiOiIpJiYodD10LnJlcGxhY2UoLzovLCIuIikpLE9iamVjdCh5WyJnZXRQcm9wQnlQYXRoIl0pKGUsdCwhMCkudn19LGlzUmVxdWlyZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFJ1bGVzKCksdD0hMTtyZXR1cm4gZSYmZS5sZW5ndGgmJmUuZXZlcnkoKGZ1bmN0aW9uKGUpe3JldHVybiFlLnJlcXVpcmVkfHwodD0hMCwhMSl9KSksdH0sX2Zvcm1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxGb3JtLnNpemV9LGVsRm9ybUl0ZW1TaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZXx8dGhpcy5fZm9ybVNpemV9LHNpemVDbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsRm9ybUl0ZW1TaXplfHwodGhpcy4kRUxFTUVOVHx8e30pLnNpemV9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3ZhbGlkYXRlU3RhdGU6IiIsdmFsaWRhdGVNZXNzYWdlOiIiLHZhbGlkYXRlRGlzYWJsZWQ6ITEsdmFsaWRhdG9yOnt9LGlzTmVzdGVkOiExLGNvbXB1dGVkTGFiZWxXaWR0aDoiIn19LG1ldGhvZHM6e3ZhbGlkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06eVsibm9vcCJdO3RoaXMudmFsaWRhdGVEaXNhYmxlZD0hMTt2YXIgaT10aGlzLmdldEZpbHRlcmVkUnVsZShlKTtpZigoIWl8fDA9PT1pLmxlbmd0aCkmJnZvaWQgMD09PXRoaXMucmVxdWlyZWQpcmV0dXJuIG4oKSwhMDt0aGlzLnZhbGlkYXRlU3RhdGU9InZhbGlkYXRpbmciO3ZhciByPXt9O2kmJmkubGVuZ3RoPjAmJmkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZGVsZXRlIGUudHJpZ2dlcn0pKSxyW3RoaXMucHJvcF09aTt2YXIgbz1uZXcgY2wuYShyKSxhPXt9O2FbdGhpcy5wcm9wXT10aGlzLmZpZWxkVmFsdWUsby52YWxpZGF0ZShhLHtmaXJzdEZpZWxkczohMH0sKGZ1bmN0aW9uKGUsaSl7dC52YWxpZGF0ZVN0YXRlPWU/ImVycm9yIjoic3VjY2VzcyIsdC52YWxpZGF0ZU1lc3NhZ2U9ZT9lWzBdLm1lc3NhZ2U6IiIsbih0LnZhbGlkYXRlTWVzc2FnZSxpKSx0LmVsRm9ybSYmdC5lbEZvcm0uJGVtaXQoInZhbGlkYXRlIix0LnByb3AsIWUsdC52YWxpZGF0ZU1lc3NhZ2V8fG51bGwpfSkpfSxjbGVhclZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy52YWxpZGF0ZVN0YXRlPSIiLHRoaXMudmFsaWRhdGVNZXNzYWdlPSIiLHRoaXMudmFsaWRhdGVEaXNhYmxlZD0hMX0scmVzZXRGaWVsZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy52YWxpZGF0ZVN0YXRlPSIiLHRoaXMudmFsaWRhdGVNZXNzYWdlPSIiO3ZhciB0PXRoaXMuZm9ybS5tb2RlbCxuPXRoaXMuZmllbGRWYWx1ZSxpPXRoaXMucHJvcDstMSE9PWkuaW5kZXhPZigiOiIpJiYoaT1pLnJlcGxhY2UoLzovLCIuIikpO3ZhciByPU9iamVjdCh5WyJnZXRQcm9wQnlQYXRoIl0pKHQsaSwhMCk7dGhpcy52YWxpZGF0ZURpc2FibGVkPSEwLEFycmF5LmlzQXJyYXkobik/ci5vW3Iua109W10uY29uY2F0KHRoaXMuaW5pdGlhbFZhbHVlKTpyLm9bci5rXT10aGlzLmluaXRpYWxWYWx1ZSx0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtlLnZhbGlkYXRlRGlzYWJsZWQ9ITF9KSksdGhpcy5icm9hZGNhc3QoIkVsVGltZVNlbGVjdCIsImZpZWxkUmVzZXQiLHRoaXMuaW5pdGlhbFZhbHVlKX0sZ2V0UnVsZXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvcm0ucnVsZXMsdD10aGlzLnJ1bGVzLG49dm9pZCAwIT09dGhpcy5yZXF1aXJlZD97cmVxdWlyZWQ6ISF0aGlzLnJlcXVpcmVkfTpbXSxpPU9iamVjdCh5WyJnZXRQcm9wQnlQYXRoIl0pKGUsdGhpcy5wcm9wfHwiIik7cmV0dXJuIGU9ZT9pLm9bdGhpcy5wcm9wfHwiIl18fGkudjpbXSxbXS5jb25jYXQodHx8ZXx8W10pLmNvbmNhdChuKX0sZ2V0RmlsdGVyZWRSdWxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0UnVsZXMoKTtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LnRyaWdnZXJ8fCIiPT09ZXx8KEFycmF5LmlzQXJyYXkodC50cmlnZ2VyKT90LnRyaWdnZXIuaW5kZXhPZihlKT4tMTp0LnRyaWdnZXI9PT1lKX0pKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBrdCgpKHt9LGUpfSkpfSxvbkZpZWxkQmx1cjpmdW5jdGlvbigpe3RoaXMudmFsaWRhdGUoImJsdXIiKX0sb25GaWVsZENoYW5nZTpmdW5jdGlvbigpe3RoaXMudmFsaWRhdGVEaXNhYmxlZD90aGlzLnZhbGlkYXRlRGlzYWJsZWQ9ITE6dGhpcy52YWxpZGF0ZSgiY2hhbmdlIil9LHVwZGF0ZUNvbXB1dGVkTGFiZWxXaWR0aDpmdW5jdGlvbihlKXt0aGlzLmNvbXB1dGVkTGFiZWxXaWR0aD1lP2UrInB4IjoiIn0sYWRkVmFsaWRhdGVFdmVudHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFJ1bGVzKCk7KGUubGVuZ3RofHx2b2lkIDAhPT10aGlzLnJlcXVpcmVkKSYmKHRoaXMuJG9uKCJlbC5mb3JtLmJsdXIiLHRoaXMub25GaWVsZEJsdXIpLHRoaXMuJG9uKCJlbC5mb3JtLmNoYW5nZSIsdGhpcy5vbkZpZWxkQ2hhbmdlKSl9LHJlbW92ZVZhbGlkYXRlRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy4kb2ZmKCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5wcm9wKXt0aGlzLmRpc3BhdGNoKCJFbEZvcm0iLCJlbC5mb3JtLmFkZEZpZWxkIixbdGhpc10pO3ZhciBlPXRoaXMuZmllbGRWYWx1ZTtBcnJheS5pc0FycmF5KGUpJiYoZT1bXS5jb25jYXQoZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpbml0aWFsVmFsdWUiLHt2YWx1ZTplfSksdGhpcy5hZGRWYWxpZGF0ZUV2ZW50cygpfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2goIkVsRm9ybSIsImVsLmZvcm0ucmVtb3ZlRmllbGQiLFt0aGlzXSl9fSxtbD1wbCxnbD1zKG1sLHJsLG9sLCExLG51bGwsbnVsbCxudWxsKTtnbC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZSI7dmFyIHZsPWdsLmV4cG9ydHM7dmwuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudCh2bC5uYW1lLHZsKX07dmFyIHlsPXZsLGJsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdGFic19fYWN0aXZlLWJhciIsY2xhc3M6ImlzLSIrZS5yb290VGFicy50YWJQb3NpdGlvbixzdHlsZTplLmJhclN0eWxlfSl9LHhsPVtdO2JsLl93aXRoU3RyaXBwZWQ9ITA7dmFyIF9sPXtuYW1lOiJUYWJCYXIiLHByb3BzOnt0YWJzOkFycmF5fSxpbmplY3Q6WyJyb290VGFicyJdLGNvbXB1dGVkOntiYXJTdHlsZTp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt9LG49MCxpPTAscj0tMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKT8id2lkdGgiOiJoZWlnaHQiLG89IndpZHRoIj09PXI/IngiOiJ5IixhPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKCB8XilbYS16XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSkpfTt0aGlzLnRhYnMuZXZlcnkoKGZ1bmN0aW9uKHQsbyl7dmFyIHM9T2JqZWN0KHlbImFycmF5RmluZCJdKShlLiRwYXJlbnQuJHJlZnMudGFic3x8W10sKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkLnJlcGxhY2UoInRhYi0iLCIiKT09PXQucGFuZU5hbWV9KSk7aWYoIXMpcmV0dXJuITE7aWYodC5hY3RpdmUpe2k9c1siY2xpZW50IithKHIpXTt2YXIgbD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKTtyZXR1cm4id2lkdGgiPT09ciYmZS50YWJzLmxlbmd0aD4xJiYoaS09cGFyc2VGbG9hdChsLnBhZGRpbmdMZWZ0KStwYXJzZUZsb2F0KGwucGFkZGluZ1JpZ2h0KSksIndpZHRoIj09PXImJihuKz1wYXJzZUZsb2F0KGwucGFkZGluZ0xlZnQpKSwhMX1yZXR1cm4gbis9c1siY2xpZW50IithKHIpXSwhMH0pKTt2YXIgcz0idHJhbnNsYXRlIithKG8pKyIoIituKyJweCkiO3JldHVybiB0W3JdPWkrInB4Iix0LnRyYW5zZm9ybT1zLHQubXNUcmFuc2Zvcm09cyx0LndlYmtpdFRyYW5zZm9ybT1zLHR9fX19LHdsPV9sLFNsPXMod2wsYmwseGwsITEsbnVsbCxudWxsLG51bGwpO1NsLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZSI7dmFyIENsPVNsLmV4cG9ydHM7ZnVuY3Rpb24ga2woKXt9dmFyIFRsLE1sLEVsPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKCB8XilbYS16XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSkpfSxJbD17bmFtZToiVGFiTmF2Iixjb21wb25lbnRzOntUYWJCYXI6Q2x9LGluamVjdDpbInJvb3RUYWJzIl0scHJvcHM6e3BhbmVzOkFycmF5LGN1cnJlbnROYW1lOlN0cmluZyxlZGl0YWJsZTpCb29sZWFuLG9uVGFiQ2xpY2s6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDprbH0sb25UYWJSZW1vdmU6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDprbH0sdHlwZTpTdHJpbmcsc3RyZXRjaDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Njcm9sbGFibGU6ITEsbmF2T2Zmc2V0OjAsaXNGb2N1czohMSxmb2N1c2FibGU6ITB9fSxjb21wdXRlZDp7bmF2U3R5bGU6ZnVuY3Rpb24oKXt2YXIgZT0tMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKT8iWCI6IlkiO3JldHVybnt0cmFuc2Zvcm06InRyYW5zbGF0ZSIrZSsiKC0iK3RoaXMubmF2T2Zmc2V0KyJweCkifX0sc2l6ZU5hbWU6ZnVuY3Rpb24oKXtyZXR1cm4tMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKT8id2lkdGgiOiJoZWlnaHQifX0sbWV0aG9kczp7c2Nyb2xsUHJldjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHJlZnMubmF2U2Nyb2xsWyJvZmZzZXQiK0VsKHRoaXMuc2l6ZU5hbWUpXSx0PXRoaXMubmF2T2Zmc2V0O2lmKHQpe3ZhciBuPXQ+ZT90LWU6MDt0aGlzLm5hdk9mZnNldD1ufX0sc2Nyb2xsTmV4dDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHJlZnMubmF2WyJvZmZzZXQiK0VsKHRoaXMuc2l6ZU5hbWUpXSx0PXRoaXMuJHJlZnMubmF2U2Nyb2xsWyJvZmZzZXQiK0VsKHRoaXMuc2l6ZU5hbWUpXSxuPXRoaXMubmF2T2Zmc2V0O2lmKCEoZS1uPD10KSl7dmFyIGk9ZS1uPjIqdD9uK3Q6ZS10O3RoaXMubmF2T2Zmc2V0PWl9fSxzY3JvbGxUb0FjdGl2ZVRhYjpmdW5jdGlvbigpe2lmKHRoaXMuc2Nyb2xsYWJsZSl7dmFyIGU9dGhpcy4kcmVmcy5uYXYsdD10aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCIuaXMtYWN0aXZlIik7aWYodCl7dmFyIG49dGhpcy4kcmVmcy5uYXZTY3JvbGwsaT0tMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9aT9lLm9mZnNldFdpZHRoLW8ud2lkdGg6ZS5vZmZzZXRIZWlnaHQtby5oZWlnaHQscz10aGlzLm5hdk9mZnNldCxsPXM7aT8oci5sZWZ0PG8ubGVmdCYmKGw9cy0oby5sZWZ0LXIubGVmdCkpLHIucmlnaHQ+by5yaWdodCYmKGw9cytyLnJpZ2h0LW8ucmlnaHQpKTooci50b3A8by50b3AmJihsPXMtKG8udG9wLXIudG9wKSksci5ib3R0b20+by5ib3R0b20mJihsPXMrKHIuYm90dG9tLW8uYm90dG9tKSkpLGw9TWF0aC5tYXgobCwwKSx0aGlzLm5hdk9mZnNldD1NYXRoLm1pbihsLGEpfX19LHVwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuJHJlZnMubmF2KXt2YXIgZT10aGlzLnNpemVOYW1lLHQ9dGhpcy4kcmVmcy5uYXZbIm9mZnNldCIrRWwoZSldLG49dGhpcy4kcmVmcy5uYXZTY3JvbGxbIm9mZnNldCIrRWwoZSldLGk9dGhpcy5uYXZPZmZzZXQ7aWYobjx0KXt2YXIgcj10aGlzLm5hdk9mZnNldDt0aGlzLnNjcm9sbGFibGU9dGhpcy5zY3JvbGxhYmxlfHx7fSx0aGlzLnNjcm9sbGFibGUucHJldj1yLHRoaXMuc2Nyb2xsYWJsZS5uZXh0PXIrbjx0LHQtcjxuJiYodGhpcy5uYXZPZmZzZXQ9dC1uKX1lbHNlIHRoaXMuc2Nyb2xsYWJsZT0hMSxpPjAmJih0aGlzLm5hdk9mZnNldD0wKX19LGNoYW5nZVRhYjpmdW5jdGlvbihlKXt2YXIgdD1lLmtleUNvZGUsbj12b2lkIDAsaT12b2lkIDAscj12b2lkIDA7LTEhPT1bMzcsMzgsMzksNDBdLmluZGV4T2YodCkmJihyPWUuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT10YWJdIiksaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHIsZS50YXJnZXQpLG49Mzc9PT10fHwzOD09PXQ/MD09PWk/ci5sZW5ndGgtMTppLTE6aTxyLmxlbmd0aC0xP2krMTowLHJbbl0uZm9jdXMoKSxyW25dLmNsaWNrKCksdGhpcy5zZXRGb2N1cygpKX0sc2V0Rm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmZvY3VzYWJsZSYmKHRoaXMuaXNGb2N1cz0hMCl9LHJlbW92ZUZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5pc0ZvY3VzPSExfSx2aXNpYmlsaXR5Q2hhbmdlSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7ImhpZGRlbiI9PT10P3RoaXMuZm9jdXNhYmxlPSExOiJ2aXNpYmxlIj09PXQmJnNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5mb2N1c2FibGU9ITB9KSw1MCl9LHdpbmRvd0JsdXJIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2FibGU9ITF9LHdpbmRvd0ZvY3VzSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmZvY3VzYWJsZT0hMH0pLDUwKX19LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnVwZGF0ZSgpfSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMudHlwZSxpPXRoaXMucGFuZXMscj10aGlzLmVkaXRhYmxlLG89dGhpcy5zdHJldGNoLGE9dGhpcy5vblRhYkNsaWNrLHM9dGhpcy5vblRhYlJlbW92ZSxsPXRoaXMubmF2U3R5bGUsYz10aGlzLnNjcm9sbGFibGUsdT10aGlzLnNjcm9sbE5leHQsaD10aGlzLnNjcm9sbFByZXYsZD10aGlzLmNoYW5nZVRhYixmPXRoaXMuc2V0Rm9jdXMscD10aGlzLnJlbW92ZUZvY3VzLG09Yz9bZSgic3BhbiIse2NsYXNzOlsiZWwtdGFic19fbmF2LXByZXYiLGMucHJldj8iIjoiaXMtZGlzYWJsZWQiXSxvbjp7Y2xpY2s6aH19LFtlKCJpIix7Y2xhc3M6ImVsLWljb24tYXJyb3ctbGVmdCJ9KV0pLGUoInNwYW4iLHtjbGFzczpbImVsLXRhYnNfX25hdi1uZXh0IixjLm5leHQ/IiI6ImlzLWRpc2FibGVkIl0sb246e2NsaWNrOnV9fSxbZSgiaSIse2NsYXNzOiJlbC1pY29uLWFycm93LXJpZ2h0In0pXSldOm51bGwsZz10aGlzLl9sKGksKGZ1bmN0aW9uKG4saSl7dmFyIG8sbD1uLm5hbWV8fG4uaW5kZXh8fGksYz1uLmlzQ2xvc2FibGV8fHI7bi5pbmRleD0iIitpO3ZhciB1PWM/ZSgic3BhbiIse2NsYXNzOiJlbC1pY29uLWNsb3NlIixvbjp7Y2xpY2s6ZnVuY3Rpb24oZSl7cyhuLGUpfX19KTpudWxsLGg9bi4kc2xvdHMubGFiZWx8fG4ubGFiZWwsZD1uLmFjdGl2ZT8wOi0xO3JldHVybiBlKCJkaXYiLHtjbGFzczoobz17ImVsLXRhYnNfX2l0ZW0iOiEwfSxvWyJpcy0iK3Qucm9vdFRhYnMudGFiUG9zaXRpb25dPSEwLG9bImlzLWFjdGl2ZSJdPW4uYWN0aXZlLG9bImlzLWRpc2FibGVkIl09bi5kaXNhYmxlZCxvWyJpcy1jbG9zYWJsZSJdPWMsb1siaXMtZm9jdXMiXT10LmlzRm9jdXMsbyksYXR0cnM6e2lkOiJ0YWItIitsLCJhcmlhLWNvbnRyb2xzIjoicGFuZS0iK2wscm9sZToidGFiIiwiYXJpYS1zZWxlY3RlZCI6bi5hY3RpdmUsdGFiaW5kZXg6ZH0sa2V5OiJ0YWItIitsLHJlZjoidGFicyIscmVmSW5Gb3I6ITAsb246e2ZvY3VzOmZ1bmN0aW9uKCl7ZigpfSxibHVyOmZ1bmN0aW9uKCl7cCgpfSxjbGljazpmdW5jdGlvbihlKXtwKCksYShuLGwsZSl9LGtleWRvd246ZnVuY3Rpb24oZSl7IWN8fDQ2IT09ZS5rZXlDb2RlJiY4IT09ZS5rZXlDb2RlfHxzKG4sZSl9fX0sW2gsdV0pfSkpO3JldHVybiBlKCJkaXYiLHtjbGFzczpbImVsLXRhYnNfX25hdi13cmFwIixjPyJpcy1zY3JvbGxhYmxlIjoiIiwiaXMtIit0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uXX0sW20sZSgiZGl2Iix7Y2xhc3M6WyJlbC10YWJzX19uYXYtc2Nyb2xsIl0scmVmOiJuYXZTY3JvbGwifSxbZSgiZGl2Iix7Y2xhc3M6WyJlbC10YWJzX19uYXYiLCJpcy0iK3RoaXMucm9vdFRhYnMudGFiUG9zaXRpb24sbyYmLTEhPT1bInRvcCIsImJvdHRvbSJdLmluZGV4T2YodGhpcy5yb290VGFicy50YWJQb3NpdGlvbik/ImlzLXN0cmV0Y2giOiIiXSxyZWY6Im5hdiIsc3R5bGU6bCxhdHRyczp7cm9sZToidGFibGlzdCJ9LG9uOntrZXlkb3duOmR9fSxbbj9udWxsOmUoInRhYi1iYXIiLHthdHRyczp7dGFiczppfX0pLGddKV0pXSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO09iamVjdChlaVsiYWRkUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kZWwsdGhpcy51cGRhdGUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMudmlzaWJpbGl0eUNoYW5nZUhhbmRsZXIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLndpbmRvd0JsdXJIYW5kbGVyKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMud2luZG93Rm9jdXNIYW5kbGVyKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2Uuc2Nyb2xsVG9BY3RpdmVUYWIoKX0pLDApfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy4kZWwmJnRoaXMudXBkYXRlJiZPYmplY3QoZWlbInJlbW92ZVJlc2l6ZUxpc3RlbmVyIl0pKHRoaXMuJGVsLHRoaXMudXBkYXRlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLnZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy53aW5kb3dCbHVySGFuZGxlciksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLndpbmRvd0ZvY3VzSGFuZGxlcil9fSxEbD1JbCxBbD1zKERsLFRsLE1sLCExLG51bGwsbnVsbCxudWxsKTtBbC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdGFicy9zcmMvdGFiLW5hdi52dWUiO3ZhciBPbCxQbCxMbD1BbC5leHBvcnRzLE5sPXtuYW1lOiJFbFRhYnMiLGNvbXBvbmVudHM6e1RhYk5hdjpMbH0scHJvcHM6e3R5cGU6U3RyaW5nLGFjdGl2ZU5hbWU6U3RyaW5nLGNsb3NhYmxlOkJvb2xlYW4sYWRkYWJsZTpCb29sZWFuLHZhbHVlOnt9LGVkaXRhYmxlOkJvb2xlYW4sdGFiUG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InRvcCJ9LGJlZm9yZUxlYXZlOkZ1bmN0aW9uLHN0cmV0Y2g6Qm9vbGVhbn0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntyb290VGFiczp0aGlzfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjdXJyZW50TmFtZTp0aGlzLnZhbHVlfHx0aGlzLmFjdGl2ZU5hbWUscGFuZXM6W119fSx3YXRjaDp7YWN0aXZlTmFtZTpmdW5jdGlvbihlKXt0aGlzLnNldEN1cnJlbnROYW1lKGUpfSx2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnNldEN1cnJlbnROYW1lKGUpfSxjdXJyZW50TmFtZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuJHJlZnMubmF2JiZ0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXt0LiRyZWZzLm5hdi4kbmV4dFRpY2soKGZ1bmN0aW9uKGUpe3QuJHJlZnMubmF2LnNjcm9sbFRvQWN0aXZlVGFiKCl9KSl9KSl9fSxtZXRob2RzOntjYWxjUGFuZUluc3RhbmNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKHRoaXMuJHNsb3RzLmRlZmF1bHQpe3ZhciBuPXRoaXMuJHNsb3RzLmRlZmF1bHQuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS50YWcmJmUuY29tcG9uZW50T3B0aW9ucyYmIkVsVGFiUGFuZSI9PT1lLmNvbXBvbmVudE9wdGlvbnMuQ3Rvci5vcHRpb25zLm5hbWV9KSksaT1uLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jb21wb25lbnRJbnN0YW5jZTtyZXR1cm4gdH0pKSxyPSEoaS5sZW5ndGg9PT10aGlzLnBhbmVzLmxlbmd0aCYmaS5ldmVyeSgoZnVuY3Rpb24odCxuKXtyZXR1cm4gdD09PWUucGFuZXNbbl19KSkpOyh0fHxyKSYmKHRoaXMucGFuZXM9aSl9ZWxzZSAwIT09dGhpcy5wYW5lcy5sZW5ndGgmJih0aGlzLnBhbmVzPVtdKX0saGFuZGxlVGFiQ2xpY2s6ZnVuY3Rpb24oZSx0LG4pe2UuZGlzYWJsZWR8fCh0aGlzLnNldEN1cnJlbnROYW1lKHQpLHRoaXMuJGVtaXQoInRhYi1jbGljayIsZSxuKSl9LGhhbmRsZVRhYlJlbW92ZTpmdW5jdGlvbihlLHQpe2UuZGlzYWJsZWR8fCh0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuJGVtaXQoImVkaXQiLGUubmFtZSwicmVtb3ZlIiksdGhpcy4kZW1pdCgidGFiLXJlbW92ZSIsZS5uYW1lKSl9LGhhbmRsZVRhYkFkZDpmdW5jdGlvbigpe3RoaXMuJGVtaXQoImVkaXQiLG51bGwsImFkZCIpLHRoaXMuJGVtaXQoInRhYi1hZGQiKX0sc2V0Q3VycmVudE5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWZ1bmN0aW9uKCl7dC5jdXJyZW50TmFtZT1lLHQuJGVtaXQoImlucHV0IixlKX07aWYodGhpcy5jdXJyZW50TmFtZSE9PWUmJnRoaXMuYmVmb3JlTGVhdmUpe3ZhciBpPXRoaXMuYmVmb3JlTGVhdmUoZSx0aGlzLmN1cnJlbnROYW1lKTtpJiZpLnRoZW4/aS50aGVuKChmdW5jdGlvbigpe24oKSx0LiRyZWZzLm5hdiYmdC4kcmVmcy5uYXYucmVtb3ZlRm9jdXMoKX0pLChmdW5jdGlvbigpe30pKTohMSE9PWkmJm4oKX1lbHNlIG4oKX19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMudHlwZSxpPXRoaXMuaGFuZGxlVGFiQ2xpY2sscj10aGlzLmhhbmRsZVRhYlJlbW92ZSxvPXRoaXMuaGFuZGxlVGFiQWRkLGE9dGhpcy5jdXJyZW50TmFtZSxzPXRoaXMucGFuZXMsbD10aGlzLmVkaXRhYmxlLGM9dGhpcy5hZGRhYmxlLHU9dGhpcy50YWJQb3NpdGlvbixoPXRoaXMuc3RyZXRjaCxkPWx8fGM/ZSgic3BhbiIse2NsYXNzOiJlbC10YWJzX19uZXctdGFiIixvbjp7Y2xpY2s6byxrZXlkb3duOmZ1bmN0aW9uKGUpezEzPT09ZS5rZXlDb2RlJiZvKCl9fSxhdHRyczp7dGFiaW5kZXg6IjAifX0sW2UoImkiLHtjbGFzczoiZWwtaWNvbi1wbHVzIn0pXSk6bnVsbCxmPXtwcm9wczp7Y3VycmVudE5hbWU6YSxvblRhYkNsaWNrOmksb25UYWJSZW1vdmU6cixlZGl0YWJsZTpsLHR5cGU6bixwYW5lczpzLHN0cmV0Y2g6aH0scmVmOiJuYXYifSxwPWUoImRpdiIse2NsYXNzOlsiZWwtdGFic19faGVhZGVyIiwiaXMtIit1XX0sW2QsZSgidGFiLW5hdiIsZildKSxtPWUoImRpdiIse2NsYXNzOiJlbC10YWJzX19jb250ZW50In0sW3RoaXMuJHNsb3RzLmRlZmF1bHRdKTtyZXR1cm4gZSgiZGl2Iix7Y2xhc3M6KHQ9eyJlbC10YWJzIjohMCwiZWwtdGFicy0tY2FyZCI6ImNhcmQiPT09bn0sdFsiZWwtdGFicy0tIit1XT0hMCx0WyJlbC10YWJzLS1ib3JkZXItY2FyZCJdPSJib3JkZXItY2FyZCI9PT1uLHQpfSxbImJvdHRvbSIhPT11P1twLG1dOlttLHBdXSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnROYW1lfHx0aGlzLnNldEN1cnJlbnROYW1lKCIwIiksdGhpcy4kb24oInRhYi1uYXYtdXBkYXRlIix0aGlzLmNhbGNQYW5lSW5zdGFuY2VzLmJpbmQobnVsbCwhMCkpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5jYWxjUGFuZUluc3RhbmNlcygpfSx1cGRhdGVkOmZ1bmN0aW9uKCl7dGhpcy5jYWxjUGFuZUluc3RhbmNlcygpfX0sUmw9TmwsJGw9cyhSbCxPbCxQbCwhMSxudWxsLG51bGwsbnVsbCk7JGwub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3RhYnMvc3JjL3RhYnMudnVlIjt2YXIgemw9JGwuZXhwb3J0czt6bC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KHpsLm5hbWUsemwpfTt2YXIgQmw9emwsRmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIWUubGF6eXx8ZS5sb2FkZWR8fGUuYWN0aXZlP24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUuYWN0aXZlLGV4cHJlc3Npb246ImFjdGl2ZSJ9XSxzdGF0aWNDbGFzczoiZWwtdGFiLXBhbmUiLGF0dHJzOntyb2xlOiJ0YWJwYW5lbCIsImFyaWEtaGlkZGVuIjohZS5hY3RpdmUsaWQ6InBhbmUtIitlLnBhbmVOYW1lLCJhcmlhLWxhYmVsbGVkYnkiOiJ0YWItIitlLnBhbmVOYW1lfX0sW2UuX3QoImRlZmF1bHQiKV0sMik6ZS5fZSgpfSxWbD1bXTtGbC5fd2l0aFN0cmlwcGVkPSEwO3ZhciBqbD17bmFtZToiRWxUYWJQYW5lIixjb21wb25lbnROYW1lOiJFbFRhYlBhbmUiLHByb3BzOntsYWJlbDpTdHJpbmcsbGFiZWxDb250ZW50OkZ1bmN0aW9uLG5hbWU6U3RyaW5nLGNsb3NhYmxlOkJvb2xlYW4sZGlzYWJsZWQ6Qm9vbGVhbixsYXp5OkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5kZXg6bnVsbCxsb2FkZWQ6ITF9fSxjb21wdXRlZDp7aXNDbG9zYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb3NhYmxlfHx0aGlzLiRwYXJlbnQuY2xvc2FibGV9LGFjdGl2ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHBhcmVudC5jdXJyZW50TmFtZT09PSh0aGlzLm5hbWV8fHRoaXMuaW5kZXgpO3JldHVybiBlJiYodGhpcy5sb2FkZWQ9ITApLGV9LHBhbmVOYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZXx8dGhpcy5pbmRleH19LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQuJGVtaXQoInRhYi1uYXYtdXBkYXRlIil9fSxIbD1qbCxXbD1zKEhsLEZsLFZsLCExLG51bGwsbnVsbCxudWxsKTtXbC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlIjt2YXIgR2w9V2wuZXhwb3J0cztHbC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KEdsLm5hbWUsR2wpfTt2YXIgVWwscWwsWWw9R2wsWGw9e25hbWU6IkVsVGFnIixwcm9wczp7dGV4dDpTdHJpbmcsY2xvc2FibGU6Qm9vbGVhbix0eXBlOlN0cmluZyxoaXQ6Qm9vbGVhbixkaXNhYmxlVHJhbnNpdGlvbnM6Qm9vbGVhbixjb2xvcjpTdHJpbmcsc2l6ZTpTdHJpbmcsZWZmZWN0Ont0eXBlOlN0cmluZyxkZWZhdWx0OiJsaWdodCIsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybi0xIT09WyJkYXJrIiwibGlnaHQiLCJwbGFpbiJdLmluZGV4T2YoZSl9fX0sbWV0aG9kczp7aGFuZGxlQ2xvc2U6ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLiRlbWl0KCJjbG9zZSIsZSl9LGhhbmRsZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuJGVtaXQoImNsaWNrIixlKX19LGNvbXB1dGVkOnt0YWdTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2l6ZXx8KHRoaXMuJEVMRU1FTlR8fHt9KS5zaXplfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMudHlwZSxuPXRoaXMudGFnU2l6ZSxpPXRoaXMuaGl0LHI9dGhpcy5lZmZlY3Qsbz1bImVsLXRhZyIsdD8iZWwtdGFnLS0iK3Q6IiIsbj8iZWwtdGFnLS0iK246IiIscj8iZWwtdGFnLS0iK3I6IiIsaSYmImlzLWhpdCJdLGE9ZSgic3BhbiIse2NsYXNzOm8sc3R5bGU6e2JhY2tncm91bmRDb2xvcjp0aGlzLmNvbG9yfSxvbjp7Y2xpY2s6dGhpcy5oYW5kbGVDbGlja319LFt0aGlzLiRzbG90cy5kZWZhdWx0LHRoaXMuY2xvc2FibGUmJmUoImkiLHtjbGFzczoiZWwtdGFnX19jbG9zZSBlbC1pY29uLWNsb3NlIixvbjp7Y2xpY2s6dGhpcy5oYW5kbGVDbG9zZX19KV0pO3JldHVybiB0aGlzLmRpc2FibGVUcmFuc2l0aW9ucz9hOmUoInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtem9vbS1pbi1jZW50ZXIifX0sW2FdKX19LEtsPVhsLFpsPXMoS2wsVWwscWwsITEsbnVsbCxudWxsLG51bGwpO1psLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90YWcvc3JjL3RhZy52dWUiO3ZhciBKbD1abC5leHBvcnRzO0psLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoSmwubmFtZSxKbCl9O3ZhciBRbD1KbCxlYz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyZWUiLGNsYXNzOnsiZWwtdHJlZS0taGlnaGxpZ2h0LWN1cnJlbnQiOmUuaGlnaGxpZ2h0Q3VycmVudCwiaXMtZHJhZ2dpbmciOiEhZS5kcmFnU3RhdGUuZHJhZ2dpbmdOb2RlLCJpcy1kcm9wLW5vdC1hbGxvdyI6IWUuZHJhZ1N0YXRlLmFsbG93RHJvcCwiaXMtZHJvcC1pbm5lciI6ImlubmVyIj09PWUuZHJhZ1N0YXRlLmRyb3BUeXBlfSxhdHRyczp7cm9sZToidHJlZSJ9fSxbZS5fbChlLnJvb3QuY2hpbGROb2RlcywoZnVuY3Rpb24odCl7cmV0dXJuIG4oImVsLXRyZWUtbm9kZSIse2tleTplLmdldE5vZGVLZXkodCksYXR0cnM6e25vZGU6dCxwcm9wczplLnByb3BzLCJyZW5kZXItYWZ0ZXItZXhwYW5kIjplLnJlbmRlckFmdGVyRXhwYW5kLCJzaG93LWNoZWNrYm94IjplLnNob3dDaGVja2JveCwicmVuZGVyLWNvbnRlbnQiOmUucmVuZGVyQ29udGVudH0sb246eyJub2RlLWV4cGFuZCI6ZS5oYW5kbGVOb2RlRXhwYW5kfX0pfSkpLGUuaXNFbXB0eT9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtdHJlZV9fZW1wdHktYmxvY2sifSxbbigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC10cmVlX19lbXB0eS10ZXh0In0sW2UuX3YoZS5fcyhlLmVtcHR5VGV4dCkpXSldKTplLl9lKCksbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5kcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3IsZXhwcmVzc2lvbjoiZHJhZ1N0YXRlLnNob3dEcm9wSW5kaWNhdG9yIn1dLHJlZjoiZHJvcEluZGljYXRvciIsc3RhdGljQ2xhc3M6ImVsLXRyZWVfX2Ryb3AtaW5kaWNhdG9yIn0pXSwyKX0sdGM9W107ZWMuX3dpdGhTdHJpcHBlZD0hMDt2YXIgbmM9IiR0cmVlTm9kZUlkIixpYz1mdW5jdGlvbihlLHQpe3QmJiF0W25jXSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbmMse3ZhbHVlOmUuaWQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITEsd3JpdGFibGU6ITF9KX0scmM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT90W2VdOnRbbmNdfSxvYz1mdW5jdGlvbihlLHQpe3ZhciBuPWU7d2hpbGUobiYmIkJPRFkiIT09bi50YWdOYW1lKXtpZihuLl9fdnVlX18mJm4uX192dWVfXy4kb3B0aW9ucy5uYW1lPT09dClyZXR1cm4gbi5fX3Z1ZV9fO249bi5wYXJlbnROb2RlfXJldHVybiBudWxsfSxhYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtpLmVudW1lcmFibGU9aS5lbnVtZXJhYmxlfHwhMSxpLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGkua2V5LGkpfX1yZXR1cm4gZnVuY3Rpb24odCxuLGkpe3JldHVybiBuJiZlKHQucHJvdG90eXBlLG4pLGkmJmUodCxpKSx0fX0oKTtmdW5jdGlvbiBzYyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBsYz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ITAsbj0hMCxpPSEwLHI9MCxvPWUubGVuZ3RoO3I8bztyKyspe3ZhciBhPWVbcl07KCEwIT09YS5jaGVja2VkfHxhLmluZGV0ZXJtaW5hdGUpJiYodD0hMSxhLmRpc2FibGVkfHwoaT0hMSkpLCghMSE9PWEuY2hlY2tlZHx8YS5pbmRldGVybWluYXRlKSYmKG49ITEpfXJldHVybnthbGw6dCxub25lOm4sYWxsV2l0aG91dERpc2FibGU6aSxoYWxmOiF0JiYhbn19LGNjPWZ1bmN0aW9uIGUodCl7aWYoMCE9PXQuY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBuPWxjKHQuY2hpbGROb2RlcyksaT1uLmFsbCxyPW4ubm9uZSxvPW4uaGFsZjtpPyh0LmNoZWNrZWQ9ITAsdC5pbmRldGVybWluYXRlPSExKTpvPyh0LmNoZWNrZWQ9ITEsdC5pbmRldGVybWluYXRlPSEwKTpyJiYodC5jaGVja2VkPSExLHQuaW5kZXRlcm1pbmF0ZT0hMSk7dmFyIGE9dC5wYXJlbnQ7YSYmMCE9PWEubGV2ZWwmJih0LnN0b3JlLmNoZWNrU3RyaWN0bHl8fGUoYSkpfX0sdWM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0b3JlLnByb3BzLGk9ZS5kYXRhfHx7fSxyPW5bdF07aWYoImZ1bmN0aW9uIj09PXR5cGVvZiByKXJldHVybiByKGksZSk7aWYoInN0cmluZyI9PT10eXBlb2YgcilyZXR1cm4gaVtyXTtpZigidW5kZWZpbmVkIj09PXR5cGVvZiByKXt2YXIgbz1pW3RdO3JldHVybiB2b2lkIDA9PT1vPyIiOm99fSxoYz0wLGRjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtmb3IodmFyIG4gaW4gc2ModGhpcyxlKSx0aGlzLmlkPWhjKyssdGhpcy50ZXh0PW51bGwsdGhpcy5jaGVja2VkPSExLHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmRhdGE9bnVsbCx0aGlzLmV4cGFuZGVkPSExLHRoaXMucGFyZW50PW51bGwsdGhpcy52aXNpYmxlPSEwLHRoaXMuaXNDdXJyZW50PSExLHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXNbbl09dFtuXSk7dGhpcy5sZXZlbD0wLHRoaXMubG9hZGVkPSExLHRoaXMuY2hpbGROb2Rlcz1bXSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5wYXJlbnQmJih0aGlzLmxldmVsPXRoaXMucGFyZW50LmxldmVsKzEpO3ZhciBpPXRoaXMuc3RvcmU7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJbTm9kZV1zdG9yZSBpcyByZXF1aXJlZCEiKTtpLnJlZ2lzdGVyTm9kZSh0aGlzKTt2YXIgcj1pLnByb3BzO2lmKHImJiJ1bmRlZmluZWQiIT09dHlwZW9mIHIuaXNMZWFmKXt2YXIgbz11Yyh0aGlzLCJpc0xlYWYiKTsiYm9vbGVhbiI9PT10eXBlb2YgbyYmKHRoaXMuaXNMZWFmQnlVc2VyPW8pfWlmKCEwIT09aS5sYXp5JiZ0aGlzLmRhdGE/KHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpLGkuZGVmYXVsdEV4cGFuZEFsbCYmKHRoaXMuZXhwYW5kZWQ9ITApKTp0aGlzLmxldmVsPjAmJmkubGF6eSYmaS5kZWZhdWx0RXhwYW5kQWxsJiZ0aGlzLmV4cGFuZCgpLEFycmF5LmlzQXJyYXkodGhpcy5kYXRhKXx8aWModGhpcyx0aGlzLmRhdGEpLHRoaXMuZGF0YSl7dmFyIGE9aS5kZWZhdWx0RXhwYW5kZWRLZXlzLHM9aS5rZXk7cyYmYSYmLTEhPT1hLmluZGV4T2YodGhpcy5rZXkpJiZ0aGlzLmV4cGFuZChudWxsLGkuYXV0b0V4cGFuZFBhcmVudCkscyYmdm9pZCAwIT09aS5jdXJyZW50Tm9kZUtleSYmdGhpcy5rZXk9PT1pLmN1cnJlbnROb2RlS2V5JiYoaS5jdXJyZW50Tm9kZT10aGlzLGkuY3VycmVudE5vZGUuaXNDdXJyZW50PSEwKSxpLmxhenkmJmkuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGUodGhpcyksdGhpcy51cGRhdGVMZWFmU3RhdGUoKX19cmV0dXJuIGUucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oZSl7QXJyYXkuaXNBcnJheShlKXx8aWModGhpcyxlKSx0aGlzLmRhdGE9ZSx0aGlzLmNoaWxkTm9kZXM9W107dmFyIHQ9dm9pZCAwO3Q9MD09PXRoaXMubGV2ZWwmJnRoaXMuZGF0YSBpbnN0YW5jZW9mIEFycmF5P3RoaXMuZGF0YTp1Yyh0aGlzLCJjaGlsZHJlbiIpfHxbXTtmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTtuKyspdGhpcy5pbnNlcnRDaGlsZCh7ZGF0YTp0W25dfSl9LGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKGUpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sbj1mdW5jdGlvbiBuKGkpe2Zvcih2YXIgcj1pLmNoaWxkTm9kZXN8fFtdLG89ITEsYT0wLHM9ci5sZW5ndGg7YTxzO2ErKyl7dmFyIGw9clthXTtpZihsPT09ZXx8dCYmbihsKSl7bz0hMDticmVha319cmV0dXJuIG99O3JldHVybiBuKHRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudDtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfSxlLnByb3RvdHlwZS5pbnNlcnRDaGlsZD1mdW5jdGlvbih0LG4saSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpbnNlcnRDaGlsZCBlcnJvcjogY2hpbGQgaXMgcmVxdWlyZWQuIik7aWYoISh0IGluc3RhbmNlb2YgZSkpe2lmKCFpKXt2YXIgcj10aGlzLmdldENoaWxkcmVuKCEwKTstMT09PXIuaW5kZXhPZih0LmRhdGEpJiYoInVuZGVmaW5lZCI9PT10eXBlb2Ygbnx8bjwwP3IucHVzaCh0LmRhdGEpOnIuc3BsaWNlKG4sMCx0LmRhdGEpKX1rdCgpKHQse3BhcmVudDp0aGlzLHN0b3JlOnRoaXMuc3RvcmV9KSx0PW5ldyBlKHQpfXQubGV2ZWw9dGhpcy5sZXZlbCsxLCJ1bmRlZmluZWQiPT09dHlwZW9mIG58fG48MD90aGlzLmNoaWxkTm9kZXMucHVzaCh0KTp0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKG4sMCx0KSx0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpfSxlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDA7dCYmKG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCkpLHRoaXMuaW5zZXJ0Q2hpbGQoZSxuKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj12b2lkIDA7dCYmKG49dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YodCksLTEhPT1uJiYobis9MSkpLHRoaXMuaW5zZXJ0Q2hpbGQoZSxuKX0sZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRDaGlsZHJlbigpfHxbXSxuPXQuaW5kZXhPZihlLmRhdGEpO24+LTEmJnQuc3BsaWNlKG4sMSk7dmFyIGk9dGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoZSk7aT4tMSYmKHRoaXMuc3RvcmUmJnRoaXMuc3RvcmUuZGVyZWdpc3Rlck5vZGUoZSksZS5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGksMSkpLHRoaXMudXBkYXRlTGVhZlN0YXRlKCl9LGUucHJvdG90eXBlLnJlbW92ZUNoaWxkQnlEYXRhPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1udWxsLG49MDtuPHRoaXMuY2hpbGROb2Rlcy5sZW5ndGg7bisrKWlmKHRoaXMuY2hpbGROb2Rlc1tuXS5kYXRhPT09ZSl7dD10aGlzLmNoaWxkTm9kZXNbbl07YnJlYWt9dCYmdGhpcy5yZW1vdmVDaGlsZCh0KX0sZS5wcm90b3R5cGUuZXhwYW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7aWYodCl7dmFyIGk9bi5wYXJlbnQ7d2hpbGUoaS5sZXZlbD4wKWkuZXhwYW5kZWQ9ITAsaT1pLnBhcmVudH1uLmV4cGFuZGVkPSEwLGUmJmUoKX07dGhpcy5zaG91bGRMb2FkRGF0YSgpP3RoaXMubG9hZERhdGEoKGZ1bmN0aW9uKGUpe2UgaW5zdGFuY2VvZiBBcnJheSYmKG4uY2hlY2tlZD9uLnNldENoZWNrZWQoITAsITApOm4uc3RvcmUuY2hlY2tTdHJpY3RseXx8Y2MobiksaSgpKX0pKTppKCl9LGUucHJvdG90eXBlLmRvQ3JlYXRlQ2hpbGRyZW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuaW5zZXJ0Q2hpbGQoa3QoKSh7ZGF0YTplfSxuKSx2b2lkIDAsITApfSkpfSxlLnByb3RvdHlwZS5jb2xsYXBzZT1mdW5jdGlvbigpe3RoaXMuZXhwYW5kZWQ9ITF9LGUucHJvdG90eXBlLnNob3VsZExvYWREYXRhPWZ1bmN0aW9uKCl7cmV0dXJuITA9PT10aGlzLnN0b3JlLmxhenkmJnRoaXMuc3RvcmUubG9hZCYmIXRoaXMubG9hZGVkfSxlLnByb3RvdHlwZS51cGRhdGVMZWFmU3RhdGU9ZnVuY3Rpb24oKXtpZighMCE9PXRoaXMuc3RvcmUubGF6eXx8ITA9PT10aGlzLmxvYWRlZHx8InVuZGVmaW5lZCI9PT10eXBlb2YgdGhpcy5pc0xlYWZCeVVzZXIpe3ZhciBlPXRoaXMuY2hpbGROb2RlczshdGhpcy5zdG9yZS5sYXp5fHwhMD09PXRoaXMuc3RvcmUubGF6eSYmITA9PT10aGlzLmxvYWRlZD90aGlzLmlzTGVhZj0hZXx8MD09PWUubGVuZ3RoOnRoaXMuaXNMZWFmPSExfWVsc2UgdGhpcy5pc0xlYWY9dGhpcy5pc0xlYWZCeVVzZXJ9LGUucHJvdG90eXBlLnNldENoZWNrZWQ9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9dGhpcztpZih0aGlzLmluZGV0ZXJtaW5hdGU9ImhhbGYiPT09ZSx0aGlzLmNoZWNrZWQ9ITA9PT1lLCF0aGlzLnN0b3JlLmNoZWNrU3RyaWN0bHkpe2lmKCF0aGlzLnNob3VsZExvYWREYXRhKCl8fHRoaXMuc3RvcmUuY2hlY2tEZXNjZW5kYW50cyl7dmFyIG89bGModGhpcy5jaGlsZE5vZGVzKSxhPW8uYWxsLHM9by5hbGxXaXRob3V0RGlzYWJsZTt0aGlzLmlzTGVhZnx8YXx8IXN8fCh0aGlzLmNoZWNrZWQ9ITEsZT0hMSk7dmFyIGw9ZnVuY3Rpb24oKXtpZih0KXtmb3IodmFyIG49ci5jaGlsZE5vZGVzLG89MCxhPW4ubGVuZ3RoO288YTtvKyspe3ZhciBzPW5bb107aT1pfHwhMSE9PWU7dmFyIGw9cy5kaXNhYmxlZD9zLmNoZWNrZWQ6aTtzLnNldENoZWNrZWQobCx0LCEwLGkpfXZhciBjPWxjKG4pLHU9Yy5oYWxmLGg9Yy5hbGw7aHx8KHIuY2hlY2tlZD1oLHIuaW5kZXRlcm1pbmF0ZT11KX19O2lmKHRoaXMuc2hvdWxkTG9hZERhdGEoKSlyZXR1cm4gdm9pZCB0aGlzLmxvYWREYXRhKChmdW5jdGlvbigpe2woKSxjYyhyKX0pLHtjaGVja2VkOiExIT09ZX0pO2woKX12YXIgYz10aGlzLnBhcmVudDtjJiYwIT09Yy5sZXZlbCYmKG58fGNjKGMpKX19LGUucHJvdG90eXBlLmdldENoaWxkcmVuPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZigwPT09dGhpcy5sZXZlbClyZXR1cm4gdGhpcy5kYXRhO3ZhciB0PXRoaXMuZGF0YTtpZighdClyZXR1cm4gbnVsbDt2YXIgbj10aGlzLnN0b3JlLnByb3BzLGk9ImNoaWxkcmVuIjtyZXR1cm4gbiYmKGk9bi5jaGlsZHJlbnx8ImNoaWxkcmVuIiksdm9pZCAwPT09dFtpXSYmKHRbaV09bnVsbCksZSYmIXRbaV0mJih0W2ldPVtdKSx0W2ldfSxlLnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmdldENoaWxkcmVuKCl8fFtdLG49dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGF0YX0pKSxpPXt9LHI9W107dC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3ZhciBvPWVbbmNdLGE9ISFvJiZPYmplY3QoeVsiYXJyYXlGaW5kSW5kZXgiXSkobiwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbbmNdPT09b30pKT49MDthP2lbb109e2luZGV4OnQsZGF0YTplfTpyLnB1c2goe2luZGV4OnQsZGF0YTplfSl9KSksdGhpcy5zdG9yZS5sYXp5fHxuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdFtuY11dfHxlLnJlbW92ZUNoaWxkQnlEYXRhKHQpfSkpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5pbmRleCxpPXQuZGF0YTtlLmluc2VydENoaWxkKHtkYXRhOml9LG4pfSkpLHRoaXMudXBkYXRlTGVhZlN0YXRlKCl9LGUucHJvdG90eXBlLmxvYWREYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoITAhPT10aGlzLnN0b3JlLmxhenl8fCF0aGlzLnN0b3JlLmxvYWR8fHRoaXMubG9hZGVkfHx0aGlzLmxvYWRpbmcmJiFPYmplY3Qua2V5cyhuKS5sZW5ndGgpZSYmZS5jYWxsKHRoaXMpO2Vsc2V7dGhpcy5sb2FkaW5nPSEwO3ZhciBpPWZ1bmN0aW9uKGkpe3QubG9hZGVkPSEwLHQubG9hZGluZz0hMSx0LmNoaWxkTm9kZXM9W10sdC5kb0NyZWF0ZUNoaWxkcmVuKGksbiksdC51cGRhdGVMZWFmU3RhdGUoKSxlJiZlLmNhbGwodCxpKX07dGhpcy5zdG9yZS5sb2FkKHRoaXMsaSl9fSxhYyhlLFt7a2V5OiJsYWJlbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVjKHRoaXMsImxhYmVsIil9fSx7a2V5OiJrZXkiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RvcmUua2V5O3JldHVybiB0aGlzLmRhdGE/dGhpcy5kYXRhW2VdOm51bGx9fSx7a2V5OiJkaXNhYmxlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHVjKHRoaXMsImRpc2FibGVkIil9fSx7a2V5OiJuZXh0U2libGluZyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnQ7aWYoZSl7dmFyIHQ9ZS5jaGlsZE5vZGVzLmluZGV4T2YodGhpcyk7aWYodD4tMSlyZXR1cm4gZS5jaGlsZE5vZGVzW3QrMV19cmV0dXJuIG51bGx9fSx7a2V5OiJwcmV2aW91c1NpYmxpbmciLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFyZW50O2lmKGUpe3ZhciB0PWUuY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO2lmKHQ+LTEpcmV0dXJuIHQ+MD9lLmNoaWxkTm9kZXNbdC0xXTpudWxsfXJldHVybiBudWxsfX1dKSxlfSgpLGZjPWRjLHBjPSJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtmdW5jdGlvbiBtYyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBnYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIG49dGhpcztmb3IodmFyIGkgaW4gbWModGhpcyxlKSx0aGlzLmN1cnJlbnROb2RlPW51bGwsdGhpcy5jdXJyZW50Tm9kZUtleT1udWxsLHQpdC5oYXNPd25Qcm9wZXJ0eShpKSYmKHRoaXNbaV09dFtpXSk7aWYodGhpcy5ub2Rlc01hcD17fSx0aGlzLnJvb3Q9bmV3IGZjKHtkYXRhOnRoaXMuZGF0YSxzdG9yZTp0aGlzfSksdGhpcy5sYXp5JiZ0aGlzLmxvYWQpe3ZhciByPXRoaXMubG9hZDtyKHRoaXMucm9vdCwoZnVuY3Rpb24oZSl7bi5yb290LmRvQ3JlYXRlQ2hpbGRyZW4oZSksbi5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKX0pKX1lbHNlIHRoaXMuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGVzKCl9cmV0dXJuIGUucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpbHRlck5vZGVNZXRob2Qsbj10aGlzLmxhenksaT1mdW5jdGlvbiBpKHIpe3ZhciBvPXIucm9vdD9yLnJvb3QuY2hpbGROb2RlczpyLmNoaWxkTm9kZXM7aWYoby5mb3JFYWNoKChmdW5jdGlvbihuKXtuLnZpc2libGU9dC5jYWxsKG4sZSxuLmRhdGEsbiksaShuKX0pKSwhci52aXNpYmxlJiZvLmxlbmd0aCl7dmFyIGE9ITA7YT0hby5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS52aXNpYmxlfSkpLHIucm9vdD9yLnJvb3QudmlzaWJsZT0hMT09PWE6ci52aXNpYmxlPSExPT09YX1lJiYoIXIudmlzaWJsZXx8ci5pc0xlYWZ8fG58fHIuZXhwYW5kKCkpfTtpKHRoaXMpfSxlLnByb3RvdHlwZS5zZXREYXRhPWZ1bmN0aW9uKGUpe3ZhciB0PWUhPT10aGlzLnJvb3QuZGF0YTt0Pyh0aGlzLnJvb3Quc2V0RGF0YShlKSx0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpKTp0aGlzLnJvb3QudXBkYXRlQ2hpbGRyZW4oKX0sZS5wcm90b3R5cGUuZ2V0Tm9kZT1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgZmMpcmV0dXJuIGU7dmFyIHQ9Im9iamVjdCIhPT0oInVuZGVmaW5lZCI9PT10eXBlb2YgZT8idW5kZWZpbmVkIjpwYyhlKSk/ZTpyYyh0aGlzLmtleSxlKTtyZXR1cm4gdGhpcy5ub2Rlc01hcFt0XXx8bnVsbH0sZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXROb2RlKHQpO24ucGFyZW50Lmluc2VydEJlZm9yZSh7ZGF0YTplfSxuKX0sZS5wcm90b3R5cGUuaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldE5vZGUodCk7bi5wYXJlbnQuaW5zZXJ0QWZ0ZXIoe2RhdGE6ZX0sbil9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldE5vZGUoZSk7dCYmdC5wYXJlbnQmJih0PT09dGhpcy5jdXJyZW50Tm9kZSYmKHRoaXMuY3VycmVudE5vZGU9bnVsbCksdC5wYXJlbnQucmVtb3ZlQ2hpbGQodCkpfSxlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10P3RoaXMuZ2V0Tm9kZSh0KTp0aGlzLnJvb3Q7biYmbi5pbnNlcnRDaGlsZCh7ZGF0YTplfSl9LGUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2Rlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLmRlZmF1bHRDaGVja2VkS2V5c3x8W10sbj10aGlzLm5vZGVzTWFwO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9blt0XTtpJiZpLnNldENoZWNrZWQoITAsIWUuY2hlY2tTdHJpY3RseSl9KSl9LGUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGVmYXVsdENoZWNrZWRLZXlzfHxbXTstMSE9PXQuaW5kZXhPZihlLmtleSkmJmUuc2V0Q2hlY2tlZCghMCwhdGhpcy5jaGVja1N0cmljdGx5KX0sZS5wcm90b3R5cGUuc2V0RGVmYXVsdENoZWNrZWRLZXk9ZnVuY3Rpb24oZSl7ZSE9PXRoaXMuZGVmYXVsdENoZWNrZWRLZXlzJiYodGhpcy5kZWZhdWx0Q2hlY2tlZEtleXM9ZSx0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpKX0sZS5wcm90b3R5cGUucmVnaXN0ZXJOb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMua2V5O2lmKHQmJmUmJmUuZGF0YSl7dmFyIG49ZS5rZXk7dm9pZCAwIT09biYmKHRoaXMubm9kZXNNYXBbZS5rZXldPWUpfX0sZS5wcm90b3R5cGUuZGVyZWdpc3Rlck5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPXRoaXMua2V5O24mJmUmJmUuZGF0YSYmKGUuY2hpbGROb2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRlcmVnaXN0ZXJOb2RlKGUpfSkpLGRlbGV0ZSB0aGlzLm5vZGVzTWFwW2Uua2V5XSl9LGUucHJvdG90eXBlLmdldENoZWNrZWROb2Rlcz1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49W10saT1mdW5jdGlvbiBpKHIpe3ZhciBvPXIucm9vdD9yLnJvb3QuY2hpbGROb2RlczpyLmNoaWxkTm9kZXM7by5mb3JFYWNoKChmdW5jdGlvbihyKXsoci5jaGVja2VkfHx0JiZyLmluZGV0ZXJtaW5hdGUpJiYoIWV8fGUmJnIuaXNMZWFmKSYmbi5wdXNoKHIuZGF0YSksaShyKX0pKX07cmV0dXJuIGkodGhpcyksbn0sZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZEtleXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5nZXRDaGVja2VkTm9kZXModCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odHx8e30pW2Uua2V5XX0pKX0sZS5wcm90b3R5cGUuZ2V0SGFsZkNoZWNrZWROb2Rlcz1mdW5jdGlvbigpe3ZhciBlPVtdLHQ9ZnVuY3Rpb24gdChuKXt2YXIgaT1uLnJvb3Q/bi5yb290LmNoaWxkTm9kZXM6bi5jaGlsZE5vZGVzO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7bi5pbmRldGVybWluYXRlJiZlLnB1c2gobi5kYXRhKSx0KG4pfSkpfTtyZXR1cm4gdCh0aGlzKSxlfSxlLnByb3RvdHlwZS5nZXRIYWxmQ2hlY2tlZEtleXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmdldEhhbGZDaGVja2VkTm9kZXMoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0fHx7fSlbZS5rZXldfSkpfSxlLnByb3RvdHlwZS5fZ2V0QWxsTm9kZXM9ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMubm9kZXNNYXA7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmZS5wdXNoKHRbbl0pO3JldHVybiBlfSxlLnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbj1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMubm9kZXNNYXBbZV07aWYobil7Zm9yKHZhciBpPW4uY2hpbGROb2RlcyxyPWkubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBvPWlbcl07dGhpcy5yZW1vdmUoby5kYXRhKX1mb3IodmFyIGE9MCxzPXQubGVuZ3RoO2E8czthKyspe3ZhciBsPXRbYV07dGhpcy5hcHBlbmQobCxuLmRhdGEpfX19LGUucHJvdG90eXBlLl9zZXRDaGVja2VkS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49YXJndW1lbnRzWzJdLGk9dGhpcy5fZ2V0QWxsTm9kZXMoKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiB0LmxldmVsLWUubGV2ZWx9KSkscj1PYmplY3QuY3JlYXRlKG51bGwpLG89T2JqZWN0LmtleXMobik7aS5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gZS5zZXRDaGVja2VkKCExLCExKX0pKTtmb3IodmFyIGE9MCxzPWkubGVuZ3RoO2E8czthKyspe3ZhciBsPWlbYV0sYz1sLmRhdGFbZV0udG9TdHJpbmcoKSx1PW8uaW5kZXhPZihjKT4tMTtpZih1KXt2YXIgaD1sLnBhcmVudDt3aGlsZShoJiZoLmxldmVsPjApcltoLmRhdGFbZV1dPSEwLGg9aC5wYXJlbnQ7bC5pc0xlYWZ8fHRoaXMuY2hlY2tTdHJpY3RseT9sLnNldENoZWNrZWQoITAsITEpOihsLnNldENoZWNrZWQoITAsITApLHQmJmZ1bmN0aW9uKCl7bC5zZXRDaGVja2VkKCExLCExKTt2YXIgZT1mdW5jdGlvbiBlKHQpe3ZhciBuPXQuY2hpbGROb2RlcztuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaXNMZWFmfHx0LnNldENoZWNrZWQoITEsITEpLGUodCl9KSl9O2UobCl9KCkpfWVsc2UgbC5jaGVja2VkJiYhcltjXSYmbC5zZXRDaGVja2VkKCExLCExKX19LGUucHJvdG90eXBlLnNldENoZWNrZWROb2Rlcz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49dGhpcy5rZXksaT17fTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lbKGV8fHt9KVtuXV09ITB9KSksdGhpcy5fc2V0Q2hlY2tlZEtleXMobix0LGkpfSxlLnByb3RvdHlwZS5zZXRDaGVja2VkS2V5cz1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3RoaXMuZGVmYXVsdENoZWNrZWRLZXlzPWU7dmFyIG49dGhpcy5rZXksaT17fTtlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lbZV09ITB9KSksdGhpcy5fc2V0Q2hlY2tlZEtleXMobix0LGkpfSxlLnByb3RvdHlwZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7ZT1lfHxbXSx0aGlzLmRlZmF1bHRFeHBhbmRlZEtleXM9ZSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZ2V0Tm9kZShlKTtuJiZuLmV4cGFuZChudWxsLHQuYXV0b0V4cGFuZFBhcmVudCl9KSl9LGUucHJvdG90eXBlLnNldENoZWNrZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMuZ2V0Tm9kZShlKTtpJiZpLnNldENoZWNrZWQoISF0LG4pfSxlLnByb3RvdHlwZS5nZXRDdXJyZW50Tm9kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnROb2RlfSxlLnByb3RvdHlwZS5zZXRDdXJyZW50Tm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmN1cnJlbnROb2RlO3QmJih0LmlzQ3VycmVudD0hMSksdGhpcy5jdXJyZW50Tm9kZT1lLHRoaXMuY3VycmVudE5vZGUuaXNDdXJyZW50PSEwfSxlLnByb3RvdHlwZS5zZXRVc2VyQ3VycmVudE5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVt0aGlzLmtleV0sbj10aGlzLm5vZGVzTWFwW3RdO3RoaXMuc2V0Q3VycmVudE5vZGUobil9LGUucHJvdG90eXBlLnNldEN1cnJlbnROb2RlS2V5PWZ1bmN0aW9uKGUpe2lmKG51bGw9PT1lfHx2b2lkIDA9PT1lKXJldHVybiB0aGlzLmN1cnJlbnROb2RlJiYodGhpcy5jdXJyZW50Tm9kZS5pc0N1cnJlbnQ9ITEpLHZvaWQodGhpcy5jdXJyZW50Tm9kZT1udWxsKTt2YXIgdD10aGlzLmdldE5vZGUoZSk7dCYmdGhpcy5zZXRDdXJyZW50Tm9kZSh0KX0sZX0oKSx2Yz1nYyx5Yz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLG49dC4kY3JlYXRlRWxlbWVudCxpPXQuX3NlbGYuX2N8fG47cmV0dXJuIGkoImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOnQubm9kZS52aXNpYmxlLGV4cHJlc3Npb246Im5vZGUudmlzaWJsZSJ9XSxyZWY6Im5vZGUiLHN0YXRpY0NsYXNzOiJlbC10cmVlLW5vZGUiLGNsYXNzOnsiaXMtZXhwYW5kZWQiOnQuZXhwYW5kZWQsImlzLWN1cnJlbnQiOnQubm9kZS5pc0N1cnJlbnQsImlzLWhpZGRlbiI6IXQubm9kZS52aXNpYmxlLCJpcy1mb2N1c2FibGUiOiF0Lm5vZGUuZGlzYWJsZWQsImlzLWNoZWNrZWQiOiF0Lm5vZGUuZGlzYWJsZWQmJnQubm9kZS5jaGVja2VkfSxhdHRyczp7cm9sZToidHJlZWl0ZW0iLHRhYmluZGV4OiItMSIsImFyaWEtZXhwYW5kZWQiOnQuZXhwYW5kZWQsImFyaWEtZGlzYWJsZWQiOnQubm9kZS5kaXNhYmxlZCwiYXJpYS1jaGVja2VkIjp0Lm5vZGUuY2hlY2tlZCxkcmFnZ2FibGU6dC50cmVlLmRyYWdnYWJsZX0sb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpLHQuaGFuZGxlQ2xpY2soZSl9LGNvbnRleHRtZW51OmZ1bmN0aW9uKHQpe3JldHVybiBlLmhhbmRsZUNvbnRleHRNZW51KHQpfSxkcmFnc3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCksdC5oYW5kbGVEcmFnU3RhcnQoZSl9LGRyYWdvdmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpLHQuaGFuZGxlRHJhZ092ZXIoZSl9LGRyYWdlbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCksdC5oYW5kbGVEcmFnRW5kKGUpfSxkcm9wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpLHQuaGFuZGxlRHJvcChlKX19fSxbaSgiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fY29udGVudCIsc3R5bGU6eyJwYWRkaW5nLWxlZnQiOih0Lm5vZGUubGV2ZWwtMSkqdC50cmVlLmluZGVudCsicHgifX0sW2koInNwYW4iLHtjbGFzczpbeyJpcy1sZWFmIjp0Lm5vZGUuaXNMZWFmLGV4cGFuZGVkOiF0Lm5vZGUuaXNMZWFmJiZ0LmV4cGFuZGVkfSwiZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbiIsdC50cmVlLmljb25DbGFzcz90LnRyZWUuaWNvbkNsYXNzOiJlbC1pY29uLWNhcmV0LXJpZ2h0Il0sb246e2NsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlLnN0b3BQcm9wYWdhdGlvbigpLHQuaGFuZGxlRXhwYW5kSWNvbkNsaWNrKGUpfX19KSx0LnNob3dDaGVja2JveD9pKCJlbC1jaGVja2JveCIse2F0dHJzOntpbmRldGVybWluYXRlOnQubm9kZS5pbmRldGVybWluYXRlLGRpc2FibGVkOiEhdC5ub2RlLmRpc2FibGVkfSxvbjp7Y2hhbmdlOnQuaGFuZGxlQ2hlY2tDaGFuZ2V9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfX0sbW9kZWw6e3ZhbHVlOnQubm9kZS5jaGVja2VkLGNhbGxiYWNrOmZ1bmN0aW9uKGUpe3QuJHNldCh0Lm5vZGUsImNoZWNrZWQiLGUpfSxleHByZXNzaW9uOiJub2RlLmNoZWNrZWQifX0pOnQuX2UoKSx0Lm5vZGUubG9hZGluZz9pKCJzcGFuIix7c3RhdGljQ2xhc3M6ImVsLXRyZWUtbm9kZV9fbG9hZGluZy1pY29uIGVsLWljb24tbG9hZGluZyJ9KTp0Ll9lKCksaSgibm9kZS1jb250ZW50Iix7YXR0cnM6e25vZGU6dC5ub2RlfX0pXSwxKSxpKCJlbC1jb2xsYXBzZS10cmFuc2l0aW9uIixbIXQucmVuZGVyQWZ0ZXJFeHBhbmR8fHQuY2hpbGROb2RlUmVuZGVyZWQ/aSgiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6dC5leHBhbmRlZCxleHByZXNzaW9uOiJleHBhbmRlZCJ9XSxzdGF0aWNDbGFzczoiZWwtdHJlZS1ub2RlX19jaGlsZHJlbiIsYXR0cnM6e3JvbGU6Imdyb3VwIiwiYXJpYS1leHBhbmRlZCI6dC5leHBhbmRlZH19LHQuX2wodC5ub2RlLmNoaWxkTm9kZXMsKGZ1bmN0aW9uKGUpe3JldHVybiBpKCJlbC10cmVlLW5vZGUiLHtrZXk6dC5nZXROb2RlS2V5KGUpLGF0dHJzOnsicmVuZGVyLWNvbnRlbnQiOnQucmVuZGVyQ29udGVudCwicmVuZGVyLWFmdGVyLWV4cGFuZCI6dC5yZW5kZXJBZnRlckV4cGFuZCwic2hvdy1jaGVja2JveCI6dC5zaG93Q2hlY2tib3gsbm9kZTplfSxvbjp7Im5vZGUtZXhwYW5kIjp0LmhhbmRsZUNoaWxkTm9kZUV4cGFuZH19KX0pKSwxKTp0Ll9lKCldKV0sMSl9LGJjPVtdO3ljLl93aXRoU3RyaXBwZWQ9ITA7dmFyIHhjPXtuYW1lOiJFbFRyZWVOb2RlIixjb21wb25lbnROYW1lOiJFbFRyZWVOb2RlIixtaXhpbnM6W0UuYV0scHJvcHM6e25vZGU6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LHByb3BzOnt9LHJlbmRlckNvbnRlbnQ6RnVuY3Rpb24scmVuZGVyQWZ0ZXJFeHBhbmQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxzaG93Q2hlY2tib3g6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sY29tcG9uZW50czp7RWxDb2xsYXBzZVRyYW5zaXRpb246cWUuYSxFbENoZWNrYm94OkxpLmEsTm9kZUNvbnRlbnQ6e3Byb3BzOntub2RlOntyZXF1aXJlZDohMH19LHJlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRwYXJlbnQsbj10LnRyZWUsaT10aGlzLm5vZGUscj1pLmRhdGEsbz1pLnN0b3JlO3JldHVybiB0LnJlbmRlckNvbnRlbnQ/dC5yZW5kZXJDb250ZW50LmNhbGwodC5fcmVuZGVyUHJveHksZSx7X3NlbGY6bi4kdm5vZGUuY29udGV4dCxub2RlOmksZGF0YTpyLHN0b3JlOm99KTpuLiRzY29wZWRTbG90cy5kZWZhdWx0P24uJHNjb3BlZFNsb3RzLmRlZmF1bHQoe25vZGU6aSxkYXRhOnJ9KTplKCJzcGFuIix7Y2xhc3M6ImVsLXRyZWUtbm9kZV9fbGFiZWwifSxbaS5sYWJlbF0pfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dHJlZTpudWxsLGV4cGFuZGVkOiExLGNoaWxkTm9kZVJlbmRlcmVkOiExLG9sZENoZWNrZWQ6bnVsbCxvbGRJbmRldGVybWluYXRlOm51bGx9fSx3YXRjaDp7Im5vZGUuaW5kZXRlcm1pbmF0ZSI6ZnVuY3Rpb24oZSl7dGhpcy5oYW5kbGVTZWxlY3RDaGFuZ2UodGhpcy5ub2RlLmNoZWNrZWQsZSl9LCJub2RlLmNoZWNrZWQiOmZ1bmN0aW9uKGUpe3RoaXMuaGFuZGxlU2VsZWN0Q2hhbmdlKGUsdGhpcy5ub2RlLmluZGV0ZXJtaW5hdGUpfSwibm9kZS5leHBhbmRlZCI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljaygoZnVuY3Rpb24oKXtyZXR1cm4gdC5leHBhbmRlZD1lfSkpLGUmJih0aGlzLmNoaWxkTm9kZVJlbmRlcmVkPSEwKX19LG1ldGhvZHM6e2dldE5vZGVLZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHJjKHRoaXMudHJlZS5ub2RlS2V5LGUuZGF0YSl9LGhhbmRsZVNlbGVjdENoYW5nZTpmdW5jdGlvbihlLHQpe3RoaXMub2xkQ2hlY2tlZCE9PWUmJnRoaXMub2xkSW5kZXRlcm1pbmF0ZSE9PXQmJnRoaXMudHJlZS4kZW1pdCgiY2hlY2stY2hhbmdlIix0aGlzLm5vZGUuZGF0YSxlLHQpLHRoaXMub2xkQ2hlY2tlZD1lLHRoaXMuaW5kZXRlcm1pbmF0ZT10fSxoYW5kbGVDbGljazpmdW5jdGlvbigpe3ZhciBlPXRoaXMudHJlZS5zdG9yZTtlLnNldEN1cnJlbnROb2RlKHRoaXMubm9kZSksdGhpcy50cmVlLiRlbWl0KCJjdXJyZW50LWNoYW5nZSIsZS5jdXJyZW50Tm9kZT9lLmN1cnJlbnROb2RlLmRhdGE6bnVsbCxlLmN1cnJlbnROb2RlKSx0aGlzLnRyZWUuY3VycmVudE5vZGU9dGhpcyx0aGlzLnRyZWUuZXhwYW5kT25DbGlja05vZGUmJnRoaXMuaGFuZGxlRXhwYW5kSWNvbkNsaWNrKCksdGhpcy50cmVlLmNoZWNrT25DbGlja05vZGUmJiF0aGlzLm5vZGUuZGlzYWJsZWQmJnRoaXMuaGFuZGxlQ2hlY2tDaGFuZ2UobnVsbCx7dGFyZ2V0OntjaGVja2VkOiF0aGlzLm5vZGUuY2hlY2tlZH19KSx0aGlzLnRyZWUuJGVtaXQoIm5vZGUtY2xpY2siLHRoaXMubm9kZS5kYXRhLHRoaXMubm9kZSx0aGlzKX0saGFuZGxlQ29udGV4dE1lbnU6ZnVuY3Rpb24oZSl7dGhpcy50cmVlLl9ldmVudHNbIm5vZGUtY29udGV4dG1lbnUiXSYmdGhpcy50cmVlLl9ldmVudHNbIm5vZGUtY29udGV4dG1lbnUiXS5sZW5ndGg+MCYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLnRyZWUuJGVtaXQoIm5vZGUtY29udGV4dG1lbnUiLGUsdGhpcy5ub2RlLmRhdGEsdGhpcy5ub2RlLHRoaXMpfSxoYW5kbGVFeHBhbmRJY29uQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLm5vZGUuaXNMZWFmfHwodGhpcy5leHBhbmRlZD8odGhpcy50cmVlLiRlbWl0KCJub2RlLWNvbGxhcHNlIix0aGlzLm5vZGUuZGF0YSx0aGlzLm5vZGUsdGhpcyksdGhpcy5ub2RlLmNvbGxhcHNlKCkpOih0aGlzLm5vZGUuZXhwYW5kKCksdGhpcy4kZW1pdCgibm9kZS1leHBhbmQiLHRoaXMubm9kZS5kYXRhLHRoaXMubm9kZSx0aGlzKSkpfSxoYW5kbGVDaGVja0NoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5ub2RlLnNldENoZWNrZWQodC50YXJnZXQuY2hlY2tlZCwhdGhpcy50cmVlLmNoZWNrU3RyaWN0bHkpLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3ZhciBlPW4udHJlZS5zdG9yZTtuLnRyZWUuJGVtaXQoImNoZWNrIixuLm5vZGUuZGF0YSx7Y2hlY2tlZE5vZGVzOmUuZ2V0Q2hlY2tlZE5vZGVzKCksY2hlY2tlZEtleXM6ZS5nZXRDaGVja2VkS2V5cygpLGhhbGZDaGVja2VkTm9kZXM6ZS5nZXRIYWxmQ2hlY2tlZE5vZGVzKCksaGFsZkNoZWNrZWRLZXlzOmUuZ2V0SGFsZkNoZWNrZWRLZXlzKCl9KX0pKX0saGFuZGxlQ2hpbGROb2RlRXhwYW5kOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLmJyb2FkY2FzdCgiRWxUcmVlTm9kZSIsInRyZWUtbm9kZS1leHBhbmQiLHQpLHRoaXMudHJlZS4kZW1pdCgibm9kZS1leHBhbmQiLGUsdCxuKX0saGFuZGxlRHJhZ1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMudHJlZS5kcmFnZ2FibGUmJnRoaXMudHJlZS4kZW1pdCgidHJlZS1ub2RlLWRyYWctc3RhcnQiLGUsdGhpcyl9LGhhbmRsZURyYWdPdmVyOmZ1bmN0aW9uKGUpe3RoaXMudHJlZS5kcmFnZ2FibGUmJih0aGlzLnRyZWUuJGVtaXQoInRyZWUtbm9kZS1kcmFnLW92ZXIiLGUsdGhpcyksZS5wcmV2ZW50RGVmYXVsdCgpKX0saGFuZGxlRHJvcDpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LGhhbmRsZURyYWdFbmQ6ZnVuY3Rpb24oZSl7dGhpcy50cmVlLmRyYWdnYWJsZSYmdGhpcy50cmVlLiRlbWl0KCJ0cmVlLW5vZGUtZHJhZy1lbmQiLGUsdGhpcyl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuJHBhcmVudDt0LmlzVHJlZT90aGlzLnRyZWU9dDp0aGlzLnRyZWU9dC50cmVlO3ZhciBuPXRoaXMudHJlZTtufHxjb25zb2xlLndhcm4oIkNhbiBub3QgZmluZCBub2RlJ3MgdHJlZS4iKTt2YXIgaT1uLnByb3BzfHx7fSxyPWlbImNoaWxkcmVuIl18fCJjaGlsZHJlbiI7dGhpcy4kd2F0Y2goIm5vZGUuZGF0YS4iK3IsKGZ1bmN0aW9uKCl7ZS5ub2RlLnVwZGF0ZUNoaWxkcmVuKCl9KSksdGhpcy5ub2RlLmV4cGFuZGVkJiYodGhpcy5leHBhbmRlZD0hMCx0aGlzLmNoaWxkTm9kZVJlbmRlcmVkPSEwKSx0aGlzLnRyZWUuYWNjb3JkaW9uJiZ0aGlzLiRvbigidHJlZS1ub2RlLWV4cGFuZCIsKGZ1bmN0aW9uKHQpe2Uubm9kZSE9PXQmJmUubm9kZS5jb2xsYXBzZSgpfSkpfX0sX2M9eGMsd2M9cyhfYyx5YyxiYywhMSxudWxsLG51bGwsbnVsbCk7d2Mub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWUiO3ZhciBTYz13Yy5leHBvcnRzLENjPXtuYW1lOiJFbFRyZWUiLG1peGluczpbRS5hXSxjb21wb25lbnRzOntFbFRyZWVOb2RlOlNjfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3N0b3JlOm51bGwscm9vdDpudWxsLGN1cnJlbnROb2RlOm51bGwsdHJlZUl0ZW1zOm51bGwsY2hlY2tib3hJdGVtczpbXSxkcmFnU3RhdGU6e3Nob3dEcm9wSW5kaWNhdG9yOiExLGRyYWdnaW5nTm9kZTpudWxsLGRyb3BOb2RlOm51bGwsYWxsb3dEcm9wOiEwfX19LHByb3BzOntkYXRhOnt0eXBlOkFycmF5fSxlbXB0eVRleHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KHBzWyJ0Il0pKCJlbC50cmVlLmVtcHR5VGV4dCIpfX0scmVuZGVyQWZ0ZXJFeHBhbmQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxub2RlS2V5OlN0cmluZyxjaGVja1N0cmljdGx5OkJvb2xlYW4sZGVmYXVsdEV4cGFuZEFsbDpCb29sZWFuLGV4cGFuZE9uQ2xpY2tOb2RlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sY2hlY2tPbkNsaWNrTm9kZTpCb29sZWFuLGNoZWNrRGVzY2VuZGFudHM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhdXRvRXhwYW5kUGFyZW50Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sZGVmYXVsdENoZWNrZWRLZXlzOkFycmF5LGRlZmF1bHRFeHBhbmRlZEtleXM6QXJyYXksY3VycmVudE5vZGVLZXk6W1N0cmluZyxOdW1iZXJdLHJlbmRlckNvbnRlbnQ6RnVuY3Rpb24sc2hvd0NoZWNrYm94Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sZHJhZ2dhYmxlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sYWxsb3dEcmFnOkZ1bmN0aW9uLGFsbG93RHJvcDpGdW5jdGlvbixwcm9wczp7ZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybntjaGlsZHJlbjoiY2hpbGRyZW4iLGxhYmVsOiJsYWJlbCIsZGlzYWJsZWQ6ImRpc2FibGVkIn19fSxsYXp5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0saGlnaGxpZ2h0Q3VycmVudDpCb29sZWFuLGxvYWQ6RnVuY3Rpb24sZmlsdGVyTm9kZU1ldGhvZDpGdW5jdGlvbixhY2NvcmRpb246Qm9vbGVhbixpbmRlbnQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTh9LGljb25DbGFzczpTdHJpbmd9LGNvbXB1dGVkOntjaGlsZHJlbjp7c2V0OmZ1bmN0aW9uKGUpe3RoaXMuZGF0YT1lfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sdHJlZUl0ZW1BcnJheTpmdW5jdGlvbigpe3JldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLnRyZWVJdGVtcyl9LGlzRW1wdHk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJvb3QuY2hpbGROb2RlcztyZXR1cm4hZXx8MD09PWUubGVuZ3RofHxlLmV2ZXJ5KChmdW5jdGlvbihlKXt2YXIgdD1lLnZpc2libGU7cmV0dXJuIXR9KSl9fSx3YXRjaDp7ZGVmYXVsdENoZWNrZWRLZXlzOmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuc2V0RGVmYXVsdENoZWNrZWRLZXkoZSl9LGRlZmF1bHRFeHBhbmRlZEtleXM6ZnVuY3Rpb24oZSl7dGhpcy5zdG9yZS5kZWZhdWx0RXhwYW5kZWRLZXlzPWUsdGhpcy5zdG9yZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzKGUpfSxkYXRhOmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuc2V0RGF0YShlKX0sY2hlY2tib3hJdGVtczpmdW5jdGlvbihlKXtBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUsKGZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsLTEpfSkpfSxjaGVja1N0cmljdGx5OmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUuY2hlY2tTdHJpY3RseT1lfX0sbWV0aG9kczp7ZmlsdGVyOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmZpbHRlck5vZGVNZXRob2QpdGhyb3cgbmV3IEVycm9yKCJbVHJlZV0gZmlsdGVyTm9kZU1ldGhvZCBpcyByZXF1aXJlZCB3aGVuIGZpbHRlciIpO3RoaXMuc3RvcmUuZmlsdGVyKGUpfSxnZXROb2RlS2V5OmZ1bmN0aW9uKGUpe3JldHVybiByYyh0aGlzLm5vZGVLZXksZS5kYXRhKX0sZ2V0Tm9kZVBhdGg6ZnVuY3Rpb24oZSl7aWYoIXRoaXMubm9kZUtleSl0aHJvdyBuZXcgRXJyb3IoIltUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIGdldE5vZGVQYXRoIik7dmFyIHQ9dGhpcy5zdG9yZS5nZXROb2RlKGUpO2lmKCF0KXJldHVybltdO3ZhciBuPVt0LmRhdGFdLGk9dC5wYXJlbnQ7d2hpbGUoaSYmaSE9PXRoaXMucm9vdCluLnB1c2goaS5kYXRhKSxpPWkucGFyZW50O3JldHVybiBuLnJldmVyc2UoKX0sZ2V0Q2hlY2tlZE5vZGVzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuc3RvcmUuZ2V0Q2hlY2tlZE5vZGVzKGUsdCl9LGdldENoZWNrZWRLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnN0b3JlLmdldENoZWNrZWRLZXlzKGUpfSxnZXRDdXJyZW50Tm9kZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RvcmUuZ2V0Q3VycmVudE5vZGUoKTtyZXR1cm4gZT9lLmRhdGE6bnVsbH0sZ2V0Q3VycmVudEtleTpmdW5jdGlvbigpe2lmKCF0aGlzLm5vZGVLZXkpdGhyb3cgbmV3IEVycm9yKCJbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBnZXRDdXJyZW50S2V5Iik7dmFyIGU9dGhpcy5nZXRDdXJyZW50Tm9kZSgpO3JldHVybiBlP2VbdGhpcy5ub2RlS2V5XTpudWxsfSxzZXRDaGVja2VkTm9kZXM6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcigiW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q2hlY2tlZE5vZGVzIik7dGhpcy5zdG9yZS5zZXRDaGVja2VkTm9kZXMoZSx0KX0sc2V0Q2hlY2tlZEtleXM6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcigiW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q2hlY2tlZEtleXMiKTt0aGlzLnN0b3JlLnNldENoZWNrZWRLZXlzKGUsdCl9LHNldENoZWNrZWQ6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuc3RvcmUuc2V0Q2hlY2tlZChlLHQsbil9LGdldEhhbGZDaGVja2VkTm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdG9yZS5nZXRIYWxmQ2hlY2tlZE5vZGVzKCl9LGdldEhhbGZDaGVja2VkS2V5czpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0b3JlLmdldEhhbGZDaGVja2VkS2V5cygpfSxzZXRDdXJyZW50Tm9kZTpmdW5jdGlvbihlKXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcigiW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q3VycmVudE5vZGUiKTt0aGlzLnN0b3JlLnNldFVzZXJDdXJyZW50Tm9kZShlKX0sc2V0Q3VycmVudEtleTpmdW5jdGlvbihlKXtpZighdGhpcy5ub2RlS2V5KXRocm93IG5ldyBFcnJvcigiW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q3VycmVudEtleSIpO3RoaXMuc3RvcmUuc2V0Q3VycmVudE5vZGVLZXkoZSl9LGdldE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RvcmUuZ2V0Tm9kZShlKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3RoaXMuc3RvcmUucmVtb3ZlKGUpfSxhcHBlbmQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3JlLmFwcGVuZChlLHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3JlLmluc2VydEJlZm9yZShlLHQpfSxpbnNlcnRBZnRlcjpmdW5jdGlvbihlLHQpe3RoaXMuc3RvcmUuaW5zZXJ0QWZ0ZXIoZSx0KX0saGFuZGxlTm9kZUV4cGFuZDpmdW5jdGlvbihlLHQsbil7dGhpcy5icm9hZGNhc3QoIkVsVHJlZU5vZGUiLCJ0cmVlLW5vZGUtZXhwYW5kIix0KSx0aGlzLiRlbWl0KCJub2RlLWV4cGFuZCIsZSx0LG4pfSx1cGRhdGVLZXlDaGlsZHJlbjpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLm5vZGVLZXkpdGhyb3cgbmV3IEVycm9yKCJbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiB1cGRhdGVLZXlDaGlsZCIpO3RoaXMuc3RvcmUudXBkYXRlQ2hpbGRyZW4oZSx0KX0saW5pdFRhYkluZGV4OmZ1bmN0aW9uKCl7dGhpcy50cmVlSXRlbXM9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgiLmlzLWZvY3VzYWJsZVtyb2xlPXRyZWVpdGVtXSIpLHRoaXMuY2hlY2tib3hJdGVtcz10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpO3ZhciBlPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pcy1jaGVja2VkW3JvbGU9dHJlZWl0ZW1dIik7ZS5sZW5ndGg/ZVswXS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwwKTp0aGlzLnRyZWVJdGVtc1swXSYmdGhpcy50cmVlSXRlbXNbMF0uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsMCl9LGhhbmRsZUtleWRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYoLTEhPT10LmNsYXNzTmFtZS5pbmRleE9mKCJlbC10cmVlLW5vZGUiKSl7dmFyIG49ZS5rZXlDb2RlO3RoaXMudHJlZUl0ZW1zPXRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pcy1mb2N1c2FibGVbcm9sZT10cmVlaXRlbV0iKTt2YXIgaT10aGlzLnRyZWVJdGVtQXJyYXkuaW5kZXhPZih0KSxyPXZvaWQgMDtbMzgsNDBdLmluZGV4T2Yobik+LTEmJihlLnByZXZlbnREZWZhdWx0KCkscj0zOD09PW4/MCE9PWk/aS0xOjA6aTx0aGlzLnRyZWVJdGVtQXJyYXkubGVuZ3RoLTE/aSsxOjAsdGhpcy50cmVlSXRlbUFycmF5W3JdLmZvY3VzKCkpLFszNywzOV0uaW5kZXhPZihuKT4tMSYmKGUucHJldmVudERlZmF1bHQoKSx0LmNsaWNrKCkpO3ZhciBvPXQucXVlcnlTZWxlY3RvcignW3R5cGU9ImNoZWNrYm94Il0nKTtbMTMsMzJdLmluZGV4T2Yobik+LTEmJm8mJihlLnByZXZlbnREZWZhdWx0KCksby5jbGljaygpKX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmlzVHJlZT0hMCx0aGlzLnN0b3JlPW5ldyB2Yyh7a2V5OnRoaXMubm9kZUtleSxkYXRhOnRoaXMuZGF0YSxsYXp5OnRoaXMubGF6eSxwcm9wczp0aGlzLnByb3BzLGxvYWQ6dGhpcy5sb2FkLGN1cnJlbnROb2RlS2V5OnRoaXMuY3VycmVudE5vZGVLZXksY2hlY2tTdHJpY3RseTp0aGlzLmNoZWNrU3RyaWN0bHksY2hlY2tEZXNjZW5kYW50czp0aGlzLmNoZWNrRGVzY2VuZGFudHMsZGVmYXVsdENoZWNrZWRLZXlzOnRoaXMuZGVmYXVsdENoZWNrZWRLZXlzLGRlZmF1bHRFeHBhbmRlZEtleXM6dGhpcy5kZWZhdWx0RXhwYW5kZWRLZXlzLGF1dG9FeHBhbmRQYXJlbnQ6dGhpcy5hdXRvRXhwYW5kUGFyZW50LGRlZmF1bHRFeHBhbmRBbGw6dGhpcy5kZWZhdWx0RXhwYW5kQWxsLGZpbHRlck5vZGVNZXRob2Q6dGhpcy5maWx0ZXJOb2RlTWV0aG9kfSksdGhpcy5yb290PXRoaXMuc3RvcmUucm9vdDt2YXIgdD10aGlzLmRyYWdTdGF0ZTt0aGlzLiRvbigidHJlZS1ub2RlLWRyYWctc3RhcnQiLChmdW5jdGlvbihuLGkpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZS5hbGxvd0RyYWcmJiFlLmFsbG93RHJhZyhpLm5vZGUpKXJldHVybiBuLnByZXZlbnREZWZhdWx0KCksITE7bi5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZD0ibW92ZSI7dHJ5e24uZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLCIiKX1jYXRjaChyKXt9dC5kcmFnZ2luZ05vZGU9aSxlLiRlbWl0KCJub2RlLWRyYWctc3RhcnQiLGkubm9kZSxuKX0pKSx0aGlzLiRvbigidHJlZS1ub2RlLWRyYWctb3ZlciIsKGZ1bmN0aW9uKG4saSl7dmFyIHI9b2Mobi50YXJnZXQsIkVsVHJlZU5vZGUiKSxvPXQuZHJvcE5vZGU7byYmbyE9PXImJk9iamVjdCh6ZVsicmVtb3ZlQ2xhc3MiXSkoby4kZWwsImlzLWRyb3AtaW5uZXIiKTt2YXIgYT10LmRyYWdnaW5nTm9kZTtpZihhJiZyKXt2YXIgcz0hMCxsPSEwLGM9ITAsdT0hMDsiZnVuY3Rpb24iPT09dHlwZW9mIGUuYWxsb3dEcm9wJiYocz1lLmFsbG93RHJvcChhLm5vZGUsci5ub2RlLCJwcmV2IiksdT1sPWUuYWxsb3dEcm9wKGEubm9kZSxyLm5vZGUsImlubmVyIiksYz1lLmFsbG93RHJvcChhLm5vZGUsci5ub2RlLCJuZXh0IikpLG4uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9bD8ibW92ZSI6Im5vbmUiLChzfHxsfHxjKSYmbyE9PXImJihvJiZlLiRlbWl0KCJub2RlLWRyYWctbGVhdmUiLGEubm9kZSxvLm5vZGUsbiksZS4kZW1pdCgibm9kZS1kcmFnLWVudGVyIixhLm5vZGUsci5ub2RlLG4pKSwoc3x8bHx8YykmJih0LmRyb3BOb2RlPXIpLHIubm9kZS5uZXh0U2libGluZz09PWEubm9kZSYmKGM9ITEpLHIubm9kZS5wcmV2aW91c1NpYmxpbmc9PT1hLm5vZGUmJihzPSExKSxyLm5vZGUuY29udGFpbnMoYS5ub2RlLCExKSYmKGw9ITEpLChhLm5vZGU9PT1yLm5vZGV8fGEubm9kZS5jb250YWlucyhyLm5vZGUpKSYmKHM9ITEsbD0hMSxjPSExKTt2YXIgaD1yLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWUuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9dm9pZCAwLHA9cz9sPy4yNTpjPy40NToxOi0xLG09Yz9sPy43NTpzPy41NTowOjEsZz0tOTk5OSx2PW4uY2xpZW50WS1oLnRvcDtmPXY8aC5oZWlnaHQqcD8iYmVmb3JlIjp2PmguaGVpZ2h0Km0/ImFmdGVyIjpsPyJpbm5lciI6Im5vbmUiO3ZhciB5PXIuJGVsLnF1ZXJ5U2VsZWN0b3IoIi5lbC10cmVlLW5vZGVfX2V4cGFuZC1pY29uIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYj1lLiRyZWZzLmRyb3BJbmRpY2F0b3I7ImJlZm9yZSI9PT1mP2c9eS50b3AtZC50b3A6ImFmdGVyIj09PWYmJihnPXkuYm90dG9tLWQudG9wKSxiLnN0eWxlLnRvcD1nKyJweCIsYi5zdHlsZS5sZWZ0PXkucmlnaHQtZC5sZWZ0KyJweCIsImlubmVyIj09PWY/T2JqZWN0KHplWyJhZGRDbGFzcyJdKShyLiRlbCwiaXMtZHJvcC1pbm5lciIpOk9iamVjdCh6ZVsicmVtb3ZlQ2xhc3MiXSkoci4kZWwsImlzLWRyb3AtaW5uZXIiKSx0LnNob3dEcm9wSW5kaWNhdG9yPSJiZWZvcmUiPT09Znx8ImFmdGVyIj09PWYsdC5hbGxvd0Ryb3A9dC5zaG93RHJvcEluZGljYXRvcnx8dSx0LmRyb3BUeXBlPWYsZS4kZW1pdCgibm9kZS1kcmFnLW92ZXIiLGEubm9kZSxyLm5vZGUsbil9fSkpLHRoaXMuJG9uKCJ0cmVlLW5vZGUtZHJhZy1lbmQiLChmdW5jdGlvbihuKXt2YXIgaT10LmRyYWdnaW5nTm9kZSxyPXQuZHJvcFR5cGUsbz10LmRyb3BOb2RlO2lmKG4ucHJldmVudERlZmF1bHQoKSxuLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJtb3ZlIixpJiZvKXt2YXIgYT17ZGF0YTppLm5vZGUuZGF0YX07Im5vbmUiIT09ciYmaS5ub2RlLnJlbW92ZSgpLCJiZWZvcmUiPT09cj9vLm5vZGUucGFyZW50Lmluc2VydEJlZm9yZShhLG8ubm9kZSk6ImFmdGVyIj09PXI/by5ub2RlLnBhcmVudC5pbnNlcnRBZnRlcihhLG8ubm9kZSk6ImlubmVyIj09PXImJm8ubm9kZS5pbnNlcnRDaGlsZChhKSwibm9uZSIhPT1yJiZlLnN0b3JlLnJlZ2lzdGVyTm9kZShhKSxPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKG8uJGVsLCJpcy1kcm9wLWlubmVyIiksZS4kZW1pdCgibm9kZS1kcmFnLWVuZCIsaS5ub2RlLG8ubm9kZSxyLG4pLCJub25lIiE9PXImJmUuJGVtaXQoIm5vZGUtZHJvcCIsaS5ub2RlLG8ubm9kZSxyLG4pfWkmJiFvJiZlLiRlbWl0KCJub2RlLWRyYWctZW5kIixpLm5vZGUsbnVsbCxyLG4pLHQuc2hvd0Ryb3BJbmRpY2F0b3I9ITEsdC5kcmFnZ2luZ05vZGU9bnVsbCx0LmRyb3BOb2RlPW51bGwsdC5hbGxvd0Ryb3A9ITB9KSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmluaXRUYWJJbmRleCgpLHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuaGFuZGxlS2V5ZG93bil9LHVwZGF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLnRyZWVJdGVtcz10aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCJbcm9sZT10cmVlaXRlbV0iKSx0aGlzLmNoZWNrYm94SXRlbXM9dGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT1jaGVja2JveF0iKX19LGtjPUNjLFRjPXMoa2MsZWMsdGMsITEsbnVsbCxudWxsLG51bGwpO1RjLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZSI7dmFyIE1jPVRjLmV4cG9ydHM7TWMuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChNYy5uYW1lLE1jKX07dmFyIEVjPU1jLEljPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLWFsZXJ0LWZhZGUifX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLHN0YXRpY0NsYXNzOiJlbC1hbGVydCIsY2xhc3M6W2UudHlwZUNsYXNzLGUuY2VudGVyPyJpcy1jZW50ZXIiOiIiLCJpcy0iK2UuZWZmZWN0XSxhdHRyczp7cm9sZToiYWxlcnQifX0sW2Uuc2hvd0ljb24/bigiaSIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9faWNvbiIsY2xhc3M6W2UuaWNvbkNsYXNzLGUuaXNCaWdJY29uXX0pOmUuX2UoKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtYWxlcnRfX2NvbnRlbnQifSxbZS50aXRsZXx8ZS4kc2xvdHMudGl0bGU/bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9fdGl0bGUiLGNsYXNzOltlLmlzQm9sZFRpdGxlXX0sW2UuX3QoInRpdGxlIixbZS5fdihlLl9zKGUudGl0bGUpKV0pXSwyKTplLl9lKCksZS4kc2xvdHMuZGVmYXVsdCYmIWUuZGVzY3JpcHRpb24/bigicCIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9fZGVzY3JpcHRpb24ifSxbZS5fdCgiZGVmYXVsdCIpXSwyKTplLl9lKCksZS5kZXNjcmlwdGlvbiYmIWUuJHNsb3RzLmRlZmF1bHQ/bigicCIse3N0YXRpY0NsYXNzOiJlbC1hbGVydF9fZGVzY3JpcHRpb24ifSxbZS5fdihlLl9zKGUuZGVzY3JpcHRpb24pKV0pOmUuX2UoKSxuKCJpIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5jbG9zYWJsZSxleHByZXNzaW9uOiJjbG9zYWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtYWxlcnRfX2Nsb3NlYnRuIixjbGFzczp7ImlzLWN1c3RvbWVkIjoiIiE9PWUuY2xvc2VUZXh0LCJlbC1pY29uLWNsb3NlIjoiIj09PWUuY2xvc2VUZXh0fSxvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5jbG9zZSgpfX19LFtlLl92KGUuX3MoZS5jbG9zZVRleHQpKV0pXSldKV0pfSxEYz1bXTtJYy5fd2l0aFN0cmlwcGVkPSEwO3ZhciBBYz17c3VjY2VzczoiZWwtaWNvbi1zdWNjZXNzIix3YXJuaW5nOiJlbC1pY29uLXdhcm5pbmciLGVycm9yOiJlbC1pY29uLWVycm9yIn0sT2M9e25hbWU6IkVsQWxlcnQiLHByb3BzOnt0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sZGVzY3JpcHRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiJ9LHR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImluZm8ifSxjbG9zYWJsZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGNsb3NlVGV4dDp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIn0sc2hvd0ljb246Qm9vbGVhbixjZW50ZXI6Qm9vbGVhbixlZmZlY3Q6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImxpZ2h0Iix2YWxpZGF0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1bImxpZ2h0IiwiZGFyayJdLmluZGV4T2YoZSl9fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aXNpYmxlOiEwfX0sbWV0aG9kczp7Y2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnZpc2libGU9ITEsdGhpcy4kZW1pdCgiY2xvc2UiKX19LGNvbXB1dGVkOnt0eXBlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4iZWwtYWxlcnQtLSIrdGhpcy50eXBlfSxpY29uQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gQWNbdGhpcy50eXBlXXx8ImVsLWljb24taW5mbyJ9LGlzQmlnSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlc2NyaXB0aW9ufHx0aGlzLiRzbG90cy5kZWZhdWx0PyJpcy1iaWciOiIifSxpc0JvbGRUaXRsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlc2NyaXB0aW9ufHx0aGlzLiRzbG90cy5kZWZhdWx0PyJpcy1ib2xkIjoiIn19fSxQYz1PYyxMYz1zKFBjLEljLERjLCExLG51bGwsbnVsbCxudWxsKTtMYy5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlIjt2YXIgTmM9TGMuZXhwb3J0cztOYy5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KE5jLm5hbWUsTmMpfTt2YXIgUmM9TmMsJGM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtbm90aWZpY2F0aW9uLWZhZGUifX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLGNsYXNzOlsiZWwtbm90aWZpY2F0aW9uIixlLmN1c3RvbUNsYXNzLGUuaG9yaXpvbnRhbENsYXNzXSxzdHlsZTplLnBvc2l0aW9uU3R5bGUsYXR0cnM6e3JvbGU6ImFsZXJ0In0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5jbGVhclRpbWVyKCl9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZS5zdGFydFRpbWVyKCl9LGNsaWNrOmUuY2xpY2t9fSxbZS50eXBlfHxlLmljb25DbGFzcz9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLW5vdGlmaWNhdGlvbl9faWNvbiIsY2xhc3M6W2UudHlwZUNsYXNzLGUuaWNvbkNsYXNzXX0pOmUuX2UoKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19ncm91cCIsY2xhc3M6eyJpcy13aXRoLWljb24iOmUudHlwZUNsYXNzfHxlLmljb25DbGFzc319LFtuKCJoMiIse3N0YXRpY0NsYXNzOiJlbC1ub3RpZmljYXRpb25fX3RpdGxlIixkb21Qcm9wczp7dGV4dENvbnRlbnQ6ZS5fcyhlLnRpdGxlKX19KSxuKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLm1lc3NhZ2UsZXhwcmVzc2lvbjoibWVzc2FnZSJ9XSxzdGF0aWNDbGFzczoiZWwtbm90aWZpY2F0aW9uX19jb250ZW50In0sW2UuX3QoImRlZmF1bHQiLFtlLmRhbmdlcm91c2x5VXNlSFRNTFN0cmluZz9uKCJwIix7ZG9tUHJvcHM6e2lubmVySFRNTDplLl9zKGUubWVzc2FnZSl9fSk6bigicCIsW2UuX3YoZS5fcyhlLm1lc3NhZ2UpKV0pXSldLDIpLGUuc2hvd0Nsb3NlP24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRuIGVsLWljb24tY2xvc2UiLG9uOntjbGljazpmdW5jdGlvbih0KXtyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKSxlLmNsb3NlKHQpfX19KTplLl9lKCldKV0pXSl9LHpjPVtdOyRjLl93aXRoU3RyaXBwZWQ9ITA7dmFyIEJjPXtzdWNjZXNzOiJzdWNjZXNzIixpbmZvOiJpbmZvIix3YXJuaW5nOiJ3YXJuaW5nIixlcnJvcjoiZXJyb3IifSxGYz17ZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aXNpYmxlOiExLHRpdGxlOiIiLG1lc3NhZ2U6IiIsZHVyYXRpb246NDUwMCx0eXBlOiIiLHNob3dDbG9zZTohMCxjdXN0b21DbGFzczoiIixpY29uQ2xhc3M6IiIsb25DbG9zZTpudWxsLG9uQ2xpY2s6bnVsbCxjbG9zZWQ6ITEsdmVydGljYWxPZmZzZXQ6MCx0aW1lcjpudWxsLGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzohMSxwb3NpdGlvbjoidG9wLXJpZ2h0In19LGNvbXB1dGVkOnt0eXBlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlJiZCY1t0aGlzLnR5cGVdPyJlbC1pY29uLSIrQmNbdGhpcy50eXBlXToiIn0saG9yaXpvbnRhbENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKT4tMT8icmlnaHQiOiJsZWZ0In0sdmVydGljYWxQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybi9edG9wLS8udGVzdCh0aGlzLnBvc2l0aW9uKT8idG9wIjoiYm90dG9tIn0scG9zaXRpb25TdHlsZTpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXt9LGVbdGhpcy52ZXJ0aWNhbFByb3BlcnR5XT10aGlzLnZlcnRpY2FsT2Zmc2V0KyJweCIsZX19LHdhdGNoOntjbG9zZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmlzaWJsZT0hMSx0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLmRlc3Ryb3lFbGVtZW50KSl9fSxtZXRob2RzOntkZXN0cm95RWxlbWVudDpmdW5jdGlvbigpe3RoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLHRoaXMuZGVzdHJveUVsZW1lbnQpLHRoaXMuJGRlc3Ryb3koITApLHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpfSxjbGljazpmdW5jdGlvbigpeyJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5vbkNsaWNrJiZ0aGlzLm9uQ2xpY2soKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlZD0hMCwiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMub25DbG9zZSYmdGhpcy5vbkNsb3NlKCl9LGNsZWFyVGltZXI6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lcil9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZHVyYXRpb24+MCYmKHRoaXMudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmNsb3NlZHx8ZS5jbG9zZSgpfSksdGhpcy5kdXJhdGlvbikpfSxrZXlkb3duOmZ1bmN0aW9uKGUpezQ2PT09ZS5rZXlDb2RlfHw4PT09ZS5rZXlDb2RlP3RoaXMuY2xlYXJUaW1lcigpOjI3PT09ZS5rZXlDb2RlP3RoaXMuY2xvc2VkfHx0aGlzLmNsb3NlKCk6dGhpcy5zdGFydFRpbWVyKCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmR1cmF0aW9uPjAmJih0aGlzLnRpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5jbG9zZWR8fGUuY2xvc2UoKX0pLHRoaXMuZHVyYXRpb24pKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLmtleWRvd24pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5rZXlkb3duKX19LFZjPUZjLGpjPXMoVmMsJGMsemMsITEsbnVsbCxudWxsLG51bGwpO2pjLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlIjt2YXIgSGM9amMuZXhwb3J0cyxXYz1qaS5hLmV4dGVuZChIYyksR2M9dm9pZCAwLFVjPVtdLHFjPTEsWWM9ZnVuY3Rpb24gZSh0KXtpZighamkuYS5wcm90b3R5cGUuJGlzU2VydmVyKXt0PWt0KCkoe30sdCk7dmFyIG49dC5vbkNsb3NlLGk9Im5vdGlmaWNhdGlvbl8iK3FjKysscj10LnBvc2l0aW9ufHwidG9wLXJpZ2h0Ijt0Lm9uQ2xvc2U9ZnVuY3Rpb24oKXtlLmNsb3NlKGksbil9LEdjPW5ldyBXYyh7ZGF0YTp0fSksT2JqZWN0KENzWyJpc1ZOb2RlIl0pKHQubWVzc2FnZSkmJihHYy4kc2xvdHMuZGVmYXVsdD1bdC5tZXNzYWdlXSx0Lm1lc3NhZ2U9IlJFUExBQ0VEX0JZX1ZOT0RFIiksR2MuaWQ9aSxHYy4kbW91bnQoKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKEdjLiRlbCksR2MudmlzaWJsZT0hMCxHYy5kb209R2MuJGVsLEdjLmRvbS5zdHlsZS56SW5kZXg9U1siUG9wdXBNYW5hZ2VyIl0ubmV4dFpJbmRleCgpO3ZhciBvPXQub2Zmc2V0fHwwO3JldHVybiBVYy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBvc2l0aW9uPT09cn0pKS5mb3JFYWNoKChmdW5jdGlvbihlKXtvKz1lLiRlbC5vZmZzZXRIZWlnaHQrMTZ9KSksbys9MTYsR2MudmVydGljYWxPZmZzZXQ9byxVYy5wdXNoKEdjKSxHY319O1sic3VjY2VzcyIsIndhcm5pbmciLCJpbmZvIiwiZXJyb3IiXS5mb3JFYWNoKChmdW5jdGlvbihlKXtZY1tlXT1mdW5jdGlvbih0KXtyZXR1cm4oInN0cmluZyI9PT10eXBlb2YgdHx8T2JqZWN0KENzWyJpc1ZOb2RlIl0pKHQpKSYmKHQ9e21lc3NhZ2U6dH0pLHQudHlwZT1lLFljKHQpfX0pKSxZYy5jbG9zZT1mdW5jdGlvbihlLHQpe3ZhciBuPS0xLGk9VWMubGVuZ3RoLHI9VWMuZmlsdGVyKChmdW5jdGlvbih0LGkpe3JldHVybiB0LmlkPT09ZSYmKG49aSwhMCl9KSlbMF07aWYociYmKCJmdW5jdGlvbiI9PT10eXBlb2YgdCYmdChyKSxVYy5zcGxpY2UobiwxKSwhKGk8PTEpKSlmb3IodmFyIG89ci5wb3NpdGlvbixhPXIuZG9tLm9mZnNldEhlaWdodCxzPW47czxpLTE7cysrKVVjW3NdLnBvc2l0aW9uPT09byYmKFVjW3NdLmRvbS5zdHlsZVtyLnZlcnRpY2FsUHJvcGVydHldPXBhcnNlSW50KFVjW3NdLmRvbS5zdHlsZVtyLnZlcnRpY2FsUHJvcGVydHldLDEwKS1hLTE2KyJweCIpfSxZYy5jbG9zZUFsbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1VYy5sZW5ndGgtMTtlPj0wO2UtLSlVY1tlXS5jbG9zZSgpfTt2YXIgWGM9WWMsS2M9WGMsWmM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zbGlkZXIiLGNsYXNzOnsiaXMtdmVydGljYWwiOmUudmVydGljYWwsImVsLXNsaWRlci0td2l0aC1pbnB1dCI6ZS5zaG93SW5wdXR9LGF0dHJzOntyb2xlOiJzbGlkZXIiLCJhcmlhLXZhbHVlbWluIjplLm1pbiwiYXJpYS12YWx1ZW1heCI6ZS5tYXgsImFyaWEtb3JpZW50YXRpb24iOmUudmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIsImFyaWEtZGlzYWJsZWQiOmUuc2xpZGVyRGlzYWJsZWR9fSxbZS5zaG93SW5wdXQmJiFlLnJhbmdlP24oImVsLWlucHV0LW51bWJlciIse3JlZjoiaW5wdXQiLHN0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX2lucHV0IixhdHRyczp7c3RlcDplLnN0ZXAsZGlzYWJsZWQ6ZS5zbGlkZXJEaXNhYmxlZCxjb250cm9sczplLnNob3dJbnB1dENvbnRyb2xzLG1pbjplLm1pbixtYXg6ZS5tYXgsZGVib3VuY2U6ZS5kZWJvdW5jZSxzaXplOmUuaW5wdXRTaXplfSxvbjp7Y2hhbmdlOmUuZW1pdENoYW5nZX0sbW9kZWw6e3ZhbHVlOmUuZmlyc3RWYWx1ZSxjYWxsYmFjazpmdW5jdGlvbih0KXtlLmZpcnN0VmFsdWU9dH0sZXhwcmVzc2lvbjoiZmlyc3RWYWx1ZSJ9fSk6ZS5fZSgpLG4oImRpdiIse3JlZjoic2xpZGVyIixzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19ydW53YXkiLGNsYXNzOnsic2hvdy1pbnB1dCI6ZS5zaG93SW5wdXQsZGlzYWJsZWQ6ZS5zbGlkZXJEaXNhYmxlZH0sc3R5bGU6ZS5ydW53YXlTdHlsZSxvbjp7Y2xpY2s6ZS5vblNsaWRlckNsaWNrfX0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX2JhciIsc3R5bGU6ZS5iYXJTdHlsZX0pLG4oInNsaWRlci1idXR0b24iLHtyZWY6ImJ1dHRvbjEiLGF0dHJzOnt2ZXJ0aWNhbDplLnZlcnRpY2FsLCJ0b29sdGlwLWNsYXNzIjplLnRvb2x0aXBDbGFzc30sbW9kZWw6e3ZhbHVlOmUuZmlyc3RWYWx1ZSxjYWxsYmFjazpmdW5jdGlvbih0KXtlLmZpcnN0VmFsdWU9dH0sZXhwcmVzc2lvbjoiZmlyc3RWYWx1ZSJ9fSksZS5yYW5nZT9uKCJzbGlkZXItYnV0dG9uIix7cmVmOiJidXR0b24yIixhdHRyczp7dmVydGljYWw6ZS52ZXJ0aWNhbCwidG9vbHRpcC1jbGFzcyI6ZS50b29sdGlwQ2xhc3N9LG1vZGVsOnt2YWx1ZTplLnNlY29uZFZhbHVlLGNhbGxiYWNrOmZ1bmN0aW9uKHQpe2Uuc2Vjb25kVmFsdWU9dH0sZXhwcmVzc2lvbjoic2Vjb25kVmFsdWUifX0pOmUuX2UoKSxlLl9sKGUuc3RvcHMsKGZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUuc2hvd1N0b3BzP24oImRpdiIse2tleTppLHN0YXRpY0NsYXNzOiJlbC1zbGlkZXJfX3N0b3AiLHN0eWxlOmUuZ2V0U3RvcFN0eWxlKHQpfSk6ZS5fZSgpfSkpLGUubWFya0xpc3QubGVuZ3RoPjA/W24oImRpdiIsZS5fbChlLm1hcmtMaXN0LChmdW5jdGlvbih0LGkpe3JldHVybiBuKCJkaXYiLHtrZXk6aSxzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19zdG9wIGVsLXNsaWRlcl9fbWFya3Mtc3RvcCIsc3R5bGU6ZS5nZXRTdG9wU3R5bGUodC5wb3NpdGlvbil9KX0pKSwwKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19tYXJrcyJ9LGUuX2woZS5tYXJrTGlzdCwoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigic2xpZGVyLW1hcmtlciIse2tleTppLHN0eWxlOmUuZ2V0U3RvcFN0eWxlKHQucG9zaXRpb24pLGF0dHJzOnttYXJrOnQubWFya319KX0pKSwxKV06ZS5fZSgpXSwyKV0sMSl9LEpjPVtdO1pjLl93aXRoU3RyaXBwZWQ9ITA7dmFyIFFjPW4oNDEpLGV1PW4ubihRYyksdHU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3JlZjoiYnV0dG9uIixzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19idXR0b24td3JhcHBlciIsY2xhc3M6e2hvdmVyOmUuaG92ZXJpbmcsZHJhZ2dpbmc6ZS5kcmFnZ2luZ30sc3R5bGU6ZS53cmFwcGVyU3R5bGUsYXR0cnM6e3RhYmluZGV4OiIwIn0sb246e21vdXNlZW50ZXI6ZS5oYW5kbGVNb3VzZUVudGVyLG1vdXNlbGVhdmU6ZS5oYW5kbGVNb3VzZUxlYXZlLG1vdXNlZG93bjplLm9uQnV0dG9uRG93bix0b3VjaHN0YXJ0OmUub25CdXR0b25Eb3duLGZvY3VzOmUuaGFuZGxlTW91c2VFbnRlcixibHVyOmUuaGFuZGxlTW91c2VMZWF2ZSxrZXlkb3duOltmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJsZWZ0IiwzNyx0LmtleSxbIkxlZnQiLCJBcnJvd0xlZnQiXSl8fCJidXR0b24iaW4gdCYmMCE9PXQuYnV0dG9uP251bGw6ZS5vbkxlZnRLZXlEb3duKHQpfSxmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJyaWdodCIsMzksdC5rZXksWyJSaWdodCIsIkFycm93UmlnaHQiXSl8fCJidXR0b24iaW4gdCYmMiE9PXQuYnV0dG9uP251bGw6ZS5vblJpZ2h0S2V5RG93bih0KX0sZnVuY3Rpb24odCl7cmV0dXJuISgiYnV0dG9uImluIHQpJiZlLl9rKHQua2V5Q29kZSwiZG93biIsNDAsdC5rZXksWyJEb3duIiwiQXJyb3dEb3duIl0pP251bGw6KHQucHJldmVudERlZmF1bHQoKSxlLm9uTGVmdEtleURvd24odCkpfSxmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJ1cCIsMzgsdC5rZXksWyJVcCIsIkFycm93VXAiXSk/bnVsbDoodC5wcmV2ZW50RGVmYXVsdCgpLGUub25SaWdodEtleURvd24odCkpfV19fSxbbigiZWwtdG9vbHRpcCIse3JlZjoidG9vbHRpcCIsYXR0cnM6e3BsYWNlbWVudDoidG9wIiwicG9wcGVyLWNsYXNzIjplLnRvb2x0aXBDbGFzcyxkaXNhYmxlZDohZS5zaG93VG9vbHRpcH19LFtuKCJzcGFuIix7YXR0cnM6e3Nsb3Q6ImNvbnRlbnQifSxzbG90OiJjb250ZW50In0sW2UuX3YoZS5fcyhlLmZvcm1hdFZhbHVlKSldKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc2xpZGVyX19idXR0b24iLGNsYXNzOntob3ZlcjplLmhvdmVyaW5nLGRyYWdnaW5nOmUuZHJhZ2dpbmd9fSldKV0sMSl9LG51PVtdO3R1Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIGl1PXtuYW1lOiJFbFNsaWRlckJ1dHRvbiIsY29tcG9uZW50czp7RWxUb29sdGlwOnJ0LmF9LHByb3BzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDowfSx2ZXJ0aWNhbDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRvb2x0aXBDbGFzczpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aG92ZXJpbmc6ITEsZHJhZ2dpbmc6ITEsaXNDbGljazohMSxzdGFydFg6MCxjdXJyZW50WDowLHN0YXJ0WTowLGN1cnJlbnRZOjAsc3RhcnRQb3NpdGlvbjowLG5ld1Bvc2l0aW9uOm51bGwsb2xkVmFsdWU6dGhpcy52YWx1ZX19LGNvbXB1dGVkOntkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuc2xpZGVyRGlzYWJsZWR9LG1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQubWF4fSxtaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50Lm1pbn0sc3RlcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRwYXJlbnQuc3RlcH0sc2hvd1Rvb2x0aXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LnNob3dUb29sdGlwfSxwcmVjaXNpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LnByZWNpc2lvbn0sY3VycmVudFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMudmFsdWUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikqMTAwKyIlIn0sZW5hYmxlRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5mb3JtYXRUb29sdGlwIGluc3RhbmNlb2YgRnVuY3Rpb259LGZvcm1hdFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlRm9ybWF0JiZ0aGlzLiRwYXJlbnQuZm9ybWF0VG9vbHRpcCh0aGlzLnZhbHVlKXx8dGhpcy52YWx1ZX0sd3JhcHBlclN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWw/e2JvdHRvbTp0aGlzLmN1cnJlbnRQb3NpdGlvbn06e2xlZnQ6dGhpcy5jdXJyZW50UG9zaXRpb259fX0sd2F0Y2g6e2RyYWdnaW5nOmZ1bmN0aW9uKGUpe3RoaXMuJHBhcmVudC5kcmFnZ2luZz1lfX0sbWV0aG9kczp7ZGlzcGxheVRvb2x0aXA6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLnRvb2x0aXAmJih0aGlzLiRyZWZzLnRvb2x0aXAuc2hvd1BvcHBlcj0hMCl9LGhpZGVUb29sdGlwOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy50b29sdGlwJiYodGhpcy4kcmVmcy50b29sdGlwLnNob3dQb3BwZXI9ITEpfSxoYW5kbGVNb3VzZUVudGVyOmZ1bmN0aW9uKCl7dGhpcy5ob3ZlcmluZz0hMCx0aGlzLmRpc3BsYXlUb29sdGlwKCl9LGhhbmRsZU1vdXNlTGVhdmU6ZnVuY3Rpb24oKXt0aGlzLmhvdmVyaW5nPSExLHRoaXMuaGlkZVRvb2x0aXAoKX0sb25CdXR0b25Eb3duOmZ1bmN0aW9uKGUpe3RoaXMuZGlzYWJsZWR8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5vbkRyYWdTdGFydChlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLm9uRHJhZ2dpbmcpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMub25EcmFnZ2luZyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMub25EcmFnRW5kKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMub25EcmFnRW5kKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMub25EcmFnRW5kKSl9LG9uTGVmdEtleURvd246ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5uZXdQb3NpdGlvbj1wYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKS10aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSoxMDAsdGhpcy5zZXRQb3NpdGlvbih0aGlzLm5ld1Bvc2l0aW9uKSx0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpKX0sb25SaWdodEtleURvd246ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5uZXdQb3NpdGlvbj1wYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKSt0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSoxMDAsdGhpcy5zZXRQb3NpdGlvbih0aGlzLm5ld1Bvc2l0aW9uKSx0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpKX0sb25EcmFnU3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5kcmFnZ2luZz0hMCx0aGlzLmlzQ2xpY2s9ITAsInRvdWNoc3RhcnQiPT09ZS50eXBlJiYoZS5jbGllbnRZPWUudG91Y2hlc1swXS5jbGllbnRZLGUuY2xpZW50WD1lLnRvdWNoZXNbMF0uY2xpZW50WCksdGhpcy52ZXJ0aWNhbD90aGlzLnN0YXJ0WT1lLmNsaWVudFk6dGhpcy5zdGFydFg9ZS5jbGllbnRYLHRoaXMuc3RhcnRQb3NpdGlvbj1wYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKSx0aGlzLm5ld1Bvc2l0aW9uPXRoaXMuc3RhcnRQb3NpdGlvbn0sb25EcmFnZ2luZzpmdW5jdGlvbihlKXtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLmlzQ2xpY2s9ITEsdGhpcy5kaXNwbGF5VG9vbHRpcCgpLHRoaXMuJHBhcmVudC5yZXNldFNpemUoKTt2YXIgdD0wOyJ0b3VjaG1vdmUiPT09ZS50eXBlJiYoZS5jbGllbnRZPWUudG91Y2hlc1swXS5jbGllbnRZLGUuY2xpZW50WD1lLnRvdWNoZXNbMF0uY2xpZW50WCksdGhpcy52ZXJ0aWNhbD8odGhpcy5jdXJyZW50WT1lLmNsaWVudFksdD0odGhpcy5zdGFydFktdGhpcy5jdXJyZW50WSkvdGhpcy4kcGFyZW50LnNsaWRlclNpemUqMTAwKToodGhpcy5jdXJyZW50WD1lLmNsaWVudFgsdD0odGhpcy5jdXJyZW50WC10aGlzLnN0YXJ0WCkvdGhpcy4kcGFyZW50LnNsaWRlclNpemUqMTAwKSx0aGlzLm5ld1Bvc2l0aW9uPXRoaXMuc3RhcnRQb3NpdGlvbit0LHRoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbil9fSxvbkRyYWdFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZHJhZ2dpbmcmJihzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuZHJhZ2dpbmc9ITEsZS5oaWRlVG9vbHRpcCgpLGUuaXNDbGlja3x8KGUuc2V0UG9zaXRpb24oZS5uZXdQb3NpdGlvbiksZS4kcGFyZW50LmVtaXRDaGFuZ2UoKSl9KSwwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLm9uRHJhZ2dpbmcpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMub25EcmFnZ2luZyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMub25EcmFnRW5kKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMub25EcmFnRW5kKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMub25EcmFnRW5kKSl9LHNldFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYobnVsbCE9PWUmJiFpc05hTihlKSl7ZTwwP2U9MDplPjEwMCYmKGU9MTAwKTt2YXIgbj0xMDAvKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwKSxpPU1hdGgucm91bmQoZS9uKSxyPWkqbioodGhpcy5tYXgtdGhpcy5taW4pKi4wMSt0aGlzLm1pbjtyPXBhcnNlRmxvYXQoci50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSksdGhpcy4kZW1pdCgiaW5wdXQiLHIpLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe3QuZGlzcGxheVRvb2x0aXAoKSx0LiRyZWZzLnRvb2x0aXAmJnQuJHJlZnMudG9vbHRpcC51cGRhdGVQb3BwZXIoKX0pKSx0aGlzLmRyYWdnaW5nfHx0aGlzLnZhbHVlPT09dGhpcy5vbGRWYWx1ZXx8KHRoaXMub2xkVmFsdWU9dGhpcy52YWx1ZSl9fX19LHJ1PWl1LG91PXMocnUsdHUsbnUsITEsbnVsbCxudWxsLG51bGwpO291Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9zbGlkZXIvc3JjL2J1dHRvbi52dWUiO3ZhciBhdT1vdS5leHBvcnRzLHN1PXtuYW1lOiJFbE1hcmtlciIscHJvcHM6e21hcms6e3R5cGU6W1N0cmluZyxPYmplY3RdfX0scmVuZGVyOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzWzBdLHQ9InN0cmluZyI9PT10eXBlb2YgdGhpcy5tYXJrP3RoaXMubWFyazp0aGlzLm1hcmsubGFiZWw7cmV0dXJuIGUoImRpdiIse2NsYXNzOiJlbC1zbGlkZXJfX21hcmtzLXRleHQiLHN0eWxlOnRoaXMubWFyay5zdHlsZXx8e319LFt0XSl9fSxsdT17bmFtZToiRWxTbGlkZXIiLG1peGluczpbRS5hXSxpbmplY3Q6e2VsRm9ybTp7ZGVmYXVsdDoiIn19LHByb3BzOnttaW46e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sbWF4Ont0eXBlOk51bWJlcixkZWZhdWx0OjEwMH0sc3RlcDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSx2YWx1ZTp7dHlwZTpbTnVtYmVyLEFycmF5XSxkZWZhdWx0OjB9LHNob3dJbnB1dDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNob3dJbnB1dENvbnRyb2xzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0saW5wdXRTaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJzbWFsbCJ9LHNob3dTdG9wczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNob3dUb29sdGlwOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sZm9ybWF0VG9vbHRpcDpGdW5jdGlvbixkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHJhbmdlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMX0sdmVydGljYWw6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxoZWlnaHQ6e3R5cGU6U3RyaW5nfSxkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LGxhYmVsOnt0eXBlOlN0cmluZ30sdG9vbHRpcENsYXNzOlN0cmluZyxtYXJrczpPYmplY3R9LGNvbXBvbmVudHM6e0VsSW5wdXROdW1iZXI6ZXUuYSxTbGlkZXJCdXR0b246YXUsU2xpZGVyTWFya2VyOnN1fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2ZpcnN0VmFsdWU6bnVsbCxzZWNvbmRWYWx1ZTpudWxsLG9sZFZhbHVlOm51bGwsZHJhZ2dpbmc6ITEsc2xpZGVyU2l6ZToxfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5kcmFnZ2luZ3x8QXJyYXkuaXNBcnJheShlKSYmQXJyYXkuaXNBcnJheSh0KSYmZS5ldmVyeSgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZT09PXRbbl19KSl8fHRoaXMuc2V0VmFsdWVzKCl9LGRyYWdnaW5nOmZ1bmN0aW9uKGUpe2V8fHRoaXMuc2V0VmFsdWVzKCl9LGZpcnN0VmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yYW5nZT90aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0pOnRoaXMuJGVtaXQoImlucHV0IixlKX0sc2Vjb25kVmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJhbmdlJiZ0aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0pfSxtaW46ZnVuY3Rpb24oKXt0aGlzLnNldFZhbHVlcygpfSxtYXg6ZnVuY3Rpb24oKXt0aGlzLnNldFZhbHVlcygpfX0sbWV0aG9kczp7dmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5yYW5nZT8hW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0uZXZlcnkoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9PT1lLm9sZFZhbHVlW25dfSkpOnRoaXMudmFsdWUhPT10aGlzLm9sZFZhbHVlfSxzZXRWYWx1ZXM6ZnVuY3Rpb24oKXtpZih0aGlzLm1pbj50aGlzLm1heCljb25zb2xlLmVycm9yKCJbRWxlbWVudCBFcnJvcl1bU2xpZGVyXW1pbiBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiBtYXguIik7ZWxzZXt2YXIgZT10aGlzLnZhbHVlO3RoaXMucmFuZ2UmJkFycmF5LmlzQXJyYXkoZSk/ZVsxXTx0aGlzLm1pbj90aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWluLHRoaXMubWluXSk6ZVswXT50aGlzLm1heD90aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWF4LHRoaXMubWF4XSk6ZVswXTx0aGlzLm1pbj90aGlzLiRlbWl0KCJpbnB1dCIsW3RoaXMubWluLGVbMV1dKTplWzFdPnRoaXMubWF4P3RoaXMuJGVtaXQoImlucHV0IixbZVswXSx0aGlzLm1heF0pOih0aGlzLmZpcnN0VmFsdWU9ZVswXSx0aGlzLnNlY29uZFZhbHVlPWVbMV0sdGhpcy52YWx1ZUNoYW5nZWQoKSYmKHRoaXMuZGlzcGF0Y2goIkVsRm9ybUl0ZW0iLCJlbC5mb3JtLmNoYW5nZSIsW3RoaXMubWluVmFsdWUsdGhpcy5tYXhWYWx1ZV0pLHRoaXMub2xkVmFsdWU9ZS5zbGljZSgpKSk6dGhpcy5yYW5nZXx8Im51bWJlciIhPT10eXBlb2YgZXx8aXNOYU4oZSl8fChlPHRoaXMubWluP3RoaXMuJGVtaXQoImlucHV0Iix0aGlzLm1pbik6ZT50aGlzLm1heD90aGlzLiRlbWl0KCJpbnB1dCIsdGhpcy5tYXgpOih0aGlzLmZpcnN0VmFsdWU9ZSx0aGlzLnZhbHVlQ2hhbmdlZCgpJiYodGhpcy5kaXNwYXRjaCgiRWxGb3JtSXRlbSIsImVsLmZvcm0uY2hhbmdlIixlKSx0aGlzLm9sZFZhbHVlPWUpKSl9fSxzZXRQb3NpdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1pbitlKih0aGlzLm1heC10aGlzLm1pbikvMTAwO2lmKHRoaXMucmFuZ2Upe3ZhciBuPXZvaWQgMDtuPU1hdGguYWJzKHRoaXMubWluVmFsdWUtdCk8TWF0aC5hYnModGhpcy5tYXhWYWx1ZS10KT90aGlzLmZpcnN0VmFsdWU8dGhpcy5zZWNvbmRWYWx1ZT8iYnV0dG9uMSI6ImJ1dHRvbjIiOnRoaXMuZmlyc3RWYWx1ZT50aGlzLnNlY29uZFZhbHVlPyJidXR0b24xIjoiYnV0dG9uMiIsdGhpcy4kcmVmc1tuXS5zZXRQb3NpdGlvbihlKX1lbHNlIHRoaXMuJHJlZnMuYnV0dG9uMS5zZXRQb3NpdGlvbihlKX0sb25TbGlkZXJDbGljazpmdW5jdGlvbihlKXtpZighdGhpcy5zbGlkZXJEaXNhYmxlZCYmIXRoaXMuZHJhZ2dpbmcpe2lmKHRoaXMucmVzZXRTaXplKCksdGhpcy52ZXJ0aWNhbCl7dmFyIHQ9dGhpcy4kcmVmcy5zbGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO3RoaXMuc2V0UG9zaXRpb24oKHQtZS5jbGllbnRZKS90aGlzLnNsaWRlclNpemUqMTAwKX1lbHNle3ZhciBuPXRoaXMuJHJlZnMuc2xpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7dGhpcy5zZXRQb3NpdGlvbigoZS5jbGllbnRYLW4pL3RoaXMuc2xpZGVyU2l6ZSoxMDApfXRoaXMuZW1pdENoYW5nZSgpfX0scmVzZXRTaXplOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5zbGlkZXImJih0aGlzLnNsaWRlclNpemU9dGhpcy4kcmVmcy5zbGlkZXJbImNsaWVudCIrKHRoaXMudmVydGljYWw/IkhlaWdodCI6IldpZHRoIildKX0sZW1pdENoYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soKGZ1bmN0aW9uKCl7ZS4kZW1pdCgiY2hhbmdlIixlLnJhbmdlP1tlLm1pblZhbHVlLGUubWF4VmFsdWVdOmUudmFsdWUpfSkpfSxnZXRTdG9wU3R5bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudmVydGljYWw/e2JvdHRvbTplKyIlIn06e2xlZnQ6ZSsiJSJ9fX0sY29tcHV0ZWQ6e3N0b3BzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZighdGhpcy5zaG93U3RvcHN8fHRoaXMubWluPnRoaXMubWF4KXJldHVybltdO2lmKDA9PT10aGlzLnN0ZXApcmV0dXJuW107Zm9yKHZhciB0PSh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwLG49MTAwKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pLGk9W10scj0xO3I8dDtyKyspaS5wdXNoKHIqbik7cmV0dXJuIHRoaXMucmFuZ2U/aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0PDEwMCooZS5taW5WYWx1ZS1lLm1pbikvKGUubWF4LWUubWluKXx8dD4xMDAqKGUubWF4VmFsdWUtZS5taW4pLyhlLm1heC1lLm1pbil9KSk6aS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0PjEwMCooZS5maXJzdFZhbHVlLWUubWluKS8oZS5tYXgtZS5taW4pfSkpfSxtYXJrTGlzdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYoIXRoaXMubWFya3MpcmV0dXJuW107dmFyIHQ9T2JqZWN0LmtleXModGhpcy5tYXJrcyk7cmV0dXJuIHQubWFwKHBhcnNlRmxvYXQpLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0PD1lLm1heCYmdD49ZS5taW59KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57cG9pbnQ6dCxwb3NpdGlvbjoxMDAqKHQtZS5taW4pLyhlLm1heC1lLm1pbiksbWFyazplLm1hcmtzW3RdfX0pKX0sbWluVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdFZhbHVlLHRoaXMuc2Vjb25kVmFsdWUpfSxtYXhWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmZpcnN0VmFsdWUsdGhpcy5zZWNvbmRWYWx1ZSl9LGJhclNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5nZT8xMDAqKHRoaXMubWF4VmFsdWUtdGhpcy5taW5WYWx1ZSkvKHRoaXMubWF4LXRoaXMubWluKSsiJSI6MTAwKih0aGlzLmZpcnN0VmFsdWUtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikrIiUifSxiYXJTdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJhbmdlPzEwMCoodGhpcy5taW5WYWx1ZS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSsiJSI6IjAlIn0scHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIGU9W3RoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcF0ubWFwKChmdW5jdGlvbihlKXt2YXIgdD0oIiIrZSkuc3BsaXQoIi4iKVsxXTtyZXR1cm4gdD90Lmxlbmd0aDowfSkpO3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLGUpfSxydW53YXlTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsP3toZWlnaHQ6dGhpcy5oZWlnaHR9Ont9fSxiYXJTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsP3toZWlnaHQ6dGhpcy5iYXJTaXplLGJvdHRvbTp0aGlzLmJhclN0YXJ0fTp7d2lkdGg6dGhpcy5iYXJTaXplLGxlZnQ6dGhpcy5iYXJTdGFydH19LHNsaWRlckRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMDt0aGlzLnJhbmdlPyhBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpPyh0aGlzLmZpcnN0VmFsdWU9TWF0aC5tYXgodGhpcy5taW4sdGhpcy52YWx1ZVswXSksdGhpcy5zZWNvbmRWYWx1ZT1NYXRoLm1pbih0aGlzLm1heCx0aGlzLnZhbHVlWzFdKSk6KHRoaXMuZmlyc3RWYWx1ZT10aGlzLm1pbix0aGlzLnNlY29uZFZhbHVlPXRoaXMubWF4KSx0aGlzLm9sZFZhbHVlPVt0aGlzLmZpcnN0VmFsdWUsdGhpcy5zZWNvbmRWYWx1ZV0sZT10aGlzLmZpcnN0VmFsdWUrIi0iK3RoaXMuc2Vjb25kVmFsdWUpOigibnVtYmVyIiE9PXR5cGVvZiB0aGlzLnZhbHVlfHxpc05hTih0aGlzLnZhbHVlKT90aGlzLmZpcnN0VmFsdWU9dGhpcy5taW46dGhpcy5maXJzdFZhbHVlPU1hdGgubWluKHRoaXMubWF4LE1hdGgubWF4KHRoaXMubWluLHRoaXMudmFsdWUpKSx0aGlzLm9sZFZhbHVlPXRoaXMuZmlyc3RWYWx1ZSxlPXRoaXMuZmlyc3RWYWx1ZSksdGhpcy4kZWwuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVldGV4dCIsZSksdGhpcy4kZWwuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0aGlzLmxhYmVsP3RoaXMubGFiZWw6InNsaWRlciBiZXR3ZWVuICIrdGhpcy5taW4rIiBhbmQgIit0aGlzLm1heCksdGhpcy5yZXNldFNpemUoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLnJlc2V0U2l6ZSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLnJlc2V0U2l6ZSl9fSxjdT1sdSx1dT1zKGN1LFpjLEpjLCExLG51bGwsbnVsbCxudWxsKTt1dS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZSI7dmFyIGh1PXV1LmV4cG9ydHM7aHUuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChodS5uYW1lLGh1KX07dmFyIGR1PWh1LGZ1PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImVsLWxvYWRpbmctZmFkZSJ9LG9uOnsiYWZ0ZXItbGVhdmUiOmUuaGFuZGxlQWZ0ZXJMZWF2ZX19LFtuKCJkaXYiLHtkaXJlY3RpdmVzOlt7bmFtZToic2hvdyIscmF3TmFtZToidi1zaG93Iix2YWx1ZTplLnZpc2libGUsZXhwcmVzc2lvbjoidmlzaWJsZSJ9XSxzdGF0aWNDbGFzczoiZWwtbG9hZGluZy1tYXNrIixjbGFzczpbZS5jdXN0b21DbGFzcyx7ImlzLWZ1bGxzY3JlZW4iOmUuZnVsbHNjcmVlbn1dLHN0eWxlOntiYWNrZ3JvdW5kQ29sb3I6ZS5iYWNrZ3JvdW5kfHwiIn19LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtbG9hZGluZy1zcGlubmVyIn0sW2Uuc3Bpbm5lcj9uKCJpIix7Y2xhc3M6ZS5zcGlubmVyfSk6bigic3ZnIix7c3RhdGljQ2xhc3M6ImNpcmN1bGFyIixhdHRyczp7dmlld0JveDoiMjUgMjUgNTAgNTAifX0sW24oImNpcmNsZSIse3N0YXRpY0NsYXNzOiJwYXRoIixhdHRyczp7Y3g6IjUwIixjeToiNTAiLHI6IjIwIixmaWxsOiJub25lIn19KV0pLGUudGV4dD9uKCJwIix7c3RhdGljQ2xhc3M6ImVsLWxvYWRpbmctdGV4dCJ9LFtlLl92KGUuX3MoZS50ZXh0KSldKTplLl9lKCldKV0pXSl9LHB1PVtdO2Z1Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIG11PXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RleHQ6bnVsbCxzcGlubmVyOm51bGwsYmFja2dyb3VuZDpudWxsLGZ1bGxzY3JlZW46ITAsdmlzaWJsZTohMSxjdXN0b21DbGFzczoiIn19LG1ldGhvZHM6e2hhbmRsZUFmdGVyTGVhdmU6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KCJhZnRlci1sZWF2ZSIpfSxzZXRUZXh0OmZ1bmN0aW9uKGUpe3RoaXMudGV4dD1lfX19LGd1PW11LHZ1PXMoZ3UsZnUscHUsITEsbnVsbCxudWxsLG51bGwpO3Z1Lm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZSI7dmFyIHl1PXZ1LmV4cG9ydHMsYnU9bigzMikseHU9bi5uKGJ1KSxfdT1qaS5hLmV4dGVuZCh5dSksd3U9e2luc3RhbGw6ZnVuY3Rpb24oZSl7aWYoIWUucHJvdG90eXBlLiRpc1NlcnZlcil7dmFyIHQ9ZnVuY3Rpb24odCxpKXtpLnZhbHVlP2UubmV4dFRpY2soKGZ1bmN0aW9uKCl7aS5tb2RpZmllcnMuZnVsbHNjcmVlbj8odC5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdCh6ZVsiZ2V0U3R5bGUiXSkoZG9jdW1lbnQuYm9keSwicG9zaXRpb24iKSx0Lm9yaWdpbmFsT3ZlcmZsb3c9T2JqZWN0KHplWyJnZXRTdHlsZSJdKShkb2N1bWVudC5ib2R5LCJvdmVyZmxvdyIpLHQubWFza1N0eWxlLnpJbmRleD1TWyJQb3B1cE1hbmFnZXIiXS5uZXh0WkluZGV4KCksT2JqZWN0KHplWyJhZGRDbGFzcyJdKSh0Lm1hc2ssImlzLWZ1bGxzY3JlZW4iKSxuKGRvY3VtZW50LmJvZHksdCxpKSk6KE9iamVjdCh6ZVsicmVtb3ZlQ2xhc3MiXSkodC5tYXNrLCJpcy1mdWxsc2NyZWVuIiksaS5tb2RpZmllcnMuYm9keT8odC5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdCh6ZVsiZ2V0U3R5bGUiXSkoZG9jdW1lbnQuYm9keSwicG9zaXRpb24iKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj0idG9wIj09PWU/InNjcm9sbFRvcCI6InNjcm9sbExlZnQiO3QubWFza1N0eWxlW2VdPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV0rZG9jdW1lbnQuYm9keVtuXStkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbbl0tcGFyc2VJbnQoT2JqZWN0KHplWyJnZXRTdHlsZSJdKShkb2N1bWVudC5ib2R5LCJtYXJnaW4tIitlKSwxMCkrInB4In0pKSxbImhlaWdodCIsIndpZHRoIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5tYXNrU3R5bGVbZV09dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtlXSsicHgifSkpLG4oZG9jdW1lbnQuYm9keSx0LGkpKToodC5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdCh6ZVsiZ2V0U3R5bGUiXSkodCwicG9zaXRpb24iKSxuKHQsdCxpKSkpfSkpOih4dSgpKHQuaW5zdGFuY2UsKGZ1bmN0aW9uKGUpe2lmKHQuaW5zdGFuY2UuaGlkaW5nKXt0LmRvbVZpc2libGU9ITE7dmFyIG49aS5tb2RpZmllcnMuZnVsbHNjcmVlbnx8aS5tb2RpZmllcnMuYm9keT9kb2N1bWVudC5ib2R5OnQ7T2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKShuLCJlbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmUiKSxPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKG4sImVsLWxvYWRpbmctcGFyZW50LS1oaWRkZW4iKSx0Lmluc3RhbmNlLmhpZGluZz0hMX19KSwzMDAsITApLHQuaW5zdGFuY2UudmlzaWJsZT0hMSx0Lmluc3RhbmNlLmhpZGluZz0hMCl9LG49ZnVuY3Rpb24odCxuLGkpe24uZG9tVmlzaWJsZXx8Im5vbmUiPT09T2JqZWN0KHplWyJnZXRTdHlsZSJdKShuLCJkaXNwbGF5Iil8fCJoaWRkZW4iPT09T2JqZWN0KHplWyJnZXRTdHlsZSJdKShuLCJ2aXNpYmlsaXR5Iik/bi5kb21WaXNpYmxlJiYhMD09PW4uaW5zdGFuY2UuaGlkaW5nJiYobi5pbnN0YW5jZS52aXNpYmxlPSEwLG4uaW5zdGFuY2UuaGlkaW5nPSExKTooT2JqZWN0LmtleXMobi5tYXNrU3R5bGUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe24ubWFzay5zdHlsZVtlXT1uLm1hc2tTdHlsZVtlXX0pKSwiYWJzb2x1dGUiIT09bi5vcmlnaW5hbFBvc2l0aW9uJiYiZml4ZWQiIT09bi5vcmlnaW5hbFBvc2l0aW9uJiZPYmplY3QoemVbImFkZENsYXNzIl0pKHQsImVsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZSIpLGkubW9kaWZpZXJzLmZ1bGxzY3JlZW4mJmkubW9kaWZpZXJzLmxvY2smJk9iamVjdCh6ZVsiYWRkQ2xhc3MiXSkodCwiZWwtbG9hZGluZy1wYXJlbnQtLWhpZGRlbiIpLG4uZG9tVmlzaWJsZT0hMCx0LmFwcGVuZENoaWxkKG4ubWFzayksZS5uZXh0VGljaygoZnVuY3Rpb24oKXtuLmluc3RhbmNlLmhpZGluZz9uLmluc3RhbmNlLiRlbWl0KCJhZnRlci1sZWF2ZSIpOm4uaW5zdGFuY2UudmlzaWJsZT0hMH0pKSxuLmRvbUluc2VydGVkPSEwKX07ZS5kaXJlY3RpdmUoImxvYWRpbmciLHtiaW5kOmZ1bmN0aW9uKGUsbixpKXt2YXIgcj1lLmdldEF0dHJpYnV0ZSgiZWxlbWVudC1sb2FkaW5nLXRleHQiKSxvPWUuZ2V0QXR0cmlidXRlKCJlbGVtZW50LWxvYWRpbmctc3Bpbm5lciIpLGE9ZS5nZXRBdHRyaWJ1dGUoImVsZW1lbnQtbG9hZGluZy1iYWNrZ3JvdW5kIikscz1lLmdldEF0dHJpYnV0ZSgiZWxlbWVudC1sb2FkaW5nLWN1c3RvbS1jbGFzcyIpLGw9aS5jb250ZXh0LGM9bmV3IF91KHtlbDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkYXRhOnt0ZXh0OmwmJmxbcl18fHIsc3Bpbm5lcjpsJiZsW29dfHxvLGJhY2tncm91bmQ6bCYmbFthXXx8YSxjdXN0b21DbGFzczpsJiZsW3NdfHxzLGZ1bGxzY3JlZW46ISFuLm1vZGlmaWVycy5mdWxsc2NyZWVufX0pO2UuaW5zdGFuY2U9YyxlLm1hc2s9Yy4kZWwsZS5tYXNrU3R5bGU9e30sbi52YWx1ZSYmdChlLG4pfSx1cGRhdGU6ZnVuY3Rpb24oZSxuKXtlLmluc3RhbmNlLnNldFRleHQoZS5nZXRBdHRyaWJ1dGUoImVsZW1lbnQtbG9hZGluZy10ZXh0IikpLG4ub2xkVmFsdWUhPT1uLnZhbHVlJiZ0KGUsbil9LHVuYmluZDpmdW5jdGlvbihlLG4pe2UuZG9tSW5zZXJ0ZWQmJihlLm1hc2smJmUubWFzay5wYXJlbnROb2RlJiZlLm1hc2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLm1hc2spLHQoZSx7dmFsdWU6ITEsbW9kaWZpZXJzOm4ubW9kaWZpZXJzfSkpLGUuaW5zdGFuY2UmJmUuaW5zdGFuY2UuJGRlc3Ryb3koKX19KX19fSxTdT13dSxDdT1qaS5hLmV4dGVuZCh5dSksa3U9e3RleHQ6bnVsbCxmdWxsc2NyZWVuOiEwLGJvZHk6ITEsbG9jazohMSxjdXN0b21DbGFzczoiIn0sVHU9dm9pZCAwO0N1LnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uPSIiLEN1LnByb3RvdHlwZS5vcmlnaW5hbE92ZXJmbG93PSIiLEN1LnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5mdWxsc2NyZWVuJiYoVHU9dm9pZCAwKSx4dSgpKHRoaXMsKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZnVsbHNjcmVlbnx8ZS5ib2R5P2RvY3VtZW50LmJvZHk6ZS50YXJnZXQ7T2JqZWN0KHplWyJyZW1vdmVDbGFzcyJdKShuLCJlbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmUiKSxPYmplY3QoemVbInJlbW92ZUNsYXNzIl0pKG4sImVsLWxvYWRpbmctcGFyZW50LS1oaWRkZW4iKSxlLiRlbCYmZS4kZWwucGFyZW50Tm9kZSYmZS4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlLiRlbCksZS4kZGVzdHJveSgpfSksMzAwKSx0aGlzLnZpc2libGU9ITF9O3ZhciBNdT1mdW5jdGlvbihlLHQsbil7dmFyIGk9e307ZS5mdWxsc2NyZWVuPyhuLm9yaWdpbmFsUG9zaXRpb249T2JqZWN0KHplWyJnZXRTdHlsZSJdKShkb2N1bWVudC5ib2R5LCJwb3NpdGlvbiIpLG4ub3JpZ2luYWxPdmVyZmxvdz1PYmplY3QoemVbImdldFN0eWxlIl0pKGRvY3VtZW50LmJvZHksIm92ZXJmbG93IiksaS56SW5kZXg9U1siUG9wdXBNYW5hZ2VyIl0ubmV4dFpJbmRleCgpKTplLmJvZHk/KG4ub3JpZ2luYWxQb3NpdGlvbj1PYmplY3QoemVbImdldFN0eWxlIl0pKGRvY3VtZW50LmJvZHksInBvc2l0aW9uIiksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49InRvcCI9PT10PyJzY3JvbGxUb3AiOiJzY3JvbGxMZWZ0IjtpW3RdPWUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RdK2RvY3VtZW50LmJvZHlbbl0rZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W25dKyJweCJ9KSksWyJoZWlnaHQiLCJ3aWR0aCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lbdF09ZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdF0rInB4In0pKSk6bi5vcmlnaW5hbFBvc2l0aW9uPU9iamVjdCh6ZVsiZ2V0U3R5bGUiXSkodCwicG9zaXRpb24iKSxPYmplY3Qua2V5cyhpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuLiRlbC5zdHlsZVtlXT1pW2VdfSkpfSxFdT1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZighamkuYS5wcm90b3R5cGUuJGlzU2VydmVyKXtpZihlPWt0KCkoe30sa3UsZSksInN0cmluZyI9PT10eXBlb2YgZS50YXJnZXQmJihlLnRhcmdldD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUudGFyZ2V0KSksZS50YXJnZXQ9ZS50YXJnZXR8fGRvY3VtZW50LmJvZHksZS50YXJnZXQhPT1kb2N1bWVudC5ib2R5P2UuZnVsbHNjcmVlbj0hMTplLmJvZHk9ITAsZS5mdWxsc2NyZWVuJiZUdSlyZXR1cm4gVHU7dmFyIHQ9ZS5ib2R5P2RvY3VtZW50LmJvZHk6ZS50YXJnZXQsbj1uZXcgQ3Uoe2VsOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGRhdGE6ZX0pO3JldHVybiBNdShlLHQsbiksImFic29sdXRlIiE9PW4ub3JpZ2luYWxQb3NpdGlvbiYmImZpeGVkIiE9PW4ub3JpZ2luYWxQb3NpdGlvbiYmT2JqZWN0KHplWyJhZGRDbGFzcyJdKSh0LCJlbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmUiKSxlLmZ1bGxzY3JlZW4mJmUubG9jayYmT2JqZWN0KHplWyJhZGRDbGFzcyJdKSh0LCJlbC1sb2FkaW5nLXBhcmVudC0taGlkZGVuIiksdC5hcHBlbmRDaGlsZChuLiRlbCksamkuYS5uZXh0VGljaygoZnVuY3Rpb24oKXtuLnZpc2libGU9ITB9KSksZS5mdWxsc2NyZWVuJiYoVHU9biksbn19LEl1PUV1LER1PXtpbnN0YWxsOmZ1bmN0aW9uKGUpe2UudXNlKFN1KSxlLnByb3RvdHlwZS4kbG9hZGluZz1JdX0sZGlyZWN0aXZlOlN1LHNlcnZpY2U6SXV9LEF1PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJpIix7Y2xhc3M6ImVsLWljb24tIitlLm5hbWV9KX0sT3U9W107QXUuX3dpdGhTdHJpcHBlZD0hMDt2YXIgUHU9e25hbWU6IkVsSWNvbiIscHJvcHM6e25hbWU6U3RyaW5nfX0sTHU9UHUsTnU9cyhMdSxBdSxPdSwhMSxudWxsLG51bGwsbnVsbCk7TnUub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlIjt2YXIgUnU9TnUuZXhwb3J0cztSdS5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KFJ1Lm5hbWUsUnUpfTt2YXIgJHU9UnUsenU9e25hbWU6IkVsUm93Iixjb21wb25lbnROYW1lOiJFbFJvdyIscHJvcHM6e3RhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGl2In0sZ3V0dGVyOk51bWJlcix0eXBlOlN0cmluZyxqdXN0aWZ5Ont0eXBlOlN0cmluZyxkZWZhdWx0OiJzdGFydCJ9LGFsaWduOlN0cmluZ30sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIHRoaXMuZ3V0dGVyJiYoZS5tYXJnaW5MZWZ0PSItIit0aGlzLmd1dHRlci8yKyJweCIsZS5tYXJnaW5SaWdodD1lLm1hcmdpbkxlZnQpLGV9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUodGhpcy50YWcse2NsYXNzOlsiZWwtcm93Iiwic3RhcnQiIT09dGhpcy5qdXN0aWZ5PyJpcy1qdXN0aWZ5LSIrdGhpcy5qdXN0aWZ5OiIiLHRoaXMuYWxpZ24/ImlzLWFsaWduLSIrdGhpcy5hbGlnbjoiIix7ImVsLXJvdy0tZmxleCI6ImZsZXgiPT09dGhpcy50eXBlfV0sc3R5bGU6dGhpcy5zdHlsZX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9LGluc3RhbGw6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoenUubmFtZSx6dSl9fSxCdT16dSxGdT0iZnVuY3Rpb24iPT09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sVnU9e25hbWU6IkVsQ29sIixwcm9wczp7c3Bhbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyNH0sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJkaXYifSxvZmZzZXQ6TnVtYmVyLHB1bGw6TnVtYmVyLHB1c2g6TnVtYmVyLHhzOltOdW1iZXIsT2JqZWN0XSxzbTpbTnVtYmVyLE9iamVjdF0sbWQ6W051bWJlcixPYmplY3RdLGxnOltOdW1iZXIsT2JqZWN0XSx4bDpbTnVtYmVyLE9iamVjdF19LGNvbXB1dGVkOntndXR0ZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLiRwYXJlbnQ7d2hpbGUoZSYmIkVsUm93IiE9PWUuJG9wdGlvbnMuY29tcG9uZW50TmFtZSllPWUuJHBhcmVudDtyZXR1cm4gZT9lLmd1dHRlcjowfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1bXSxpPXt9O3JldHVybiB0aGlzLmd1dHRlciYmKGkucGFkZGluZ0xlZnQ9dGhpcy5ndXR0ZXIvMisicHgiLGkucGFkZGluZ1JpZ2h0PWkucGFkZGluZ0xlZnQpLFsic3BhbiIsIm9mZnNldCIsInB1bGwiLCJwdXNoIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7KHRbZV18fDA9PT10W2VdKSYmbi5wdXNoKCJzcGFuIiE9PWU/ImVsLWNvbC0iK2UrIi0iK3RbZV06ImVsLWNvbC0iK3RbZV0pfSkpLFsieHMiLCJzbSIsIm1kIiwibGciLCJ4bCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiPT09dHlwZW9mIHRbZV0pbi5wdXNoKCJlbC1jb2wtIitlKyItIit0W2VdKTtlbHNlIGlmKCJvYmplY3QiPT09RnUodFtlXSkpe3ZhciBpPXRbZV07T2JqZWN0LmtleXMoaSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5wdXNoKCJzcGFuIiE9PXQ/ImVsLWNvbC0iK2UrIi0iK3QrIi0iK2lbdF06ImVsLWNvbC0iK2UrIi0iK2lbdF0pfSkpfX0pKSxlKHRoaXMudGFnLHtjbGFzczpbImVsLWNvbCIsbl0sc3R5bGU6aX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9LGluc3RhbGw6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoVnUubmFtZSxWdSl9fSxqdT1WdSxIdT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigidHJhbnNpdGlvbi1ncm91cCIse2NsYXNzOlsiZWwtdXBsb2FkLWxpc3QiLCJlbC11cGxvYWQtbGlzdC0tIitlLmxpc3RUeXBlLHsiaXMtZGlzYWJsZWQiOmUuZGlzYWJsZWR9XSxhdHRyczp7dGFnOiJ1bCIsbmFtZToiZWwtbGlzdCJ9fSxlLl9sKGUuZmlsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiBuKCJsaSIse2tleTp0LnVpZCxjbGFzczpbImVsLXVwbG9hZC1saXN0X19pdGVtIiwiaXMtIit0LnN0YXR1cyxlLmZvY3VzaW5nPyJmb2N1c2luZyI6IiJdLGF0dHJzOnt0YWJpbmRleDoiMCJ9LG9uOntrZXlkb3duOmZ1bmN0aW9uKG4pe2lmKCEoImJ1dHRvbiJpbiBuKSYmZS5fayhuLmtleUNvZGUsImRlbGV0ZSIsWzgsNDZdLG4ua2V5LFsiQmFja3NwYWNlIiwiRGVsZXRlIiwiRGVsIl0pKXJldHVybiBudWxsOyFlLmRpc2FibGVkJiZlLiRlbWl0KCJyZW1vdmUiLHQpfSxmb2N1czpmdW5jdGlvbih0KXtlLmZvY3VzaW5nPSEwfSxibHVyOmZ1bmN0aW9uKHQpe2UuZm9jdXNpbmc9ITF9LGNsaWNrOmZ1bmN0aW9uKHQpe2UuZm9jdXNpbmc9ITF9fX0sW2UuX3QoImRlZmF1bHQiLFsidXBsb2FkaW5nIiE9PXQuc3RhdHVzJiZbInBpY3R1cmUtY2FyZCIsInBpY3R1cmUiXS5pbmRleE9mKGUubGlzdFR5cGUpPi0xP24oImltZyIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS10aHVtYm5haWwiLGF0dHJzOntzcmM6dC51cmwsYWx0OiIifX0pOmUuX2UoKSxuKCJhIix7c3RhdGljQ2xhc3M6ImVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWUiLG9uOntjbGljazpmdW5jdGlvbihuKXtlLmhhbmRsZUNsaWNrKHQpfX19LFtuKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tZG9jdW1lbnQifSksZS5fdihlLl9zKHQubmFtZSkrIlxuICAgICAgIildKSxuKCJsYWJlbCIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWwifSxbbigiaSIse2NsYXNzOnsiZWwtaWNvbi11cGxvYWQtc3VjY2VzcyI6ITAsImVsLWljb24tY2lyY2xlLWNoZWNrIjoidGV4dCI9PT1lLmxpc3RUeXBlLCJlbC1pY29uLWNoZWNrIjpbInBpY3R1cmUtY2FyZCIsInBpY3R1cmUiXS5pbmRleE9mKGUubGlzdFR5cGUpPi0xfX0pXSksZS5kaXNhYmxlZD9lLl9lKCk6bigiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWNsb3NlIixvbjp7Y2xpY2s6ZnVuY3Rpb24obil7ZS4kZW1pdCgicmVtb3ZlIix0KX19fSksZS5kaXNhYmxlZD9lLl9lKCk6bigiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLWNsb3NlLXRpcCJ9LFtlLl92KGUuX3MoZS50KCJlbC51cGxvYWQuZGVsZXRlVGlwIikpKV0pLCJ1cGxvYWRpbmciPT09dC5zdGF0dXM/bigiZWwtcHJvZ3Jlc3MiLHthdHRyczp7dHlwZToicGljdHVyZS1jYXJkIj09PWUubGlzdFR5cGU/ImNpcmNsZSI6ImxpbmUiLCJzdHJva2Utd2lkdGgiOiJwaWN0dXJlLWNhcmQiPT09ZS5saXN0VHlwZT82OjIscGVyY2VudGFnZTplLnBhcnNlUGVyY2VudGFnZSh0LnBlcmNlbnRhZ2UpfX0pOmUuX2UoKSwicGljdHVyZS1jYXJkIj09PWUubGlzdFR5cGU/bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zIn0sW2UuaGFuZGxlUHJldmlldyYmInBpY3R1cmUtY2FyZCI9PT1lLmxpc3RUeXBlP24oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tcHJldmlldyIsb246e2NsaWNrOmZ1bmN0aW9uKG4pe2UuaGFuZGxlUHJldmlldyh0KX19fSxbbigiaSIse3N0YXRpY0NsYXNzOiJlbC1pY29uLXpvb20taW4ifSldKTplLl9lKCksZS5kaXNhYmxlZD9lLl9lKCk6bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC11cGxvYWQtbGlzdF9faXRlbS1kZWxldGUiLG9uOntjbGljazpmdW5jdGlvbihuKXtlLiRlbWl0KCJyZW1vdmUiLHQpfX19LFtuKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tZGVsZXRlIn0pXSldKTplLl9lKCldLHtmaWxlOnR9KV0sMil9KSksMCl9LFd1PVtdO0h1Ll93aXRoU3RyaXBwZWQ9ITA7dmFyIEd1PW4oMzMpLFV1PW4ubihHdSkscXU9e25hbWU6IkVsVXBsb2FkTGlzdCIsbWl4aW5zOlt2LmFdLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Zm9jdXNpbmc6ITF9fSxjb21wb25lbnRzOntFbFByb2dyZXNzOlV1LmF9LHByb3BzOntmaWxlczp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LGhhbmRsZVByZXZpZXc6RnVuY3Rpb24sbGlzdFR5cGU6U3RyaW5nfSxtZXRob2RzOntwYXJzZVBlcmNlbnRhZ2U6ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfSxoYW5kbGVDbGljazpmdW5jdGlvbihlKXt0aGlzLmhhbmRsZVByZXZpZXcmJnRoaXMuaGFuZGxlUHJldmlldyhlKX19fSxZdT1xdSxYdT1zKFl1LEh1LFd1LCExLG51bGwsbnVsbCxudWxsKTtYdS5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtbGlzdC52dWUiO3ZhciBLdT1YdS5leHBvcnRzLFp1PW4oMjQpLEp1PW4ubihadSk7ZnVuY3Rpb24gUXUoZSx0LG4pe3ZhciBpPXZvaWQgMDtpPW4ucmVzcG9uc2U/IiIrKG4ucmVzcG9uc2UuZXJyb3J8fG4ucmVzcG9uc2UpOm4ucmVzcG9uc2VUZXh0PyIiK24ucmVzcG9uc2VUZXh0OiJmYWlsIHRvIHBvc3QgIitlKyIgIituLnN0YXR1czt2YXIgcj1uZXcgRXJyb3IoaSk7cmV0dXJuIHIuc3RhdHVzPW4uc3RhdHVzLHIubWV0aG9kPSJwb3N0IixyLnVybD1lLHJ9ZnVuY3Rpb24gZWgoZSl7dmFyIHQ9ZS5yZXNwb25zZVRleHR8fGUucmVzcG9uc2U7aWYoIXQpcmV0dXJuIHQ7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKG4pe3JldHVybiB0fX1mdW5jdGlvbiB0aChlKXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBYTUxIdHRwUmVxdWVzdCl7dmFyIHQ9bmV3IFhNTEh0dHBSZXF1ZXN0LG49ZS5hY3Rpb247dC51cGxvYWQmJih0LnVwbG9hZC5vbnByb2dyZXNzPWZ1bmN0aW9uKHQpe3QudG90YWw+MCYmKHQucGVyY2VudD10LmxvYWRlZC90LnRvdGFsKjEwMCksZS5vblByb2dyZXNzKHQpfSk7dmFyIGk9bmV3IEZvcm1EYXRhO2UuZGF0YSYmT2JqZWN0LmtleXMoZS5kYXRhKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmFwcGVuZCh0LGUuZGF0YVt0XSl9KSksaS5hcHBlbmQoZS5maWxlbmFtZSxlLmZpbGUsZS5maWxlLm5hbWUpLHQub25lcnJvcj1mdW5jdGlvbih0KXtlLm9uRXJyb3IodCl9LHQub25sb2FkPWZ1bmN0aW9uKCl7aWYodC5zdGF0dXM8MjAwfHx0LnN0YXR1cz49MzAwKXJldHVybiBlLm9uRXJyb3IoUXUobixlLHQpKTtlLm9uU3VjY2VzcyhlaCh0KSl9LHQub3BlbigicG9zdCIsbiwhMCksZS53aXRoQ3JlZGVudGlhbHMmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gdCYmKHQud2l0aENyZWRlbnRpYWxzPSEwKTt2YXIgcj1lLmhlYWRlcnN8fHt9O2Zvcih2YXIgbyBpbiByKXIuaGFzT3duUHJvcGVydHkobykmJm51bGwhPT1yW29dJiZ0LnNldFJlcXVlc3RIZWFkZXIobyxyW29dKTtyZXR1cm4gdC5zZW5kKGkpLHR9fXZhciBuaD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXVwbG9hZC1kcmFnZ2VyIixjbGFzczp7ImlzLWRyYWdvdmVyIjplLmRyYWdvdmVyfSxvbjp7ZHJvcDpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLGUub25Ecm9wKHQpfSxkcmFnb3ZlcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLGUub25EcmFnb3Zlcih0KX0sZHJhZ2xlYXZlOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxlLmRyYWdvdmVyPSExfX19LFtlLl90KCJkZWZhdWx0IildLDIpfSxpaD1bXTtuaC5fd2l0aFN0cmlwcGVkPSEwO3ZhciByaD17bmFtZToiRWxVcGxvYWREcmFnIixwcm9wczp7ZGlzYWJsZWQ6Qm9vbGVhbn0saW5qZWN0Ont1cGxvYWRlcjp7ZGVmYXVsdDoiIn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57ZHJhZ292ZXI6ITF9fSxtZXRob2RzOntvbkRyYWdvdmVyOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuZHJhZ292ZXI9ITApfSxvbkRyb3A6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuZGlzYWJsZWQmJnRoaXMudXBsb2FkZXIpe3ZhciB0PXRoaXMudXBsb2FkZXIuYWNjZXB0O3RoaXMuZHJhZ292ZXI9ITEsdD90aGlzLiRlbWl0KCJmaWxlIixbXS5zbGljZS5jYWxsKGUuZGF0YVRyYW5zZmVyLmZpbGVzKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUudHlwZSxpPWUubmFtZSxyPWkuaW5kZXhPZigiLiIpPi0xPyIuIitpLnNwbGl0KCIuIikucG9wKCk6IiIsbz1uLnJlcGxhY2UoL1wvLiokLywiIik7cmV0dXJuIHQuc3BsaXQoIiwiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0oKX0pKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpLnNvbWUoKGZ1bmN0aW9uKGUpe3JldHVybi9cLi4rJC8udGVzdChlKT9yPT09ZTovXC9cKiQvLnRlc3QoZSk/bz09PWUucmVwbGFjZSgvXC9cKiQvLCIiKTohIS9eW15cL10rXC9bXlwvXSskLy50ZXN0KGUpJiZuPT09ZX0pKX0pKSk6dGhpcy4kZW1pdCgiZmlsZSIsZS5kYXRhVHJhbnNmZXIuZmlsZXMpfX19fSxvaD1yaCxhaD1zKG9oLG5oLGloLCExLG51bGwsbnVsbCxudWxsKTthaC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtZHJhZ2dlci52dWUiO3ZhciBzaCxsaCxjaD1haC5leHBvcnRzLHVoPXtpbmplY3Q6WyJ1cGxvYWRlciJdLGNvbXBvbmVudHM6e1VwbG9hZERyYWdnZXI6Y2h9LHByb3BzOnt0eXBlOlN0cmluZyxhY3Rpb246e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJmaWxlIn0sZGF0YTpPYmplY3QsaGVhZGVyczpPYmplY3Qsd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sbXVsdGlwbGU6Qm9vbGVhbixhY2NlcHQ6U3RyaW5nLG9uU3RhcnQ6RnVuY3Rpb24sb25Qcm9ncmVzczpGdW5jdGlvbixvblN1Y2Nlc3M6RnVuY3Rpb24sb25FcnJvcjpGdW5jdGlvbixiZWZvcmVVcGxvYWQ6RnVuY3Rpb24sZHJhZzpCb29sZWFuLG9uUHJldmlldzp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKCl7fX0sb25SZW1vdmU6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbigpe319LGZpbGVMaXN0OkFycmF5LGF1dG9VcGxvYWQ6Qm9vbGVhbixsaXN0VHlwZTpTdHJpbmcsaHR0cFJlcXVlc3Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDp0aH0sZGlzYWJsZWQ6Qm9vbGVhbixsaW1pdDpOdW1iZXIsb25FeGNlZWQ6RnVuY3Rpb259LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW91c2VvdmVyOiExLHJlcXM6e319fSxtZXRob2RzOntpc0ltYWdlOmZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5pbmRleE9mKCJpbWFnZSIpfSxoYW5kbGVDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQuZmlsZXM7dCYmdGhpcy51cGxvYWRGaWxlcyh0KX0sdXBsb2FkRmlsZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLmxpbWl0JiZ0aGlzLmZpbGVMaXN0Lmxlbmd0aCtlLmxlbmd0aD50aGlzLmxpbWl0KXRoaXMub25FeGNlZWQmJnRoaXMub25FeGNlZWQoZSx0aGlzLmZpbGVMaXN0KTtlbHNle3ZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpO3RoaXMubXVsdGlwbGV8fChuPW4uc2xpY2UoMCwxKSksMCE9PW4ubGVuZ3RoJiZuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Qub25TdGFydChlKSx0LmF1dG9VcGxvYWQmJnQudXBsb2FkKGUpfSkpfX0sdXBsb2FkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodGhpcy4kcmVmcy5pbnB1dC52YWx1ZT1udWxsLCF0aGlzLmJlZm9yZVVwbG9hZClyZXR1cm4gdGhpcy5wb3N0KGUpO3ZhciBuPXRoaXMuYmVmb3JlVXBsb2FkKGUpO24mJm4udGhlbj9uLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBpPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKTtpZigiW29iamVjdCBGaWxlXSI9PT1pfHwiW29iamVjdCBCbG9iXSI9PT1pKXtmb3IodmFyIHIgaW4iW29iamVjdCBCbG9iXSI9PT1pJiYobj1uZXcgRmlsZShbbl0sZS5uYW1lLHt0eXBlOmUudHlwZX0pKSxlKWUuaGFzT3duUHJvcGVydHkocikmJihuW3JdPWVbcl0pO3QucG9zdChuKX1lbHNlIHQucG9zdChlKX0pLChmdW5jdGlvbigpe3Qub25SZW1vdmUobnVsbCxlKX0pKTohMSE9PW4/dGhpcy5wb3N0KGUpOnRoaXMub25SZW1vdmUobnVsbCxlKX0sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yZXFzO2lmKGUpe3ZhciBuPWU7ZS51aWQmJihuPWUudWlkKSx0W25dJiZ0W25dLmFib3J0KCl9ZWxzZSBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0W2VdJiZ0W2VdLmFib3J0KCksZGVsZXRlIHRbZV19KSl9LHBvc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPWUudWlkLGk9e2hlYWRlcnM6dGhpcy5oZWFkZXJzLHdpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxmaWxlOmUsZGF0YTp0aGlzLmRhdGEsZmlsZW5hbWU6dGhpcy5uYW1lLGFjdGlvbjp0aGlzLmFjdGlvbixvblByb2dyZXNzOmZ1bmN0aW9uKG4pe3Qub25Qcm9ncmVzcyhuLGUpfSxvblN1Y2Nlc3M6ZnVuY3Rpb24oaSl7dC5vblN1Y2Nlc3MoaSxlKSxkZWxldGUgdC5yZXFzW25dfSxvbkVycm9yOmZ1bmN0aW9uKGkpe3Qub25FcnJvcihpLGUpLGRlbGV0ZSB0LnJlcXNbbl19fSxyPXRoaXMuaHR0cFJlcXVlc3QoaSk7dGhpcy5yZXFzW25dPXIsciYmci50aGVuJiZyLnRoZW4oaS5vblN1Y2Nlc3MsaS5vbkVycm9yKX0saGFuZGxlQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy4kcmVmcy5pbnB1dC52YWx1ZT1udWxsLHRoaXMuJHJlZnMuaW5wdXQuY2xpY2soKSl9LGhhbmRsZUtleWRvd246ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT1lLmN1cnJlbnRUYXJnZXQmJigxMyE9PWUua2V5Q29kZSYmMzIhPT1lLmtleUNvZGV8fHRoaXMuaGFuZGxlQ2xpY2soKSl9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYW5kbGVDbGljayxuPXRoaXMuZHJhZyxpPXRoaXMubmFtZSxyPXRoaXMuaGFuZGxlQ2hhbmdlLG89dGhpcy5tdWx0aXBsZSxhPXRoaXMuYWNjZXB0LHM9dGhpcy5saXN0VHlwZSxsPXRoaXMudXBsb2FkRmlsZXMsYz10aGlzLmRpc2FibGVkLHU9dGhpcy5oYW5kbGVLZXlkb3duLGg9e2NsYXNzOnsiZWwtdXBsb2FkIjohMH0sb246e2NsaWNrOnQsa2V5ZG93bjp1fX07cmV0dXJuIGguY2xhc3NbImVsLXVwbG9hZC0tIitzXT0hMCxlKCJkaXYiLEp1KCkoW2gse2F0dHJzOnt0YWJpbmRleDoiMCJ9fV0pLFtuP2UoInVwbG9hZC1kcmFnZ2VyIix7YXR0cnM6e2Rpc2FibGVkOmN9LG9uOntmaWxlOmx9fSxbdGhpcy4kc2xvdHMuZGVmYXVsdF0pOnRoaXMuJHNsb3RzLmRlZmF1bHQsZSgiaW5wdXQiLHtjbGFzczoiZWwtdXBsb2FkX19pbnB1dCIsYXR0cnM6e3R5cGU6ImZpbGUiLG5hbWU6aSxtdWx0aXBsZTpvLGFjY2VwdDphfSxyZWY6ImlucHV0Iixvbjp7Y2hhbmdlOnJ9fSldKX19LGhoPXVoLGRoPXMoaGgsc2gsbGgsITEsbnVsbCxudWxsLG51bGwpO2RoLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWUiO3ZhciBmaD1kaC5leHBvcnRzO2Z1bmN0aW9uIHBoKCl7fXZhciBtaCxnaCx2aD17bmFtZToiRWxVcGxvYWQiLG1peGluczpbVC5hXSxjb21wb25lbnRzOntFbFByb2dyZXNzOlV1LmEsVXBsb2FkTGlzdDpLdSxVcGxvYWQ6Zmh9LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57dXBsb2FkZXI6dGhpc319LGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifX0scHJvcHM6e2FjdGlvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9LGhlYWRlcnM6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LGRhdGE6T2JqZWN0LG11bHRpcGxlOkJvb2xlYW4sbmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZmlsZSJ9LGRyYWc6Qm9vbGVhbixkcmFnZ2VyOkJvb2xlYW4sd2l0aENyZWRlbnRpYWxzOkJvb2xlYW4sc2hvd0ZpbGVMaXN0Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sYWNjZXB0OlN0cmluZyx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJzZWxlY3QifSxiZWZvcmVVcGxvYWQ6RnVuY3Rpb24sYmVmb3JlUmVtb3ZlOkZ1bmN0aW9uLG9uUmVtb3ZlOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6cGh9LG9uQ2hhbmdlOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6cGh9LG9uUHJldmlldzp7dHlwZTpGdW5jdGlvbn0sb25TdWNjZXNzOnt0eXBlOkZ1bmN0aW9uLGRlZmF1bHQ6cGh9LG9uUHJvZ3Jlc3M6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpwaH0sb25FcnJvcjp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnBofSxmaWxlTGlzdDp7dHlwZTpBcnJheSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fSxhdXRvVXBsb2FkOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sbGlzdFR5cGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InRleHQifSxodHRwUmVxdWVzdDpGdW5jdGlvbixkaXNhYmxlZDpCb29sZWFuLGxpbWl0Ok51bWJlcixvbkV4Y2VlZDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OnBofX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt1cGxvYWRGaWxlczpbXSxkcmFnT3ZlcjohMSxkcmFnaW5nOiExLHRlbXBJbmRleDoxfX0sY29tcHV0ZWQ6e3VwbG9hZERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCh0aGlzLmVsRm9ybXx8e30pLmRpc2FibGVkfX0sd2F0Y2g6e2xpc3RUeXBlOmZ1bmN0aW9uKGUpeyJwaWN0dXJlLWNhcmQiIT09ZSYmInBpY3R1cmUiIT09ZXx8KHRoaXMudXBsb2FkRmlsZXM9dGhpcy51cGxvYWRGaWxlcy5tYXAoKGZ1bmN0aW9uKGUpe2lmKCFlLnVybCYmZS5yYXcpdHJ5e2UudXJsPVVSTC5jcmVhdGVPYmplY3RVUkwoZS5yYXcpfWNhdGNoKHQpe2NvbnNvbGUuZXJyb3IoIltFbGVtZW50IEVycm9yXVtVcGxvYWRdIix0KX1yZXR1cm4gZX0pKSl9LGZpbGVMaXN0OntpbW1lZGlhdGU6ITAsaGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMudXBsb2FkRmlsZXM9ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnVpZD1lLnVpZHx8RGF0ZS5ub3coKSt0LnRlbXBJbmRleCsrLGUuc3RhdHVzPWUuc3RhdHVzfHwic3VjY2VzcyIsZX0pKX19fSxtZXRob2RzOntoYW5kbGVTdGFydDpmdW5jdGlvbihlKXtlLnVpZD1EYXRlLm5vdygpK3RoaXMudGVtcEluZGV4Kys7dmFyIHQ9e3N0YXR1czoicmVhZHkiLG5hbWU6ZS5uYW1lLHNpemU6ZS5zaXplLHBlcmNlbnRhZ2U6MCx1aWQ6ZS51aWQscmF3OmV9O2lmKCJwaWN0dXJlLWNhcmQiPT09dGhpcy5saXN0VHlwZXx8InBpY3R1cmUiPT09dGhpcy5saXN0VHlwZSl0cnl7dC51cmw9VVJMLmNyZWF0ZU9iamVjdFVSTChlKX1jYXRjaChuKXtyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJbRWxlbWVudCBFcnJvcl1bVXBsb2FkXSIsbil9dGhpcy51cGxvYWRGaWxlcy5wdXNoKHQpLHRoaXMub25DaGFuZ2UodCx0aGlzLnVwbG9hZEZpbGVzKX0saGFuZGxlUHJvZ3Jlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmdldEZpbGUodCk7dGhpcy5vblByb2dyZXNzKGUsbix0aGlzLnVwbG9hZEZpbGVzKSxuLnN0YXR1cz0idXBsb2FkaW5nIixuLnBlcmNlbnRhZ2U9ZS5wZXJjZW50fHwwfSxoYW5kbGVTdWNjZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5nZXRGaWxlKHQpO24mJihuLnN0YXR1cz0ic3VjY2VzcyIsbi5yZXNwb25zZT1lLHRoaXMub25TdWNjZXNzKGUsbix0aGlzLnVwbG9hZEZpbGVzKSx0aGlzLm9uQ2hhbmdlKG4sdGhpcy51cGxvYWRGaWxlcykpfSxoYW5kbGVFcnJvcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuZ2V0RmlsZSh0KSxpPXRoaXMudXBsb2FkRmlsZXM7bi5zdGF0dXM9ImZhaWwiLGkuc3BsaWNlKGkuaW5kZXhPZihuKSwxKSx0aGlzLm9uRXJyb3IoZSxuLHRoaXMudXBsb2FkRmlsZXMpLHRoaXMub25DaGFuZ2Uobix0aGlzLnVwbG9hZEZpbGVzKX0saGFuZGxlUmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczt0JiYoZT10aGlzLmdldEZpbGUodCkpO3ZhciBpPWZ1bmN0aW9uKCl7bi5hYm9ydChlKTt2YXIgdD1uLnVwbG9hZEZpbGVzO3Quc3BsaWNlKHQuaW5kZXhPZihlKSwxKSxuLm9uUmVtb3ZlKGUsdCl9O2lmKHRoaXMuYmVmb3JlUmVtb3ZlKXtpZigiZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuYmVmb3JlUmVtb3ZlKXt2YXIgcj10aGlzLmJlZm9yZVJlbW92ZShlLHRoaXMudXBsb2FkRmlsZXMpO3ImJnIudGhlbj9yLnRoZW4oKGZ1bmN0aW9uKCl7aSgpfSkscGgpOiExIT09ciYmaSgpfX1lbHNlIGkoKX0sZ2V0RmlsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnVwbG9hZEZpbGVzLG49dm9pZCAwO3JldHVybiB0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gbj1lLnVpZD09PXQudWlkP3Q6bnVsbCwhbn0pKSxufSxhYm9ydDpmdW5jdGlvbihlKXt0aGlzLiRyZWZzWyJ1cGxvYWQtaW5uZXIiXS5hYm9ydChlKX0sY2xlYXJGaWxlczpmdW5jdGlvbigpe3RoaXMudXBsb2FkRmlsZXM9W119LHN1Ym1pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51cGxvYWRGaWxlcy5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJyZWFkeSI9PT1lLnN0YXR1c30pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtlLiRyZWZzWyJ1cGxvYWQtaW5uZXIiXS51cGxvYWQodC5yYXcpfSkpfSxnZXRNaWdyYXRpbmdDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcHM6eyJkZWZhdWx0LWZpbGUtbGlzdCI6ImRlZmF1bHQtZmlsZS1saXN0IGlzIHJlbmFtZWQgdG8gZmlsZS1saXN0LiIsInNob3ctdXBsb2FkLWxpc3QiOiJzaG93LXVwbG9hZC1saXN0IGlzIHJlbmFtZWQgdG8gc2hvdy1maWxlLWxpc3QuIiwidGh1bWJuYWlsLW1vZGUiOiJ0aHVtYm5haWwtbW9kZSBoYXMgYmVlbiBkZXByZWNhdGVkLCB5b3UgY2FuIGltcGxlbWVudCB0aGUgc2FtZSBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoaXMgY2FzZTogaHR0cDovL2VsZW1lbnQuZWxlbWUuaW8vIy96aC1DTi9jb21wb25lbnQvdXBsb2FkI3lvbmctaHUtdG91LXhpYW5nLXNoYW5nLWNodWFuIn19fX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMudXBsb2FkRmlsZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS51cmwmJjA9PT1lLnVybC5pbmRleE9mKCJibG9iOiIpJiZVUkwucmV2b2tlT2JqZWN0VVJMKGUudXJsKX0pKX0scmVuZGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj12b2lkIDA7dGhpcy5zaG93RmlsZUxpc3QmJihuPWUoS3Use2F0dHJzOntkaXNhYmxlZDp0aGlzLnVwbG9hZERpc2FibGVkLGxpc3RUeXBlOnRoaXMubGlzdFR5cGUsZmlsZXM6dGhpcy51cGxvYWRGaWxlcyxoYW5kbGVQcmV2aWV3OnRoaXMub25QcmV2aWV3fSxvbjp7cmVtb3ZlOnRoaXMuaGFuZGxlUmVtb3ZlfX0sW2Z1bmN0aW9uKGUpe2lmKHQuJHNjb3BlZFNsb3RzLmZpbGUpcmV0dXJuIHQuJHNjb3BlZFNsb3RzLmZpbGUoe2ZpbGU6ZS5maWxlfSl9XSkpO3ZhciBpPXtwcm9wczp7dHlwZTp0aGlzLnR5cGUsZHJhZzp0aGlzLmRyYWcsYWN0aW9uOnRoaXMuYWN0aW9uLG11bHRpcGxlOnRoaXMubXVsdGlwbGUsImJlZm9yZS11cGxvYWQiOnRoaXMuYmVmb3JlVXBsb2FkLCJ3aXRoLWNyZWRlbnRpYWxzIjp0aGlzLndpdGhDcmVkZW50aWFscyxoZWFkZXJzOnRoaXMuaGVhZGVycyxuYW1lOnRoaXMubmFtZSxkYXRhOnRoaXMuZGF0YSxhY2NlcHQ6dGhpcy5hY2NlcHQsZmlsZUxpc3Q6dGhpcy51cGxvYWRGaWxlcyxhdXRvVXBsb2FkOnRoaXMuYXV0b1VwbG9hZCxsaXN0VHlwZTp0aGlzLmxpc3RUeXBlLGRpc2FibGVkOnRoaXMudXBsb2FkRGlzYWJsZWQsbGltaXQ6dGhpcy5saW1pdCwib24tZXhjZWVkIjp0aGlzLm9uRXhjZWVkLCJvbi1zdGFydCI6dGhpcy5oYW5kbGVTdGFydCwib24tcHJvZ3Jlc3MiOnRoaXMuaGFuZGxlUHJvZ3Jlc3MsIm9uLXN1Y2Nlc3MiOnRoaXMuaGFuZGxlU3VjY2Vzcywib24tZXJyb3IiOnRoaXMuaGFuZGxlRXJyb3IsIm9uLXByZXZpZXciOnRoaXMub25QcmV2aWV3LCJvbi1yZW1vdmUiOnRoaXMuaGFuZGxlUmVtb3ZlLCJodHRwLXJlcXVlc3QiOnRoaXMuaHR0cFJlcXVlc3R9LHJlZjoidXBsb2FkLWlubmVyIn0scj10aGlzLiRzbG90cy50cmlnZ2VyfHx0aGlzLiRzbG90cy5kZWZhdWx0LG89ZSgidXBsb2FkIixpLFtyXSk7cmV0dXJuIGUoImRpdiIsWyJwaWN0dXJlLWNhcmQiPT09dGhpcy5saXN0VHlwZT9uOiIiLHRoaXMuJHNsb3RzLnRyaWdnZXI/W28sdGhpcy4kc2xvdHMuZGVmYXVsdF06byx0aGlzLiRzbG90cy50aXAsInBpY3R1cmUtY2FyZCIhPT10aGlzLmxpc3RUeXBlP246IiJdKX19LHloPXZoLGJoPXMoeWgsbWgsZ2gsITEsbnVsbCxudWxsLG51bGwpO2JoLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy91cGxvYWQvc3JjL2luZGV4LnZ1ZSI7dmFyIHhoPWJoLmV4cG9ydHM7eGguaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudCh4aC5uYW1lLHhoKX07dmFyIF9oPXhoLHdoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MiLGNsYXNzOlsiZWwtcHJvZ3Jlc3MtLSIrZS50eXBlLGUuc3RhdHVzPyJpcy0iK2Uuc3RhdHVzOiIiLHsiZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dCI6IWUuc2hvd1RleHQsImVsLXByb2dyZXNzLS10ZXh0LWluc2lkZSI6ZS50ZXh0SW5zaWRlfV0sYXR0cnM6e3JvbGU6InByb2dyZXNzYmFyIiwiYXJpYS12YWx1ZW5vdyI6ZS5wZXJjZW50YWdlLCJhcmlhLXZhbHVlbWluIjoiMCIsImFyaWEtdmFsdWVtYXgiOiIxMDAifX0sWyJsaW5lIj09PWUudHlwZT9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtYmFyIn0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1iYXJfX291dGVyIixzdHlsZTp7aGVpZ2h0OmUuc3Ryb2tlV2lkdGgrInB4In19LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lciIsc3R5bGU6ZS5iYXJTdHlsZX0sW2Uuc2hvd1RleHQmJmUudGV4dEluc2lkZT9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclRleHQifSxbZS5fdihlLl9zKGUuY29udGVudCkpXSk6ZS5fZSgpXSldKV0pOm4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1wcm9ncmVzcy1jaXJjbGUiLHN0eWxlOntoZWlnaHQ6ZS53aWR0aCsicHgiLHdpZHRoOmUud2lkdGgrInB4In19LFtuKCJzdmciLHthdHRyczp7dmlld0JveDoiMCAwIDEwMCAxMDAifX0sW24oInBhdGgiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3MtY2lyY2xlX190cmFjayIsc3R5bGU6ZS50cmFpbFBhdGhTdHlsZSxhdHRyczp7ZDplLnRyYWNrUGF0aCxzdHJva2U6IiNlNWU5ZjIiLCJzdHJva2Utd2lkdGgiOmUucmVsYXRpdmVTdHJva2VXaWR0aCxmaWxsOiJub25lIn19KSxuKCJwYXRoIix7c3RhdGljQ2xhc3M6ImVsLXByb2dyZXNzLWNpcmNsZV9fcGF0aCIsc3R5bGU6ZS5jaXJjbGVQYXRoU3R5bGUsYXR0cnM6e2Q6ZS50cmFja1BhdGgsc3Ryb2tlOmUuc3Ryb2tlLGZpbGw6Im5vbmUiLCJzdHJva2UtbGluZWNhcCI6ZS5zdHJva2VMaW5lY2FwLCJzdHJva2Utd2lkdGgiOmUucGVyY2VudGFnZT9lLnJlbGF0aXZlU3Ryb2tlV2lkdGg6MH19KV0pXSksZS5zaG93VGV4dCYmIWUudGV4dEluc2lkZT9uKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcHJvZ3Jlc3NfX3RleHQiLHN0eWxlOntmb250U2l6ZTplLnByb2dyZXNzVGV4dFNpemUrInB4In19LFtlLnN0YXR1cz9uKCJpIix7Y2xhc3M6ZS5pY29uQ2xhc3N9KTpbZS5fdihlLl9zKGUuY29udGVudCkpXV0sMik6ZS5fZSgpXSl9LFNoPVtdO3doLl93aXRoU3RyaXBwZWQ9ITA7dmFyIENoPXtuYW1lOiJFbFByb2dyZXNzIixwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoibGluZSIsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVyblsibGluZSIsImNpcmNsZSIsImRhc2hib2FyZCJdLmluZGV4T2YoZSk+LTF9fSxwZXJjZW50YWdlOnt0eXBlOk51bWJlcixkZWZhdWx0OjAscmVxdWlyZWQ6ITAsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0wJiZlPD0xMDB9fSxzdGF0dXM6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bInN1Y2Nlc3MiLCJleGNlcHRpb24iLCJ3YXJuaW5nIl0uaW5kZXhPZihlKT4tMX19LHN0cm9rZVdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjZ9LHN0cm9rZUxpbmVjYXA6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6InJvdW5kIn0sdGV4dEluc2lkZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHdpZHRoOnt0eXBlOk51bWJlcixkZWZhdWx0OjEyNn0sc2hvd1RleHQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiEwfSxjb2xvcjp7dHlwZTpbU3RyaW5nLEFycmF5LEZ1bmN0aW9uXSxkZWZhdWx0OiIifSxmb3JtYXQ6RnVuY3Rpb259LGNvbXB1dGVkOntiYXJTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBlLndpZHRoPXRoaXMucGVyY2VudGFnZSsiJSIsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5nZXRDdXJyZW50Q29sb3IodGhpcy5wZXJjZW50YWdlKSxlfSxyZWxhdGl2ZVN0cm9rZVdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuc3Ryb2tlV2lkdGgvdGhpcy53aWR0aCoxMDApLnRvRml4ZWQoMSl9LHJhZGl1czpmdW5jdGlvbigpe3JldHVybiJjaXJjbGUiPT09dGhpcy50eXBlfHwiZGFzaGJvYXJkIj09PXRoaXMudHlwZT9wYXJzZUludCg1MC1wYXJzZUZsb2F0KHRoaXMucmVsYXRpdmVTdHJva2VXaWR0aCkvMiwxMCk6MH0sdHJhY2tQYXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yYWRpdXMsdD0iZGFzaGJvYXJkIj09PXRoaXMudHlwZTtyZXR1cm4iXG4gICAgICAgIE0gNTAgNTBcbiAgICAgICAgbSAwICIrKHQ/IiI6Ii0iKStlKyJcbiAgICAgICAgYSAiK2UrIiAiK2UrIiAwIDEgMSAwICIrKHQ/Ii0iOiIiKSsyKmUrIlxuICAgICAgICBhICIrZSsiICIrZSsiIDAgMSAxIDAgIisodD8iIjoiLSIpKzIqZSsiXG4gICAgICAgICJ9LHBlcmltZXRlcjpmdW5jdGlvbigpe3JldHVybiAyKk1hdGguUEkqdGhpcy5yYWRpdXN9LHJhdGU6ZnVuY3Rpb24oKXtyZXR1cm4iZGFzaGJvYXJkIj09PXRoaXMudHlwZT8uNzU6MX0sc3Ryb2tlRGFzaG9mZnNldDpmdW5jdGlvbigpe3ZhciBlPS0xKnRoaXMucGVyaW1ldGVyKigxLXRoaXMucmF0ZSkvMjtyZXR1cm4gZSsicHgifSx0cmFpbFBhdGhTdHlsZTpmdW5jdGlvbigpe3JldHVybntzdHJva2VEYXNoYXJyYXk6dGhpcy5wZXJpbWV0ZXIqdGhpcy5yYXRlKyJweCwgIit0aGlzLnBlcmltZXRlcisicHgiLHN0cm9rZURhc2hvZmZzZXQ6dGhpcy5zdHJva2VEYXNob2Zmc2V0fX0sY2lyY2xlUGF0aFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue3N0cm9rZURhc2hhcnJheTp0aGlzLnBlcmltZXRlcip0aGlzLnJhdGUqKHRoaXMucGVyY2VudGFnZS8xMDApKyJweCwgIit0aGlzLnBlcmltZXRlcisicHgiLHN0cm9rZURhc2hvZmZzZXQ6dGhpcy5zdHJva2VEYXNob2Zmc2V0LHRyYW5zaXRpb246InN0cm9rZS1kYXNoYXJyYXkgMC42cyBlYXNlIDBzLCBzdHJva2UgMC42cyBlYXNlIn19LHN0cm9rZTpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMDtpZih0aGlzLmNvbG9yKWU9dGhpcy5nZXRDdXJyZW50Q29sb3IodGhpcy5wZXJjZW50YWdlKTtlbHNlIHN3aXRjaCh0aGlzLnN0YXR1cyl7Y2FzZSJzdWNjZXNzIjplPSIjMTNjZTY2IjticmVhaztjYXNlImV4Y2VwdGlvbiI6ZT0iI2ZmNDk0OSI7YnJlYWs7Y2FzZSJ3YXJuaW5nIjplPSIjZTZhMjNjIjticmVhaztkZWZhdWx0OmU9IiMyMGEwZmYifXJldHVybiBlfSxpY29uQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4id2FybmluZyI9PT10aGlzLnN0YXR1cz8iZWwtaWNvbi13YXJuaW5nIjoibGluZSI9PT10aGlzLnR5cGU/InN1Y2Nlc3MiPT09dGhpcy5zdGF0dXM/ImVsLWljb24tY2lyY2xlLWNoZWNrIjoiZWwtaWNvbi1jaXJjbGUtY2xvc2UiOiJzdWNjZXNzIj09PXRoaXMuc3RhdHVzPyJlbC1pY29uLWNoZWNrIjoiZWwtaWNvbi1jbG9zZSJ9LHByb2dyZXNzVGV4dFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4ibGluZSI9PT10aGlzLnR5cGU/MTIrLjQqdGhpcy5zdHJva2VXaWR0aDouMTExMTExKnRoaXMud2lkdGgrMn0sY29udGVudDpmdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5mb3JtYXQ/dGhpcy5mb3JtYXQodGhpcy5wZXJjZW50YWdlKXx8IiI6dGhpcy5wZXJjZW50YWdlKyIlIn19LG1ldGhvZHM6e2dldEN1cnJlbnRDb2xvcjpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT09dHlwZW9mIHRoaXMuY29sb3I/dGhpcy5jb2xvcihlKToic3RyaW5nIj09PXR5cGVvZiB0aGlzLmNvbG9yP3RoaXMuY29sb3I6dGhpcy5nZXRMZXZlbENvbG9yKGUpfSxnZXRMZXZlbENvbG9yOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmdldENvbG9yQXJyYXkoKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnBlcmNlbnRhZ2UtdC5wZXJjZW50YWdlfSkpLG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLnBlcmNlbnRhZ2U+ZSlyZXR1cm4gdFtuXS5jb2xvcjtyZXR1cm4gdFt0Lmxlbmd0aC0xXS5jb2xvcn0sZ2V0Q29sb3JBcnJheTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29sb3IsdD0xMDAvZS5sZW5ndGg7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlLG4pe3JldHVybiJzdHJpbmciPT09dHlwZW9mIGU/e2NvbG9yOmUscGVyY2VudGFnZToobisxKSp0fTplfSkpfX19LGtoPUNoLFRoPXMoa2gsd2gsU2gsITEsbnVsbCxudWxsLG51bGwpO1RoLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlIjt2YXIgTWg9VGguZXhwb3J0cztNaC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KE1oLm5hbWUsTWgpfTt2YXIgRWg9TWgsSWg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInNwYW4iLHtzdGF0aWNDbGFzczoiZWwtc3Bpbm5lciJ9LFtuKCJzdmciLHtzdGF0aWNDbGFzczoiZWwtc3Bpbm5lci1pbm5lciIsc3R5bGU6e3dpZHRoOmUucmFkaXVzLzIrInB4IixoZWlnaHQ6ZS5yYWRpdXMvMisicHgifSxhdHRyczp7dmlld0JveDoiMCAwIDUwIDUwIn19LFtuKCJjaXJjbGUiLHtzdGF0aWNDbGFzczoicGF0aCIsYXR0cnM6e2N4OiIyNSIsY3k6IjI1IixyOiIyMCIsZmlsbDoibm9uZSIsc3Ryb2tlOmUuc3Ryb2tlQ29sb3IsInN0cm9rZS13aWR0aCI6ZS5zdHJva2VXaWR0aH19KV0pXSl9LERoPVtdO0loLl93aXRoU3RyaXBwZWQ9ITA7dmFyIEFoPXtuYW1lOiJFbFNwaW5uZXIiLHByb3BzOnt0eXBlOlN0cmluZyxyYWRpdXM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MTAwfSxzdHJva2VXaWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1fSxzdHJva2VDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiI2VmZWZlZiJ9fX0sT2g9QWgsUGg9cyhPaCxJaCxEaCwhMSxudWxsLG51bGwsbnVsbCk7UGgub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlIjt2YXIgTGg9UGguZXhwb3J0cztMaC5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KExoLm5hbWUsTGgpfTt2YXIgTmg9TGgsUmg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiZWwtbWVzc2FnZS1mYWRlIn0sb246eyJhZnRlci1sZWF2ZSI6ZS5oYW5kbGVBZnRlckxlYXZlfX0sW24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOmUudmlzaWJsZSxleHByZXNzaW9uOiJ2aXNpYmxlIn1dLGNsYXNzOlsiZWwtbWVzc2FnZSIsZS50eXBlJiYhZS5pY29uQ2xhc3M/ImVsLW1lc3NhZ2UtLSIrZS50eXBlOiIiLGUuY2VudGVyPyJpcy1jZW50ZXIiOiIiLGUuc2hvd0Nsb3NlPyJpcy1jbG9zYWJsZSI6IiIsZS5jdXN0b21DbGFzc10sc3R5bGU6ZS5wb3NpdGlvblN0eWxlLGF0dHJzOntyb2xlOiJhbGVydCJ9LG9uOnttb3VzZWVudGVyOmUuY2xlYXJUaW1lcixtb3VzZWxlYXZlOmUuc3RhcnRUaW1lcn19LFtlLmljb25DbGFzcz9uKCJpIix7Y2xhc3M6ZS5pY29uQ2xhc3N9KTpuKCJpIix7Y2xhc3M6ZS50eXBlQ2xhc3N9KSxlLl90KCJkZWZhdWx0IixbZS5kYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc/bigicCIse3N0YXRpY0NsYXNzOiJlbC1tZXNzYWdlX19jb250ZW50Iixkb21Qcm9wczp7aW5uZXJIVE1MOmUuX3MoZS5tZXNzYWdlKX19KTpuKCJwIix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2VfX2NvbnRlbnQifSxbZS5fdihlLl9zKGUubWVzc2FnZSkpXSldKSxlLnNob3dDbG9zZT9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLW1lc3NhZ2VfX2Nsb3NlQnRuIGVsLWljb24tY2xvc2UiLG9uOntjbGljazplLmNsb3NlfX0pOmUuX2UoKV0sMildKX0sJGg9W107UmguX3dpdGhTdHJpcHBlZD0hMDt2YXIgemg9e3N1Y2Nlc3M6InN1Y2Nlc3MiLGluZm86ImluZm8iLHdhcm5pbmc6Indhcm5pbmciLGVycm9yOiJlcnJvciJ9LEJoPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3Zpc2libGU6ITEsbWVzc2FnZToiIixkdXJhdGlvbjozZTMsdHlwZToiaW5mbyIsaWNvbkNsYXNzOiIiLGN1c3RvbUNsYXNzOiIiLG9uQ2xvc2U6bnVsbCxzaG93Q2xvc2U6ITEsY2xvc2VkOiExLHZlcnRpY2FsT2Zmc2V0OjIwLHRpbWVyOm51bGwsZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nOiExLGNlbnRlcjohMX19LGNvbXB1dGVkOnt0eXBlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlJiYhdGhpcy5pY29uQ2xhc3M/ImVsLW1lc3NhZ2VfX2ljb24gZWwtaWNvbi0iK3poW3RoaXMudHlwZV06IiJ9LHBvc2l0aW9uU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57dG9wOnRoaXMudmVydGljYWxPZmZzZXQrInB4In19fSx3YXRjaDp7Y2xvc2VkOmZ1bmN0aW9uKGUpe2UmJih0aGlzLnZpc2libGU9ITEpfX0sbWV0aG9kczp7aGFuZGxlQWZ0ZXJMZWF2ZTpmdW5jdGlvbigpe3RoaXMuJGRlc3Ryb3koITApLHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VkPSEwLCJmdW5jdGlvbiI9PT10eXBlb2YgdGhpcy5vbkNsb3NlJiZ0aGlzLm9uQ2xvc2UodGhpcyl9LGNsZWFyVGltZXI6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lcil9LHN0YXJ0VGltZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZHVyYXRpb24+MCYmKHRoaXMudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmNsb3NlZHx8ZS5jbG9zZSgpfSksdGhpcy5kdXJhdGlvbikpfSxrZXlkb3duOmZ1bmN0aW9uKGUpezI3PT09ZS5rZXlDb2RlJiYodGhpcy5jbG9zZWR8fHRoaXMuY2xvc2UoKSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5zdGFydFRpbWVyKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5rZXlkb3duKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMua2V5ZG93bil9fSxGaD1CaCxWaD1zKEZoLFJoLCRoLCExLG51bGwsbnVsbCxudWxsKTtWaC5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWUiO3ZhciBqaD1WaC5leHBvcnRzLEhoPWppLmEuZXh0ZW5kKGpoKSxXaD12b2lkIDAsR2g9W10sVWg9MSxxaD1mdW5jdGlvbiBlKHQpe2lmKCFqaS5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpe3Q9dHx8e30sInN0cmluZyI9PT10eXBlb2YgdCYmKHQ9e21lc3NhZ2U6dH0pO3ZhciBuPXQub25DbG9zZSxpPSJtZXNzYWdlXyIrVWgrKzt0Lm9uQ2xvc2U9ZnVuY3Rpb24oKXtlLmNsb3NlKGksbil9LFdoPW5ldyBIaCh7ZGF0YTp0fSksV2guaWQ9aSxPYmplY3QoQ3NbImlzVk5vZGUiXSkoV2gubWVzc2FnZSkmJihXaC4kc2xvdHMuZGVmYXVsdD1bV2gubWVzc2FnZV0sV2gubWVzc2FnZT1udWxsKSxXaC4kbW91bnQoKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFdoLiRlbCk7dmFyIHI9dC5vZmZzZXR8fDIwO3JldHVybiBHaC5mb3JFYWNoKChmdW5jdGlvbihlKXtyKz1lLiRlbC5vZmZzZXRIZWlnaHQrMTZ9KSksV2gudmVydGljYWxPZmZzZXQ9cixXaC52aXNpYmxlPSEwLFdoLiRlbC5zdHlsZS56SW5kZXg9U1siUG9wdXBNYW5hZ2VyIl0ubmV4dFpJbmRleCgpLEdoLnB1c2goV2gpLFdofX07WyJzdWNjZXNzIiwid2FybmluZyIsImluZm8iLCJlcnJvciJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3FoW2VdPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT09dHlwZW9mIHQmJih0PXttZXNzYWdlOnR9KSx0LnR5cGU9ZSxxaCh0KX19KSkscWguY2xvc2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49R2gubGVuZ3RoLGk9LTEscj12b2lkIDAsbz0wO288bjtvKyspaWYoZT09PUdoW29dLmlkKXtyPUdoW29dLiRlbC5vZmZzZXRIZWlnaHQsaT1vLCJmdW5jdGlvbiI9PT10eXBlb2YgdCYmdChHaFtvXSksR2guc3BsaWNlKG8sMSk7YnJlYWt9aWYoIShuPD0xfHwtMT09PWl8fGk+R2gubGVuZ3RoLTEpKWZvcih2YXIgYT1pO2E8bi0xO2ErKyl7dmFyIHM9R2hbYV0uJGVsO3Muc3R5bGVbInRvcCJdPXBhcnNlSW50KHMuc3R5bGVbInRvcCJdLDEwKS1yLTE2KyJweCJ9fSxxaC5jbG9zZUFsbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1HaC5sZW5ndGgtMTtlPj0wO2UtLSlHaFtlXS5jbG9zZSgpfTt2YXIgWWg9cWgsWGg9WWgsS2g9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1iYWRnZSJ9LFtlLl90KCJkZWZhdWx0IiksbigidHJhbnNpdGlvbiIse2F0dHJzOntuYW1lOiJlbC16b29tLWluLWNlbnRlciJ9fSxbbigic3VwIix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6IWUuaGlkZGVuJiYoZS5jb250ZW50fHwwPT09ZS5jb250ZW50fHxlLmlzRG90KSxleHByZXNzaW9uOiIhaGlkZGVuICYmIChjb250ZW50IHx8IGNvbnRlbnQgPT09IDAgfHwgaXNEb3QpIn1dLHN0YXRpY0NsYXNzOiJlbC1iYWRnZV9fY29udGVudCIsY2xhc3M6WyJlbC1iYWRnZV9fY29udGVudC0tIitlLnR5cGUseyJpcy1maXhlZCI6ZS4kc2xvdHMuZGVmYXVsdCwiaXMtZG90IjplLmlzRG90fV0sZG9tUHJvcHM6e3RleHRDb250ZW50OmUuX3MoZS5jb250ZW50KX19KV0pXSwyKX0sWmg9W107S2guX3dpdGhTdHJpcHBlZD0hMDt2YXIgSmg9e25hbWU6IkVsQmFkZ2UiLHByb3BzOnt2YWx1ZTpbU3RyaW5nLE51bWJlcl0sbWF4Ok51bWJlcixpc0RvdDpCb29sZWFuLGhpZGRlbjpCb29sZWFuLHR5cGU6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbihlKXtyZXR1cm5bInByaW1hcnkiLCJzdWNjZXNzIiwid2FybmluZyIsImluZm8iLCJkYW5nZXIiXS5pbmRleE9mKGUpPi0xfX19LGNvbXB1dGVkOntjb250ZW50OmZ1bmN0aW9uKCl7aWYoIXRoaXMuaXNEb3Qpe3ZhciBlPXRoaXMudmFsdWUsdD10aGlzLm1heDtyZXR1cm4ibnVtYmVyIj09PXR5cGVvZiBlJiYibnVtYmVyIj09PXR5cGVvZiB0JiZ0PGU/dCsiKyI6ZX19fX0sUWg9SmgsZWQ9cyhRaCxLaCxaaCwhMSxudWxsLG51bGwsbnVsbCk7ZWQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2JhZGdlL3NyYy9tYWluLnZ1ZSI7dmFyIHRkPWVkLmV4cG9ydHM7dGQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudCh0ZC5uYW1lLHRkKX07dmFyIG5kPXRkLGlkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2FyZCIsY2xhc3M6ZS5zaGFkb3c/ImlzLSIrZS5zaGFkb3crIi1zaGFkb3ciOiJpcy1hbHdheXMtc2hhZG93In0sW2UuJHNsb3RzLmhlYWRlcnx8ZS5oZWFkZXI/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcmRfX2hlYWRlciJ9LFtlLl90KCJoZWFkZXIiLFtlLl92KGUuX3MoZS5oZWFkZXIpKV0pXSwyKTplLl9lKCksbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhcmRfX2JvZHkiLHN0eWxlOmUuYm9keVN0eWxlfSxbZS5fdCgiZGVmYXVsdCIpXSwyKV0pfSxyZD1bXTtpZC5fd2l0aFN0cmlwcGVkPSEwO3ZhciBvZD17bmFtZToiRWxDYXJkIixwcm9wczp7aGVhZGVyOnt9LGJvZHlTdHlsZTp7fSxzaGFkb3c6e3R5cGU6U3RyaW5nfX19LGFkPW9kLHNkPXMoYWQsaWQscmQsITEsbnVsbCxudWxsLG51bGwpO3NkLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZSI7dmFyIGxkPXNkLmV4cG9ydHM7bGQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChsZC5uYW1lLGxkKX07dmFyIGNkPWxkLHVkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtcmF0ZSIsYXR0cnM6e3JvbGU6InNsaWRlciIsImFyaWEtdmFsdWVub3ciOmUuY3VycmVudFZhbHVlLCJhcmlhLXZhbHVldGV4dCI6ZS50ZXh0LCJhcmlhLXZhbHVlbWluIjoiMCIsImFyaWEtdmFsdWVtYXgiOmUubWF4LHRhYmluZGV4OiIwIn0sb246e2tleWRvd246ZS5oYW5kbGVLZXl9fSxbZS5fbChlLm1heCwoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigic3BhbiIse2tleTppLHN0YXRpY0NsYXNzOiJlbC1yYXRlX19pdGVtIixzdHlsZTp7Y3Vyc29yOmUucmF0ZURpc2FibGVkPyJhdXRvIjoicG9pbnRlciJ9LG9uOnttb3VzZW1vdmU6ZnVuY3Rpb24obil7ZS5zZXRDdXJyZW50VmFsdWUodCxuKX0sbW91c2VsZWF2ZTplLnJlc2V0Q3VycmVudFZhbHVlLGNsaWNrOmZ1bmN0aW9uKG4pe2Uuc2VsZWN0VmFsdWUodCl9fX0sW24oImkiLHtzdGF0aWNDbGFzczoiZWwtcmF0ZV9faWNvbiIsY2xhc3M6W2UuY2xhc3Nlc1t0LTFdLHtob3ZlcjplLmhvdmVySW5kZXg9PT10fV0sc3R5bGU6ZS5nZXRJY29uU3R5bGUodCl9LFtlLnNob3dEZWNpbWFsSWNvbih0KT9uKCJpIix7c3RhdGljQ2xhc3M6ImVsLXJhdGVfX2RlY2ltYWwiLGNsYXNzOmUuZGVjaW1hbEljb25DbGFzcyxzdHlsZTplLmRlY2ltYWxTdHlsZX0pOmUuX2UoKV0pXSl9KSksZS5zaG93VGV4dHx8ZS5zaG93U2NvcmU/bigic3BhbiIse3N0YXRpY0NsYXNzOiJlbC1yYXRlX190ZXh0IixzdHlsZTp7Y29sb3I6ZS50ZXh0Q29sb3J9fSxbZS5fdihlLl9zKGUudGV4dCkpXSk6ZS5fZSgpXSwyKX0saGQ9W107dWQuX3dpdGhTdHJpcHBlZD0hMDt2YXIgZGQ9bigxOCksZmQ9e25hbWU6IkVsUmF0ZSIsbWl4aW5zOltULmFdLGluamVjdDp7ZWxGb3JtOntkZWZhdWx0OiIifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntwb2ludGVyQXRMZWZ0SGFsZjohMCxjdXJyZW50VmFsdWU6dGhpcy52YWx1ZSxob3ZlckluZGV4Oi0xfX0scHJvcHM6e3ZhbHVlOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LGxvd1RocmVzaG9sZDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoyfSxoaWdoVGhyZXNob2xkOnt0eXBlOk51bWJlcixkZWZhdWx0OjR9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1fSxjb2xvcnM6e3R5cGU6W0FycmF5LE9iamVjdF0sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblsiI0Y3QkEyQSIsIiNGN0JBMkEiLCIjRjdCQTJBIl19fSx2b2lkQ29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6IiNDNkQxREUifSxkaXNhYmxlZFZvaWRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiI0VGRjJGNyJ9LGljb25DbGFzc2VzOnt0eXBlOltBcnJheSxPYmplY3RdLGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bImVsLWljb24tc3Rhci1vbiIsImVsLWljb24tc3Rhci1vbiIsImVsLWljb24tc3Rhci1vbiJdfX0sdm9pZEljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZWwtaWNvbi1zdGFyLW9mZiJ9LGRpc2FibGVkVm9pZEljb25DbGFzczp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZWwtaWNvbi1zdGFyLW9uIn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxhbGxvd0hhbGY6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxzaG93VGV4dDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHNob3dTY29yZTp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITF9LHRleHRDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiIzFmMmQzZCJ9LHRleHRzOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bIuaegeW3riIsIuWkseacmyIsIuS4gOiIrCIsIua7oeaEjyIsIuaDiuWWnCJdfX0sc2NvcmVUZW1wbGF0ZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDoie3ZhbHVlfSJ9fSxjb21wdXRlZDp7dGV4dDpmdW5jdGlvbigpe3ZhciBlPSIiO3JldHVybiB0aGlzLnNob3dTY29yZT9lPXRoaXMuc2NvcmVUZW1wbGF0ZS5yZXBsYWNlKC9ce1xzKnZhbHVlXHMqXH0vLHRoaXMucmF0ZURpc2FibGVkP3RoaXMudmFsdWU6dGhpcy5jdXJyZW50VmFsdWUpOnRoaXMuc2hvd1RleHQmJihlPXRoaXMudGV4dHNbTWF0aC5jZWlsKHRoaXMuY3VycmVudFZhbHVlKS0xXSksZX0sZGVjaW1hbFN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9IiI7cmV0dXJuIHRoaXMucmF0ZURpc2FibGVkP2U9dGhpcy52YWx1ZURlY2ltYWwrIiUiOnRoaXMuYWxsb3dIYWxmJiYoZT0iNTAlIikse2NvbG9yOnRoaXMuYWN0aXZlQ29sb3Isd2lkdGg6ZX19LHZhbHVlRGVjaW1hbDpmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy52YWx1ZS0xMDAqTWF0aC5mbG9vcih0aGlzLnZhbHVlKX0sY2xhc3NNYXA6ZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmljb25DbGFzc2VzKT8oZT17fSxlW3RoaXMubG93VGhyZXNob2xkXT10aGlzLmljb25DbGFzc2VzWzBdLGVbdGhpcy5oaWdoVGhyZXNob2xkXT17dmFsdWU6dGhpcy5pY29uQ2xhc3Nlc1sxXSxleGNsdWRlZDohMH0sZVt0aGlzLm1heF09dGhpcy5pY29uQ2xhc3Nlc1syXSxlKTp0aGlzLmljb25DbGFzc2VzfSxkZWNpbWFsSWNvbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVGcm9tTWFwKHRoaXMudmFsdWUsdGhpcy5jbGFzc01hcCl9LHZvaWRDbGFzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJhdGVEaXNhYmxlZD90aGlzLmRpc2FibGVkVm9pZEljb25DbGFzczp0aGlzLnZvaWRJY29uQ2xhc3N9LGFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWVGcm9tTWFwKHRoaXMuY3VycmVudFZhbHVlLHRoaXMuY2xhc3NNYXApfSxjb2xvck1hcDpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMuY29sb3JzKT8oZT17fSxlW3RoaXMubG93VGhyZXNob2xkXT10aGlzLmNvbG9yc1swXSxlW3RoaXMuaGlnaFRocmVzaG9sZF09e3ZhbHVlOnRoaXMuY29sb3JzWzFdLGV4Y2x1ZGVkOiEwfSxlW3RoaXMubWF4XT10aGlzLmNvbG9yc1syXSxlKTp0aGlzLmNvbG9yc30sYWN0aXZlQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZUZyb21NYXAodGhpcy5jdXJyZW50VmFsdWUsdGhpcy5jb2xvck1hcCl9LGNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PTAsbj10aGlzLmN1cnJlbnRWYWx1ZTtmb3IodGhpcy5hbGxvd0hhbGYmJnRoaXMuY3VycmVudFZhbHVlIT09TWF0aC5mbG9vcih0aGlzLmN1cnJlbnRWYWx1ZSkmJm4tLTt0PG47dCsrKWUucHVzaCh0aGlzLmFjdGl2ZUNsYXNzKTtmb3IoO3Q8dGhpcy5tYXg7dCsrKWUucHVzaCh0aGlzLnZvaWRDbGFzcyk7cmV0dXJuIGV9LHJhdGVEaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGVkfHwodGhpcy5lbEZvcm18fHt9KS5kaXNhYmxlZH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRWYWx1ZT1lLHRoaXMucG9pbnRlckF0TGVmdEhhbGY9dGhpcy52YWx1ZSE9PU1hdGguZmxvb3IodGhpcy52YWx1ZSl9fSxtZXRob2RzOntnZXRNaWdyYXRpbmdDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm57cHJvcHM6eyJ0ZXh0LXRlbXBsYXRlIjoidGV4dC10ZW1wbGF0ZSBpcyByZW5hbWVkIHRvIHNjb3JlLXRlbXBsYXRlLiJ9fX0sZ2V0VmFsdWVGcm9tTWFwOmZ1bmN0aW9uKGUsdCl7dmFyIG49T2JqZWN0LmtleXModCkuZmlsdGVyKChmdW5jdGlvbihuKXt2YXIgaT10W25dLHI9ISFPYmplY3QoZGRbImlzT2JqZWN0Il0pKGkpJiZpLmV4Y2x1ZGVkO3JldHVybiByP2U8bjplPD1ufSkpLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKSxpPXRbblswXV07cmV0dXJuIE9iamVjdChkZFsiaXNPYmplY3QiXSkoaSk/aS52YWx1ZTppfHwiIn0sc2hvd0RlY2ltYWxJY29uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmF0ZURpc2FibGVkJiZ0aGlzLnZhbHVlRGVjaW1hbD4wJiZlLTE8dGhpcy52YWx1ZSYmZT50aGlzLnZhbHVlLG49dGhpcy5hbGxvd0hhbGYmJnRoaXMucG9pbnRlckF0TGVmdEhhbGYmJmUtLjU8PXRoaXMuY3VycmVudFZhbHVlJiZlPnRoaXMuY3VycmVudFZhbHVlO3JldHVybiB0fHxufSxnZXRJY29uU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yYXRlRGlzYWJsZWQ/dGhpcy5kaXNhYmxlZFZvaWRDb2xvcjp0aGlzLnZvaWRDb2xvcjtyZXR1cm57Y29sb3I6ZTw9dGhpcy5jdXJyZW50VmFsdWU/dGhpcy5hY3RpdmVDb2xvcjp0fX0sc2VsZWN0VmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5yYXRlRGlzYWJsZWR8fCh0aGlzLmFsbG93SGFsZiYmdGhpcy5wb2ludGVyQXRMZWZ0SGFsZj8odGhpcy4kZW1pdCgiaW5wdXQiLHRoaXMuY3VycmVudFZhbHVlKSx0aGlzLiRlbWl0KCJjaGFuZ2UiLHRoaXMuY3VycmVudFZhbHVlKSk6KHRoaXMuJGVtaXQoImlucHV0IixlKSx0aGlzLiRlbWl0KCJjaGFuZ2UiLGUpKSl9LGhhbmRsZUtleTpmdW5jdGlvbihlKXtpZighdGhpcy5yYXRlRGlzYWJsZWQpe3ZhciB0PXRoaXMuY3VycmVudFZhbHVlLG49ZS5rZXlDb2RlOzM4PT09bnx8Mzk9PT1uPyh0aGlzLmFsbG93SGFsZj90Kz0uNTp0Kz0xLGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKTozNyE9PW4mJjQwIT09bnx8KHRoaXMuYWxsb3dIYWxmP3QtPS41OnQtPTEsZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpLHQ9dDwwPzA6dCx0PXQ+dGhpcy5tYXg/dGhpcy5tYXg6dCx0aGlzLiRlbWl0KCJpbnB1dCIsdCksdGhpcy4kZW1pdCgiY2hhbmdlIix0KX19LHNldEN1cnJlbnRWYWx1ZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLnJhdGVEaXNhYmxlZCl7aWYodGhpcy5hbGxvd0hhbGYpe3ZhciBuPXQudGFyZ2V0O09iamVjdCh6ZVsiaGFzQ2xhc3MiXSkobiwiZWwtcmF0ZV9faXRlbSIpJiYobj1uLnF1ZXJ5U2VsZWN0b3IoIi5lbC1yYXRlX19pY29uIikpLE9iamVjdCh6ZVsiaGFzQ2xhc3MiXSkobiwiZWwtcmF0ZV9fZGVjaW1hbCIpJiYobj1uLnBhcmVudE5vZGUpLHRoaXMucG9pbnRlckF0TGVmdEhhbGY9Mip0Lm9mZnNldFg8PW4uY2xpZW50V2lkdGgsdGhpcy5jdXJyZW50VmFsdWU9dGhpcy5wb2ludGVyQXRMZWZ0SGFsZj9lLS41OmV9ZWxzZSB0aGlzLmN1cnJlbnRWYWx1ZT1lO3RoaXMuaG92ZXJJbmRleD1lfX0scmVzZXRDdXJyZW50VmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJhdGVEaXNhYmxlZHx8KHRoaXMuYWxsb3dIYWxmJiYodGhpcy5wb2ludGVyQXRMZWZ0SGFsZj10aGlzLnZhbHVlIT09TWF0aC5mbG9vcih0aGlzLnZhbHVlKSksdGhpcy5jdXJyZW50VmFsdWU9dGhpcy52YWx1ZSx0aGlzLmhvdmVySW5kZXg9LTEpfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudmFsdWV8fHRoaXMuJGVtaXQoImlucHV0IiwwKX19LHBkPWZkLG1kPXMocGQsdWQsaGQsITEsbnVsbCxudWxsLG51bGwpO21kLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZSI7dmFyIGdkPW1kLmV4cG9ydHM7Z2QuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChnZC5uYW1lLGdkKX07dmFyIHZkPWdkLHlkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcHMiLGNsYXNzOlshZS5zaW1wbGUmJiJlbC1zdGVwcy0tIitlLmRpcmVjdGlvbixlLnNpbXBsZSYmImVsLXN0ZXBzLS1zaW1wbGUiXX0sW2UuX3QoImRlZmF1bHQiKV0sMil9LGJkPVtdO3lkLl93aXRoU3RyaXBwZWQ9ITA7dmFyIHhkPXtuYW1lOiJFbFN0ZXBzIixtaXhpbnM6W1QuYV0scHJvcHM6e3NwYWNlOltOdW1iZXIsU3RyaW5nXSxhY3RpdmU6TnVtYmVyLGRpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiaG9yaXpvbnRhbCJ9LGFsaWduQ2VudGVyOkJvb2xlYW4sc2ltcGxlOkJvb2xlYW4sZmluaXNoU3RhdHVzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJmaW5pc2gifSxwcm9jZXNzU3RhdHVzOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJwcm9jZXNzIn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c3RlcHM6W10sc3RlcE9mZnNldDowfX0sbWV0aG9kczp7Z2V0TWlncmF0aW5nQ29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJue3Byb3BzOntjZW50ZXI6ImNlbnRlciBpcyByZW1vdmVkLiJ9fX19LHdhdGNoOnthY3RpdmU6ZnVuY3Rpb24oZSx0KXt0aGlzLiRlbWl0KCJjaGFuZ2UiLGUsdCl9LHN0ZXBzOmZ1bmN0aW9uKGUpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtlLmluZGV4PXR9KSl9fX0sX2Q9eGQsd2Q9cyhfZCx5ZCxiZCwhMSxudWxsLG51bGwsbnVsbCk7d2Qub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwcy52dWUiO3ZhciBTZD13ZC5leHBvcnRzO1NkLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoU2QubmFtZSxTZCl9O3ZhciBDZD1TZCxrZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXAiLGNsYXNzOlshZS5pc1NpbXBsZSYmImlzLSIrZS4kcGFyZW50LmRpcmVjdGlvbixlLmlzU2ltcGxlJiYiaXMtc2ltcGxlIixlLmlzTGFzdCYmIWUuc3BhY2UmJiFlLmlzQ2VudGVyJiYiaXMtZmxleCIsZS5pc0NlbnRlciYmIWUuaXNWZXJ0aWNhbCYmIWUuaXNTaW1wbGUmJiJpcy1jZW50ZXIiXSxzdHlsZTplLnN0eWxlfSxbbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2hlYWQiLGNsYXNzOiJpcy0iK2UuY3VycmVudFN0YXR1c30sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19saW5lIixzdHlsZTplLmlzTGFzdD8iIjp7bWFyZ2luUmlnaHQ6ZS4kcGFyZW50LnN0ZXBPZmZzZXQrInB4In19LFtuKCJpIix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2xpbmUtaW5uZXIiLHN0eWxlOmUubGluZVN0eWxlfSldKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faWNvbiIsY2xhc3M6ImlzLSIrKGUuaWNvbj8iaWNvbiI6InRleHQiKX0sWyJzdWNjZXNzIiE9PWUuY3VycmVudFN0YXR1cyYmImVycm9yIiE9PWUuY3VycmVudFN0YXR1cz9lLl90KCJpY29uIixbZS5pY29uP24oImkiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faWNvbi1pbm5lciIsY2xhc3M6W2UuaWNvbl19KTplLl9lKCksZS5pY29ufHxlLmlzU2ltcGxlP2UuX2UoKTpuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faWNvbi1pbm5lciJ9LFtlLl92KGUuX3MoZS5pbmRleCsxKSldKV0pOm4oImkiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9faWNvbi1pbm5lciBpcy1zdGF0dXMiLGNsYXNzOlsiZWwtaWNvbi0iKygic3VjY2VzcyI9PT1lLmN1cnJlbnRTdGF0dXM/ImNoZWNrIjoiY2xvc2UiKV19KV0sMildKSxuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtc3RlcF9fbWFpbiJ9LFtuKCJkaXYiLHtyZWY6InRpdGxlIixzdGF0aWNDbGFzczoiZWwtc3RlcF9fdGl0bGUiLGNsYXNzOlsiaXMtIitlLmN1cnJlbnRTdGF0dXNdfSxbZS5fdCgidGl0bGUiLFtlLl92KGUuX3MoZS50aXRsZSkpXSldLDIpLGUuaXNTaW1wbGU/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLXN0ZXBfX2Fycm93In0pOm4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1zdGVwX19kZXNjcmlwdGlvbiIsY2xhc3M6WyJpcy0iK2UuY3VycmVudFN0YXR1c119LFtlLl90KCJkZXNjcmlwdGlvbiIsW2UuX3YoZS5fcyhlLmRlc2NyaXB0aW9uKSldKV0sMildKV0pfSxUZD1bXTtrZC5fd2l0aFN0cmlwcGVkPSEwO3ZhciBNZD17bmFtZToiRWxTdGVwIixwcm9wczp7dGl0bGU6U3RyaW5nLGljb246U3RyaW5nLGRlc2NyaXB0aW9uOlN0cmluZyxzdGF0dXM6U3RyaW5nfSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luZGV4Oi0xLGxpbmVTdHlsZTp7fSxpbnRlcm5hbFN0YXR1czoiIn19LGJlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuJHBhcmVudC5zdGVwcy5wdXNoKHRoaXMpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcGFyZW50LnN0ZXBzLHQ9ZS5pbmRleE9mKHRoaXMpO3Q+PTAmJmUuc3BsaWNlKHQsMSl9LGNvbXB1dGVkOntjdXJyZW50U3RhdHVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhdHVzfHx0aGlzLmludGVybmFsU3RhdHVzfSxwcmV2U3RhdHVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcGFyZW50LnN0ZXBzW3RoaXMuaW5kZXgtMV07cmV0dXJuIGU/ZS5jdXJyZW50U3RhdHVzOiJ3YWl0In0saXNDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LmFsaWduQ2VudGVyfSxpc1ZlcnRpY2FsOmZ1bmN0aW9uKCl7cmV0dXJuInZlcnRpY2FsIj09PXRoaXMuJHBhcmVudC5kaXJlY3Rpb259LGlzU2ltcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5zaW1wbGV9LGlzTGFzdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJHBhcmVudDtyZXR1cm4gZS5zdGVwc1tlLnN0ZXBzLmxlbmd0aC0xXT09PXRoaXN9LHN0ZXBzQ291bnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LnN0ZXBzLmxlbmd0aH0sc3BhY2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmlzU2ltcGxlLHQ9dGhpcy4kcGFyZW50LnNwYWNlO3JldHVybiBlPyIiOnR9LHN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLiRwYXJlbnQsbj10LnN0ZXBzLmxlbmd0aCxpPSJudW1iZXIiPT09dHlwZW9mIHRoaXMuc3BhY2U/dGhpcy5zcGFjZSsicHgiOnRoaXMuc3BhY2U/dGhpcy5zcGFjZToxMDAvKG4tKHRoaXMuaXNDZW50ZXI/MDoxKSkrIiUiO3JldHVybiBlLmZsZXhCYXNpcz1pLHRoaXMuaXNWZXJ0aWNhbHx8KHRoaXMuaXNMYXN0P2UubWF4V2lkdGg9MTAwL3RoaXMuc3RlcHNDb3VudCsiJSI6ZS5tYXJnaW5SaWdodD0tdGhpcy4kcGFyZW50LnN0ZXBPZmZzZXQrInB4IiksZX19LG1ldGhvZHM6e3VwZGF0ZVN0YXR1czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLiRwYXJlbnQuJGNoaWxkcmVuW3RoaXMuaW5kZXgtMV07ZT50aGlzLmluZGV4P3RoaXMuaW50ZXJuYWxTdGF0dXM9dGhpcy4kcGFyZW50LmZpbmlzaFN0YXR1czplPT09dGhpcy5pbmRleCYmImVycm9yIiE9PXRoaXMucHJldlN0YXR1cz90aGlzLmludGVybmFsU3RhdHVzPXRoaXMuJHBhcmVudC5wcm9jZXNzU3RhdHVzOnRoaXMuaW50ZXJuYWxTdGF0dXM9IndhaXQiLHQmJnQuY2FsY1Byb2dyZXNzKHRoaXMuaW50ZXJuYWxTdGF0dXMpfSxjYWxjUHJvZ3Jlc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9MTAwLG49e307bi50cmFuc2l0aW9uRGVsYXk9MTUwKnRoaXMuaW5kZXgrIm1zIixlPT09dGhpcy4kcGFyZW50LnByb2Nlc3NTdGF0dXM/KHRoaXMuY3VycmVudFN0YXR1cyx0PTApOiJ3YWl0Ij09PWUmJih0PTAsbi50cmFuc2l0aW9uRGVsYXk9LTE1MCp0aGlzLmluZGV4KyJtcyIpLG4uYm9yZGVyV2lkdGg9dCYmIXRoaXMuaXNTaW1wbGU/IjFweCI6MCwidmVydGljYWwiPT09dGhpcy4kcGFyZW50LmRpcmVjdGlvbj9uLmhlaWdodD10KyIlIjpuLndpZHRoPXQrIiUiLHRoaXMubGluZVN0eWxlPW59fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuJHdhdGNoKCJpbmRleCIsKGZ1bmN0aW9uKG4pe2UuJHdhdGNoKCIkcGFyZW50LmFjdGl2ZSIsZS51cGRhdGVTdGF0dXMse2ltbWVkaWF0ZTohMH0pLGUuJHdhdGNoKCIkcGFyZW50LnByb2Nlc3NTdGF0dXMiLChmdW5jdGlvbigpe3ZhciB0PWUuJHBhcmVudC5hY3RpdmU7ZS51cGRhdGVTdGF0dXModCl9KSx7aW1tZWRpYXRlOiEwfSksdCgpfSkpfX0sRWQ9TWQsSWQ9cyhFZCxrZCxUZCwhMSxudWxsLG51bGwsbnVsbCk7SWQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwLnZ1ZSI7dmFyIERkPUlkLmV4cG9ydHM7RGQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChEZC5uYW1lLERkKX07dmFyIEFkPURkLE9kPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtjbGFzczplLmNhcm91c2VsQ2xhc3Nlcyxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24oKSxlLmhhbmRsZU1vdXNlRW50ZXIodCl9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVNb3VzZUxlYXZlKHQpfX19LFtuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2NvbnRhaW5lciIsc3R5bGU6e2hlaWdodDplLmhlaWdodH19LFtlLmFycm93RGlzcGxheT9uKCJ0cmFuc2l0aW9uIix7YXR0cnM6e25hbWU6ImNhcm91c2VsLWFycm93LWxlZnQifX0sW24oImJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOigiYWx3YXlzIj09PWUuYXJyb3d8fGUuaG92ZXIpJiYoZS5sb29wfHxlLmFjdGl2ZUluZGV4PjApLGV4cHJlc3Npb246IihhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXIpICYmIChsb29wIHx8IGFjdGl2ZUluZGV4ID4gMCkifV0sc3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19hcnJvdyBlbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnQiLGF0dHJzOnt0eXBlOiJidXR0b24ifSxvbjp7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlLmhhbmRsZUJ1dHRvbkVudGVyKCJsZWZ0Iil9LG1vdXNlbGVhdmU6ZS5oYW5kbGVCdXR0b25MZWF2ZSxjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLGUudGhyb3R0bGVkQXJyb3dDbGljayhlLmFjdGl2ZUluZGV4LTEpfX19LFtuKCJpIix7c3RhdGljQ2xhc3M6ImVsLWljb24tYXJyb3ctbGVmdCJ9KV0pXSk6ZS5fZSgpLGUuYXJyb3dEaXNwbGF5P24oInRyYW5zaXRpb24iLHthdHRyczp7bmFtZToiY2Fyb3VzZWwtYXJyb3ctcmlnaHQifX0sW24oImJ1dHRvbiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOigiYWx3YXlzIj09PWUuYXJyb3d8fGUuaG92ZXIpJiYoZS5sb29wfHxlLmFjdGl2ZUluZGV4PGUuaXRlbXMubGVuZ3RoLTEpLGV4cHJlc3Npb246IihhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXIpICYmIChsb29wIHx8IGFjdGl2ZUluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSkifV0sc3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19hcnJvdyBlbC1jYXJvdXNlbF9fYXJyb3ctLXJpZ2h0IixhdHRyczp7dHlwZToiYnV0dG9uIn0sb246e21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZS5oYW5kbGVCdXR0b25FbnRlcigicmlnaHQiKX0sbW91c2VsZWF2ZTplLmhhbmRsZUJ1dHRvbkxlYXZlLGNsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS50aHJvdHRsZWRBcnJvd0NsaWNrKGUuYWN0aXZlSW5kZXgrMSl9fX0sW24oImkiLHtzdGF0aWNDbGFzczoiZWwtaWNvbi1hcnJvdy1yaWdodCJ9KV0pXSk6ZS5fZSgpLGUuX3QoImRlZmF1bHQiKV0sMiksIm5vbmUiIT09ZS5pbmRpY2F0b3JQb3NpdGlvbj9uKCJ1bCIse2NsYXNzOmUuaW5kaWNhdG9yc0NsYXNzZXN9LGUuX2woZS5pdGVtcywoZnVuY3Rpb24odCxpKXtyZXR1cm4gbigibGkiLHtrZXk6aSxjbGFzczpbImVsLWNhcm91c2VsX19pbmRpY2F0b3IiLCJlbC1jYXJvdXNlbF9faW5kaWNhdG9yLS0iK2UuZGlyZWN0aW9uLHsiaXMtYWN0aXZlIjppPT09ZS5hY3RpdmVJbmRleH1dLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UudGhyb3R0bGVkSW5kaWNhdG9ySG92ZXIoaSl9LGNsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCksZS5oYW5kbGVJbmRpY2F0b3JDbGljayhpKX19fSxbbigiYnV0dG9uIix7c3RhdGljQ2xhc3M6ImVsLWNhcm91c2VsX19idXR0b24ifSxbZS5oYXNMYWJlbD9uKCJzcGFuIixbZS5fdihlLl9zKHQubGFiZWwpKV0pOmUuX2UoKV0pXSl9KSksMCk6ZS5fZSgpXSl9LFBkPVtdO09kLl93aXRoU3RyaXBwZWQ9ITA7dmFyIExkPW4oMjUpLE5kPW4ubihMZCksUmQ9e25hbWU6IkVsQ2Fyb3VzZWwiLHByb3BzOntpbml0aWFsSW5kZXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0saGVpZ2h0OlN0cmluZyx0cmlnZ2VyOnt0eXBlOlN0cmluZyxkZWZhdWx0OiJob3ZlciJ9LGF1dG9wbGF5Ont0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0saW50ZXJ2YWw6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6M2UzfSxpbmRpY2F0b3JQb3NpdGlvbjpTdHJpbmcsaW5kaWNhdG9yOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sYXJyb3c6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6ImhvdmVyIn0sdHlwZTpTdHJpbmcsbG9vcDp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6ITB9LGRpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiaG9yaXpvbnRhbCIsdmFsaWRhdG9yOmZ1bmN0aW9uKGUpe3JldHVybi0xIT09WyJob3Jpem9udGFsIiwidmVydGljYWwiXS5pbmRleE9mKGUpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aXRlbXM6W10sYWN0aXZlSW5kZXg6LTEsY29udGFpbmVyV2lkdGg6MCx0aW1lcjpudWxsLGhvdmVyOiExfX0sY29tcHV0ZWQ6e2Fycm93RGlzcGxheTpmdW5jdGlvbigpe3JldHVybiJuZXZlciIhPT10aGlzLmFycm93JiYidmVydGljYWwiIT09dGhpcy5kaXJlY3Rpb259LGhhc0xhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXRlbXMuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubGFiZWwudG9TdHJpbmcoKS5sZW5ndGg+MH0pKX0sY2Fyb3VzZWxDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIGU9WyJlbC1jYXJvdXNlbCIsImVsLWNhcm91c2VsLS0iK3RoaXMuZGlyZWN0aW9uXTtyZXR1cm4iY2FyZCI9PT10aGlzLnR5cGUmJmUucHVzaCgiZWwtY2Fyb3VzZWwtLWNhcmQiKSxlfSxpbmRpY2F0b3JzQ2xhc3NlczpmdW5jdGlvbigpe3ZhciBlPVsiZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMiLCJlbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tIit0aGlzLmRpcmVjdGlvbl07cmV0dXJuIHRoaXMuaGFzTGFiZWwmJmUucHVzaCgiZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVscyIpLCJvdXRzaWRlIiE9PXRoaXMuaW5kaWNhdG9yUG9zaXRpb24mJiJjYXJkIiE9PXRoaXMudHlwZXx8ZS5wdXNoKCJlbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tb3V0c2lkZSIpLGV9fSx3YXRjaDp7aXRlbXM6ZnVuY3Rpb24oZSl7ZS5sZW5ndGg+MCYmdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuaW5pdGlhbEluZGV4KX0sYWN0aXZlSW5kZXg6ZnVuY3Rpb24oZSx0KXt0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKHQpLHQ+LTEmJnRoaXMuJGVtaXQoImNoYW5nZSIsZSx0KX0sYXV0b3BsYXk6ZnVuY3Rpb24oZSl7ZT90aGlzLnN0YXJ0VGltZXIoKTp0aGlzLnBhdXNlVGltZXIoKX0sbG9vcDpmdW5jdGlvbigpe3RoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZUluZGV4KX0saW50ZXJ2YWw6ZnVuY3Rpb24oKXt0aGlzLnBhdXNlVGltZXIoKSx0aGlzLnN0YXJ0VGltZXIoKX19LG1ldGhvZHM6e2hhbmRsZU1vdXNlRW50ZXI6ZnVuY3Rpb24oKXt0aGlzLmhvdmVyPSEwLHRoaXMucGF1c2VUaW1lcigpfSxoYW5kbGVNb3VzZUxlYXZlOmZ1bmN0aW9uKCl7dGhpcy5ob3Zlcj0hMSx0aGlzLnN0YXJ0VGltZXIoKX0saXRlbUluU3RhZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLml0ZW1zLmxlbmd0aDtyZXR1cm4gdD09PW4tMSYmZS5pblN0YWdlJiZ0aGlzLml0ZW1zWzBdLmFjdGl2ZXx8ZS5pblN0YWdlJiZ0aGlzLml0ZW1zW3QrMV0mJnRoaXMuaXRlbXNbdCsxXS5hY3RpdmU/ImxlZnQiOiEhKDA9PT10JiZlLmluU3RhZ2UmJnRoaXMuaXRlbXNbbi0xXS5hY3RpdmV8fGUuaW5TdGFnZSYmdGhpcy5pdGVtc1t0LTFdJiZ0aGlzLml0ZW1zW3QtMV0uYWN0aXZlKSYmInJpZ2h0In0saGFuZGxlQnV0dG9uRW50ZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczsidmVydGljYWwiIT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuaXRlbXMuZm9yRWFjaCgoZnVuY3Rpb24obixpKXtlPT09dC5pdGVtSW5TdGFnZShuLGkpJiYobi5ob3Zlcj0hMCl9KSl9LGhhbmRsZUJ1dHRvbkxlYXZlOmZ1bmN0aW9uKCl7InZlcnRpY2FsIiE9PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLml0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuaG92ZXI9ITF9KSl9LHVwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5pdGVtcz10aGlzLiRjaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiJFbENhcm91c2VsSXRlbSI9PT1lLiRvcHRpb25zLm5hbWV9KSl9LHJlc2V0SXRlbVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dGhpcy5pdGVtcy5mb3JFYWNoKChmdW5jdGlvbihuLGkpe24udHJhbnNsYXRlSXRlbShpLHQuYWN0aXZlSW5kZXgsZSl9KSl9LHBsYXlTbGlkZXM6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZUluZGV4PHRoaXMuaXRlbXMubGVuZ3RoLTE/dGhpcy5hY3RpdmVJbmRleCsrOnRoaXMubG9vcCYmKHRoaXMuYWN0aXZlSW5kZXg9MCl9LHBhdXNlVGltZXI6ZnVuY3Rpb24oKXt0aGlzLnRpbWVyJiYoY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPW51bGwpfSxzdGFydFRpbWVyOmZ1bmN0aW9uKCl7dGhpcy5pbnRlcnZhbDw9MHx8IXRoaXMuYXV0b3BsYXl8fHRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXNldEludGVydmFsKHRoaXMucGxheVNsaWRlcyx0aGlzLmludGVydmFsKSl9LHNldEFjdGl2ZUl0ZW06ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PT10eXBlb2YgZSl7dmFyIHQ9dGhpcy5pdGVtcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5hbWU9PT1lfSkpO3QubGVuZ3RoPjAmJihlPXRoaXMuaXRlbXMuaW5kZXhPZih0WzBdKSl9aWYoZT1OdW1iZXIoZSksaXNOYU4oZSl8fGUhPT1NYXRoLmZsb29yKGUpKWNvbnNvbGUud2FybigiW0VsZW1lbnQgV2Fybl1bQ2Fyb3VzZWxdaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLiIpO2Vsc2V7dmFyIG49dGhpcy5pdGVtcy5sZW5ndGgsaT10aGlzLmFjdGl2ZUluZGV4O3RoaXMuYWN0aXZlSW5kZXg9ZTwwP3RoaXMubG9vcD9uLTE6MDplPj1uP3RoaXMubG9vcD8wOm4tMTplLGk9PT10aGlzLmFjdGl2ZUluZGV4JiZ0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKGkpfX0scHJldjpmdW5jdGlvbigpe3RoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZUluZGV4LTEpfSxuZXh0OmZ1bmN0aW9uKCl7dGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlSW5kZXgrMSl9LGhhbmRsZUluZGljYXRvckNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlSW5kZXg9ZX0saGFuZGxlSW5kaWNhdG9ySG92ZXI6ZnVuY3Rpb24oZSl7ImhvdmVyIj09PXRoaXMudHJpZ2dlciYmZSE9PXRoaXMuYWN0aXZlSW5kZXgmJih0aGlzLmFjdGl2ZUluZGV4PWUpfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy50aHJvdHRsZWRBcnJvd0NsaWNrPU5kKCkoMzAwLCEwLChmdW5jdGlvbih0KXtlLnNldEFjdGl2ZUl0ZW0odCl9KSksdGhpcy50aHJvdHRsZWRJbmRpY2F0b3JIb3Zlcj1OZCgpKDMwMCwoZnVuY3Rpb24odCl7ZS5oYW5kbGVJbmRpY2F0b3JIb3Zlcih0KX0pKX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy51cGRhdGVJdGVtcygpLHRoaXMuJG5leHRUaWNrKChmdW5jdGlvbigpe09iamVjdChlaVsiYWRkUmVzaXplTGlzdGVuZXIiXSkoZS4kZWwsZS5yZXNldEl0ZW1Qb3NpdGlvbiksZS5pbml0aWFsSW5kZXg8ZS5pdGVtcy5sZW5ndGgmJmUuaW5pdGlhbEluZGV4Pj0wJiYoZS5hY3RpdmVJbmRleD1lLmluaXRpYWxJbmRleCksZS5zdGFydFRpbWVyKCl9KSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRlbCYmT2JqZWN0KGVpWyJyZW1vdmVSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRlbCx0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKSx0aGlzLnBhdXNlVGltZXIoKX19LCRkPVJkLHpkPXMoJGQsT2QsUGQsITEsbnVsbCxudWxsLG51bGwpO3pkLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jYXJvdXNlbC9zcmMvbWFpbi52dWUiO3ZhciBCZD16ZC5leHBvcnRzO0JkLmluc3RhbGw9ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoQmQubmFtZSxCZCl9O3ZhciBGZD1CZCxWZD17dmVydGljYWw6e29mZnNldDoib2Zmc2V0SGVpZ2h0IixzY3JvbGw6InNjcm9sbFRvcCIsc2Nyb2xsU2l6ZToic2Nyb2xsSGVpZ2h0IixzaXplOiJoZWlnaHQiLGtleToidmVydGljYWwiLGF4aXM6IlkiLGNsaWVudDoiY2xpZW50WSIsZGlyZWN0aW9uOiJ0b3AifSxob3Jpem9udGFsOntvZmZzZXQ6Im9mZnNldFdpZHRoIixzY3JvbGw6InNjcm9sbExlZnQiLHNjcm9sbFNpemU6InNjcm9sbFdpZHRoIixzaXplOiJ3aWR0aCIsa2V5OiJob3Jpem9udGFsIixheGlzOiJYIixjbGllbnQ6ImNsaWVudFgiLGRpcmVjdGlvbjoibGVmdCJ9fTtmdW5jdGlvbiBqZChlKXt2YXIgdD1lLm1vdmUsbj1lLnNpemUsaT1lLmJhcixyPXt9LG89InRyYW5zbGF0ZSIraS5heGlzKyIoIit0KyIlKSI7cmV0dXJuIHJbaS5zaXplXT1uLHIudHJhbnNmb3JtPW8sci5tc1RyYW5zZm9ybT1vLHIud2Via2l0VHJhbnNmb3JtPW8scn12YXIgSGQ9e25hbWU6IkJhciIscHJvcHM6e3ZlcnRpY2FsOkJvb2xlYW4sc2l6ZTpTdHJpbmcsbW92ZTpOdW1iZXJ9LGNvbXB1dGVkOntiYXI6ZnVuY3Rpb24oKXtyZXR1cm4gVmRbdGhpcy52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIl19LHdyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcGFyZW50LndyYXB9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zaXplLG49dGhpcy5tb3ZlLGk9dGhpcy5iYXI7cmV0dXJuIGUoImRpdiIse2NsYXNzOlsiZWwtc2Nyb2xsYmFyX19iYXIiLCJpcy0iK2kua2V5XSxvbjp7bW91c2Vkb3duOnRoaXMuY2xpY2tUcmFja0hhbmRsZXJ9fSxbZSgiZGl2Iix7cmVmOiJ0aHVtYiIsY2xhc3M6ImVsLXNjcm9sbGJhcl9fdGh1bWIiLG9uOnttb3VzZWRvd246dGhpcy5jbGlja1RodW1iSGFuZGxlcn0sc3R5bGU6amQoe3NpemU6dCxtb3ZlOm4sYmFyOml9KX0pXSl9LG1ldGhvZHM6e2NsaWNrVGh1bWJIYW5kbGVyOmZ1bmN0aW9uKGUpe2UuY3RybEtleXx8Mj09PWUuYnV0dG9ufHwodGhpcy5zdGFydERyYWcoZSksdGhpc1t0aGlzLmJhci5heGlzXT1lLmN1cnJlbnRUYXJnZXRbdGhpcy5iYXIub2Zmc2V0XS0oZVt0aGlzLmJhci5jbGllbnRdLWUuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dKSl9LGNsaWNrVHJhY2tIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PU1hdGguYWJzKGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0tZVt0aGlzLmJhci5jbGllbnRdKSxuPXRoaXMuJHJlZnMudGh1bWJbdGhpcy5iYXIub2Zmc2V0XS8yLGk9MTAwKih0LW4pL3RoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07dGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbF09aSp0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0vMTAwfSxzdGFydERyYWc6ZnVuY3Rpb24oZSl7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmN1cnNvckRvd249ITAsT2JqZWN0KHplWyJvbiJdKShkb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlciksT2JqZWN0KHplWyJvbiJdKShkb2N1bWVudCwibW91c2V1cCIsdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKSxkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7aWYoITEhPT10aGlzLmN1cnNvckRvd24pe3ZhciB0PXRoaXNbdGhpcy5iYXIuYXhpc107aWYodCl7dmFyIG49LTEqKHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0tZVt0aGlzLmJhci5jbGllbnRdKSxpPXRoaXMuJHJlZnMudGh1bWJbdGhpcy5iYXIub2Zmc2V0XS10LHI9MTAwKihuLWkpL3RoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07dGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbF09cip0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0vMTAwfX19LG1vdXNlVXBEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5jdXJzb3JEb3duPSExLHRoaXNbdGhpcy5iYXIuYXhpc109MCxPYmplY3QoemVbIm9mZiJdKShkb2N1bWVudCwibW91c2Vtb3ZlIix0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlciksZG9jdW1lbnQub25zZWxlY3RzdGFydD1udWxsfX0sZGVzdHJveWVkOmZ1bmN0aW9uKCl7T2JqZWN0KHplWyJvZmYiXSkoZG9jdW1lbnQsIm1vdXNldXAiLHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcil9fSxXZD17bmFtZToiRWxTY3JvbGxiYXIiLGNvbXBvbmVudHM6e0JhcjpIZH0scHJvcHM6e25hdGl2ZTpCb29sZWFuLHdyYXBTdHlsZTp7fSx3cmFwQ2xhc3M6e30sdmlld0NsYXNzOnt9LHZpZXdTdHlsZTp7fSxub3Jlc2l6ZTpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDoiZGl2In19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZVdpZHRoOiIwIixzaXplSGVpZ2h0OiIwIixtb3ZlWDowLG1vdmVZOjB9fSxjb21wdXRlZDp7d3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLndyYXB9fSxyZW5kZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dnIoKSgpLG49dGhpcy53cmFwU3R5bGU7aWYodCl7dmFyIGk9Ii0iK3QrInB4IixyPSJtYXJnaW4tYm90dG9tOiAiK2krIjsgbWFyZ2luLXJpZ2h0OiAiK2krIjsiO0FycmF5LmlzQXJyYXkodGhpcy53cmFwU3R5bGUpPyhuPU9iamVjdCh5WyJ0b09iamVjdCJdKSh0aGlzLndyYXBTdHlsZSksbi5tYXJnaW5SaWdodD1uLm1hcmdpbkJvdHRvbT1pKToic3RyaW5nIj09PXR5cGVvZiB0aGlzLndyYXBTdHlsZT9uKz1yOm49cn12YXIgbz1lKHRoaXMudGFnLHtjbGFzczpbImVsLXNjcm9sbGJhcl9fdmlldyIsdGhpcy52aWV3Q2xhc3NdLHN0eWxlOnRoaXMudmlld1N0eWxlLHJlZjoicmVzaXplIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCksYT1lKCJkaXYiLHtyZWY6IndyYXAiLHN0eWxlOm4sb246e3Njcm9sbDp0aGlzLmhhbmRsZVNjcm9sbH0sY2xhc3M6W3RoaXMud3JhcENsYXNzLCJlbC1zY3JvbGxiYXJfX3dyYXAiLHQ/IiI6ImVsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQiXX0sW1tvXV0pLHM9dm9pZCAwO3JldHVybiBzPXRoaXMubmF0aXZlP1tlKCJkaXYiLHtyZWY6IndyYXAiLGNsYXNzOlt0aGlzLndyYXBDbGFzcywiZWwtc2Nyb2xsYmFyX193cmFwIl0sc3R5bGU6bn0sW1tvXV0pXTpbYSxlKEhkLHthdHRyczp7bW92ZTp0aGlzLm1vdmVYLHNpemU6dGhpcy5zaXplV2lkdGh9fSksZShIZCx7YXR0cnM6e3ZlcnRpY2FsOiEwLG1vdmU6dGhpcy5tb3ZlWSxzaXplOnRoaXMuc2l6ZUhlaWdodH19KV0sZSgiZGl2Iix7Y2xhc3M6ImVsLXNjcm9sbGJhciJ9LHMpfSxtZXRob2RzOntoYW5kbGVTY3JvbGw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndyYXA7dGhpcy5tb3ZlWT0xMDAqZS5zY3JvbGxUb3AvZS5jbGllbnRIZWlnaHQsdGhpcy5tb3ZlWD0xMDAqZS5zY3JvbGxMZWZ0L2UuY2xpZW50V2lkdGh9LHVwZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXZvaWQgMCx0PXZvaWQgMCxuPXRoaXMud3JhcDtuJiYoZT0xMDAqbi5jbGllbnRIZWlnaHQvbi5zY3JvbGxIZWlnaHQsdD0xMDAqbi5jbGllbnRXaWR0aC9uLnNjcm9sbFdpZHRoLHRoaXMuc2l6ZUhlaWdodD1lPDEwMD9lKyIlIjoiIix0aGlzLnNpemVXaWR0aD10PDEwMD90KyIlIjoiIil9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5uYXRpdmV8fCh0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZSksIXRoaXMubm9yZXNpemUmJk9iamVjdChlaVsiYWRkUmVzaXplTGlzdGVuZXIiXSkodGhpcy4kcmVmcy5yZXNpemUsdGhpcy51cGRhdGUpKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMubmF0aXZlfHwhdGhpcy5ub3Jlc2l6ZSYmT2JqZWN0KGVpWyJyZW1vdmVSZXNpemVMaXN0ZW5lciJdKSh0aGlzLiRyZWZzLnJlc2l6ZSx0aGlzLnVwZGF0ZSl9LGluc3RhbGw6ZnVuY3Rpb24oZSl7ZS5jb21wb25lbnQoV2QubmFtZSxXZCl9fSxHZD1XZCxVZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1lLiRjcmVhdGVFbGVtZW50LG49ZS5fc2VsZi5fY3x8dDtyZXR1cm4gbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5yZWFkeSxleHByZXNzaW9uOiJyZWFkeSJ9XSxzdGF0aWNDbGFzczoiZWwtY2Fyb3VzZWxfX2l0ZW0iLGNsYXNzOnsiaXMtYWN0aXZlIjplLmFjdGl2ZSwiZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQiOiJjYXJkIj09PWUuJHBhcmVudC50eXBlLCJpcy1pbi1zdGFnZSI6ZS5pblN0YWdlLCJpcy1ob3ZlciI6ZS5ob3ZlciwiaXMtYW5pbWF0aW5nIjplLmFuaW1hdGluZ30sc3R5bGU6ZS5pdGVtU3R5bGUsb246e2NsaWNrOmUuaGFuZGxlSXRlbUNsaWNrfX0sWyJjYXJkIj09PWUuJHBhcmVudC50eXBlP24oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJzaG93IixyYXdOYW1lOiJ2LXNob3ciLHZhbHVlOiFlLmFjdGl2ZSxleHByZXNzaW9uOiIhYWN0aXZlIn1dLHN0YXRpY0NsYXNzOiJlbC1jYXJvdXNlbF9fbWFzayJ9KTplLl9lKCksZS5fdCgiZGVmYXVsdCIpXSwyKX0scWQ9W107VWQuX3dpdGhTdHJpcHBlZD0hMDt2YXIgWWQ9LjgzLFhkPXtuYW1lOiJFbENhcm91c2VsSXRlbSIscHJvcHM6e25hbWU6U3RyaW5nLGxhYmVsOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OiIifX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntob3ZlcjohMSx0cmFuc2xhdGU6MCxzY2FsZToxLGFjdGl2ZTohMSxyZWFkeTohMSxpblN0YWdlOiExLGFuaW1hdGluZzohMX19LG1ldGhvZHM6e3Byb2Nlc3NJbmRleDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDA9PT10JiZlPT09bi0xPy0xOnQ9PT1uLTEmJjA9PT1lP246ZTx0LTEmJnQtZT49bi8yP24rMTplPnQrMSYmZS10Pj1uLzI/LTI6ZX0sY2FsY0NhcmRUcmFuc2xhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLiRwYXJlbnQuJGVsLm9mZnNldFdpZHRoO3JldHVybiB0aGlzLmluU3RhZ2U/biooKDItWWQpKihlLXQpKzEpLzQ6ZTx0Py0oMStZZCkqbi80OigzK1lkKSpuLzR9LGNhbGNUcmFuc2xhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMuJHBhcmVudC4kZWxbbj8ib2Zmc2V0SGVpZ2h0Ijoib2Zmc2V0V2lkdGgiXTtyZXR1cm4gaSooZS10KX0sdHJhbnNsYXRlSXRlbTpmdW5jdGlvbihlLHQsbil7dmFyIGk9dGhpcy4kcGFyZW50LnR5cGUscj10aGlzLnBhcmVudERpcmVjdGlvbixvPXRoaXMuJHBhcmVudC5pdGVtcy5sZW5ndGg7aWYoImNhcmQiIT09aSYmdm9pZCAwIT09biYmKHRoaXMuYW5pbWF0aW5nPWU9PT10fHxlPT09biksZSE9PXQmJm8+MiYmdGhpcy4kcGFyZW50Lmxvb3AmJihlPXRoaXMucHJvY2Vzc0luZGV4KGUsdCxvKSksImNhcmQiPT09aSkidmVydGljYWwiPT09ciYmY29uc29sZS53YXJuKCJbRWxlbWVudCBXYXJuXVtDYXJvdXNlbF12ZXJ0aWNhbCBkaXJlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBjYXJkIG1vZGUiKSx0aGlzLmluU3RhZ2U9TWF0aC5yb3VuZChNYXRoLmFicyhlLXQpKTw9MSx0aGlzLmFjdGl2ZT1lPT09dCx0aGlzLnRyYW5zbGF0ZT10aGlzLmNhbGNDYXJkVHJhbnNsYXRlKGUsdCksdGhpcy5zY2FsZT10aGlzLmFjdGl2ZT8xOllkO2Vsc2V7dGhpcy5hY3RpdmU9ZT09PXQ7dmFyIGE9InZlcnRpY2FsIj09PXI7dGhpcy50cmFuc2xhdGU9dGhpcy5jYWxjVHJhbnNsYXRlKGUsdCxhKSx0aGlzLnNjYWxlPTF9dGhpcy5yZWFkeT0hMH0saGFuZGxlSXRlbUNsaWNrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcGFyZW50O2lmKGUmJiJjYXJkIj09PWUudHlwZSl7dmFyIHQ9ZS5pdGVtcy5pbmRleE9mKHRoaXMpO2Uuc2V0QWN0aXZlSXRlbSh0KX19fSxjb21wdXRlZDp7cGFyZW50RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHBhcmVudC5kaXJlY3Rpb259LGl0ZW1TdHlsZTpmdW5jdGlvbigpe3ZhciBlPSJ2ZXJ0aWNhbCI9PT10aGlzLnBhcmVudERpcmVjdGlvbj8idHJhbnNsYXRlWSI6InRyYW5zbGF0ZVgiLHQ9ZSsiKCIrdGhpcy50cmFuc2xhdGUrInB4KSBzY2FsZSgiK3RoaXMuc2NhbGUrIikiLG49e3RyYW5zZm9ybTp0fTtyZXR1cm4gT2JqZWN0KHlbImF1dG9wcmVmaXhlciJdKShuKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC51cGRhdGVJdGVtcygpfSxkZXN0cm95ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC51cGRhdGVJdGVtcygpfX0sS2Q9WGQsWmQ9cyhLZCxVZCxxZCwhMSxudWxsLG51bGwsbnVsbCk7WmQub3B0aW9ucy5fX2ZpbGU9InBhY2thZ2VzL2Nhcm91c2VsL3NyYy9pdGVtLnZ1ZSI7dmFyIEpkPVpkLmV4cG9ydHM7SmQuaW5zdGFsbD1mdW5jdGlvbihlKXtlLmNvbXBvbmVudChKZC5uYW1lLEpkKX07dmFyIFFkPUpkLGVmPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuJGNyZWF0ZUVsZW1lbnQsbj1lLl9zZWxmLl9jfHx0O3JldHVybiBuKCJkaXYiLHtzdGF0aWNDbGFzczoiZWwtY29sbGFwc2UiLGF0dHJzOntyb2xlOiJ0YWJsaXN0IiwiYXJpYS1tdWx0aXNlbGVjdGFibGUiOiJ0cnVlIn19LFtlLl90KCJkZWZhdWx0IildLDIpfSx0Zj1bXTtlZi5fd2l0aFN0cmlwcGVkPSEwO3ZhciBuZj17bmFtZToiRWxDb2xsYXBzZSIsY29tcG9uZW50TmFtZToiRWxDb2xsYXBzZSIscHJvcHM6e2FjY29yZGlvbjpCb29sZWFuLHZhbHVlOnt0eXBlOltBcnJheSxTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuW119fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnthY3RpdmVOYW1lczpbXS5jb25jYXQodGhpcy52YWx1ZSl9fSxwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue2NvbGxhcHNlOnRoaXN9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmVOYW1lcz1bXS5jb25jYXQoZSl9fSxtZXRob2RzOntzZXRBY3RpdmVOYW1lczpmdW5jdGlvbihlKXtlPVtdLmNvbmNhdChlKTt2YXIgdD10aGlzLmFjY29yZGlvbj9lWzBdOmU7dGhpcy5hY3RpdmVOYW1lcz1lLHRoaXMuJGVtaXQoImlucHV0Iix0KSx0aGlzLiRlbWl0KCJjaGFuZ2UiLHQpfSxoYW5kbGVJdGVtQ2xpY2s6ZnVuY3Rpb24oZSl7aWYodGhpcy5hY2NvcmRpb24pdGhpcy5zZXRBY3RpdmVOYW1lcyghdGhpcy5hY3RpdmVOYW1lc1swXSYmMCE9PXRoaXMuYWN0aXZlTmFtZXNbMF18fHRoaXMuYWN0aXZlTmFtZXNbMF0hPT1lLm5hbWU/ZS5uYW1lOiIiKTtlbHNle3ZhciB0PXRoaXMuYWN0aXZlTmFtZXMuc2xpY2UoMCksbj10LmluZGV4T2YoZS5uYW1lKTtuPi0xP3Quc3BsaWNlKG4sMSk6dC5wdXNoKGUubmFtZSksdGhpcy5zZXRBY3RpdmVOYW1lcyh0KX19fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kb24oIml0ZW0tY2xpY2siLHRoaXMuaGFuZGxlSXRlbUNsaWNrKX19LHJmPW5mLG9mPXMocmYsZWYsdGYsITEsbnVsbCxudWxsLG51bGwpO29mLm9wdGlvbnMuX19maWxlPSJwYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UudnVlIjt2YXIgYWY9b2YuZXhwb3J0czthZi5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KGFmLm5hbWUsYWYpfTt2YXIgc2Y9YWYsbGY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZS1pdGVtIixjbGFzczp7ImlzLWFjdGl2ZSI6ZS5pc0FjdGl2ZSwiaXMtZGlzYWJsZWQiOmUuZGlzYWJsZWR9fSxbbigiZGl2Iix7YXR0cnM6e3JvbGU6InRhYiIsImFyaWEtZXhwYW5kZWQiOmUuaXNBY3RpdmUsImFyaWEtY29udHJvbHMiOiJlbC1jb2xsYXBzZS1jb250ZW50LSIrZS5pZCwiYXJpYS1kZXNjcmliZWRieSI6ImVsLWNvbGxhcHNlLWNvbnRlbnQtIitlLmlkfX0sW24oImRpdiIse3N0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZS1pdGVtX19oZWFkZXIiLGNsYXNzOntmb2N1c2luZzplLmZvY3VzaW5nLCJpcy1hY3RpdmUiOmUuaXNBY3RpdmV9LGF0dHJzOntyb2xlOiJidXR0b24iLGlkOiJlbC1jb2xsYXBzZS1oZWFkLSIrZS5pZCx0YWJpbmRleDplLmRpc2FibGVkP3ZvaWQgMDowfSxvbjp7Y2xpY2s6ZS5oYW5kbGVIZWFkZXJDbGljayxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4hKCJidXR0b24iaW4gdCkmJmUuX2sodC5rZXlDb2RlLCJzcGFjZSIsMzIsdC5rZXksWyIgIiwiU3BhY2ViYXIiXSkmJmUuX2sodC5rZXlDb2RlLCJlbnRlciIsMTMsdC5rZXksIkVudGVyIik/bnVsbDoodC5zdG9wUHJvcGFnYXRpb24oKSxlLmhhbmRsZUVudGVyQ2xpY2sodCkpfSxmb2N1czplLmhhbmRsZUZvY3VzLGJsdXI6ZnVuY3Rpb24odCl7ZS5mb2N1c2luZz0hMX19fSxbZS5fdCgidGl0bGUiLFtlLl92KGUuX3MoZS50aXRsZSkpXSksbigiaSIse3N0YXRpY0NsYXNzOiJlbC1jb2xsYXBzZS1pdGVtX19hcnJvdyBlbC1pY29uLWFycm93LXJpZ2h0IixjbGFzczp7ImlzLWFjdGl2ZSI6ZS5pc0FjdGl2ZX19KV0sMildKSxuKCJlbC1jb2xsYXBzZS10cmFuc2l0aW9uIixbbigiZGl2Iix7ZGlyZWN0aXZlczpbe25hbWU6InNob3ciLHJhd05hbWU6InYtc2hvdyIsdmFsdWU6ZS5pc0FjdGl2ZSxleHByZXNzaW9uOiJpc0FjdGl2ZSJ9XSxzdGF0aWNDbGFzczoiZWwtY29sbGFwc2UtaXRlbV9fd3JhcCIsYXR0cnM6e3JvbGU6InRhYnBhbmVsIiwiYXJpYS1oaWRkZW4iOiFlLmlzQWN0aXZlLCJhcmlhLWxhYmVsbGVkYnkiOiJlbC1jb2xsYXBzZS1oZWFkLSIrZS5pZCxpZDoiZWwtY29sbGFwc2UtY29udGVudC0iK2UuaWR9fSxbbigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNvbGxhcHNlLWl0ZW1fX2NvbnRlbnQifSxbZS5fdCgiZGVmYXVsdCIpXSwyKV0pXSldLDEpfSxjZj1bXTtsZi5fd2l0aFN0cmlwcGVkPSEwO3ZhciB1Zj17bmFtZToiRWxDb2xsYXBzZUl0ZW0iLGNvbXBvbmVudE5hbWU6IkVsQ29sbGFwc2VJdGVtIixtaXhpbnM6W0UuYV0sY29tcG9uZW50czp7RWxDb2xsYXBzZVRyYW5zaXRpb246cWUuYX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjb250ZW50V3JhcFN0eWxlOntoZWlnaHQ6ImF1dG8iLGRpc3BsYXk6ImJsb2NrIn0sY29udGVudEhlaWdodDowLGZvY3VzaW5nOiExLGlzQ2xpY2s6ITEsaWQ6T2JqZWN0KHlbImdlbmVyYXRlSWQiXSkoKX19LGluamVjdDpbImNvbGxhcHNlIl0scHJvcHM6e3RpdGxlOlN0cmluZyxuYW1lOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VpZH19LGRpc2FibGVkOkJvb2xlYW59LGNvbXB1dGVkOntpc0FjdGl2ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbGxhcHNlLmFjdGl2ZU5hbWVzLmluZGV4T2YodGhpcy5uYW1lKT4tMX19LG1ldGhvZHM6e2hhbmRsZUZvY3VzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuaXNDbGljaz9lLmlzQ2xpY2s9ITE6ZS5mb2N1c2luZz0hMH0pLDUwKX0saGFuZGxlSGVhZGVyQ2xpY2s6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkfHwodGhpcy5kaXNwYXRjaCgiRWxDb2xsYXBzZSIsIml0ZW0tY2xpY2siLHRoaXMpLHRoaXMuZm9jdXNpbmc9ITEsdGhpcy5pc0NsaWNrPSEwKX0saGFuZGxlRW50ZXJDbGljazpmdW5jdGlvbigpe3RoaXMuZGlzcGF0Y2goIkVsQ29sbGFwc2UiLCJpdGVtLWNsaWNrIix0aGlzKX19fSxoZj11ZixkZj1zKGhmLGxmLGNmLCExLG51bGwsbnVsbCxudWxsKTtkZi5vcHRpb25zLl9fZmlsZT0icGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlIjt2YXIgZmY9ZGYuZXhwb3J0cztmZi5pbnN0YWxsPWZ1bmN0aW9uKGUpe2UuY29tcG9uZW50KGZmLm5hbWUsZmYpfTt2YXIgcGY9ZmYsbWY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZS4kY3JlYXRlRWxlbWVudCxuPWUuX3NlbGYuX2N8fHQ7cmV0dXJuIG4oImRpdiIse2RpcmVjdGl2ZXM6W3tuYW1lOiJjbGlja291dHNpZGUiLHJhd05hbWU6InYtY2xpY2tvdXRzaWRlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBlLnRvZ2dsZURyb3BEb3duVmlzaWJsZSghMSl9LGV4cHJlc3Npb246IigpID0+IHRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSkifV0scmVmOiJyZWZlcmVuY2UiLGNsYXNzOlsiZWwtY2FzY2FkZXIiLGUucmVhbFNpemUmJiJlbC1jYXNjYWRlci0tIitlLnJlYWxTaXplLHsiaXMtZGlzYWJsZWQiOmUuaXNEaXNhYmxlZH1dLG9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKHQpe2UuaW5wdXRIb3Zlcj0hMH0sbW91c2VsZWF2ZTpmdW5jdGlvbih0KXtlLmlucHV0SG92ZXI9ITF9LGNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUudG9nZ2xlRHJvcERvd25WaXNpYmxlKCFlLnJlYWRvbmx5fHx2b2lkIDApfSxrZXlkb3duOmUuaGFuZGxlS2V5RG93bn19LFtuKCJlbC1pbnB1dCIse3JlZjoiaW5wdXQiLGNsYXNzOnsiaXMtZm9jdXMiOmUuZHJvcERvd25WaXNpYmxlfSxhdHRyczp7c2l6ZTplLnJlYWxTaXplLHBsYWNlaG9sZGVyOmUucGxhY2Vob2xkZXIscmVhZG9ubHk6ZS5yZWFkb25seSxkaXNhYmxlZDplLmlzRGlzYWJsZWQsInZhbGlkYXRlLWV2ZW50IjohMX0sb246e2ZvY3VzOmUuaGFuZGxlRm9jdXMsYmx1cjplLmhhbmRsZUJsdXIsaW5wdXQ6ZS5oYW5kbGVJbnB1dH0sbW9kZWw6e3ZhbHVlOmUubXVsdGlwbGU/ZS5wcmVzZW50VGV4dDplLmlucHV0VmFsdWUsY2FsbGJhY2s6ZnVuY3Rpb24odCl7ZS5tdWx0aXBsZT9lLnByZXNlbnRUZXh0OmUuaW5wdXRWYWx1ZT10fSxleHByZXNzaW9uOiJtdWx0aXBsZSA/IHByZXNlbnRUZXh0IDogaW5wdXRWYWx1ZSJ9fSxbbigidGVtcGxhdGUiLHtzbG90OiJzdWZmaXgifSxbZS5jbGVhckJ0blZpc2libGU/bigiaSIse2tleToiY2xlYXIiLHN0YXRpY0NsYXNzOiJlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZSIsb246e2NsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0LnN0b3BQcm9wYWdhdGlvbigpLGUuaGFuZGxlQ2xlYXIodCl9fX0pOm4oImkiLHtrZXk6ImFycm93LWRvd24iLGNsYXNzOlsiZWwtaW5wdXRfX2ljb24iLCJlbC1pY29uLWFycm93LWRvd24iLGUuZHJvcERvd25WaXNpYmxlJiYiaXMtcmV2ZXJzZSJdLG9uOntjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLGUudG9nZ2xlRHJvcERvd25WaXNpYmxlKCl9fX0pXSldLDIpLGUubXVsdGlwbGU/bigiZGl2Iix7c3RhdGljQ2xhc3M6ImVsLWNhc2NhZGVyX190YWdzIn0sW2UuX2woZS5wcmVzZW50VGFncywoZnVuY3Rpb24odCl7cmV0dXJuIG4oImVsLXRhZyIse2tleTp0LmtleSxhdHRyczo="}},"time_used":646,"timings":{"blocked":-1,"dns":0,"connect":0,"send":0,"wait":646,"receive":0,"ssl":0},"alerts":{"ids":null,"analyzer":[{"sensor_name":"dns4eu","sensor_type":"DNS","title":"DNS4EU","description":"DNS4EU","scan_date":"2026-07-27","alert":"Sinkholed","trigger":"global-cryptocurrencies.com","verdict":"malicious","severity":"medium","comment":"","link":"https://www.joindns4.eu/","meta":null}],"urlquery":null}}]}
